Magellan Linux

Diff of /trunk/mlivecdbuild/mlivecdbuild2.sh

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 978 by niro, Thu Apr 29 20:37:04 2010 UTC revision 1446 by niro, Fri Jul 29 11:14:07 2011 UTC
# Line 19  CDID="mlcd-$(date +%F-%k%M)" Line 19  CDID="mlcd-$(date +%F-%k%M)"
19  PROFILES_DIR="/usr/lib/mlivecdbuild/profiles"  PROFILES_DIR="/usr/lib/mlivecdbuild/profiles"
20  GLOBAL_PROFILE="${PROFILES_DIR}/global"  GLOBAL_PROFILE="${PROFILES_DIR}/global"
21    
22    # get full path to isolinux.bin, may vary on multilib systems
23    if [[ -f /usr/share/syslinux/isolinux.bin ]]
24    then
25     ISOLINUX_BIN=/usr/share/syslinux/isolinux.bin
26    elif [[ -f /usr/lib64/mkinitrd/isolinux.bin ]]
27    then
28     ISOLINUX_BIN=/usr/lib64/mkinitrd/isolinux.bin
29    else
30     ISOLINUX_BIN=/usr/lib/mkinitrd/isolinux.bin
31    fi
32    
33  die() { echo "ERROR: $@"; exit 1; }  die() { echo "ERROR: $@"; exit 1; }
34    
35  # get_profile $filename  # get_profile $filename
# Line 50  custom_services() Line 61  custom_services()
61  {  {
62   local cmd="$1"   local cmd="$1"
63   local services="$2"   local services="$2"
64     local systemdcmd
65    
66   case ${cmd} in   case ${cmd} in
67   add|del|default)   add|del|default)
# Line 59  custom_services() Line 71  custom_services()
71   local i   local i
72   for i in ${services}   for i in ${services}
73   do   do
74   MROOT="${CDCHROOTDIR}" rc-config ${cmd} ${i} || die "rc ${cmd} ${i}"   # systemd
75     if [[ -x ${CDCHROOTDIR}/sbin/systemctl ]]
76     then
77     case ${cmd} in
78     add) chroot ${CDCHROOTDIR} systemctl enable ${i} ;;
79     del) chroot ${CDCHROOTDIR} systemctl disable ${i} ;;
80     esac
81     fi
82     # busybox and sysvinit
83     if [[ -x ${CDCHROOTDIR}/sbin/rc-config ]]
84     then
85     MROOT="${CDCHROOTDIR}" rc-config ${cmd} ${i} || die "rc ${cmd} ${i}"
86     fi
87   done   done
88   fi   fi
89   ;;   ;;
# Line 144  prepare_iso() Line 168  prepare_iso()
168   ln -s ../../../../etc/X11/xkb ${CDCHROOTDIR}/usr/X11R6/lib/X11/xkb || die   ln -s ../../../../etc/X11/xkb ${CDCHROOTDIR}/usr/X11R6/lib/X11/xkb || die
169   fi   fi
170    
171   install -m 0644 $(get_profile inittab) ${CDCHROOTDIR}/etc/inittab || die   # only on sysvinit or busybox systems
172     if [[ -x ${CDCHROOTDIR}/sbin/rc-config ]]
173     then
174     install -m 0644 $(get_profile inittab) ${CDCHROOTDIR}/etc/inittab || die
175     fi
176     # check lock group on systemd systems
177     if [[ -x ${CDCHROOTDIR}/bin/systemctl ]]
178     then
179     if [[ -z $(chroot ${CDCHROOTDIR} getent group lock) ]]
180     then
181     chroot ${CDCHROOTDIR}  groupadd -g 54 lock
182     fi
183     fi
184   install -m 0644 $(get_profile fstab) ${CDCHROOTDIR}/etc/fstab || die   install -m 0644 $(get_profile fstab) ${CDCHROOTDIR}/etc/fstab || die
185   install -m 0644 $(get_profile motd) ${CDCHROOTDIR}/etc/motd || die   install -m 0644 $(get_profile motd) ${CDCHROOTDIR}/etc/motd || die
186   install -m 0644 $(get_profile issue) ${CDCHROOTDIR}/etc/issue || die   install -m 0644 $(get_profile issue) ${CDCHROOTDIR}/etc/issue || die
# Line 154  prepare_iso() Line 190  prepare_iso()
190   echo Setting up services ...   echo Setting up services ...
191    
192  # # add hardware detection  # # add hardware detection
193  # MROOT="${CDCHROOTDIR}" rc-config add hwdetect || die "rc add hwdetect"  # if [[ -x ${CDCHROOTDIR}/sbin/rc-config ]]
194    # then
195    # MROOT="${CDCHROOTDIR}" rc-config add hwdetect || die "rc add hwdetect"
196    # fi
197    
198   # del checkfs   # del checkfs
199   MROOT="${CDCHROOTDIR}" rc-config del checkfs || die "rc del checkfs"   if [[ -x ${CDCHROOTDIR}/sbin/rc-config ]]
200     then
201     MROOT="${CDCHROOTDIR}" rc-config del checkfs || die "rc del checkfs"
202     fi
203    
204   # add custom packages   # add custom packages
205   [[ -n ${ADD_PACKAGES} ]] && custom_packages install "${ADD_PACKAGES}"   [[ -n ${ADD_PACKAGES} ]] && custom_packages install "${ADD_PACKAGES}"
# Line 185  prepare_iso() Line 227  prepare_iso()
227   fi   fi
228    
229   echo Cleaning unwanted files ...   echo Cleaning unwanted files ...
230   :> ${CDCHROOTDIR}/etc/mtab || die "whiping /etc/mtab"   # do this only if not a symlink!
231     if [[ ! -L ${CDCHROOTDIR}/etc/mtab ]]
232     then
233     :> ${CDCHROOTDIR}/etc/mtab || die "whiping /etc/mtab"
234     fi
235   [ -f ${CDCHROOTDIR}/root/.bash_history ] && rm ${CDCHROOTDIR}/root/.bash_history   [ -f ${CDCHROOTDIR}/root/.bash_history ] && rm ${CDCHROOTDIR}/root/.bash_history
236  }  }
237    
238  generate_rootfs()  generate_rootfs()
239  {  {
240     local loopdev
241     local size
242    
243     if [ -f ${LIVECDROOT}/loop/LiveOS/ext3fs.img ]
244     then
245     rm ${LIVECDROOT}/loop/LiveOS/ext3fs.img || die
246     fi
247     if [ -f ${CDISOROOT}/LiveOS/squashfs.img ]
248     then
249     rm ${CDISOROOT}/LiveOS/squashfs.img
250     fi
251     if [ -f ${CDISOROOT}/livecdrootfs.sqsh ]
252     then
253     rm ${CDISOROOT}/livecdrootfs.sqsh
254     fi
255    
256   echo Generating squashfs compressed rootfs loopfile ...   echo Generating squashfs compressed rootfs loopfile ...
257   mksquashfs ${CDCHROOTDIR} ${LIVECDROOT}/livecdrootfs.sqsh #>/dev/null 2>&1   if [[ -x ${CDCHROOTDIR}/sbin/dracut ]]
258     then
259     install -d ${LIVECDROOT}/loop/{LiveOS,mnt} || die
260    
261     # get the actual size of the chroot
262     size=$(du -s chroot | sed 's:^\(.*\)[[:space:]].*:\1:')
263    
264     # generate a ext3fs file for devicemapper
265     dd if=/dev/zero of=${LIVECDROOT}/loop/LiveOS/ext3fs.img bs=1024 count=$(( ${size} + 10 )) || die
266     # create a filesystem
267     mkfs.ext3 -L "_${CDID}_EXT3" -m 1 -b 1024 -F ${LIVECDROOT}/loop/LiveOS/ext3fs.img || die
268     # set mount_counts and check_intervals to 0
269     # set dir_index top, to speed up thing with hashed b-trees
270     # allow acls too
271     tune2fs -c0 -i0 -Odir_index -ouser_xattr,acl ${LIVECDROOT}/loop/LiveOS/ext3fs.img || die
272    
273     # losetup the device
274     loopdev=$(losetup -f)
275     [[ -z ${loopdev} ]] && die "No unused loopdev found. Maybe you want 'modprobe loop'?"
276    
277     # mount the image
278     losetup ${loopdev} ${LIVECDROOT}/loop/LiveOS/ext3fs.img || die
279     mount ${loopdev} ${LIVECDROOT}/loop/mnt || die
280    
281     # copy everything to the image file and preserve permissions
282     ( cd ${CDCHROOTDIR} && tar cpf - . ) | ( cd ${LIVECDROOT}/loop/mnt && tar xvpf - )
283    
284     # now umount everything and create the squashfs image
285     umount ${LIVECDROOT}/loop/mnt || die
286     losetup -d ${loopdev} || die
287     # remove mount to not ending up in the squashfs image
288     if [[ -d ${LIVECDROOT}/loop/mnt ]]
289     then
290     rm -r ${LIVECDROOT}/loop/mnt || die
291     fi
292     mksquashfs ${LIVECDROOT}/loop ${LIVECDROOT}/livecdrootfs.sqsh || die
293    
294     # final cleanup
295     if [[ -d ${LIVECDROOT}/loop ]]
296     then
297     rm -r ${LIVECDROOT}/loop || die
298     fi
299     else
300     mksquashfs ${CDCHROOTDIR} ${LIVECDROOT}/livecdrootfs.sqsh || die
301     fi
302    
303   echo Moving rootfs loopfile to isoroot ...   echo Moving rootfs loopfile to isoroot ...
304   install -d ${CDISOROOT}   install -d ${CDISOROOT}
305   mv ${LIVECDROOT}/livecdrootfs.sqsh ${CDISOROOT}   if [[ -x ${CDCHROOTDIR}/sbin/dracut ]]
306     then
307     install -d ${CDISOROOT}/LiveOS
308     mv ${LIVECDROOT}/livecdrootfs.sqsh ${CDISOROOT}/LiveOS/squashfs.img
309     else
310     mv ${LIVECDROOT}/livecdrootfs.sqsh ${CDISOROOT}
311     fi
312  }  }
313    
314  install_bootloader()  install_bootloader()
# Line 205  install_bootloader() Line 317  install_bootloader()
317    
318   # iso linux binary   # iso linux binary
319   install -d ${CDISOROOT}/isolinux   install -d ${CDISOROOT}/isolinux
320   install /usr/lib/mkinitrd/isolinux.bin ${CDISOROOT}/isolinux || die   install ${ISOLINUX_BIN} ${CDISOROOT}/isolinux || die
321    
322   # kernel   # kernel
323   local kimg="$(basename $(readlink ${CDCHROOTDIR}/boot/vmlinuz))"   local kimg="$(basename $(readlink ${CDCHROOTDIR}/boot/vmlinuz))"
# Line 223  generate_initrd() Line 335  generate_initrd()
335  {  {
336   local CHROOTSH="$(mktemp -p ${CDCHROOTDIR})"   local CHROOTSH="$(mktemp -p ${CDCHROOTDIR})"
337    
338     is_loc_mounted "${CDCHROOTDIR}/sys" || mount -t sysfs sysfs ${CDCHROOTDIR}/sys
339     is_loc_mounted "${CDCHROOTDIR}/proc" || mount -t proc proc ${CDCHROOTDIR}/proc
340     is_loc_mounted "${CDCHROOTDIR}/dev" || mount -o bind /dev ${CDCHROOTDIR}/dev
341    
342   echo Generating initrd image ...   echo Generating initrd image ...
343   echo '#!/bin/bash' > ${CHROOTSH} || die   echo '#!/bin/bash' > ${CHROOTSH} || die
344     echo 'export LC_ALL=C' >> ${CHROOTSH} || die
345   echo 'kv="$(readlink /boot/vmlinuz)"' >> ${CHROOTSH} || die   echo 'kv="$(readlink /boot/vmlinuz)"' >> ${CHROOTSH} || die
346   echo 'kv="${kv/kernel-}/"' >> ${CHROOTSH} || die   echo 'kv="${kv/kernel-}/"' >> ${CHROOTSH} || die
347   echo 'mkinitrd-livecd -f --initramfs /initrd.gz ${kv}' >> ${CHROOTSH} || die   # prefer dracut
348     echo 'if [[ -x /sbin/dracut ]]' >> ${CHROOTSH} || die
349     echo 'then' >> ${CHROOTSH} || die
350     echo ' dracut -v -f /initrd.gz ${kv}' >> ${CHROOTSH} || die
351     echo 'else' >> ${CHROOTSH} || die
352     echo ' mkinitrd-livecd -f --initramfs /initrd.gz ${kv}' >> ${CHROOTSH} || die
353     echo 'fi' >> ${CHROOTSH} || die
354   chmod +x ${CHROOTSH} || die   chmod +x ${CHROOTSH} || die
355   chroot ${CDCHROOTDIR} /$(basename ${CHROOTSH}) || die   chroot ${CDCHROOTDIR} /$(basename ${CHROOTSH}) || die
356   [[ -f ${CHROOTSH} ]] && rm ${CHROOTSH} || die   [[ -f ${CHROOTSH} ]] && rm ${CHROOTSH} || die
357    
358     is_loc_mounted "${CDCHROOTDIR}/dev" && umount ${CDCHROOTDIR}/dev
359     is_loc_mounted "${CDCHROOTDIR}/proc" && umount ${CDCHROOTDIR}/proc
360     is_loc_mounted "${CDCHROOTDIR}/sys" && umount ${CDCHROOTDIR}/sys
361    
362   # move initrd to isoroot   # move initrd to isoroot
363   install -d ${CDISOROOT}/isolinux || die   install -d ${CDISOROOT}/isolinux || die
364   mv ${CDCHROOTDIR}/initrd.gz ${CDISOROOT}/isolinux || die   mv ${CDCHROOTDIR}/initrd.gz ${CDISOROOT}/isolinux || die
# Line 259  generate_iso() Line 386  generate_iso()
386    
387  enter_livecd()  enter_livecd()
388  {  {
389   mount -t sysfs sysfs ${CDCHROOTDIR}/sys   is_loc_mounted "${CDCHROOTDIR}/sys" || mount -t sysfs sysfs ${CDCHROOTDIR}/sys
390   mount -t proc proc ${CDCHROOTDIR}/proc   is_loc_mounted "${CDCHROOTDIR}/proc" || mount -t proc proc ${CDCHROOTDIR}/proc
391   mount -o bind /dev ${CDCHROOTDIR}/dev   is_loc_mounted "${CDCHROOTDIR}/dev" || mount -o bind /dev ${CDCHROOTDIR}/dev
392    
393   chroot ${CDCHROOTDIR} \   chroot ${CDCHROOTDIR} \
394   /usr/bin/env -i \   /usr/bin/env -i \
# Line 273  enter_livecd() Line 400  enter_livecd()
400   no_proxy=${no_proxy} \   no_proxy=${no_proxy} \
401   /bin/bash -i   /bin/bash -i
402    
403   umount ${CDCHROOTDIR}/dev   is_loc_mounted "${CDCHROOTDIR}/dev" && umount ${CDCHROOTDIR}/dev
404   umount ${CDCHROOTDIR}/proc   is_loc_mounted "${CDCHROOTDIR}/proc" && umount ${CDCHROOTDIR}/proc
405   umount ${CDCHROOTDIR}/sys   is_loc_mounted "${CDCHROOTDIR}/sys" && umount ${CDCHROOTDIR}/sys
406    }
407    
408    is_loc_mounted()
409    {
410     local filesys
411     local i
412     filesys=$1
413    
414     i="$(cat /proc/mounts | grep " ${filesys} " | cut -d ' ' -f2)"
415     [[ ${i} != ${filesys} ]] && return 1
416    
417     return 0
418    }
419    
420    trap_exit()
421    {
422     is_loc_mounted "${CDCHROOTDIR}/dev" && umount ${CDCHROOTDIR}/dev
423     is_loc_mounted "${CDCHROOTDIR}/proc" && umount ${CDCHROOTDIR}/proc
424     is_loc_mounted "${CDCHROOTDIR}/sys" && umount ${CDCHROOTDIR}/sys
425  }  }
426    
427  usage()  usage()
# Line 297  usage() Line 443  usage()
443   echo   echo
444  }  }
445    
446    # set some proper traps
447    trap "trap_exit" SIGINT SIGQUIT
448    
449  # source profile config - overrides all other vars  # source profile config - overrides all other vars
450  [ -f ${PROFILES_DIR}/${CDPROFILE}/config ] && . ${PROFILES_DIR}/${CDPROFILE}/config  [ -f ${PROFILES_DIR}/${CDPROFILE}/config ] && . ${PROFILES_DIR}/${CDPROFILE}/config
451    

Legend:
Removed from v.978  
changed lines
  Added in v.1446