Showing posts with label building. Show all posts
Showing posts with label building. Show all posts
Monday, October 10, 2016
My Journey to building Linux From Scratch LFS system PART3
My Journey to building Linux From Scratch LFS system PART3
CHAPTER 3
Now that we have the bootable USB flash drive, we can continue now by creating a partition onto which we will install our LFS system.
According to the book, we create a linux native partition and a swap partition using either cfdisk or fdisk.
using fdisk, I created a 40GB primary partition and a 2GB swap partition.
Now we will create a file system on the newly created partition. According to
the book, we should create an ext3 file system using the E2fsprogs
utilities. Specifically mke2fs.
#mke2fs -jv /dev/sda1where:
sda1 is my first partition.
mke2fs - is a program that creates an ext2/ext3 filesystem
- the "-j" means the create the filesystem with an
Then we initialize our swap partition.
#mkswap /dev/sda2
where: /dev/sda2 is our swap partition
To check, type blkid at the prompt, there should be an entry about /dev/sda1
and /dev/sda2
To access the partition, we mount it at /mnt/lfs.
#export LFS=/mnt/lfs -sets a variable LFS equal to /mnt/lfs
#mkdir -pv $LFS -create a directory /mnt/lfs
-"-p" means parent, "-v" means verbose
#mount -v -t ext3 /dev/sda1 $LFS
-mount our first partition to /mnt/lfs
-meaning we can access our first partition via
/mnt/lfs
note: make sure that the partition is mounted without too many restrictions
e.g. nosuid,nodev or noatime options, by using mount command.
#mount
the /dev/sda1 line should not show (nosuid,nodev,noatime)
Enable the swap partition using the swapon command
#/sbin/swapon -v /dev/sda2
Now we can download the packages and patches needed to build the basic LFS system. But since we are using the livecd as our base system, we dont need to download the packages, we just copy the packages from the /lfs-sources/ directory of the livecd to our newly created partition.
We need to create first a directory where we will install the packages and the patches.
#mkdir -v $LFS/sources
then we make this directory writable and sticky. sticky means multiple user
have write permission but only the owner can delete a file within this
directory.
#chmod -v a+wt $LFS/sources
where: a+w - means all have write access
t - means sticky
Now we download, or in our case, copy all the contents of /lfs-sources
directory to $LFS/sources.
inside /lfs-sources directory:
root[ /lfs-sources ]# cp * $LFS/sources
where: cp - the copy command
After copying the files and patches:
CHAPTER 4 - Final preparations
According to the book, we will create a $LFS/tools directory. This directory
will contain the installed programs compiled in CHAPTER 5 to separate them from the programs compiled in CHAPTER 6. The programs compiled here are temporary tools only and will not be a part of the final LFS system.
as root:
#mkdir -v $LFS/tools
then we create a /tools symlink on the host system that will point to the
$LFS/tools directory we just created
#ln -sv $LFS/tools /
the command ln above creates a link between the two files. The target file is
$LFS/tools (/mnt/lfs/tools), with a link name that is the same as the target
file and is located at the / (root) directory. The -s means create a symbolic
(or soft) link. So from the command above a soft link with a name /tools is
created that is linked to the directory $LFS/tools (or /mnt/lfs/tools).
Then we add user/group both named lfs
#groupadd lfs
#useradd -s /bin/bash -g lfs -m -k /dev/null lfs
where: -s /bin/bash : makes bash the default shell for the user
-g lfs : adds user to the group lfs
-m : create a home directory for user lfs
-k /dev/null : the skeleton directory that contains the files and
directories to be copied to the home directory.
/dev/null contains nothing. The significance of -k
option is that if it is not specified the default
/etc/skel files and directories will be copied to the
home directory.
lfs : is the name of the user
then give lfs user a password
#passwd lfs
grant user lfs ownership of $LFS/tools and $LFS/sources directory
#chown -v lfs $LFS/tools
#chown -v lfs $LFS/sources
then we login as user lfs
#su - lfs
where: su : switch user
- : start a login shell as opposed to only switch to user
lfs : switch as user lfs
then we setup a clean working environment from which building the temporary lfs system is based.
while logged in as user create two startup files, .bash_profile and .bashrc, for the bash shell.
lfs [~]$cat > ~/.bash_profile <<"EOF"
exec env -i HOME=$HOME TERM=$TERM PS1=u:w$ bin/bash
EOF
where: exec env -i.. /bin/bash -
means replace the shell with a new one with an empty environment except the variables HOME,TERM and PS1
lfs [~]$ cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
path=/tools/bin;/bin;/usr/bin
export LFS LC_ALL PATH
EOF
then source the just created user profile:
lfs [~]$ source ~/.bash_profile
next: CHAPTER 5
Go to link download
Wednesday, August 17, 2016
My journey to building Linux From Scratch LFS system
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 dont promise anything as we build the system but the satisfaction of fulfilling our curiosity and educating ourselves in the process. So lets 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, were going to dissect the whys and the hows of the instructions to fully comprehend what is going on. If we are stuck on some instruction, were going to stop and take some time and continue
only if we truly comprehend what were 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. Thats 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 were 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.....
Go to link download
Subscribe to:
Posts (Atom)