12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #!/bin/bash
- set -e
- container=docker
- export container
- if [ $# -eq 0 ]; then
- echo >&2 'ERROR: No command specified. You probably want to run `journalctl -f`, or maybe `bash`?'
- exit 1
- fi
- if [ ! -t 0 ]; then
- echo >&2 'ERROR: TTY needs to be enabled (`docker run -t ...`).'
- exit 1
- fi
- # Change mount propagation to shared, which SystemD PID 1 would normally do
- # itself when started by the kernel. SystemD skips that when it detects it is
- # running in a container.
- mount --make-rshared /
- env > /etc/docker-entrypoint-env
- cat > /etc/systemd/system/docker-entrypoint.target << EOF
- [Unit]
- Description=the target for docker-entrypoint.service
- Requires=docker-entrypoint.service systemd-logind.service systemd-user-sessions.service
- EOF
- quoted_args="$(printf " %q" "${@}")"
- echo "${quoted_args}" > /etc/docker-entrypoint-cmd
- cat > /etc/systemd/system/docker-entrypoint.service << EOF
- [Unit]
- Description=docker-entrypoint.service
- [Service]
- ExecStart=/bin/bash -exc "source /etc/docker-entrypoint-cmd"
- # EXIT_STATUS is either an exit code integer or a signal name string, see systemd.exec(5)
- ExecStopPost=/bin/bash -ec "if echo \${EXIT_STATUS} | grep [A-Z] > /dev/null; then echo >&2 \"got signal \${EXIT_STATUS}\"; systemctl exit \$(( 128 + \$( kill -l \${EXIT_STATUS} ) )); else systemctl exit \${EXIT_STATUS}; fi"
- StandardInput=tty-force
- StandardOutput=inherit
- StandardError=inherit
- WorkingDirectory=$(pwd)
- EnvironmentFile=/etc/docker-entrypoint-env
- [Install]
- WantedBy=multi-user.target
- EOF
- systemctl mask systemd-firstboot.service systemd-udevd.service
- systemctl unmask systemd-logind
- systemctl enable docker-entrypoint.service
- systemd=
- if [ -x /lib/systemd/systemd ]; then
- systemd=/lib/systemd/systemd
- elif [ -x /usr/lib/systemd/systemd ]; then
- systemd=/usr/lib/systemd/systemd
- elif [ -x /sbin/init ]; then
- systemd=/sbin/init
- else
- echo >&2 'ERROR: systemd is not installed'
- exit 1
- fi
- systemd_args="--show-status=false --unit=docker-entrypoint.target"
- echo "$0: starting $systemd $systemd_args"
- exec $systemd $systemd_args
|