- do not mount proc ro
authorMichael Schröder <mls@suse.de>
Thu, 10 Aug 2006 14:57:29 +0000 (14:57 +0000)
committerMichael Schröder <mls@suse.de>
Thu, 10 Aug 2006 14:57:29 +0000 (14:57 +0000)
- xen: do not panic if build fails
- xen: fix extractrpm script

baselibs.conf
build
extractbuild
init_buildsystem

index 02b87fa..0855b01 100644 (file)
@@ -118,6 +118,7 @@ xorg-x11-Mesa-devel
   obsoletes "XFree86-Mesa-devel-<targettype>"
   provides  "XFree86-Mesa-devel-<targettype>"
 Mesa
+  +/usr/X11R6/lib(64)?/modules/dri/updates/README.updates
   obsoletes "XFree86-Mesa-<targettype> xorg-x11-Mesa-<targettype>"
   provides  "XFree86-Mesa-<targettype> xorg-x11-Mesa-<targettype>"
 Mesa-devel
@@ -152,6 +153,7 @@ giflib-devel
 sane
 openssl
 openssl-devel
+openssl-ibmca
 
 #
 # wine devel requirements
@@ -161,6 +163,15 @@ flex
 libsmbclient
 samba-libs
 
+# rest of samba
+samba
+  -/usr/lib/samba
+samba-winbind
+  -/usr/lib/samba
+samba-client
+  -/usr/lib/samba
+libiniparser
+
 #
 # libsmbclient requirements:
 #
@@ -210,6 +221,7 @@ cyrus-sasl-devel
 #
 expat
 fontconfig
+  +/usr/bin/fc-cache -> /usr/bin/fc-cache<extension>
 fontconfig-devel
 freetype2
 freetype2-devel
@@ -355,6 +367,7 @@ flac
 gettext
 glib
 glib-devel
+  +/opt/gnome/lib(64)?/glib/include/glibconfig.h
 gnome-libs
 gtk
 gtk2
@@ -369,6 +382,7 @@ libica
 libmikmod
 libmpeg3
 libtool
+libltdl
 libxcrypt
 libxml
 nss_ldap
@@ -378,6 +392,7 @@ pango
   +/etc/opt/gnome/pango/pango.modules
   +/opt/gnome/bin/pango-querymodules(-64)?
   prereq "/usr/bin/touch"
+  post "/sbin/ldconfig"
   post "touch var/adm/SuSEconfig/run-pango"
 popt
 popt-devel
@@ -478,6 +493,7 @@ qt
 
 # used by kdelibs3
 mDNSResponder
+mDNSResponder-lib
 
 # used by DirectFB
 sysfsutils
@@ -526,7 +542,9 @@ libnetpbm
 # for banshee
 nautilus-cd-burner
 gstreamer
+gstreamer010
 gstreamer-plugins
+gstreamer010-plugins-base
 dbus-1-glib
 sqlite
 libipoddevice
@@ -543,6 +561,7 @@ freetype
 itcl
 libgtkhtml
 scim
+scim-qtimm
 openmotif21-libs
 # Mplayer
 libdv
@@ -561,6 +580,10 @@ libhugetlbfs
 numactl
 # pam module included
 CASA
+
+# required for more
+net-snmp
+
 # ppc 64bit stuff
 arch ppc64 package bind-devel
   requires -bind-<targettype>
@@ -581,7 +604,6 @@ arch ppc64 package blocxx-devel
 arch ppc64 package gmp-devel
 arch ppc64 package gtk2-devel
 arch ppc64 package libzio
-arch ppc64 package net-snmp
 arch ppc64 package net-snmp-devel
 arch ppc64 package qt-devel
 arch ppc64 package qt-qt3support
@@ -604,5 +626,14 @@ device-mapper
 itrace
 # ICAClient
 novell-NLDAPsdk
+novell-NLDAPsdk-dyn
 # helix hack
 helix-dbus-server
