[Ovirt-devel] [PATCH] use YUM cache instead of pungi in build-all.sh
Alan Pevec
apevec at redhat.com
Wed Aug 13 00:58:04 UTC 2008
appliance-creator doesn't need install tree with anaconda images so we can
use YUM cache to avoid re-downloading RPMs for successive image rebuilds
Signed-off-by: Alan Pevec <apevec at redhat.com>
---
.gitignore | 1 +
build-all.sh | 178 ++++++++++++++-------------------
ovirt-host-creator/Makefile | 2 +-
ovirt-host-creator/ovirt-cd | 6 +-
wui-appliance/create-wui-appliance.sh | 21 +++--
5 files changed, 94 insertions(+), 114 deletions(-)
diff --git a/.gitignore b/.gitignore
index 72271a2..d36c16e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
wui/src/log/*
wui/src/tmp/*
wui/src/db/schema.rb
+tmp/
diff --git a/build-all.sh b/build-all.sh
index 3d7d5ee..451c6cf 100755
--- a/build-all.sh
+++ b/build-all.sh
@@ -2,12 +2,11 @@
#
# build all oVirt components
-#
-# - create local YUM repository with Fedora subset required by oVirt
+# - create oVirt host image (livecd-creator)
# - create local YUM repository with ovirt-wui and ovirt-host-image-pxe RPMs
-# - create oVirt admin appliance
+# - create oVirt admin appliance (appliance-creator)
-# Requires: createrepo httpd kvm libvirt livecd-tools pungi
+# Requires: createrepo kvm libvirt livecd-tools appliance-tools
PATH=$PATH:/sbin:/usr/sbin
@@ -20,22 +19,22 @@ cd $(dirname $0)
BASE=$(pwd)
F_REL=9
ARCH=$(uname -i)
-HTDOCS=/var/www/html
-OVIRT=$HTDOCS/ovirt
-PUNGI=$HTDOCS/pungi
-PUNGIKS=$PUNGI/pungi.ks
-DEP_RPMS="createrepo httpd kvm libvirt livecd-tools pungi appliance-tools"
+NODE=$BASE/ovirt-host-creator
+WUI=$BASE/wui-appliance
+BUILD=$BASE/tmp
+OVIRT=$BUILD/ovirt
+CACHE=$BUILD/cache
+DEP_RPMS="createrepo kvm libvirt livecd-tools appliance-tools"
usage() {
case $# in 1) warn "$1"; try_h; exit 1;; esac
cat <<EOF
-Usage: $ME [-w] [-n] [-p] [-s] [-a] [-c] [-v git|release|none] [-e eth]
+Usage: $ME [-w] [-n] [-s] [-a] [-c] [-v git|release|none] [-e eth]
-w: update oVirt WUI RPMs
-n: update oVirt Managed Node RPMs
- -p: update pungi repository
-s: include SRPMs and produce source ISO
-a: updates all (WUI, Node, Appliance)
- -c: cleanup local repos (pungi and ovirt)
+ -c: cleanup local oVirt repo and YUM cache
-v: update version type (git, release, none) default is git
-e: ethernet device to use as bridge (i.e. eth1)
-h: display this help and exit
@@ -53,17 +52,16 @@ bumpver() {
}
update_wui=0 update_node=0
-update_pungi=0 update_app=0
+update_app=0
include_src=0
cleanup=0
version_type=git
bridge=
err=0 help=0
-while getopts wnpsahcv:e: c; do
+while getopts wnsacv:e:h c; do
case $c in
w) update_wui=1;;
n) update_node=1;;
- p) update_pungi=1;;
s) include_src=1;;
a) update_wui=1; update_node=1; update_app=1;;
c) cleanup=1;;
@@ -77,8 +75,6 @@ while getopts wnpsahcv:e: c; do
done
test $err = 1 && { try_h; exit 1; }
test $help = 1 && { usage; exit 0; }
-test $include_src = 1 -a "$update_pungi" = 0 &&
- usage "Need to specify -p when including source"
test "$version_type" != "git" -a "$version_type" != "release" \
-a "$version_type" != "none" \
&& usage "version type must be git, release or none"
@@ -96,32 +92,18 @@ if [ $? -ne 0 ]; then
die "Must have $DEP_RPMS installed"
fi
set -e
-echo -n "pungi-1.2.18.1-1 or newer "
-$BASE/ovirt-host-creator/rpm-compare.py GE 0 pungi 1.2.18.1 1
-echo ok
echo -n "appliance-tools-002-1 or newer "
-$BASE/ovirt-host-creator/rpm-compare.py GE 0 appliance-tools 002 1
+$NODE/rpm-compare.py GE 0 appliance-tools 002 1
echo ok
set +e
-mkdir -p $PUNGI
mkdir -p $OVIRT
+mkdir -p $CACHE
-# cleanup repository folders
+# cleanup repository and YUM cache
if [ $cleanup = 1 ]; then
- update_pungi=1
- rm -rf $PUNGI/*
rm -rf $OVIRT/*
-fi
-
-# If doing either a node or app build, make sure http is running
-if [ $update_app = 1 -o $update_node = 1 -o $update_pungi != 0 ]; then
- lokkit --service http
- service httpd status > /dev/null 2>&1 ||
- service httpd start > /dev/null 2>&1
- service libvirtd status > /dev/null 2>&1 ||
- service libvirtd start > /dev/null 2>&1
- service libvirtd reload
+ rm -rf $CACHE/*
fi
# stop execution on any error
@@ -141,65 +123,69 @@ if [ $update_wui = 1 ]; then
createrepo .
fi
-# build Fedora subset required for oVirt
-if [ $update_pungi != 0 ]; then
- pungi_flags="-GC"
-
- fedora_mirror=http://mirrors.fedoraproject.org/mirrorlist
- # use Fedora + updates
- currentbadupdates=''
- cat > $PUNGIKS << EOF
+fedora_mirror=http://mirrors.fedoraproject.org/mirrorlist
+# use Fedora + updates
+currentbadupdates=''
+cat > $NODE/repos.ks << EOF
repo --name=f$F_REL \
--mirrorlist=$fedora_mirror?repo=fedora-$F_REL&arch=\$basearch
repo --name=f$F_REL-updates \
--mirrorlist=$fedora_mirror?repo=updates-released-f$F_REL&arch=\$basearch $currentbadupdates
EOF
- # + ovirt.org repo for updates not yet in Fedora
- # + local ovirt repo with locally rebuilt ovirt* RPMs ( options -w and -n )
- # if not available, ovirt* RPMs from ovirt.org will be used
- excludepkgs=
- if [[ -f $OVIRT/repodata/repomd.xml ]]; then
- excludepkgs='--excludepkgs=ovirt*'
- cat >> $PUNGIKS << EOF
-repo --name=ovirt --baseurl=http://localhost/ovirt
+# + ovirt.org repo for updates not yet in Fedora
+# + local ovirt repo with locally rebuilt ovirt* RPMs ( options -w and -n )
+# if not available, ovirt* RPMs from ovirt.org will be used
+excludepkgs=
+if [[ -f $OVIRT/repodata/repomd.xml ]]; then
+ excludepkgs='--excludepkgs=ovirt*'
+ cat >> $NODE/repos.ks << EOF
+repo --name=ovirt --baseurl=file://$OVIRT
EOF
- fi
- cat >> $PUNGIKS << EOF
+fi
+cat >> $NODE/repos.ks << EOF
repo --name=ovirt-org \
--baseurl=http://ovirt.org/repos/ovirt/$F_REL/\$basearch $excludepkgs
EOF
- if [ $include_src != 0 ]; then
- cat >> $PUNGIKS << EOF
-repo --name=f$F_REL-src \
- --mirrorlist=$fedora_mirror?repo=fedora-source-$F_REL&arch=\$basearch
-repo --name=f$F_REL-updates-src \
- --mirrorlist=$fedora_mirror?repo=updates-released-source-f$F_REL&arch=\$basearch $currentbadupdates
-repo --name=ovirt-org-src \
- --baseurl=http://ovirt.org/repos/ovirt/$F_REL/src $excludepkgs
+if [ $include_src != 0 ]; then
+ cat > $OVIRT/sources.repo << EOF
+[main]
+cachedir=$CACHE
+keepcache=1
+[f$F_REL-src]
+name=f$F_REL-src
+mirrorlist=$fedora_mirror?repo=fedora-source-$F_REL&arch=\$basearch
+enabled=1
+gpgcheck=0
+[f$F_REL-updates-src]
+name=f$F_REL-updates-src
+mirrorlist=$fedora_mirror?repo=updates-released-source-f$F_REL&arch=\$basearch $currentbadupdates
+enabled=1
+gpgcheck=0
+[ovirt-org-src]
+name=ovirt-org-src
+baseurl=http://ovirt.org/repos/ovirt/$F_REL/src
+exclude=${excludepkgs#--excludepkgs=}
+enabled=1
+gpgcheck=0
EOF
- else
- pungi_flags+=" --nosource"
- fi
-
- cd $BASE
- cat >> $PUNGIKS << EOF
-
-%packages
+if [ -n "$excludepkgs" ]; then
+ cat >> $OVIRT/sources.repo << EOF
+[ovirt-src]
+name=ovirt-src
+baseurl=file://$OVIRT
+enabled=1
+gpgcheck=0
EOF
- # merge package lists from all oVirt kickstarts
- # exclude ovirt-host-image* (chicken-egg: built at the next step
- # using repo created here)
- egrep -hv "^-|^ovirt-host-image" \
- ovirt-host-creator/common-pkgs.ks \
- wui-appliance/common-pkgs.ks \
- | sort -u >> $PUNGIKS
- cd $PUNGI
- pungi --ver=$F_REL $pungi_flags -c $PUNGIKS --force
- if [ $include_src != 0 ]; then
- pungi --ver=$F_REL -I --sourceisos --nosplitmedia -c $PUNGIKS --force
- fi
- restorecon -r .
fi
+ mkdir -p $BUILD/source
+ cd $BUILD/source
+ # FIXME yumdownloader doesn't resolve @groups
+ # XXX global yum repos are included
+ yumdownloader -c $OVIRT/sources.repo --source --resolve \
+ $(egrep -hv "^-|^ovirt-host-image" \
+ $NODE/common-pkgs.ks \
+ $WUI/common-pkgs.ks | sort -u)
+ fi
# build oVirt host image; note that we unconditionally rebuild the
# ovirt-managed-node RPM, since it is now needed for the managed node
@@ -214,15 +200,10 @@ if [ $update_node = 1 ]; then
cd $OVIRT
createrepo .
- cd $BASE/ovirt-host-creator
+ cd $NODE
rm -rf rpm-build
- cat > repos.ks << EOF
-repo --name=f$F_REL --baseurl=http://localhost/pungi/$F_REL/$ARCH/os
-repo --name=ovirt --baseurl=http://localhost/ovirt
-
-EOF
bumpver
- make rpms
+ make rpms YUMCACHE=$CACHE
rm -f $OVIRT/ovirt-host-image*rpm
cp rpm-build/ovirt-host-image*rpm $OVIRT
cd $OVIRT
@@ -231,22 +212,9 @@ fi
# build oVirt admin appliance
if [ $update_app == 1 ]; then
- cd $BASE/wui-appliance
+ cd $WUI
make clean
- cat > repos.ks << EOF
-url --url http://localhost/pungi/$F_REL/$ARCH/os
-EOF
- excludepkgs=
- if [[ -f $OVIRT/repodata/repomd.xml ]]; then
- excludepkgs='--excludepkgs=ovirt*'
- cat >> repos.ks << EOF
-repo --name=ovirt --baseurl=http://localhost/ovirt
-EOF
- fi
- cat >> repos.ks << EOF
-repo --name=ovirt-org --baseurl=http://ovirt.org/repos/ovirt/$F_REL/$ARCH $excludepkgs
-
-EOF
+ cp $NODE/repos.ks $WUI/repos.ks
make
bridge_flag=
@@ -254,7 +222,7 @@ EOF
bridge_flag="-e $bridge"
fi
- ./create-wui-appliance.sh \
+ ./create-wui-appliance.sh -y $CACHE \
-k wui-rel.ks \
$bridge_flag
diff --git a/ovirt-host-creator/Makefile b/ovirt-host-creator/Makefile
index 1f0122f..a912e84 100644
--- a/ovirt-host-creator/Makefile
+++ b/ovirt-host-creator/Makefile
@@ -14,7 +14,7 @@ repos.ks: repos.ks.in
build: ovirt.ks common-install.ks common-pkgs.ks common-post.ks repos.ks
./rpm-compare.py GE 0 livecd-tools 017.1 1
- ./ovirt-cd
+ ./ovirt-cd $(YUMCACHE)
tar: clean build
mv $$(cat iso-file) ovirt.iso
diff --git a/ovirt-host-creator/ovirt-cd b/ovirt-host-creator/ovirt-cd
index 5678f14..9a2ba8f 100755
--- a/ovirt-host-creator/ovirt-cd
+++ b/ovirt-host-creator/ovirt-cd
@@ -20,8 +20,12 @@
PATH=/sbin:/bin:/usr/bin
KICKSTART=ovirt.ks
+CACHE=
+if [ -n "$1" ]; then
+ CACHE=--cache=$1
+fi
LABEL=ovirt-`date +%Y%m%d%H%M`
-livecd-creator --skip-minimize -c $KICKSTART -f $LABEL 1>&2 &&
+livecd-creator $CACHE --skip-minimize -c $KICKSTART -f $LABEL 1>&2 &&
echo $LABEL.iso > iso-file
diff --git a/wui-appliance/create-wui-appliance.sh b/wui-appliance/create-wui-appliance.sh
index b15cc76..1683237 100755
--- a/wui-appliance/create-wui-appliance.sh
+++ b/wui-appliance/create-wui-appliance.sh
@@ -18,9 +18,10 @@ imgdir=$IMGDIR_DEFAULT
usage() {
case $# in 1) warn "$1"; try_h; exit 1;; esac
cat <<EOF
-Usage: $ME [-c] [-d image_dir] [-k kickstart] [-e eth]
- -d: directory to place virtual disk (default: $IMGDIR_DEFAULT)
+Usage: $ME [-c] [-d image_dir] [-y yumcachedir] [-k kickstart] [-e eth]
-c: compress the image (qcow2 compressed)
+ -d: directory to place virtual disk (default: $IMGDIR_DEFAULT)
+ -y: YUM cache directory to use
-k: appliance kickstart file
-e: ethernet device to use as bridge (i.e. eth1)
-h: display this help and exit
@@ -31,10 +32,12 @@ err=0 help=0
compress=0
bridge=
kickstart=
-while getopts :d:k:he: c; do
+yumcache=
+while getopts :cd:y:k:e:h c; do
case $c in
- d) imgdir=$OPTARG;;
c) compress=1;;
+ d) imgdir=$OPTARG;;
+ y) yumcache=--cache=$OPTARG;;
k) kickstart=$OPTARG;;
e) bridge=$OPTARG;;
h) help=1;;
@@ -43,6 +46,9 @@ while getopts :d:k:he: c; do
*) err=1; warn "internal error: \`-$OPTARG' not handled";;
esac
done
+if [ -n "$1" ]; then
+ name=$1
+fi
test $err = 1 && { try_h; exit 1; }
test $help = 1 && { usage; exit 0; }
@@ -275,15 +281,16 @@ virsh undefine $NAME > /dev/null 2>&1
if [ -n "$kickstart" ]; then
mkdir -p tmp
set -e
- appliance-creator --config $kickstart --name $NAME --tmpdir $(pwd)/tmp
+ appliance-creator --config $kickstart --name $NAME \
+ --tmpdir=$(pwd)/tmp $yumcache
# FIXME add --compress option to appliance-creator
if [ $compress -ne 0 ]; then
printf "Compressing the image..."
qemu-img convert -c $NAME-sda.raw -O qcow2 "$imgdir/$IMGNAME"
- rm ovirt-appliance-sda.raw
+ rm $NAME-sda.raw
else
printf "Moving the image..."
- mv ovirt-appliance-sda.raw "$imgdir/$IMGNAME"
+ mv $NAME-sda.raw "$imgdir/$IMGNAME"
restorecon -v "$imgdir/$IMGNAME"
fi
echo done
--
1.5.5.1
More information about the ovirt-devel
mailing list