Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Failed to connect to bus: No such file or directory" when running systemctl --user #6

Open
coaxial opened this issue Dec 5, 2020 · 0 comments

Comments

@coaxial
Copy link

coaxial commented Dec 5, 2020

Using this image in molecule, with the following molecule.yml file:

---
dependency:
  name: galaxy
  options:
    role-file: requirements.yml
driver:
  name: docker
platforms:
  # From https://github.com/geerlingguy/molecule-playbook-testing
  - name: ubuntu2004
    image: geerlingguy/docker-ubuntu2004-ansible:latest
    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup:ro
    # command: ${MOLECULE_DOCKER_COMMAND:-"/usr/sbin/init"}
    # command: ""
    command: "/usr/lib/systemd/systemd"
    # privileged is necessary for systemd tasks
    privileged: true
    pre_build_image: false
provisioner:
  name: ansible
  inventory:
    host_vars:
      ubuntu2004:
        ansible_user: ansible
        ansible_env:
          USER: ansible
verifier:
  name: testinfra
lint: |
  set -e
  yamllint .
  ansible-lint .

and this Dockerfile.j2 (to add the ansible user:

# Molecule managed

{% if item.registry is defined %}
FROM {{ item.registry.url }}/{{ item.image }}
{% else %}
FROM {{ item.image }}
{% endif %}

{% if item.env is defined %}
{% for var, value in item.env.items() %}
{% if value %}
ENV {{ var }} {{ value }}
{% endif %}
{% endfor %}
{% endif %}

RUN if [ $(command -v apt-get) ]; then export DEBIAN_FRONTEND=noninteractive && apt-get update && apt-get install -y python3 sudo bash ca-certificates iproute2 python3-apt aptitude && apt-get clean && rm -rf /var/lib/apt/lists/*; \
    elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install /usr/bin/python3 /usr/bin/python3-config /usr/bin/dnf-3 sudo bash iproute && dnf clean all; \
    elif [ $(command -v yum) ]; then yum makecache fast && yum install -y /usr/bin/python /usr/bin/python2-config sudo yum-plugin-ovl bash iproute && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
    elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python3 sudo bash iproute2 && zypper clean -a; \
    elif [ $(command -v apk) ]; then apk update && apk add --no-cache python3 sudo bash ca-certificates; \
    elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python3 sudo bash ca-certificates iproute2 && xbps-remove -O; fi

# Create `ansible` user with sudo permissions and membership in `DEPLOY_GROUP`
ENV ANSIBLE_USER=ansible SUDO_GROUP=sudo
RUN set -xe \
  && groupadd -r ${ANSIBLE_USER} \
  && useradd -m -g ${ANSIBLE_USER} ${ANSIBLE_USER} \
  && usermod -aG ${SUDO_GROUP} ${ANSIBLE_USER} \
  && sed -i "/^%${SUDO_GROUP}/s/ALL\$/NOPASSWD:ALL/g" /etc/sudoers

I then try to run this task:

- task:
  systemd:
    name: myunit.timer
    scope: user
    enabled: true
    state: started

Which fails:

    TASK [Enable and start automatic backups] **************************************
    task path: /home/coaxial/dotfiles/ansible-playbook/tasks/backups.yml:39
    redirecting (type: connection) ansible.builtin.docker to community.general.docker
    <ubuntu2004> ESTABLISH DOCKER CONNECTION FOR USER: ansible
    <ubuntu2004> EXEC ['/usr/bin/docker', b'exec', b'-u', 'ansible', b'-i', 'ubuntu2004', '/bin/sh', '-c', "/bin/sh -c 'echo ~ansible && sleep 0'"]
    <ubuntu2004> EXEC ['/usr/bin/docker', b'exec', b'-u', 'ansible', b'-i', 'ubuntu2004', '/bin/sh', '-c', '/bin/sh -c \'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1607193789.149203-1414406-197663461612289 `" && echo ansible-tmp-1607193789.149203-1414406-197663461612289="` echo /home/ansible/.ansible/tmp/ansible-tmp-1607193789.149203-1414406-197663461612289 `" ) && sleep 0\'']
    Using module file /home/coaxial/.virtualenvs/ansible/lib/python3.8/site-packages/ansible/modules/systemd.py
    <ubuntu2004> PUT /home/coaxial/.ansible/tmp/ansible-local-1411952lk472l08/tmpfevv6a53 TO /home/ansible/.ansible/tmp/ansible-tmp-1607193789.149203-1414406-197663461612289/AnsiballZ_systemd.py
    <ubuntu2004> EXEC ['/usr/bin/docker', b'exec', b'-u', 'ansible', b'-i', 'ubuntu2004', '/bin/sh', '-c', "/bin/sh -c 'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1607193789.149203-1414406-197663461612289/ /home/ansible/.ansible/tmp/ansible-tmp-1607193789.149203-1414406-197663461612289/AnsiballZ_systemd.py && sleep 0'"]
    <ubuntu2004> EXEC ['/usr/bin/docker', b'exec', b'-u', 'ansible', b'-i', 'ubuntu2004', '/bin/sh', '-c', "/bin/sh -c 'MAIL=/var/mail/ansible USER=ansible XDG_SESSION_TYPE=tty HOME=/home/ansible DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus NVM_DIR=/home/ansible/.nvm LOGNAME=ansible XDG_SESSION_CLASS=user TERM=xterm XDG_SESSION_ID=c3 PATH=:/home/ansible/.cargo/bin:/home/ansible/bin:/home/ansible/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/ansible/.rvm/bin:/usr/local/go/bin:/home/ansible/go/bin XDG_RUNTIME_DIR=/run/user/1000 LANG=en_US SHELL=/bin/sh PWD=/home/ansible LC_ALL=en_US.UTF-8 EDITOR=/usr/bin/nvim /usr/bin/python3 /home/ansible/.ansible/tmp/ansible-tmp-1607193789.149203-1414406-197663461612289/AnsiballZ_systemd.py && sleep 0'"]
    <ubuntu2004> EXEC ['/usr/bin/docker', b'exec', b'-u', 'ansible', b'-i', 'ubuntu2004', '/bin/sh', '-c', "/bin/sh -c 'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1607193789.149203-1414406-197663461612289/ > /dev/null 2>&1 && sleep 0'"]
fatal: [ubuntu2004]: FAILED! => {
    "changed": false,
    "cmd": "/usr/bin/systemctl --user",
    "invocation": {
        "module_args": {
            "daemon_reexec": false,
            "daemon_reload": false,
            "enabled": true,
            "force": null,
            "masked": null,
            "name": "borgmatic.timer",
            "no_block": false,
            "scope": "user",
            "state": "started",
            "user": null
        }
    },
    "msg": "Failed to connect to bus: No such file or directory",
    "rc": 1,
    "stderr": "Failed to connect to bus: No such file or directory\n",
    "stderr_lines": [
        "Failed to connect to bus: No such file or directory"
    ],
    "stdout": "",
    "stdout_lines": []
}

Furthermore:

coaxial@x230 $ molecule login
root@ubuntu2004:/# sudo -u ansible systemctl --user
Failed to connect to bus: No such file or directory
root@ubuntu2004:/# su - ansible
$ systemctl --user
  UNIT                                       LOAD   ACTIVE     SUB       DESCRIP>
  dev-mapper-ubuntu\x2d\x2dvg\x2droot.device loaded activating tentative /dev/ma>
  -.mount                                    loaded active     mounted   Root Mo>
  dev-hugepages.mount                        loaded active     mounted   /dev/hu>
  dev-mqueue.mount                           loaded active     mounted   /dev/mq>
  etc-hostname.mount                         loaded active     mounted   /etc/ho>
  etc-hosts.mount                            loaded active     mounted   /etc/ho>
  etc-resolv.conf.mount                      loaded active     mounted   /etc/re>
  run-user-1000.mount                        loaded active     mounted   /run/us>
  sys-fs-fuse-connections.mount              loaded active     mounted   /sys/fs>
  sys-kernel-config.mount                    loaded active     mounted   /sys/ke>
  sys-kernel-debug.mount                     loaded active     mounted   /sys/ke>
  sys-kernel-tracing.mount                   loaded active     mounted   /sys/ke>
  tmp.mount                                  loaded active     mounted   /tmp   >
  init.scope                                 loaded active     running   System >
  -.slice                                    loaded active     active    Root Sl>
  dbus.socket                                loaded active     listening D-Bus U>
  pk-debconf-helper.socket                   loaded active     listening debconf>
  basic.target                               loaded active     active    Basic S>
  default.target                             loaded active     active    Main Us>
  paths.target                               loaded active     active    Paths  >
  sockets.target                             loaded active     active    Sockets>
  timers.target                              loaded active     active    Timers >

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

22 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
$ env
MAIL=/var/mail/ansible
USER=ansible
XDG_SESSION_TYPE=tty
HOME=/home/ansible
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
LOGNAME=ansible
XDG_SESSION_CLASS=user
TERM=xterm
XDG_SESSION_ID=c2
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
XDG_RUNTIME_DIR=/run/user/1000
SHELL=/bin/sh
PWD=/home/ansible
$
root@ubuntu2004:/# sudo -u ansible env
HOSTNAME=ubuntu2004
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
MAIL=/var/mail/ansible
LOGNAME=ansible
USER=ansible
HOME=/home/ansible
SHELL=/bin/sh
SUDO_COMMAND=/usr/bin/env
SUDO_USER=root
SUDO_UID=0
SUDO_GID=0

I have also tried setting DBUS_SESSION_BUS_ADDRESS: unix:path=/run/user/1000/bus for that task with environment, but it fails the same way. I then tried it again but with the whole environment as per the env command after su - ansible, and same error.

What I don't get is why is that command running directly in the container with su - ansible, but not in the task or with sudo -u ansible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant