Debian - Modify Live CD / USB and add SSH login on boot

How to modify a (Debian) Live CD ISO and enable SSH login

The easiest way to modify an ISO would have been to open the file like a compressed zip file, edit the appropriate files and  then put it back.

But this is not possible, because the ISO file structure is a read-only system and in there is a squashfs file system containing the destination file system also in the need of re-creation.

So if you want to modify something on an ISO built this way, then you will have to extract the ISO, then extract the squashfs file system, do your edits, recreate the squashfs and then recreate the ISO.

Also add that the ISO needs to be bootable.

Here follows instructions how to do that.

# downloading the ISO the regular way you like

# install required software:
sudo apt-get install genisoimage p7zip-full squashfs-tools

# extract the ISO:
7z x <iso_file>.iso

# a folder is new created with contents of the ISO file. Find the name of the folder:

ls -la

# go to the folder that contain the ISO and find the filesystem.squashfs file:

cd <folder with ISO contents>

find -t file|grep "filesystem\.squashfs"

# filesystem.squashfs is sometimes in live folder
cd live

# make a working directory
mkdir workdir

mv filesystem.squashfs workdir

cd workdir

# extract squashfs file (reduce CPU usage to lower the temperature)
unsquashfs -processors 1 filesystem.squashfs

# remove the old filesystem.squashfs file:
# NOTE: it will disturb the re-creation if kept, remove it
rm filesystem.squashfs

# the contents of the squashfs is in squashfs-root folder, go there and edit
cd squashfs-root/etc/ssh/

# open sshd_config - replace vi with the editor you like
vi sshd_config

# enable ssh root login
PermitRootLogin yes
PasswordAuthentication yes

# remake the squashfs	filesystem out of the squashfs-root folder:
mksquashfs squashfs-root filesystem.squashfs -b 1024k -comp xz -Xbcj x86 -e boot -processors 1

# beware: the above command runs the CPU very hot, set the processor usage wisely

mv filesystem.squashfs

cd ..

rm -rf workdir

# move out until you are there at the same level as the original .iso file, repeat until there:
cd .. 

# generate the new ISO image
genisoimage -r -V "Label Of ISO" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/ -no-emul-boot -boot-load-size 4 -boot-info-table -o <isofile>.iso <folder with ISO contents>

Test in virtual machine using qemu

# to test it using qemu:

apt-get install qemu

qemu-system-x86_64 -boot d -cdrom <new iso name>.iso -m 512 -net user,hostfwd=tcp::10022-:22 -net nic


Thanks goes to the following:

This is a personal note. Last updated: 2017-09-15 02:17:30.


Don't forget to pay my friend a visit too. Joakim