Magellan Linux

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

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

revision 473 by niro, Thu Apr 19 17:13:20 2007 UTC revision 1422 by niro, Sun Jul 3 21:34:53 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 92  custom_packages() Line 116  custom_packages()
116   [[ -n ${ftp_proxy} ]] && add_initrc "export ftp_proxy=${ftp_proxy}"   [[ -n ${ftp_proxy} ]] && add_initrc "export ftp_proxy=${ftp_proxy}"
117   [[ -n ${no_proxy} ]] && add_initrc "export no_proxy=${no_proxy}"   [[ -n ${no_proxy} ]] && add_initrc "export no_proxy=${no_proxy}"
118    
119     # do not auto-start any services!
120     add_initrc "export MAGE_BOOTSTRAP=true"
121     add_initrc 'die() { if [ $? -eq 1 ]; then echo "ERROR: $@"; exit 1; fi; }'
122    
123   local i   local i
124   for i in ${packages}   for i in ${packages}
125   do   do
126   add_initrc "mage install ${i}"   add_initrc "mage ${cmd} ${i} || die ${i}"
127   done   done
128   add_initrc "mage clean"   add_initrc "mage clean"
129    
# Line 140  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   install -m 0644 $(get_profile fstab) ${CDCHROOTDIR}/etc/fstab || die   install -m 0644 $(get_profile fstab) ${CDCHROOTDIR}/etc/fstab || die
177   install -m 0644 $(get_profile motd) ${CDCHROOTDIR}/etc/motd || die   install -m 0644 $(get_profile motd) ${CDCHROOTDIR}/etc/motd || die
178   install -m 0644 $(get_profile issue) ${CDCHROOTDIR}/etc/issue || die   install -m 0644 $(get_profile issue) ${CDCHROOTDIR}/etc/issue || die
179     install -m 0644 $(get_profile net.eth0) ${CDCHROOTDIR}/etc/conf.d/net.eth0 || die
180   echo "${CDHOSTNAME}" > ${CDCHROOTDIR}/etc/hostname || die   echo "${CDHOSTNAME}" > ${CDCHROOTDIR}/etc/hostname || die
181    
182   echo Setting up services ...   echo Setting up services ...
183    
184   # add hardware detection  # # add hardware detection
185   MROOT="${CDCHROOTDIR}" rc-config add hwdetect || die "rc add hwdetect"  # if [[ -x ${CDCHROOTDIR}/sbin/rc-config ]]
186    # then
187    # MROOT="${CDCHROOTDIR}" rc-config add hwdetect || die "rc add hwdetect"
188    # fi
189    
190   # del checkfs   # del checkfs
191   MROOT="${CDCHROOTDIR}" rc-config del checkfs || die "rc del checkfs"   if [[ -x ${CDCHROOTDIR}/sbin/rc-config ]]
192     then
193     MROOT="${CDCHROOTDIR}" rc-config del checkfs || die "rc del checkfs"
194     fi
195    
196   # add custom packages   # add custom packages
197   [[ -n ${ADD_PACKAGES} ]] && custom_packages install "${ADD_PACKAGES}"   [[ -n ${ADD_PACKAGES} ]] && custom_packages install "${ADD_PACKAGES}"
# Line 180  prepare_iso() Line 219  prepare_iso()
219   fi   fi
220    
221   echo Cleaning unwanted files ...   echo Cleaning unwanted files ...
222   :> ${CDCHROOTDIR}/etc/mtab || die "whiping /etc/mtab"   # do this only if not a symlink!
223     if [[ ! -L ${CDCHROOTDIR}/etc/mtab ]]
224     then
225     :> ${CDCHROOTDIR}/etc/mtab || die "whiping /etc/mtab"
226     fi
227   [ -f ${CDCHROOTDIR}/root/.bash_history ] && rm ${CDCHROOTDIR}/root/.bash_history   [ -f ${CDCHROOTDIR}/root/.bash_history ] && rm ${CDCHROOTDIR}/root/.bash_history
228  }  }
229    
230  generate_rootfs()  generate_rootfs()
231  {  {
232     local loopdev
233     local size
234    
235     if [ -f ${LIVECDROOT}/loop/LiveOS/ext3fs.img ]
236     then
237     rm ${LIVECDROOT}/loop/LiveOS/ext3fs.img || die
238     fi
239     if [ -f ${CDISOROOT}/LiveOS/squashfs.img ]
240     then
241     rm ${CDISOROOT}/LiveOS/squashfs.img
242     fi
243     if [ -f ${CDISOROOT}/livecdrootfs.sqsh ]
244     then
245     rm ${CDISOROOT}/livecdrootfs.sqsh
246     fi
247    
248   echo Generating squashfs compressed rootfs loopfile ...   echo Generating squashfs compressed rootfs loopfile ...
249   mksquashfs ${CDCHROOTDIR} ${LIVECDROOT}/livecdrootfs.sqsh #>/dev/null 2>&1   if [[ -x ${CDCHROOTDIR}/sbin/dracut ]]
250     then
251     install -d ${LIVECDROOT}/loop/{LiveOS,mnt} || die
252    
253     # get the actual size of the chroot
254     size=$(du -s chroot | sed 's:^\(.*\)[[:space:]].*:\1:')
255    
256     # generate a ext3fs file for devicemapper
257     dd if=/dev/zero of=${LIVECDROOT}/loop/LiveOS/ext3fs.img bs=1024 count=$(( ${size} + 10 )) || die
258     # create a filesystem
259     mkfs.ext3 -L "_${CDID}_EXT3" -m 1 -b 1024 -F ${LIVECDROOT}/loop/LiveOS/ext3fs.img || die
260     # set mount_counts and check_intervals to 0
261     # set dir_index top, to speed up thing with hashed b-trees
262     # allow acls too
263     tune2fs -c0 -i0 -Odir_index -ouser_xattr,acl ${LIVECDROOT}/loop/LiveOS/ext3fs.img || die
264    
265     # losetup the device
266     loopdev=$(losetup -f)
267     [[ -z ${loopdev} ]] && die "No unused loopdev found. Maybe you want 'modprobe loop'?"
268    
269     # mount the image
270     losetup ${loopdev} ${LIVECDROOT}/loop/LiveOS/ext3fs.img || die
271     mount ${loopdev} ${LIVECDROOT}/loop/mnt || die
272    
273     # copy everything to the image file and preserve permissions
274     ( cd ${CDCHROOTDIR} && tar cpf - . ) | ( cd ${LIVECDROOT}/loop/mnt && tar xvpf - )
275    
276     # now umount everything and create the squashfs image
277     umount ${LIVECDROOT}/loop/mnt || die
278     losetup -d ${loopdev} || die
279     # remove mount to not ending up in the squashfs image
280     if [[ -d ${LIVECDROOT}/loop/mnt ]]
281     then
282     rm -r ${LIVECDROOT}/loop/mnt || die
283     fi
284     mksquashfs ${LIVECDROOT}/loop ${LIVECDROOT}/livecdrootfs.sqsh || die
285    
286     # final cleanup
287     if [[ -d ${LIVECDROOT}/loop ]]
288     then
289     rm -r ${LIVECDROOT}/loop || die
290     fi
291     else
292     mksquashfs ${CDCHROOTDIR} ${LIVECDROOT}/livecdrootfs.sqsh || die
293     fi
294    
295   echo Moving rootfs loopfile to isoroot ...   echo Moving rootfs loopfile to isoroot ...
296   install -d ${CDISOROOT}   install -d ${CDISOROOT}
297   mv ${LIVECDROOT}/livecdrootfs.sqsh ${CDISOROOT}   if [[ -x ${CDCHROOTDIR}/sbin/dracut ]]
298     then
299     install -d ${CDISOROOT}/LiveOS
300     mv ${LIVECDROOT}/livecdrootfs.sqsh ${CDISOROOT}/LiveOS/squashfs.img
301     else
302     mv ${LIVECDROOT}/livecdrootfs.sqsh ${CDISOROOT}
303     fi
304  }  }
305    
306  install_bootloader()  install_bootloader()
# Line 200  install_bootloader() Line 309  install_bootloader()
309    
310   # iso linux binary   # iso linux binary
311   install -d ${CDISOROOT}/isolinux   install -d ${CDISOROOT}/isolinux
312   install /usr/lib/mkinitrd/isolinux.bin ${CDISOROOT}/isolinux || die   install ${ISOLINUX_BIN} ${CDISOROOT}/isolinux || die
313    
314   # kernel   # kernel
315   local kimg="$(basename $(readlink ${CDCHROOTDIR}/boot/vmlinuz))"   local kimg="$(basename $(readlink ${CDCHROOTDIR}/boot/vmlinuz))"
# Line 218  generate_initrd() Line 327  generate_initrd()
327  {  {
328   local CHROOTSH="$(mktemp -p ${CDCHROOTDIR})"   local CHROOTSH="$(mktemp -p ${CDCHROOTDIR})"
329    
330     is_loc_mounted "${CDCHROOTDIR}/sys" || mount -t sysfs sysfs ${CDCHROOTDIR}/sys
331     is_loc_mounted "${CDCHROOTDIR}/proc" || mount -t proc proc ${CDCHROOTDIR}/proc
332     is_loc_mounted "${CDCHROOTDIR}/dev" || mount -o bind /dev ${CDCHROOTDIR}/dev
333    
334   echo Generating initrd image ...   echo Generating initrd image ...
335   echo '#!/bin/bash' > ${CHROOTSH} || die   echo '#!/bin/bash' > ${CHROOTSH} || die
336     echo 'export LC_ALL=C' >> ${CHROOTSH} || die
337   echo 'kv="$(readlink /boot/vmlinuz)"' >> ${CHROOTSH} || die   echo 'kv="$(readlink /boot/vmlinuz)"' >> ${CHROOTSH} || die
338   echo 'kv="${kv/kernel-}/"' >> ${CHROOTSH} || die   echo 'kv="${kv/kernel-}/"' >> ${CHROOTSH} || die
339   echo 'mkinitrd-livecd -f --initramfs /initrd.gz ${kv}' >> ${CHROOTSH} || die   # prefer dracut
340     echo 'if [[ -x /sbin/dracut ]]' >> ${CHROOTSH} || die
341     echo 'then' >> ${CHROOTSH} || die
342     echo ' dracut -v -f /initrd.gz ${kv}' >> ${CHROOTSH} || die
343     echo 'else' >> ${CHROOTSH} || die
344     echo ' mkinitrd-livecd -f --initramfs /initrd.gz ${kv}' >> ${CHROOTSH} || die
345     echo 'fi' >> ${CHROOTSH} || die
346   chmod +x ${CHROOTSH} || die   chmod +x ${CHROOTSH} || die
347   chroot ${CDCHROOTDIR} /$(basename ${CHROOTSH}) || die   chroot ${CDCHROOTDIR} /$(basename ${CHROOTSH}) || die
348   [[ -f ${CHROOTSH} ]] && rm ${CHROOTSH} || die   [[ -f ${CHROOTSH} ]] && rm ${CHROOTSH} || die
349    
350     is_loc_mounted "${CDCHROOTDIR}/dev" && umount ${CDCHROOTDIR}/dev
351     is_loc_mounted "${CDCHROOTDIR}/proc" && umount ${CDCHROOTDIR}/proc
352     is_loc_mounted "${CDCHROOTDIR}/sys" && umount ${CDCHROOTDIR}/sys
353    
354   # move initrd to isoroot   # move initrd to isoroot
355   install -d ${CDISOROOT}/isolinux || die   install -d ${CDISOROOT}/isolinux || die
356   mv ${CDCHROOTDIR}/initrd.gz ${CDISOROOT}/isolinux || die   mv ${CDCHROOTDIR}/initrd.gz ${CDISOROOT}/isolinux || die
# Line 252  generate_iso() Line 376  generate_iso()
376   popd   popd
377  }  }
378    
 generate_dvd()  
 {  
  echo Generating DVD Image ...  
  install -d ${CDISOROOT}  
  pushd ${CDISOROOT} &&  
  growisofs -dvd-compat \  
  -rock \  
  -full-iso9660-filenames \  
  -allow-leading-dots \  
  -disable-deep-relocation \  
  -output ${LIVECDROOT}/${CDISONAME} \  
  -eltorito-boot isolinux/isolinux.bin \  
  -eltorito-catalog isolinux/boot.cat \  
  -no-emul-boot \  
  -boot-load-size 4 \  
  -boot-info-table \  
  -volid "${CDID}" \  
  ${CDISOROOT} #&> /dev/null  
  popd  
 }  
   
