====== 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}}