Changelog If, for example, a change is listed for chapter 5 it (usually) means the same change has been made in the chapters for the other architectures. &version; - &releasedate; Chapter 1: Added the lfs-security list to the list of available mailinglists. Chapter 1: Updated the mirror sites list. Chapter 5: Bash still had the --with-ncurses option which is a bogus option (it may as well have said --with-foo-bar). It has been changed into --with-curses (like it was already done in chapter 6) Chapter 5: Instead of CPPFLAGS=-Dvar=value ./configure during the installation of diffutils, grep and sed, we now use export CPPFLAGS=-Dvar=value && ./configure && unset CPPFLAGS. This was done to get things working on some systems that don't work well with that construction. Chapter 5 + 6: Added the --libexecdir parameter to fileutile's configure command. This was done to avoid the creation of the $LFS/usr/libexec directory. Chapter 5 + 6: Added the --libexecdir parameter to tar's configure command. This was done to avoid the creation of the $LFS/usr/libexec directory. Chapter 6: Moved the installation of the man-pages packages as the very first package. This way we don't have to worry about files being overwritten by this package's make install. It will install all the man pages it has and as we install packages in chapter 6 those packages will install their own man pages replacing the files from man-pages. Chapter 6: Added the copying of the man pages after console-tools has been installed. Chapter 6: Provided a patch to sysvinit. Read the installation notes what the patch is for. Chapter 6: Removed compiler optimization from the book. Thomas "Balu" Walter has transformed it into an LFS-Hint. Chapter 6: Removed running of localedef. This apparently isn't needed. Chapter 6: Added the compress and uncompress symlinks to the installation of gzip. Chapter 6: When entering chroot environment use absolute paths to the env and bash programs instead of relying on $PATH to be set properly. Chapter 6: Override libexecdir's variable during the installation of findutils. As findutils' configure script doesn't recognize the libexecdir parameter, we'll override the variable during the make install phase. Chapter 6: Instead of sed'ing the Makefile file during the installations of procinfo, procps and psmisc, we pipe the output of sed to make and build the packages that way. This is more effecient. Chapter 6: Use sed to modify the MCONFIG file. Chapter 6: Instead of using cp -avi to copy the files from the man-pages package, we use cp -dRiv now. This is almost the same as -avi, it just won't preserve the file attributes. The files from the packages would otherwise be installed not owned by user root but with userid 1000 which wasn't a good thing. Chapter 6: Mentioned the LFS-Hints' editor's section containing alternatives to vim in case you don't want vim installed on your system. Chapter 6: Added the sysklogd-1.4 patch. Sysklogd out of the box comes with a broken klogd - it's not able to intercept kernel messages. This patch fixes this. Chapter 6: Instead of having two seperate fallthrough lines in the inittab file (f1:0:... and f2:6:....) these are merged into one line (ft:06:respawn:/sbin/sulogin). Chapter 7: Added comments to the boot scripts. Chapter 7: Modified the startup function in the rc script. No need to distinguish between files that have an .sh extension or not. Also removed the stty onlcr command. This one doesn't seem to be needed anymore either. Chapter 7: When something is killed using the killproc function in the functions script, sleep for 2 seconds before continuing to allow the kill to be completed (sometimes it takes a little while before all processes are terminated). Chapter 7: When the print_status function in the functions script is called without a parameter don't abort the entire calling script, just return an error value of 1. This function is non-essential so it won't really affect anything when it doesn't run properly. Chapter 7: Merged the umountfs script with the mountfs script. Chapter 7: Fixed minor bug in the statusproc function in the functions script. It read "$i is not running" - should be "$1 is not running". Chapter 7: The print_error_msg function in the rc script now asks the user to press a key before continueing. This way the user is able to write down certain information before it's potentially all lost. Chapter 7 + 9: Moved the boot script symlinks from including two digits to three digits. This makes it easier to add scripts before and after other scripts. Chapter 9: Split up the network boot scripts page over multiple pages like the way the boot scripts are arranged in chapter 7. Chapter 9: Added a GATEWAY check to the ethnet script. If the GATEWAY variable is set, the default gateway will be setup. Chapter 9: Added the restart option to the localnet and ethnet scripts. Chapter 9: Removed the ethnet K script when rebooting or halting. The halt and reboot programs are called with the -i parameter which shut down all network interfaces just before halt or reboot. Chapter 9: Removed --prefix=/usr from netkit-base. It doesn't do anything useful. Appendix A: Added a description for blockdev from the util-linux package. Appendix C: Updated the util-linux official download site link. Appendix C: Updated the man-pages official download site link. 2.4.3 - November 21st, 2000 The LFS FTP archive has been moved to a new server which is reachable under the name packages.linuxfromscratch.org. The reason for the move is that this new server sits on a link with a lot more bandwidth to spare. Instead of having the reader create files by running vim or some editor, the reader can now simply copy and paste a command that creates the file in the form of cat > outputfile << EOF followed by the text to put in the file and when a single line containing EOF is read by cat, it stops reading and writes the file (not including the EOF). This will be handy to put in scripts so you can make LFS installations fully automatic. Added explanations on the commands being executed to make it clearer why and what is being done to install the packages. Chapter 1: Updated the HTTP mirror list and added the FTP mirror list. This list is up-to-date as of November 14th, 2000. Chapter 5: In the Bash installation changed the --with-curses configure option to --with-ncurses. This seems to fix bash compilations on distribution that don't have ncurses properly installed. Chapter 5: Instead of having the user replace <host> in the gcc installation by whatever appears in $LFS/usr/lib/gcc-lib you can use a *. This won't be a problem because the * will expand in only one directory so the 'ln' command won't complain about it. This makes it easier to automate as well. Chapter 6: Mentioned the -e parameter to perl's Configure script that makes the script not ask you anything after it has created the config.sh script. Chapter 6: Removed the creation of the /usr/bin/install symlink - this symlink was already created earier in chapter 5 Chapter 6: Added the creation of /var/log/lastlog where utmp, btmp and wtmp are created. Chapter 6: When the yacc script is created in the Bison section, execute a chmod 755 on it so we can execute the script. Chapter 6: Cosmetic change to the inittab file. Instead of using /dev/tty[1-6] as parameters to agetty we now use just 'dev[1-6]'. This generates a nicer output from commands like 'w'. Chapter 7: Modified all scripts to use absolute paths instead of relying on $PATH to be set. Chapter 7: In fstab changed none /proc proc defaults 0 0 to proc /proc proc defaults 0 0. Upon mount problems you could get "none: device or resource busy" instead of "proc: device or resourced busy". Appendix C: Fixed a couple of broken links. 2.4.2 - October 11th, 2000 Chapter 3: Newer verions were mentioned, but the links were still pointing to the older versions. Besides that I forgot to put the newer package versions in the ftp archive. Both have been fixed now. Chapter 5: Instead of looking at the filename of the C library files to determine which C library your starting Linux system uses we'll obtain it by running strings /lib/libc* | grep "release version" instead. Chapter 5+6: The proc file system must be mounted in chapter 5 before we enter the chroot'ed environment since after chroot the mount program will not be available yet. Chapter 6: Fixed a HTML bug in the GCC installation which caused a CR character to appear in certain browser. 2.4.1 - October 10th, 2000 Removed the bash prompts from the commands. This will make it much easier to copy & paste the commands from the book onto the command line. Typing them all out is great for the first few times, but it tends to get tedious after a while. You can of course use scripts to do this all, but that's not the goal of this book. That's part of a different project (alfs.linuxfromscratch.org). Swapped chapters 8 and 9. Now we first reboot and then setup networking. If done the other way around, networking programs won't work unless both the normal system and the LFS system are going to run the same kernel version, which often is not the case. Swapping the chapters eliminates that possible problem. Chapter 3: All packages have been moved to download.linuxfromscratch.org and the links are updated accordingly. The official download sites for all the packages are listed in Appendix C. Chapter 5+6: Moved the execution of localedef after Glibc in chapter 5 to after you entered chroot in chapter 6. It was a mistake (the only real bug in 2.4) to put it in chapter 5. Chapter 6: Installing Vim as the first program. In case you need to edit something you an editor available right away. This also caused a couple of other packages to be moved to satisfy depencies. Chapter 6: When we use sed to modify a Makefile file we now run make as make -f Makefile2 instead of mv Makefile2 Makefile && make. Chapter 6: Added the publickey: files line to the nsswitch.conf file. This is needed when you run a 2.4 kernel to login properly. Chapter 6: Added the /usr/bin/yacc script that runs bison with the -y switch to emulate yacc's output file name conventions. This is done because there are a few packages out there that rely on yacc and can't work with bison (yet). Chapter 6: Modified the /usr/sbin/makewhatis script after the installation of the man package. The /usr/sbin/makewhatis script needs the AWK= variable defined to /usr/bin/mawk. Chapter 7: Added the template script. This way you can easily add new bootscripts without having to write them from scratch. 2.4 - August 28th, 2000 Split the book up into two differnet books for Intel and PPC. Chapter 4: Added the mail and dev/pts directories to the Creating directories section. Chapter 5: Everything from chroot and after has been put in a new chapter. Chapter 6: Moved the optimization part to the point just before you enter the chroot'ed environment. It's a waste to use compiler optimizations for the static packages since they will be replaced anyways. Chapter 6: To enter chroot we first cd to the $LFS/root directory. Some older chroot programs have problems when you enter chroot when your starting directory isn't inside the chroot environment. Also we don't execute bash directly in the chroot'ed environment, but we start the env program so we can enter with a clean environment that only has CFLAGS and CXXFLAGS set. Chapter 6: A few people have had problems compiling M4 in the chroot'ed enviroment. Instructions are provided how to install this package statically for the affected users. Chapter 6: We can't move the 'mv' program during the dynamic installation of the fileutils package with the mv program. So we copy it to /bin first, then remove the /usr/bin/mv one. Chapter 5: Added 'make localedata/install-locales' to the Glibc installation. This installs the locale files that various applications use (most notable GDK applications) if you have an NLS capable system (which LFS is, but with missing locales it's almost useless) Chapter 6: Moved vim's installation before Lilo since you might want to edit Lilo's Makefile file to add compiler optimization. Chapter 6: Moved the installatin of shadow password suit after sh-utils. Else sh-utils replaces the su version from shadow password with it's own version which shouldn't happen. Chapter 6: Changed the way we enter the chroot'ed environment. We use the env to create an empty enviroment so that enviroment variables from the normal Linux system won't interfer in the chroot enviroment. The only variable set when entering the chroot'ed environment is the HOME variable. Chapter 6: Because of the new way we enter chroot, the $LFS/root/.bash_profile file has been created that sets a few variables like TERM, CFLAGS, CXXFLAGS and whatever you deem necesarry. 2.3.7 - August 3rd, 2000 All chapters: Removed the <blockquote> SGML tags so that the contents of files isn't indented anymore. This improves the easy of copy and pasting from the book into your files without needing to manually reformat the files to get rid of the indentations. Chapter 4: Added var/tmp to the chmod 1777 tmp usr/tmp command. Chapter 4: Made mkdir commands less repetitive by putting the creation of the directories in $LFS/usr and $LFS/usr/local in a for-loop. Chapter 5: Moved the chmod 754 command for MAKEDEV after the sed operation. Chapter 5: Changed the order in which packages are installed to conform more to a alphabetically ordering. Chapter 5: After console-tools has been installed the /usr/share/defkeymap.kmap.gz file is created which will be used by the loadkeys script. Chapter 5: Removed gcc -c watch.c from Installing Procps. Please let us know if this is still needed on certain hardware. Chapter 5: Added the /usr/bin/install symbolic link as it seems that at least one package (sysklogd) has the install location hard coded in it's Makefile file. Chapter 5: After gettext has been installed, we have a file /po-mode.el. This file will be moved to /usr/share/gettext where it probably belongs. Chapter 5: Instead of passing --with-root-prefix=/ to e2fsprogs' configure script, we now pass --with-root-prefix= Chapter 5: When gzip is installed and the files moved to /bin the hard link between the files is removed. So we just move gzip to /bin and create a symlink between gzip and gunzip. Chapter 5: In the chroot environment: changed the installation order of a few packages who's dependencies have changed over time. Chapter 5: inittab file has been slightly updated to better support the single user run level. When you change to run level S, s or 1 it will do it's job properly now. Chapter 6: Fixed typo in the rc script (! -f sysinit_start -> ! -f $sysinit_start). Chapter 6: Changed the loadkeys command in the loadkeys script. New command is: loadkeys -d which loads the /usr/share/keymaps/defkeymap.kmap.gz file. Chapter 6: Changed . /etc/init.d/functions into source /etc/init.d/functions. Chapter 6: Removed the rm /fastboot command from the checkfs script. 2.3.6 - July 19th, 2000 Chapter 3: Re-ordered the software download list so it once again matches the order in which packages are used (the first package listed in the list is the first package that we will be using in the book, the second listed package will be the second package used in the book, etc). Chapter 3: Added the file sizes of the packages you have to download. Chapter 3: Removed the start-stop-daemon package. Chapter 3: Added the findutils and glibc patches to the package list. Chapter 3: Added the man-pages package to the package list. Chapter 4: Moved the creation of the $LFS/dev/ files to chapter 5 after we have entered the chroot environment. This is done because GID's on normal system and LFS system might differ and the MAKEDEV script depends on the GID's. Chapter 5: Added the installation of the man-pages package. Chapter 5: Added a few commonly used groups to the /etc/group file when it is created (these are the groups needed by the MAKEDEV script). Chapter 5: The /proc/devices file is copied to $LFS/proc for the benefit of the MAKEDEV script. The presence of this file ensures the proper creation of the device files. Chapter 5: Layout changes. Every package installation has it's own page now. Also the text from appendixa for every package is included with the installation instructions so you can read what a package is about during (or after or before) the installation of it. Chapter 5: Removed the patches for diffutils, grep, gzip and sed that used to fix static link problems. The problems can be fixed by passing compile arguments to the C pre-processor (cpp) instead. Chapter 5: Added the --disable-termcap option to configure to disable termcap backward compatibility (if you want to know why termcap isn't used anymore, please read the INSTALL file that comes with the Ncurses package). Chapter 5: Added a few missing files from the fileutils package to the mv commands. Chapter 5: Removed the installation of the start-stop-daemon package. Chapter 5: Removed the -e parameters from the make command lines. Chapter 5: Instead of editing the procinfo, procps and psmisc Makefile files with a text editor, the sed command it used. Chapter 6: Added the setclock script in case your hardware clock isn't set to GMT. Chapter 6: Removed the use of the start-stop-daemon program and replaced them with custom functions that use programs like pidof and kill to accomplish the same tasks but with more control over what happens. Chapter 6: Added the loadproc and killproc functions to the /etc/init.d/functions file that take over the functions the start-stop-daemon program used to perform. Chapter 6: When the checkfs script runs without errors it now prints a green OK. Chapter 6: When /fastboot or /forcefsck exist, they won't be deleted from within the checkfs script but from within the mountfs script as soon as the root partition has been remounted in read-write mode. Chapter 6 & 7: Instead of sourcing a file with . /etc/init.d/functions, source /etc/init.d/functions is now used. This makes it easier to read and is clearer for persons who don't know much about scripting. Appendix A: removed start-stop-daemon. Appendix B: Removed a few unrelated items from the book and howto sections (the references to Sendmail and ISP-Hookup-HOWTO). 2.3.5 - June 19th, 2000 Chapter 3: Updated LILO download location Chapter 3: Updated Shadow Password Suite download location Chapter 3: Updated the Flex download location Chapter 3: Updated the File download location Chapter 3: Added netkit-base and net-tools to the mandatory packages section Chapter 5: A glibc-2.1.3 patch is available if you have problems compiling glibc on a bash-2.04 machine. Chapter 5: Added compiler optimization Chapter 5: Added the creation of the root password to Configuring essential software Chapter 5: The Linux86 package has been replaced by the Bin86 package. Chapter 5: Included information on how to optimize compilations. Chapter 5: Moved installation of Groff and Man before Perl. This way Perl known how to install man pages and where to install them. Chapter 5: Changed GCC's local-prefix option to /usr/local instead of /usr (this was still a residue from the time where /usr/local was a symbolic link to /usr) Chaper 5: Fixed the commands when a patch is used and the patch filename contained the .gz suffix. Chapter 5: Added --disable-nls to every configure command in the Perparing the LFS system... section which didn't have it yet. Chapter 5: Added the installation of bash-2.03 so you have a shell that can be used to compile packages that violate POSIX standards regarding valid characters in variable names Chapter 5: Added the installation of console-tools and console-data for people who have non-US keyboards Chapter 5: Moved the ed program to the /bin directory conforming the FHS standard Chapter 6 & 7: Implemented LSB recommended run level scheme. Chapter 6 & 7: Implemented fancy bootscripts. When something fails in a bootscript it still says FAILED but the text red. When something succeeded it still will print OK but the text is green. Chater 6: Added the loadkeys scripts for people with non-US keyboards Chapter 6: Added the /etc/sysconfig directory to "Creating directories" Chapter 6: Renamed the checkroot boot script into checkfs. The script also checks other file systems now. Chapter 6: Updated the mountfs boot script to mount all file systems that are mentioned in the /etc/fstab file and don't have the noauto option set. Chapter 6: After checkfs evaluated the existence of /fastboot or /forcecheck it will remove those files. Chapter 6 & 7: Changed the mode of the boot scripts from 755 to 754 Chapter 7: Moved system specific information for hostname and ethernet configuration to the /etc/sysconfig/network file Chapter 7: Removed the default gateway command Chapter 7: Fixed the typo in the ethnet script (NETMAKSK -> NETMASK) Chapter 7: A net-tools patch is available to fix a minor bug in the package (illegal variable names that bash-2.04 will complain about) 2.3.4 - June 5th, 2000 Chapter 5: Fixed the kernel header files configuration Chapter 5: Fixed the lilo configuration 2.3.3 - May 15th, 2000 Changed the default mount point from /mnt/xxx to /mnt/lfs (where xxx used to be the partition's designation like hda5, sda5 and others). The reason for the change is to make cross-platform instructions easier. Chapter 4: Changed the default modes for the $LFS/root and $LFS/tmp directory to respectively 0750 and 1777. Chapter 5: Removed the encoded password from the passwd file. Instead a file with no set password is created. The root password can be set by the user when the system is rebooted into the LFS system (after chapter 8). Chapter 5: Fixed the procps compile command for watch.c. It should compile properly now. Chapter 5: Fixed gzip patch installation (used the wrong filename in the patch command Chapter 5: Changed 'entering the chroot'ed environment' to make bash a login shell. Chapter 5: Configuring the kernel has been moved to this chapter because it needs to be done before programs like e2fsprogs and lilo are compiled. Chapter 6: Fixed the rc script. It now checks to see if the previous run level starts a service before attempting to stop it in the new run level. Also, if a service is already started in the previous run level it won't attempt to start the service in the new run level again. Thanks to Jason Pearce for providing this fixed script. Chapter 7: Fixed the ethnet script - removed paratheses from the environment variables and removed the command to add a route. The ifconfig command used to bring the eth device up already sets this route. 2.3.2 - April 18th, 2000 Chapter 4.7: Change only the owner of the $LFS/dev/* files Fixed a large amount of typo's that occured during the transistion from the LinuxDoc DTD (2.2 and lower) to the DocBook DTD (2.3.1 and higher). Moved chapters around quite a bit and applied a new structure in the book. Installations for Intel, Apple PowerPC and future systems will be put in their own dedicated part of the book. After the system is prepared to install the basic system software, we no longer reboot the system but instead we setup a chroot'ed environment. This will have the same effect without having to reboot. Apple PowerPC has it's own dedicated chapters now. This should increase readability a lot All optional chapters have been removed. LFS follows a we provide the foundation, it's up to you to build the rest of the house philosophy. Replaced the fixed packages by patch files. This way you can see what needs to be changed in a package in order to get it to compile properly. 2.3.1 - April 12th, 2000 Chapter 4.4: Added the $LFS/usr/info symlink which points to $LFS/usr/share/info Chapter 7.3.1: Added a second variation to a 'swap-line' in a fstab file. Chapter 7.3.2: Removed $LFS from the commands. Chapter 7.4.43: Added the vi symlink Chapter 9.2.5: Improved ethnet script to include routing information Chapter 10.1.2: Fixed missing subdirectory 'mqueue' in mkdir /var/spool -> /mkdir /var/spool/mqueue Chapter 10.1.4: Updated the sendmail configuration file with a few necessary options Chapter 10.1.7: Fixed wrong directory path /etc/init.d/rc2.d -> /etc/rc2.d