379  enter_livecd()  enter_livecd()
380  {  {
381   mount -t sysfs sysfs ${CDCHROOTDIR}/proc   is_loc_mounted "${CDCHROOTDIR}/sys" || mount -t sysfs sysfs ${CDCHROOTDIR}/sys
382   mount -t proc proc ${CDCHROOTDIR}/proc   is_loc_mounted "${CDCHROOTDIR}/proc" || mount -t proc proc ${CDCHROOTDIR}/proc
383   mount -o bind /dev ${CDCHROOTDIR}/dev   is_loc_mounted "${CDCHROOTDIR}/dev" || mount -o bind /dev ${CDCHROOTDIR}/dev
384    
385   chroot ${CDCHROOTDIR} \   chroot ${CDCHROOTDIR} \
386   /usr/bin/env -i \   /usr/bin/env -i \
# Line 288  enter_livecd() Line 391  enter_livecd()
391   ftp_proxy=${ftp_proxy} \   ftp_proxy=${ftp_proxy} \
392   no_proxy=${no_proxy} \   no_proxy=${no_proxy} \
393   /bin/bash -i   /bin/bash -i
394    
395     is_loc_mounted "${CDCHROOTDIR}/dev" && umount ${CDCHROOTDIR}/dev
396     is_loc_mounted "${CDCHROOTDIR}/proc" && umount ${CDCHROOTDIR}/proc
397     is_loc_mounted "${CDCHROOTDIR}/sys" && umount ${CDCHROOTDIR}/sys
398    }
399    
400    is_loc_mounted()
401    {
402     local filesys
403     local i
404     filesys=$1
405    
406     i="$(cat /proc/mounts | grep " ${filesys} " | cut -d ' ' -f2)"
407     [[ ${i} != ${filesys} ]] && return 1
408    
409     return 0
410    }
411    
412    trap_exit()
413    {
414     is_loc_mounted "${CDCHROOTDIR}/dev" && umount ${CDCHROOTDIR}/dev
415     is_loc_mounted "${CDCHROOTDIR}/proc" && umount ${CDCHROOTDIR}/proc
416     is_loc_mounted "${CDCHROOTDIR}/sys" && umount ${CDCHROOTDIR}/sys
417  }  }
418    
419  usage()  usage()
# Line 301  usage() Line 427  usage()
427   echo "    initrd     - generates a livecd suitable initrd"   echo "    initrd     - generates a livecd suitable initrd"
428   echo "    bootloader - installs the bootloader"   echo "    bootloader - installs the bootloader"
429   echo "    isogen     - generate the final livecd iso image"   echo "    isogen     - generate the final livecd iso image"
  echo "    dvdgen     - same as isogen but creates a dvd-image"  