+# needed for xen biarch
+xen-libs
+# eDir biarch
+novell-NLDAPbase
+novell-NLDAPbase-dyn
+novell-lum
+# synce
+libical
diff --git a/build b/build
index 77f652c..bd495c3 100755 (executable)
--- a/build
+++ b/build
@@ -114,6 +114,15 @@ function clean_build_root () {
 #  cleanup_and_exit
 #
 cleanup_and_exit () {
+    if test -n "$RUNNING_IN_XEN" ; then
+       cd /
+       test -n "$XENSWAP" && swapoff "$XENSWAP"
+       exec >&0 2>&0   # so that the logging tee finishes
+       sleep 1         # wait till tee terminates
+       kill -9 -1      # goodbye cruel world
+       exec /bin/bash -c 'mount -n -o remount,ro / ; halt -f'
+       halt -f
+    fi
     if test "$1" = 0 -o -z "$1" ; then
         exit 0
     else
@@ -168,11 +177,19 @@ RPMLIST=
 RELEASE=
 REASON=
 NOROOTFORBUILD=
+LOGFILE=
 
 if test "$0" = "/.build/build" ; then
     BUILD_ROOT=/
     BUILD_DIR=/.build
     . $BUILD_DIR/build.data
+    echo "machine type: `uname -m`"
+    if test "$PERSONALITY" != 0 -a -z "$PERSONALITY_SET" ; then
+       export PERSONALITY_SET=true
+       echo "switching personality to $PERSONALITY..."
+       # this is 32bit perl/glibc, thus the 32bit syscall number
+       exec perl -e 'syscall(136, '$PERSONALITY') == -1 && warn("personality: $!\n");exec "/.build/build" || die("/.build/build: $!")'
+    fi
     PATH=$BUILD_DIR:$PATH
     RUNNING_IN_XEN=true
     if test -n "$XENSWAP" ; then
@@ -276,6 +293,10 @@ while test -n "$1"; do
         RELEASE="--release $ARG"
         shift
       ;;
+      *-logfile)
+        LOGFILE="$ARG"
+        shift
+      ;;
       *-reason)
         REASON="$ARG"
         shift
@@ -411,11 +432,19 @@ fi
 
 rm -f $BUILD_ROOT/exit
 
-if test -z "$XENIMAGE" ; then
-    echo  logging output to $BUILD_ROOT/.build.log...
-    rm -f $BUILD_ROOT/.build.log
-    touch $BUILD_ROOT/.build.log
-    exec 1> >(exec -a 'build logging tee' tee -a $BUILD_ROOT/.build.log) 2>&1
+if test -z "$XENIMAGE" -a -z "$LOGFILE"; then
+    LOGFILE="$BUILD_ROOT/.build.log"
+fi
+
+if test -n "$LOGFILE" ; then
+    echo  logging output to $LOGFILE...
+    rm -f $LOGFILE
+    touch $LOGFILE
+    if test -n "$XENIMAGE" ; then
+       exec 1> >(exec -a 'build logging tee' perl -e 'open(F,">>",$ARGV[0])||die("$ARGV[0]: $!\n");$|=1;select(F);$|=1;while(<STDIN>){print STDOUT;s/^\r//s;s/\r\n/\n/gs;print F}' $LOGFILE) 2>&1
+    else
+       exec 1> >(exec -a 'build logging tee' tee -a $LOGFILE) 2>&1
+    fi
 fi
 
 #
