Merge "[build] Update chroots in transactional way"

This commit is contained in:
Jenkins 2016-08-16 10:18:42 +00:00 committed by Gerrit Code Review
commit bd8107a598
1 changed files with 81 additions and 31 deletions

View File

@ -6,19 +6,31 @@ docker_init_mock() {
-v ${CACHE_DIR}:/var/cache/mock ${CONTAINER_NAME} \ -v ${CACHE_DIR}:/var/cache/mock ${CONTAINER_NAME} \
bash ${BASH_OPTS} -c " bash ${BASH_OPTS} -c "
mkdir -p /var/cache/mock/configs mkdir -p /var/cache/mock/configs
cp /etc/mock/logging.ini /var/cache/mock/configs/ [ ! -f /var/cache/mock/configs/logging.ini ] \
&& cp /etc/mock/logging.ini /var/cache/mock/configs/
rm -rf /etc/mock rm -rf /etc/mock
rm -f /var/cache/mock/configs/${DIST}.cfg
rm -rf /var/cache/mock/${ROOT_NAME}
ln -s /var/cache/mock/configs /etc/mock ln -s /var/cache/mock/configs /etc/mock
conffile=/etc/mock/${DIST}.cfg
tmpconffile=/etc/mock/tmp.${DIST}.cfg
rootpath=/var/cache/mock/$ROOT_NAME
tmprootpath=/var/cache/mock/tmp.$ROOT_NAME
[ -f \$conffile ] && mv \$conffile \$tmpconffile
[ -d \$rootpath ] && mv \$rootpath \$tmprootpath
echo \"${CONFIG_CONTENT_BASE64}\" \ echo \"${CONFIG_CONTENT_BASE64}\" \
| base64 -d > /etc/mock/${DIST}.cfg | base64 -d > \$conffile
echo 'Current config file:' echo 'Current config file:'
cat /etc/mock/${DIST}.cfg cat \$conffile
chown -R abuild:mock /var/cache/mock chown -R abuild:mock /var/cache/mock
chmod g+s /var/cache/mock chmod g+s /var/cache/mock
su - abuild -c \ if su - abuild -c \
'mock -r ${DIST} ${MOCK_OPTS} --init'" 'mock -r ${DIST} ${MOCK_OPTS} --init'
then
rm -rf \$tmprootpath \$tmpconffile
else
rm -rf \$conffile \$rootpath
[ -d \$tmprootpath ] && mv \$tmprootpath \$rootpath
[ -f \$tmpconffile ] && mv \$tmpconffile \$conffile
fi"
} }
docker_init_sbuild() { docker_init_sbuild() {
@ -30,20 +42,37 @@ docker_init_sbuild() {
mkdir -p /srv/images/chroot.d mkdir -p /srv/images/chroot.d
rm -rf /etc/schroot/chroot.d rm -rf /etc/schroot/chroot.d
ln -s /srv/images/chroot.d /etc/schroot/chroot.d ln -s /srv/images/chroot.d /etc/schroot/chroot.d
rm -rf /srv/images/${ROOT_NAME} conffile=/etc/schroot/chroot.d/$ROOT_NAME
rm -f /etc/schroot/chroot.d/${ROOT_NAME}* tmpconffile=/etc/schroot/chroot.d/tmp.$ROOT_NAME
sbuild-createchroot ${DIST} /srv/images/${ROOT_NAME} ${MIRROR} rootpath=/srv/images/$ROOT_NAME
mv /etc/schroot/chroot.d/${ROOT_NAME}* /etc/schroot/chroot.d/${ROOT_NAME} tmprootpath=/srv/images/tmp.$ROOT_NAME
echo 'union-type=aufs' >> /etc/schroot/chroot.d/${ROOT_NAME} [ -f \$conffile ] && mv \$conffile \$tmpconffile
echo ${APT_SOURCES_CONTENT_BASE64} | base64 -d \ [ -d \$rootpath ] && mv \$rootpath \$tmprootpath
> /srv/images/${ROOT_NAME}/etc/apt/sources.list if sbuild-createchroot ${DIST} \$rootpath ${MIRROR}
echo '#!/bin/bash' > /srv/images/${ROOT_NAME}/usr/bin/apt-add-repo then
echo 'echo \$* >> /etc/apt/sources.list' >> /srv/images/${ROOT_NAME}/usr/bin/apt-add-repo mv \${conffile}* \$conffile
chmod +x /srv/images/${ROOT_NAME}/usr/bin/apt-add-repo echo 'union-type=aufs' >> \$conffile
echo '#!/bin/bash' > /srv/images/${ROOT_NAME}/usr/bin/set-apt-prefs echo $APT_SOURCES_CONTENT_BASE64 | base64 -d \
echo 'echo \$* | base64 -d > /etc/apt/preferences' >> /srv/images/${ROOT_NAME}/usr/bin/set-apt-prefs > \${rootpath}/etc/apt/sources.list
chmod +x /srv/images/${ROOT_NAME}/usr/bin/set-apt-prefs echo '#!/bin/bash' > \${rootpath}/usr/bin/apt-add-repo
sbuild-update -udcar ${DIST}" echo 'echo \$* >> /etc/apt/sources.list' >> \${rootpath}/usr/bin/apt-add-repo
chmod +x \${rootpath}/usr/bin/apt-add-repo
echo '#!/bin/bash' > \${rootpath}/usr/bin/set-apt-prefs
echo 'echo \$* | base64 -d > /etc/apt/preferences' >> \${rootpath}/usr/bin/set-apt-prefs
chmod +x \${rootpath}/usr/bin/set-apt-prefs
if sbuild-update -udcar ${DIST}
then
rm -rf \$tmprootpath \$tmpconffile
else
rm -rf \$conffile \$rootpath
[ -d \$tmprootpath ] && mv \$tmprootpath \$rootpath
[ -f \$tmpconffile ] && mv \$tmpconffile \$conffile
fi
else
rm -rf \$conffile \$rootpath
[ -d \$tmprootpath ] && mv \$tmprootpath \$rootpath
[ -f \$tmpconffile ] && mv \$tmpconffile \$conffile
fi"
} }
docker_update_mock() { docker_update_mock() {
@ -53,15 +82,27 @@ docker_update_mock() {
rm -rf /etc/mock rm -rf /etc/mock
mkdir -p /var/cache/mock/configs mkdir -p /var/cache/mock/configs
ln -s /var/cache/mock/configs /etc/mock ln -s /var/cache/mock/configs /etc/mock
rm -rf /var/cache/mock/${ROOT_NAME}/yum_cache conffile=/etc/mock/${DIST}.cfg
touch /etc/mock/${DIST}.cfg -r \ tmpconffile=/etc/mock/tmp.${DIST}.cfg
/var/cache/mock/${ROOT_NAME}/root_cache/cache.tar.gz rootpath=/var/cache/mock/$ROOT_NAME
tmprootpath=/var/cache/mock/tmp.$ROOT_NAME
cp -Rl \$rootpath \$tmprootpath
cp \$conffile \$tmpconffile
rm -rf \${rootpath}/yum_cache
touch \$conffile -r \${rootpath}/root_cache/cache.tar.gz
echo 'Current config file:' echo 'Current config file:'
cat /etc/mock/${DIST}.cfg cat \$conffile
chown -R abuild:mock /var/cache/mock chown -R abuild:mock \$rootpath
chmod g+s /var/cache/mock chmod g+s \$rootpath
su - abuild -c \ if su - abuild -c \
'mock -r ${DIST} ${MOCK_OPTS} --update'" 'mock -r ${DIST} ${MOCK_OPTS} --update'
then
rm -rf \$tmprootpath \$tmpconffile
else
rm -rf \$rootpath \$conffile
mv \$tmpconffile \$conffile
mv \$tmprootpath \$rootpath
fi"
} }
docker_update_sbuild() { docker_update_sbuild() {
@ -73,9 +114,18 @@ docker_update_sbuild() {
mkdir -p /srv/images/chroot.d mkdir -p /srv/images/chroot.d
rm -rf /etc/schroot/chroot.d rm -rf /etc/schroot/chroot.d
ln -s /srv/images/chroot.d /etc/schroot/chroot.d ln -s /srv/images/chroot.d /etc/schroot/chroot.d
rootpath=/srv/images/$ROOT_NAME
tmprootpath=/srv/images/tmp.$ROOT_NAME
cp -Rl \$rootpath \$tmprootpath
echo ${APT_SOURCES_CONTENT_BASE64} | base64 -d \ echo ${APT_SOURCES_CONTENT_BASE64} | base64 -d \
> /srv/images/${ROOT_NAME}/etc/apt/sources.list > \${rootpath}/etc/apt/sources.list
sbuild-update -udcar ${DIST}" if sbuild-update -udcar ${DIST}
then
rm -rf \$tmprootpath
else
rm -rf \$rootpath
mv \$tmprootpath \$rootpath
fi"
} }
docker_build_mock() { docker_build_mock() {