Building LFS from Live CD Hint - Request for Comments

GN gnarvaja at gmail.com
Tue Aug 16 15:09:36 PDT 2005


As far as I remember, there is a subdirectory with an automated 
procedure to build LFS from the LiveCD. I think it was under /root 
somewhere (/root/nALFS ?)

I did it that way at least once, since then that PC broke down 
(hardware) and I didn't have time to retry it. I remember they were 
some minor issues, but nothing significant.

You may want to look there for information.

Regards,
G

On Tuesday 16 August 2005 14:56, Joseph M Dupre (AVAB Inc.) wrote:
> I have written a hint for building LFS using the live CD.  I
> request any feedback before I submit it to the hints administrator.
>
> - Joe
>
>
> *** PRELIMINARY *** PRELIMINARY *** PRELIMINARY ***
>
> AUTHOR: Joseph M. Dupré <dupre avab com>
>
> DATE: 2005-08-
>
> LICENSE: tbd
>
> SYNOPSIS: How to build a LFS system using the LFS live CD as your
> host OS.
>
> DESCRIPTION:
> This hint should guide you through the process of building a LFS
> system on a "new" computer, or one that does not have an existing
> Linux operating system installed.  You use the LFS live CD to boot
> the computer instead of loading a pre-packaged linux distribution
> like Debian or Red Hat.  This is the "cleanest" way to build a LFS
> sytem, since inconsistancies and idiosyncracies of various
> distributions are removed.
>
> ATTACHMENTS:
> [none]
>
> PREREQUISITES:
> The prerequisists are the same as that of LFS.  You will also need
> to have the LFS live CD for the version of LFS that you intend to
> build. I also assume that you know how to create and edit a text
> file with an editor, rather than using redirected cat or echo
> commands.  This is not a hint on using the live CD, so any problems
> you encounter using or booting your system with the live CD should
> be directed to the LFS live CD mailing list.
>
> HINT:
> Follow the procedures in the LFS book.  When something differs when
> using the live cd environment, it will be pointed below by chapter
> number.  When following the LFS book note the difference between
> the "back-tick" [ ` ] and the single quote [ ' ].  On a US keyboard
> the back-tick is on the key with the [ ~ ] and the single-quote is
> on the key with the [ " ].  Also, capitalization matters.  If you
> specify a configure or make option in the wrong case, you may not
> get any warning and the build may fail or exhibit problems later. 
> Think about what each command does before you hit the enter key. 
> If you don't understand what is happening, look it up using the man
> pages. I learned more about Linux building my first LFS system then
> I did in several years of administering Red Hat Linux systems.
>
> In the command examples shown below the leading # is a prompt.  Do
> not type it.  However, in the script examples, the leading #
> indicates a line that is a comment.  In this case you must type the
> # within the script, or ignore the line completely.
>
> 2.2
> By now you should have booted your system using the LFS live CD. 
> All the tools for creating a partition and creating a filesystem
> are included in the live CD's operating system.
>
> 3.1
> All the source packages and patches should be on the live CD in
> /sources.  You don't have to copy them all once to your lfs
> partition if you do not have the space, but it makes life easier.
> # cp -R /sources $LFS
>
> 4.2
> Since you create a link on the root of the live CD's filesystem, it
> will be gone the next time you boot.  We will add this link to a
> startup script later.
>
> 4.3
> Since the CD can not be accidentally damaged, there is no reason to
> create a lfs user for safety.  Ignore this chapter.
>
> 4.4
> Read chapter 4.4, but don't do anything yet.  The problem with
> using a live CD to build your system is that everytime you reboot
> the system, any special settings you have made to your user
> environment are lost.  You can't easily make a lfs user and a
> special build environment by editing the user's .bash_profile and
> .bashrc files as specified in this chapter.  So instead, we will
> write a script that sets up a "clean" environment.  This script
> will have to be run each time you leave the special build
> environment or re-boot the system.
>
> The only place you have to store any settings that will remain the
> next time you boot the live CD is the partion you created for your
> LFS build.  Although there may well be better solutions to this,
> this is the method I used when building LFS 6.1.  I am assuming
> that you place all of the scripts mentioned in this hint in the
> root of your LFS partition.
>
> cd to $LFS and create the following script using your favorite text
> editor (provided that your favorite text editor is included on the
> live cd).  At the time of writing, you may use vim, nano or joe.
>
> #################################################################
> # Begin setenv.sh
> # Sets up clean environment for 6.1 Chapter 5
> #
> # Before this script is run, you must have executed the following
> # after booting to the live CD:
> #
> # export LFS=/mnt/lfs
> # mkdir $LFS
> # mount /dev/xxx $LFS	(where xxx is your lfs partition)
>
> # Create the link to tools as per Ch 4.2
> ln -s $LFS/tools /
>
> # Set up the environment as per chapter 4.4
> # This sets up a special environment for root based
> # on the procedure for the user "lfs" which isn't
> # necessary when running from the live CD.
>
> echo "set +h" > ~/.bashrc
> echo "LFS=/mnt/lfs" >> ~/.bashrc
> echo "LC_ALL=POSIX" >> ~/.bashrc
> echo "PATH=/tools/bin:/bin:/usr/bin" >> ~/.bashrc
> echo "export LC_ALL PATH" >> ~/.bashrc
>
> # This sets up key mapping so the delete key works:
> cp /etc/inputrc ~/.inputrc
>
> # Enter the special build environment
> exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
>
> # End setenv.sh
> ###################################################################
>
> And now make the script file executable and run it:
> # chmod 700 setenv.sh
> # ./setenv.sh
>
> Note the difference between the live CD shell prompt and the
> special "build" environment prompt we have created here.  You will
> be able to easily see which environment you are in.
>
> So, to recap, every time you reboot the system you will have to
> execute the following commands to mount your LFS partition:
>
> # export LFS=/mnt/lfs
> # mkdir $LFS
> # mount /dev/[xxx] $LFS
>
> (Replace [xxx] with the partition that you have created for your
> LFS installation.)
>
> Then, run the setenv script to set up a "clean" environment:
> # $LFS/setenv.sh
>
> Now you can continue on with chapter 5...
>
> When you are done with chapter 5, you may want to make a backup of
> this partition using "Ghost" or some other backup tool.  (Just in
> case something goes wrong in the next chapter...)  It could also be
> used for a future build, or on another machine of the same
> architecture.
>
> Turn off your machine and take a break.  At least type "exit" to
> leave the temporary build environment.
>
> Chapter 6
> For the procedures in chapter 6 we will no longer be using the
> setenv.sh script to set up the build environment. Instead we
> "chroot" into the $LFS directory.  This will require running a
> script to enter the chroot environment, and then another script to
> configure the temporaty filesystems and devices within that
> environment.
>
> If you are still in the environment set up by setenv.sh, type exit
> to return to the live CD root prompt.  Or to be safe, reboot the
> live CD.
>
>
> 6.2
> Create the $LFS/proc and $LFS/sys directories, but do not mount the
> file systems.  We will mount the filesystems in the lfschroot.sh
> script below.
>
> 6.3
> It is assumed that during the build process you may want to take a
> break and turn off your machine to save energy.  Rather than
> retyping all the commands required to chroot when you come back, we
> will put them all in the following script.
>
> ################################################################
> # Begin lfschroot.sh
> # Changes root directory for use in LFS 6.1 Chapter 6
>
> # Mount required filesystems
> mount -t proc proc $LFS/proc
> mount -t sysfs sysfs $LFS/sys
>
> # These "fake mounts" are also needed now
> mount -f -t ramfs ramfs $LFS/dev
> mount -f -t tmpfs tmpfs $LFS/dev/shm
> mount -f -t devpts -o gid=4,mode=620 devpts $LFS/dev/pts
>
> echo ""
> echo "Do not forget to populate /dev !"
> echo ""
>
> # Chroot into the LFS system with a reduced environment
> chroot "$LFS" /tools/bin/env -i \
> 	HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
> 	PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
> 	/tools/bin/bash --login +h
>
> # End lfschroot.sh
> ###################################################################
>
> Make the script executable with this command.
> # chmod 700 lfschroot.sh
>
> Enter the lfs chroot environment:
> # ./lfschroot.sh
>
> Ignore the reminder about populating /dev.  I will cover that in
> chapter 6.8
>
> Once in the chroot environment a lot of things will be "broken". 
> You no longer have access to the text editors or many of the other
> tools from the live CD.  In fact, all you have to work with is what
> you have installed in chapter 5.
>
> 6.4
> Since we skipped creating the lfs user, you can skip this too. 
> Note that when in the chroot environment the files are allready
> owned by 0:0, whereas outside the in the live CD environment that
> are owned by root:root.  This is because the files are never really
> owned by "root", they are owned by user 0 group 0.  A "normal" OS
> translates the user and group numbers to the user and group names
> specified in /etc/passwd and /etc/group.  Since we have no passwd
> or group files, "I have no name!"
>
> 6.5 - 6.7
> [Optional] I hate typing a bunch of stuff on the command line.  I
> like to make a script file so I can edit it and run it later if
> necessary.  For reasons mentioned above it is a bit difficult to do
> that now in the chroot environment.  You may want to consider
> exiting now and creating scripts to perform the commands for
> chapters 6.5 through 6.7.  (Or think about learning ALFS!)
>
> 6.8
> Make the two nodes as decribed in 6.8.1
>
>
> 6.8.2
> We are going to make a script for this, so that we can populate
> /dev at will while building the rest of chapter 6.  Exit the chroot
> environment and create the following script in your $LFS directory
> to load the device nodes.
>
> #########################################################
> # Begin devpop.sh
> # Based on LFS 6.1 Chapter 6.8.2
> # This mounts a tempfs to /dev and populates
> # the /dev directories with a minimal set of device nodes.
> # ONLY RUN AFTER YOU HAVE CHROOTed INTO LFS DIRECTORY!!!
>
> mount -n -t tmpfs none /dev
>
> mknod -m 622 /dev/console c 5 1
> mknod -m 666 /dev/null c 1 3
> mknod -m 666 /dev/zero c 1 5
> mknod -m 666 /dev/ptmx c 5 2
> mknod -m 666 /dev/tty c 5 0
> mknod -m 444 /dev/random c 1 8
> mknod -m 444 /dev/urandom c 1 9
> chown root:tty /dev/{console,ptmx,tty}
>
> # These symbolic links are required by LFS
> ln -s /proc/self/fd /dev/fd
> ln -s /proc/self/fd/0 /dev/stdin
> ln -s /proc/self/fd/1 /dev/stdout
> ln -s /proc/self/fd/2 /dev/stderr
> ln -s /proc/kcore /dev/core
>
> # Mount the kernel filesystems within /dev
> mkdir /dev/pts
> mkdir /dev/shm
> mount -t devpts -o gid=4,mode=620 none /dev/pts
> mount -t tmpfs none /dev/shm
>
> # Test to see if udev is built yet.  If so, run it.
> if [ -f /sbin/usevstart ]; then
> 	/sbin/udevstart
> fi
>
> # End devpop.sh
> #################################################################
>
>
> So, for the rest of chapter 6, anytime you reboot, you must run the
> following commands:
>
> # export LFS=/mnt/lfs
> # mkdir $LFS
> # mount /dev/[xxx] $LFS
> # $LFS/lfschroot.sh
> # ./devpop.sh
>
> (Replace [xxx] with the partition that you have created for your
> LFS installation.)
>
> If you don't reboot, but only leave the build environment (with the
> exit command), you may re-enter the chroot environment by running
> the lfschroot and devpop scripts.  Note that you will receive some
> warnings, since the scripts try to mount filesystems that are
> allready mounted.  These are safe to ignore.
>
> So, you can now continue by installing the packages in chapter 6...
>
> 6.22
> Now that readline is installed, you can make the delete key work if
> you want.  Just create the files specified in chapters 7.8 & 7.9.
> (You will have to exit and chroot again to have the changes take
> effect.)
>
> 6.61
> If you followed the instructions, and you have not exited the build
> enviromnent since Chapter 6.37 (Bash), you will be running the
> newly installed bash executable.  If so, exit the build environment
> and reenter it as usual:
> # exit
> # $LFS/lfschroot.sh
>
> Now you will be running the version of bash from the live CD.
> Procede with stripping if desired.
>
> 6.62
> If desired, remove the /tools directory.  If you do this, you must
> edit lfschroot.sh to remove the references to /tools from the
> chroot command.  And you can remove the +h bash option. Edit the
> chroot command to look like this:
>
> # Chroot into the LFS system with a reduced environment for Chapter
> 7 chroot "$LFS" /usr/bin/env -i \
> 	HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
> 	PATH=/bin:/usr/bin:/sbin:/usr/sbin \
> 	/bin/bash --login
>
>
> EPILOGUE:
> So that's all there is to it.
>
> [ This hint was tested using LFS Live CD version x86-6.1-2, the
> en-US- ISO8859-1 locale, and the US keymap on a Dell sc420 (i686)
> platform. An ext3 boot partition was allready in existance created
> by Fedora Core 4, from which I had previously removed the extended
> attributes. LFS was installed on a 2GB ext2 partition. ]
>
>
> ACKNOWLEDGEMENTS:
>   * Obviously, the creators and maintainers of LFS and the LFS Live
> CD.
>
>
> CHANGELOG:
> [2005-08-]
>   * Initial hint.

-- 
Blog: http://seattlegaucho.blogspot.com

"No! Try not. Do, or do not. There is no spoon."
                     ...Yoda to Neo 



More information about the livecd mailing list