====== Create custom debian live usb-stick (uefi / bios dual boot) ====== ===== Install necessary packages on the build system ===== root@host:~# apt-get install debootstrap squashfs-tools rsync xorriso grub-pc-bin grub-efi-amd64-bin mtools [ ... ] ===== Create directory structure & install base image ===== root@host:~# mkdir /root/shtf-stick && cd /root/shtf-stick root@host:~/shtf-stick# debootstrap --arch=i386 --variant=minbase stretch chroot http://http.at.debian.org/debian/ [ ... ] ===== Perform basic configuration ===== root@host:~/shtf-stick# chroot ./chroot root@host:/# echo shtf > /etc/hostname root@host:/# passwd root Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully root@host:/# mount none -t proc /proc && \ mount none -t sysfs /sys && \ mount none -t devpts /dev/pts && \ export HOME=/root && \ export LC_ALL=C && \ apt-get update && \ apt-get install dialog dbus --yes && \ dbus-uuidgen > /var/lib/dbus/machine-id root@host:/# apt-get install --no-install-recommends --yes linux-image-686 firmware-linux-free systemd-sysv live-boot kbd console-data [ ... ] ===== Install additional packages ===== root@host:/# apt-get install --no-install-recommends --yes \ network-manager net-tools wireless-tools wpagui tcpdump wget openssh-client \ blackbox xserver-xorg-core xserver-xorg xinit xterm \ pciutils usbutils gparted ntfs-3g hfsprogs rsync less curl tcpdump dosfstools syslinux partclone vim pv \ firefox-esr chntpw lvm2 mdadm keepassx gdisk gnupg duplicity s3cmd bzip2 lsof screen mc htop iproute2 inetutils-ping inetutils-traceroute netcat-openbsd extundelete [ ... ] ===== Cleanup & leave chroot environment ===== root@host:/# rm -f /vmlinuz* /initrd.img* /var/lib/dbus/machine-id && \ apt-get clean && \ rm /etc/resolv.conf && \ umount -lf /proc /sys /dev/pts root@host:/# exit exit root@debian:~/shtf-stick# umount -lf $(mount | awk '/shtf-stick/ { print $3 }') root@host:~/shtf-stick# rm chroot/root/.bash_history ===== Create filesystem & boot config ===== root@host:~/shtf-stick# mkdir -p ./{scratch,image/live} && \ mksquashfs chroot image/live/filesystem.squashfs -e boot Parallel mksquashfs: Using 1 processor Creating 4.0 filesystem on image/live/filesystem.squashfs, block size 131072. [=========================================================================================================================/] 25507/25507 100% Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 131072 compressed data, compressed metadata, compressed fragments, compressed xattrs duplicates are removed Filesystem size 305495.00 Kbytes (298.33 Mbytes) 39.71% of uncompressed filesystem size (769303.94 Kbytes) Inode table size 311570 bytes (304.27 Kbytes) 29.08% of uncompressed inode table size (1071399 bytes) Directory table size 300335 bytes (293.30 Kbytes) 42.66% of uncompressed directory table size (703968 bytes) Number of duplicate files found 809 Number of inodes 30836 Number of files 21710 Number of fragments 2182 Number of symbolic links 6003 Number of device nodes 8 Number of fifo nodes 0 Number of socket nodes 0 Number of directories 3115 Number of ids (unique uids + gids) 10 Number of uids 2 root (0) systemd-timesync (100) Number of gids 9 root (0) shadow (42) utmp (43) rtkit (109) tty (5) systemd-journal (101) staff (50) adm (4) mail (8) root@host:~/shtf-stick# root@host:~/shtf-stick# cp chroot/boot/vmlinuz-* image/vmlinuz && \ cp chroot/boot/initrd.img-* image/initrd root@host:~/shtf-stick# cat <<'EOF' > ./scratch/grub.cfg search --set=root --file /DEBIAN_CUSTOM insmod all_video set default="0" set timeout=30 menuentry "SHTF Live Stick" { linux /vmlinuz boot=live noquiet nomodeset initrd /initrd } EOF root@host:~/shtf-stick# root@host:~/shtf-stick# touch ./image/DEBIAN_CUSTOM ===== Prepare USB stick ===== root@host:~/shtf-stick# export DEVICE=/dev/sdc root@host:~/shtf-stick# mkdir -p /mnt/{usb,efi} ==== Create GPT & MBR partition tables (skip for updating) ==== root@host:~/shtf-stick# dd if=/dev/zero of=${DEVICE} bs=1k count=100 100+0 records in 100+0 records out 102400 bytes (102 kB) copied, 1.5086 s, 67.9 kB/s root@host:~/shtf-stick# parted --script ${DEVICE} \ mklabel gpt \ mkpart primary fat32 2048s 4095s \ name 1 BIOS \ set 1 bios_grub on \ mkpart ESP fat32 4096s 413695s \ name 2 EFI \ set 2 esp on \ mkpart primary fat32 413696s 100% \ name 3 LINUX \ set 3 msftdata on root@host:~/shtf-stick# gdisk ${DEVICE} << EOF r # recovery and transformation options h # make hybrid MBR 1 2 3 # partition numbers for hybrid MBR N # do not place EFI GPT (0xEE) partition first in MBR EF # MBR hex code N # do not set bootable flag EF # MBR hex code N # do not set bootable flag 83 # MBR hex code Y # set the bootable flag x # extra functionality menu h # recompute CHS values in protective/hybrid MBR w # write table to disk and exit Y # confirm changes EOF ==== Create filesystems (skip for updating) ==== root@host:~/shtf-stick# mkfs.vfat -F32 ${DEVICE}2 && mkfs.vfat -F32 ${DEVICE}3 ==== Create & mount filesystems ==== root@host:~/shtf-stick# mount ${DEVICE}2 /mnt/efi && mount ${DEVICE}3 /mnt/usb ==== Install grub for UEFI and BIOS ==== root@host:~/shtf-stick# grub-install \ --target=x86_64-efi \ --efi-directory=/mnt/efi \ --boot-directory=/mnt/usb/boot \ --removable \ --recheck root@host:~/shtf-stick# grub-install \ --target=i386-pc \ --boot-directory=/mnt/usb/boot \ --recheck \ ${DEVICE} root@host:~/shtf-stick# ===== Create USB Stick ===== root@host:~/shtf-stick# mkdir -p /mnt/usb/{boot/grub,live} && \ cp -ar ./image/* /mnt/usb/ && \ cp -a ./scratch/grub.cfg /mnt/usb/boot/grub/grub.cfg && \ umount /mnt/{usb,efi} Source: [[https://willhaley.com/blog/custom-debian-live-environment/]] {{tag>kb linux shtf usb-stick}}