X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=vbuild-init-lxc.sh;h=561be5e8e774cf9c8d69e2daf89b0264de5845b6;hb=d655e39ed5f649c922761fa79200972ac08c77f3;hp=bc1b4d71d809cc2723892dadb55fb5a0e3246f59;hpb=44cbbf7df4ef160589ef2144920dfe3c8c46c9d1;p=build.git diff --git a/vbuild-init-lxc.sh b/vbuild-init-lxc.sh index bc1b4d71..561be5e8 100755 --- a/vbuild-init-lxc.sh +++ b/vbuild-init-lxc.sh @@ -19,7 +19,7 @@ DEFAULT_IFNAME=eth0 COMMAND_VBUILD="vbuild-init-lxc.sh" COMMAND_MYPLC="vtest-init-lxc.sh" -libvirt_version="1.0.3" +libvirt_version="1.0.4" function bridge_init () { # turn on verbosity @@ -65,7 +65,7 @@ function bridge_init () { address=$(/sbin/ip addr show $INTERFACE_LAN | grep -v inet6 | grep inet | head --lines=1 | awk '{print $2;}') [ -z "$address" ] && { echo "ERROR: Could not determine IP address for $INTERFACE_LAN" ; exit 1 ; } -broadcast=$(/sbin/ip addr show $INTERFACE_LAN | grep -v inet6 | grep inet | head --lines=1 | awk '{print $4;}') + broadcast=$(/sbin/ip addr show $INTERFACE_LAN | grep -v inet6 | grep inet | head --lines=1 | awk '{print $4;}') [ -z "$broadcast" ] && echo "WARNING: Could not determine broadcast address for $INTERFACE_LAN" gateway=$(netstat -rn | grep '^0.0.0.0' | awk '{print $2;}') @@ -140,9 +140,8 @@ function check_yumgroup_installed () { function prepare_host() { host_fcdistro="$(cat /etc/fedora-release | cut -d' ' -f3)" - ## check if libvirt 1.0.2-1 is installed - virsh -v | grep -e "1.0.3" || { echo "Libvirt 1.0.3 needs to be installed!!!" ; exit 1 ; } - + ## check if libvirt_version is installed + virsh -v | grep -e $libvirt_version || { echo "$libvirt_version needs to be installed!!!" ; exit 1 ; } # host_fcdistro="$(cat /etc/fedora-release | cut -d' ' -f3)" # if [ ! -f /etc/yum.repos.d/libvirt.repo ] ; then # touch /etc/yum.repos.d/libvirt.repo @@ -243,12 +242,18 @@ function configure_fedora_init() { sed -i 's|.sbin.start_udev||' ${rootfs_path}/etc/rc.sysinit sed -i 's|.sbin.start_udev||' ${rootfs_path}/etc/rc.d/rc.sysinit + # don't mount devpts, for pete's sake + sed -i 's/^.*dev.pts.*$/#\0/' ${rootfs_path}/etc/rc.sysinit + sed -i 's/^.*dev.pts.*$/#\0/' ${rootfs_path}/etc/rc.d/rc.sysinit chroot ${rootfs_path} /sbin/chkconfig udev-post off chroot ${rootfs_path} /sbin/chkconfig network on } - +# this code of course is for guests that do run on systemd function configure_fedora_systemd() { + # so ignore if we can't find /etc/systemd at all + [ -d ${rootfs_path}/etc/systemd ] || return 0 + # otherwise let's proceed unlink ${rootfs_path}/etc/systemd/system/default.target ln -s /lib/systemd/system/multi-user.target ${rootfs_path}/etc/systemd/system/default.target touch ${rootfs_path}/etc/fstab @@ -271,18 +276,31 @@ set -x # check the mini fedora was not already downloaded INSTALL_ROOT=$cache/partial echo $INSTALL_ROOT + + # download a mini fedora into a cache + echo "Downloading fedora minimal ..." + mkdir -p $INSTALL_ROOT if [ $? -ne 0 ]; then echo "Failed to create '$INSTALL_ROOT' directory" return 1 fi - # download a mini fedora into a cache - echo "Downloading fedora minimal ..." - YUM="yum --installroot $INSTALL_ROOT -y --nogpgcheck --releasever=$release" - PKG_LIST="yum initscripts passwd rsyslog vim-minimal dhclient chkconfig rootfiles policycoreutils openssh-server openssh-clients" - - + mkdir -p $INSTALL_ROOT/etc/yum.repos.d + mkdir -p $INSTALL_ROOT/dev + mknod -m 0444 $INSTALL_ROOT/dev/random c 1 8 + mknod -m 0444 $INSTALL_ROOT/dev/urandom c 1 9 + + # copy yum config and repo files + cp /etc/yum.conf $INSTALL_ROOT/etc/ + cp /etc/yum.repos.d/fedora* $INSTALL_ROOT/etc/yum.repos.d/ + + # append fedora repo files with desired $release and $basearch + for f in $INSTALL_ROOT/etc/yum.repos.d/* + do + sed -i "s/\$basearch/$arch/g; s/\$releasever/$release/g;" $f + done + MIRROR_URL=http://mirror.onelab.eu/fedora/releases/$release/Everything/$arch/os RELEASE_URL1="$MIRROR_URL/Packages/fedora-release-$release-1.noarch.rpm" # with fedora18 the rpms are scattered by first name @@ -302,7 +320,20 @@ set -x mkdir -p $INSTALL_ROOT/var/lib/rpm rpm --root $INSTALL_ROOT --initdb - rpm --root $INSTALL_ROOT -ivh $INSTALL_ROOT/fedora-release-$release.noarch.rpm + # when installing f12 this apparently is already present, so ignore result + rpm --root $INSTALL_ROOT -ivh $INSTALL_ROOT/fedora-release-$release.noarch.rpm || : + # however f12 root images won't get created on a f18 host + # (the issue here is the same as the one we ran into when dealing with a vs-box) + # in a nutshell, in f12 the glibc-common and filesystem rpms have an apparent conflict + # >>> file /usr/lib/locale from install of glibc-common-2.11.2-3.x86_64 conflicts + # with file from package filesystem-2.4.30-2.fc12.x86_64 + # in fact this was - of course - allowed by f12's rpm but later on a fix was made + # http://rpm.org/gitweb?p=rpm.git;a=commitdiff;h=cf1095648194104a81a58abead05974a5bfa3b9a + # So ideally if we want to be able to build f12 images from f18 we need an rpm that has + # this patch undone, like we have in place on our f14 boxes (our f14 boxes need a f18-like rpm) + + YUM="yum --installroot=$INSTALL_ROOT --nogpgcheck -y" + PKG_LIST="yum initscripts passwd rsyslog vim-minimal dhclient chkconfig rootfiles policycoreutils openssh-server openssh-clients" echo "$YUM install $PKG_LIST" $YUM install $PKG_LIST @@ -449,16 +480,16 @@ function configure_yum_in_lxc () { cat > $rootfs_path/etc/yum.repos.d/building.repo </dev/null 2>&1 - if [ $? -ne 0 ]; then + if [ "$(echo $fcdistro | cut -d"f" -f2)" -le "14" ]; then configure_fedora_init else configure_fedora_systemd @@ -578,7 +608,7 @@ function setup_lxc() { $lxc 524288 - exe + exe /sbin/init @@ -905,7 +935,7 @@ function main () { if [ "$personality" == "linux32" ]; then arch=i386 - arch2=x86 + arch2=i686 elif [ "$personality" == "linux64" ]; then arch=x86_64 arch2=x86_64 @@ -952,7 +982,8 @@ function main () { exit 1 fi - path=/var/lib/lxc + path=/vservers + [ ! -d $path ] && mkdir $path rootfs_path=$path/$lxc/rootfs config_path=$path/$lxc cache_base=/var/cache/lxc/fedora/$arch