summaryrefslogtreecommitdiffstats
path: root/abs/core/linhes-live
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core/linhes-live')
-rw-r--r--abs/core/linhes-live/PKGBUILD30
-rwxr-xr-xabs/core/linhes-live/bin/gen_fstab122
-rwxr-xr-xabs/core/linhes-live/bin/km76
-rw-r--r--abs/core/linhes-live/etc/live-shutdown50
-rw-r--r--abs/core/linhes-live/etc/live-sysinit54
-rwxr-xr-xabs/core/linhes-live/etc/loginroot3
-rwxr-xr-xabs/core/linhes-live/etc/rc.shutdown-live167
-rwxr-xr-xabs/core/linhes-live/etc/rc.sysinit-live466
-rwxr-xr-xabs/core/linhes-live/etc/ulogin57
-rwxr-xr-xabs/core/linhes-live/lib/initcpio/gen_larch_init12
-rw-r--r--abs/core/linhes-live/lib/initcpio/hooks/larch1120
-rw-r--r--abs/core/linhes-live/lib/initcpio/hooks/larch233
-rw-r--r--abs/core/linhes-live/lib/initcpio/hooks/larch2_aufs33
-rw-r--r--abs/core/linhes-live/lib/initcpio/hooks/larch3192
-rw-r--r--abs/core/linhes-live/lib/initcpio/install/larch115
-rw-r--r--abs/core/linhes-live/lib/initcpio/install/larch215
-rw-r--r--abs/core/linhes-live/lib/initcpio/install/larch2_aufs15
-rw-r--r--abs/core/linhes-live/lib/initcpio/install/larch318
-rwxr-xr-xabs/core/linhes-live/lib/initcpio/kinit6
-rw-r--r--abs/core/linhes-live/lib/initcpio/mkinitcpio.conf54
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"