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