宿主机器:ubuntu 14.04 desktop x64
编译只支持14.04, 只支持64位
1 空间要求 ubuntu 最少40G硬盘(/目录)原因:opnfv在/tmp/fuel-main下安装,空间巨大
2 替换镜像位置 将/etc/apt/sources.list中的cn.ubuntu.com替换为mirrors.aliyun.com
更新apt, apt-get update
3 更新kernel到3.19 vivid对应15.04的kernel
apt-get install linux-generic-lts-vivid
安装后 reboot
验证uname -r
3.19是docker所需要的版本,在fuel-main中会检查是否kernel到这个版本,不到就会要求停止编译。
低于3.19的docker有bug
4 更新docker 参考参考2
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv \
--keyserver hkp://ha.pool.sks-keyservers.net:80 \
--recv-keys 58118E89F3A912897C070ADBF76221572C52609D
echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main
" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
apt-cache policy docker-engine
sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
sudo apt-get install docker-engine
sudo service docker start
sudo docker run hello-world
5 设置docker
sudo usermod -a -G docker root
vi /etc/default/docker
DOCKER_OPTS=" --dns=8.8.8.8 --dns=8.8.8.4"
sudo service docker restart
6 取代码
编译前记得apt-get install make git curl
注册一个linux的帐号
从opnfv.org gerrit上取代码
git clone ssh://<Linux foundation user>@gerrit.opnfv.org:29418/fuel
$ cd fuel $ git checkout colorado.3.0
7 编译 采用make debug方式编译,方便debug
之前有过编译则在fuel/build目录下
make clean 或者
make deepclean
然后 make debug
make debug的主要工作是下载opnfv ubuntu-builder docker镜像,并进入镜像后的bash
除外,还执行fuel9编译所要求的准备环境的工作,即prepare_env.sh的工作
8 编译 此时是在步骤7完成后,在docker bash里的工作
make iso
部分编译出现的问题不在这里讨论,已经分篇讨论了。
opnfv fuel.git修改的代码列表参考附件
fuel-main编译时出现的GPG error参考
http://blog.csdn.net/anzhuangguai/article/details/53745464
参考
1 总体安装指导 http://artifacts.opnfv.org/fuel/colorado/3.0/docs/buildprocedure/index.html
2 docker上安装ubuntu https://docs.docker.com/engine/installation/linux/ubuntulinux/
附件
root@fz:/mnt/sdb/fuel/build/docker# git diff ../Makefile Dockerfile Makefile runcontext ../fuel_build_loop
diff --git a/build/Makefile b/build/Makefile
index b760568..3ad39ff 100644
--- a/build/Makefile
+++ b/build/Makefile
@@ -60,7 +60,7 @@ export LATEST_MIRROR_ID_URL := http://$(shell ./select_closest_fuel_mirror.p
export MIRROR_MOS_UBUNTU ?= $(shell echo "$(LATEST_MIRROR_ID_URL)" | cut -d'/' -f3)
#export LATEST_TARGET_UBUNTU := $(shell curl -sSf "$(MIRROR_MOS_UBUNTU)/mos-repos/ubuntu/$(MO
# Fuel 9.0
-export LATEST_TARGET_UBUNTU := snapshots/9.0-2016-06-23-164100-copy
+export LATEST_TARGET_UBUNTU := snapshots/9.0-2016-06-23-164100
export MIRROR_MOS_UBUNTU_ROOT := /mos-repos/ubuntu/$(LATEST_TARGET_UBUNTU)
export LATEST_TARGET_CENTOS := $(shell curl -sSf "$(LATEST_MIRROR_ID_URL)/mos-repos/centos/mo
@@ -97,8 +97,8 @@ all:
@KERNEL_VER=$$(uname -r); \
KERNEL_ARRAY=($${KERNEL_VER//./ }); \
if [ $${KERNEL_ARRAY[0]} -lt 3 ] || [[ $${KERNEL_ARRAY[0]} -eq 3 && $${KERNEL_ARRAY[1
- @docker/runcontext $(DOCKERIMG) wget -q www.google.com -O /dev/null || (echo 'No docke
- @docker/runcontext $(DOCKERIMG) $(MAKE) $(MAKEFLAGS) iso
+ @docker/runcontext $(DOCKERIMG) wget -q www.baidu.com -O /dev/null || (echo 'No docker
+ @docker/runcontext $(DOCKERIMG) $(MAKE) $(MAKEFLAGS) iso
############################################################################
diff --git a/build/docker/Dockerfile b/build/docker/Dockerfile
index b38ea4c..7d85654 100644
--- a/build/docker/Dockerfile
+++ b/build/docker/Dockerfile
@@ -15,6 +15,11 @@ ENV https_proxy INSERT_HTTPS_PROXY
ENV no_proxy INSERT_NO_PROXY
ENV DEBIAN_FRONTEND noninteractive
+RUN apt-get clean
+RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
+RUN apt-get update --fix-missing
+RUN rm -fR /var/lib/apt/lists/*
+RUN mkdir /var/lib/apt/lists/partial
RUN apt-get update
RUN apt-get install -y software-properties-common python-software-properties \
make python-setuptools python-all dpkg-dev debhelper ruby-json \
diff --git a/build/docker/Makefile b/build/docker/Makefile
index 783881e..6cd5be2 100644
--- a/build/docker/Makefile
+++ b/build/docker/Makefile
@@ -46,7 +46,7 @@ all: .docker
.docker: .dockercfg
@if test -f .cacheid -o "$(shell ${DOCKER_EXPIRED})" -eq "0"; then \
- /usr/bin/docker build --rm=true --no-cache=true \
+ /usr/bin/docker build --rm --no-cache=true \
-t ${DOCKER_TAG} ubuntu-builder && \
/usr/bin/docker tag ${tag_flags} ${DOCKER_TAG} ${DOCKER_IMG}; \
else \
diff --git a/build/docker/runcontext b/build/docker/runcontext
index 2d13562..9116629 100755
--- a/build/docker/runcontext
+++ b/build/docker/runcontext
@@ -111,7 +111,7 @@ if [ -n "$CACHEBASE" ]; then
fi
fi
-RUN_CONTEXT_OPT="--cidfile $CID_FILE --privileged=true --rm \
+RUN_CONTEXT_OPT="--cidfile $CID_FILE --privileged=true --rm=false \
-e HOME=$HOME -e CACHEDEBUG -e CACHETRANSPORT -e CACHEMAXAGE -e CACHEBASE \
-e BUILD_FUEL_PLUGINS -e MIRROR_UBUNTU -e MIRROR_UBUNTU_ROOT \
-e MIRROR_MOS_UBUNTU -e MIRROR_MOS_UBUNTU_ROOT -e MIRROR_FUEL \
diff --git a/build/fuel_build_loop b/build/fuel_build_loop
index 324f28c..aa24e7b 100755
--- a/build/fuel_build_loop
+++ b/build/fuel_build_loop
@@ -12,7 +12,7 @@
echo "MIRROR_MOS_UBUNTU_ROOT=${MIRROR_MOS_UBUNTU_ROOT}"
echo "MIRROR_FUEL=${MIRROR_FUEL}"
-maxcount=3
+maxcount=1
cnt=0
rc=1
while [ $cnt -lt $maxcount ] && [ $rc -ne 0 ]
root@fz:/mnt/sdb/fuel/build/docker#