]> git.pld-linux.org Git - packages/anaconda.git/blame - anaconda-mk-images
- copy over with anaconda-11.0.5
[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
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
3e6a3a30 101# Stuff that we need
81a99973 102 TRIMMODALIAS=$IMGPATH/usr/lib/anaconda-runtime/trimmodalias
3e6a3a30 103 TRIMPCIIDS=$IMGPATH/usr/lib/anaconda-runtime/trimpciids
3e6a3a30
PZ
104 GETKEYMAPS=$IMGPATH/usr/lib/anaconda-runtime/getkeymaps
105 KEYMAPS=/tmp/keymaps-$BUILDARCH.$$
81a99973 106 SCREENFONT=$IMGPATH/usr/lib/anaconda-runtime/screenfont-${BASEARCH}.gz
3e6a3a30
PZ
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
3e6a3a30 114 PCIIDS=$IMGPATH/usr/share/hwdata/pci.ids
81a99973
ER
115 XDRIVERS=$IMGPATH/usr/share/hwdata/videoaliases
116 XDRIVERDESCS=$IMGPATH/usr/share/hwdata/videodrivers
3e6a3a30
PZ
117 CACHE=$KERNELBASE/.cache
118 MODULESUSED=$KERNELBASE/modules-used
119
120 touch $MODULESUSED
121
81a99973
ER
122 REQUIREMENTS="$TRIMMODALIAS $TRIMPCIIDS $PCIIDS $XDRIVERDESCS $GETMODDEPS $MODINFO
123 $FILTERMODDEPS $LANGTABLE $GETKEYMAPS"
3e6a3a30
PZ
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
157findPackage() {
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
175findmodule () {
176 if [ ! -f $CACHE ]; then
177 find $KERNELROOT/lib/modules/ > $CACHE
178 fi
179
180 grep "/$1\.ko" $CACHE
181}
182
183rundepmod () {
184 what=$1
185 final=$2
186
187 $FAKEARCH /sbin/depmod -a -F $KERNELROOT/boot/System.map-$version \
188 -b $KERNELROOT $version
81a99973 189 mv $KERNELROOT/lib/modules/$version/modules.alias $MODALIAS
3e6a3a30
PZ
190
191 cat $KERNELROOT/lib/modules/$version/modules.dep | $FILTERMODDEPS > $final
192}
193
194getmoddeps () {
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
3e6a3a30
PZ
205intcopymodules () {
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...
228resdeps () {
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
248expandModuleSet() {
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
275makemoduleball() {
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
81a99973 298 rm -rf $MMB_DIR/modules $MMB_DIR/$MMB_NAME $MMB_DIR/modules.dep $MMB_DIR/modules.alias \
3e6a3a30
PZ
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
81a99973
ER
312 # create the modules.alias file
313 $TRIMMODALIAS $(find . -name *.ko -exec basename {} \;) < $MODALIAS > ../modules.alias
3e6a3a30 314
81a99973 315 # create the pci.ids, from modules.alias and the X driver aliases
3e6a3a30 316 awk '!/^(\t\t|#)/ { print ;if ($0 == "ffff Illegal Vendor ID") nextfile; }' < $PCIIDS | \
81a99973 317 $TRIMPCIIDS ../modules.alias $XDRIVERS/* > ../pci.ids
3e6a3a30
PZ
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
3e6a3a30
PZ
330makeproductfile() {
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
343setupShellEnvironment() {
344 # setup password/group entries
345 cat > $MBD_DIR/etc/passwd << EOF
346root::0:0::/:/sbin/loader
347debug::0:0:debug shell:/:/bin/bash
348sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
349EOF
350 cat > $MBD_DIR/etc/group << EOF
351root:x:0:root
352tty:x:5:
353EOF
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
366auth required pam_env.so
367auth sufficient pam_unix.so likeauth nullok
368auth required pam_deny.so
369account required pam_unix.so
370password sufficient pam_unix.so nullok use_authtok md5 shadow
371password required pam_deny.so
372session required pam_limits.so
373session required pam_unix.so
374EOF
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
384service 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}
394EOF
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
417Port 22
418HostKey /etc/ssh/ssh_host_key
419HostKey /etc/ssh/ssh_host_rsa_key
420HostKey /etc/ssh/ssh_host_dsa_key
421PermitRootLogin yes
422IgnoreRhosts yes
423StrictModes yes
424X11Forwarding yes
425X11DisplayOffset 10
426PrintMotd yes
427XAuthLocation /sbin/xauth
428KeepAlive yes
429SyslogFacility AUTHPRIV
430RSAAuthentication yes
431PasswordAuthentication yes
432PermitEmptyPasswords yes
433PermitUserEnvironment yes
434EOF
435 chmod 600 $MBD_DIR/etc/ssh/sshd_config
436
437 # copy in the binaries
72e73543 438 cp -f $IMGPATH/bin/login $MBD_DIR/sbin/login
3e6a3a30
PZ
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
72e73543
ER
442 cp -f $IMGPATH/bin/bash $MBD_DIR/sbin/bash
443 cp -f $IMGPATH/bin/busybox $MBD_DIR/sbin/busybox
3e6a3a30
PZ
444
445 # make some symlinks
81a99973 446 ln -sf bash $MBD_DIR/sbin/sh
3e6a3a30
PZ
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
509makeinitrd() {
510 EXTRAINITRDPATH=""
3e6a3a30
PZ
511 INITRDSIZE=""
512 KEEP=""
513 PADSIZE=""
514 LOADERBIN=""
515 INITRDMODULES=""
516 MODULEBALLNAME="modules.cgz"
517 MYLANGTABLE=$LANGTABLE
518 MYLOADERTR=loader.tr
3e6a3a30
PZ
519 while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
520 if [ $1 = "--initrdto" ]; then
521 EXTRAINITRDPATH=$2
522 shift; shift
523 continue
3e6a3a30
PZ
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
3e6a3a30
PZ
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
599EOF
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
81a99973 605 strip $MBD_DIR/sbin/loader
3e6a3a30
PZ
606 if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
607 install -s -m 755 $LOADERBINDIR/init $MBD_DIR/sbin
81a99973 608 strip $MBD_DIR/sbin/init
3e6a3a30
PZ
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
3e6a3a30
PZ
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
81a99973
ER
640 mkdir -p $MBD_DIR/var/lib
641 ln -s ../../tmp $MBD_DIR/var/lib/xkb
3e6a3a30
PZ
642
643 # s390/s390x need sshd/telnet setup
644 if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
645 setupShellEnvironment
646 fi
647
648cat > $MBD_DIR/.profile <<EOF
649PATH=/bin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/mnt/sysimage/sbin:/mnt/sysimage/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin
650export PATH
651EOF
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
3e6a3a30
PZ
670makeinstimage () {
671 imagename=$1
81a99973 672 type=$2
3e6a3a30
PZ
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)
3e6a3a30
PZ
680 makeproductfile $tmpdir
681
81a99973
ER
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
3e6a3a30
PZ
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
3e6a3a30
PZ
697makemainimage () {
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
81a99973
ER
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)
3e6a3a30
PZ
728 elif [ $type = "cramfs" ]; then
729 makeproductfile $IMGPATH
730 echo "Running mkcramfs $CRAMBS $IMGPATH $mmi_tmpimage"
81a99973 731 mkfs.cramfs $CRAMBS $IMGPATH $mmi_tmpimage
3e6a3a30
PZ
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
81a99973
ER
743makeSecondStage() {
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}
3e6a3a30 751
81a99973
ER
752doPostImages() {
753 /bin/true
3e6a3a30
PZ
754}
755
756# source the architecture specific mk-images file so we can call functions
757# in it
758if [ ${BUILDARCH} = s390x ]; then
759 # FIXME: this is a bad hack for s390, but better than copying for now
760 source $TOPDIR/mk-images.s390
3e6a3a30
PZ
761else
762 source $TOPDIR/mk-images.${BUILDARCH}
763fi
764
765# Find the kernel, unpack it, and verify it
81a99973 766kerneltags="kernel"
3e6a3a30
PZ
767if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then
768 arches="ppc64pseries ppc64 ppc64iseries ppc"
81a99973
ER
769elif [ "$BUILDARCH" = "i386" ]; then
770 arches="i586"
771 kerneltags="kernel kernel-xenU"
772elif [ "$BUILDARCH" = "x86_64" ]; then
773 arches="x86_64"
774 kerneltags="kernel kernel-xenU"
3e6a3a30
PZ
775else
776 arches="$BUILDARCH"
777fi
81a99973 778
3e6a3a30
PZ
779foundakernel=""
780for KERNELARCH in $arches; do
81a99973
ER
781 for kernelvers in $kerneltags; do
782 kpackage=$(findPackage $KERNELPATH $kernelvers)
3e6a3a30
PZ
783 if [ "$KERNELARCH" = "i586" -a ! -f "$kpackage" ]; then
784 echo "No i586 kernel, trying i686..."
785 KERNELARCH="i686"
81a99973 786 kpackage=$(findPackage $KERNELPATH $kernelvers)
3e6a3a30
PZ
787 fi
788
789 if [ ! -f "$kpackage" ]; then
81a99973 790 echo "kernel ($kernelvers) doesn't exist for $KERNELARCH. skipping"
3e6a3a30
PZ
791 continue
792 fi
793
794 KERNELROOT=$KERNELBASE/$KERNELARCH
81a99973 795 mkdir -p $KERNELROOT/lib/modules/misc
3e6a3a30
PZ
796
797 foundakernel="yes"
798
81a99973 799 if [ "${kernelvers}" = "kernel-xenU" ]; then kerneltag="xenU" ; fi
3e6a3a30 800
81a99973 801 version=$(rpm --nodigest --nosignature --qf '%{VERSION}-%{RELEASE}' -qp $kpackage)${kerneltag}
3e6a3a30
PZ
802 arch=$(rpm --nodigest --nosignature --qf '%{ARCH}\n' -qp $kpackage)
803 echo "unpacking $kpackage.$arch"
804
805 rpm2cpio $kpackage | (cd $KERNELROOT; cpio --quiet -iumd)
3e6a3a30
PZ
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
3e6a3a30
PZ
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
825done
826
81a99973
ER
827doPostImages
828
3e6a3a30
PZ
829# do some clean up before making the cramfs of the second stage
830rm -rf $INSTIMGTEMPLATE/usr/lib/anaconda-runtime $INSTIMGTEMPLATE/usr/lib/syslinux $IMGPATH/usr/lib/syslinux
831
832if [ -n "$foundakernel" ]; then
833 # make the second stage
834 find $KERNELBASE/*/lib/modules/ > $CACHE
835 makeSecondStage
836 rm -rf $KERNELBASE
837fi
838
839cd $TOPDIR
This page took 0.157472 seconds and 4 git commands to generate.