@@ -485,13 +514,16 @@ for SPECFILE in $SPECFILES ; do
            cp -p $MYSRCDIR/* $BUILD_ROOT/.build-srcdir
            MYSRCDIR=$BUILD_ROOT/.build-srcdir
        fi
-       echo "SPECFILE='${SPECFILE//\'/\'\\\'\'}'" > $BUILD_ROOT/.build/build.data
-       echo "BUILD_JOBS='${BUILD_JOBS//\'/\'\\\'\'}'" >> $BUILD_ROOT/.build/build.data
-       echo "BUILD_ARCH='${BUILD_ARCH//\'/\'\\\'\'}'" >> $BUILD_ROOT/.build/build.data
-       echo "BUILD_RPMS='${BUILD_RPMS//\'/\'\\\'\'}'" >> $BUILD_ROOT/.build/build.data
+       Q="'\''"
+       echo "SPECFILE='${SPECFILE//\'/$Q}'" > $BUILD_ROOT/.build/build.data
+       echo "BUILD_JOBS='${BUILD_JOBS//\'/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "BUILD_ARCH='${BUILD_ARCH//\'/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "BUILD_RPMS='${BUILD_RPMS//\'/$Q}'" >> $BUILD_ROOT/.build/build.data
        echo "CREATE_BASELIBS='$CREATE_BASELIBS'" >> $BUILD_ROOT/.build/build.data
-       echo "REASON='${REASON//\'/\'\\\'\'}'" >> $BUILD_ROOT/.build/build.data
+       echo "REASON='${REASON//\'/$Q}'" >> $BUILD_ROOT/.build/build.data
        test -n "$XENSWAP" && echo "XENSWAP='/dev/hda2'" >> $BUILD_ROOT/.build/build.data
+       PERSONALITY=`perl -e 'print syscall(135, 0)."\n"'`
+       echo "PERSONALITY='$PERSONALITY'" >> $BUILD_ROOT/.build/build.data
        umount $BUILD_ROOT
        XMROOT=file:$XENIMAGE
        XMROOT=${XMROOT/#file:\/dev/phy:}
@@ -502,7 +534,14 @@ for SPECFILE in $SPECFILES ; do
            XMSWAP=${XMSWAP/#file:\/dev/phy:}
            XMSWAP="disk=$XMSWAP,hda2,w"
        fi
-       xm create -c $BUILD_DIR/xen.conf name="build:${XENIMAGE##*/}" $XENMEMORY $XMROOT $XMSWAP extra="init=/.build/build panic=1"
+       XENID="${XENIMAGE%/root}"
+       XENID="${XENID##*/}"
+       if test "$PERSONALITY" != 0 ; then
+           # have to switch back to PER_LINUX to make xm work
+           perl -e 'syscall(135, 0); exec(@ARGV) || die("$ARGV[0]: $!\n")' xm create -c $BUILD_DIR/xen.conf name="build:$XENID" $XENMEMORY $XMROOT $XMSWAP extra="init=/.build/build panic=1"
+       else
+           xm create -c $BUILD_DIR/xen.conf name="build:$XENID" $XENMEMORY $XMROOT $XMSWAP extra="init=/.build/build panic=1"
+       fi
        exit 0
     fi
 
@@ -613,8 +652,7 @@ for SPECFILE in $SPECFILES ; do
     fi
     echo -----------------------------------------------------------------
     echo -----------------------------------------------------------------
-    sync
-    mount -oro -n -tproc none $BUILD_ROOT/proc 2> /dev/null
+    mount -n -tproc none $BUILD_ROOT/proc 2> /dev/null
     mount -n -tdevpts none $BUILD_ROOT/dev/pts 2> /dev/null
 
     BUILD_SUCCEDED=false
@@ -645,19 +683,9 @@ for SPECFILE in $SPECFILES ; do
 done
 
 if test -n "$CREATE_BASELIBS" ; then
-    mount -oro -n -tproc none $BUILD_ROOT/proc 2> /dev/null
+    mount -n -tproc none $BUILD_ROOT/proc 2> /dev/null
     create_baselibs
     umount -n $BUILD_ROOT/proc 2> /dev/null
 fi
 
-if test -n "$RUNNING_IN_XEN" ; then
-    cd /
-    test -n "$XENSWAP" && swapoff "$XENSWAP"
-    exec >&0 2>&0      # so that the logging tee finishes
-    sleep 1            # wait till tee terminates
-    kill -9 -1         # goodbye cruel world
-    exec /bin/bash -c 'mount -n -o remount,ro / ; halt -f'
-    halt -f
-fi
-
 cleanup_and_exit 0
index 115e423..3c8486d 100755 (executable)
@@ -6,6 +6,37 @@ $ENV{'PATH'} = "/bin:/usr/bin:/sbin:/usr/sbin";
 
 $| = 1;
 
