Delete febootstrap-updates cache (viliar.net.ru).
[febootstrap.git] / febootstrap.sh
index c7eeca4..67687e5 100755 (executable)
 #
 # Written by Richard W.M. Jones <rjones@redhat.com>
 
+unset CDPATH
+
 TEMP=`getopt \
-        -o g:i:p: \
-        --long groupinstall:,group-install:,help,install:,noclean,no-clean,proxy:  \
+        -o g:i:p:u: \
+        --long groupinstall:,group-install:,help,install:,noclean,no-clean,proxy:,updates: \
         -n febootstrap -- "$@"`
 if [ $? != 0 ]; then
     echo "febootstrap: problem parsing the command line arguments"
@@ -45,11 +47,14 @@ while true; do
        -i|--install)
            packages[i++]="$2"
            shift 2;;
+       -g|--groupinstall|--group-install)
+           packages[i++]="@$2"
+           shift 2;;
        -p|--proxy)
            proxy="proxy=$2"
            shift 2;;
-       --groupinstall|--group-install)
-           packages[i++]="@$2"
+       -u|--updates)
+           updates="$2";
            shift 2;;
        --noclean|--no-clean)
            clean=no
@@ -77,7 +82,7 @@ mirror="$3"
 
 # Architecture is currently always the same as the current arch.  We
 # cannot do --foreign builds.  See discussion in the manpage.
-arch=$(arch)
+arch=$(uname -m)
 case $arch in
     i?86) arch=i386 ;;
 esac
@@ -110,12 +115,44 @@ else
     echo "mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=$repo&arch=$arch" >> "$tmpdir"/febootstrap.repo
 fi
 
+# Add the updates repository if asked.
+case "$updates" in
+    ""|none|no)
+       ;;
+    *://*)
+       cat >> $tmpdir/febootstrap.repo <<EOF
+
+[febootstrap-updates]
+name=febootstrap updates $arch
+failovermethod=priority
+enabled=1
+gpgcheck=0
+$proxy
+baseurl=$updates
+EOF
+addrepo=febootstrap-updates
+       ;;
+    *)
+       cat >> $tmpdir/febootstrap.repo <<EOF
+
+[febootstrap-updates]
+name=febootstrap $updates $arch
+failovermethod=priority
+enabled=1
+gpgcheck=0
+$proxy
+mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=$updates&arch=$arch
+EOF
+addrepo=febootstrap-updates
+       ;;
+esac
+
 # Create the target filesystem.
 rm -rf "$target"
 mkdir "$target"
 
 # Target must be an absolute path.
-target=$(cd "$target"; pwd)
+target=$(cd "$target" > /dev/null; pwd)
 
 # This is necessary to keep yum happy.  It's not clear why yum can't
 # just create this file itself.
@@ -133,6 +170,9 @@ export FAKECHROOT_EXCLUDE_PATH=/proc
 # ignored.
 export FAKECHROOT_CMD_SUBST=/sbin/ldconfig=/bin/true:/usr/sbin/glibc_post_upgrade.i686=/bin/true:/usr/sbin/glibc_post_upgrade.x86_64=/bin/true:/usr/sbin/build-locale-archive=/bin/true:/usr/sbin/libgcc_post_upgrade=/bin/true
 
+# Use the libraries inside the chroot.
+export LD_LIBRARY_PATH="$target"/usr/lib64:"$target"/usr/lib:"$target"/lib64:"$target"/usr/lib
+
 # Make the device nodes inside the fake chroot.
 # (Copied from mock/backend.py)  Why isn't there a base package which
 # creates these?
@@ -169,18 +209,24 @@ else
     make_device_nodes
 fi
 
+repos=febootstrap
+if [ -n "$addrepo" ]; then
+    repos="$repos,$addrepo"
+fi
+
 # Run yum.
 run_yum ()
 {
     yum \
        -y -c "$tmpdir"/febootstrap.repo \
-       --disablerepo=* --enablerepo=febootstrap \
+       --disablerepo=* --enablerepo=$repos \
        --noplugins --nogpgcheck \
        --installroot="$target" \
        install "$@"
 }
 export -f run_yum
 export tmpdir
+export repos
 
 if [ $(id -u) -ne 0 ]; then
     # Bash doesn't support exporting array variables, hence this
@@ -193,6 +239,8 @@ else
 fi
 
 # Clean up the yum repository.
+# XXX We shouldn't just rm files.
 if [ "$clean" = "yes" ]; then
     rm -rf "$target"/var/cache/yum/febootstrap
+    rm -rf "$target"/var/cache/yum/febootstrap-updates
 fi