From 1ea54d02b8282d991c717d87391239613ec663cd Mon Sep 17 00:00:00 2001 From: Michal Skalski Date: Tue, 31 Mar 2015 09:27:25 +0200 Subject: Fix problems during build/deployment process If we used 'make all' for build iso, only release section from f_odl_docker Makefile was executed, so odl docker image and docker binary were not created. This patch also try resolve problems which appeared during execution of start_odl_container.sh on controller node: * install and run cgroup-lite to mitigate 'failed to find the cgroup root' error * use proper path to docker image and binary * prevent import of docker image before daemon is not fully initialized * because docker binary is delivered by puppet, we should execute commands against it, not try use system binary which is probably not present on controller node * stop use daemon mode('-d') of 'docker run' if user want to have access to container shell * fix name of start script which is run inside container when daemon mode is used It looks like file 'fuel/build/f_odl_docker/scripts/start_odl_container.sh' is not used and duplicate: 'fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/start_odl_container.sh' JIRA: Change-Id: Ia6064dbacf30902bda557e5d0b631b5f5f207b5e Signed-off-by: Michal Skalski --- fuel/build/Makefile | 1 + .../puppet/modules/opnfv/manifests/odl_docker.pp | 14 ++++ .../modules/opnfv/scripts/start_odl_container.sh | 15 ++-- .../f_odl_docker/scripts/start_odl_container.sh | 88 ---------------------- 4 files changed, 25 insertions(+), 93 deletions(-) delete mode 100755 fuel/build/f_odl_docker/scripts/start_odl_container.sh (limited to 'fuel/build') diff --git a/fuel/build/Makefile b/fuel/build/Makefile index 364fe31..fda212d 100644 --- a/fuel/build/Makefile +++ b/fuel/build/Makefile @@ -62,6 +62,7 @@ all: @echo "Versions of cached build results built by" $(shell hostname) "at" $(shell date -u) > $(VERSION_FILE) @echo "cache.mk" $(shell md5sum $(BUILD_BASE)/cache.mk | cut -f1 -d " ") >> $(VERSION_FILE) @echo "config.mk" $(shell md5sum $(BUILD_BASE)/config.mk | cut -f1 -d " ") >> $(VERSION_FILE) + $(MAKE) -C f_odl_docker -f Makefile all @make -C docker @docker/runcontext $(DOCKERIMG) $(MAKE) $(MAKEFLAGS) iso diff --git a/fuel/build/f_odl_docker/puppet/modules/opnfv/manifests/odl_docker.pp b/fuel/build/f_odl_docker/puppet/modules/opnfv/manifests/odl_docker.pp index ae24460..922ab41 100644 --- a/fuel/build/f_odl_docker/puppet/modules/opnfv/manifests/odl_docker.pp +++ b/fuel/build/f_odl_docker/puppet/modules/opnfv/manifests/odl_docker.pp @@ -35,6 +35,20 @@ class opnfv::odl_docker source => "/etc/puppet/modules/opnfv/scripts/start_odl_container.sh", mode => 750, } + + # fix failed to find the cgroup root issue + # https://github.com/docker/docker/issues/8791 + if $::operatingsystem == 'Ubuntu' { + package {'cgroup-lite': + ensure => present, + } + + service {'cgroup-lite': + ensure => running, + enable => true, + require => Package['cgroup-lite'], + } + } } } } diff --git a/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/start_odl_container.sh b/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/start_odl_container.sh index 0b4fd46..0bddd20 100755 --- a/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/start_odl_container.sh +++ b/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/start_odl_container.sh @@ -24,7 +24,7 @@ DEV=1 MATCH_PORT=1 -LOCALPATH=/opt/opnfv/odl_docker +LOCALPATH=/opt/opnfv/odl DOCKERBINNAME=docker-latest DOCKERIMAGENAME=odl_docker_image.tar DNS=8.8.8.8 @@ -54,6 +54,10 @@ else echo "Starting Docker in Daemon mode" chmod +x $LOCALPATH/$DOCKERBINNAME $LOCALPATH/$DOCKERBINNAME -d & + + # wait until docker will be fully initialized + # before any further action against just started docker + sleep 5 fi @@ -72,17 +76,18 @@ echo " starting up ODL - DLUX and Mapping Ports" if [ "$MATCH_PORT" -eq "1" ] then echo "Starting up Docker..." - docker rm odl_docker + $LOCALPATH/$DOCKERBINNAME rm odl_docker +fi if [ "$ENABLE_SHELL" -eq "1" ]; then echo "Starting Container in Interactive Mode (/bin/bash will be provided, you will need to run ./start_odl_docker.sh inside the container yourself)" - docker run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -d -t loving_daniel /bin/bash + $LOCALPATH/$DOCKERBINNAME run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 6640:6640 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -t loving_daniel /bin/bash else echo "Starting Conatiner in Daemon mode - no shell will be provided and docker attach will not provide shell)" - docker run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -d -t loving_daniel + $LOCALPATH/$DOCKERBINNAME run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 6640:6640 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -d -t loving_daniel echo "should see the process listed here in docker ps -a" - docker ps -a; + $LOCALPATH/$DOCKERBINNAME ps -a; echo "Match Port enabled, you can reach the DLUX login at: " echo "http://$HOST_IP:8181/dlux.index.html" fi diff --git a/fuel/build/f_odl_docker/scripts/start_odl_container.sh b/fuel/build/f_odl_docker/scripts/start_odl_container.sh deleted file mode 100755 index 0fca48f..0000000 --- a/fuel/build/f_odl_docker/scripts/start_odl_container.sh +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash -# Ericsson Canada Inc. -# Authoer: Daniel Smith -# -# A helper script to install and setup the ODL docker conatiner on the controller -# -# -# Inputs: odl_docker_image.tar -# -# Usage: ./start_odl_docker.sh - -# ENVS -source ~/.bashrc -source ~/openrc - -# VARS - -# Switch for Dev mode - uses apt-get on control to cheat and get docker installed locally rather than from puppet source - -DEV=1 - -# Switch for 1:1 port mapping of EXPOSED ports in Docker to the host, if set to 0, then random ports will be used - NOTE: this doesnt work for all web services X port on Host --> Y port in Container, -# especially for SSL/HTTPS cases. Be aware. - -MATCH_PORT=1 - -LOCALPATH=/opt/opnfv/odl_docker -DOCKERBINNAME=docker-latest -DOCKERIMAGENAME=odl_docker_image.tar -DNS=8.8.8.8 -HOST_IP=`ifconfig br-fw-admin | grep -i "inet addr" | awk -F":" '{print $2}' | awk -F" " '{print $1}'` - - -# Set this to "1" if you want to have your docker container startup into a shell - - -ENABLE_SHELL=1 - - -echo " Fetching Docker " -if [ "$DEV" -eq "1" ]; -# If testing Locally (on a control node) you can set DEV=1 to enable apt-get based install on the control node (not desired target, but good for testing). -then - echo "Dev Mode - Fetching from Internet"; - echo " this wont work in production builds"; - apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 - mkdir -p $LOCALPATH - wget https://get.docker.com/builds/Linux/x86_64/docker-latest -O $LOCALPATH/$DOCKERBINNAME - wget http://ftp.us.debian.org/debian/pool/main/d/docker.io/docker.io_1.3.3~dfsg1-2_amd64.deb - chmod 777 $LOCALPATH/$DOCKERBINNAME - echo "done "; -else - echo "Using Binaries delivered from Puppet" - echo "Starting Docker in Daemon mode" - chmod +x $LOCALPATH/$DOCKERBINNAME - $LOCALPATH/$DOCKERBINNAME -d & -fi - - -# We need to perform some cleanup of the Openstack Environment -echo "TODO -- This should be automated in the Fuel deployment at some point" -echo "However, the timing should come after basic tests are running, since this " -echo " part will remove the subnet router association that is deployed automativally" -echo " via fuel. Refer to the ODL + Openstack Integration Page " - -# Import the ODL container into docker - -echo "Importing ODL container into docker" -$LOCALPATH/$DOCKERBINNAME load -i $LOCALPATH/$DOCKERIMAGENAME - -echo " starting up ODL - DLUX and Mapping Ports" -if [ "$MATCH_PORT" -eq "1" ] -then - echo "Starting up Docker..." - docker rm odl_docker - -if [ "$ENABLE_SHELL" -eq "1" ]; -then - echo "Starting Container in Interactive Mode (/bin/bash will be provided, you will need to run ./start_odl_docker.sh inside the container yourself)" - docker run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 6640:6640 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -d -t loving_daniel /bin/bash -else - echo "Starting Conatiner in Daemon mode - no shell will be provided and docker attach will not provide shell)" - docker run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 6640:6640 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -d -t loving_daniel - echo "should see the process listed here in docker ps -a" - docker ps -a; - echo "Match Port enabled, you can reach the DLUX login at: " - echo "http://$HOST_IP:8181/dlux.index.html" -fi -- cgit 1.2.3-korg