[Buildroot] [PATCH v9 2/2] docker-engine: new package
Andrew Webster
Awebster at arcx.com
Wed Jul 27 12:51:22 UTC 2016
Thomas,
This init script is the same as the sysvinit-debian script packaged with docker, but with a few minor modifications. I won't be able to confidently answer some of your questions without doing some digging to find out why it was done that way initially, so this will be on hold for a bit.
Andrew
> From: Thomas Petazzoni [mailto:thomas.petazzoni at free-electrons.com]
> Sent: Sunday, July 24, 2016 9:29 AM
> > +++ b/package/docker-engine/docker.init
>
> Should be named S61docker
>
> > @@ -0,0 +1,89 @@
> > +#!/bin/sh
> > +
> > +BASE=docker
> > +
> > +# modify these in /etc/default/$BASE (/etc/default/docker)
> > +DOCKERD=/usr/bin/dockerd # This is the pid file managed by docker
> > +itself DOCKER_PIDFILE=/var/run/$BASE.pid # This is the pid file
> > +created/managed by start-stop-daemon
> > +DOCKER_SSD_PIDFILE=/var/run/$BASE-ssd.pid
>
> Do we really need two pidfiles ? I don't think so. If docker creates its own pidfile, then start-stop-daemon can use it.
>
> > +DOCKER_LOGFILE=/var/log/$BASE.log
> > +DOCKER_DESC="Docker"
> > +
> > +if [ -f /etc/default/$BASE ]; then
> > + . /etc/default/$BASE
> > +fi
> > +
> > +# Check docker is present
> > +if [ ! -x $DOCKERD ]; then
> > + echo "$DOCKERD not present or not executable"
> > + exit 1
> > +fi
>
> This check is not needed. If this script is present, docker is installed. Or more exactly: if dockerd is needed for this script to work, then
> this script should only be installed when the docker daemon is enabled.
>
> > +
> > +cgroupfs_mount() {
> > + # see also https://github.com/tianon/cgroupfs-mount/blob/951c38ee8d802330454bdede20d85ec1c0f8d312/cgroupfs-mount
> > + if grep -v '^#' /etc/fstab | grep -q cgroup \
> > + || [ ! -e /proc/cgroups ] \
> > + || [ ! -d /sys/fs/cgroup ]; then
> > + return
> > + fi
> > + if ! mountpoint -q /sys/fs/cgroup; then
> > + mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup
> > + fi
> > + (
> > + cd /sys/fs/cgroup
> > + for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do
> > + mkdir -p $sys
> > + if ! mountpoint -q $sys; then
> > + if ! mount -n -t cgroup -o $sys cgroup $sys; then
> > + rmdir $sys || true
> > + fi
> > + fi
> > + done
> > + )
>
> Isn't this already done by the cgroupfs-mount package ?
>
> > +}
> > +
> > +case "$1" in
> > + start)
> > + cgroupfs_mount
> > +
> > + ulimit -n 1048576
> > + ulimit -p 1048576
> > +
> > + echo "Starting $DOCKER_DESC: $BASE"
>
> Use tabs for indentation.
>
> Replace with:
>
> printf "Starting docker: "
>
> > + start-stop-daemon --start --background \
> > + --exec "$DOCKERD" \
> > + --pidfile "$DOCKER_SSD_PIDFILE" \
> > + --make-pidfile \
>
> Use the short option, like we do in other init scripts, and get rid of the start-stop-daemon pid file if docker creates one.
>
> start-stop-daemon -S -q -b -x $DOCKERD -- -p /var/run/docker.pid $DOCKER_OPTS
>
> > + -- \
> > + -p "$DOCKER_PIDFILE" \
> > + $DOCKER_OPTS \
> > + >> "$DOCKER_LOGFILE" 2>&1
>
> Is this redirect really doing something? When the --background/-b option of start-stop-daemon is used, I believe it closes the 0/1/2
> file descriptors for the child process. Unless you enable option -C:
>
> -C, --no-close
> Do not close any file descriptor when forcing the daemon into
> the background (since version 1.16.5). Used for debugging pur‐
> poses to see the process output, or to redirect file descriptors
> to log the process output. Only relevant when using --back‐
> ground.
>
> > + echo $?
>
> Replace with:
>
> [ $? = 0 ] && echo "OK" || echo "FAIL"
>
> > + ;;
> > +
> > + stop)
> > + echo "Stopping $DOCKER_DESC: $BASE"
>
> printf "Stopping docker: "
>
> > + start-stop-daemon --stop --pidfile
> > + "$DOCKER_SSD_PIDFILE" --retry 10
>
> start-stop-daemon -K -q -p /var/run/docker.pid
>
> > + echo $?
>
> [ $? = 0 ] && echo "OK" || echo "FAIL"
>
> > + ;;
> > +
> > + restart)
> > + docker_pid=`cat "$DOCKER_SSD_PIDFILE" 2>/dev/null`
> > + [ -n "$docker_pid" ] \
> > + && [ -d /proc/$docker_pid ] \
> > + && $0 stop \
> > + && sleep 1
> > + $0 start
>
> Why? Just:
>
> $0 stop
> $0 start
>
> > + ;;
> > +
> > + force-reload)
> > + $0 restart
> > + ;;
>
> Not needed.
>
> > +
> > + *)
> > + echo "Usage: service docker {start|stop|restart}"
> > + exit 1
> > + ;;
> > +esac
>
> Thanks,
>
> Thomas
> --
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux, Kernel and Android engineering http://free-electrons.com
More information about the buildroot
mailing list