summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Griffin <aaron@archlinux.org>2006-08-30 05:32:35 +0000
committerAaron Griffin <aaron@archlinux.org>2006-08-30 05:32:35 +0000
commit676782bc3af8d266b67bbc35b7d791cd8c703aee (patch)
treef8f3e15d5455a7af3d27be7f0a4cd60dc6943477
Initial import
git-svn-id: http://phraktured.net/archiso@1 00a9fe69-e71b-0410-bb23-df0e5024db41
-rw-r--r--archlive_hook64
-rw-r--r--archlive_install11
-rw-r--r--base.packages90
-rw-r--r--default-config/boot/grub/help.lst14
-rw-r--r--default-config/boot/grub/menu.lst22
-rw-r--r--default-config/boot/grub/more.lst21
-rw-r--r--default-config/boot/help/bootexisting23
-rw-r--r--default-config/boot/splash.xpm.gzbin0 -> 8371 bytes
-rw-r--r--default-config/etc/arch-release1
-rw-r--r--default-config/etc/archiso/getshell8
-rw-r--r--default-config/etc/fstab9
-rw-r--r--default-config/etc/group19
-rw-r--r--default-config/etc/inittab16
-rw-r--r--default-config/etc/issue2
-rw-r--r--default-config/etc/pam.d/su6
-rw-r--r--default-config/etc/passwd7
-rw-r--r--default-config/etc/rc.conf22
-rw-r--r--default-config/etc/rc.d/archiso66
-rw-r--r--default-config/etc/shadow7
-rw-r--r--default-config/etc/sudoers2
-rwxr-xr-xmkarchiso285
-rw-r--r--mkarchiso.conf11
-rw-r--r--mkinitcpio.conf54
-rw-r--r--modules.ARCH9
-rw-r--r--modules.beyond7
-rw-r--r--other.packages0
26 files changed, 776 insertions, 0 deletions
diff --git a/archlive_hook b/archlive_hook
new file mode 100644
index 0000000..d0c31f0
--- /dev/null
+++ b/archlive_hook
@@ -0,0 +1,64 @@
+# vim: set ft=sh:
+run_hook ()
+{
+#Big Fat TODO... we need to add possible boot 'cheatcodes'
+# as is common in most livecds. However, most of these can be handled
+# in real userspace (early userspace only needs to load the squashfs
+# image. That is _all_. Others will be handled in a custom rc.local/rc.conf
+
+ #This is going to get brutal...
+
+ if [ "x${ramdisk_size}" = "x" ]; then
+ ramdisk_size="75%"
+ fi
+ msg -n ":: Mounting tmpfs, size=${ramdisk_size}..."
+ mount -t tmpfs -o "size=${ramdisk_size}" tmpfs /tmpfs
+ mkdir /tmpfs/bootcd
+ msg "done."
+
+ squashfound=0
+ msg -n ":: Scanning for boot cdrom device..."
+ for cdrom in /dev/cd/*; do
+ if mount -r -t iso9660 "${cdrom}" /tmpfs/bootcd >/dev/null 2>&1; then
+ if [ -e /tmpfs/bootcd/archlive.sqfs ]; then
+ squashfound=1
+ msg "${cdrom}"
+ break
+ fi
+ fi
+ [ $squashfound -eq 0 ] && umount /tmpfs/bootcd >/dev/null 2>&1
+ done
+
+ if [ $squashfound -eq 0 ]; then
+ echo "ERROR: cannot find booted cdrom device, cannot continue..."
+ exit 1
+ fi
+
+ msg -n ":: Mounting squashfs image..."
+ /bin/modprobe -q squashfs >/dev/null 2>&1
+ mkdir -p /tmpfs/squashfs_root
+ if ! losetup /dev/loop0 /tmpfs/bootcd/archlive.sqfs; then
+ echo "ERROR: Cannot mount loop device /dev/loop0...aborting"
+ exit 1
+ fi
+ mount -r -t squashfs /dev/loop0 /tmpfs/squashfs_root
+ #mount.full -r -t squashfs -o loop /tmpfs/bootcd/squashfs_image /tmpfs/squashfs_root
+ msg "done."
+
+ msg -n ":: Mounting root (union) filesystem..."
+ /bin/modprobe -q unionfs >/dev/null 2>&1
+ mount -t unionfs -o dirs=/tmpfs=rw:/tmpfs/squashfs_root=ro,debug=0 none /real_root
+ msg "done."
+
+ if [ -d /proc/sus/dev/cdrom ]; then
+ echo 0 > /proc/sys/dev/cdrom/lock
+ echo 1 > /proc/sys/dev/cdrom/autoeject
+ fi
+
+ msg ":: Stopping udevd"
+ udevpid=$(/bin/minips -C udevd -o pid=)
+ [ "x${udevpid}" != "x" ] && /bin/kill -9 $udevpid
+ #Yep, we're bailing out here. We don't need kinit.
+ msg ":: Passing control to Archlinux Initscripts..."
+ exec /bin/run-init -c /dev/console /real_root /sbin/init ${CMDLINE}
+}
diff --git a/archlive_install b/archlive_install
new file mode 100644
index 0000000..be2f5cc
--- /dev/null
+++ b/archlive_install
@@ -0,0 +1,11 @@
+# vim: set ft=sh:
+install ()
+{
+ MODULES="cdrom ide-cd ide-core ide-generic unionfs squashfs iso9660 $(all_modules '/kernel/fs' | grep -v "nls") "
+ BINARIES=""
+ FILES=""
+ add_binary /bin/mount /bin/mount.full
+ add_dir /real_root
+ add_dir /tmpfs
+ SCRIPT="liveiso"
+}
diff --git a/base.packages b/base.packages
new file mode 100644
index 0000000..1564e49
--- /dev/null
+++ b/base.packages
@@ -0,0 +1,90 @@
+bash
+bin86
+binutils
+bzip2
+coreutils
+cpio
+cracklib
+db
+dcron
+dhcpcd
+dialog
+e2fsprogs
+ed
+elinks
+file
+filesystem
+findutils
+gawk
+gcc
+gettext
+glibc
+grep
+groff
+grub-gfx
+gzip
+initscripts
+iputils
+jfsutils
+kbd
+less
+lftp
+libpcap
+libusb
+licenses
+lilo
+lshwd
+lsof
+lzo2
+mailx
+man
+man-pages
+mktemp
+module-init-tools
+nano
+ncurses
+net-tools
+netcat
+netkit-telnet
+nmap
+openssh
+openssl
+pacman
+pam
+parted
+pciutils
+pcmciautils
+pcre
+perl
+popt
+ppp
+procinfo
+procps
+psmisc
+python
+raidtools
+readline
+reiserfsprogs
+rp-pppoe
+sed
+shadow
+squashfs
+sysfsutils
+syslog-ng
+sysvinit
+tar
+tcp_wrappers
+tcpdump
+udev
+unionfs
+unrar
+unzip
+usbutils
+util-linux
+vim
+wget
+which
+wireless_tools
+wpa_supplicant
+xfsprogs
+zlib
diff --git a/default-config/boot/grub/help.lst b/default-config/boot/grub/help.lst
new file mode 100644
index 0000000..4018a27
--- /dev/null
+++ b/default-config/boot/grub/help.lst
@@ -0,0 +1,14 @@
+# Help files must be exactly 23 lines long.
+timeout 60
+default 0
+
+title Back to main menu
+configfile /boot/grub/menu.lst
+
+title HOW-TO: Boot an existing system
+cat /boot/help/bootexisting
+pause Press enter to continue...
+
+title HOW-TO: Do some other shit
+cat /boot/help/bootexisting
+pause Press enter to continue...
diff --git a/default-config/boot/grub/menu.lst b/default-config/boot/grub/menu.lst
new file mode 100644
index 0000000..4650a92
--- /dev/null
+++ b/default-config/boot/grub/menu.lst
@@ -0,0 +1,22 @@
+
+#TODO add options + graphical stuff
+timeout 30
+default 0
+color light-blue/blue black/light-grey
+splashimage=/boot/splash.xpm.gz
+
+title Boot ArchLive
+kernel /boot/vmlinuz26 lang=en locale=en_US.UTF-8 ramdisk_size=75%
+initrd /boot/archlive.img
+
+title Shutdown the Computer
+halt
+
+title Reboot the Computer
+reboot
+
+title View Help...
+configfile /boot/grub/help.lst
+
+title More Options...
+configfile /boot/grub/more.lst
diff --git a/default-config/boot/grub/more.lst b/default-config/boot/grub/more.lst
new file mode 100644
index 0000000..1fe37fc
--- /dev/null
+++ b/default-config/boot/grub/more.lst
@@ -0,0 +1,21 @@
+timeout 60
+default 0
+
+title Boot Existing Linux Install
+root (hd0,2)
+kernel /vmlinuz26 root=/dev/hda1 ro
+
+title Boot Existing Windows Install
+rootnoverify (hd0,0)
+makeactive
+chainloader +1
+
+title Install GRUB to HD0
+root (hd0,0)
+setup (hd0)
+
+title Run Ranish Partition Manager
+kernel /boot/ranish/part.exe
+
+title Run memtest86+
+kernel /boot/memtest86+/memtest.bin
diff --git a/default-config/boot/help/bootexisting b/default-config/boot/help/bootexisting
new file mode 100644
index 0000000..1c27625
--- /dev/null
+++ b/default-config/boot/help/bootexisting
@@ -0,0 +1,23 @@
+This is a helpfile
+
+Hopefully grub will make this happy....
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/default-config/boot/splash.xpm.gz b/default-config/boot/splash.xpm.gz
new file mode 100644
index 0000000..9f128bf
--- /dev/null
+++ b/default-config/boot/splash.xpm.gz
Binary files differ
diff --git a/default-config/etc/arch-release b/default-config/etc/arch-release
new file mode 100644
index 0000000..20ba0f6
--- /dev/null
+++ b/default-config/etc/arch-release
@@ -0,0 +1 @@
+Arch Linux Live ISO 0.X (Sniklefritz)
diff --git a/default-config/etc/archiso/getshell b/default-config/etc/archiso/getshell
new file mode 100644
index 0000000..c61c56c
--- /dev/null
+++ b/default-config/etc/archiso/getshell
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+. /etc/archiso/functions
+shell="$(cmdline_param shell)"
+[ -n "${shell}" ] && shell="/bin/bash"
+[ ! -e "${shell}" ] && shell="/bin/sh"
+
+exec ${shell}
diff --git a/default-config/etc/fstab b/default-config/etc/fstab
new file mode 100644
index 0000000..74c69fd
--- /dev/null
+++ b/default-config/etc/fstab
@@ -0,0 +1,9 @@
+#
+# /etc/fstab: static file system information
+#
+# <file system> <dir> <type> <options> <dump> <pass>
+none /dev/pts devpts defaults 0 0
+none /dev/shm tmpfs defaults 0 0
+tmpfs /tmp tmpfs defaults 0 0
+
+/dev/cdrom /bootcd iso9660 ro,user,noauto 0 0
diff --git a/default-config/etc/group b/default-config/etc/group
new file mode 100644
index 0000000..bab2ef8
--- /dev/null
+++ b/default-config/etc/group
@@ -0,0 +1,19 @@
+root::0:root
+bin::1:root,bin,daemon
+daemon::2:root,bin,daemon
+`sys::3:root,bin
+adm::4:root,daemon
+tty::5:
+disk::6:root,arch
+lp::7:daemon
+mem::8:
+kmem::9:
+wheel::10:root,arch
+ftp::11:
+mail::12:
+smmsp::25:
+audio::92:arch
+optical::93:arch
+nobody::99:
+users::100:arch
+slocate:x:21:
diff --git a/default-config/etc/inittab b/default-config/etc/inittab
new file mode 100644
index 0000000..d222983
--- /dev/null
+++ b/default-config/etc/inittab
@@ -0,0 +1,16 @@
+id:4:initdefault:
+
+rc::sysinit:/etc/rc.sysinit
+rs:S1:wait:/etc/rc.single
+rm:2345:wait:/etc/rc.multi
+rh:06:wait:/etc/rc.shutdown
+su:S:wait:/sbin/sulogin -p
+
+c1:2345:respawn:/sbin/agetty 38400 vc/1 linux
+c2:2345:respawn:/sbin/agetty 38400 vc/2 linux
+c3:2345:respawn:/sbin/agetty 38400 vc/3 linux
+c4:2345:respawn:/sbin/agetty 38400 vc/4 linux
+c5:2345:respawn:/sbin/agetty 38400 vc/5 linux
+c6:2345:respawn:/sbin/agetty 38400 vc/6 linux
+
+ca::ctrlaltdel:/sbin/shutdown -t3 -r now
diff --git a/default-config/etc/issue b/default-config/etc/issue
new file mode 100644
index 0000000..e90c245
--- /dev/null
+++ b/default-config/etc/issue
@@ -0,0 +1,2 @@
+Arch Linux Live ISO 0.X (Snicklefritz) (\n) (\l)
+Default user: arch
diff --git a/default-config/etc/pam.d/su b/default-config/etc/pam.d/su
new file mode 100644
index 0000000..1bac343
--- /dev/null
+++ b/default-config/etc/pam.d/su
@@ -0,0 +1,6 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+auth sufficient pam_wheel.so trust use_uid
+auth required pam_unix.so
+account required pam_unix.so
+session required pam_unix.so
diff --git a/default-config/etc/passwd b/default-config/etc/passwd
new file mode 100644
index 0000000..6f69ed0
--- /dev/null
+++ b/default-config/etc/passwd
@@ -0,0 +1,7 @@
+root:x:0:0:root:/root:/bin/bash
+bin:x:1:1:bin:/bin:
+daemon:x:2:2:daemon:/sbin:
+mail:x:8:12:mail:/var/spool/mail:
+ftp:x:14:11:ftp:/home/ftp:
+nobody:x:99:99:nobody:/:
+arch::1000:100::/home/arch:/bin/bash
diff --git a/default-config/etc/rc.conf b/default-config/etc/rc.conf
new file mode 100644
index 0000000..ea21295
--- /dev/null
+++ b/default-config/etc/rc.conf
@@ -0,0 +1,22 @@
+#
+# /etc/rc.conf - Main Configuration for Arch Linux
+
+LOCALE="en_US.UTF-8"
+HARDWARECLOCK="UTC"
+TIMEZONE="America/Chicago"
+KEYMAP="us"
+CONSOLEFONT=
+CONSOLEMAP=
+USECOLOR="yes"
+
+MOD_AUTOLOAD="yes"
+MODULES=()
+USELVM="no"
+
+HOSTNAME="archlive"
+lo="lo 127.0.0.1"
+INTERFACES=(lo)
+ROUTES=()
+
+#TODO add more auto-daemons here, especially the live-cd specific stuff
+DAEMONS=(syslog-ng network crond)
diff --git a/default-config/etc/rc.d/archiso b/default-config/etc/rc.d/archiso
new file mode 100644
index 0000000..6acf18a
--- /dev/null
+++ b/default-config/etc/rc.d/archiso
@@ -0,0 +1,66 @@
+# vim: set ft=sh:
+cmdline_param ()
+{
+ while param do;
+ case "${param}" in
+ $1=*) echo "${param##*=}"; break ;;
+ *) continue ;;
+ esac
+ done < read /proc/cmdline
+}
+. /etc/rc.conf
+. /etc/rc.d/functions
+. /etc/archiso/functions # above goes in this file...
+
+do_mounts ()
+{
+ #iterate over all block devices
+ stat_busy "Scanning local block devices"
+ for dev in $(echo /sys/block/*/dev /sys/block/*/*/dev); do
+
+ devname="/dev/$(echo ${dev} | cut -d'/' -f3,4 | cut -d'/' -f1)"
+ mountpt="/mnt/$(basename '${devname}')"
+ mkdir -p "${mountpt}" 2>/dev/null
+ mount ${options} "${devname}" "${mountpt}" >/dev/null 2>&1
+
+ fstype=$(awk '{ if ($1=="${devname}") { print $3" "$4;q }}' /proc/mounts)
+ fstype="${fstype%%,*}"
+ case "${fstype%% *}" in
+ *fat*|ntfs|*dos) options="user,exec,uid=0,gid=100,umask=00070" ;;
+ *) options="users,defaults,exec" ;;
+ #TODO handle 'sync' on usb devices...
+ esac
+
+ echo "${devname} ${mountpt} ${fstype} ${options} 0 0 #configured by archiso" >>/etc/fstab
+ done
+ stat_done
+}
+
+do_locale ()
+{
+ #copy from rc.sysinit - use cmdline_param locale (or lang ?)
+}
+
+do_swap ()
+{
+ #Archie finds a pagefile.sys for windows/dos machines... may add later
+ stat_busy "Finding existing swap partitions"
+ swapdev="$(fdisk -l 2>/dev/null | grep swap | cut -d' ' -f1)"
+ if [ -e "${swapdev}" ]; then
+ swapon ${swapdev}
+ echo "${swapdev} swap swap defaults 0 0 #configured by archiso" >>/etc/fstab
+ fi
+ stat_done
+}
+
+do_homedir ()
+{
+ stat_busy "Scanning for existing HOME directory"
+ user="$(cmdline_param homeuser)"
+ for hdir in $(find /mnt -name "home/${user}" 2>/dev/null); do
+ mkdir -p "/home/arch/"
+ # break after the first success...
+ mount --bind "${hdir}" "/home/arch/" && break
+ done
+ stat_done
+}
diff --git a/default-config/etc/shadow b/default-config/etc/shadow
new file mode 100644
index 0000000..39e1da7
--- /dev/null
+++ b/default-config/etc/shadow
@@ -0,0 +1,7 @@
+root::99999::::::
+bin:x:0::::::
+daemon:x:0::::::
+mail:x:0::::::
+ftp:x:0::::::
+nobody:x:0::::::
+arch::12922:0:99999:7:::
diff --git a/default-config/etc/sudoers b/default-config/etc/sudoers
new file mode 100644
index 0000000..7121a22
--- /dev/null
+++ b/default-config/etc/sudoers
@@ -0,0 +1,2 @@
+root ALL=(ALL) ALL
+%wheel localhost=(ALL) NOPASSWD: ALL
diff --git a/mkarchiso b/mkarchiso
new file mode 100755
index 0000000..219147f
--- /dev/null
+++ b/mkarchiso
@@ -0,0 +1,285 @@
+#!/bin/sh
+
+CONFIG="$(pwd)/mkarchiso.conf"
+CPIOCONFIG="$(pwd)/mkinitcpio.conf"
+DEF_CONFIG_DIR="$(pwd)/default-config"
+QUIET="y"
+
+SKIP_INSTALL="n"
+SKIP_SQUASHFS="n"
+SKIP_BOOTIMG="n"
+SKIP_ISO="n"
+
+PKGDIR="."
+
+APPNAME=$(basename "${0}")
+ALL_ARGS="${@}"
+
+usage ()
+{
+ echo "usage ${APPNAME} [options] working-directory imagename.iso"
+ echo " -c CONFIG Use CONFIG file. default: /etc/archlive/mkarchiso.conf"
+ echo " -i CPIO CONFIG Use CONFIG file for mkinitcpio. default: /etc/archlive/mkinitcpio.conf"
+ echo " -s a,b,c Skip creation section. Valid sections are:"
+ echo " install : This section installs all packages."
+ echo " squashfs: This section creates a squashfs root image"
+ echo " bootimg : This section creates a boot image."
+ echo " iso : This section builds the final iso."
+ echo " -v Verbose output. Default: no"
+ echo " -h This message."
+ exit 1
+}
+
+skipopts ()
+{
+ for i in $@; do
+ case $i in
+ install) SKIP_INSTALL="y" ;;
+ squashfs) SKIP_SQUASHFS="y" ;;
+ bootimg) SKIP_BOOTIMG="y" ;;
+ iso) SKIP_ISO="y" ;;
+ *) echo "invalid section '$i'"; usage ;;
+ esac
+ done
+}
+
+while getopts 'c:i:n:s:pvh' arg; do
+ case "$arg" in
+ c) CONFIG="$OPTARG" ;;
+ i) CPIOCONFIG="$OPTARG" ;;
+ s) OLDIFS=$IFS; IFS=,
+ skipopts $OPTARG
+ IFS=$OLDIFS ;;
+ v) QUIET="n" ;;
+ h|?) usage ;;
+ *) echo "invalid argument '$arg'"; usage ;;
+ esac
+done
+shift $(($OPTIND - 1))
+
+if [ $# -ne 2 ]; then
+ usage
+else
+ work_dir=${1}
+ isoname=${2}
+fi
+
+if [ -e "${work_dir}" -a "${SKIP_INSTALL}" != "y" ]; then
+ echo "Working dir '${work_dir}' already exists, aborting..."
+ exit 1
+fi
+
+if [ -e "${isoname}" -a "${SKIP_ISO}" != "y" ]; then
+ echo "ISO Image '${isoname}' already exists, aborting..."
+ exit 1
+fi
+
+if [ -e "${CONFIG}" ]; then
+ source "${CONFIG}"
+else
+ echo "Config '${CONFIG}' does not exist, aborting..."
+ exit 1
+fi
+
+if [ -e "${CPIOCONFIG}" ]; then
+ source "${CPIOCONFIG}"
+else
+ echo "mkinitcpio config '${CPIOCONFIG}' does not exist, aborting..."
+ exit 1
+fi
+
+isoroot="${work_dir}/iso"
+instroot="${work_dir}/install"
+
+if [ -z $FAKEROOTKEY ]; then
+ echo "Switching to fakeroot environment"
+ fakeroot ${0} ${ALL_ARGS}
+ exit $?
+fi
+
+_kversion ()
+{
+ echo $(pacman -Ql -r "${instroot}" "${kernelpkg}" |\
+ grep "/lib/modules/[^/]*/$" |\
+ sed "s|.*/lib/modules/\([^/]*\).*/$|\1|")
+}
+
+#Work-arounds for depmod core dumps.... I guess we could just ulimit for now...
+_safepacman ()
+{
+ FAKEROOTSAV=$FAKEROOTKEY; unset FAKEROOTKEY
+ if ! pacman -Sf --noconfirm -r "${instroot}" $* >/dev/null 2>&1; then
+ echo "pacman failed to install '$*', aborting..."
+ exit 1
+ fi
+ FAKEROOTKEY=$FAKEROOTSAV
+}
+safe_install_pkgfile ()
+{
+ if [ -e "${1}" ]; then
+ toinstall=""
+ echo " Installing packages:"
+ while read pkg; do
+ #skip packages listed in IGNOREPKGS
+ echo $ignorepkgs | grep "\<$name\>" >/dev/null 2>&1 && continue
+
+ echo " ${pkg}"
+ toinstall="${toinstall} ${pkg}"
+ done < ${1}
+ _safepacman "${toinstall}"
+ fi
+}
+
+_pacman ()
+{
+ FAKEROOTSAV=$FAKEROOTKEY; unset FAKEROOTKEY
+ if ! fakechroot pacman -Sf --noconfirm -r "${instroot}" $* >/dev/null 2>&1; then
+ echo "pacman failed to install '$*', aborting..."
+ exit 1
+ fi
+ FAKEROOTKEY=$FAKEROOTSAV
+}
+
+install_pkgfile ()
+{
+ if [ -e "${1}" ]; then
+ toinstall=""
+ echo " Installing packages:"
+ while read pkg; do
+ #skip packages listed in IGNOREPKGS
+ echo $ignorepkgs | grep "\<$name\>" >/dev/null 2>&1 && continue
+
+ echo " ${pkg}"
+ toinstall="${toinstall} ${pkg}"
+ done < ${1}
+ _pacman "${toinstall}"
+ fi
+}
+
+if [ "${SKIP_INSTALL}" = "n" ]; then
+ mkdir -p "${isoroot}"
+ mkdir -p "${instroot}"
+
+ FAKEROOTSAV=$FAKEROOTKEY; unset FAKEROOTKEY
+ if ! pacman -Sy -r "${instroot}" 2>&1 | grep -v "cannot open logfile"; then
+ echo "Error, failed to sync pacman... aborting."
+ exit 1
+ fi
+ FAKEROOTKEY=$FAKEROOTSAV
+
+ echo "Installing 'base' packages..."
+ install_pkgfile "${PKGDIR}/base.packages"
+
+ echo "Installing _required_ packages..."
+ _pacman "memtest86+ unionfs unionfs-utils usbutils libusb pciutils squashfs-tools"
+
+ echo "Installing custom packages..."
+ for fil in ${package_files}; do
+ #TODO search for file if not absolute...
+ echo " Installing packages from file '$fil'"
+ install_pkgfile "${fil}"
+ done
+ for pkg in ${additional_packages}; do
+ echo " Installing package '${pkg}'"
+ _pacman "${pkg}"
+ done
+
+ echo "Installing kernel '${kernelpkg}'"
+ # fakechroot and depmod don't get along well. We'll do that stuff
+ # manually...
+ # TODO: fix fakechroot instead of working around it like a jackass
+ FAKEROOTSAV=$FAKEROOTKEY; unset FAKEROOTKEY
+ if ! _safepacman "${kernelpkg}" ; then
+ echo "pacman failed to install '${kernelpkg}', aborting..."
+ exit 1
+ fi
+ FAKEROOTKEY=$FAKEROOTSAV
+ kernelver=$(_kversion)
+ kernelsuffix=${kernelver##*-}
+ echo "Kernel Version ${kernelver} (${kernelsuffix}) installed - installing modules..."
+ safe_install_pkgfile "modules.${kernelsuffix}"
+
+ echo "Updating module dependancies"
+ [ "${kernelsuffix}" == "ARCH" ] && kernelsuffix=""
+ depmod -a -b "${instroot}" -v "${kernelver}" -F "${instroot}/boot/System.map26${kernelsuffix}" >/dev/null
+ find "${instroot}/boot" -name *.img -delete
+
+ echo "Applying default configuration for the Arch ISO."
+ cp -rf ${DEF_CONFIG_DIR}/* "${instroot}"
+
+ echo "Copyright (C) 2006, Arch Linux (Judd Vinet)" > "${instroot}/etc/copyright"
+
+ echo "Creating initial device nodes "
+ rm -f "${instroot}/dev/console" "${instroot}/dev/null" "${instroot}/dev/zero"
+ mknod -m 644 "${instroot}/dev/console" c 5 1
+ mknod -m 666 "${instroot}/dev/null" c 1 3
+ mknod -m 666 "${instroot}/dev/zero" c 1 5
+
+ echo "Creating default home directory"
+ mkdir -p "${instroot}/home/arch"
+
+ # Cleanup
+ echo "Cleaning up ISO root files..."
+ find "${instroot}" -name *.pacnew -name *.pacsave -name *.pacorig -delete
+
+ kill_dirs="var/abs var/cache/man var/cache/pacman var/log/* var/mail tmp usr/include initrd"
+ for x in ${kill_dirs}; do
+ if [ -e "${instroot}/${x}" ]; then
+ rm -rf "${instroot}/${x}"
+ fi
+ done
+
+ find "${instroot}/lib" -name *.a -delete
+ find "${instroot}/usr/lib" -name *.a -delete
+
+ # this actually takes up alot of space...
+ for d in ${instroot}/var/lib/pacman/*; do
+ [ "$(basename ${d})" != "local" ] && rm -rf "${d}"
+ done
+
+ if [ -e "${instroot}/boot" ]; then
+ rm -rf "${isoroot}/boot"
+ mv "${instroot}/boot" "${isoroot}"
+ fi
+fi
+
+if [ "${SKIP_SQUASHFS}" = "n" ]; then
+ if [ -e "${isoroot}/archlive.sqfs" ]; then
+ echo -n "Removing old squashfs image..."
+ rm "${isoroot}/archlive.sqfs"
+ echo "done."
+ fi
+
+ echo -n "Creating squashfs image. This may take some time..."
+ start=$(date +%s)
+ mksquashfs "${instroot}" "${isoroot}/archlive.sqfs" -root-owned > /dev/null
+ echo "done in $(echo $start $(date +%s) | awk '{ printf "%0.2f",($2-$1)/60 }') minutes."
+fi
+
+if [ "${SKIP_BOOTIMG}" = "n" ]; then
+ kernelver=$(_kversion)
+ basedir=${instroot}
+ [ "${instroot:0:1}" != "/" ] && basedir="$(pwd)/${instroot}"
+ if ! mkinitcpio -c "${CPIOCONFIG}" -b "${basedir}" -k "${kernelver}"\
+ -g "${isoroot}/boot/archlive.img"; then
+ echo "initcpio image creation failed..."
+ exit 1
+ fi
+
+ cp ${instroot}/usr/lib/grub/i386-pc/* "${isoroot}/boot/grub"
+fi
+
+if [ "${SKIP_ISO}" = "n" ]; then
+ echo "Creating ISO image..."
+ mkisofs ${q} -r -l -b "boot/grub/stage2_eltorito" -uid 0 -gid 0 -no-emul-boot \
+ -boot-load-size 4 -boot-info-table -publisher "Arch Linux <archlinux.org>" \
+ -p "prepared by $NAME" -A "Arch Linux Live/Rescue CD" -copyright /etc/copyright \
+ -o "${isoname}" "${isoroot}"
+fi
+
+if [ "${qemu_test}" = "y" ]; then
+ echo "Testing image via qemu..."
+ qemu -boot d -kernel-kqemu -cdrom "${isoname}" ${qemuparams}
+else
+ echo "Image completed: ${isoname}"
+fi
diff --git a/mkarchiso.conf b/mkarchiso.conf
new file mode 100644
index 0000000..e2f521d
--- /dev/null
+++ b/mkarchiso.conf
@@ -0,0 +1,11 @@
+# vim: set ft=sh:
+
+kernelpkg="kernel26"
+packager_name="Archlinux User"
+
+package_files=""
+additional_packages=""
+ignorepkgs="devfsd hotplug pcmcia-cs"
+
+qemu_test="n"
+qemuparams="" #"-vnc 1"
diff --git a/mkinitcpio.conf b/mkinitcpio.conf
new file mode 100644
index 0000000..5f19528
--- /dev/null
+++ b/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 archlive ide scsi sata usb fw filesystems"
diff --git a/modules.ARCH b/modules.ARCH
new file mode 100644
index 0000000..eb591b0
--- /dev/null
+++ b/modules.ARCH
@@ -0,0 +1,9 @@
+ipw3945
+madwifi-ng
+ndiswrapper
+rt2500
+rt2x00
+squashfs
+tiacx
+unionfs
+wlan-ng26
diff --git a/modules.beyond b/modules.beyond
new file mode 100644
index 0000000..0ad7d18
--- /dev/null
+++ b/modules.beyond
@@ -0,0 +1,7 @@
+ipw3945
+madwifi-ng
+ndiswrapper
+rt2500
+rt2x00
+tiacx
+wlan-ng26
diff --git a/other.packages b/other.packages
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/other.packages