Difference between revisions of "Building a Live CD"

From ArchWiki
Jump to: navigation, search
Line 8: Line 8:
 
  # pacman -S cdrtools
 
  # pacman -S cdrtools
 
  # pacman -S e2fsprogs
 
  # pacman -S e2fsprogs
#. Free hard disk space:
+
# Free hard disk space:
 
* 1 fresh partition to install the distro.
 
* 1 fresh partition to install the distro.
 
* 1 folder in your active partition to copy the distro to be put on the CD.
 
* 1 folder in your active partition to copy the distro to be put on the CD.
#. A CD-RW to test burning various images and a CD burner.
+
# A CD-RW to test burning various images and a CD burner.
#. Install CD burning package (if you don't know what package to install, try "k3b").
+
# Install CD burning package (if you don't know what package to install, try "k3b").
 
  # pacman -S k3b
 
  # pacman -S k3b
  
Line 24: Line 24:
 
'''Hint:'''For test purpose, to check for errors in the booting process, in your active partition mount the new partition and edit <tt>/etc/rc.local</tt> with the following lines to pause before login:
 
'''Hint:'''For test purpose, to check for errors in the booting process, in your active partition mount the new partition and edit <tt>/etc/rc.local</tt> with the following lines to pause before login:
  
  echo \"Press any key to continue...\"
+
  echo "Press any key to continue..."
 
  read KEY
 
  read KEY
  
 
'''NOTE:''' Don't forget to remove the pause!!
 
'''NOTE:''' Don't forget to remove the pause!!
  
In your active partition, in <tt>/root</tt> make one folder \"''mylivecd''\" and two sub-folders: \"''isolinux''\" and \"''system''\" (any names can be used).
+
In your active partition, in <tt>/root</tt> make one folder "''mylivecd''" and two sub-folders: "''isolinux''" and "''system''" (any names can be used).
  
 
  # cd /root
 
  # cd /root
Line 39: Line 39:
 
==== Install isolinux. Copy it from an existing live CD.====
 
==== Install isolinux. Copy it from an existing live CD.====
  
# Download \"''isolinux.bin''\" and \"''boot.cat''\" to <tt>/root/mylivecd/isolinux/</tt> :
+
# Download "''isolinux.bin''" and "''boot.cat''" to <tt>/root/mylivecd/isolinux/</tt> :
 
http://amlug.bliss-solutions.org/live-cd/distfiles/0.5.1/isolinux/
 
http://amlug.bliss-solutions.org/live-cd/distfiles/0.5.1/isolinux/
# Create boot message \"''boot.msg''\" (text file) and include a short description about the live CD. Save the file in <tt>/root/mylivecd/isolinux/</tt>. Copy this text to <tt>boot.msg</tt>:
+
# Create boot message "''boot.msg''" (text file) and include a short description about the live CD. Save the file in <tt>/root/mylivecd/isolinux/</tt>. Copy this text to <tt>boot.msg</tt>:
 
  This is a Live CD test ver. 0.1.
 
  This is a Live CD test ver. 0.1.
 
  F1 - boot message
 
  F1 - boot message
Line 47: Line 47:
 
    
 
    
 
   Press Enter
 
   Press Enter
#. Create \"''isolinux.cfg''\" (text file) and include the following text. Save the file in <tt>/root/mylivecd/isolinux/</tt>
+
# Create "''isolinux.cfg''" (text file) and include the following text. Save the file in <tt>/root/mylivecd/isolinux/</tt>
 
  prompt 1
 
  prompt 1
 
  timeout 0
 
  timeout 0
Line 53: Line 53:
 
  F1 boot.msg
 
  F1 boot.msg
 
  F2 package.txt
 
  F2 package.txt
  default vmlinuz initrd<code>miniroot.gz init</code>/sbin/init ramdisk''size<code>100000 load''ramdisk</code>1 prompt_ramdisk<code>0 vga</code>788 root=/dev/ram0
+
  default vmlinuz initrd=miniroot.gz init=/sbin/init ramdisk_size=100000 load_ramdisk=1 prompt_ramdisk=0 vga=788 root=/dev/ram0
  
 
==== Build one miniroot image ====
 
==== Build one miniroot image ====
Line 61: Line 61:
 
http://amlug.bliss-solutions.org/live-cd/distfiles/0.5.1/miniroot/init/sbin/
 
http://amlug.bliss-solutions.org/live-cd/distfiles/0.5.1/miniroot/init/sbin/
  
