diff options
Diffstat (limited to 'abs/core/linhes-live')
20 files changed, 1538 insertions, 0 deletions
diff --git a/abs/core/linhes-live/PKGBUILD b/abs/core/linhes-live/PKGBUILD new file mode 100644 index 0000000..d497fcf --- /dev/null +++ b/abs/core/linhes-live/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: R. Dale Thomas <rdt[at]KnoppMyth[dot]net> +# 2008.09.25 +pkgname=linhes-live +pkgver=5.3.3 +pkgrel=4 + +pkgdesc="LinHes compulsory components for the Live System." +url="http://KnoppMyth.net" +depends=() +arch=( i586 i686 x86_64 ) +license=('GPL') + +build() { + # setup the local environment: + local rDir=bin eDir=etc lDir=lib sDir=session-save oDir=opt/$pkgname + local srcDir=${startdir}/src pkgDir=${startdir}/pkg + local insDir=${pkgDir}/$oDir proDir=${pkgDir}/${eDir}/profile.d + + mkdir -p $pkgDir $insDir $proDir + cp -dr ${startdir}/$eDir $pkgDir + local pthDir= + echo 'export PATH=${PATH}:'"/$oDir/$rDir" > ${proDir}/${pkgname}.sh + cp -dr ${startdir}/$lDir $pkgDir + cp -dr ${startdir}/$rDir $insDir + [ -d ${startdir}/$sDir ] && cp -dr ${startdir}/$sDir $insDir + chown -R root.root $pkgDir + return 0 +} + +# End diff --git a/abs/core/linhes-live/bin/gen_fstab b/abs/core/linhes-live/bin/gen_fstab new file mode 100755 index 0000000..db36546 --- /dev/null +++ b/abs/core/linhes-live/bin/gen_fstab @@ -0,0 +1,122 @@ +#! /bin/sh +# +# gen_fstab - make new fstab for larch live system based on detected devices +# +# 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 +# +#---------------------------------------------------------------------------- +# 2007.12.17 + +# Note that the results are, by default, not copied into place +# They end up here: +DEST="/tmp/fstab" +MNT="/tmp/mnt" + +# However, passing '-l' as command-line option will install them. +# The old fstab will then be backed up to fstab~. +LOAD="" +if [ "$1" = "-l" ]; then LOAD="-l"; fi + +if [ -n "$( df | grep " ${MNT}" )" ]; then + echo "ERROR: Mounted filesystem at/within ${MNT}" + exit 1 +fi +mkdir -p ${MNT} +rm -rf ${MNT}/* + +tmpfile="/tmp/fstab2" +: >${tmpfile} + +echo "# fstab generated by gen_fstab" >${DEST} +echo "#<file system> <dir> <type> <options> <dump> <pass>" >>${DEST} +echo >>${DEST} + +echo "none /dev/pts devpts defaults 0 0" >>${DEST} +echo "none /dev/shm tmpfs defaults 0 0" >>${DEST} +echo >>${DEST} + +# Get all other partitions +sfdisk -d | grep "^/dev/" | sed "s|\(.*\):.*Id=\(..\).*|\1 \2|" | \ + while read dev id; do + # Ignore if id is "Extended" or "LVM", these are not usable partitions + if [ "${id}" = "5" -o "${id}" = "8e" ]; then continue; fi + # See if swap + if [ "${id}" = "82" ]; then + printf "%-12s %-12s %-8s defaults,noatime 0 0\n" \ + ${dev} swap swap >>${DEST} + continue + fi + removable="" + part=$( basename ${dev} ) + if [ $( cat /sys/block/${part:0:3}/removable 2>/dev/null ) -ne 0 ]; then + removable="_rmv" + fi + mountdir=${part}${removable} + printf "%-12s %-12s %-8s user,noauto,noatime 0 0\n" \ + ${dev} /mnt/${mountdir} auto >>${tmpfile} + mkdir -p ${MNT}/${mountdir} + done + +# LVM +for lvmd in $( ls /dev/mapper 2>/dev/null | grep -v control ); do + printf "%-30s %-22s %-8s user,noauto,noatime 0 0\n" \ + /dev/mapper/${lvmd} /mnt/${lvmd} auto >>${tmpfile} + mkdir -p ${MNT}/${lvmd} +done + +echo >>${DEST} +cat ${tmpfile} >>${DEST} +rm ${tmpfile} +echo >>${DEST} + +# CD devices +for dev in $( cat /proc/sys/dev/cdrom/info 2>/dev/null | head -n 3 | \ + tail -n 1 | cut -d ":" -f 2 ); do + mountdir="${dev}_cd" + mkdir ${MNT}/${mountdir} + printf "%-12s %-12s %-8s user,noauto,exec,unhide 0 0\n" \ + /dev/${dev} /mnt/${mountdir} auto >>${DEST} +done + +echo >>${DEST} +echo "# This would do for a floppy" >>${DEST} +echo "#/dev/fd0 /mnt/floppy vfat,ext2 rw,user,noauto 0 0" >>${DEST} +echo "# + mkdir /mnt/floppy" >>${DEST} +echo >>${DEST} +echo "# E.g. for USB storage:" >>${DEST} +echo "#/dev/sdb1 /mnt/usb auto rw,user,noauto 0 0" >>${DEST} +echo "# + mkdir /mnt/usb" >>${DEST} + +if [ -n "${LOAD}" ]; then + # test if the script is started by root user. If not, exit + if [ $UID -ne 0 ]; then + echo "Only root can run ${APP}"; exit 1 + fi + + cp -b ${DEST} /etc/fstab + # Delete removeable mount points which are not currently mounted + for m in $( ls /mnt | grep ^[hs]d ); do + if [ -z "$( df | grep " /mnt/${m}$" )" ]; then + rmdir /mnt/${m} + fi + done + for m in $( ls ${MNT} ); do + mkdir -p /mnt/${m} + done +fi diff --git a/abs/core/linhes-live/bin/km b/abs/core/linhes-live/bin/km new file mode 100755 index 0000000..386d966 --- /dev/null +++ b/abs/core/linhes-live/bin/km @@ -0,0 +1,76 @@ +#!/bin/sh +# $Id: km,v 1.2 2005/12/13 04:14:53 judd Exp $ +# Modified by gradgrind to deal only with i386 keymaps +# and BASEDIR changed +# - also saves results to /etc/rc.conf + +# test if the script is started by root user. If not, exit +if [ $UID -ne 0 ]; then + echo "This should be run as root"; exit 1 +fi + +ANSWER="/tmp/.km" +BASEDIR="/usr/share/kbd" + +domenu() +{ + menutype=$1 ; shift + text=$1 ; shift + height=$1 ; shift + width=$1 ; shift + mheight=$1 ; shift + + dialog --cancel-label "Skip" --$menutype "$text" $height $width $mheight $* +} + +if [ ! -d $BASEDIR/keymaps ]; then + echo "Cannot load keymaps, as none were found in $BASEDIR/keymaps" >&2 + exit 1 +else + echo "Scanning for keymaps..." + KEYMAPS= + for t in qwerty qwertz azerty dvorak; do + for i in `find $BASEDIR/keymaps/i386/$t -follow -name "*.gz"`; do + fn=`echo $i | sed "s|$BASEDIR/keymaps/i386/||"` + KEYMAPS="$KEYMAPS $fn -" + done + done + domenu menu "Select A Keymap" 22 60 16 $KEYMAPS 2>$ANSWER + keymap=`cat $ANSWER` +fi + +if [ ! -d $BASEDIR/consolefonts ]; then + echo "Cannot load consolefonts, as none were found in $BASEDIR/consolefonts" >&2 +else + echo "Scanning for fonts..." + FONTS= + for i in `find $BASEDIR/consolefonts -follow -name "*.gz"`; do + fn=`echo $i | sed "s|$BASEDIR/consolefonts/||"` + FONTS="$FONTS $fn -" + done + domenu menu "Select A Console Font" 22 60 16 $FONTS 2>$ANSWER + font=`cat $ANSWER` +fi + +if [ "$keymap" ]; then + echo "Loading keymap: $keymap" + loadkeys -q $BASEDIR/keymaps/i386/$keymap + sed -i "s|^KEYMAP=.*|KEYMAP=\"$( echo $keymap | \ + cut -d'.' -f1 )\"|" /etc/rc.conf +fi + +if [ "$font" ]; then + echo "Loading font: $font" + for i in `seq 1 4`; do + if [ -d /dev/vc ]; then + setfont $BASEDIR/consolefonts/$font -C /dev/vc/${i} + else + setfont $BASEDIR/consolefonts/$font -C /dev/tty${i} + fi + done + sed -i "s|^CONSOLEFONT=.*|CONSOLEFONT=\"$( echo $font | \ + cut -d'.' -f1 )\"|" /etc/rc.conf +fi + +exit 0 + diff --git a/abs/core/linhes-live/etc/live-shutdown b/abs/core/linhes-live/etc/live-shutdown new file mode 100644 index 0000000..807ec47 --- /dev/null +++ b/abs/core/linhes-live/etc/live-shutdown @@ -0,0 +1,50 @@ +# Functions used by rc.shutdown +# Modified versions for linhes live systems + +f_saveclock () +{ + : +} + +f_swapoff () +{ + ############################# Include session saving functions + . /opt/linhes-live/session-save/shutdown2 + if [ -f /tmp/checkse ]; then + . /tmp/checkse + else + checkse + fi + + if [ -n "${saving}" ] && ! session_save; then + echo + echo "If you know what you are doing, you may be able to recover" + echo "something from this unpleasant situation." + echo + echo "You may use the command line to investigate further ..." + echo + echo "When finished please enter 'exit', the shutdown process will" + echo "then continue." + sh -i + fi + + ############################# + + stat_busy "Deactivating Swap" + /sbin/swapoff -a + stat_done +} + +f_remountro () +{ + if [ -n "${ejectdev}" ]; then + echo "Ejecting live CD" + eject ${ejectdev} + echo "========================================" + echo "It's safe to switch the computer off now" + echo -ne "Press Enter to continue" + read junk + fi +} + +# End diff --git a/abs/core/linhes-live/etc/live-sysinit b/abs/core/linhes-live/etc/live-sysinit new file mode 100644 index 0000000..abab4a8 --- /dev/null +++ b/abs/core/linhes-live/etc/live-sysinit @@ -0,0 +1,54 @@ +# Functions used by rc.sysinit +# Modified versions for linhes live systems + +f_header () +{ + cR='\e[31m' cY='\e[1;33m' cN='\e[0m' cW='\e[1;37m' + echo " " + printsep + printf " ${cR}LinHes ${cY}Installation${cN}/${cY}Live${cW} CDROM${cN}. " + printsep + echo " " +} + +f_fscheck () +{ + stat_busy "Initializing /etc/mtab" + #/bin/mount -n -o remount,rw / + + /bin/rm -f /etc/mtab* + + # Make entries for aufs/unionfs, tmpfs and live medium in /etc/mtab + grep "^aufs */ " /proc/mounts >>/etc/mtab + grep "^unionfs */ " /proc/mounts >>/etc/mtab + grep "^tmpfs */.livesys " /proc/mounts >>/etc/mtab + if [ -d /.livesys/medium/live ]; then + grep " /.livesys/medium " /proc/mounts >>/etc/mtab + fi + + f_mountlocal + stat_done + + if [ -z "$( cat /etc/fstab | grep "^#KEEP" )" ]; then + stat_busy "Generating fresh /etc/fstab" + /opt/linhes-live/bin/gen_fstab -l + stat_done + fi + + # now mount all the local filesystems + stat_busy "Mounting Local Filesystems" + /bin/mount -a -t $NETFS + stat_done +} + +f_swapon () +{ + #+*** Copy session-save flag-file (if it exists) + [ -f /live/nosave ] && cp /live/nosave /.livesys + #-*** + + #*** Conditional swap activation + if [ -e /.livesys/swapon ]; then + status "Activating Swap" /sbin/swapon -a + fi +} diff --git a/abs/core/linhes-live/etc/loginroot b/abs/core/linhes-live/etc/loginroot new file mode 100755 index 0000000..e3153c6 --- /dev/null +++ b/abs/core/linhes-live/etc/loginroot @@ -0,0 +1,3 @@ +#! /bin/sh +login -f root +# End diff --git a/abs/core/linhes-live/etc/rc.shutdown-live b/abs/core/linhes-live/etc/rc.shutdown-live new file mode 100755 index 0000000..7fa97e6 --- /dev/null +++ b/abs/core/linhes-live/etc/rc.shutdown-live @@ -0,0 +1,167 @@ +#!/bin/bash +# +# /etc/rc.shutdown +# + +### +# Based on initscripts 2008.05-1 +### + +. /etc/rc.conf +. /etc/rc.d/functions + +############################################################### +### These functions have been separated out, so that they can be +### replaced in linhes live systems. + +f_saveclock () +{ + stat_busy "Saving System Clock" + if [ "$TIMEZONE" != "" -a -e "/usr/share/zoneinfo/$TIMEZONE" ]; then + /bin/rm -f /etc/localtime + /bin/cp "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime + fi + + HWCLOCK_PARAMS="--systohc" + if [ "$HARDWARECLOCK" = "UTC" ]; then + HWCLOCK_PARAMS="$HWCLOCK_PARAMS --utc" + else + HWCLOCK_PARAMS="$HWCLOCK_PARAMS --localtime" + fi + if [ "$USEDIRECTISA" = "yes" -o "$USEDIRECTISA" = "YES" ]; then + HWCLOCK_PARAMS="$HWCLOCK_PARAMS --directisa" + fi + /sbin/hwclock $HWCLOCK_PARAMS + stat_done +} + +f_swapoff () +{ + stat_busy "Deactivating Swap" + /sbin/swapoff -a + stat_done +} + +f_remountro () +{ + stat_busy "Remounting Root Filesystem Read-only" + /bin/mount -n -o remount,ro / + stat_done +} + +############################################################### + +### Override above functions if running linhes live system +[ -f /etc/live-shutdown ] && . /etc/live-shutdown + +# avoid staircase effect +/bin/stty onlcr + +echo " " +printhl "Initiating Shutdown..." +echo " " + +# avoid NIS hanging syslog-ng on shutdown by unsetting the domainname +if [ -x /bin/domainname ]; then + /bin/domainname "" +fi + +if [ -x /etc/rc.local.shutdown ]; then + /etc/rc.local.shutdown +fi + +if [ "$PREVLEVEL" = "3" -o "$PREVLEVEL" = "5" ]; then + # Shutdown daemons + let i=${#DAEMONS[@]} + while [ $i -ge 0 ]; do + if [ "${DAEMONS[$i]:0:1}" != '!' ]; then + ck_daemon ${DAEMONS[$i]#@} || /etc/rc.d/${DAEMONS[$i]#@} stop + fi + let i=i-1 + done + # find any leftover daemons and shut them down in reverse order + if [ -d /var/run/daemons ]; then + for daemon in $(/bin/ls -1t /var/run/daemons); do + /etc/rc.d/$daemon stop + done + fi +fi + +# Terminate all processes +stat_busy "Sending SIGTERM To Processes" +/sbin/killall5 -15 &> /dev/null +/bin/sleep 5 +stat_done + +stat_busy "Sending SIGKILL To Processes" +/sbin/killall5 -9 &> /dev/null +/bin/sleep 1 +stat_done + +stat_busy "Saving Random Seed" +/bin/dd if=/dev/urandom of=/var/run/random-seed count=1 bs=512 2> /dev/null +stat_done + +#F Save system time +f_saveclock + +# removing psmouse module to fix some reboot issues on newer laptops +/sbin/modprobe -r psmouse >/dev/null 2>&1 + +# Write to wtmp file before unmounting +/sbin/halt -w + +#F Deactivate swaps +f_swapoff + +stat_busy "Unmounting Filesystems" +/bin/umount -a -t noramfs,notmpfs,nosysfs,noproc +stat_done + +# Kill non-root encrypted partition mappings +if [ -f /etc/crypttab -a -n "$(/bin/grep -v ^# /etc/crypttab | /bin/grep -v ^$)" ]; then + stat_busy "Deactivating encrypted volumes:" + CS=/sbin/cryptsetup.static + do_uncrypt() { + if [ $# -ge 3 ]; then + stat_append "${1}.." + $CS remove $1 >/dev/null 2>&1 + if [ $? -ne 0 ]; then + stat_append "failed " + else + stat_append "ok " + fi + fi + } + while read line; do + eval do_uncrypt "$line" + done </etc/crypttab + stat_done +fi + +if [ "$USELVM" = "yes" -o "$USELVM" = "YES" ]; then + if [ -x /sbin/lvm -a -d /sys/block ]; then + stat_busy "Deactivating LVM2 groups" + /sbin/lvm vgchange --ignorelockingfailure -an >/dev/null 2>&1 + stat_done + fi +fi + +#F Remount / ro +f_remountro + +# Power off or reboot +if [ "$RUNLEVEL" = "0" ]; then + printsep + printhl "${C_H2}POWER OFF" + /sbin/poweroff -d -f -h -i +else + printsep + printhl "${C_H2}REBOOTING" + # if kexec is installed and a kernel is loaded, use it + [ -x /sbin/kexec ] && /sbin/kexec -e > /dev/null 2>&1 + /sbin/reboot -d -f -i +fi + +# vim: set ts=2 sw=2 noet: +# End diff --git a/abs/core/linhes-live/etc/rc.sysinit-live b/abs/core/linhes-live/etc/rc.sysinit-live new file mode 100755 index 0000000..3f72a50 --- /dev/null +++ b/abs/core/linhes-live/etc/rc.sysinit-live @@ -0,0 +1,466 @@ +#!/bin/bash +# +# /etc/rc.sysinit +# + +### +# Based on initscripts 2008.05-1 +### + +. /etc/rc.conf +. /etc/rc.d/functions + +############################################################### +### These functions have been separated out, so that they can be +### replaced in linhes live systems. + +f_header () +{ + echo " " + printhl "Arch Linux $C_OTHER(${C_H2}Core Dump$C_OTHER)\n" + printhl "${C_H2}http://www.archlinux.org" + printhl "Copyright 2002-2007 Judd Vinet" + printhl "Copyright 2007-2008 Aaron Griffin" + printhl "Distributed under the GNU General Public License (GPL)" + printsep +} + +f_fscheck () +{ + status "Mounting Root Read-only" /bin/mount -n -o remount,ro / + + if [ -x /sbin/fsck ]; then + stat_busy "Checking Filesystems" + if /bin/grep -qw quiet /proc/cmdline; then + /sbin/fsck -A -T -C -a -t $NETFS $FORCEFSCK >/dev/null 2>&1 + else + /sbin/fsck -A -T -C -a -t $NETFS $FORCEFSCK 2>/dev/null + fi + fsckret=$? + if [ ${fsckret} -gt 1 ]; then + stat_fail + if [ $((${fsckret}&2)) -eq 2 ]; then + echo + echo "********************** REBOOT REQUIRED *********************" + echo "* *" + echo "* The system will be rebooted automatically in 15 seconds. *" + echo "* *" + echo "************************************************************" + echo + /bin/sleep 15 + else + echo + echo "***************** FILESYSTEM CHECK FAILED ****************" + echo "* *" + echo "* Please repair manually and reboot. Note that the root *" + echo "* file system is currently mounted read-only. To remount *" + echo "* it read-write type: mount -n -o remount,rw / *" + echo "* When you exit the maintenance shell the system will *" + echo "* reboot automatically. *" + echo "* *" + echo "************************************************************" + echo + /sbin/sulogin -p + fi + echo "Automatic reboot in progress..." + /bin/umount -a + /bin/mount -n -o remount,ro / + /sbin/reboot -f + exit 0 + fi + stat_done + fi + + stat_busy "Mounting Local Filesystems" + /bin/mount -n -o remount,rw / + /bin/rm -f /etc/mtab* + # make sure / gets written to /etc/mtab + /bin/mount -o remount,rw / + + f_mountlocal + stat_done +} + +f_mountlocal () +{ + # Write /proc, /sys and /dev to /etc/mtab + if [ -e /proc/mounts ]; then + /bin/grep -e "/proc " -e "/sys " -e "/dev " /proc/mounts >> /etc/mtab + fi + # now mount all the local filesystems + /bin/mount -a -t $NETFS +} + +f_swapon () +{ + status "Activating Swap" /sbin/swapon -a +} + +############################################################### + +### Override above functions if running linhes live system +[ -f /etc/live-sysinit ] && . /etc/live-sysinit + +#F Print header +f_header + +# mount /proc, /sys and our RAM /dev +/bin/mount -n -t ramfs none /dev +/bin/mount -n -t proc none /proc +/bin/mount -n -t sysfs none /sys + +# Create our default nodes that minilogd may need +/bin/mknod /dev/null c 1 3 +/bin/mknod /dev/zero c 1 5 +/bin/mknod /dev/console c 5 1 + +# More initial /dev setup that udev doesn't do +/bin/ln -snf /proc/self/fd /dev/fd +/bin/ln -snf /proc/self/fd/0 /dev/stdin +/bin/ln -snf /proc/self/fd/1 /dev/stdout +/bin/ln -snf /proc/self/fd/2 /dev/stderr +/bin/ln -snf /proc/kcore /dev/core +/bin/mkdir /dev/pts +/bin/mkdir /dev/shm + +# start up our mini logger until syslog takes over +/sbin/minilogd + +# anything more serious than KERN_WARNING goes to the console +# 'verbose' cmdline parameter enables more messages +if /bin/grep -q " verbose" /proc/cmdline; then + /bin/dmesg -n 8 +else + /bin/dmesg -n 3 +fi + +# enable rtc access +/sbin/modprobe rtc-cmos >/dev/null 2>&1 +RTC_MAJOR=$(/bin/grep -w rtc /proc/devices 2>/dev/null); RTC_MAJOR="${RTC_MAJOR%% *}" +if [ -n "$RTC_MAJOR" ]; then + /bin/mkdir /dev/misc/ + /bin/mknod /dev/misc/rtc0 c $RTC_MAJOR 0 + /bin/ln -s /dev/misc/rtc0 /dev/rtc +fi + +HWCLOCK_PARAMS="--hctosys" +if [ "$HARDWARECLOCK" = "UTC" ]; then + HWCLOCK_PARAMS="$HWCLOCK_PARAMS --utc" +else + HWCLOCK_PARAMS="$HWCLOCK_PARAMS --localtime" +fi +if [ "$USEDIRECTISA" = "yes" -o "$USEDIRECTISA" = "YES" ]; then + HWCLOCK_PARAMS="$HWCLOCK_PARAMS --directisa" +fi + +# Set clock early to fix some bugs with filesystem checks +# Clock is set again later to match rc.conf +if [ -f /etc/localtime ]; then + /sbin/hwclock $HWCLOCK_PARAMS --noadjfile +fi + +echo > /proc/sys/kernel/hotplug + +if [ -x /sbin/udevadm -a -d /sys/block ]; then + # We have udev and /sys appears to be mounted, use UDev + #status "Starting UDev Daemon" /etc/start_udev init + + stat_busy "Starting UDev Daemon" + /sbin/udevd --daemon + stat_done +else + # Static /dev, our last resort + status "Using static /dev filesystem" true +fi + +# Load modules from the MODULES array defined in rc.conf +if ! [ "$load_modules" = "off" ]; then + if [ -f /proc/modules ]; then + stat_busy "Loading Modules" + for mod in "${MODULES[@]}"; do + if [ "$mod" = "${mod#!}" ]; then + /sbin/modprobe $mod + fi + done + stat_done + fi + if [ -d /proc/acpi ]; then + stat_busy "Loading standard ACPI modules" + ACPI_MODULES="ac battery button fan processor thermal" + k="$(echo $BLACKLIST ${MOD_BLACKLIST[@]} | /bin/sed 's|-|_|g')" + j="$(echo ${MODULES[@]} | /bin/sed 's|-|_|g')" + #add disabled MODULES (!) to blacklist - much requested feature + for m in ${j}; do + [ "$m" != "${m#!}" ] && k="${k} ${m#!}" + done + # add disablemodules= from commandline to blacklist + k="${k} $(echo ${disablemodules} | /bin/sed 's|-|_|g' | /bin/sed 's|,| |g')" + for n in ${ACPI_MODULES}; do + if ! echo ${k} | /bin/grep "\<$n\>" 2>&1 >/dev/null; then + /sbin/modprobe $n > /dev/null 2>&1 + fi + done + stat_done + fi +fi + +# run udev uevents +if /bin/pidof -o %PPID /sbin/udevd >/dev/null; then + #status "Loading UDev uevents" /etc/start_udev uevents + stat_busy "Loading UDev uevents" + udevstart="$(/bin/date +%s%0N)" + /sbin/udevadm trigger + /sbin/udevadm settle + stat_done + udevend="$(/bin/date +%s%0N)" + printhl " UDev uevent processing time: $((($udevend-$udevstart)/1000000))ms" +fi + +# bring up the loopback interface +if [ -d /sys/class/net/lo ]; then + stat_busy "Bringing up loopback interface" + /sbin/ifconfig lo 127.0.0.1 up + if [ $? -ne 0 ]; then + stat_fail + else + stat_done + fi +fi + +# If necessary, find md devices and manually assemble RAID arrays +if [ -f /etc/mdadm.conf -a "$(/bin/grep ^ARRAY /etc/mdadm.conf 2>/dev/null)" ]; then + # udev won't create these md nodes, so we do it ourselves + for dev in $(/bin/grep ^ARRAY /etc/mdadm.conf | /bin/awk '{print $2}'); do + path=$(echo $dev | /bin/sed 's|/[^/]*$||') + node=$(echo $dev | /bin/sed "s|^$path/||") + minor=$(echo $node | /bin/sed 's|^[^0-9]*||') + [ ! -e $path/$node ] && /bin/mknod $path/$node b 9 $minor + done + status "Activating RAID arrays" /sbin/mdadm --assemble --scan +fi + +if [ "$USELVM" = "yes" -o "$USELVM" = "YES" ]; then + if [ -x /sbin/lvm -a -d /sys/block ]; then + # Kernel 2.6.x, LVM2 groups + /sbin/modprobe -q dm-mod 2>/dev/null + stat_busy "Activating LVM2 groups" + /sbin/lvm vgscan --ignorelockingfailure --mknodes >/dev/null + /sbin/lvm vgchange --ignorelockingfailure -a y >/dev/null + if [ $? -ne 0 ]; then + stat_fail + else + stat_done + fi + fi +fi + +# Set up non-root encrypted partition mappings +if [ -f /etc/crypttab -a -n "$(/bin/grep -v ^# /etc/crypttab | /bin/grep -v ^$)" ]; then + /sbin/modprobe -q dm-mod 2>/dev/null + stat_busy "Unlocking encrypted volumes:" + csfailed=0 + CS=/sbin/cryptsetup.static + do_crypt() { + if [ $# -ge 3 ]; then + cname="$1" + csrc="$2" + cpass="$3" + shift 3 + copts="$*" + stat_append "${cname}.." + # For some fun reason, the parameter ordering varies for + # LUKS and non-LUKS devices. Joy. + if [ "${cpass}" = "SWAP" ]; then + # This is DANGEROUS! The only possible safety check + # is to not proceed in case we find a LUKS device + # This may cause dataloss if it is not used carefully + if $CS isLuks $csrc 2>/dev/null; then + false + else + $CS -d /dev/urandom $copts create $cname $csrc >/dev/null + if [ $? -eq 0 ]; then + stat_append "creating swapspace.." + /sbin/mkswap -L $cname /dev/mapper/$cname >/dev/null + fi + fi + elif [ "${cpass}" = "ASK" ]; then + printf "\nOpening '${cname}' volume:\n" + + if $CS isLuks $csrc 2>/dev/null; then + $CS $copts luksOpen $csrc $cname < /dev/console + else + $CS $copts create $cname $csrc < /dev/console + fi + elif [ "${cpass:0:1}" != "/" ]; then + if $CS isLuks $csrc 2>/dev/null; then + echo "$cpass" | $CS $copts luksOpen $csrc $cname >/dev/null + else + echo "$cpass" | $CS $copts create $cname $csrc >/dev/null + fi + else + if $CS isLuks $csrc 2>/dev/null; then + $CS -d $cpass $copts luksOpen $csrc $cname >/dev/null + else + $CS -d $cpass $copts create $cname $csrc >/dev/null + fi + fi + if [ $? -ne 0 ]; then + csfailed=1 + stat_append "failed " + else + stat_append "ok " + fi + fi + } + while read line; do + eval do_crypt "$line" + done </etc/crypttab + if [ $csfailed -eq 0 ]; then + stat_done + else + stat_fail + fi + # Maybe someone has LVM on an encrypted block device + if [ "$USELVM" = "yes" -o "$USELVM" = "YES" ]; then + if [ -x /sbin/lvm -a -d /sys/block ]; then + /sbin/lvm vgscan --ignorelockingfailure --mknodes >/dev/null + /sbin/lvm vgchange --ignorelockingfailure -a y >/dev/null + fi + fi +fi + +FORCEFSCK= +[ -f /forcefsck ] && FORCEFSCK="-- -f" +NETFS="nonfs,nonfs4,nosmbfs,nocifs,nocodafs,noncpfs,nosysfs,noshfs,nofuse,nofuseblk" + +#F Check filesystems +f_fscheck + +#F Activate swaps +f_swapon + +stat_busy "Configuring System Clock" +if [ ! -f /var/lib/hwclock/adjtime ]; then + echo "0.0 0 0.0" > /var/lib/hwclock/adjtime +fi +if [ "$TIMEZONE" != "" -a -e "/usr/share/zoneinfo/$TIMEZONE" ]; then + /bin/rm -f /etc/localtime + /bin/cp "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime +fi + +/sbin/hwclock $HWCLOCK_PARAMS +stat_done + +if [ -f /var/run/random-seed ]; then + stat_busy "Initializing Random Seed" + /bin/cat /var/run/random-seed >/dev/urandom + stat_done +fi + +stat_busy "Removing Leftover Files" +/bin/rm -f /etc/nologin &>/dev/null +/bin/rm -f /etc/shutdownpid &>/dev/null +/bin/rm -f /var/lock/* &>/dev/null +/bin/rm -rf /tmp/* /tmp/.* &>/dev/null +/bin/rm -f /forcefsck &>/dev/null +(cd /var/run && /usr/bin/find . ! -type d -exec /bin/rm -f -- {} \; ) +: > /var/run/utmp +# Keep {x,k,g}dm happy with xorg +/bin/mkdir /tmp/.ICE-unix && /bin/chmod 1777 /tmp/.ICE-unix +/bin/mkdir /tmp/.X11-unix && /bin/chmod 1777 /tmp/.X11-unix +stat_done + +#status "Updating Shared Library Links" /sbin/ldconfig + +if [ "$HOSTNAME" != "" ]; then + status "Setting Hostname: $HOSTNAME" /bin/hostname $HOSTNAME +fi + +# Set the NIS domain name, if necessary +[ -f /etc/conf.d/nisdomainname ] && . /etc/conf.d/nisdomainname +if [ "$NISDOMAINNAME" != "" ]; then + status "Setting NIS Domain Name: $NISDOMAINNAME" /bin/nisdomainname $NISDOMAINNAME +fi + +status "Updating Module Dependencies" /sbin/depmod -A + +# Flush old locale settings +: >/etc/profile.d/locale.sh +/bin/chmod 755 /etc/profile.d/locale.sh +# Set user defined locale +[ -z "$LOCALE" ] && LOCALE="en_US" +stat_busy "Setting Locale: $LOCALE" +echo "export LANG=$LOCALE" >>/etc/profile.d/locale.sh +stat_done + +if echo "$LOCALE" | /bin/grep -qi utf ; then + stat_busy "Setting Consoles to UTF-8 mode" + # UTF-8 consoles are default since 2.6.24 kernel + # this code is needed not only for older kernels, + # but also when user has set vt.default_utf8=0 but LOCALE is *.UTF-8. + /usr/bin/kbd_mode -u + for i in $(/usr/bin/seq 0 63); do + printf "\e%%G" > /dev/vc/${i} + done + # the $CONSOLE check helps us avoid this when running scripts from cron + echo 'if [ "$CONSOLE" = "" -a "$TERM" = "linux" -a -t 1 ]; then printf "\e%%G"; fi' >>/etc/profile.d/locale.sh + stat_done + [ -n "$KEYMAP" ] && status "Loading Keyboard Map: $KEYMAP" /bin/loadkeys -q -u $KEYMAP +else + stat_busy "Setting Consoles to legacy mode" + # make non-UTF-8 consoles work on 2.6.24 and newer kernels + /usr/bin/kbd_mode -a + for i in $(/usr/bin/seq 0 63); do + printf "\e%%@" > /dev/vc/${i} + done + # the $CONSOLE check helps us avoid this when running scripts from cron + echo 'if [ "$CONSOLE" = "" -a "$TERM" = "linux" -a -t 1 ]; then printf "\e%%@"; fi' >>/etc/profile.d/locale.sh + stat_done + [ -n "$KEYMAP" ] && status "Loading Keyboard Map: $KEYMAP" /bin/loadkeys -q $KEYMAP +fi + +if [ -n "$CONSOLEFONT" ]; then + stat_busy "Loading Console Font: $CONSOLEFONT" + #CONSOLEMAP in UTF-8 shouldn't be used + if [ -n "$CONSOLEMAP" ] && echo "$LOCALE" | /bin/grep -qi utf ; then + CONSOLEMAP="" + fi + for i in $(/usr/bin/seq 0 63); do + if [ -n "$CONSOLEMAP" ]; then + /usr/bin/setfont -m $CONSOLEMAP $CONSOLEFONT -C /dev/vc/${i} >/dev/null 2>&1 + else + /usr/bin/setfont $CONSOLEFONT -C /dev/vc/${i} >/dev/null 2>&1 + fi + done + if [ $? -ne 0 ]; then + stat_fail + else + for i in $(/usr/bin/seq 0 63); do + printf "\e(K" > /dev/vc/${i} + done + # the $CONSOLE check helps us avoid this when running scripts from cron + echo 'if [ "$CONSOLE" = "" -a "$TERM" = "linux" -a -t 1 ]; then printf "\e(K"; fi' >>/etc/profile.d/locale.sh + stat_done + fi +fi + +# Adding persistent network/cdrom generated rules +if [ -f "/dev/.udev/tmp-rules--70-persistent-cd.rules" ]; then + stat_busy "Adding persistent cdrom udev rules" + /bin/cat /dev/.udev/tmp-rules--70-persistent-cd.rules >> /etc/udev/rules.d/70-persistent-cd.rules + stat_done +fi +if [ -f "/dev/.udev/tmp-rules--70-persistent-net.rules" ]; then + stat_busy "Adding persistent network udev rules" + /bin/cat /dev/.udev/tmp-rules--70-persistent-net.rules >> /etc/udev/rules.d/70-persistent-net.rules + stat_done +fi + +# Save our dmesg output from this boot +if [ -f /var/log/dmesg.log ]; then + /bin/rm /var/log/dmesg.log +fi +/bin/dmesg > /var/log/dmesg.log + +# vim: set ts=2 noet: +# End diff --git a/abs/core/linhes-live/etc/ulogin b/abs/core/linhes-live/etc/ulogin new file mode 100755 index 0000000..085c431 --- /dev/null +++ b/abs/core/linhes-live/etc/ulogin @@ -0,0 +1,57 @@ +#!/bin/bash + +# ulogin - A script for autologin of a selected user (and more) +#----------------------------------------------------------------- +# 2008.04.06 + +user=$( cat /tmp/newuser 2>/dev/null ) + +rm -f /tmp/newuser +rm -f /tmp/xlogout + +if [ -n "${user}" ]; then + login -f ${user} +else + # offer choice of user + ulist="$( cat /etc/passwd | grep ':/home/.*sh$' )" + echo -e "\nLogin a user or quit:" + echo " 0 : root" + echo " 1 : REBOOT" + echo " 2 : HALT" + + i=2 + for entry in ${ulist}; do + i=$(( ${i} + 1 )) + user="$( echo ${entry} | cut -d':' -f1 )" + users[${i}]=${user} + printf "%4d : %s\n" ${i} ${user} + done + while true; do + read -p "Enter a number from 0 to ${i} : " n + if [ "${n}" = 0 ]; then + login -f root + elif [ "${n}" = 1 ]; then + exec reboot + elif [ "${n}" = 2 ]; then + exec halt + elif [ -n "$( echo "${n}" | grep "^[0-9]\+$" )" ] && \ + [ -n "${users[${n}]}" ]; then + login -f ${users[${n}]} + else + echo " *** Invalid choice ..." + continue + fi + break + done +fi + +if grep "r" /tmp/xlogout &>/dev/null; then + reboot +elif grep "h" /tmp/xlogout &>/dev/null; then + halt +fi + +# This file is only needed for shutting down +rm -f /tmp/checkse + +# End diff --git a/abs/core/linhes-live/lib/initcpio/gen_larch_init b/abs/core/linhes-live/lib/initcpio/gen_larch_init new file mode 100755 index 0000000..d834e8f --- /dev/null +++ b/abs/core/linhes-live/lib/initcpio/gen_larch_init @@ -0,0 +1,12 @@ +#! /bin/bash + +# gen_larch_init +# +# Author: Michael Towers <gradgrind[at]online[dot]de> + +# Create an initramfs for a larch live system +# $1 - kernel version + +# The cpio.gz image is generated in larch.img + +/sbin/mkinitcpio -c /lib/initcpio/mkinitcpio.conf -k $1 -g larch.img diff --git a/abs/core/linhes-live/lib/initcpio/hooks/larch1 b/abs/core/linhes-live/lib/initcpio/hooks/larch1 new file mode 100644 index 0000000..e1a3753 --- /dev/null +++ b/abs/core/linhes-live/lib/initcpio/hooks/larch1 @@ -0,0 +1,120 @@ +# vim: set ft=sh: + +# larch1 - live 'hook' for mkinitcpio: set up tmpfs and find boot device + +# Author: Michael Towers (gradgrind) <mt.42@web.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.02.11 + +# Replacement for msg which includes leading and trailing spaces +msg_ () { [ "${quiet}" != "y" ] && echo "$@"; } + +# Try to mount a disk, partition or cdrom and look for the file +# 'larchboot' in the /larch directory. +# If LiveCD system found in the device, return 0, else return 1 +# and leave the device mounted. +# $1 = device name (e.g. "/dev/hda2") +# $2 = directory where devices will be mounted +# +test_live_data_dir () +{ + /bin/mount -r -t iso9660 "$1" $2 >/dev/null 2>/dev/null || \ + /bin/mount -r -t vfat -o noatime,nodiratime "$1" $2 >/dev/null 2>/dev/null || \ + /bin/mount -r -t ext2 -o noatime,nodiratime "$1" $2 >/dev/null 2>/dev/null + if [ $? -eq 0 ]; then + if [ -f "$2/larch/larchboot" ]; then + LDEV="$1" + msg_ " ... found at $1" + return 0 + else + /bin/umount $2 2>/dev/null + msg_ " ... $1 mounted, but no 'larch/larchboot' found" + fi + else + msg_ " ... not $1" + fi + return 1 +} + +run_hook () +{ + msg_ ":: Creating writeable filesystem (tmpfs)" + /bin/mkdir "/tfs" + # Boot option copy-to-ram (c2r) + if [ "${c2r}" = "y" ]; then + TFSSIZE="90%" + else + TFSSIZE="60%" + fi + /bin/mount -t tmpfs -o "size=${TFSSIZE}" tmpfs "/tfs" + + # Directory for test mounts (and then for live CD) + cdmount="/livecd" + /bin/mkdir "${cdmount}" + + # look for livecd data directory, first try ${root} + LDEV="${root}" + if [ "x${LDEV}" != "x" ]; then + /bin/mount -r -t iso9660 "${LDEV}" "${cdmount}" >/dev/null 2>/dev/null || \ + /bin/mount -r -t vfat -o noatime,nodiratime "${LDEV}" "${cdmount}" >/dev/null 2>/dev/null || \ + /bin/mount -r -t ext2 -o noatime,nodiratime "${LDEV}" "${cdmount}" >/dev/null 2>/dev/null + if [ $? -eq 0 ]; then + if [ -d "${cdmount}/larch" ]; then + msg_ ":: larch system at ${LDEV}" + else + /bin/umount "${cdmount}" 2>/dev/null + echo "!! No larch system at ${LDEV}" + LDEV="" + fi + else + echo "!! Couldn't mount ${LDEV}" + LDEV="" + fi + fi + + # then try cdroms + if [ "x${LDEV}" = "x" ]; then + msg_ ":: Looking for boot device" + cdroms=$( /bin/cat /proc/sys/dev/cdrom/info | { while read a b c; do + if [ "${a}" = "drive" -a "${b}" = "name:" ]; then + echo "${c}" + break + fi + done + } ) + for i in ${cdroms}; do + test_live_data_dir "/dev/${i}" "${cdmount}" + if [ $? -eq 0 ]; then break; fi + done + fi + + # test USB devices (and disks) repeatedly until timed out + if [ "x${LDEV}" = "x" ]; then + msg_ ":: Searching for usb (and disk) devices .." + for i in 1 2 3 4 5; do + msg_ " :wait ${i} :::" + /bin/sleep ${i} + for d in /dev/sd[a-z][0-9]*; do + test_live_data_dir "${d}" "${cdmount}" + if [ $? -eq 0 ]; then break 2; fi + done + done + fi +} diff --git a/abs/core/linhes-live/lib/initcpio/hooks/larch2 b/abs/core/linhes-live/lib/initcpio/hooks/larch2 new file mode 100644 index 0000000..74b4e64 --- /dev/null +++ b/abs/core/linhes-live/lib/initcpio/hooks/larch2 @@ -0,0 +1,33 @@ +# larch2 - live 'hook' for mkinitcpio: unionfs specific + +# Author: Michael Towers (gradgrind) <mt.42@web.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 +# +#---------------------------------------------------------------------------- +#2007.12.13 + +run_hook () +{ + #!!! --- unionfs specific + # Need unionfs module + /bin/modprobe unionfs + ovlmnt="ro" + bropt="dirs=" + sqfmnt="ro" + utype="unionfs" +} diff --git a/abs/core/linhes-live/lib/initcpio/hooks/larch2_aufs b/abs/core/linhes-live/lib/initcpio/hooks/larch2_aufs new file mode 100644 index 0000000..ac8e40b --- /dev/null +++ b/abs/core/linhes-live/lib/initcpio/hooks/larch2_aufs @@ -0,0 +1,33 @@ +# larch2_aufs - live 'hook' for mkinitcpio: aufs specific + +# Author: Michael Towers (gradgrind) <mt.42@web.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.02.29 + +run_hook () +{ + #!!! --- aufs specific + # Need aufs module + /bin/modprobe aufs + ovlmnt="rr+wh" + sqfmnt="rr" + bropt="br:" + utype="aufs" +} diff --git a/abs/core/linhes-live/lib/initcpio/hooks/larch3 b/abs/core/linhes-live/lib/initcpio/hooks/larch3 new file mode 100644 index 0000000..47be81a --- /dev/null +++ b/abs/core/linhes-live/lib/initcpio/hooks/larch3 @@ -0,0 +1,192 @@ +# larch3 - live 'hook' for mkinitcpio: +# deal with c2r, +# mount base system, +# load overlay, +# set up unioned root filesystem. +# Also manages overlay merging. + +# 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.04.04 + +run_hook () +{ + if [ "x${LDEV}" = "x" ]; then + err "Sorry, couldn't find boot medium ..." + break="y" + return + fi + + /sbin/modprobe loop + + # Path to compressed base system + sysSqf=${cdmount}/system.sqf + + ovlpath=${cdmount} + + # A possibility to use alternative files: + if [ -f ${cdmount}/larch/boot-init ]; then + . ${cdmount}/larch/boot-init + fi + + # Path to compressed 'modifications' archive + modsSqf=${ovlpath}/mods.sqf + # Default overlay file and directory + overlay=${ovlpath}/overlay.ovl + + # Make union root + /bin/mkdir /union + + # Deal with new archives + if [ -f ${overlay}_ ]; then + /bin/mount -o remount,rw ${LDEV} ${cdmount} + /bin/mv ${overlay} ${overlay}~ + /bin/mv ${overlay}_ ${overlay} + + if [ -f ${modsSqf}_ ]; then + /bin/mv ${modsSqf} ${modsSqf}~ + /bin/mv ${modsSqf}_ ${modsSqf} + fi + /bin/mount -o remount,ro ${LDEV} ${cdmount} + fi + + # Boot option copy-to-ram (c2r) + if [ "${c2r}" = "y" ]; then + msg_ ":: Copying base system to RAM, this will take a while ..." + /bin/cat ${sysSqf} > /tfs/system.sqf + if [ $? -ne 0 ]; then + err "Sorry, not enough RAM" + break="y" + return + fi + sysSqf=/tfs/system.sqf + + msg_ ":: Copying mods archive to RAM, this might take a while ..." + /bin/cat ${modsSqf} > /tfs/mods.sqf + if [ $? -ne 0 ]; then + err "Sorry, not enough RAM" + break="y" + return + fi + modsSqf=/tfs/mods.sqf + + # force use of swap (if available) + :> /tfs/swapon + + elif [ "${swap}" = "y" ]; then + :> /tfs/swapon + fi + + msg_ ":: Mounting squashed images" + /bin/mkdir /tfs/system + # The klibc mount command doesn't support '-o loop' + /bin/losetup /dev/loop0 ${sysSqf} + /bin/mount -r -t squashfs /dev/loop0 /tfs/system + + # Make stuff in 'system' available by providing the loader and + # library path + ldli=$( cd /tfs/system; echo lib/ld-linux*.so.2 ) + /bin/ln -s /tfs/system/${ldli} /${ldli} + export LD_LIBRARY_PATH=/tfs/system/lib:/tfs/system/usr/lib + + /bin/mkdir /tfs/mods + # The klibc mount command doesn't support '-o loop' + /bin/losetup /dev/loop1 ${modsSqf} + /bin/mount -r -t squashfs /dev/loop1 /tfs/mods + + # Unpack the overlay + msg_ ":: Initializing writable layer for union (overlay)" + /tfs/system/usr/bin/lzop -d < ${overlay} | \ + /tfs/system/bin/tar -C /tfs -xf - + + # Copy the installation tidy-up script (for removing custom live-only stuff), + # and any other files in 'larch/copy' directory + if [ -d ${ovlpath}/larch/copy ]; then + cd ${ovlpath}/larch/copy + for f in *; do + cat ${f} >/tfs/${f} + done + fi + + msg_ ":: Setting up union file system" + + layers="/tfs/overlay=rw:/tfs/mods=${ovlmnt}:/tfs/system=${sqfmnt}" + /bin/mount -t ${utype} -o ${bropt}${layers} ${utype} /union + + echo "${utype}" > /tfs/utype + + # Minimal device nodes needed before udev does its work + /bin/mkdir /union/dev + /bin/mknod /union/dev/console c 5 1 + /bin/mknod /union/dev/null c 1 3 + /bin/mknod /union/dev/zero c 1 5 + + # Make special directories + /bin/mkdir -m 1777 /union/tmp + /bin/mkdir /union/media + /bin/mkdir /union/sys + /bin/mkdir /union/proc + + # Make the tmpfs stuff accessible within the union + /bin/mkdir /union/.livesys + /bin/mount -o bind /tfs /union/.livesys + + /bin/mkdir /union/.livesys/medium + + /bin/mount -o bind /tfs/system /union/.livesys/system + /bin/mount -o bind /tfs/overlay /union/.livesys/overlay + /bin/mount -o bind ${cdmount} /union/.livesys/medium + + if [ "x${modsSqf}" != "x" ]; then + /bin/mount -o move /tfs/mods /union/.livesys/mods + fi + + # Remember the boot device + echo "${LDEV}" > /tfs/bootdevice + + if [ "${c2r}" = "y" ]; then + # Set flag to inform system of copy-to-ram + :> /tfs/c2r + + # Unmount boot device + /bin/umount ${cdmount} + fi + + msg_ ":: End of live system set-up" + + # Now some tweaks to alter 'init' actions from non-larch hooks, etc. + # Override rootdelay from usb hook + if [ "x${larchdelay}" = "x" ]; then + # To avoid spurious udevd pid numbers + export rootdelay=1 + else + # Allow adjustment via boot option + export rootdelay=${larchdelay} + fi + # root must be set to something or other, even though larch doesn't + # need it ... + export root="/dev/loop0" +} + +####### +# The actual root switch occurs later, when 'init' execs 'kinit'. +# I handle this by overwriting the 'kinit' binary with my own script. +# This will unmount dev, sys and proc and then exec run-init. +####### diff --git a/abs/core/linhes-live/lib/initcpio/install/larch1 b/abs/core/linhes-live/lib/initcpio/install/larch1 new file mode 100644 index 0000000..56baf48 --- /dev/null +++ b/abs/core/linhes-live/lib/initcpio/install/larch1 @@ -0,0 +1,15 @@ +install () +{ + MODULES="vfat isofs ext2 ext3 nls_cp437" + BINARIES="" + FILES="" + SCRIPT="larch1" +} + +help () +{ +cat<<HELPEOF + This hook deals with booting a larch live CD. It is the first larch hook, +creating a tmpfs and seeking the boot medium. +HELPEOF +} diff --git a/abs/core/linhes-live/lib/initcpio/install/larch2 b/abs/core/linhes-live/lib/initcpio/install/larch2 new file mode 100644 index 0000000..a906227 --- /dev/null +++ b/abs/core/linhes-live/lib/initcpio/install/larch2 @@ -0,0 +1,15 @@ +install () +{ + MODULES="unionfs" + BINARIES="" + FILES="" + SCRIPT="larch2" +} + +help () +{ +cat<<HELPEOF + This hook deals with booting a larch live CD. It handles selection of the +desired unioning file system, here unionfs. +HELPEOF +} diff --git a/abs/core/linhes-live/lib/initcpio/install/larch2_aufs b/abs/core/linhes-live/lib/initcpio/install/larch2_aufs new file mode 100644 index 0000000..0e19de9 --- /dev/null +++ b/abs/core/linhes-live/lib/initcpio/install/larch2_aufs @@ -0,0 +1,15 @@ +install () +{ + MODULES="aufs" + BINARIES="" + FILES="" + SCRIPT="larch2_aufs" +} + +help () +{ +cat<<HELPEOF + This hook deals with booting a larch live CD. It handles selection of the +desired unioning file system, here aufs. +HELPEOF +} diff --git a/abs/core/linhes-live/lib/initcpio/install/larch3 b/abs/core/linhes-live/lib/initcpio/install/larch3 new file mode 100644 index 0000000..7dad03c --- /dev/null +++ b/abs/core/linhes-live/lib/initcpio/install/larch3 @@ -0,0 +1,18 @@ +install () +{ + MODULES="squashfs loop reiserfs" + BINARIES="" + FILES="" + SCRIPT="larch3" +# add_file "/lib/initcpio/kinit" "/bin/kinit" ##### This doesn't work, so: + sed -i 's|.*/usr/lib/klibc/bin/kinit\.shared.*||' "${FILELIST}" + sed -i 's|/usr/lib/klibc/bin/kinit|/lib/initcpio/kinit|' "${FILELIST}" +} + +help () +{ +cat<<HELPEOF + This hook deals with booting a larch live CD. It is the last larch hook, +setting up the tmpfs root file system. +HELPEOF +} diff --git a/abs/core/linhes-live/lib/initcpio/kinit b/abs/core/linhes-live/lib/initcpio/kinit new file mode 100755 index 0000000..7c86f4b --- /dev/null +++ b/abs/core/linhes-live/lib/initcpio/kinit @@ -0,0 +1,6 @@ +#! /bin/sh + +umount /sys +umount /proc +umount /dev +exec run-init -c /dev/console /union /sbin/init ${CMDLINE} diff --git a/abs/core/linhes-live/lib/initcpio/mkinitcpio.conf b/abs/core/linhes-live/lib/initcpio/mkinitcpio.conf new file mode 100644 index 0000000..79cca21 --- /dev/null +++ b/abs/core/linhes-live/lib/initcpio/mkinitcpio.conf @@ -0,0 +1,54 @@ +# vim:set ft=sh +# MODULES +# The following modules are loaded before any boot hooks are +# run. Advanced users may wish to specify all system modules +# in this array. For instance: +# MODULES="piix ide_disk reiserfs" +MODULES="" + +# BINARIES +# This setting includes, into the CPIO image, and additional +# binaries a given user may wish. This is run first, so may +# be used to override the actual binaries used in a given hook. +# (Existing files are NOT overwritten is already added) +# BINARIES are dependancy parsed, so you may safely ignore libraries +#BINARIES="" + +# FILES +# This setting is similar to BINARIES above, however, files are added +# as-is and are not parsed in anyway. This is useful for config files. +# Some users may wish to include modprobe.conf for custom module options, +# like so: +# FILES="/etc/modprobe.conf" +FILES="" + +# HOOKS +# This is the most important setting in this file. The HOOKS control the +# modules and scripts added to the image, and what happens at boot time. +# Order is important, and it is recommended that you do not change the +# order in which HOOKS are added. Run 'mkinitcpio -H <hook name>' for +# help on a given hook. +# 'base' is _required_ unless you know precisely what you are doing. +# 'udev' is _required_ in order to automatically load modules +# 'modload' may be used in place of 'udev', but is not recommended +# 'filesystems' is _required_ unless you specify your fs modules in MODULES +# Examples: +# This setup specifies all modules in the MODULES setting above. +# No raid, lvm, or encrypted root is needed. +# HOOKS="base" +# +# This setup will autodetect all modules for your system and should +# work as a sane default +# HOOKS="base udev autodetect ide scsi sata filesystems" +# +# This setup will generate a 'full' image which supports most systems. +# No autodetection is done. +# HOOKS="base udev ide scsi sata usb filesystems" +# +# This setup assembles an ide raid array with an encrypted root FS. +# Note: See 'mkinitcpio -H raid' for more information on raid devices. +# HOOKS="base udev ide filesystems raid encrypt" +# +# This setup loads an LVM volume group on a usb device. +# HOOKS="base udev usb filesystems lvm" +HOOKS="base udev pata scsi sata usb larch1 larch2___aufs___ larch3" |