dont build omf sliceimage anymore
[build.git] / lbuild-initvm.sh
index 04a0607..aa71460 100755 (executable)
@@ -30,10 +30,10 @@ function lxcroot () {
 
 # XXX fixme : when creating a 32bits VM we need to call linux32 as appropriate...s
 
 
 # XXX fixme : when creating a 32bits VM we need to call linux32 as appropriate...s
 
-DEFAULT_FCDISTRO=f21
+DEFAULT_FCDISTRO=f27
 DEFAULT_PLDISTRO=lxc
 DEFAULT_PERSONALITY=linux64
 DEFAULT_PLDISTRO=lxc
 DEFAULT_PERSONALITY=linux64
-DEFAULT_MEMORY=2048
+DEFAULT_MEMORY=3072
 
 ##########
 # constant
 
 ##########
 # constant
@@ -81,9 +81,12 @@ EOF
 function package_method () {
     fcdistro=$1; shift
     case $fcdistro in
 function package_method () {
     fcdistro=$1; shift
     case $fcdistro in
-       f[0-9]*|centos[0-9]*|sl[0-9]*) echo yum ;;
-       squeeze|wheezy|jessie|oneiric|precise|quantal|raring|saucy|trusty|utopic|vivid) echo debootstrap ;;
-       *) echo Unknown distro $fcdistro ;;
+       f[0-9]*|centos[0-9]*|sl[0-9]*)
+           echo yum ;;
+       wheezy|jessie|precise|trusty|utopic|vivid|wily|xenial)
+           echo debootstrap ;;
+       *)
+           echo Unknown distro $fcdistro ;;
     esac 
 }
 
     esac 
 }
 
