Create a custom distro: building a minimal image

1917

Building a minimal image

With lessons learned from previous chapters here we go again with the first step for building a minimal image of our newly created Linux distribution, it ain’t that difficult and it helps to understand the Slax customization process. In this article we’ll build our own slax rebuild with the minimal footprint, path and configurations are taken from the same virtual machine and from previous path locations.

Path

As already set up under the “target” directory there’s our environment, if you’ve followed previous articles you may want a copy of our previous tests:

 

root@slax:~/target# cp -R image image.full
root@slax:~/target# ls -la
total 20
drwxr-xr-x 5 root root 4096 Jun 17 14:02 ./
drwxr-xr-x 14 root root 4096 Jun 8 18:33 ../
drwxr-xr-x 4 root root 4096 May 30 17:35 image/
drwxr-xr-x 4 root root 4096 Jun 17 14:02 image.full/
drwxr-xr-x 2 root root 4096 May 30 17:44 iso/

Deleting unneeded packages

 

Slax customization process is really easy, as you can see you’ve two directories:

 

root@slax:~/target/image# ls -la
total 16
drwxr-xr-x 4 root root 4096 May 30 17:35 ./
drwxr-xr-x 5 root root 4096 Jun 17 14:02 ../
dr-xr-xr-x 6 root root 4096 May 30 17:35 boot/
dr-xr-xr-x 7 root root 4096 May 30 17:35 slax/

inside the boot directory there’re files related to OS boot as usual, you may boot it from a CD/HD/USB Stick, no matter about the file system, SLAX supports Linux/Unix file systems (EXT2/3/…, XFS, JFS, …) and Windows FAT16/32 as well, you only need to use the right tool to install the boot loader in the MBR (with syslinux or lilo) as previously explained here
Inside slax directory there’re a lot of interesting things:

root@slax:~/target/image/slax# ls -la
total 136
dr-xr-xr-x 7 root root 4096 May 30 17:35 ./
drwxr-xr-x 4 root root 4096 May 30 17:35 ../
-rw-r--r-- 1 root root 17993 May 30 17:35 GNU_GPL
-r--r--r-- 1 root root 459 May 30 17:35 LICENSE
drwxr-xr-x 2 root root 4096 May 30 17:35 base/
-rw-r--r-- 1 root root 35016 May 30 17:35 changelog.txt
-rw-r--r-- 1 root root 4780 May 30 17:35 cheatcodes.txt
-rw-r--r-- 1 root root 437 May 30 17:35 livecd.sgn
-rwxr-xr-x 1 root root 658 May 30 17:35 make_iso.bat*
-rwxr-xr-x 1 root root 932 May 30 17:35 make_iso.sh*
dr-xr-xr-x 2 root root 4096 Jun 17 14:03 modules/
drwxr-xr-x 2 root root 4096 May 30 17:35 optional/
-rw-r--r-- 1 root root 959 May 30 17:35 requirements.txt
drwxr-xr-x 2 root root 4096 May 30 17:35 rootcopy/
-rw-r--r-- 1 root root 21584 May 30 17:35 slaxsave.zip
drwxr-xr-x 3 root root 4096 May 30 17:35 tools/

LICENSE, GNU_GPL, *.txt files are license files and changelogs related to this system, leave them there to keep the GPL license. “livecd.sgn” is a signature file created from slax to identify itself, leave it where it is or your system won’t boot (a script checks it during the boot process). “make_iso*” files are not necessary for our new system, we do customization on slax from a build machine so you may delete them without troubles. slaxsave.zip is not needed now, it’s just a bunch of compressed xfs filesystem images used when you do customizations with loop devices, you can delete it.
Now let’s analyze these directories:

base/

contains core modules for a slax boot, you may even leave it empty if you put your main modules into the “modules” directory

modules/

after the boot your system will load every module available inside this directory, you may even put core modules here, later on you’ll see something more about modules

optional/

if you want to load a particular module only when you want it and you don’t want to have it automatically loaded inside your system tree this is the place where you can put your own modules

rootcopy/

“/” root file system copy, you may add tweaks or customization scripts here, we’ll see this dir deeply later on

tools/

bash script, utilities and various customization tools used inside slax (module loading/unloading, creation, activation, …)

now inside ~/target/image/slax/modules directory remove everything except 1-001-core.lzm module, this is the core module with a basic system inside it, I always add even the SSHD module because I’d like to connect to my remote machines with ssh. SSHD module is really thin, just 4kb so it could be a pity to remove it from your machine, here’s the overall result:

