Friday, June 26, 2015

My Journey to building Linux From Scratch (LFS) system PART2

cont. from part1


The book provides link for FAQ and some references. For FAQ, the link is
http://www.linuxfromscratch.org/faq/.

Since we will create our LFS system by-the-book, we are going to follow the
book chapter by chapter. Chapter 1 of the book just provides us with the
introduction, some information, references and prerequisites. The above
information are taken from chapter 1 of the book.


CHAPTER 2: Preparing the new partition.

In this chapter, it shows us the instruction in creating a partition for our
base system. In my case, I will be using the whole partition of my netbook onto which I will install my LFS system. BTW, in this journey I will be installing the system on an ACER Aspire One netbook. This netbook doesn't have a CD-ROM, hence the reason that I will be creating a bootable USB. The book states a primary partition and a swap partition is going to be created. It also states that a 1.3 GB partition (up to 2-3 GB) is enough as a primary partition.

To create a partition cfdisk or fdisk command is used, as per the book. This
means that we must be already inside our host system. For those that have a
CD-ROM drive just boot your computer using the liveCD. For those that don't
have, We need to create first our bootable USB.

At this time, I will be deviating first from the books' instruction to create my
bootable USB.

According to the live CD documentation, we should install first GRUB on our
flash drive. But no instruction is given on how to install GRUB on our flash
drive. Now the first stumbling block. But since we're here to learn, we will
going to find everything we need to know about GRUB. What is GRUB? GRUB means GRand Unified Bootloader. A bootloader is a software that first runs when the computer starts. According to GRUB's manual, there are two versions of grub, grub-legacy and grub2.

To install GRUB on our flash drive, we invoke the grub-install command. Now
this looks like we really need another linux system with grub already installed to install GRUB on our flash drive. In my case, I already have a working linux system and I use my present system, I use Kali Linux btw, to install GRUB in my flash drive. So to install GRUB:
   
    #grub-install --root-directory=/media/usb0 /dev/sdb

    where     /media/usb0 - is the mount point of my USB flash drive.
                   /dev/sdb - is the flash drive.
then create a grub.cfg file

    #grub-mkconfig  /media/usb0/boot/grub/grub.cfg

After installing grub, according to the liveCD documentation, we follow the
"BOOTING FROM ISO IMAGE" section of the documentation. It states that we copy the ISO image as a file into our drive and configure the boot loader to load "linux" as a kernel image and "initramfs_data.cpio.gz" as initrd.

"Store the ISO image of this CD as a file on a partition formatted with the
following filesystems: vfat, ntfs, ext2, ext3, ext4, jfs, reiserfs, reiserfs4,
xfs. Copy the /boot/isolinux/{linux,initramfs_data.cpio.gz} from your CD to the hard disk."

From the above instruction, we should format our flash drive with the above
mentioned filesystem and then copy the ISO image that we downloaded to the flash drive. Then after that we copy the
/boot/isolinux/{linux,initramfs_data.cpio.gz} files from the CD to our flash drive. The "hard disk" instruction above is applicable only if you want to boot from hard disk, since we are using our flash drive as a bootable device, we replace the hard disk with our flash drive.

Now to copy the files "linux, initramfs_data.cpio.gz" to our flash drive
we mount the ISO image. First we create a mount point and mount the ISO image to that mount point and then copy the aforementioned files.

 
#mkdir mount_here
#mount -o loop -t iso9660 lfslivecd.iso mount_here

where: mount_here is the mount point of our USB flash drive at the current working directory
then we can go the directory /boot/isolinux and copy the two aforementioned files to our flash drive.

After copying the ISO image and the two files, we configure the bootloader to load "linux" as the kernel image and "initramfs_data.cpio.gz" as initrd. 
From the same section above, we should pass the following as a kernel parameter.

rw root=iso:/dev/xxx:/path-to-livecd.iso rootfstype=fs_type rootdelay=20

where:     /dev/xxx - is the partition where we copy the lfslivecd.iso image
   
To configure our configuration file, we edit the created grub.cfg file to
something similar as below.

menuentry 'Linux From Scratch Live USB' {
    search --no-floppy --fs-uuid --set=root e0f3e26a-1d46-4478-9f1d- 635dd53ff488
    echo 'Loading Linux From Scratch...'
    linux     /linux rw root=iso:/dev/sdb1:/lfslivecd.iso rootfstype=ext2 rootdelay=20
    initrd    /initramfs_data.cpio.gz
}

where:    e0f3e26a-1d46-4478-9f1d-635dd53ff488 is the UUID of my USB flash                 drive.


Here is the screenshot when I boot my live USB LFS.






to be cont....







Tuesday, June 23, 2015

My journey to building Linux From Scratch (LFS) system

This will be a series of posts since I will start building Linux From Scratch (LFS) system from scratch. I will follow the by-the-book instruction from start to finish until I built my own LFS system. As I go through this journey, I invite/encourage anyone reading or care to read this blog, to follow along with the journey. Together we will create our own Linux system not because we want to "change the world" or something but to feel and see what its like to have our own linux distro. I also encourage you to document everything that we will be doing as what I am doing right now for future references. We are going to build the system because I hope that you like me are curious about how things work. I don't promise anything as we build the system but the satisfaction of fulfilling our curiosity and educating ourselves in the process. So let's go on building our own Linux From Scratch (LFS) system.



Tools:
    LFS live CD - to be created as a bootable USB
 
(note: according to the website the live CD is not anymore supported and  is not compatible with LFS 7.0 or later. from the same website, it contains the LFS book with 6.3 version. So I downloaded the said version of the book so that I can follow along its instructions.)

The reason that I am going to use the live CD is that it will serve as the base system from which my own LFS is built. A base linux system is needed to create your own LFS as stated on the website. By using the live CD, I eliminate the need for using a base system. We are going to follow the instructions by-the-book in building the system. But we are not going to follow it blindly, we're going to dissect the why's and the how's of the instructions to fully comprehend what is going on. If we are stuck on some instruction, we're going to stop and take some time and continue
only if we truly comprehend what we're doing. As I read somewhere, we have only 2 hrs of retention time of  continuous reading so we are not going to risk doing the next instruction without really comprehending the previous one. That's the reason we are doing this in the first place, to educate ourselves. So come and join me on the ride. Now on to reading the first parts of the book.

According to the book, the prerequisites are knowledge of shell commands and knowledge of installing linux software, and others. The prerequisite section also provide some links for those who have no knowledge of the above since they are needed as a minimum prerequisite. For the host system requirements, it list the softwares and applications needed for the system to have. Since we are going to use the live CD we are not going to have to download all the applications since they are included in the CD as stated by the website. There is a script from the book which asks us to run to check if the above applications are present in the system. Since we're going to use the live CD, we are not going to use that script or follow that instruction. But for the purposes of "getting our hands wet" here is the script in uncomplete form.

    $cat > version_check.sh << "EOF"
    #!/bin/bash
   
    bash --version | head -n1 | cut -d" " -f2-4
    .
    .
    .
    EOF

    bash version_check.sh


Explanation of the above command. The first command creates a file named version_check.sh and "EOF" signifies the end of the file if you type it at the last line. The #!/bin/bash indicates that it is a bash script. The command bash --version indicates that it will show the version of the bash command. The | means pipe the output to the command head. The head command means output the first parts of the file, the argument -n1 means output the first one line of that first part. The cut command means to remove sections of the line. The -d is the delimeter argument and -f means to select only these fields. So the command cut -d" " -f2-4 means cut the line starting from the second field up the fourth field(in this case words) with the space delimeter between them. The last command executes the script.



to be continued.....