@@ -118,7 +121,7 @@ function fedora_install() {
     lxc=$1; shift
     lxc_root=$(lxcroot $lxc)
 
     lxc=$1; shift
     lxc_root=$(lxcroot $lxc)
 
-    cache=/var/cache/lxc/fedora/$arch/$release
+    cache=/var/cache/lxc/fedora/$arch/${fedora_release}
     mkdir -p $cache
     
     (
     mkdir -p $cache
     
     (
@@ -129,7 +132,7 @@ function fedora_install() {
             fedora_download $cache || { echo "Failed to download 'fedora base'"; return 1; }
         else
             echo "Updating cache $cache/rootfs ..."
             fedora_download $cache || { echo "Failed to download 'fedora base'"; return 1; }
         else
             echo "Updating cache $cache/rootfs ..."
-           if ! yum --installroot $cache/rootfs -y --nogpgcheck update ; then
+           if ! yum --installroot $cache/rootfs --releasever ${fedora_release} -y --nogpgcheck update ; then
                 echo "Failed to update 'fedora base', continuing with last known good cache"
             else
                 echo "Update finished"
                 echo "Failed to update 'fedora base', continuing with last known good cache"
             else
                 echo "Update finished"
@@ -169,19 +172,19 @@ function fedora_download() {
     cp /etc/yum.conf $INSTALL_ROOT/etc/
     cp /etc/yum.repos.d/fedora* $INSTALL_ROOT/etc/yum.repos.d/
 
     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
+    # append fedora repo files with desired ${fedora_release} and $basearch
     for f in $INSTALL_ROOT/etc/yum.repos.d/* ; do
     for f in $INSTALL_ROOT/etc/yum.repos.d/* ; do
-      sed -i "s/\$basearch/$arch/g; s/\$releasever/$release/g;" $f
+      sed -i "s/\$basearch/$arch/g; s/\$releasever/${fedora_release}/g;" $f
     done 
 
     done 
 
-    MIRROR_URL=$FEDORA_MIRROR_BASE/releases/$release/Everything/$arch/os
-    RELEASE_URL1="$MIRROR_URL/Packages/fedora-release-$release-1.noarch.rpm"
+    MIRROR_URL=$FEDORA_MIRROR_BASE/releases/${fedora_release}/Everything/$arch/os
+    RELEASE_URL1="$MIRROR_URL/Packages/fedora-release-${fedora_release}-1.noarch.rpm"
     # with fedora18 the rpms are scattered by first name
     # first try the second version of fedora-release first
     # with fedora18 the rpms are scattered by first name
     # first try the second version of fedora-release first
-    RELEASE_URL2="$MIRROR_URL/Packages/f/fedora-release-$release-2.noarch.rpm"
-    RELEASE_URL3="$MIRROR_URL/Packages/f/fedora-release-$release-1.noarch.rpm"
+    RELEASE_URL2="$MIRROR_URL/Packages/f/fedora-release-${fedora_release}-2.noarch.rpm"
+    RELEASE_URL3="$MIRROR_URL/Packages/f/fedora-release-${fedora_release}-1.noarch.rpm"
    
    
-    RELEASE_TARGET=$INSTALL_ROOT/fedora-release-$release.noarch.rpm
+    RELEASE_TARGET=$INSTALL_ROOT/fedora-release-${fedora_release}.noarch.rpm
     found=""
     for attempt in $RELEASE_URL1 $RELEASE_URL2 $RELEASE_URL3; do
        if curl -f $attempt -o $RELEASE_TARGET ; then
     found=""
     for attempt in $RELEASE_URL1 $RELEASE_URL2 $RELEASE_URL3; do
        if curl -f $attempt -o $RELEASE_TARGET ; then
@@ -197,7 +200,7 @@ function fedora_download() {
     mkdir -p $INSTALL_ROOT/var/lib/rpm
     rpm --root $INSTALL_ROOT  --initdb
     # when installing f12 this apparently is already present, so ignore result
     mkdir -p $INSTALL_ROOT/var/lib/rpm
     rpm --root $INSTALL_ROOT  --initdb
     # when installing f12 this apparently is already present, so ignore result
-    rpm --root $INSTALL_ROOT -ivh $INSTALL_ROOT/fedora-release-$release.noarch.rpm || :
+    rpm --root $INSTALL_ROOT -ivh $INSTALL_ROOT/fedora-release-${fedora_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
     # 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
@@ -208,7 +211,7 @@ function fedora_download() {
     # 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)
 
     # 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"
+    YUM="yum --installroot=$INSTALL_ROOT --releasever=${fedora_release} --nogpgcheck -y"
     echo "$YUM install $FEDORA_PREINSTALLED"
     $YUM install $FEDORA_PREINSTALLED || { echo "Failed to download rootfs, aborting." ; return 1; }
 
     echo "$YUM install $FEDORA_PREINSTALLED"
     $YUM install $FEDORA_PREINSTALLED || { echo "Failed to download rootfs, aborting." ; return 1; }
 
@@ -348,7 +351,7 @@ baseurl=$FEDORA_MIRROR_BASE/releases/\$releasever/Everything/\$basearch/os/
 enabled=1
 metadata_expire=7d
 gpgcheck=1
 enabled=1
 metadata_expire=7d
 gpgcheck=1
-gpgkey=$FEDORA_MIRROR_KEYS/RPM-GPG-KEY-fedora-$release-primary
+gpgkey=$FEDORA_MIRROR_KEYS/RPM-GPG-KEY-fedora-${fedora_release}-primary
 
 [updates]
 name=Fedora \$releasever - \$basearch - Updates
 
 [updates]
 name=Fedora \$releasever - \$basearch - Updates
@@ -356,9 +359,13 @@ baseurl=$FEDORA_MIRROR_BASE/updates/\$releasever/\$basearch/
 enabled=1
 metadata_expire=7d
 gpgcheck=1
 enabled=1
 metadata_expire=7d
 gpgcheck=1
-gpgkey=$FEDORA_MIRROR_KEYS/RPM-GPG-KEY-fedora-$release-primary
+gpgkey=$FEDORA_MIRROR_KEYS/RPM-GPG-KEY-fedora-${fedora_release}-primary
 EOF
 
 EOF
 
+    # import fedora key so that gpgckeck does not whine or require stdin
+    # required since fedora24
+    rpm --root $lxc_root --import $FEDORA_MIRROR_KEYS/RPM-GPG-KEY-fedora-${fedora_release}-primary
+
     # for using this script as a general-purpose lxc creation wrapper
     # just mention 'none' as the repo url
     if [ -n "$REPO_URL" ] ; then
     # for using this script as a general-purpose lxc creation wrapper
     # just mention 'none' as the repo url
     if [ -n "$REPO_URL" ] ; then
@@ -389,9 +396,9 @@ EOF
 function debian_mirror () {
     fcdistro=$1; shift
     case $fcdistro in
 function debian_mirror () {
     fcdistro=$1; shift
     case $fcdistro in
-       squeeze|wheezy|jessie) 
+       wheezy|jessie) 
            echo http://ftp2.fr.debian.org/debian/ ;;
            echo http://ftp2.fr.debian.org/debian/ ;;
-       oneiric|precise|quantal|raring|saucy|trusty|utopic|vivid
+       precise|trusty|utopic|vivid|wily|xenial
 #          echo http://mir1.ovh.net/ubuntu/ubuntu/ ;;
            echo http://www-ftp.lip6.fr/pub/linux/distributions/Ubuntu/archive/ ;;
        *) echo unknown distro $fcdistro; exit 1;;
 #          echo http://mir1.ovh.net/ubuntu/ubuntu/ ;;
            echo http://www-ftp.lip6.fr/pub/linux/distributions/Ubuntu/archive/ ;;
        *) echo unknown distro $fcdistro; exit 1;;
@@ -462,6 +469,11 @@ function setup_lxc() {
        yum)
             if [ -z "$IMAGE" ]; then
                 fedora_install $lxc ||  { echo "failed to install fedora root image"; exit 1 ; }
        yum)
             if [ -z "$IMAGE" ]; then
                 fedora_install $lxc ||  { echo "failed to install fedora root image"; exit 1 ; }
+               # this appears to be safer; observed in Jan. 2016 on a f23 host and a f14 cached image
+               # we were getting this message when attempting the first chroot yum install
+               # rpmdb: Program version 4.8 doesn't match environment version 5.3
+               chroot $(lxcroot $lxc) $personality rm -rf /var/lib/rpm/__db.00{0,1,2,3,4,5,6,7,8,9}
+               chroot $(lxcroot $lxc) $personality rpm --rebuilddb
             fi
            fedora_configure $lxc || { echo "failed to configure fedora for a container"; exit 1 ; }
            ;;
             fi
            fedora_configure $lxc || { echo "failed to configure fedora for a container"; exit 1 ; }
            ;;
@@ -642,10 +654,23 @@ function devel_or_test_tools () {
 
     case "$pkg_method" in
        yum)
 
     case "$pkg_method" in
        yum)
-           [ -n "$packages" ] && chroot ${lxc_root} $personality yum -y install $packages
+           # --allowerasing required starting with fedora24
+           #
+           has_dnf=""
+           chroot ${lxc_root} $personality dnf --version && has_dnf=true
+           if [ -n "$has_dnf" ]; then
+               echo "container has dnf - invoking with --allowerasing"
+               pkg_installer="dnf -y install --allowerasing"
+               grp_installer="dnf -y groupinstall --allowerasing"
+           else
+               echo "container has only yum"
+               pkg_installer="yum -y install"
+               grp_installer="yum -y groupinstall"
+           fi
+           [ -n "$packages" ] && chroot ${lxc_root} $personality $pkg_installer $packages
            for group_plus in $groups; do
                group=$(echo $group_plus | sed -e "s,+++, ,g")
            for group_plus in $groups; do
                group=$(echo $group_plus | sed -e "s,+++, ,g")
-               chroot ${lxc_root} $personality yum -y groupinstall "$group"
+               chroot ${lxc_root} $personality $grp_installer "$group"
            done
            # store current rpm list in /init-lxc.rpms in case we need to check the contents
            chroot ${lxc_root} $personality rpm -aq > $lxc_root/init-lxc.rpms
            done
            # store current rpm list in /init-lxc.rpms in case we need to check the contents
            chroot ${lxc_root} $personality rpm -aq > $lxc_root/init-lxc.rpms
@@ -701,7 +726,7 @@ function post_install () {
 function sshd_disable_password_auth () {
     lxc=$1; shift 
     lxc_root=$(lxcroot $lxc)
 function sshd_disable_password_auth () {
     lxc=$1; shift 
     lxc_root=$(lxcroot $lxc)
-    sed --inplace=.password -e 's,^#\?PasswordAuthentication.*,PasswordAuthentication no,' \
+    sed --in-place=.password -e 's,^#\?PasswordAuthentication.*,PasswordAuthentication no,' \
        $lxc_root/etc/ssh/sshd_config
 }
 
        $lxc_root/etc/ssh/sshd_config
 }
 
@@ -916,7 +941,7 @@ function main () {
     fi
 
     ##########
     fi
 
     ##########
-    release=$(echo $fcdistro | cut -df -f2)
+    fedora_release=$(echo $fcdistro | cut -df -f2)
 
     if [ "$personality" == "linux32" ]; then
         arch=i386
 
     if [ "$personality" == "linux32" ]; then
         arch=i386