+if ($0 ne '/.build/extractbuild') {
+  my $builddir = $ENV{'BUILD_DIR'} || '/usr/lib/build';
+  my $xen;
+  my $xenswap;
+  while (@ARGV) {
+    if ($ARGV[0] eq '--xen') {
+      shift @ARGV;
+      $xen = shift @ARGV;
+      next;
+    }
+    if ($ARGV[0] eq '--xenswap') {
+      shift @ARGV;
+      $xenswap = shift @ARGV;
+      next;
+    }
+    last
+  }
+  die("please specify a root image\n") unless defined $xen;
+  die("please specify a swap image\n") unless defined $xenswap;
+  my $xenname = $xen;
+  $xenname =~ s/\/root$//;
+  $xenname =~ s/.*\///;
+  my $xmroot = "disk=file:$xen,hda1,w";
+  $xmroot = "disk=phy:$xen,hda1,w" if $xen =~ /^\/dev\//;
+  my $xmswap= "disk=file:$xenswap,hda2,w";
+  $xmswap= "disk=phy:$xen,hda2,w" if $xenswap =~ /^\/dev\//;
+  syscall(135, 0);     # switch back to PER_LINUX to make xm work
+  system('xm', 'create', '-c', "$builddir/xen.conf", "name=build:$xenname", $xmroot, $xmswap, "extra=init=/.build/extractbuild panic=1") && die("xm call failed: $?\n");
+  exit(0);
+}
+
 sub ls {
   local *D;
   opendir(D, $_[0]) || return ();
@@ -59,7 +90,7 @@ my @packs;
 for my $dir (@dirs) {
   push @packs, map {"$dir/$_"} grep {/$psuf$/} ls($dir);
 }
-unshift @packs, '/.build.log';
+#unshift @packs, '/.build.log';
 
 my $cpio = '';
 for my $pack (@packs) {
@@ -83,7 +114,7 @@ for my $pack (@packs) {
     die("$pack: $!\n") unless $ll;
     die if $ll > $l;
     $l -= $ll;
-    if (length($cpio) > 4096) {
+    while (length($cpio) > 4096) {
       (syswrite(S, $cpio, 4096) || 0) == 4096 || die("swap write: $!\n");
       $cpio = substr($cpio, 4096);
     }
index 7fa11a1..44b477d 100755 (executable)
@@ -314,8 +314,10 @@ else
     PSUF=rpm
     test -L $BUILD_ROOT/.init_b_cache/rpms/rpm.rpm || PSUF=deb
     if test -n "$PREPARE_XEN" ; then
-       # add util-linux/binutils/mount to preinstall list
+       # add util-linux/perl/binutils/mount to preinstall list
        test "$PACKAGES_TO_PREINSTALL" = "${PACKAGES_TO_PREINSTALL/util-linux}" && PACKAGES_TO_PREINSTALL="$PACKAGES_TO_PREINSTALL util-linux"
+       test "$PACKAGES_TO_PREINSTALL" = "${PACKAGES_TO_PREINSTALL/perl}" && PACKAGES_TO_PREINSTALL="$PACKAGES_TO_PREINSTALL perl"
+       test "$PACKAGES_TO_PREINSTALL" = "${PACKAGES_TO_PREINSTALL/libvolume_id}" -a "$PACKAGES_TO_INSTALL" != "${PACKAGES_TO_INSTALL/libvolume_id}" && PACKAGES_TO_PREINSTALL="$PACKAGES_TO_PREINSTALL libvolume_id"
        test $PSUF = deb -a "$PACKAGES_TO_PREINSTALL" = "${PACKAGES_TO_PREINSTALL/binutils}" && PACKAGES_TO_PREINSTALL="$PACKAGES_TO_PREINSTALL binutils"
        test $PSUF = deb -a "$PACKAGES_TO_PREINSTALL" = "${PACKAGES_TO_PREINSTALL/mount}" && PACKAGES_TO_PREINSTALL="$PACKAGES_TO_PREINSTALL mount"
     fi