Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 346 - (hide annotations) (download) (as text)
Sat Mar 4 23:20:39 2006 UTC (18 years, 2 months ago) by niro
Original Path: trunk/mlivecdbuild/mlivecdbuild2.sh
File MIME type: application/x-sh
File size: 4811 byte(s)
initial relase of mlivecdbuild2; not ready for public yet

1 niro 346 #!/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/mlivecdbuild/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