Magellan Linux

Contents of /branches/mlivecdbuild-1_x_branch/mlivecdbuild2.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 348 - (show annotations) (download) (as text)
Sun Mar 5 02:18:28 2006 UTC (18 years, 2 months ago) by niro
Original Path: trunk/mlivecdbuild/mlivecdbuild2.sh
File MIME type: application/x-sh
File size: 4807 byte(s)
using isolinux.bin from mkinitrd package

1 #!/bin/bash
2
3 # some default settings - gets overidden with the profile config
4 CDPROFILE="$1"
5 [[ -z ${CDPROFILE} ]] && CDPROFILE="default"
6 LIVECDROOT="/mnt/MLIVECDBUILD/${CDPROFILE}"
7 CDCHROOTDIR="${LIVECDROOT}/chroot"
8 CDISONAME="livecd-${CDPROFILE}.iso"
9 CDISOROOT="${LIVECDROOT}/isoroot"
10 CDKERNELNAME="magelive"
11 CDHOSTNAME="livecd-${CDPROFILE}"
12 MAGERC="/etc/mage.rc"
13 MAGE_PROFILE="$(basename $(readlink /etc/mage-profile))"
14 #TOOLCHAIN=toolchain
15 BASESYSTEM=livecdsystem26
16 CDID="mlcd-$(date +%F-%k%M)"
17
18 # global profile pathes
19 PROFILES_DIR="/usr/lib/mlivecdbuild/profiles"
20 GLOBAL_PROFILE="${PROFILES_DIR}/global"
21
22 die() { echo "ERROR: $@"; exit 1; }
23
24 # get_profile $filename
25 get_profile()
26 {
27 local file="$1"
28
29 if [[ -z ${file} ]] || [[ ! -e ${PROFILES_DIR}/${CDPROFILE}/${file} ]]
30 then
31 echo "${GLOBAL_PROFILE}/${file}"
32 return 0
33 fi
34
35 echo "${PROFILES_DIR}/${CDPROFILE}/${file}"
36 }
37
38 bootstrap_system()
39 {
40 mage-bootstrap \
41 --root "${CDCHROOTDIR}" \
42 --magerc "${MAGERC}" \
43 --profile "${MAGE_PROFILE}" \
44 --toolchain "${TOOLCHAIN}" \
45 --basesystem "${BASESYSTEM}" \
46 || die "bootstrapping toolchain"
47 }
48
49 prepare_iso()
50 {
51 echo Preparing LiveCD ISO Image ...
52
53 # fixes some issues with xfree/xorg xkb
54 if [ -L "${CDCHROOTDIR}/etc/X11/xkb" -a -d "/usr/X11R6/lib/X11/xkb" ]
55 then
56 rm ${CDCHROOTDIR}/etc/X11/xkb || die
57 mv ${CDCHROOTDIR}/usr/X11R6/lib/X11/xkb ${CDCHROOTDIR}/etc/X11 || die
58 ln -s ../../../../etc/X11/xkb ${CDCHROOTDIR}/usr/X11R6/lib/X11/xkb || die
59 fi
60
61 install -m 0644 $(get_profile inittab) ${CDCHROOTDIR}/etc/inittab || die
62 install -m 0644 $(get_profile fstab) ${CDCHROOTDIR}/etc/fstab || die
63 install -m 0644 $(get_profile motd) ${CDCHROOTDIR}/etc/motd || die
64 install -m 0644 $(get_profile issue) ${CDCHROOTDIR}/etc/issue || die
65 echo "${CDHOSTNAME}" > ${CDCHROOTDIR}/etc/hostname || die
66
67 echo Setting up services ...
68
69 # change mountfs with mountfslivecd
70 MROOT="${CDCHROOTDIR}" rc-config del mountfs || die "rc del mountfs"
71 MROOT="${CDCHROOTDIR}" rc-config add mountfslivecd || die "rc add mountfslivecd"
72
73 # add hardware detection
74 MROOT="${CDCHROOTDIR}" rc-config add hwdetect || die "rc add hwdetect"
75
76 # del checkfs
77 MROOT="${CDCHROOTDIR}" rc-config del checkfs || die "rc del checkfs"
78
79 echo Cleaning unwanted files ...
80 :> ${CDCHROOTDIR}/etc/mtab || die "whiping /etc/mtab"
81 }
82
83 generate_rootfs()
84 {
85 echo Generating squashfs compressed rootfs loopfile ...
86 mksquashfs ${CDCHROOTDIR} ${LIVECDROOT}/livecdrootfs.sqsh #>/dev/null 2>&1
87
88 echo Moving rootfs loopfile to isoroot ...
89 install -d ${CDISOROOT}
90 mv ${LIVECDROOT}/livecdrootfs.sqsh ${CDISOROOT}
91 }
92
93 install_bootloader()
94 {
95 echo Installing Bootloader ...
96
97 # iso linux binary
98 install -d ${CDISOROOT}/isolinux
99 install /usr/lib/mkinitrd/isolinux.bin ${CDISOROOT}/isolinux || die
100
101 # kernel
102 local kimg="$(basename $(readlink ${CDCHROOTDIR}/boot/vmlinuz))"
103 install ${CDCHROOTDIR}/boot/${kimg} ${CDISOROOT}/isolinux/${CDKERNELNAME} || die
104
105 install -m 0644 $(get_profile isolinux.cfg) ${CDISOROOT}/isolinux || die
106 install -m 0644 $(get_profile boot.lss) ${CDISOROOT}/isolinux || die
107 install -m 0644 $(get_profile boot.msg) ${CDISOROOT}/isolinux || die
108 install -m 0644 $(get_profile help.msg) ${CDISOROOT}/isolinux || die
109
110 return 0
111 }
112
113 generate_initrd()
114 {
115 local CHROOTSH="$(mktemp -p ${CDCHROOTDIR})"
116 echo "DEBUG: ${CHROOTSH}"
117
118 echo Generating initrd image ...
119 echo '#!/bin/bash' > ${CHROOTSH} || die
120 echo 'kv="$(readlink /boot/vmlinuz)"' >> ${CHROOTSH} || die
121 echo 'kv="${kv/kernel-}/"' >> ${CHROOTSH} || die
122 echo 'mkinitrd-livecd -f --initramfs /initrd.gz ${kv}' >> ${CHROOTSH} || die
123 chmod +x ${CHROOTSH} || die
124 chroot ${CDCHROOTDIR} /$(basename ${CHROOTSH}) || die
125 [[ -f ${CHROOTSH} ]] && rm ${CHROOTSH} || die
126
127 # move initrd to isoroot
128 install -d ${CDISOROOT}/isolinux || die
129 mv ${CDCHROOTDIR}/initrd.gz ${CDISOROOT}/isolinux || die
130 }
131
132 generate_iso()
133 {
134 echo Generating ISO Image ...
135 install -d ${CDISOROOT}
136 pushd ${CDISOROOT} &&
137 mkisofs -rock \
138 -full-iso9660-filenames \
139 -allow-leading-dots \
140 -disable-deep-relocation \
141 -output ${LIVECDROOT}/${CDISONAME} \
142 -eltorito-boot isolinux/isolinux.bin \
143 -eltorito-catalog isolinux/boot.cat \
144 -no-emul-boot \
145 -boot-load-size 4 \
146 -boot-info-table \
147 -volid "${CDID}" \
148 ${CDISOROOT} #&> /dev/null
149 popd
150 }
151
152 enter_livecd()
153 {
154 mount -t sysfs sysfs ${CDCHROOTDIR}/proc
155 mount -t proc proc ${CDCHROOTDIR}/proc
156 mount -o bind /dev ${CDCHROOTDIR}/dev
157
158 chroot ${CDCHROOTDIR} \
159 /usr/bin/env -i \
160 HOME=/root \
161 TERM=$TERM PS1='\u:\w\$ ' \
162 PATH=/bin:/usr/bin:/sbin:/usr/sbin \
163 /bin/bash -i
164 }
165
166 # source profile config - overrides all other vars
167 [ -f ${PROFILES_DIR}/${CDPROFILE}/config ] && . ${PROFILES_DIR}/${CDPROFILE}/config
168
169 bootstrap_system
170 prepare_iso
171 generate_rootfs
172 generate_initrd
173 install_bootloader
174 generate_iso