====== Create custom debian live usb-stick (stretch, amd64) ====== ===== Install necessary packages on the build system ===== root@host:~# apt-get install debootstrap syslinux isolinux squashfs-tools genisoimage memtest86+ rsync [ ... ] ===== Create directory structure & install base image ===== root@host:~# mkdir /root/shtf-stick && cd /root/shtf-stick root@host:~/shtf-stick# debootstrap --arch=amd64 --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-amd64 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 [ ... ] ===== 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 image/{live,isolinux} && \ 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/live/vmlinuz1 && \ cp chroot/boot/initrd.img-* image/live/initrd1 root@host:~/shtf-stick# cat > image/isolinux/isolinux.cfg << _EOF_ UI menu.c32 prompt 0 menu title The Shit Has Hit The Fan timeout 300 label Debian Live 4.9.0-3-amd64 menu label ^Debian Live 4.9.0-3-amd64 menu default kernel /live/vmlinuz1 append initrd=/live/initrd1 boot=live label memtest86+ menu label ^Memory Failure Detection (memtest86+) kernel /live/memtest _EOF_ root@host:~/shtf-stick# ===== Create CD image ===== root@host:~/shtf-stick# cp /usr/lib/ISOLINUX/isolinux.bin image/isolinux/ && \ cp /usr/lib/syslinux/modules/bios/menu.c32 image/isolinux/ && \ cp /usr/lib/syslinux/modules/bios/libmenu.c32 image/isolinux/ && \ cp /usr/lib/syslinux/modules/bios/libutil.c32 image/isolinux/ && \ cp /usr/lib/syslinux/modules/bios/ldlinux.c32 image/isolinux/ && \ cp /usr/share/misc/pci.ids image/isolinux/ && \ cp /boot/memtest86+.bin image/live/memtest && \ cd image && \ genisoimage -rational-rock -volid "SHTF" -cache-inodes -joliet -full-iso9660-filenames -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -output ../debian-shtf-$(date +%Y%m%d_%H%M).iso . && \ cd .. ===== Prepare USB stick ===== root@host:~/shtf-stick# export DEVICE=/dev/sdc 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# fdisk ${DEVICE} Welcome to fdisk (util-linux 2.25.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x374a220b. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-2005431, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-2005431, default 2005431): Created a new partition 1 of type 'Linux' and of size 978.2 MiB. Command (m for help): a Selected partition 1 The bootable flag on partition 1 is enabled now. Command (m for help): t Selected partition 1 Hex code (type L to list all codes): b If you have created or modified any DOS 6.x partitions, please see the fdisk documentation for additional information. Changed type of partition 'Linux' to 'W95 FAT32'. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. root@host:~/shtf-stick# mkdosfs -F 32 -I ${DEVICE}1 mkfs.fat 3.0.27 (2014-11-12) root@host:~/shtf-stick# ===== Create USB Stick ===== root@host:~/shtf-stick# export DEVICE=/dev/sdc root@host:~/shtf-stick# syslinux -i ${DEVICE}1 root@host:~/shtf-stick# dd if=/usr/lib/syslinux/mbr/mbr.bin of=${DEVICE} conv=notrunc bs=440 count=1 1+0 records in 1+0 records out 440 bytes (440 B) copied, 0.0564548 s, 7.8 kB/s root@host:~/shtf-stick# mkdir /mnt/usb; \ mount ${DEVICE}1 /mnt/usb root@host:~/shtf-stick# cp /usr/lib/syslinux/modules/bios/libutil.c32 /mnt/usb/ && \ cp /usr/lib/syslinux/modules/bios/libmenu.c32 /mnt/usb/ && \ cp /usr/lib/syslinux/modules/bios/menu.c32 /mnt/usb/ && \ cp /boot/memtest86+.bin /mnt/usb/memtest && \ cp image/isolinux/isolinux.cfg /mnt/usb/syslinux.cfg && \ cp /usr/share/misc/pci.ids /mnt/usb/ && \ rsync -rv image/live /mnt/usb/ && date +%Y%m%d_%H%M > /mnt/usb/CREATED && umount /mnt/usb/ sending incremental file list live/ live/filesystem.squashfs live/initrd1 live/vmlinuz1 sent 308,553,889 bytes received 77 bytes 88,158,276.00 bytes/sec total size is 308,478,319 speedup is 1.00 root@host:~/shtf-stick# Source: [[http://willhaley.com/blog/create-a-custom-debian-stretch-live-environment-ubuntu-17-zesty/]] {{tag>kb linux shtf usb-stick}}