extlinux configuration for the bootable image is installed to /boot/extlinux, matching the extlinux-install script in Debian. From the configuration point of view it's still called "syslinux", the same as the rest of the syslinux family (pxelinux, isolinux etc.)
346 lines
7.1 KiB
Bash
Executable File
346 lines
7.1 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
## live-build(7) - System Build Scripts
|
|
## Copyright (C) 2006-2014 Daniel Baumann <mail@daniel-baumann.ch>
|
|
##
|
|
## This program 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
|
|
[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh
|
|
|
|
# Setting static variables
|
|
DESCRIPTION="$(Echo 'build binary image')"
|
|
HELP=""
|
|
USAGE="${PROGRAM} [--force]"
|
|
|
|
Arguments "${@}"
|
|
|
|
# Reading configuration files
|
|
Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
|
|
Set_defaults
|
|
|
|
if ! In_list hdd "${LIVE_IMAGE_TYPE}"
|
|
then
|
|
exit 0
|
|
fi
|
|
|
|
Echo_message "Begin building binary hdd image..."
|
|
|
|
# Requiring stage file
|
|
Require_stagefile .build/config .build/bootstrap .build/chroot_proc
|
|
|
|
# Checking stage file
|
|
Check_stagefile .build/binary_hdd
|
|
|
|
# Checking lock file
|
|
Check_lockfile .lock
|
|
|
|
# Creating lock file
|
|
Create_lockfile .lock
|
|
|
|
# Checking depends
|
|
case "${LB_BINARY_FILESYSTEM}" in
|
|
fat*)
|
|
Check_package chroot/sbin/mkdosfs dosfstools
|
|
;;
|
|
|
|
ntfs)
|
|
Check_package chroot/sbin/mkfs.nfts ntfs-3g
|
|
;;
|
|
esac
|
|
|
|
Check_package chroot/usr/share/doc/mtools mtools
|
|
Check_package chroot/sbin/parted parted
|
|
|
|
if [ "${LIVE_IMAGE_ARCHITECTURE}" = "sparc" ]
|
|
then
|
|
case "${LB_BINARY_FILESYSTEM}" in
|
|
ext2|ext3|ext4)
|
|
Check_package chroot/sbin/mkfs.${LB_BINARY_FILESYSTEM} e2fsprogs
|
|
;;
|
|
|
|
*)
|
|
Echo_error "Sparc only supports booting from ext2, ext3, ext4 or ufs."
|
|
exit 1
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
case "${LB_BOOTLOADER}" in
|
|
grub)
|
|
Check_package chroot/usr/sbin/grub grub
|
|
;;
|
|
|
|
syslinux)
|
|
case ${LB_BINARY_FILESYSTEM} in
|
|
fat*|ntfs)
|
|
_BOOTLOADER=syslinux
|
|
;;
|
|
ext[234]|btrfs)
|
|
_BOOTLOADER=extlinux
|
|
;;
|
|
*)
|
|
Echo_error "syslinux/extlinux doesn't support ${LB_BINARY_FILESYSTEM}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
Check_package chroot/usr/bin/${_BOOTLOADER} ${_BOOTLOADER}
|
|
;;
|
|
esac
|
|
|
|
# Restoring cache
|
|
Restore_cache cache/packages.binary
|
|
|
|
# Installing depends
|
|
Install_package
|
|
|
|
# Remove old binary
|
|
if [ -f ${LIVE_iMAGE_NAME}.img ]
|
|
then
|
|
rm -f ${LIVE_iMAGE_NAME}.img
|
|
fi
|
|
|
|
# Enforce fat32 if we find individual files bigger than 2GB
|
|
if [ "${LB_BINARY_FILESYSTEM}" = "fat16" ] && [ -n "$(find binary -size +1999M)" ]
|
|
then
|
|
Echo_warning "FAT16 doesn't support files larger than 2GB, automatically enforcing FAT32."
|
|
|
|
LB_BINARY_FILESYSTEM="fat32"
|
|
export LB_BINARY_FILESYSTEM
|
|
fi
|
|
|
|
# Enforce fat32 if we have images in total bigger than 2GB
|
|
if [ "${LB_BINARY_FILESYSTEM}" = "fat16" ] && [ "$(du -s binary | awk '{ print $1 }')" -gt "1900000" ]
|
|
then
|
|
Echo_warning "FAT16 doesn't support partitions larger than 2GB, automatically enforcing FAT32"
|
|
|
|
LB_BINARY_FILESYSTEM="fat32"
|
|
export LB_BINARY_FILESYSTEM
|
|
fi
|
|
|
|
# Enforce ntfs if we find individual files bigger than 4GB
|
|
if [ "${LB_BINARY_FILESYSTEM}" = "fat32" ] && [ -n "$(find binary -size +3999M)" ]
|
|
then
|
|
Echo_warning "FAT32 doesn't support files larger than 4GB, automatically enforcing NTFS."
|
|
|
|
LB_BINARY_FILESYSTEM="ntfs"
|
|
export LB_BINARY_FILESYSTEM
|
|
fi
|
|
|
|
# Everything which comes here needs to be cleaned up,
|
|
if [ "$LB_HDD_SIZE" = "auto" ];
|
|
then
|
|
DU_DIM="$(du -ms binary | cut -f1)"
|
|
REAL_DIM="$(Calculate_partition_size ${DU_DIM} ${LB_BINARY_FILESYSTEM})"
|
|
else
|
|
REAL_DIM=$LB_HDD_SIZE
|
|
fi
|
|
|
|
dd if=/dev/zero of=chroot/binary.img bs=1024k count=0 seek=${REAL_DIM}
|
|
FREELO="$(${LB_LOSETUP} -f)"
|
|
if [ ! -b chroot/${FREELO} ]
|
|
then
|
|
MAKEDEV="true"
|
|
|
|
mv chroot/dev chroot/dev.tmp
|
|
find /dev | cpio -dmpu chroot
|
|
fi
|
|
|
|
echo "!!! The following error/warning messages can be ignored !!!"
|
|
Losetup $FREELO chroot/binary.img 0
|
|
|
|
case "${LIVE_IMAGE_ARCHITECTURE}" in
|
|
sparc)
|
|
PARTITION_TABLE_TYPE="sun"
|
|
;;
|
|
*)
|
|
PARTITION_TABLE_TYPE="msdos"
|
|
;;
|
|
esac
|
|
|
|
case "${LB_BINARY_FILESYSTEM}" in
|
|
ext2|ext3|ext4)
|
|
PARTITION_TYPE="ext2"
|
|
;;
|
|
|
|
fat16|fat32)
|
|
PARTITION_TYPE="${LB_BINARY_FILESYSTEM}"
|
|
;;
|
|
|
|
ntfs)
|
|
PARTITION_TYPE="NTFS"
|
|
;;
|
|
|
|
*)
|
|
Echo_error "Unsupported binary filesystem %s" "${LB_BINARY_FILESYSTEM}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
case "${LB_BUILD_WITH_CHROOT}" in
|
|
true)
|
|
Chroot chroot "parted -s ${FREELO} mklabel ${PARTITION_TABLE_TYPE}" || true
|
|
Chroot chroot "parted -a optimal -s ${FREELO} mkpart primary ${PARTITION_TYPE} 0% 100%" || true
|
|
Chroot chroot "parted -s ${FREELO} set 1 boot on" || true
|
|
Chroot chroot "parted -s ${FREELO} set 1 lba off" || true
|
|
|
|
if [ "${LB_BOOTLOADER}" = "syslinux" ]
|
|
then
|
|
dd if=chroot/usr/lib/${_BOOTLOADER}/mbr.bin of=${FREELO} bs=440 count=1
|
|
fi
|
|
;;
|
|
|
|
false)
|
|
parted -s ${FREELO} mklabel ${PARTITION_TABLE_TYPE} || true
|
|
parted -a optimal -s ${FREELO} mkpart primary ${PARTITION_TYPE} 0% 100% || true
|
|
parted -s "${FREELO}" set 1 boot on || true
|
|
parted -s "${FREELO}" set 1 lba off || true
|
|
|
|
if [ "${LB_BOOTLOADER}" = "syslinux" ]
|
|
then
|
|
dd if=/usr/lib/${_BOOTLOADER}/mbr.bin of=${FREELO} bs=440 count=1
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
Lodetach ${FREELO}
|
|
|
|
FREELO="$(${LB_LOSETUP} -f)"
|
|
Losetup $FREELO chroot/binary.img 1
|
|
|
|
case "${LB_BINARY_FILESYSTEM}" in
|
|
ext2|ext3|ext4)
|
|
MKFS="${LB_BINARY_FILESYSTEM}"
|
|
MKFS_OPTIONS="-L ${LB_HDD_LABEL} -m 0"
|
|
MOUNT_OPTIONS=""
|
|
;;
|
|
|
|
fat16)
|
|
MKFS="vfat"
|
|
MKFS_OPTIONS="-F 16 -n ${LB_HDD_LABEL}"
|
|
MOUNT_OPTIONS=""
|
|
;;
|
|
|
|
fat32)
|
|
MKFS="vfat"
|
|
MKFS_OPTIONS="-F 32 -n ${LB_HDD_LABEL}"
|
|
MOUNT_OPTIONS=""
|
|
;;
|
|
|
|
ntfs)
|
|
MKFS="ntfs"
|
|
MKFS_OPTIONS="-L ${LB_HDD_LABEL}"
|
|
MOUNT_OPTIONS="-t ntfs-3g"
|
|
;;
|
|
esac
|
|
|
|
case "${LB_BUILD_WITH_CHROOT}" in
|
|
true)
|
|
Chroot chroot "mkfs.${MKFS} ${MKFS_OPTIONS} ${FREELO}"
|
|
;;
|
|
|
|
false)
|
|
mkfs.${MKFS} ${MKFS_OPTIONS} ${FREELO}
|
|
;;
|
|
esac
|
|
|
|
case "${LB_BINARY_FILESYSTEM}" in
|
|
fat*)
|
|
CP_OPTIONS="-r -L"
|
|
;;
|
|
|
|
*)
|
|
CP_OPTIONS="-a"
|
|
;;
|
|
esac
|
|
|
|
Echo_message "Copying binary contents into image..."
|
|
|
|
mkdir -p chroot/binary.tmp
|
|
mount ${MOUNT_OPTIONS} ${FREELO} chroot/binary.tmp
|
|
cp -T ${CP_OPTIONS} binary/ chroot/binary.tmp
|
|
|
|
FIXME()
|
|
{
|
|
if [ "${LB_BOOTLOADER}" = "grub" ]
|
|
then
|
|
|
|
cat > chroot/grub.sh << EOF
|
|
cd binary.tmp
|
|
grub --batch << EOM
|
|
find /live/vmlinuz
|
|
EOM
|
|
EOF
|
|
|
|
rootpartition="$(Chroot chroot 'sh grub.sh' 2>/dev/null | grep -A 1 'find /live/vmlinuz' | grep -v 'find /live/vmlinuz')"
|
|
hdddev="$(echo $rootpartition | sed -e 's|,[[:digit:]]||')"
|
|
echo "Root partition is $rootpartition, device is: $hdddev"
|
|
|
|
echo "WAITING..." && read WAIT
|
|
|
|
#cat > chroot/grub.sh << EOF
|
|
#grub --batch << EOM
|
|
#root $rootpartition
|
|
#setup $hdddev
|
|
#EOM
|
|
#EOF
|
|
|
|
#Chroot chroot "sh grub.sh"
|
|
|
|
rm -f chroot/grub.sh
|
|
fi
|
|
}
|
|
|
|
case "${_BOOTLOADER}" in
|
|
syslinux)
|
|
_SYSLINUX_INSTALLER="syslinux ${FREELO}"
|
|
;;
|
|
extlinux)
|
|
_SYSLINUX_INSTALLER="extlinux --install /binary.tmp/boot/extlinux"
|
|
;;
|
|
*)
|
|
_SYSLINUX_INSTALLER=""
|
|
;;
|
|
esac
|
|
|
|
if [ -n "${_SYSLINUX_INSTALLER}" ]
|
|
then
|
|
case "${LB_BUILD_WITH_CHROOT}" in
|
|
true)
|
|
Chroot chroot "${_SYSLINUX_INSTALLER}"
|
|
;;
|
|
false)
|
|
${_SYSLINUX_INSTALLER}
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
umount chroot/binary.tmp
|
|
rmdir chroot/binary.tmp
|
|
|
|
Lodetach ${FREELO}
|
|
|
|
echo "!!! The above error/warning messages can be ignored !!!"
|
|
|
|
if [ -n "${MAKEDEV}" ]
|
|
then
|
|
rm -rf chroot/dev
|
|
mv chroot/dev.tmp chroot/dev
|
|
fi
|
|
|
|
mv chroot/binary.img ${LIVE_IMAGE_NAME}-${LIVE_IMAGE_ARCHITECTURE}
|
|
|
|
# Saving cache
|
|
Save_cache cache/packages.binary
|
|
|
|
# Removing depends
|
|
Remove_package
|
|
|
|
# Creating stage file
|
|
Create_stagefile .build/binary_hdd
|