mirror of
https://github.com/siderolabs/talos.git
synced 2025-08-20 22:21:13 +02:00
This option is required by KSPP. Signed-off-by: Andrew Rynhard <andrew@andrewrynhard.com>
136 lines
3.3 KiB
Bash
Executable File
136 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -Eeuo pipefail
|
|
|
|
function create_isolinuxcfg() {
|
|
|
|
cat <<EOF >$1
|
|
DEFAULT ISO
|
|
SAY Talos
|
|
LABEL ISO
|
|
KERNEL /vmlinuz
|
|
INITRD /initramfs.xz
|
|
APPEND page_poison=1 slab_nomerge slub_debug=P pti=on random.trust_cpu=on consoleblank=0 console=tty0 talos.platform=iso
|
|
EOF
|
|
}
|
|
|
|
function setup_raw_disk(){
|
|
printf "Creating RAW disk, this may take a moment..."
|
|
if [[ -f ${TALOS_RAW} ]]; then
|
|
rm ${TALOS_RAW}
|
|
fi
|
|
dd if=/dev/zero of="${TALOS_RAW}" bs=1M count=0 seek=544
|
|
# NB: Since we use BLKRRPART to tell the kernel to re-read the partition
|
|
# table, it is required to create a partitioned loop device. The BLKRRPART
|
|
# command is meaningful only for partitionable devices.
|
|
DISK=$(losetup --find --partscan --nooverlap --show ${TALOS_RAW})
|
|
printf "done\n"
|
|
}
|
|
|
|
function install_talos() {
|
|
osctl install --bootloader="${WITH_BOOTLOADER}" --disk="${DISK}" --platform="${TALOS_PLATFORM}" --config="${TALOS_CONFIG}" ${EXTRA_ARGS}
|
|
}
|
|
|
|
function create_iso() {
|
|
mkdir -p /mnt/isolinux
|
|
cp -v /usr/lib/syslinux/isolinux.bin /mnt/isolinux/isolinux.bin
|
|
cp -v /usr/lib/syslinux/ldlinux.c32 /mnt/isolinux/ldlinux.c32
|
|
|
|
create_isolinuxcfg /mnt/isolinux/isolinux.cfg
|
|
cp -v /usr/install/vmlinuz /mnt/vmlinuz
|
|
cp -v /usr/install/initramfs.xz /mnt/initramfs.xz
|
|
|
|
mkdir -p /mnt/usr/install
|
|
cp -v /usr/install/vmlinuz /mnt/usr/install/vmlinuz
|
|
cp -v /usr/install/initramfs.xz /mnt/usr/install/initramfs.xz
|
|
|
|
mkisofs -V TALOS -o ${TALOS_ISO} -r -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table /mnt
|
|
isohybrid ${TALOS_ISO}
|
|
}
|
|
|
|
function create_vmdk() {
|
|
qemu-img convert -f raw -O vmdk ${TALOS_RAW} ${TALOS_VMDK}
|
|
}
|
|
|
|
function cleanup {
|
|
umount 2>/dev/null || true
|
|
losetup -d ${DISK} 2>/dev/null || true
|
|
}
|
|
|
|
function usage() {
|
|
printf "entrypoint.sh -p <platform> -u <userdata> [b|d|l|n]"
|
|
}
|
|
|
|
TALOS_RAW="/out/talos.raw"
|
|
TALOS_ISO="/out/talos.iso"
|
|
TALOS_VMDK="/out/talos.vmdk"
|
|
TALOS_PLATFORM="metal"
|
|
TALOS_CONFIG="none"
|
|
WITH_BOOTLOADER="true"
|
|
EXTRA_ARGS=""
|
|
|
|
case "$1" in
|
|
install)
|
|
shift
|
|
while getopts "bd:n:p:ru:e:" opt; do
|
|
case ${opt} in
|
|
b )
|
|
echo "Creating disk without bootloader installed"
|
|
WITH_BOOTLOADER="false"
|
|
;;
|
|
d )
|
|
DISK=${OPTARG}
|
|
;;
|
|
e )
|
|
EXTRA_ARGS="${EXTRA_ARGS} --extra-kernel-arg=${OPTARG}"
|
|
;;
|
|
n )
|
|
TALOS_RAW="/out/${OPTARG}.raw"
|
|
;;
|
|
p )
|
|
TALOS_PLATFORM=${OPTARG}
|
|
echo "Using kernel parameter talos.platform=${TALOS_PLATFORM}"
|
|
;;
|
|
r )
|
|
trap cleanup EXIT
|
|
setup_raw_disk
|
|
;;
|
|
u )
|
|
TALOS_CONFIG=${OPTARG}
|
|
echo "Using kernel parameter talos.config=${TALOS_CONFIG}"
|
|
;;
|
|
\? )
|
|
echo "Invalid Option: -${OPTARG}" 1>&2
|
|
exit 1
|
|
;;
|
|
: )
|
|
echo "Invalid Option: -${OPTARG} requires an argument" 1>&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
shift $((OPTIND-1))
|
|
|
|
if [ ! "${TALOS_PLATFORM}" ] || [ ! "${TALOS_CONFIG}" ]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
trap cleanup EXIT
|
|
echo "Using disk ${DISK} as installation media"
|
|
install_talos
|
|
;;
|
|
iso)
|
|
create_iso
|
|
;;
|
|
vmdk)
|
|
create_vmdk
|
|
;;
|
|
ami)
|
|
shift
|
|
create_ami "${@}"
|
|
;;
|
|
*)
|
|
exec "$@"
|
|
esac
|