mkiso/mkiso-debian.sh

98 lines
2.8 KiB
Bash

#!/bin/bash
function mount_rootfs() {
mkdir -p chroot/dev chroot/dev/pts chroot/proc chroot/sys chroot/run
sudo mount --bind /dev chroot/dev
sudo mount --bind /dev/pts chroot/dev/pts
sudo mount --bind /proc chroot/proc
sudo mount --bind /sys chroot/sys
sudo mount --bind /run chroot/run
}
function unmount_rootfs() {
sudo umount chroot/dev/pts
sudo umount chroot/dev
sudo umount chroot/proc
sudo umount chroot/sys
sudo umount chroot/run
}
function chroot_cmd() {
sudo env DEBIAN_FRONTEND=noninteractive chroot chroot "$@"
}
function chroot_apt() {
chroot_cmd apt "$@"
}
function install_iso_build_deps() {
sudo apt install -y debootstrap squashfs-tools syslinux xorriso p7zip-full
}
function debootstrap_base() {
sudo debootstrap --arch=amd64 testing chroot https://mirrors.tuna.tsinghua.edu.cn/debian/
}
function update_sourcelists() {
echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main contrib non-free non-free-firmware" | sudo tee chroot/etc/apt/sources.list
echo "deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main contrib non-free non-free-firmware" | sudo tee -a chroot/etc/apt/sources.list
}
function chroot_install_base_packages() {
chroot_apt update
chroot_apt upgrade -y
chroot_apt install -y zsh
chroot_apt install -y live-boot live-config-systemd --no-install-recommends
# chroot_apt install -y lxqt-core sddm-theme-debian-elarun
chroot_apt install -y linux-image-amd64
}
function chroot_create_live_user() {
chroot_cmd useradd -m -s /bin/bash live
echo "live:live" | chroot_cmd chpasswd
}
function make_bootable() {
cp "$(ls -1t chroot/boot/vmlinuz-* | head -n 1)" isoroot/vmlinuz
cp "$(ls -1t chroot/boot/initrd.img-* | head -n 1)" isoroot/initrd
mkdir isoroot/isolinux
cp /usr/lib/ISOLINUX/isolinux.bin isoroot/isolinux
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 isoroot/isolinux
cp ../isolinux.cfg isoroot/isolinux/isolinux.cfg
cat > isoroot/isolinux/isolinux.cfg <<EOL
DEFAULT live
LABEL live
MENU LABEL ^Boot Live System
KERNEL /vmlinuz
APPEND initrd=/initrd boot=live components
EOL
}
function create_iso() {
xorriso -as mkisofs -o ../debian-live.iso -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
-c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot \
-exclude chroot \
-boot-load-size 4 -boot-info-table \
./isoroot/
7z l ../debian-live.iso
}
function main() {
set -e
install_iso_build_deps
mkdir chroot
debootstrap_base
update_sourcelists
mount_rootfs
chroot_install_base_packages
chroot_create_live_user
unmount_rootfs
mkdir -p isoroot/live
sudo mksquashfs chroot/ isoroot/live/filesystem.squashfs -comp xz -e boot
make_bootable
create_iso
}