root@slax:~/target/image/slax# ls -la modules/
total 49384
dr-xr-xr-x 2 root root 4096 Jun 17 14:03 ./
dr-xr-xr-x 7 root root 4096 May 30 17:35 ../
-rw-r--r-- 1 root root 50499584 May 30 17:35 1-001-core.lzm
-rw------- 1 root root 4096 May 30 17:35 618-sshd-activate.lzm
root@slax:~/target/image/slax# ls -la base/
total 8
drwxr-xr-x 2 root root 4096 May 30 17:35 ./
dr-xr-xr-x 7 root root 4096 May 30 17:35 ../
root@slax:~/target/image/slax# ls -la optional/
total 8
drwxr-xr-x 2 root root 4096 May 30 17:35 ./
dr-xr-xr-x 7 root root 4096 May 30 17:35 ../
root@slax:~/target/image/slax# ls -la rootcopy/
total 8
drwxr-xr-x 2 root root 4096 May 30 17:35 ./
dr-xr-xr-x 7 root root 4096 May 30 17:35 ../

as you can see there’re just the file 1-001-core.lzm and the 618-sshd-activate.lzm module, about 50Mb for everything. You may even remove sshd if you don’t want it. No matter about other directories, clean everything for a minimal image

Build it !

Now you can build your new minimal image with this command:

root@slax:~/target# /root/target/image/slax/make_iso.sh /root/target/iso/image.iso

or you can use the script called “make.iso” listed in my previous article (basically a wrapper of the above command), here’s the result

root@slax:~/target# ./make.iso
2.01.01a53 (i686-pc-linux-gnu)
Scanning ../.
Scanning .././boot
Scanning .././boot/dos
Scanning .././boot/isolinux
Excluded by match: .././boot/isolinux/isolinux.boot
Scanning .././boot/pxelinux.cfg
Scanning .././boot/pxelinux.cfg/web
Scanning .././boot/pxelinux.cfg/web/conf
Scanning .././boot/syslinux
Scanning .././slax
Scanning .././slax/base
Scanning .././slax/modules
Scanning .././slax/optional
Scanning .././slax/rootcopy
Scanning .././slax/tools
Scanning .././slax/tools/WIN
Writing: Initial Padblock Start Block 0
Done with: Initial Padblock Block(s) 16
Writing: Primary Volume Descriptor Start Block 16
Done with: Primary Volume Descriptor Block(s) 1
Writing: Eltorito Volume Descriptor Start Block 17
Size of boot image is 4 sectors -> No emulation
Done with: Eltorito Volume Descriptor Block(s) 1
Writing: Joliet Volume Descriptor Start Block 18
Done with: Joliet Volume Descriptor Block(s) 1
Writing: End Volume Descriptor Start Block 19
Done with: End Volume Descriptor Block(s) 1
Writing: Version block Start Block 20
Done with: Version block Block(s) 1
Writing: Path table Start Block 21
Done with: Path table Block(s) 4
Writing: Joliet path table Start Block 25
Done with: Joliet path table Block(s) 4
Writing: Directory tree Start Block 29
Done with: Directory tree Block(s) 17
Writing: Joliet directory tree Start Block 46
Done with: Joliet directory tree Block(s) 15
Writing: Directory tree cleanup Start Block 61
Done with: Directory tree cleanup Block(s) 0
Writing: Extension record Start Block 61
Done with: Extension record Block(s) 1
Writing: The File(s) Start Block 62
17.24% done, estimate finish Fri Jun 17 14:09:51 2011
34.41% done, estimate finish Fri Jun 17 14:09:51 2011
51.63% done, estimate finish Fri Jun 17 14:09:51 2011
68.80% done, estimate finish Fri Jun 17 14:09:51 2011
86.03% done, estimate finish Fri Jun 17 14:09:52 2011
Total translation table size: 2048
Total rockridge attributes bytes: 8867
Total directory bytes: 32768
Path table size(bytes): 208
Done with: The File(s) Block(s) 28862
Writing: Ending Padblock Start Block 28924
Done with: Ending Padblock Block(s) 150
Max brk space used 21000
29074 extents written (56 MB)

Now you’ve a new minimal slax build in less than 60Mb !

root@slax:~/target# ls -la iso/
total 58220
drwxr-xr-x 2 root root 4096 Jun 17 14:10 ./
drwxr-xr-x 5 root root 4096 Jun 17 14:08 ../
-rw-r--r-- 1 root root 59543552 Jun 17 20:00 image.iso

As usual feel free to comment or add your suggestion to the article if you need it

 

Previous Chapters

 

As usual let me know your thoughts and drop a note below if you want

Have fun
Ben