summaryrefslogtreecommitdiffstats
path: root/initramfs/cdboot/mkcdboot.uclib
blob: 2ae16809496df6fcdd970ec9d9e8c34bc38daee8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/bin/bash
# This program is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
#
# If you have any feedback please consult http://openslx.org/feedback and
# send your feedback to feedback@openslx.org
#
# General information about OpenSLX can be found at http://openslx.org
#
# Script for generating an uClib based InitRamFS for using a demo CD/DVD
# (via kexec mechanism) instead of PXE/linux boot functionality

BUILDDIR=/tmp/slxcdboot
SLX_SHARE_PATH=/opt/openslx/share
NWMODULES="forcedeth e1000 e100 tg3 3c59x via-rhine r8169 pcnet32 b44 8139too"
KERNVER=$(uname -r)

rm -rf ${BUILDDIR}
mkdir -p ${BUILDDIR}/{dev,proc,tmp,root,bin,sys,lib,etc}
mkdir -p ${BUILDDIR}/var/{lib,run}
ln -s /bin ${BUILDDIR}/sbin

cp ${SLX_SHARE_PATH}/cdboot/init ${BUILDDIR}/init
  chmod 755 ${BUILDDIR}/init

cp ${SLX_SHARE_PATH}/busybox/busybox.uclib.i586 ${BUILDDIR}/bin/busybox
for bbins in [ ar arping ash bunzip2 cat chmod chown chroot cp cpio cut \
    date dd df dmesg du echo env expr fdisk free grep gunzip hwclock \
    insmod id ip ipcalc kill killall ln ls lsmod mdev mkdir \
    mknod mkswap modprobe mount mv nice ping printf ps rdate \
    rm rmmod sed sleep sort swapoff swapon switch_root tar test tftp \
    time touch tr udhcpc umount uptime usleep vconfig vi wget zcat zcip; do
  ln -fs /bin/busybox ${BUILDDIR}/bin/$bbins
done
cp ${SLX_SHARE_PATH}/cdboot/kexec.uclib.i586 ${BUILDDIR}/bin/kexec

cp -a ${SLX_SHARE_PATH}/cdboot/uclib/* ${BUILDDIR}/lib

mkdir -p ${BUILDDIR}/lib/modules/${KERNVER}/kernel/drivers/net
cp /lib/modules/${KERNVER}/modules.dep ${BUILDDIR}/lib/modules/${KERNVER}
for module in af_packet unix ${NWMODULES} mii ; do
    mod=$(cd /; find "lib/modules/${KERNVER}" -name ${module}.ko 2>/dev/null)
    mpath=${BUILDDIR}/${mod%/*}
    mkdir -p ${mpath}
    cp /$mod /${mpath}
done

# finally create the compressed initial ramfs cpio archive
mkdir -p ${BUILDDIR}/iso/isolinux
cp ${SLX_SHARE_PATH}/cdboot/isolinux.bin ${BUILDDIR}/iso/isolinux
cp ${SLX_SHARE_PATH}/tftpboot/menu.c32 ${BUILDDIR}/iso/isolinux
cp /boot/vmlinuz-${KERNVER} ${BUILDDIR}/iso/isolinux/vmlinuz
pushd . > /dev/null 2>&1
  cd ${BUILDDIR}
  find . ! -name "*~" ! -path "./iso/*" | cpio -H newc --create | gzip -9 \
    > ${BUILDDIR}/iso/isolinux/cdirfs
popd > /dev/null 2>&1

# starting to setup the menu driven boot chooser
echo -e "DEFAULT menu.c32\nPROMPT 0\nMENU WIDTH 78\nMENU MARGIN 9\n\
MENU ROWS 9\nMENU TABMSGROW 15\nMENU CMDLINEROW 15\nMENU ENDROW -1\n\
MENU TIMEOUTROW 15\nMENU HELPMSGROW 15\nMENU HELPMSGENDROW -1\n\
MENU HSHIFT 0\nMENU VSHIFT 5\n\nMENU TITLE OpenSLX PreBoot ISO\
" > ${BUILDDIR}/iso/isolinux/isolinux.cfg
for i in NBD NFS DNBD2 ; do
  echo -e "LABEL OpenSLX\n\tMENU LABEL OpenSLX Client with $i as RootFS" \
    >> ${BUILDDIR}/iso/isolinux/isolinux.cfg
  echo -e "\tTEXT HELP\n\tYou should have DHCP running ...\n\tFor more \
information on this project consult the homepage on\n\t\t\
http://www.openslx.org\n\tENDTEXT" \
    >> ${BUILDDIR}/iso/isolinux/isolinux.cfg
  type=$(echo $i|tr [:upper:] [:lower:])
  echo -e "\tKERNEL vmlinuz\n\tAPPEND initrd=cdirfs $type quiet" \
    >> ${BUILDDIR}/iso/isolinux/isolinux.cfg
done

# write some info, if CD/DVD is still in drive
echo -e "You seem to have the OpenSLX network demo CD/DVD still in your \
optical\ndrive! This is not required. You may safely remove the medium \
just\nafter the first kernel/initramfs is loaded ...\n\nIf you have any \
feedback please consult http://openslx.org/feedback\nand send your comments \
to feedback@openslx.org!"  > ${BUILDDIR}/iso/README
echo -e "This package is free software distributed under the GPL version 2.\
\nSee http://openslx.org/COPYING" > ${BUILDDIR}/iso/LICENSE

# produce the iso image
mkisofs -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -r -J -l \
        -boot-info-table -o OpenSLX.iso -joliet-long -publisher "OpenSLX \
Project - http://www.openslx.org" -p "OpenSLX Project - \
openslx-devel@openslx.org" -relaxed-filenames -V "OpenSLX BootCD" \
        -volset "OpenSLX Project - PreBoot CD for non PXE/TFTP start of a \
Linux Stateless Client"  -c isolinux/boot.cat ${BUILDDIR}/iso