AUTHOR: Alexander E. Patrakov , Sylvie Migneault DATE: 2007-08-28 LICENSE: GNU Free Documentation License Version 1.2 SYNOPSIS: lfscd-remastering-HOWTO, for LFS LiveCD version 6.3 DESCRIPTION: This is a guide that shows you how to remaster LFS LiveCD 6.3 PREREQUISITES: LFS LiveCD 6.3 For LFS LiveCD 6.1-x, see the old "lfscd-remastering-howto-6.1.txt" hint by Sylvie Migneault. For LFS LiveCD 6.1.1-x, the old hint should work if one globally replaces LFS_CD with lfslivecd-VERSION, e.g. lfslivecd-x86-6.1.1-3. For LFS LiveCD 6.2-x, see the old "lfscd-remastering-howto-6.2.txt" hint. HINT: You will need: * Any Linux system with loop device, CD-ROM and ISO9660 filesystem support. * 3 GB of free hard disk space on one partition. This hint uses the $WORK environment variable as a name of a directory on that partition. E.g.: export WORK=/mnt/lfslivecd The LiveCD uses the ISO9660 filesystem with Linux-specific transparent decompression extension. On that filesystem, there are the following files: boot/* root.ext2 The boot directory contains the Linux kernel, the initramfs image and the bootloader. The actual root filesystem (ext2) is in the root.ext2 file. In order to remaster the CD, you have to install the following packages: cdrtools-2.01: see the BLFS book zisofs-tools-1.0.6: Download from http://www.kernel.org/pub/linux/utils/fs/zisofs/ Build with ./configure --prefix=/usr && make && make install Mount the CD: mount /media/cdrom Look at the root.ext2 file size: ls -l /media/cdrom/root.ext2 If it is approximately 1.5 GB, the kernel uncompresses the CD for you. In this case, you can copy the file to your hard disk as usual: cp /media/cdrom/root.ext2 $WORK/root.ext2 If it is only 500 MB, you have to rebuild your kernel with ZISOFS support, or uncompress this file manually: mkzftree -u -F /media/cdrom/root.ext2 $WORK/root.ext2 In either case, you end up with a $WORK/root.ext2 file that is 1.5 GB in size. This may or may not be sufficient for your remastered CD (or DVD) filesystem. If you want, you can resize the file with the resize2fs program from e2fsprogs version >= 1.39. Earlier versions of e2fsprogs cannot resize filesystem images directly. Mounting the filesystem image is achieved with a loop device: mkdir $WORK/root mount -o loop $WORK/root.ext2 $WORK/root It is a good idea to create and bind-mount a temporary directory, in order to preserve as many zeroed sectors as possible: mkdir $WORK/build $WORK/root/build mount --bind $WORK/build $WORK/root/build Mount other directories necessary for chrooting: mount -t proc proc $WORK/root/proc mount -t sysfs sysfs $WORK/root/sys mount -t devpts devpts $WORK/root/dev/pts mount -t tmpfs tmpfs $WORK/root/dev/shm Note: contrary to the instructions in the LFS book, tmpfs is not mounted on $WORK/root/dev. This is because all the necessary devices are already created as static nodes. Copy the DNS configuration into the chroot: cp /etc/resolv.conf $WORK/root/etc/resolv.conf Chroot to the filesystem: chroot $WORK/root In the chroot, change the current directory to /build, and install any additional packages you want. Modify other files as necessary. Check out the initramfs files: svn co svn://svn.linuxfromscratch.org/livecd/trunk/packages/initramfs Remove the "include $(ROOT)/scripts/functions" and "cp initramfs_data.cpio.gz /boot/isolinux/initramfs_data.cpio.gz" lines from the Makefile. Generate the initramfs image for your CD: For x86: make compile-stage2 VERSION="x86-6.3-custom" LINKER=ld-linux.so.2 For x86_64: make compile-stage2 VERSION="x86_64-6.3-custom" \ LINKER=ld-linux-x86-64.so.2 64bit=true (you can replace the "6.3-custom" with your own string). This produces the initramfs_data.cpio.gz file in the current directory. Copy it to /build: cp initramfs_data.cpio.gz /build Exit from the chroot and clean up the mounts: exit umount $WORK/root/dev/shm umount $WORK/root/dev/pts umount $WORK/root/sys umount $WORK/root/proc umount $WORK/root/build rmdir $WORK/root/build Clean up bash history and DNS configuration: rm $WORK/root/root/.bash_history rm $WORK/root/etc/resolv.conf You may also want to remove other history files. If you, by mistake, created and removed some files, the sectors previously occupied by those files begin to contain non-zero data. Such sectors are useless, but they don't compress well. Zero them out: dd if=/dev/zero of=$WORK/root/zeroes This command will print a message that the disk is full. This is not an error. Then, remove the file that fills the filesystem: rm $WORK/root/zeroes Now you can unmount the root.ext2 file: umount $WORK/root sync The "sync" command is needed due to a bug in the loop driver in some kernels that leads to a filesystem with errors otherwise. Now make the directory structure for your LiveCD: mkdir $WORK/iso Copy the directory structure from the original LiveCD: cp -r /media/cdrom/*/ $WORK/iso Replace the stock initramfs image with your own: cp $WORK/build/initramfs_data.cpio.gz \ $WORK/iso/boot/isolinux/initramfs_data.cpio.gz Recompress the root.ext2 file: mkzftree -F $WORK/root.ext2 $WORK/iso/root.ext2 Recreate the CD image (the string avter "lfslivecd-" must be the same as you used when creating the initramfs): cd $WORK/iso ; mkisofs -z -R -l --allow-leading-dots -D -o \ ../lfslivecd-x86-6.3-custom.iso -b boot/isolinux/isolinux.bin \ -c boot/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table \ -V "lfslivecd-x86-6.3-custom" ./ Burn and test. Have a fun. ACKNOWLEDGEMENTS: The team of "Linux From Scratch" and all users. Sylvie Migneault for the initial hint. All users wich contribute at the OpenSource project. :-) CHANGELOG: [2005-11-07] * Initial hint by Sylvie Migneault [2006-08-06] * Updated to LFS LiveCD based on device mapper (6.2-pre4 and later) [2007-06-11] * Updated for 6.3-pre2 [2007-08-28] * Updated for the final 6.3 version