[Buildroot] [PATCH v6 4/5] package/docker-engine: proper sysv init file
Romain Naour
romain.naour at gmail.com
Mon Jul 4 21:12:35 UTC 2016
Le 04/07/2016 à 21:26, Christian Stewart a écrit :
> From: Andrew Webster <awebster at arcx.com>
>
> The packaged redhat init file is not suitable for buildroot.
> This adds a customized version for buildroot.
>
> Acked-by: Christian Stewart <christian at paral.in>
> Signed-off-by: Andrew Webster <awebster at arcx.com>
> Signed-off-by: Christian Stewart <christian at paral.in>
I think patch 4/5 and 5/5 must be squashed with the patch adding docker-engine
package since the redhad init file doesn't work with Buildroot.
> ---
> package/docker-engine/docker-engine.mk | 6 +-
> package/docker-engine/docker.init | 112 +++++++++++++++++++++++++++++++++
> 2 files changed, 115 insertions(+), 3 deletions(-)
> create mode 100644 package/docker-engine/docker.init
>
> diff --git a/package/docker-engine/docker-engine.mk b/package/docker-engine/docker-engine.mk
> index 501afbc..4cb896c 100644
> --- a/package/docker-engine/docker-engine.mk
> +++ b/package/docker-engine/docker-engine.mk
> @@ -103,10 +103,10 @@ define DOCKER_ENGINE_INSTALL_INIT_SYSTEMD
> endef
>
> define DOCKER_ENGINE_INSTALL_INIT_SYSV
> - $(INSTALL) -D -m 755 $(@D)/contrib/init/sysvinit-redhat/docker \
> + $(INSTALL) -D -m 755 package/docker-engine/docker.init \
> $(TARGET_DIR)/etc/init.d/S61docker
> - $(INSTALL) -D -m 644 $(@D)/contrib/init/sysvinit-redhat/docker.sysconfig \
> - $(TARGET_DIR)/etc/sysconfig/docker.sysconfig
> + $(INSTALL) -D -m 644 $(@D)/contrib/init/sysvinit-debian/docker.default \
> + $(TARGET_DIR)/etc/default/docker
> endef
>
> define DOCKER_ENGINE_USERS
> diff --git a/package/docker-engine/docker.init b/package/docker-engine/docker.init
> new file mode 100644
> index 0000000..a751551
> --- /dev/null
> +++ b/package/docker-engine/docker.init
> @@ -0,0 +1,112 @@
> +#!/bin/sh
> +set -e
Other init script doesn't set exit on error.
> +
> +### BEGIN INIT INFO
> +# Provides: docker
> +# Required-Start: $syslog $remote_fs
> +# Required-Stop: $syslog $remote_fs
> +# Should-Start: cgroupfs-mount cgroup-lite
> +# Should-Stop: cgroupfs-mount cgroup-lite
> +# Default-Start: 2 3 4 5
> +# Default-Stop: 0 1 6
> +# Short-Description: Create lightweight, portable, self-sufficient containers.
> +# Description:
> +# Docker is an open-source project to easily create lightweight, portable,
> +# self-sufficient containers from any application. The same container that a
> +# developer builds and tests on a laptop can run at scale, in production, on
> +# VMs, bare metal, OpenStack clusters, public clouds and more.
> +### END INIT INFO
run level are not used if Busybox init is used, so we can remove this comment.
> +
> +export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
Why are you adding /usr/local/bin to the PATH here ?
By default the PATH is: /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin
http://www.tldp.org/HOWTO/Path-4.html
> +
> +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
> +DOCKER_LOGFILE=/var/log/$BASE.log
> +DOCKER_OPTS=
DOCKER_OPTS can be removed
> +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
> +
> +cgroupfs_mount() {
> + # see also https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount
^
I think the comment should use a hast instead of master branch, the content of
cgroupfs-mount may change over the time.
> + 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
> + )
> +}
> +
> +case "$1" in
> + start)
> + cgroupfs_mount
> +
> + ulimit -n 1048576
> + if [ "$BASH" ]; then
> + ulimit -u 1048576
> + else
> + ulimit -p 1048576
> + fi
The init shell is not bash, so the test on $BASH is never true.
> +
> + echo "Starting $DOCKER_DESC: $BASE"
> + start-stop-daemon --start --background \
> + --exec "$DOCKERD" \
> + --pidfile "$DOCKER_SSD_PIDFILE" \
> + --make-pidfile \
> + -- \
> + -p "$DOCKER_PIDFILE" \
> + $DOCKER_OPTS \
> + >> "$DOCKER_LOGFILE" 2>&1
> + echo $?
> + ;;
> +
> + stop)
> + echo "Stopping $DOCKER_DESC: $BASE"
> + start-stop-daemon --stop --pidfile "$DOCKER_SSD_PIDFILE" --retry 10
> + echo $?
> + ;;
> +
> + restart)
> + docker_pid=`cat "$DOCKER_SSD_PIDFILE" 2>/dev/null`
> + [ -n "$docker_pid" ] \
> + && ps -p $docker_pid > /dev/null 2>&1 \
Please, squash the next patch here.
Indeed ps -p is not supported by busybox, if you really need it then you can
select procps-ng package.
> + && $0 stop
> + $0 start
> + ;;
> +
> + force-reload)
> + $0 restart
> + ;;
> +
> + *)
> + echo "Usage: service docker {start|stop|restart}"
> + exit 1
> + ;;
> +esac
>
More information about the buildroot
mailing list