X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=mkfedora;h=b238215a19dabe9c75dd721f6da4a94335a9d3ed;hb=ec6fc927bfdb715fb0738ac9a9d2001d95223033;hp=8821621a290dc1df3ceef6742dba045d31d48b07;hpb=eb6d7f4c56f37488089caa75b3c4033bde5cd741;p=build.git diff --git a/mkfedora b/mkfedora index 8821621a..b238215a 100755 --- a/mkfedora +++ b/mkfedora @@ -1,6 +1,6 @@ #!/bin/bash # -# Builds a Fedora Core reference image. Requires the build server to +# Builds a Fedora reference image. Requires the build server to # host a local yum repository in one of: # # /usr/share/mirrors/fedora @@ -18,13 +18,17 @@ export PATH=/sbin:/bin:/usr/sbin:/usr/bin +echo "* Entering mkfedora " "$@" + # Verbosity verbose=0 # Default yum repositories to try mirrors=( file:///data/fedora -http://coblitz.planet-lab.org/pub/fedora +http://localhost/fedora +http://build.planet-lab.org/fedora +http://coblitz.codeen.org/coblitz.planet-lab.org/pub/fedora ftp://mirror.cs.princeton.edu/pub/mirrors/fedora ftp://mirror.stanford.edu/pub/mirrors/fedora ftp://rpmfind.net/linux/fedora @@ -50,6 +54,7 @@ exclude_kernel= if [ -f /etc/planetlab/plc_config ] ; then . /etc/planetlab/plc_config if [ -n "$PLC_DEVEL_FEDORA_URL" ] ; then + echo "* mkfedora : setting mirrors from /etc/planetlab/config" mirrors=($PLC_DEVEL_FEDORA_URL) fi fi @@ -130,20 +135,35 @@ fetch () curl --fail --silent --max-time 60 "$1" } +# hard to find two mirrors with a similar layout +# set list of attempted locations according to releasever +if [ $releasever -ge 7 ] ; then + attempts=" +$releasever/Everything/$basearch/os +core/$releasever/Everything/$basearch/os \ +linux/core/$releasever/$basearch/os +" +else + attempts=" +linux/core/$releasever/$basearch/os +core/$releasever/$basearch/os +$releasever/$basearch/os +" +fi + +echo "$0: candidate mirrors" for mirror in "${mirrors[@]}" ; do - for baseurl in \ - $mirror/linux/core/$releasever/$basearch/os \ - $mirror/core/$releasever/$basearch/os \ - $mirror/$releasever/$basearch/os ; do - if fetch $baseurl/repodata/repomd.xml >/dev/null ; then - break + echo "* candidate mirror $mirror" +done +baseurl="" +for mirror in "${mirrors[@]}" ; do + for attempt in $attempts; do + attempturl=$mirror/$attempt + if fetch $attempturl/repodata/repomd.xml >/dev/null ; then + baseurl=$attempturl + break 2 fi - unset baseurl done - if [ -n "$baseurl" ] ; then - break - fi - unset baseurl done if [ -z "$baseurl" ] ; then @@ -151,9 +171,9 @@ if [ -z "$baseurl" ] ; then echo " could not be found in any of the following locations:" echo for mirror in ${mirrors[@]} ; do - echo $mirror/linux/core - echo $mirror/core - echo $mirror + for attempt in $attempts ; do + echo $mirror/$attempt + done done echo usage @@ -166,50 +186,41 @@ if [ $verbose -eq 0 ] ; then exec 2>/dev/null fi -# Minimally initialize /dev in reference image. If installed, the dev -# or udev RPMs will fill in the rest. -mkdir -p $vroot/dev -mknod -m 666 $vroot/dev/null c 1 3 -mknod -m 666 $vroot/dev/zero c 1 5 -mknod -m 666 $vroot/dev/full c 1 7 -mknod -m 644 $vroot/dev/random c 1 8 -mknod -m 644 $vroot/dev/urandom c 1 9 -mknod -m 666 $vroot/dev/tty c 5 0 -mknod -m 666 $vroot/dev/ptmx c 5 2 -# For bash command substitution -ln -nsf ../proc/self/fd $vroot/dev/fd -# For df and linuxconf -touch $vroot/dev/hdv1 -# For mkinitrd (in case a kernel is being installed) -for i in $(seq 0 7) ; do - mknod -m 640 $vroot/dev/loop$i b 7 $i -done - # Do not tolerate errors set -e -# Mount /dev/pts in reference image -mkdir -p $vroot/dev/pts +# Mount /dev/pts and /dev/shm in reference image mount -t devpts none $vroot/dev/pts - -# Mount /dev/shm in reference image -mkdir -p $vroot/dev/shm mount -t tmpfs none $vroot/dev/shm +## make rpms ignore installing stuff to /proc +mkdir -p $vroot/etc/rpm +# Because of https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=52725 +# you have to use at least one language beside 'C' +echo "%_install_langs C:de:en:es:fr" > $vroot/etc/rpm/macros +echo "%_netsharedpath /proc:/dev/pts" >> $vroot/etc/rpm/macros +# append to the vserver's rpm macros +echo "%_install_langs C:de:en:es:fr" > /etc/rpm/macros +echo "%_netsharedpath /proc:/dev/pts" >> /etc/rpm/macros # Mount /proc in reference image mkdir -p $vroot/proc mount -t proc none $vroot/proc cleanup () { - umount $vroot/proc - umount $vroot/dev/shm - umount $vroot/dev/pts + umount -l $vroot/proc + umount -l $vroot/dev/shm + umount -l $vroot/dev/pts } # Clean up before exiting if anything goes wrong trap "cleanup" ERR INT +# Create a /var/lib dirs for yum & rpm +mkdir -p $vroot/var/lib/yum +mkdir -p $vroot/var/lib/rpm +mkdir -p $vroot/usr/share/info + # Create a dummy /etc/fstab in reference image mkdir -p $vroot/etc cat >$vroot/etc/fstab <$vroot/etc/yum.conf <>$vroot/etc/yum.conf <