430   echo "    all        - runs all tasks to get a livecd from zero"   echo "    all        - runs all tasks to get a livecd from zero"
431   echo "    enter      - enters the rootfs of a livecd"   echo "    enter      - enters the rootfs of a livecd"
432   echo   echo
# Line 310  usage() Line 435  usage()
435   echo   echo
436  }  }
437    
438    # set some proper traps
439    trap "trap_exit" SIGINT SIGQUIT
440    
441  # source profile config - overrides all other vars  # source profile config - overrides all other vars
442  [ -f ${PROFILES_DIR}/${CDPROFILE}/config ] && . ${PROFILES_DIR}/${CDPROFILE}/config  [ -f ${PROFILES_DIR}/${CDPROFILE}/config ] && . ${PROFILES_DIR}/${CDPROFILE}/config
443    
# Line 320  case $1 in Line 448  case $1 in
448   initrd) generate_initrd;;   initrd) generate_initrd;;
449   bootloader) install_bootloader;;   bootloader) install_bootloader;;
450   isogen) generate_iso;;   isogen) generate_iso;;
  dvdgen) generate_dvd;;  
451   all)   all)
452   bootstrap_system   bootstrap_system
453   prepare_iso   prepare_iso
454   generate_rootfs   generate_rootfs
455   generate_initrd   generate_initrd
456   install_bootloader   install_bootloader
457   if [[ ${DEFINE_DVD} = 1 ]]   generate_iso
  then  
  generate_dvd  
  else  
  generate_iso  
  fi  
458   ;;   ;;
459   enter) enter_livecd ;;   enter) enter_livecd ;;
460   *|'') usage;;   *|'') usage;;

Legend:
Removed from v.473  
changed lines
  Added in v.1422