178 lines
3.7 KiB
Bash
Executable File
178 lines
3.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# lh_binary_net(1) - build netboot binary image
|
|
# 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="build netboot binary image"
|
|
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 ! In_list net "${LH_BINARY_IMAGES}"
|
|
then
|
|
exit 0
|
|
fi
|
|
|
|
if [ "${LH_NET_TARBALL}" = "none" ]
|
|
then
|
|
exit 0
|
|
fi
|
|
|
|
Echo_message "Begin building binary netboot image..."
|
|
|
|
# Requiring stage file
|
|
Require_stagefile .stage/bootstrap
|
|
|
|
# Checking stage file
|
|
Check_stagefile .stage/binary_net
|
|
|
|
# Checking lock file
|
|
Check_lockfile .lock
|
|
|
|
# Creating lock file
|
|
Create_lockfile .lock
|
|
|
|
if [ "${LH_ARCHITECTURE}" = "sparc" ]
|
|
then
|
|
# Checking depends
|
|
Check_package chroot/usr/bin/elftoaout sparc-utils
|
|
|
|
# Restoring cache
|
|
Restore_cache cache/packages_binary
|
|
|
|
# Installing depends
|
|
Install_package
|
|
|
|
# Set target and source directories
|
|
DESTDIR="tftpboot"
|
|
case "${LH_INITRAMFS}" in
|
|
casper)
|
|
ORIGDIR="binary/casper"
|
|
;;
|
|
|
|
live-initramfs)
|
|
ORIGDIR="binary/live"
|
|
;;
|
|
esac
|
|
|
|
# Find defaults
|
|
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-||')"
|
|
DEFAULT_MAP="$(echo chroot/boot/System.map-*${DEFAULT_FLAVOUR})"
|
|
|
|
gzip -cd ${ORIGDIR}/${DEFAULT_KERNEL} > kernel.tmp
|
|
|
|
mkdir -p ${DESTDIR}
|
|
rm -f ${DESTDIR}/boot.img
|
|
elftoaout -o ${DESTDIR}/boot.img kernel.tmp
|
|
|
|
case "${DEFAULT_FLAVOUR}" in
|
|
sparc32)
|
|
piggyback ${DESTDIR}/boot.img ${DEFAULT_MAP} ${ORIGDIR}/${DEFAULT_INITRD}
|
|
;;
|
|
sparc64)
|
|
piggyback64 ${DESTDIR}/boot.img ${DEFAULT_MAP} ${ORIGDIR}/${DEFAULT_INITRD}
|
|
;;
|
|
*)
|
|
Echo_error "Invalid default kernel flavour for sparc \"%s\"" "${DEFAULT_FLAVOUR}"
|
|
exit 1;
|
|
;;
|
|
esac
|
|
|
|
# Pad boot.img
|
|
REMAINDER=$((( 4 - $(stat -c %s ${DESTDIR}/boot.img) % 4 ) % 4))
|
|
dd if=/dev/zero bs=1 count=${REMAINDER} >> ${DESTDIR}/boot.img
|
|
|
|
# No need for kernel and initrd images in the binary
|
|
rm -f ${ORIGDIR}/vmlinuz-*
|
|
rm -f ${ORIGDIR}/initrd.img-*
|
|
|
|
# Clean temporaries
|
|
rm -f kernel.tmp
|
|
|
|
# Saving cache
|
|
Save_cache cache/packages_binary
|
|
|
|
# Removing depends
|
|
Remove_package
|
|
fi
|
|
|
|
# Remove old binary
|
|
rm -f binary-net.tar.bz2
|
|
rm -f binary-net.tar.gz
|
|
rm -f binary-net.tar
|
|
|
|
# Creating image file
|
|
ROOT_DIR=$(basename ${LH_NET_ROOT_PATH})
|
|
if [ "${ROOT_DIR}" = "chroot" ]
|
|
then
|
|
mv chroot chroot.tmp
|
|
fi
|
|
|
|
if [ "${ROOT_DIR}" != "binary" ]
|
|
then
|
|
mv binary ${ROOT_DIR}
|
|
fi
|
|
|
|
cd ..
|
|
|
|
case "${LH_NET_TARBALL}" in
|
|
bzip2)
|
|
tar cfj binary-net-tar.bz2 "$(basename ${OLDPWD})/${ROOT_DIR}" "$(basename ${OLDPWD})/tftpboot"
|
|
mv binary-net.tar.bz2 "${OLDPWD}"
|
|
;;
|
|
|
|
gzip)
|
|
if gzip --help | grep -qs "\-\-rsyncable"
|
|
then
|
|
tar cf binary-net.tar "$(basename ${OLDPWD})/${ROOT_DIR}" "$(basename ${OLDPWD})/tftpboot"
|
|
gzip --rsyncable --best binary-net.tar
|
|
else
|
|
tar cfz binary-net.tar.gz "$(basename ${OLDPWD})/${ROOT_DIR}" "$(basename ${OLDPWD})/tftpboot"
|
|
fi
|
|
|
|
mv binary-net.tar.gz "${OLDPWD}"
|
|
;;
|
|
|
|
tar)
|
|
tar cf binary-net.tar "$(basename ${OLDPWD})/${ROOT_DIR}" "$(basename ${OLDPWD})/tftpboot"
|
|
mv binary-net.tar "${OLDPWD}"
|
|
;;
|
|
esac
|
|
|
|
cd "${OLDPWD}"
|
|
|
|
if [ "${ROOT_DIR}" != "binary" ]
|
|
then
|
|
mv ${ROOT_DIR} binary
|
|
fi
|
|
|
|
if [ "${ROOT_DIR}" = "chroot" ]
|
|
then
|
|
mv chroot.tmp chroot
|
|
fi
|
|
|
|
# Creating stage file
|
|
Create_stagefile .stage/binary_net
|