]> git.pld-linux.org Git - packages/anaconda.git/blob - anaconda-mk-images
- copy over with anaconda-11.0.5
[packages/anaconda.git] / anaconda-mk-images
1 #!/bin/bash
2 LANG=C
3
4 PATH=$PATH:/sbin:/usr/sbin
5 IMAGEUUID=$(date +%Y%m%d%H%M).$(uname -i)
6
7 usage () {
8         echo "usage: mk-images <pkgsrc> <toplevel> <template> <imgdir> <buildarch> <productname> <version> [<productpath>]"
9     exit 0
10 }
11
12 DEBUG=""
13 if [ "$1" == "--debug" ]; then
14     DEBUG="--debug"
15     shift
16 fi
17
18 if [ -z "$1" -o -z "$2" -o -z "$3" -o -z "$4" -o -z "$5" -o -z "$6" -o -z "$7" -o -z "$8" ]; then usage; fi
19
20 PRODUCT=$6
21 VERSION=$7
22 PRODUCTPATH=$8
23 if [ -n "$9" ]; then
24     BUGURL=$9
25 fi
26
27 TOPDIR=$(echo $0 | sed "s,/[^/]*$,,")
28 if [ $TOPDIR = $0 ]; then
29     $TOPDIR="."
30 fi
31 TOPDIR=$(cd $TOPDIR; pwd)
32
33 # modules that are needed.  this is the generic "needed for every arch" stuff
34 COMMONMODS="fat vfat nfs sunrpc lockd floppy cramfs loop edd pcspkr squashfs"
35 USBMODS="ohci-hcd uhci-hcd ehci-hcd hid mousedev usb-storage sd_mod sr_mod ub"
36 FIREWIREMODS="ieee1394 ohci1394 sbp2"
37 IDEMODS="ide-cd"
38 SCSIMODS="sr_mod sg st sd_mod scsi_mod iscsi_tcp"
39 FSMODS="fat msdos vfat ext3 reiserfs jfs xfs"
40 LVMMODS="dm-mod dm-zero dm-snapshot dm-mirror"
41 RAIDMODS="md raid0 raid1 raid5 raid6"
42 SECSTAGE="$RAIDMODS $LVMMODS $FSMODS $IDEMODS $SCSIMODS"
43 BTERMMODS="vga16fb"
44 PCMCIASOCKMODS="yenta_socket i82365 tcic pcmcia"
45 INITRDMODS="$USBMODS $FIREWIREMODS $IDEMODS $SCSIMODS $FSMODS $LVMMODS $RAIDMODS $BTERMMODS $COMMONMODS $PCMCIASOCKMODS =scsi =net"
46
47 # Set, verify, and create paths
48     KERNELPATH=$1
49     TOPDESTPATH=$2
50     IMAGEPATH=$TOPDESTPATH/images
51     FULLMODPATH=/tmp/instimagemods.$$
52     FINALFULLMODPATH=$4/modules
53     INSTIMGPATH=$TOPDESTPATH/$PRODUCTPATH/base
54     INSTIMGTEMPLATE=$3
55     IMGPATH=$4
56     KERNELBASE=/tmp/updboot.kernel.$$
57     MODDEPS=$KERNELBASE/moddeps
58     MODALIAS=$KERNELBASE/modules.alias
59     BUILDARCH=$5
60
61     KERNELNAME=vmlinuz
62
63     if [ "$BUILDARCH" = "ia64" ]; then
64         KERNELDIR="/boot/efi/EFI/redhat"
65     else
66         KERNELDIR="/boot"
67     fi
68     
69     if [ "$BUILDARCH" = "sparc64" ]; then
70         BASEARCH=sparc
71     else
72         BASEARCH=$BUILDARCH
73     fi
74
75     # explicit block size setting for some arches (FIXME: we compose 
76     # ppc64-ish trees as ppc, so we have to set the "wrong" block size)
77     if [ "$BUILDARCH" = "sparc64" ]; then
78         CRAMBS="--blocksize 8192"
79     elif [ "$BUILDARCH" = "sparc" ]; then
80         CRAMBS="--blocksize 4096"
81     else
82         CRAMBS=""
83     fi
84
85     if [ $BUILDARCH = x86_64 -o $BUILDARCH = s390x ]; then
86         LIBDIR=lib64
87     else
88         LIBDIR=lib
89     fi
90
91     rm -rf $IMAGEPATH
92     rm -rf $FULLMODPATH
93     rm -rf $FINALFULLMODPATH
94     rm -rf $KERNELBASE
95     mkdir -p $IMAGEPATH
96     mkdir -p $FULLMODPATH
97     mkdir -p $FINALFULLMODPATH
98     mkdir -p $KERNELBASE
99     mkdir -p $INSTIMGPATH
100
101 # Stuff that we need
102     TRIMMODALIAS=$IMGPATH/usr/lib/anaconda-runtime/trimmodalias
103     TRIMPCIIDS=$IMGPATH/usr/lib/anaconda-runtime/trimpciids
104     GETKEYMAPS=$IMGPATH/usr/lib/anaconda-runtime/getkeymaps
105     KEYMAPS=/tmp/keymaps-$BUILDARCH.$$
106     SCREENFONT=$IMGPATH/usr/lib/anaconda-runtime/screenfont-${BASEARCH}.gz
107     GETMODDEPS=$IMGPATH/usr/lib/anaconda-runtime/moddeps
108     MODLIST=$IMGPATH/usr/lib/anaconda-runtime/modlist
109     MODINFO=$IMGPATH/usr/lib/anaconda-runtime/loader/module-info
110     FILTERMODDEPS=$IMGPATH/usr/lib/anaconda-runtime/filtermoddeps
111     LOADERBINDIR=$IMGPATH/usr/lib/anaconda-runtime/loader
112     BOOTDISKDIR=$IMGPATH/usr/lib/anaconda-runtime/boot
113     LANGTABLE=$IMGPATH/usr/lib/anaconda/lang-table
114     PCIIDS=$IMGPATH/usr/share/hwdata/pci.ids
115     XDRIVERS=$IMGPATH/usr/share/hwdata/videoaliases
116     XDRIVERDESCS=$IMGPATH/usr/share/hwdata/videodrivers
117     CACHE=$KERNELBASE/.cache
118     MODULESUSED=$KERNELBASE/modules-used
119
120     touch $MODULESUSED
121
122     REQUIREMENTS="$TRIMMODALIAS $TRIMPCIIDS $PCIIDS $XDRIVERDESCS $GETMODDEPS $MODINFO
123                   $FILTERMODDEPS $LANGTABLE $GETKEYMAPS"
124
125     dieLater=
126     for n in $REQUIREMENTS; do
127         if [ ! -f $n ]; then
128             echo "$n doesn't exist"
129             dieLater=1
130         fi
131     done
132
133     for n in $BOOTDISKDIR; do
134         if [ ! -d $n ]; then
135             echo "$n doesn't exist"
136             dieLater=1
137         fi
138     done
139
140     if [ -n "$dieLater" ]; then exit 1; fi
141
142     if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
143        # go ahead and create the keymaps so we only have to do it once
144        if [ -f $IMGPATH/usr/lib/anaconda-runtime/keymaps-override-$BUILDARCH ]; then
145            echo "Found keymap override, using it"
146            cp $IMGPATH/usr/lib/anaconda-runtime/keymaps-override-$BUILDARCH $KEYMAPS
147        else
148            echo "Running: $GETKEYMAPS $BUILDARCH $KEYMAPS $IMGPATH"
149            $GETKEYMAPS $BUILDARCH $KEYMAPS $IMGPATH
150            if [ $? != 0 ]; then
151                echo "Unable to create keymaps and thus can't create initrd."
152                exit 1
153            fi
154        fi
155     fi
156  
157 findPackage() {
158     dir=$1
159     name=$2
160     
161     for n in $dir/$name*{$KERNELARCH,noarch}.rpm; do
162         thisName=$(rpm --nodigest --nosignature --qf '%{NAME}' -qp $n)
163         if [ -z "$thisName" ]; then
164             continue
165         fi
166         if [ $thisName = $name ]; then
167             echo $n
168             return
169         fi
170     done
171
172     echo "cannot find package $name in path $dir" >&2
173 }
174
175 findmodule () {
176     if [ ! -f $CACHE ]; then
177         find $KERNELROOT/lib/modules/ > $CACHE
178     fi
179     
180     grep "/$1\.ko" $CACHE
181 }
182
183 rundepmod () {
184     what=$1
185     final=$2
186
187     $FAKEARCH /sbin/depmod -a -F $KERNELROOT/boot/System.map-$version \
188             -b $KERNELROOT $version
189     mv $KERNELROOT/lib/modules/$version/modules.alias $MODALIAS
190
191     cat $KERNELROOT/lib/modules/$version/modules.dep | $FILTERMODDEPS > $final 
192 }
193
194 getmoddeps () {
195     what=$1
196     final=$2
197
198     for mod in $what ; do
199         mod=$(echo $mod | sed 's/\.ko  */|^/g;s/\.ko$//;s/.*\///')
200         egrep $mod $MODDEPS >> $final.foo
201     done
202     mv $final.foo $final
203 }
204
205 intcopymodules () {
206     dir=$2
207
208     for n in $1; do
209         m=$(findmodule $n)
210         if [ -z "$m" ]; then
211             [ -n "$DEBUG" ] && echo "Module $n not found in kernel rpm" >&2
212         else 
213             echo $n >> $MODULESUSED
214             for o in $m ; do 
215                 echo $n
216                 ver=$(echo $o |cut -d / -f 7)
217                 myarch=$(echo $o |cut -d / -f 4)
218                 if ! [ -d $dir/$ver/$myarch ] ; then mkdir -p $dir/$ver/$myarch ; fi
219                 if ! cp $o $dir/$ver/$myarch; then
220                     echo "Failed to copy $o to $dir/$ver/$myarch (for module $n)" >&2
221                 fi
222             done
223         fi
224     done
225 }
226
227 # This loops to make sure it resolves dependencies of dependencies of...
228 resdeps () {
229     items="$*"
230
231     before=1
232     after=2
233
234     while [ $before != $after ]; do
235         before=`echo $items | wc -c`
236
237         if [ $? != "0" ] ; then
238             kill -9 $$
239         fi      
240         list=`$GETMODDEPS -m $MODDEPS $items`
241         items=$(for n in $items $list; do echo $n; done | sort -u)
242         after=`echo $items | wc -c`
243     done
244
245     echo $items
246 }
247
248 expandModuleSet() {
249     SET=""
250     for name in $1; do
251         char=$(echo $name | cut -c1)
252         if [ $char = '=' ]; then
253             NAME=$(echo $name | cut -c2-)
254             SET="$SET $($MODLIST --modinfo-file $MODINFO $NAME)"
255         elif [ $char = '+' ]; then
256             NAME=$(echo $name | cut -c2-)
257
258             # all of the modules of this type
259             $MODLIST --modinfo-file $MODINFO $NAME > /tmp/emsAll.$$
260             # the modules used that are of this type
261             sort -u $MODULESUSED | cat - /tmp/emsAll.$$ | sort | 
262                     uniq -d > /tmp/emsUsed.$$
263             # the modules that are of this type, but not used
264             SET="$SET $(cat /tmp/emsAll.$$ /tmp/emsUsed.$$ | sort | uniq -u)"
265
266             rm -f /tmp/emsAll.$$ /tmp/emsUsed.$$
267         else
268             SET="$SET $name"
269         fi
270     done
271
272     echo $SET
273 }
274
275 makemoduleball() {
276     unset MMB_DD
277     MMB_MODINFO="module-info"
278     MMB_NAME="modules.cgz"
279
280     while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
281         if [ "$1" = "--dd" ]; then
282             MMB_DD="$2"
283             shift; shift
284             MMB_MODINFO="modinfo"
285             continue
286         elif [ "$1" = "--name" ]; then
287             MMB_NAME="$2"
288             shift; shift
289             continue
290         fi
291         echo "unknown option passed to $0"
292         exit 1
293     done
294
295     MMB_DIR=$1
296     MMB_MODULESET=$(resdeps $2)
297
298     rm -rf $MMB_DIR/modules $MMB_DIR/$MMB_NAME $MMB_DIR/modules.dep $MMB_DIR/modules.alias \
299            $MMB_DIR/modules.pcimap $MMB_DIR/pcitable $MMB_DIR/$MMB_MODINFO \
300            $MMB_DIR/pci.ids
301     mkdir -p $MMB_DIR/modules
302
303     MMB_MODULESET=$(intcopymodules "$MMB_MODULESET" $MMB_DIR/modules)
304
305     pushd $MMB_DIR/modules > /dev/null
306
307     $MODLIST --modinfo-file $MODINFO --ignore-missing --modinfo \
308         $MMB_MODULESET > ../$MMB_MODINFO
309
310     getmoddeps "$(find . -name *.ko)" ../modules.dep
311
312     # create the modules.alias file
313     $TRIMMODALIAS $(find . -name *.ko -exec basename {} \;) < $MODALIAS > ../modules.alias
314     
315     # create the pci.ids, from modules.alias and the X driver aliases
316     awk '!/^(\t\t|#)/ { print ;if ($0 == "ffff  Illegal Vendor ID") nextfile; }' < $PCIIDS | \
317       $TRIMPCIIDS ../modules.alias $XDRIVERS/* > ../pci.ids
318
319     if [ -n "$MMB_DD" ]; then
320         echo $MMB_DD > $MMB_DIR/rhdd
321     fi
322
323     find . -type f | cpio --quiet -H crc -o | gzip -9 > ../$MMB_NAME
324     cd ..
325     rm -rf modules
326     chmod 644 *
327     popd  > /dev/null
328 }
329
330 makeproductfile() {
331     root=$1
332
333     rm -f $root/.buildstamp
334     echo $IMAGEUUID > $root/.buildstamp
335     echo $PRODUCT >> $root/.buildstamp
336     echo $VERSION >> $root/.buildstamp
337     echo $PRODUCTPATH >> $root/.buildstamp
338     if [ -n "$BUGURL" ]; then
339         echo $BUGURL >> $root/.buildstamp
340     fi
341 }
342
343 setupShellEnvironment() {
344     # setup password/group entries
345     cat > $MBD_DIR/etc/passwd << EOF
346 root::0:0::/:/sbin/loader
347 debug::0:0:debug shell:/:/bin/bash
348 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
349 EOF
350     cat > $MBD_DIR/etc/group << EOF
351 root:x:0:root
352 tty:x:5:
353 EOF
354     echo "sshd:x:74:" >> $MBD_DIR/etc/group
355     echo "telnet          23/tcp" > $MBD_DIR/etc/services 
356     echo "tcp     6       TCP" > $MBD_DIR/etc/protocols
357
358     # PAM configuration
359     for i in pam_limits.so pam_env.so pam_unix.so pam_deny.so; do
360        cp -f $IMGPATH/$LIBDIR/security/$i $MBD_DIR/$LIBDIR/security
361     done
362     
363     cp -f $IMGPATH/etc/pam.d/other $MBD_DIR/etc/pam.d
364     cat > $MBD_DIR/etc/pam.d/login << EOF
365 #%PAM-1.0
366 auth        required      pam_env.so
367 auth        sufficient    pam_unix.so likeauth nullok
368 auth        required      pam_deny.so
369 account     required      pam_unix.so
370 password    sufficient    pam_unix.so nullok use_authtok md5 shadow
371 password    required      pam_deny.so
372 session     required      pam_limits.so
373 session     required      pam_unix.so
374 EOF
375     cp -f $MBD_DIR/etc/pam.d/login $MBD_DIR/etc/pam.d/sshd
376     cp -f $MBD_DIR/etc/pam.d/login $MBD_DIR/etc/pam.d/remote
377
378     cp -f $IMGPATH/etc/security/{limits.conf,pam_env.conf} $MBD_DIR/etc/security/
379
380     # setup xinetd for telnet
381     cp -f $IMGPATH/etc/xinetd.conf $MBD_DIR/etc/xinetd.conf
382     mkdir -p $MBD_DIR/etc/xinetd.d
383     cat > $MBD_DIR/etc/xinetd.d/telnet <<EOF
384 service telnet
385 {
386         flags           = REUSE
387         socket_type     = stream
388         wait            = no
389         user            = root
390         server          = /sbin/in.telnetd
391         log_on_failure  += USERID
392         disable         = no
393 }
394 EOF
395
396     # key generation takes ages on s390, you really don't want this for every
397     # installation attempt. These are NOT the keys of the installed system!
398     mkdir -m 0700 -p $MBD_DIR/etc/ssh
399     echo -n "Generating SSH1 RSA host key: "
400     /usr/bin/ssh-keygen -q -t rsa1 -f $MBD_DIR/etc/ssh/ssh_host_key \
401                         -C '' -N '' >&/dev/null
402     echo
403     echo -n "Generating SSH2 RSA host key: "
404     /usr/bin/ssh-keygen -q -t rsa -f $MBD_DIR/etc/ssh/ssh_host_rsa_key \
405                         -C '' -N '' >&/dev/null
406     echo
407     echo -n "Generating SSH2 DSA host key: "
408     /usr/bin/ssh-keygen -q -t dsa -f $MBD_DIR/etc/ssh/ssh_host_dsa_key \
409                         -C '' -N '' >&/dev/null
410     echo
411     (cd $MBD_DIR/etc/ssh; \
412         chmod 600 ssh_host_key ssh_host_rsa_key ssh_host_dsa_key; \
413         chmod 644 ssh_host_key.pub ssh_host_rsa_key.pub ssh_host_dsa_key.pub; )
414
415
416     cat > $MBD_DIR/etc/ssh/sshd_config <<EOF
417 Port 22
418 HostKey /etc/ssh/ssh_host_key
419 HostKey /etc/ssh/ssh_host_rsa_key
420 HostKey /etc/ssh/ssh_host_dsa_key
421 PermitRootLogin yes
422 IgnoreRhosts yes
423 StrictModes yes
424 X11Forwarding yes
425 X11DisplayOffset 10
426 PrintMotd yes
427 XAuthLocation /sbin/xauth
428 KeepAlive yes
429 SyslogFacility AUTHPRIV
430 RSAAuthentication yes
431 PasswordAuthentication yes
432 PermitEmptyPasswords yes
433 PermitUserEnvironment yes
434 EOF
435     chmod 600 $MBD_DIR/etc/ssh/sshd_config
436
437     # copy in the binaries
438     cp -f $IMGPATH/usr/bin/login $MBD_DIR/sbin/login
439     cp -f $IMGPATH/usr/sbin/sshd $MBD_DIR/sbin/sshd
440     cp -f $IMGPATH/usr/sbin/xinetd $MBD_DIR/sbin/xinetd
441     cp -f $IMGPATH/usr/sbin/in.telnetd $MBD_DIR/sbin/in.telnetd
442     cp -f $IMGPATH/usr/bin/bash $MBD_DIR/sbin/bash
443     cp -f $IMGPATH/usr/bin/busybox $MBD_DIR/sbin/busybox
444     
445     # make some symlinks
446     ln -sf bash $MBD_DIR/sbin/sh
447     (cd $MBD_DIR/sbin;
448         set $(./busybox 2>&1| awk '/^\t([[:alnum:]_\[]+,)+/' | sed 's/,//g' | sed 's/ +//');
449         while [ -n "$1" ]; do
450               if [ $1 != "busybox" -a $1 != "sh" ]; then
451                  # if file doesnt already exist, link to busybox
452                    if [ ! -f "$1" ]; then
453                       ln -sf ./busybox $1
454                    else
455                       [ -n "$DEBUG" ] && echo "Overriding busybox version of $1"
456                    fi
457               fi
458               shift
459          done )
460
461     # and copy libraries too
462     mkdir -p $MBD_DIR/$LIBDIR
463     for lib in $IMGPATH/$LIBDIR/libc.so* \
464                $IMGPATH/$LIBDIR/libc-*.so* \
465                $IMGPATH/$LIBDIR/ld-*.so* \
466                $IMGPATH/$LIBDIR/ld.so* \
467                $IMGPATH/$LIBDIR/ld64.so* \
468                $IMGPATH/$LIBDIR/libtermcap.so* \
469                $IMGPATH/$LIBDIR/libpam.so* \
470                $IMGPATH/$LIBDIR/libdl.so* \
471                $IMGPATH/$LIBDIR/libdl-*.so* \
472                $IMGPATH/$LIBDIR/libnss_files* \
473                $IMGPATH/$LIBDIR/libnsl* \
474                $IMGPATH/$LIBDIR/libutil.so* \
475                $IMGPATH/$LIBDIR/libutil-*.so* \
476                $IMGPATH/$LIBDIR/libcrypt*so* \
477                $IMGPATH/$LIBDIR/libselinux*so* \
478                $IMGPATH/$LIBDIR/libsepol*so* \
479                $IMGPATH/$LIBDIR/libattr*so* \
480                $IMGPATH/$LIBDIR/libresolv.so* \
481                $IMGPATH/$LIBDIR/libresolv-*.so* \
482                $IMGPATH/$LIBDIR/libm.so* \
483                $IMGPATH/$LIBDIR/libm-*.so* \
484                $IMGPATH/usr/$LIBDIR/libz.so* \
485                $IMGPATH/$LIBDIR/libssl* \
486                $IMGPATH/$LIBDIR/libcom_err* \
487                $IMGPATH/$LIBDIR/libe2p* \
488                $IMGPATH/$LIBDIR/libuuid* \
489                $IMGPATH/usr/$LIBDIR/libwrap*.so* \
490                $IMGPATH/usr/X11R6/$LIBDIR/libX11.so* \
491                $IMGPATH/usr/X11R6/$LIBDIR/libXmuu.so* \
492                $IMGPATH/usr/X11R6/$LIBDIR/libXext.so* \
493                $IMGPATH/usr/X11R6/$LIBDIR/libXt.so* \
494                $IMGPATH/usr/X11R6/$LIBDIR/libSM.so* \
495                $IMGPATH/usr/X11R6/$LIBDIR/libICE.so* ; do
496         if [ -e $lib ]; then cp -df $lib $MBD_DIR/$LIBDIR/ ; fi
497     done 
498
499     mkdir -p $MBD_DIR/usr/$LIBDIR
500     for lib in $IMGPATH/usr/$LIBDIR/libkrb5.so* \
501                $IMGPATH/usr/$LIBDIR/libkrb5support.so* \
502                $IMGPATH/usr/$LIBDIR/libgssapi_krb5.so* \
503                $IMGPATH/usr/$LIBDIR/libk5crypto.so* \
504                $IMGPATH/usr/$LIBDIR/libcom_err.so* ; do
505         if [ -e $lib ]; then cp -df $lib $MBD_DIR/usr/$LIBDIR/ ; fi
506     done 
507 }
508
509 makeinitrd() {
510     EXTRAINITRDPATH=""
511     INITRDSIZE=""
512     KEEP=""
513     PADSIZE=""
514     LOADERBIN=""
515     INITRDMODULES=""
516     MODULEBALLNAME="modules.cgz"
517     MYLANGTABLE=$LANGTABLE
518     MYLOADERTR=loader.tr
519     while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
520         if [ $1 = "--initrdto" ]; then
521             EXTRAINITRDPATH=$2
522             shift; shift
523             continue
524         elif [ $1 = "--keep" ]; then
525             KEEP=yes
526             shift
527             continue
528         elif [ $1 = "--initrdsize" ]; then
529             INITRDSIZE=$2
530             shift; shift
531             continue
532         elif [ $1 = "--loaderbin" ]; then
533             LOADERBIN=$2
534             shift; shift
535             continue
536         elif [ $1 = "--modules" ]; then
537             INITRDMODULES=$2
538             shift; shift
539             continue
540         elif [ $1 = "--moduleballname" ]; then
541             MODULEBALLNAME=$2
542             shift; shift
543             continue
544         fi
545         echo "Unknown option passed to makeinitrd"
546         exit 1
547     done
548     if [ -z "$LOADERBIN" ]; then
549         echo "no loader binary specified!" >&2
550         exit 1
551     fi
552     if [ -z "$INITRDMODULES" ]; then
553         echo "warning: no loader modules specified!" >&2
554     fi
555     if [ -z "$INITRDSIZE" ]; then
556         echo "I don't know how big to make the initrd image!" >&2
557         exit 1
558     fi
559
560     MBD_DIR=/tmp/makebootdisk.dir.$$
561     MBD_FSIMAGE=/tmp/makebootdisk.initrdimage.$$
562     MBD_BOOTTREE=/tmp/makebootdisk.tree.$$
563
564     rm -rf $MBD_DIR MBD_FSIMAGE
565     mkdir -p $MBD_DIR/modules
566     mkdir -p $MBD_DIR/sbin
567     mkdir -p $MBD_DIR/dev
568     mkdir -p $MBD_DIR/etc
569     mkdir -p $MBD_DIR/proc
570     mkdir -p $MBD_DIR/selinux
571     mkdir -p $MBD_DIR/sys
572     mkdir -p $MBD_DIR/tmp
573     mkdir -p $MBD_DIR/etc/terminfo/{a,b,d,l,s,v,x}
574     mkdir -p $MBD_DIR/var/state
575     mkdir -p $MBD_DIR/var/run
576     mkdir -p $MBD_DIR/var/lock/rpm
577
578     if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then
579         mkdir -p $MBD_DIR/dev/iseries
580     fi
581
582     if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
583         mkdir -m 111 -p $MBD_DIR/var/empty/sshd
584         mkdir -p $MBD_DIR/etc/{pam.d,security}
585         mkdir -p $MBD_DIR/$LIBDIR/security
586         cp $IMGPATH/$LIBDIR/libpam_misc.so.0.* $MBD_DIR/$LIBDIR/libpam_misc.so.0
587         ln -s /tmp $MBD_DIR/var/state/xkb
588         cp $IMGPATH/usr/X11R6/bin/xauth $MBD_DIR/sbin/xauth
589         cp $IMGPATH/usr/sbin/cmsfs* $MBD_DIR/sbin/
590     fi
591
592     if [ -n "$INITRDMODULES" ]; then
593         MODSET=`expandModuleSet "$INITRDMODULES"`
594         makemoduleball --name $MODULEBALLNAME $MBD_DIR/modules "$MODSET"
595     fi
596
597     cat > $MBD_DIR/etc/passwd << EOF
598     root::0:0:root:/:/bin/bash
599 EOF
600
601     # set up the arch bits
602     echo $arch > $MBD_DIR/etc/arch
603
604     install -s -m 755 $LOADERBINDIR/$LOADERBIN $MBD_DIR/sbin/loader
605     strip $MBD_DIR/sbin/loader
606     if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
607         install -s -m 755 $LOADERBINDIR/init $MBD_DIR/sbin
608         strip $MBD_DIR/sbin/init
609         ln -s ./init $MBD_DIR/sbin/shutdown
610         ln -s ./init $MBD_DIR/sbin/halt
611         ln -s ./init $MBD_DIR/sbin/poweroff
612     else
613         install -s -m 755 $LOADERBINDIR/shutdown $MBD_DIR/sbin/shutdown
614         install -m 755 $IMGPATH/usr/lib/anaconda-runtime/loader/linuxrc.s390 $MBD_DIR/sbin/init
615         install -m 755 $IMGPATH/usr/sbin/dasdfmt $MBD_DIR/sbin/dasdfmt
616     fi
617
618     if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
619        install -m 644 $KEYMAPS $MBD_DIR/etc/keymaps.gz
620        install -m 644 $SCREENFONT $MBD_DIR/etc/screenfont.gz
621     fi
622     install -m 644 $MYLANGTABLE $MBD_DIR/etc/lang-table
623     
624     install -m 644 $LOADERBINDIR/$MYLOADERTR $MBD_DIR/etc/loader.tr
625     for i in a/ansi d/dumb l/linux s/screen v/vt100 v/vt100-nav v/vt102 x/xterm x/xterm-color b/bterm g/gnome ; do
626         [ -f $IMGPATH/usr/share/terminfo/$i ] && \
627           install -m 644 $IMGPATH/usr/share/terminfo/$i $MBD_DIR/etc/terminfo/$i
628     done
629
630     makeproductfile $MBD_DIR
631
632     for n in insmod rmmod modprobe; do
633         ln -s loader $MBD_DIR/sbin/$n
634     done
635
636     ln -s /usr/bin/sh $MBD_DIR/sbin/sh
637     ln -s /sbin/init $MBD_DIR/init
638     ln -s /proc/mounts $MBD_DIR/etc/mtab
639     ln -s sbin $MBD_DIR/bin
640     mkdir -p $MBD_DIR/var/lib
641     ln -s ../../tmp $MBD_DIR/var/lib/xkb
642
643     # s390/s390x need sshd/telnet setup
644     if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
645         setupShellEnvironment
646     fi
647
648 cat > $MBD_DIR/.profile <<EOF
649 PATH=/bin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/mnt/sysimage/sbin:/mnt/sysimage/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin
650 export PATH
651 EOF
652
653     rm -f $MBD_FSIMAGE
654     (cd $MBD_DIR; find . |cpio --quiet -c -o) |gzip -9 > $MBD_FSIMAGE
655
656     size=$(du $MBD_FSIMAGE | awk '{ print $1 }')
657
658     echo "Wrote $MBD_FSIMAGE (${size}k compressed)"
659
660     if [ -n "$EXTRAINITRDPATH" ]; then
661         mkdir -p `dirname $EXTRAINITRDPATH`
662         cp -a $MBD_FSIMAGE $EXTRAINITRDPATH
663     fi
664
665     if [ -z "$KEEP" ]; then
666         rm -rf $MBD_FSIMAGE $MBD_BOOTTREE
667     fi
668 }
669
670 makeinstimage () {
671     imagename=$1
672     type=$2
673     tmpdir=/tmp/instimage.dir.$$
674
675     rm -rf $tmpimage $tmpdir
676     mkdir -p $mntpoint $tmpdir
677
678     mkdir -p $tmpdir
679     (cd $INSTIMGTEMPLATE; find . | cpio --quiet -p $tmpdir)
680     makeproductfile $tmpdir
681
682     if [ -z "$type" -o "$type" = "cramfs" ]; then 
683         echo "Running mkcramfs $CRAMBS $tmpdir $INSTIMGPATH/${imagename}2.img"
684         mkfs.cramfs $CRAMBS $tmpdir /tmp/${imagename}2.img.$$
685     elif [ "$type" = "squashfs" ]; then
686         echo "Running mksquashfs $tmpdir /tmp/${imagename}2.img -all-root"
687         mksquashfs $tmpdir /tmp/${imagename}2.img.$$ -all-root
688         chmod 0644 /tmp/${imagename}2.img.$$
689     fi
690     cp /tmp/${imagename}2.img.$$ $INSTIMGPATH/${imagename}2.img
691     size=$(ls -l $INSTIMGPATH/${imagename}2.img | awk '{print $5}')
692     size=$(expr $size / 1024)
693     echo "Wrote $INSTIMGPATH/${imagename}2.img (${size}k)..."
694     rm -rf $tmpdir
695 }
696
697 makemainimage () {
698     imagename=$1
699     type=$2
700     mmi_tmpimage=/tmp/instimage.img.$$
701     mmi_mntpoint=/tmp/instimage.mnt.$$
702     
703     rm -rf $mmi_tmpimage $mmi_mntpoint
704     mkdir $mmi_mntpoint
705
706     if [ $type = "ext2" ]; then
707         SIZE=$(du -sk $IMGPATH | awk '{ print int($1 * 1.1) }')
708         if [ -d $IMGPATH/usr/lib/anaconda-runtime ]; then
709             ERROR=$(du -sk $IMGPATH/usr/lib/anaconda-runtime | awk '{ print $1 }')
710             SIZE=$(expr $SIZE - $ERROR)
711         fi
712         dd if=/dev/zero bs=1k count=${SIZE} of=$mmi_tmpimage 2>/dev/null
713         mke2fs -q -F $mmi_tmpimage > /dev/null 
714         tune2fs -c0 -i0 $mmi_tmpimage >/dev/null
715         mount -o loop $mmi_tmpimage $mmi_mntpoint
716
717         (cd $IMGPATH; find . | fgrep -v "./usr/lib/anaconda-runtime" |
718                 cpio -H crc -o) | (cd $mmi_mntpoint; cpio -iumd)
719         makeproductfile $mmi_mntpoint
720         umount $mmi_mntpoint
721         rmdir $mmi_mntpoint
722     elif [ $type = "squashfs" ]; then
723         makeproductfile $IMGPATH
724         echo "Running mksquashfs $IMGPATH $mmi_tmpimage -all-root"
725         mksquashfs $IMGPATH $mmi_tmpimage -all-root
726         chmod 0644 $mmi_tmpimage
727         SIZE=$(expr `cat $mmi_tmpimage | wc -c` / 1024)
728     elif [ $type = "cramfs" ]; then
729         makeproductfile $IMGPATH
730         echo "Running mkcramfs $CRAMBS $IMGPATH $mmi_tmpimage"
731         mkfs.cramfs $CRAMBS $IMGPATH $mmi_tmpimage
732         SIZE=$(expr `cat $mmi_tmpimage | wc -c` / 1024)
733     fi
734     
735     cp $mmi_tmpimage $INSTIMGPATH/${imagename}.img
736     chmod 644 $INSTIMGPATH/${imagename}.img
737
738     echo "Wrote $INSTIMGPATH/${imagename}.img (${SIZE}k)"
739     
740     rm $mmi_tmpimage
741 }
742
743 makeSecondStage() {
744     echo "Building minstg.img"
745     makeinstimage "minstg" "squashfs"
746     [ $? = 0 ] || exit 1
747     echo "Building stage2.img"
748     makemainimage "stage2" "squashfs"
749     [ $? = 0 ] || exit 1
750 }
751
752 doPostImages() {
753    /bin/true
754 }
755
756 # source the architecture specific mk-images file so we can call functions
757 # in it
758 if [ ${BUILDARCH} = s390x ]; then
759     # FIXME: this is a bad hack for s390, but better than copying for now
760     source $TOPDIR/mk-images.s390
761 else
762     source $TOPDIR/mk-images.${BUILDARCH}
763 fi
764
765 # Find the kernel, unpack it, and verify it
766 kerneltags="kernel"
767 if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then
768     arches="ppc64pseries ppc64 ppc64iseries ppc"
769 elif [ "$BUILDARCH" = "i386" ]; then
770     arches="i586"
771     kerneltags="kernel kernel-xenU"
772 elif [ "$BUILDARCH" = "x86_64" ]; then
773     arches="x86_64"
774     kerneltags="kernel kernel-xenU"
775 else
776     arches="$BUILDARCH"
777 fi
778
779 foundakernel=""
780 for KERNELARCH in $arches; do
781   for kernelvers in $kerneltags; do
782     kpackage=$(findPackage $KERNELPATH $kernelvers)
783     if [ "$KERNELARCH" = "i586" -a ! -f "$kpackage" ]; then
784         echo "No i586 kernel, trying i686..."
785         KERNELARCH="i686"
786         kpackage=$(findPackage $KERNELPATH $kernelvers)
787     fi
788
789     if [ ! -f "$kpackage" ]; then
790         echo "kernel ($kernelvers) doesn't exist for $KERNELARCH.  skipping"
791         continue
792     fi
793
794     KERNELROOT=$KERNELBASE/$KERNELARCH
795     mkdir -p $KERNELROOT/lib/modules/misc
796
797     foundakernel="yes"
798
799     if [ "${kernelvers}" = "kernel-xenU" ]; then kerneltag="xenU" ; fi
800
801     version=$(rpm --nodigest --nosignature --qf '%{VERSION}-%{RELEASE}' -qp $kpackage)${kerneltag}
802     arch=$(rpm --nodigest --nosignature --qf '%{ARCH}\n' -qp $kpackage)
803     echo "unpacking $kpackage.$arch"
804
805     rpm2cpio $kpackage | (cd $KERNELROOT; cpio --quiet -iumd)
806
807     if [ ! -d "$KERNELROOT/lib/modules/$version" ]; then
808         echo "$KERNELROOT/lib/modules/$version is not a valid modules directory" 2>&1
809         exit 1
810     fi
811
812     if [ ! -f "$KERNELROOT/$KERNELDIR/${KERNELNAME}-$version" ]; then
813         echo "$KERNELROOT/$KERNELDIR/${KERNELNAME}-$version does not exist"
814         exit 1
815     fi
816
817     allmods=$(find $KERNELROOT/lib/modules/$version -name *.ko)
818
819     rundepmod "$allmods" $MODDEPS
820     find $KERNELROOT/lib/modules/$version > $CACHE
821
822     # make the boot images
823     makeBootImages
824   done
825 done
826
827 doPostImages
828
829 # do some clean up before making the cramfs of the second stage
830 rm -rf $INSTIMGTEMPLATE/usr/lib/anaconda-runtime $INSTIMGTEMPLATE/usr/lib/syslinux $IMGPATH/usr/lib/syslinux
831
832 if [ -n "$foundakernel" ]; then
833   # make the second stage
834   find $KERNELBASE/*/lib/modules/ > $CACHE
835   makeSecondStage
836   rm -rf $KERNELBASE
837 fi
838
839 cd $TOPDIR
This page took 0.152489 seconds and 3 git commands to generate.