# Create \"''miniroot''\" (text file) in <tt>/root/mylivecd</tt> with Ext2 filesystem. The image size depends how much stuff you plan to include. In this sample we will make the image 15.8MB but its recommended to make the image as small as possible. When you are ready, mount the image in <tt>/mnt/xxx</tt> (here we mount in <tt>/mnt/image</tt>).
+
# Create "''miniroot''" (text file) in <tt>/root/mylivecd</tt> with Ext2 filesystem. The image size depends how much stuff you plan to include. In this sample we will make the image 15.8MB but its recommended to make the image as small as possible. When you are ready, mount the image in <tt>/mnt/xxx</tt> (here we mount in <tt>/mnt/image</tt>).
 
  # cd /root/mylivecd
 
  # cd /root/mylivecd
 
  # touch miniroot
 
  # touch miniroot
  # mkfs.ext2 miniroot 15840 (press \"y\" for each question)
+
  # mkfs.ext2 miniroot 15840 (press "y" for each question)
 
  # mkdir /mnt/image
 
  # mkdir /mnt/image
 
  # mount -t auto -o loop miniroot /mnt/image
 
  # mount -t auto -o loop miniroot /mnt/image
 
  # rm -R /mnt/image/lost+found
 
  # rm -R /mnt/image/lost+found
 
'''NOTE:''' If you want to resize, run the following codes (e.g. to 11.5MB):
 
'''NOTE:''' If you want to resize, run the following codes (e.g. to 11.5MB):
  # e2fsck -f miniroot (press \"y\" for /lost+found not found.  Create<y>?)
+
  # e2fsck -f miniroot (press "y" for /lost+found not found.  Create<y>?)
 
  # resize2fs miniroot 11520
 
  # resize2fs miniroot 11520
 
# Mount the new partition (e.g. <tt>/dev/hda3</tt>). Copy the below folders and files from the new partition to <tt>/mnt/image</tt> (use <tt>cp -Ra</tt> to maintain the file permissions).
 
# Mount the new partition (e.g. <tt>/dev/hda3</tt>). Copy the below folders and files from the new partition to <tt>/mnt/image</tt> (use <tt>cp -Ra</tt> to maintain the file permissions).
Line 117: Line 117:
 
  /dev/floppy/0          /mnt/floppy  auto      user,rw,noauto,unhide    0      0
 
  /dev/floppy/0          /mnt/floppy  auto      user,rw,noauto,unhide    0      0
 
  /dev/cdroms/cdrom0    /mnt/cdrom  iso9660  ro,user,noauto,unhide  0      0
 
  /dev/cdroms/cdrom0    /mnt/cdrom  iso9660  ro,user,noauto,unhide  0      0
# Add the following line in <tt>rc.sysinit</tt> (after  line: <tt>stat_busy \"Mounting Local Filesystems\"</tt>) in <tt>/mnt/image/etc/</tt>. This enables reading files from the CD's /system folder.
+
# Add the following line in <tt>rc.sysinit</tt> (after  line: <tt>stat_busy "Mounting Local Filesystems"</tt>) in <tt>/mnt/image/etc/</tt>. This enables reading files from the CD's /system folder.
 
  /bin/mount /dev/cdroms/cdrom0 /mnt/cdrom -o ro -t iso9660
 
  /bin/mount /dev/cdroms/cdrom0 /mnt/cdrom -o ro -t iso9660
 
# Compress the miniroot and move miniroot.gz to /root/mylivecd/isoliux/
 
# Compress the miniroot and move miniroot.gz to /root/mylivecd/isoliux/
Line 124: Line 124:
 
  # gzip -c miniroot >> miniroot.gz
 
  # gzip -c miniroot >> miniroot.gz
 
  # mv miniroot.gz isolinux/
 
  # mv miniroot.gz isolinux/
# Before compiling iso, move the <tt>/root/mylivecd/miniroot</tt> to a safe place. Make  a temporary folder to put the iso image (not within <tt>/mylivecd</tt>). Run the following code (don't miss the \".\" at the end of line):
+
# Before compiling iso, move the <tt>/root/mylivecd/miniroot</tt> to a safe place. Make  a temporary folder to put the iso image (not within <tt>/mylivecd</tt>). Run the following code (don't miss the "." at the end of line):
 
  # cd /root/mylivecd
 
  # cd /root/mylivecd
 
  # mkdir /root/isotmp
 
  # mkdir /root/isotmp
 
