diff --git a/config/default.go b/config/default.go index 7fd2e02b..731ef354 100644 --- a/config/default.go +++ b/config/default.go @@ -323,6 +323,21 @@ func NewConfig() *Config { Ipc: "host", Net: "host", }, + "acpid": { + Image: "acpid", + Privileged: true, + Links: []string{ + "console", + }, + Labels: []string{ + SCOPE + "=" + SYSTEM, + }, + VolumesFrom: []string{ + "command-volumes", + "system-volumes", + }, + Net: "host", + }, }, ServicesInclude: map[string]bool{ "ubuntu-console": false, diff --git a/init/bootstrap.go b/init/bootstrap.go index 62a80942..ae826128 100644 --- a/init/bootstrap.go +++ b/init/bootstrap.go @@ -3,6 +3,7 @@ package init import ( "os" "os/exec" + "strings" "syscall" log "github.com/Sirupsen/logrus" @@ -12,6 +13,8 @@ import ( "github.com/rancherio/rancher-compose/project" ) +const boot2dockerMagic = "boot2docker, please format-me" + func autoformat(cfg *config.Config) error { if len(cfg.State.Autoformat) == 0 || util.ResolveDevice(cfg.State.Dev) != "" { return nil @@ -43,10 +46,18 @@ outer: continue } - for _, b := range buffer { - if b != 0 { - log.Infof("%s not empty", dev) - continue outer + boot2docker := false + + if strings.HasPrefix(string(buffer[:len(boot2dockerMagic)]), boot2dockerMagic) { + boot2docker = true + } + + if boot2docker == false { + for _, b := range buffer { + if b != 0 { + log.Infof("%s not empty", dev) + continue outer + } } } @@ -73,6 +84,9 @@ outer: config.SCOPE + "=" + config.SYSTEM, }, LogDriver: "json-file", + Environment: []string{ + "MAGIC=" + boot2dockerMagic, + }, }, "udev": &udev, }) diff --git a/scripts/dockerimages/00-base b/scripts/dockerimages/00-base index 85614679..6fa7e16f 100644 --- a/scripts/dockerimages/00-base +++ b/scripts/dockerimages/00-base @@ -26,8 +26,9 @@ RUN rm /sbin/poweroff /sbin/reboot /sbin/halt && \ addgroup -g 1101 docker && \ addgroup -g 1103 sudo && \ adduser -u 1100 -G rancher -D -h /home/rancher -s /bin/bash rancher && \ + adduser -u 1101 -G docker -D -h /home/docker -s /bin/bash docker && \ sed -i 's/\(^docker.*\)/\1rancher/g' /etc/group && \ - sed -i 's/\(^sudo.*\)/\1rancher/g' /etc/group && \ + sed -i 's/\(^sudo.*\)/\1rancher,docker/g' /etc/group && \ echo '%sudo ALL=(ALL) ALL' >> /etc/sudoers COPY scripts/dockerimages/scripts/inputrc /etc/inputrc COPY scripts/dockerimages/scripts/entry.sh /usr/sbin/entry.sh diff --git a/scripts/dockerimages/06-console b/scripts/dockerimages/06-console index 35068af9..755c52a1 100644 --- a/scripts/dockerimages/06-console +++ b/scripts/dockerimages/06-console @@ -3,6 +3,9 @@ COPY scripts/dockerimages/scripts/console.sh /usr/sbin/ COPY scripts/dockerimages/scripts/update-ssh-keys /usr/bin/ COPY scripts/dockerimages/scripts/rancheros-install /usr/sbin/ RUN sed -i 's/rancher:!/rancher:*/g' /etc/shadow && \ + sed -i 's/docker:!/docker:*/g' /etc/shadow && \ echo '## allow password less for rancher user' >> /etc/sudoers && \ - echo 'rancher ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers + echo 'rancher ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers && \ + echo '## allow password less for docker user' >> /etc/sudoers && \ + echo 'docker ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers CMD ["/usr/sbin/console.sh"] diff --git a/scripts/dockerimages/12-acpid b/scripts/dockerimages/12-acpid new file mode 100644 index 00000000..2fa00d55 --- /dev/null +++ b/scripts/dockerimages/12-acpid @@ -0,0 +1,2 @@ +FROM base +ENTRYPOINT ["/usr/sbin/acpid", "-d"] diff --git a/scripts/dockerimages/scripts/auto-format.sh b/scripts/dockerimages/scripts/auto-format.sh index 81e15a81..64f9f2b2 100755 --- a/scripts/dockerimages/scripts/auto-format.sh +++ b/scripts/dockerimages/scripts/auto-format.sh @@ -1,5 +1,47 @@ #!/bin/bash +set -ex + if [ -n "$1" ]; then - exec mkfs.ext4 -L RANCHER_STATE $1 + # Test for our magic string (it means that the disk was made by ./boot2docker init) + HEADER=`dd if=$1 bs=1 count=${#MAGIC} 2>/dev/null` + + if [ "$HEADER" = "$MAGIC" ]; then + # save the preload userdata.tar file + dd if=$1 of=/userdata.tar bs=1 count=8192 + fi + + mkfs.ext4 -L RANCHER_STATE $1 + + if [ -e "/userdata.tar" ]; then + mount -t ext4 $1 /var/ + mkdir -p /var/lib/rancher/conf/cloud-config.d + echo $(tar -xvf /userdata.tar) + AUTHORIZED_KEY1=$(cat /.ssh/authorized_keys) + AUTHORIZED_KEY2=$(cat /.ssh/authorized_keys2) + tee /var/lib/rancher/conf/cloud-config.d/machine.yml << EOF +#cloud-config + +rancher: + network: + interfaces: + eth0: + dhcp: true + eth1: + dhcp: true + lo: + address: 127.0.0.1/8 + +ssh_authorized_keys: + - $AUTHORIZED_KEY1 + - $AUTHORIZED_KEY2 + +users: + - name: docker + ssh_authorized_keys: + - $AUTHORIZED_KEY1 + - $AUTHORIZED_KEY2 +EOF + fi fi + diff --git a/scripts/dockerimages/scripts/console.sh b/scripts/dockerimages/scripts/console.sh index a944c9f7..b4f44c96 100755 --- a/scripts/dockerimages/scripts/console.sh +++ b/scripts/dockerimages/scripts/console.sh @@ -33,6 +33,13 @@ if [ ! -d ${RANCHER_HOME} ]; then chmod 2755 ${RANCHER_HOME} fi +DOCKER_HOME=/home/docker +if [ ! -d ${DOCKER_HOME} ]; then + mkdir -p ${DOCKER_HOME} + chown docker:docker ${DOCKER_HOME} + chmod 2755 ${DOCKER_HOME} +fi + for i in $(> /etc/sudoers && \ - echo 'rancher ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers + echo 'rancher ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers && \ + echo 'docker ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers ENTRYPOINT ["/usr/sbin/entry.sh"] CMD ["/usr/sbin/console.sh"]