summaryrefslogtreecommitdiffstats
path: root/build_tools/clarch/larch/buildlive
diff options
context:
space:
mode:
Diffstat (limited to 'build_tools/clarch/larch/buildlive')
-rw-r--r--build_tools/clarch/larch/buildlive538
1 files changed, 0 insertions, 538 deletions
diff --git a/build_tools/clarch/larch/buildlive b/build_tools/clarch/larch/buildlive
deleted file mode 100644
index 8b734d2..0000000
--- a/build_tools/clarch/larch/buildlive
+++ /dev/null
@@ -1,538 +0,0 @@
-# buildlive - functions to build larch live CD
-#
-# Author: Michael Towers <gradgrind[at]online[dot]de>
-#
-# This file is part of the larch project.
-#
-# larch is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# larch is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with larch; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-#
-#----------------------------------------------------------------------------
-# 2008.06.07
-
-# Location for the CD image
-CDDATA="${LARCHBUILD}/cd"
-
-############ ENTRY POINT - mklive ###############
-
-#+++++++mklive: main function for building larch system from
-# Arch installation at ${INSTLDIR}, which can
-# be '' to use currently running Arch installation.
-
-mklive ()
-{
- echo "//"
- echo "// **********************************************************"
- echo "//"
- if [ -n "${REUSE}" ] && [ -e ${CDDATA}/system.sqf ]; then
- echo "// ***** Recreating live CD with old squashed system"
- REGEN="yes"
- else
- echo "// ***** Creating live CD from system at '${INSTLDIR}'"
- REGEN="no"
- fi
-
- echo "//"
- echo "// This will delete EVERYTHING under ::: ${CDDATA} :::"
- echo "//"
- if [ -z "${DONTASK}" ]; then
- echo "// I really mean it ... Are you sure you want to do this?"
- echo "// **********************************************************"
- # Await yes or no
- read -p "[y/N]: " ans
- if [ -z "$( echo ${ans} | grep '^ *[yY]' )" ]; then return 0; fi
- echo
- fi
-
- # Get kernel version
- if ! find_kernel; then
- return 1
- fi
-
- # If not building live CD from currently running system, chroot is
- # needed sometimes. 'chrootx' simplifies this a bit.
- if [ -n "${INSTLDIR}" ]; then
- chrootx="chroot ${INSTLDIR} "
- else
- chrootx=""
- fi
-
- # Test for necessary packages/modules
- fail=0
- aufs=''
- if ! ${chrootx}grep /squashfs.ko \
- /lib/modules/${KVERSION}/modules.dep &>/dev/null; then
- echo "ERROR: No squashfs module found"
- fail=1
- fi
- if ${chrootx}grep /aufs.ko \
- /lib/modules/${KVERSION}/modules.dep &>/dev/null; then
- aufs='_aufs'
- echo "Using aufs"
- elif ${chrootx}grep /unionfs.ko \
- /lib/modules/${KVERSION}/modules.dep &>/dev/null; then
- echo "Using unionfs"
- else
- echo "ERROR: No aufs or unionfs module found"
- fail=1
- fi
- #a live package of some sort needs to be installed, but not specificly linhes-live
- #mustpacs="linhes-live lzop tar squashfs-tools"
- mustpacs="lzop tar squashfs-tools"
- if [ -z "${GRUB}" ]; then
- mustpacs="${mustpacs} syslinux"
- fi
- for p in ${mustpacs}; do
- pac=$( ls ${INSTLDIR}/var/lib/pacman/local | egrep "^${p}-[^-]+-[^-]+$" )
- if [ -z "${pac}" ]; then
- echo "ERROR: Package ${p} is not installed on target"
- fail=1
- fi
- done
-
- if [ -z "${USB}" ] && ! which mkisofs &>/dev/null; then
- echo "ERROR: mkisofs not found -"
- echo " cdrkit (or cdrtools) must be installed on host"
- fail=1
- fi
-
- if [ ${fail} -ne 0 ]; then
- return 1
- fi
-
- # Temporary directory for building stuff
- rm -rf ${LARCHBUILD}/tmp
- mkdir -p ${LARCHBUILD}/tmp
-
- # If using old sqf files move them to a temporary, safe location
- if [ ${REGEN} = "yes" ]; then
- echo "// moving old system image to ${LARCHBUILD}/tmp"
- mv ${CDDATA}/system.sqf ${LARCHBUILD}/tmp
- fi
-
-
- ############## START: copying data to boot medium image directory (CDDATA)
-
- # Clear out the directory.
- echo "// copying cd-root to ${CDDATA}"
- mkdir -p ${CDDATA}
- rm -Rf ${CDDATA}/*
-
- # cd-root: first general stuff, then from profile
- cp -R ${LARCHDATA}/cd-root/* ${CDDATA}
- if [ -n "${PROFILE}" ]; then
- cp -Rf ${PROFILE}/cd-root/* ${CDDATA}
- fi
-
- # kernel
- echo "// copying kernel from ${INSTLDIR}/boot to ${CDDATA}/boot/vmlinuz"
- echo "// ... using ${VMLINUZ}"
- cp -f ${INSTLDIR}/boot/${VMLINUZ} ${CDDATA}/boot/vmlinuz
-
- ### Generate initcpio (using chroot if necessary) then copy it to CDDATA
-
- # If there is a mkinitcpio.conf in profile, use it
- if [ -n "${PROFILE}" ] && [ -f ${PROFILE}/mkinitcpio.conf ]; then
- cp -f ${PROFILE}/mkinitcpio.conf ${INSTLDIR}/lib/initcpio
- fi
-
- # Fix up mkinitcpio.conf for unionfs/aufs
- sed -i "s|___aufs___|${aufs}|g" ${INSTLDIR}/lib/initcpio/mkinitcpio.conf
-
- echo "// calling gen_larch_init to generate the initramfs"
- ${chrootx}/lib/initcpio/gen_larch_init ${KVERSION}
- if [ -n "${INSTLDIR}" ]; then
- mv -f ${INSTLDIR}/larch.img ${CDDATA}/boot
- else
- mv -f larch.img ${CDDATA}/boot
- fi
-
- #!!!!! This can't be allowed if ${INSTLDIR} = ''
- # mkinitcpio seems to use the '/tmp' directory, so clear it out
- if [ -n "${INSTLDIR}" ]; then
- rm -rf ${INSTLDIR}/tmp/*
- fi
-
- ### END of initcpio generation
-
- ### if no saved system.sqf, squash the Arch installation at ${INSTLDIR}
- if [ ! -e "${LARCHBUILD}/tmp/system.sqf" ]; then
- ignorefiles=/.larch/ignorefiles
- :>${INSTLDIR}${ignorefiles}
-
- echo "// ignoring superfluous initrd/initramfs images from /boot"
- # Only the fallbacks should make it to system.sqf, as the others
- # won't work on other systems anyway, and should be regenerated.
- for i in $( ls ${INSTLDIR}/boot | grep "kernel.*\.img" ); do
- if [ -z "$( echo ${i} | grep "fallback" )" ]; then
- echo " ... ${i}"
- echo "boot/${i}" >>${INSTLDIR}${ignorefiles}
- fi
- done
-
- # root directories which are not included in the squashed system.sqf
- ignoredirs="dev mnt media proc sys tmp var .larch .livesys"
-
- echo "// creating compressed image of linux system: system.sqf"
- mksquash "/" "/.larch/tmp/system.sqf" -ef ${ignorefiles} \
- -e ${ignoredirs}
- if [ $? -ne 0 ]; then
- return 1
- fi
-
- # Add /var, but mask out some undesirable stuff: use mount --bind
- # first make fresh pacman cache, log and tmp directories
- mkdir -p ${LARCHBUILD}/tmp/varbld/paccache
- mkdir -p ${LARCHBUILD}/tmp/varbld/varlog/old
- :>${LARCHBUILD}/tmp/varbld/varlog/wtmp
- :>${LARCHBUILD}/tmp/varbld/varlog/utmp
- :>${LARCHBUILD}/tmp/varbld/varlog/btmp
- chmod 600 ${LARCHBUILD}/tmp/varbld/varlog/btmp
- :>${LARCHBUILD}/tmp/varbld/varlog/lastlog
- mkdir -m 1777 ${LARCHBUILD}/tmp/varbld/vartmp
- # and a mount point for var, then mount it
- mkdir -p ${LARCHBUILD}/tmp/varbld/var0/var
- mount --bind ${INSTLDIR}/var ${LARCHBUILD}/tmp/varbld/var0/var
- # mount the cover-ups
- mount --bind ${LARCHBUILD}/tmp/varbld/paccache \
- ${LARCHBUILD}/tmp/varbld/var0/var/cache/pacman
- mount --bind ${LARCHBUILD}/tmp/varbld/varlog \
- ${LARCHBUILD}/tmp/varbld/var0/var/log
- mount --bind ${LARCHBUILD}/tmp/varbld/vartmp \
- ${LARCHBUILD}/tmp/varbld/var0/var/tmp
- # do the squashing
- mksquash "/.larch/tmp/varbld/var0" "/.larch/tmp/system.sqf"
- res=$?
-
- # unmount all the binds
- umount ${LARCHBUILD}/tmp/varbld/var0/var/tmp
- umount ${LARCHBUILD}/tmp/varbld/var0/var/log
- umount ${LARCHBUILD}/tmp/varbld/var0/var/cache/pacman
- umount ${LARCHBUILD}/tmp/varbld/var0/var
- rm -r ${LARCHBUILD}/tmp/varbld
-
- if [ ${res} -ne 0 ]; then
- echo "Failed while extending /var"
- return 1
- fi
-
- fi
-
- # move system.sqf to boot-medium image directory
- echo "// moving squashed system image from ${LARCHBUILD}/tmp"
- mv ${LARCHBUILD}/tmp/system.sqf ${CDDATA}
- if [ $? -ne 0 ]; then
- echo "ERROR: failed to move system.sqf to build area"
- return 1
- fi
-
- ##### Prepare initial overlay
- echo "// building overlay"
-
- # Build overlay in a temporary directory
- rm -rf ${LARCHBUILD}/tmp/overlay
-
- # Copy over the overlay(s) from the selected profile
- if [ -n "${PROFILE}" ]; then
- # Note that ownership/mode of all files in overlay(.xpk) must be
- # correct! This information will be preserved.
- if [ -d ${PROFILE}/overlay ]; then
- cp -a ${PROFILE}/overlay ${LARCHBUILD}/tmp
- elif [ -f ${PROFILE}/overlay.xpk ]; then
- # deal with packed overlay
- ${PROFILE}/overlay.xpk ${LARCHBUILD}/tmp
- else
- mkdir ${LARCHBUILD}/tmp/overlay
- fi
-
- if [ -d ${PROFILE}/rootoverlay ]; then
- cp -rf ${PROFILE}/rootoverlay/* ${LARCHBUILD}/tmp/overlay
- fi
-
- fi
-
- # Ensure the overlay has at least the /etc folder
- mkdir -p ${LARCHBUILD}/tmp/overlay/etc
-
- # Save original /etc/inittab, /etc/rc.sysinit and /etc/rc.shutdown
- for fsave in inittab rc.sysinit rc.shutdown; do
- if [ -f ${INSTLDIR}/etc/${fsave}.livesave ]; then
- # A running larch system will already have this file, and it
- # shouldn't be overwritten
- echo "// /etc/${fsave}.livesave exists already, not overwriting"
- elif [ -f ${LARCHBUILD}/tmp/overlay/etc/${fsave}.livesave ]; then
- # A profile can supply this file in the overlay, and it
- # shouldn't be overwritten
- echo "// /etc/${fsave}.livesave found in overlay, not overwriting"
- else
- cp ${INSTLDIR}/etc/${fsave} \
- ${LARCHBUILD}/tmp/overlay/etc/${fsave}.livesave
- fi
- done
-
- # Place the live rc.sysinit and rc.shutdown scripts in the overlay
- cp ${INSTLDIR}/etc/rc.sysinit-live ${LARCHBUILD}/tmp/overlay/etc/rc.sysinit
- cp ${INSTLDIR}/etc/rc.shutdown-live ${LARCHBUILD}/tmp/overlay/etc/rc.shutdown
-
- # Add IgnorePkg to pacman.conf
- if ! [ -f ${LARCHBUILD}/tmp/overlay/etc/pacman.conf ]; then
- cp ${INSTLDIR}/etc/pacman.conf ${LARCHBUILD}/tmp/overlay/etc/pacman.conf
- fi
- if ! grep "+++LARCH-IGNORE+++" ${LARCHBUILD}/tmp/overlay/etc/pacman.conf \
- &>/dev/null; then
- igpak="IgnorePkg = kernel26 aufs initscripts"
- for pak in $( cat ${PROFILE}/noupdate 2>/dev/null ); do
- igpak="${igpak} ${pak}"
- done
- sed "/\[options\]/ a\#+++LARCH-IGNORE+++\n${igpak}\n#---LARCH-IGNORE---" \
- -i ${LARCHBUILD}/tmp/overlay/etc/pacman.conf
- fi
-
- # Generate customized /etc/rc.conf
- if [ -n "${PROFILE}" ] && [ -f ${PROFILE}/rcconfx ]; then
- # If there is one in the given overlay, start with that
- if [ ! -f ${LARCHBUILD}/tmp/overlay/etc/rc.conf ]; then
- # else copy the default one
- cp ${INSTLDIR}/etc/rc.conf ${LARCHBUILD}/tmp/overlay/etc
- fi
- cat ${PROFILE}/rcconfx | grep -v "^#" | grep "=" | { while read line; do
- var="$( echo ${line} | cut -d'=' -f1 )"
- sed -i "s|^${var}=.*|${line}|" \
- ${LARCHBUILD}/tmp/overlay/etc/rc.conf
- done }
- fi
-
- # Add hostname to /etc/hosts localhost, if making new rc.conf
- if [ -f ${LARCHBUILD}/tmp/overlay/etc/rc.conf ]; then
- hosts=${LARCHBUILD}/tmp/overlay/etc/hosts
- if ! [ -f ${LARCHBUILD}/tmp/overlay/etc/hosts ]; then
- cp ${INSTLDIR}/etc/hosts ${LARCHBUILD}/tmp/overlay/etc
- fi
- ( . ${LARCHBUILD}/tmp/overlay/etc/rc.conf;
- lh="127.0.0.1 localhost.localdomain localhost ";
- sed -i "s|^127\.0\.0\.1.*|${lh}${HOSTNAME}|" ${hosts}
- )
- fi
-
- # Handle /mnt
- mkdir -p ${LARCHBUILD}/tmp/overlay/mnt
- for d in $( ls ${INSTLDIR}/mnt ); do
- if [ -d ${INSTLDIR}/mnt/${d} ]; then
- mkdir ${LARCHBUILD}/tmp/overlay/mnt/${d}
- fi
- done
-
- echo "// creating compressed image of larch mods: mods.sqf"
-
- # Make 'mods' archive from all but /etc
- mksquash "/.larch/tmp/overlay" "/.larch/cd/mods.sqf" -e etc
- if [ $? -ne 0 ]; then
- return 1
- fi
-
- echo "// creating compressed image of remaining larch mods: overlay.ovl"
-
- # Compress the overlay (with root dir 'overlay' retained)
- ${chrootx} bash -c "tar -cf - -C /.larch/tmp overlay/etc |
- lzop > /.larch/cd/overlay.ovl"
-
- rm -rf ${LARCHBUILD}/tmp/overlay
-
- ##### End of overlay creation
- ############## END: copying data to boot medium image directory (CDDATA)
-
- # The boot medium image is now ready
- buildiso
-}
-
-
-
-########## START: functions for building iso from image directory ##########
-
-#+++++++buildiso: set up boot medium image folder and then
-# create iso or call usb medium handler
-
-buildiso ()
-{
- mkdir ${CDDATA}/tmp
- if [ -f ${CDDATA}/boot/vmlinuz ]; then
- bd=${CDDATA}/boot
- else
- bd=${CDDATA}/isolinux
- fi
- cp ${bd}/{vmlinuz,larch.img} ${CDDATA}/tmp
- rm -rf ${CDDATA}/{isolinux,boot}
- if [ -n "${GRUB}" ]; then
- mv ${CDDATA}/tmp ${CDDATA}/boot
-
- mkdir -p ${CDDATA}/boot/grub
- cp ${INSTLDIR}/usr/lib/grub/i386-pc/* ${CDDATA}/boot/grub
- cp -r ${LARCHDATA}/cd-root/boot ${CDDATA}
- if [ -n "${PROFILE}" ] && [ -d ${PROFILE}/cd-root/boot ]; then
- cp -rf ${PROFILE}/cd-root/boot ${CDDATA} 2>/dev/null
- fi
-
- if [ -n "${USB}" ]; then
- usbboot_grub ${INSTLDIR}
- else
- echo "// creating GRUB-booting LiveCD ISO image..."
- mkiso "-b boot/grub/stage2_eltorito"
- fi
- else
- mv ${CDDATA}/tmp ${CDDATA}/isolinux
-
- cp -r ${LARCHDATA}/cd-root/isolinux ${CDDATA}
- if [ -n "${PROFILE}" ] && [ -d ${PROFILE}/cd-root/isolinux ]; then
- cp -rf ${PROFILE}/cd-root/isolinux ${CDDATA} 2>/dev/null
- fi
-
- isolinuxbin=${INSTLDIR}/usr/lib/syslinux/isolinux.bin
- if [ -f ${isolinuxbin} ]; then
- cp ${isolinuxbin} ${CDDATA}/isolinux
- else
- echo "ERROR: ${isolinuxbin} not found -"
- echo " syslinux must be installed on live system"
- return 1
- fi
-
- #if [ -n "${USB}" ]; then
- # usbboot ${INSTLDIR}
- # else
- echo "// creating isolinux-booting LiveCD ISO image..."
- mkiso "-b isolinux/isolinux.bin -c isolinux/isolinux.boot"
- usbboot ${INSTLDIR} ${startdir}
-
- # fi
- fi
-}
-
-#+++++++mkiso: helper function for calling mkisofs
-
-mkiso ()
-{
- mkisofs -r -l $1 \
- -no-emul-boot -boot-load-size 4 -boot-info-table \
- -input-charset=UTF-8 \
- -publisher "Cecil H. Watson, license: GPL" \
- -A "LinHES_6" \
- -p "http://www.knoppmyth.net" \
- -o "${LARCHBUILD}/mylivecd.iso" "${CDDATA}"
-
- if [ $? -eq 0 ]; then
- echo "// Your ISO has been created as ${LARCHBUILD}/mylivecd.iso"
- else
- echo "ERROR: iso build failed" 1>&2
- return 1
- fi
-}
-
-########## END: functions for building iso ##########
-
-
-
-#+++++++mksquash: helper function for using mksquashfs via chroot
-
-mksquash ()
-{
- if [ -n "${INSTLDIR}" ]; then
- mount --bind /proc ${INSTLDIR}/proc
- eval chroot ${INSTLDIR} /sbin/mksquashfs $*
- umount ${INSTLDIR}/proc
- else
- /sbin/mksquashfs $*
- fi
- if [ $? -ne 0 ]; then
- echo "ERROR: squash failed --- mksquashfs $*"
- return 1
- fi
- chmod oga-x "${INSTLDIR}/$2" # remove execute attrib
-}
-
-
-#+++++++find_kernel: helper function to get kernel information
-
-find_kernel ()
-{
- # Discover kernel
- if [ -n "${PROFILE}" ] && [ -f ${PROFILE}/kernel ]; then
- . ${PROFILE}/kernel
- else
- VMLINUZ=( $( ls ${INSTLDIR}/boot | egrep ".*vmlinuz.*" ) )
- if [ ${#VMLINUZ[@]} -gt 1 ]; then
- echo "Error - more than 1 kernel found:"
- for k in ${VMLINUZ[@]}; do
- echo " $k"
- done
- return 1
- elif [ ${#VMLINUZ[@]} -ne 1 ]; then
- echo "Error - no kernel found"
- return 1
- fi
-
- # Discover kernel version
- KVERSION=""
- KVERSIONS=$( ls ${INSTLDIR}/lib/modules )
- for kv in ${KVERSIONS}; do
- # Check for 'build' symlink
- if [ -h ${INSTLDIR}/lib/modules/${kv}/build ]; then
- if [ -n "${KVERSION}" ]; then
- echo "Error - more than one set of kernel modules in ${INSTLDIR}/lib/modules"
- return 1
- fi
- KVERSION=${kv}
- else
- # Dubious set of modules found
- echo "WARNING:"
- echo " You seem to have installed a package containing modules"
- echo "which aren't compatible with your kernel."
- echo "Please check that this won't cause problems."
- echo "Maybe you need the corresponding package"
- echo "for your kernel?"
- km=$( find ${INSTLDIR}/lib/modules/${kv} -name "*.ko" | \
- sed "s|^${INSTLDIR}||" )
- pkgs=""
- for m in ${km}; do
- # Use pacman to find the owning package
- p=$( chroot ${INSTLDIR} pacman -Qo ${m} )
- # Extract the package name, and surround it with '|'s for easier matching
- pname="|$( echo "${p}" | cut -d " " -f 5 )|"
- # Only report each package once
- if [ -z "$( echo ${pkgs} | grep "${pname}" )" ]; then
- pkgs="${pkgs} ${pname}"
- echo ${p}
- echo " Package: $( echo "${pname}" | \
- sed "s/|//g" )"
- echo
- fi
- done
- # Await yes or no
- read -p "Continue? [y/N]: " ans
- if [ -z "$( echo ${ans} | grep '^ *[yY]' )" ]; then return 0; fi
- fi
- done
- fi
- if [ -z "${KVERSION}" ]; then
- echo "Error - couldn't find kernel modules"
- return 1
- fi
- echo "// Kernel version: ${KVERSION}"
- # Must regenerate kernel dependency files
- echo "// -> regenerating kernel dependencies"
- if [ -n "${INSTLDIR}" ]; then
- depmod -b "${INSTLDIR}" "${KVERSION}"
- else
- depmod "${KVERSION}"
- fi
- echo
-}