cleanup old distros
[build.git] / vbuild-init-lxc.sh
index bc1b4d7..561be5e 100755 (executable)
@@ -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 <<EOF
 [fedora]
-name=Fedora $release - \$basearch
-baseurl=http://mirror.onelab.eu/fedora/releases/$release/Everything/\$basearch/os/
+name=Fedora $release - $arch
+baseurl=http://mirror.onelab.eu/fedora/releases/$release/Everything/$arch/os/
 enabled=1
 metadata_expire=7d
 gpgcheck=1
 gpgkey=http://mirror.onelab.eu/keys/RPM-GPG-KEY-fedora-$release-primary
 
 [updates]
-name=Fedora $release - \$basearch - Updates
-baseurl=http://mirror.onelab.eu/fedora/updates/$release/\$basearch/
+name=Fedora $release - $arch - Updates
+baseurl=http://mirror.onelab.eu/fedora/updates/$release/$arch/
 enabled=1
 metadata_expire=7d
 gpgcheck=1
@@ -551,8 +582,7 @@ function setup_lxc() {
         exit 1
     fi
 
-    type /bin/systemd >/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() {
   <name>$lxc</name>
   <memory>524288</memory>
   <os>
-    <type>exe</type>
+    <type arch='$arch2'>exe</type>
     <init>/sbin/init</init>
   </os>
   <features>
@@ -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