X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=mkfedora;h=a43496e9176c23d39a554e84be5769e5648adbe2;hb=7694999edadd82dd967a428ccdba807dc810a9eb;hp=b58eb6b35ae5d10b1b59237b0dbca3ce0883b9a5;hpb=1589d50453c0dc17f749276016e9970c1c5ad9d8;p=build.git diff --git a/mkfedora b/mkfedora index b58eb6b3..a43496e9 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 @@ -13,7 +13,7 @@ # Mark Huang # Copyright (C) 2004-2006 The Trustees of Princeton University # -# $Id: mkfedora,v 1.13 2006/04/26 01:59:59 mlhuang Exp $ +# $Id$ # export PATH=/sbin:/bin:/usr/sbin:/usr/bin @@ -23,12 +23,15 @@ verbose=0 # Default yum repositories to try mirrors=( -file:///usr/share/mirrors/fedora -file:///var/www/html/mirrors/fedora +file:///data/fedora +http://localhost/fedora ftp://smoke.cs.princeton.edu/pub/mirrors/fedora -ftp://128.112.137.30/pub/mirrors/fedora -http://coblitz.planet-lab.org/pub/fedora +http://coblitz.codeen.org/coblitz.planet-lab.org/pub/fedora ftp://mirror.cs.princeton.edu/pub/mirrors/fedora +http://coblitz.planet-lab.org/pub/fedora +ftp://mirror.stanford.edu/pub/mirrors/fedora +ftp://rpmfind.net/linux/fedora +http://fedora.laptop.org/fedora-linux-releases ) # Release and architecture to install @@ -47,6 +50,14 @@ exclude=() # Exclude kernel* (and related) packages from all repositories except bootstrap exclude_kernel= +# PlanetLab development environment +if [ -f /etc/planetlab/plc_config ] ; then + . /etc/planetlab/plc_config + if [ -n "$PLC_DEVEL_FEDORA_URL" ] ; then + mirrors=($PLC_DEVEL_FEDORA_URL) + fi +fi + usage() { echo "Usage: mkfedora [OPTION]... [basedir]" @@ -123,11 +134,25 @@ 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 + for mirror in "${mirrors[@]}" ; do - for baseurl in \ - $mirror/linux/core/$releasever/$basearch/os \ - $mirror/core/$releasever/$basearch/os \ - $mirror/$releasever/$basearch/os ; do + for attempt in $attempts; do + baseurl=$mirror/$attempt if fetch $baseurl/repodata/repomd.xml >/dev/null ; then break fi @@ -144,9 +169,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 @@ -159,49 +184,32 @@ 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 -# Mount /proc in reference image -mkdir -p $vroot/proc -mount -t proc none $vroot/proc +# why do we need this ? it prevents the 'filesystem' rpm from installing +## 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 +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 @@ -238,6 +246,12 @@ rpm --root $vroot --import $baseurl/RPM-GPG-KEY-fedora # Initialize yum in reference image mkdir -p $vroot/var/cache/yum $vroot/var/log +if [ $releasever -lt 7 ] ; then + corename="Core " +else + corename="" +fi + cat >$vroot/etc/yum.conf <>$vroot/etc/yum.conf <&3 - yum -c $vroot/etc/yum.conf --installroot=$vroot -y $excludes \ - install "${packages[@]}" + echo "* Installing optional packages" "${packages[@]}" >&3 + yum -c $vroot/etc/yum.conf --installroot=$vroot -y $excludes \ + install "${packages[@]}" + if ! rpm --root $vroot -q "${packages[@]}" >/dev/null ; then + echo "* Warning: Missing packages" + rpm --root $vroot -q "${packages[@]}" | grep "not installed" + fi fi if [ ${#groups[*]} -gt 0 ] ; then - echo "* Installing optional groups" >&3 - yum -c $vroot/etc/yum.conf --installroot=$vroot -y $excludes \ - groupinstall "${groups[@]}" + ## call yum sequentially to get finer-grained info on dependencies + for grp in "${groups[@]}" ; do + echo "* Installing optional group $grp" >&3 + yum -c $vroot/etc/yum.conf --installroot=$vroot -y $excludes \ + groupinstall "$grp" + done fi # FC2 dev %preinstall checks /proc/mounts to make sure that /dev is @@ -360,6 +382,10 @@ if [ -f $vroot/usr/share/zoneinfo/UTC -a -f $vroot/etc/localtime ] ; then ln -s /usr/share/zoneinfo/UTC $vroot/etc/localtime fi + +# remove trap handler, as we are about to call it directly. +trap - ERR INT + # Clean up cleanup