Unset CDPATH (Ján ONDREJ (SAL)).
[febootstrap.git] / febootstrap.sh
index 41fc84c..0b38411 100755 (executable)
 #
 # Written by Richard W.M. Jones <rjones@redhat.com>
 
+unset CDPATH
+
 TEMP=`getopt \
-        -o g:i: \
-        --long groupinstall:,group-install:,help,install:,noclean,no-clean \
+        -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"
@@ -48,6 +50,12 @@ while true; do
        --groupinstall|--group-install)
            packages[i++]="@$2"
            shift 2;;
+       -p|--proxy)
+           proxy="proxy=$2"
+           shift 2;;
+       -u|--updates)
+           updates="$2";
+           shift 2;;
        --noclean|--no-clean)
            clean=no
            shift;;
@@ -75,6 +83,9 @@ mirror="$3"
 # Architecture is currently always the same as the current arch.  We
 # cannot do --foreign builds.  See discussion in the manpage.
 arch=$(arch)
+case $arch in
+    i?86) arch=i386 ;;
+esac
 
 # Create a temporary directory, make sure it gets cleaned up at the end.
 tmpdir=$(mktemp -d)
@@ -93,6 +104,7 @@ name=febootstrap $repo $arch
 failovermethod=priority
 enabled=1
 gpgcheck=0
+$proxy
 __EOF__
 
 # "Mirror" parameter is a bit misnamed, but it means a local mirror,
@@ -103,6 +115,36 @@ 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
+       ;;
+    *)
+       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
+       ;;
+esac
+
 # Create the target filesystem.
 rm -rf "$target"
 mkdir "$target"
@@ -114,16 +156,31 @@ target=$(cd "$target"; pwd)
 # just create this file itself.
 mkdir -p "$target"/var/cache/yum/febootstrap/packages
 
+# NB: REQUIRED for useradd/groupadd to run properly.
+#
+# However this causes 'filesystem' RPM install to give the
+# following error.  Not sure how serious the error is:
+# error: unpacking of archive failed on file /proc: cpio: utime
+export FAKECHROOT_EXCLUDE_PATH=/proc
+
+# Substitute some statically-linked commands.  This is only supported
+# in fakechroot > 2.9.  For previous versions of fakechroot it is
+# 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
+
 # Make the device nodes inside the fake chroot.
 # (Copied from mock/backend.py)  Why isn't there a base package which
 # creates these?
 make_device_nodes ()
 {
+    mkdir "$target"/proc
+    mkdir "$target"/sys
     mkdir "$target"/dev
     (
        cd "$target"/dev
        mkdir pts
        mkdir shm
+       mkdir mapper
        mknod null c 1 3;    chmod 0666 null
        mknod full c 1 7;    chmod 0666 full
        mknod zero c 1 5;    chmod 0666 zero