# Make the ISO:
 
# Make the ISO:
  mkisofs -o /root/isotmp/test-livecd-0.1.iso -R -V \"Test 0.1\" -T -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -A \"Test Live CD 0.1\" .
+
  mkisofs -o /root/isotmp/test-livecd-0.1.iso -R -V "Test 0.1" \
 +
-T -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot \
 +
-boot-load-size 4 -boot-info-table -A "Test Live CD 0.1" .
  
 
==== Conclusion ====
 
==== Conclusion ====

Revision as of 22:04, 23 August 2005


Motivation - Why?

To have a bootable version of Arch Linux running totally off a CD, is useful in many ways. It can be made to rescue your HD system, test new machines / hardwares if Linux compatible, keep an updated installer with latest packages, or make a demo CD to show your projects, and much more.

Before we start - What you'll need

  1. To create an iso, format a filesystem, and to resize an image download "cdrtools" and "e2fsprogs" packages.
# pacman -S cdrtools
# pacman -S e2fsprogs
  1. Free hard disk space:
  • 1 fresh partition to install the distro.
  • 1 folder in your active partition to copy the distro to be put on the CD.
  1. A CD-RW to test burning various images and a CD burner.
  2. Install CD burning package (if you don't know what package to install, try "k3b").
# pacman -S k3b

Details

As an example, here we are creating a mini Arch Linux live CD (110MB). It is based on packages installed from Arch Linux's CD installer ver. 0.5.

Boot with Arch Linux CD installer and install the base packages

When the packages are installed, install the kernel but don't install LILO or Grub. You can also copy your own kernel image (/boot/vmlinuz), and related modules (/lib/modules/2.x.x) from your active partition. To boot the new install, configure lilo.conf or grub in your active partition.

Hint:For test purpose, to check for errors in the booting process, in your active partition mount the new partition and edit /etc/rc.local with the following lines to pause before login:

echo "Press any key to continue..."
read KEY

NOTE: Don't forget to remove the pause!!

In your active partition, in /root make one folder "mylivecd" and two sub-folders: "isolinux" and "system" (any names can be used).

# cd /root
# mkdir mylivecd
# cd mylivecd
# mkdir isolinux
# mkdir system

Install isolinux. Copy it from an existing live CD.

  1. Download "isolinux.bin" and "boot.cat" to /root/mylivecd/isolinux/ :

http://amlug.bliss-solutions.org/live-cd/distfiles/0.5.1/isolinux/

  1. Create boot message "boot.msg" (text file) and include a short description about the live CD. Save the file in /root/mylivecd/isolinux/. Copy this text to boot.msg:
This is a Live CD test ver. 0.1.
F1 - boot message
F2 - package list
 
 Press Enter
  1. Create "isolinux.cfg" (text file) and include the following text. Save the file in /root/mylivecd/isolinux/
prompt 1
timeout 0
display boot.msg
F1 boot.msg
F2 package.txt
default vmlinuz initrd=miniroot.gz init=/sbin/init ramdisk_size=100000 load_ramdisk=1 prompt_ramdisk=0 vga=788 root=/dev/ram0

Build one miniroot image

Miniroot is loaded in RAM during booting and operates same as in HD. Use Ext2 filesystem.

NOTE: Miniroot setup depends on /etc/inittab, /etc/rc.sysinit, /etc/rc.multi, and /etc/rc.shutdown. Before building the miniroot image, study these files and plan how they can be modified whenever is needed. In /sbin the following files are required:
http://amlug.bliss-solutions.org/live-cd/distfiles/0.5.1/miniroot/init/sbin/

  1. Create "miniroot" (text file) in /root/mylivecd with Ext2 filesystem. The image size depends how much stuff you plan to include. In this sample we will make the image 15.8MB but its recommended to make the image as small as possible. When you are ready, mount the image in /mnt/xxx (here we mount in /mnt/image).
# cd /root/mylivecd
# touch miniroot
# mkfs.ext2 miniroot 15840 (press "y" for each question)
# mkdir /mnt/image
# mount -t auto -o loop miniroot /mnt/image
# rm -R /mnt/image/lost+found

NOTE: If you want to resize, run the following codes (e.g. to 11.5MB):

# e2fsck -f miniroot (press "y" for /lost+found not found.  Create<y>?)
# resize2fs miniroot 11520
  1. Mount the new partition (e.g. /dev/hda3). Copy the below folders and files from the new partition to /mnt/image (use cp -Ra to maintain the file permissions).
# mkdir /mnt/tmp
# mount /dev/hda3 /mnt/tmp
# cp -Ra /mnt/tmp/bin /mnt/image/
# cp -Ra /mnt/tmp/etc /mnt/image/
# cp -Ra /mnt/tmp/sbin /mnt/image/
# cp -Ra /mnt/tmp/tmp /mnt/image/
# cp -Ra /mnt/tmp/var /mnt/image/
  1. Copy /usr and /lib/modules/2.x.x/, /lib/modules/evms/, /lib/modules/security/ to /root/mylivecd/system/ :
# cp -Ra /mnt/tmp/usr /root/mylivecd/system/
# cp -Ra /mnt/tmp/opt /root/mylivecd/system/
# mkdir /root/mylivecd/system/lib
# cp -Ra /mnt/tmp/lib/modules /root/mylivecd/system/lib/
# cp -Ra /mnt/tmp/lib/evms /root/mylivecd/system/lib/
# cp -Ra /mnt/tmp/lib/security /root/mylivecd/system/lib/

NOTE: If /bin and /sbin are too big you may consider using busybox: http://www.busybox.net/ OR temporary folders, which will be removed or renamed at the boot by codes in /rc.sysinit. Here is an example: http://amlug.bliss-solutions.org/live-cd/distfiles/0.5.1/miniroot/init/sbin/rc.sysinit

  1. Create the following folders in /mnt/image and copy /mnt/tmp/lib files to /mnt/image/lib/ (don't copy /mnt/tmp/lib/module, ~/lib/evms and ~/lib/security):
# cd /mnt/image
# mkdir dev
# mkdir home
# mkdir lib
# mkdir mnt/cdrom
# mkdir mnt/floppy
# mkdir root
# mkdir proc
# mkdir lib/modules
# cd /mnt/tmp/lib/
# cp -a l* /mnt/image/lib/
  1. With the folders /usr and /opt create links in /mnt/image/. Also link the /system/lib/modules/2.x.x/. Copy kernel image to /root/mylivecd/isolinux/:
# cd /mnt/image
# ln -sf /mnt/cdrom/system/usr usr
# ln -sf /mnt/cdrom/system/opt opt
# cd /mnt/image/lib/modules/
# ln -sf /mnt/cdrom/system/lib/modules/2.4.22 2.4.22
# cd /mnt/image/lib/
# ln -sf /mnt/cdrom/system/lib/evms evms
# ln -sf /mnt/cdrom/system/lib/security security
# cp /mnt/tmp/boot/vmlinuz /root/mylivecd/isolinux/
  1. Edit /mnt/image/etc/fstab as shown here:
/dev/root      /      ext2    defaults 0 0
none           /proc  proc    defaults 0 0
/dev/floppy/0          /mnt/floppy   auto      user,rw,noauto,unhide     0      0
/dev/cdroms/cdrom0     /mnt/cdrom   iso9660   ro,user,noauto,unhide  0      0
  1. Add the following line in rc.sysinit (after line: stat_busy "Mounting Local Filesystems") in /mnt/image/etc/. This enables reading files from the CD's /system folder.
/bin/mount /dev/cdroms/cdrom0 /mnt/cdrom -o ro -t iso9660
  1. Compress the miniroot and move miniroot.gz to /root/mylivecd/isoliux/
# cd /root/mylivecd/
# umount /mnt/image
# gzip -c miniroot >> miniroot.gz
# mv miniroot.gz isolinux/
  1. Before compiling iso, move the /root/mylivecd/miniroot to a safe place. Make a temporary folder to put the iso image (not within /mylivecd). Run the following code (don't miss the "." at the end of line):
# cd /root/mylivecd
# mkdir /root/isotmp
  1. Make the ISO:
mkisofs -o /root/isotmp/test-livecd-0.1.iso -R -V "Test 0.1" \
-T -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot \
-boot-load-size 4 -boot-info-table -A "Test Live CD 0.1" .

Conclusion

We hope this document gets you started. Any comments or addition, please either edit the content or post reply (requires to register). Good luck!


Additional Info:

Codes, content of AMLUG Live CD, and how to compress: http://www.amlug.net/new-projects/forum/index.php?showforum=23

How other distros build live CDs: http://www.babytux.org/articles/howto/how2livecd.php