Add lh_binary_silo and associated templates to support the SILO bootloader.

Signed-off-by: Chris Lamb <chris@chris-lamb.co.uk>
This commit is contained in:
Chris Lamb 2008-06-15 04:46:25 +01:00
parent 0cfbc69eb0
commit 49a4ffc061
4 changed files with 352 additions and 0 deletions

285
helpers/lh_binary_silo Executable file
View File

@ -0,0 +1,285 @@
#!/bin/sh
# lh_binary_silo(1) - installs silo into binary
# Copyright (C) 2006-2008 Daniel Baumann <daniel@debian.org>
#
# live-helper comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
# This is free software, and you are welcome to redistribute it
# under certain conditions; see COPYING for details.
set -e
# Including common functions
LH_BASE="${LH_BASE:-/usr/share/live-helper}"
for FUNCTION in "${LH_BASE}"/functions/*.sh
do
. "${FUNCTION}"
done
# Setting static variables
DESCRIPTION="installs silo into binary"
HELP=""
USAGE="${PROGRAM} [--force]"
Arguments "${@}"
# Reading configuration files
Read_conffile config/all config/common config/bootstrap config/chroot config/binary config/source
Set_defaults
if [ "${LH_BOOTLOADER}" != "silo" ]
then
exit 0
fi
Echo_message "Begin installing silo..."
# Requiring stage file
Require_stagefile .stage/bootstrap
# Checking stage file
Check_stagefile .stage/binary_silo
# Checking silo templates
Check_templates silo
# Checking lock file
Check_lockfile .lock
# Creating lock file
Create_lockfile .lock
# Check architecture
Check_architecture sparc
# Checking depends
Check_package chroot/usr/sbin/silo silo
# Restoring cache
Restore_cache cache/packages_binary
# Installing depends
Install_package
# Local functions
Silo_live_entry ()
{
LABEL="${1}"
KERNEL="${2}"
INITRD="${3}"
APPEND="${4}"
DIRECTORY="/$(basename ${DESTDIR_LIVE})"
LINUX_LIVE="${LINUX_LIVE}\nimage=${DIRECTORY}/${KERNEL}\n"
LINUX_LIVE="${LINUX_LIVE}\t label=${LABEL}\n"
LINUX_LIVE="${LINUX_LIVE}\t initrd=${DIRECTORY}/${INITRD}\n"
LINUX_LIVE="${LINUX_LIVE}\t append=\"boot=${INITFS} LH_BOOTAPPEND_LIVE ${APPEND}\"\n"
}
Silo_install_entry ()
{
LABEL="${1}"
KERNEL="${2}"
INITRD="${3}"
APPEND="${4}"
DIRECTORY="/$(basename ${DESTDIR_INSTALL})"
if [ "${LH_DISTRIBUTION}" != "etch" ] && [ "${LABEL}" != "rescue" ] && [ "${LABEL}" != "rescuegui" ]
then
APPEND="${APPEND} quiet"
fi
LINUX_INSTALL="${LINUX_INSTALL}\nimage=${DIRECTORY}/${KERNEL}\n"
LINUX_INSTALL="${LINUX_INSTALL}\t label=${LABEL}\n"
LINUX_INSTALL="${LINUX_INSTALL}\t initrd=${DIRECTORY}/${INITRD}\n"
LINUX_INSTALL="${LINUX_INSTALL}\t append=\"LH_BOOTAPPEND_LIVE ${APPEND} LH_BOOTAPPEND_INSTALL\"\n"
}
case "${LH_INITRAMFS}" in
casper)
INITFS="casper"
;;
live-initramfs)
INITFS="live"
;;
esac
# Setting destination directory
case "${LH_BINARY_IMAGES}" in
iso)
case "${LH_INITRAMFS}" in
casper)
DESTDIR_LIVE="binary/casper"
;;
live-initramfs)
DESTDIR_LIVE="binary/live"
;;
esac
DESTDIR_INSTALL="binary/install"
;;
net|tar|usb-hdd)
Echo_error "not yet supported, aborting (FIXME)."
exit 1
;;
esac
# Creating directory
mkdir -p "${DESTDIR_LIVE}"
# Setting boot parameters
case "${LH_ENCRYPTION}" in
""|disabled)
;;
*)
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} encryption=${LH_ENCRYPTION}"
;;
esac
if [ -n "${LH_USERNAME}" ]
then
case "${LH_INITRAMFS}" in
casper)
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} username=${LH_USERNAME}"
;;
live-initramfs)
if [ "${LH_USERNAME}" != "user" ]
then
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} username=${LH_USERNAME}"
fi
;;
esac
fi
if [ -n "${LH_HOSTNAME}" ]
then
case "${LH_INITRAMFS}" in
casper)
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} hostname=${LH_HOSTNAME}"
;;
live-initramfs)
if [ "${LH_HOSTNAME}" != "debian" ]
then
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} hostname=${LH_HOSTNAME}"
fi
;;
esac
fi
if [ "${LH_UNION_FILESYSTEM}" != "unionfs" ]
then
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} union=${LH_UNION_FILESYSTEM}"
fi
if [ -n "${LH_NET_COW_PATH}" ]
then
Echo_error "Net cow not supported on silo"
exit 1
fi
if [ "${LH_EXPOSED_ROOT}" != "disabled" ]
then
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} exposedroot"
fi
LH_BOOTAPPEND_LIVE="$(echo ${LH_BOOTAPPEND_LIVE} | sed -e 's| ||')"
# Parameters are listed at: linux/Documentation/kernel-parameters.txt
FAILSAFE="noapic noapm nodma nomce nolapic nosmp vga=ofonly"
# Assembling kernel configuration
# Default entries
DEFAULT_FLAVOUR="$(echo ${LH_LINUX_FLAVOURS} | awk '{ print $1 }')"
DEFAULT_KERNEL="$(basename chroot/boot/vmlinuz-*${DEFAULT_FLAVOUR})"
DEFAULT_INITRD="initrd.img-$(echo ${DEFAULT_KERNEL} | sed -e 's|vmlinuz-||')"
Silo_live_entry "live" "${DEFAULT_KERNEL}" "${DEFAULT_INITRD}"
Silo_live_entry "live-failsafe" "${DEFAULT_KERNEL}" "${DEFAULT_INITRD}" "${FAILSAFE}"
if [ "$(echo ${LH_LINUX_FLAVOURS} | wc -w)" -gt "1" ]
then
for KERNEL in chroot/boot/vmlinuz-*
do
KERNEL_IMAGE="$(basename ${KERNEL})"
KERNEL_VERSION="$(echo ${KERNEL_IMAGE} | sed -e 's|vmlinuz-||')"
INITRD="initrd.img-${KERNEL_VERSION}"
Silo_live_entry "live-${KERNEL_VERSION}" "${KERNEL_IMAGE}" "${INITRD}"
Silo_live_entry "live-${KERNEL_VERSION}-failsafe" "${KERNEL_IMAGE}" "${INITRD}" "${FAILSAFE}"
done
fi
LINUX_LIVE="$(/bin/echo ${LINUX_LIVE} | sed -e 's|binary||g' -e 's|//|/|g')"
# Assembling debian-installer configuration
if [ "${LH_DEBIAN_INSTALLER}" != "disabled" ]
then
VMLINUZ_DI="vmlinuz"
INITRD_DI="initrd.gz"
APPEND_DI="vga=normal"
Silo_install_entry "linux" "${VMLINUZ_DI}" "${INITRD_DI}" "${APPEND_DI}"
Silo_install_entry "install" "${VMLINUZ_DI}" "${INITRD_DI}" "${APPEND_DI}"
Silo_install_entry "expert" "${VMLINUZ_DI}" "${INITRD_DI}" "priority=low ${APPEND_DI}"
Silo_install_entry "rescue" "${VMLINUZ_DI}" "${INITRD_DI}" "rescue/enable=true ${APPEND_DI}"
Silo_install_entry "auto" "${VMLINUZ_DI}" "${INITRD_DI}" "auto=true priority=critical ${APPEND_DI}"
fi
LINUX_INSTALL="$(/bin/echo ${LINUX_INSTALL} | sed -e 's|binary||g' -e 's|//|/|g')"
case "${LH_BINARY_IMAGES}" in
iso|usb-hdd)
# Copying silo
mkdir -p binary/boot
case "${LH_CHROOT_BUILD}" in
enabled)
cp chroot/boot/second.b binary/boot
;;
disabled)
cp /boot/second.b binary/boot
;;
esac
cp -r "${TEMPLATES}"/* binary/boot
if [ "${LH_DEBIAN_INSTALLER}" = "disabled" ]
then
rm -f binary/boot/debian.txt.install
else
mv binary/boot/debian.txt.install binary/boot/debian.txt
fi
# Configure silo templates
sed -i -e "s|LINUX_LIVE|${LINUX_LIVE}|" \
-e "s|LINUX_INSTALL|${LINUX_INSTALL}|" \
binary/boot/silo.conf
sed -i -e "s|LH_BOOTAPPEND_INSTALL|${LH_BOOTAPPEND_INSTALL}|" \
-e "s|LH_BOOTAPPEND_LIVE|${LH_BOOTAPPEND_LIVE}|" \
binary/boot/silo.conf
sed -i -e "s|LH_DATE|$(date +%Y%m%d)|" \
-e "s|LH_VERSION|${VERSION}|" \
-e "s|LH_DISTRIBUTION|${LH_DISTRIBUTION}|" \
binary/boot/debian.txt
;;
esac
# Saving cache
Save_cache cache/packages_binary
# Removing depends
Remove_package
# Creating stage file
Create_stagefile .stage/binary_silo

21
templates/silo/debian.txt Normal file
View File

@ -0,0 +1,21 @@
Welcome to Debian GNU/Linux!
This is a Debian LH_DISTRIBUTION live image.
It was built on LH_DATE by live-helper LH_VERSION.
You must have at least 64 megabytes of RAM to run this Debian Live system.
See the Live Manual or the FAQ for more information; both documents are
available at the Debian Live web site, http://debian-live.alioth.debian.org/
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted
by applicable law.
[ Press ENTER to boot the live system ]
Or:
"live-failsafe"
Start the live system in fail-safe mode.

View File

@ -0,0 +1,37 @@
Welcome to Debian GNU/Linux!
This is a Debian LH_DISTRIBUTION combined live and installation image.
It was built on LH_DATE by live-helper LH_VERSION.
You must have at least 64 megabytes of RAM to run this Debian Live system.
See the Live Manual or the FAQ for more information; both documents are
available at the Debian Live web site, http://debian-live.alioth.debian.org/
You must have at least 32 megabytes of RAM to use the Debian installer.
You should have space on your hard disk to create a new disk partition
of at least 256 megabytes to install the base system. You'll need more
disk space to install additional packages, depending on what you wish
to do with your new Debian system.
See the Installation Manual or the FAQ for more information; both
documents are available at the Debian web site, http://www.debian.org/
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted
by applicable law.
[ Press ENTER to boot the live system ]
Or:
"live-failsafe"
Start the live system in fail-safe mode.
"install"
Start the installation using the normal installer.
"expert"
Boot into expert install mode, for maximum control.
"rescue"
Boot into the installer rescue mode.

9
templates/silo/silo.conf Normal file
View File

@ -0,0 +1,9 @@
partition=1
timeout=600
message=/boot/debian.txt
default=live
read-write
LINUX_LIVE
LINUX_INSTALL