Difference between revisions of "LFS-book-8p1-notes"

From Wiki at Neela Nurseries
Jump to: navigation, search
m (^ LFS chapter 2.4 - creating a new partition)
m (^ standing as of chapter 6.32 - flex-2.6.4 . . .)
 
Line 895: Line 895:
 
drwxrwxr-x  9  500    500 4096 Sep 29 13:16 cracklib-2.9.6
 
drwxrwxr-x  9  500    500 4096 Sep 29 13:16 cracklib-2.9.6
 
drwxr-xr-x  8 root  root    4096 Sep 22 13:08 file-5.31
 
drwxr-xr-x  8 root  root    4096 Sep 22 13:08 file-5.31
drwxrwxr-x 11 veris veris   4096 Sep 29 14:09 flex-2.6.4
+
drwxrwxr-x 11 user  user   4096 Sep 29 14:09 flex-2.6.4
 
drwxrwxr-x 70 root  root    4096 Sep 22 10:48 glibc-2.26
 
drwxrwxr-x 70 root  root    4096 Sep 22 10:48 glibc-2.26
 
drwxr-xr-x 16 lfs  root    4096 Sep 28 07:10 gmp-6.1.2
 
drwxr-xr-x 16 lfs  root    4096 Sep 28 07:10 gmp-6.1.2
Line 901: Line 901:
 
drwxr-xr-x  7 root  root    4096 Sep 29 11:07 libcap-2.25
 
drwxr-xr-x  7 root  root    4096 Sep 29 11:07 libcap-2.25
 
drwxrwxr-x 10 root  root    4096 Sep 22 13:15 m4-1.4.18
 
drwxrwxr-x 10 root  root    4096 Sep 22 13:15 m4-1.4.18
drwxr-xr-x 11 veris veris   4096 Jul 13 22:28 man-pages-4.12
+
drwxr-xr-x 11 user  user   4096 Jul 13 22:28 man-pages-4.12
 
drwxr-xr-x  6 lfs  lfs    4096 Sep 28 07:36 mpc-1.0.3
 
drwxr-xr-x  6 lfs  lfs    4096 Sep 28 07:36 mpc-1.0.3
drwxr-xr-x  9 veris veris   4096 Sep 28 07:26 mpfr-3.1.5
+
drwxr-xr-x  9 user  user   4096 Sep 28 07:26 mpfr-3.1.5
 
drwxr-xr-x 17 lfs      999 4096 Sep 29 10:12 ncurses-6.0
 
drwxr-xr-x 17 lfs      999 4096 Sep 29 10:12 ncurses-6.0
drwxrwxr-x  6 veris veris   4096 Sep 29 10:02 pkg-config-0.29.2
+
drwxrwxr-x  6 user  user   4096 Sep 29 10:02 pkg-config-0.29.2
drwxr-xr-x  8 veris veris   4096 Sep 29 13:56 psmisc-23.1
+
drwxr-xr-x  8 user  user   4096 Sep 29 13:56 psmisc-23.1
 
drwxrwxr-x  6  286 dialout 4096 Sep 22 13:10 readline-7.0
 
drwxrwxr-x  6  286 dialout 4096 Sep 22 13:10 readline-7.0
drwxr-xr-x 10 root  root    4096 Sep 29 11:19 sed-4.4
+
drwxr-xr-x 10 root  root    4096 Sep 29 11:19 sed-4.4  
drwxrwxr-x 10 veris veris   4096 Sep 29 13:28 shadow-4.5
+
drwxrwxr-x 10 user  user   4096 Sep 29 13:28 shadow-4.5
 
drwxr-xr-x 14  501 dialout 4096 Sep 22 13:06 zlib-1.2.11
 
drwxr-xr-x 14  501 dialout 4096 Sep 22 13:06 zlib-1.2.11
  

Latest revision as of 19:48, 26 July 2018

Wiki Main Page | User Page of Ted | Google search engine


Linux From Scratch, Book 8.1
Notes On Build Steps and Process
2017 Autumn and Winter


Overview

This wiki article contains notes on build steps and process detailed in Linux From Scratch book 8.1. This work spurred by Ted's finding that Robert Landley's Aboriginal Linux project is defunct and no longer developed as of spring or summer 2017. Robert had gotten a compressed and simplified Linux build framework down to seven packages, which could build all the necessary tools including themselves, to create a base Linux system. On this base system then a user could further tailor and develop custom software to fit a wide variety of use cases, including embedded system uses and cross-compiling based system uses.

In absence of a supported Aboriginal Linux, Ted here working through 'Linux From Scratch' to build a system crossed-compiled for the ARM architecture, with goal of buildng complete working Linux OS to run on RaspberryPi development boards. At same time Ted looking to build minimal system and tool chain, offering environment in which to compile and to cross-compile C and C++ programs.


[ mount steps chapter 6 onward ] : [ chroot chapter 7 onwards ]


Contents


Notes here begin with some useful, initially found links to LFS home page of Gerard Beekman et al:



Linux From Scratch project observes Linux Standard Base (LSB) requirements. These requirements include,


Cross-compiling Linux system from scratch . . .


Linux from Scratch for RaspberryPi target system . . .


Some Linux programs and utilities, services worth studying further, for better understanding of system and networking:

  • grub, EFI and UEFI
  • iproute, routef and routel, IPV4 routine tables
  • util-linux-2.30.1 . . . chapter 6.66, lots of utilities here!



^ Linux From Scratch - Chapter 1 - Introduction to Linux From Scratch

LFS book 8.1 chapter 1.1 gives an overview of all nine chapters, and also gives a reference that goes into technical explanation for great efforts to isolate tools used to build LFS, and parts of LFS system itself being built, from the tools and software of the host system.



^ Linux From Scratch - Chapter 2 - Preparing the host system

^ LFS chapter 2.4 - creating a new partition

First mount and build steps . . .

- 2017-90-18 MON -

LFS book release 8.1, chapter 2.4 talks about typical and "convenience" partitions which are often or sometimes created for Unix and Linux systems. Ted's notebook of LFS work past two weeks not on hand, but going from memory and cfdisk partition list which lacks labels and mount points, here are the partitions Ted created first time stepping through chapter 2:


Figure x - initial LFS 8.1 partitioning choices, using 8GB root directory:


                                      cfdisk (util-linux 2.20.1)

                                         Disk Drive: /dev/sdb
                                  Size: 160041885696 bytes, 160.0 GB
                        Heads: 255   Sectors per Track: 63   Cylinders: 19457

     Name           Flags         Part Type     FS Type              [Label]            Size (MB)         mount point
 ----------------------------------------------------------------------------------------------------
     sdb1           Boot           Primary      ext4                                       106.93            /boot
     sdb5                          Logical      ext4                                      7682.42            /
     sdb6                          Logical      swap                                      1003.49 ( not applicable to swap partition )
     sdb7                          Logical      ext4                                     10001.95            /home
     sdb8                          Logical      ext4                                     20003.89            /opt
     sdb9                          Logical      ext4                                     50001.48            /usr/src
     sdb10                         Logical      ext4                                     50001.48            /var
                                   Pri/Log      Free Space                               21240.29      *



Started working through LFS 8.1 book using above partitions but found that __LFS glibc tests__ require beyond 8GB space on file system. For this reason changed the file system sizes and partition sizes to create a larger root partition as shown in next figure:

Figure x - LFS 8.1 exercise, partition choices draft two:


                                      cfdisk (util-linux 2.20.1)

                                         Disk Drive: /dev/sdb
                                  Size: 160041885696 bytes, 160.0 GB
                        Heads: 255   Sectors per Track: 63   Cylinders: 19457

     Name           Flags         Part Type     FS Type              [Label]            Size (MB)         mount point
 ----------------------------------------------------------------------------------------------------
     sdb1           Boot           Primary      ext4                                       106.93            /boot
     sdb5                          Logical      ext4                                     18498.66            /
     sdb6                          Logical      Linux                                     1003.49 ( not applicable to swap partition )
     sdb7                          Logical      Linux                                    10001.95            /home
     sdb8                          Logical      Linux                                    20003.89            /opt
     sdb9                          Logical      Linux                                    50001.48            /usr/src
     sdb10                         Logical      Linux                                    60425.52            /var




      [ Bootable ]  [  Delete  ]  [   Help   ]  [ Maximize ]  [  Print   ]  [   Quit   ]
      [   Type   ]  [  Units   ]  [  Write   ]

                             Quit program without writing partition table


Per chapter 2.4 comments on convenience partitions, Ted not creating a partition for either /usr nor /tmp. Ted creating /opt for software which falls outside of Debian and Ubuntu package lists, such as lpcxpresso_notes and LTSpice.

Working through LFS stable release book or instructions, at end of chapter two page titled chapter 2.7 LFS book calls for first mount of newly created system-to-be partition. Ted using ext4 type journaled file system. Somewhere in or about chapter five, further mounts of other file systems of the new system are needed. Here are key mounting steps needed to proceed with work at end of LFS book 8.1 chapter 2 and int chapter 3 and onward. These mount steps depend that environment variable $LFS set to /mnt/lfs . . .



    $ # From LFS 8.1 chapter 2.7, mounting the new file system:

    $ sudo mount -v -t ext4 /dev/sdb5 /mnt/lfs


    $ # From LFS 8.1 chapter 6.2, preparing virtual kernel file systems:

    $ sudo mount -v --bind /dev $LFS/dev
    $ sudo mount -vt proc proc $LFS/proc
    $ sudo mount -vt sysfs sysfs $LFS/sys
    $ sudo mount -vt tmpfs tmpfs $LFS/run


Ted noting specific mount steps as root partition at 7.7GB too small to permit chapter 6 builds. Ted learning parted disk partitioning utility in order to resize /dev/sdb5 root partition of 2017 September LFS project build. There appears to be some good notes on using a tool named resize2fs at the AskUbuntu forum page https://askubuntu.com/questions/390769/how-do-i-resize-partitions-using-command-line-without-using-a-gui-on-a-server. But neither parted for resize2fs alone were the answer, Ted uses cfdisk, e2fsck and resize2fs to achieve a partition and corresponding file system size increase.

After building first package binutils-2.29 the directory /tools holds directories and files in the following command line snippet of figure x. Bin-utils 2p29 took about 5 mins 30 seconds to build:


Figure x - looking at results of LFS first build step, building bin-utils 2.29:


lfs@localhost:~$ ls /tools
bin  i686-lfs-linux-gnu  share

ted@localhost:~$ ls /tools/bin
i686-lfs-linux-gnu-addr2line  i686-lfs-linux-gnu-elfedit  i686-lfs-linux-gnu-nm       i686-lfs-linux-gnu-readelf
i686-lfs-linux-gnu-ar         i686-lfs-linux-gnu-gprof    i686-lfs-linux-gnu-objcopy  i686-lfs-linux-gnu-size
i686-lfs-linux-gnu-as         i686-lfs-linux-gnu-ld       i686-lfs-linux-gnu-objdump  i686-lfs-linux-gnu-strings
i686-lfs-linux-gnu-c++filt    i686-lfs-linux-gnu-ld.bfd   i686-lfs-linux-gnu-ranlib   i686-lfs-linux-gnu-strip

lfs@localhost:~$ ls /tools/share
info  man

lfs@localhost:~$ ls /tools/i686-lfs-linux-gnu/
bin  lib

lfs@localhost:~$ ls /tools/i686-lfs-linux-gnu/lib
ldscripts

lfs@localhost:~$ ls /tools/i686-lfs-linux-gnu/lib/ldscripts/
elf32_x86_64.x    elf32_x86_64.xdw  elf32_x86_64.xsw  elf_i386.xc   elf_i386.xr   elf_i386.xw    elf_iamcu.xdc  elf_iamcu.xsc  i386linux.xbn
elf32_x86_64.xbn  elf32_x86_64.xn   elf32_x86_64.xu   elf_i386.xd   elf_i386.xs   elf_iamcu.x    elf_iamcu.xdw  elf_iamcu.xsw  i386linux.xn
elf32_x86_64.xc   elf32_x86_64.xr   elf32_x86_64.xw   elf_i386.xdc  elf_i386.xsc  elf_iamcu.xbn  elf_iamcu.xn   elf_iamcu.xu   i386linux.xr
elf32_x86_64.xd   elf32_x86_64.xs   elf_i386.x        elf_i386.xdw  elf_i386.xsw  elf_iamcu.xc   elf_iamcu.xr   elf_iamcu.xw   i386linux.xu
elf32_x86_64.xdc  elf32_x86_64.xsc  elf_i386.xbn      elf_i386.xn   elf_i386.xu   elf_iamcu.xd   elf_iamcu.xs   i386linux.x

lfs@localhost:~$ ls /tools/i686-lfs-linux-gnu/bin
ar  as  ld  ld.bfd  nm  objcopy  objdump  ranlib  readelf  strip

lfs@localhost:~$ /tools/i686-lfs-linux-gnu/bin/ar --version
GNU ar (GNU Binutils) 2.29
Copyright (C) 2017 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) any later version.
This program has absolutely no warranty.

lfs@localhost:~$



^ Linux From Scratch - Chapter 3

LFS Chapter 3 TOC - Package and Patches



^ Linux From Scratch - Chapter 4

LFS Chapter 4 TOC - Final Preparations



^ Linux From Scratch - Chapter 5

LFS Chapter 5 TOC - Constructing a Temporary System



^ Linux From Scratch - Chapter 6 - Installing Basic System Software

 
Back in September / early October Ted set aside work on LFS book 8.1, at the end of chapter 6 and just a bit into chapter 7. Picking up the work again, there are some key steps for mounting partitions and their respective LFS 8.1 file systems detailed in chapter 6 sections 2.2 and 2.3. The table of LFS chapter 6 contents is useful also, and given here for easier reference:




^ LFS chapter 6.2 - preparing virtual kernel file systems


During build of LFS system using Linux From Scratch's book 8.1, the host system was powered down and turned on again several times after completely LFS book chapter 5. Upon each return to LFS work, Ted invokes six `sudo mount` commands to set up both real and virtual Linux file systems. These mounts are in effect on the host computer, and they're also visible within the $LFS environment. The first mount puts the root file system '/' of the LFS instance at the host's mount point /mnt/lfs:


  $ sudo mount -t ext4 /dev/sdb5 $LFS


The "$ sudo" tokens are part of the host system command line at each invocation of the mount command, and they reflect a non-root user running `mount` and the need to enact root privileges with and for each mount command. Specific mount invocations mentioned in chapter 6.2. From section 6.2.2 the first mount invocation:


  $ sudo mount -v --bind /dev $LFS/dev           . . . within $LFS environment `mount` there fails with message "failed to read mtab"


And from section 6.2.3 the remaining mount invocations:


  $ sudo mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620     . . . in $LFS `mount` fails with message "failed to read mtab"
  $ sudo mount -vt proc proc $LFS/proc                              . . . now `mount` works in chroot $LFS environment
  $ sudo mount -vt sysfs sysfs $LFS/sys
  $ sudo mount -vt tmpfs tmpfs $LFS/run


- 2017-11-30 NEED - Ted needs to revisit shell commands below and find way to script them in one script, which will check for mounts already in place and only attempt file system mounts which are not enacted:

Ted's test of cut-and-paste text to permit running all five mount invocations with one text copy action . . . Ted noting the backslashes for line continuation don't work, and thinking on this syntax it makes sense that we need separate each mount invocation, as these are complete commands. Otherwise the second `mount` is parsed by the shell as an argument to the first appearance of `mount` . . .


mount -v --bind /dev $LFS/dev ;\
mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620 ;\
mount -vt proc proc $LFS/proc ;\
mount -vt sysfs sysfs $LFS/sys ;\
mount -vt tmpfs tmpfs $LFS/run



^ LFS chapter 6.4 - entering the chroot environment


Taken directly from the chapter:


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


For convenience, same command preceded by `sudo`:


$ sudo 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



^ LFS chapter 5.5 - gcc first pass

Chapter 5.5, building gcc first pass, took about sixty three (63) minutes:


   .
   .
   .
make[3]: Leaving directory `/mnt/lfs/sources/gcc-7.2.0/build/i686-lfs-linux-gnu/libgcc'
make[2]: Leaving directory `/mnt/lfs/sources/gcc-7.2.0/build/i686-lfs-linux-gnu/libgcc'
make[1]: Leaving directory `/mnt/lfs/sources/gcc-7.2.0/build'

real    63m2.166s
user    53m41.453s
sys     3m11.888s
lfs@localhost:/mnt/lfs/sources/gcc-7.2.0/build$


Time to build glibc:


   .
   .
   .
-lgcc  `i686-lfs-linux-gnu-gcc  --print-file-name=crtend.o` /mnt/lfs/sources/glibc-2.26/build/csu/crtn.o
make[2]: Leaving directory `/mnt/lfs/sources/glibc-2.26/elf'
make[1]: Leaving directory `/mnt/lfs/sources/glibc-2.26'

real    41m19.981s
user    32m31.794s
sys     5m49.582s

lfs@localhost:/mnt/lfs/sources/glibc-2.26/build$


Linux From Scratch chapter 5 has thirty seven sections. There was not a pressing need or a lot of details Ted found worth noting in most of these sections, the majority of which are dedicated to packages built in the first package building phase of LFS target system creation. These packages are all built as the user 'lfs', and with the environment variable $LFS set, in our case Ted's case, to /mnt/lfs.

An important instruction to follow from the last section of chapter 5, section 5.37:


  " Note
 
   The commands in the remainder of this book must be performed while logged in as user root and no longer as user lfs. Also, double check that $LFS is set in root's environment."



^ LFS chapter 6.5 - create new system directories

Some captured terminal work, following steps in LFS 8.1 book, chapter 6.5:

Figure x - creating some of first directories in new LFS system, following chroot . . .


I have no name!:/# ls
dev  lost+found  proc  run  sources  sys  tools

I have no name!:/# mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt}
mkdir: created directory '/bin'
mkdir: created directory '/boot'
mkdir: created directory '/etc'
mkdir: created directory '/etc/opt'
mkdir: created directory '/etc/sysconfig'
mkdir: created directory '/home'
mkdir: created directory '/lib'
mkdir: created directory '/lib/firmware'
mkdir: created directory '/mnt'
mkdir: created directory '/opt'

I have no name!:/# mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}
mkdir: created directory '/media'
mkdir: created directory '/media/floppy'
mkdir: created directory '/media/cdrom'
mkdir: created directory '/sbin'
mkdir: created directory '/srv'
mkdir: created directory '/var'

I have no name!:/# install -dv -m 0750 /root
install: creating directory '/root'

I have no name!:/# install -dv -m 1777 /tmp /var/tmp
install: creating directory '/tmp'
install: creating directory '/var/tmp'

I have no name!:/# mkdir -pv /usr/{,local}{bin,include,lib,sbin,src}
mkdir: created directory '/usr'
mkdir: created directory '/usr/bin'
mkdir: created directory '/usr/include'
mkdir: created directory '/usr/lib'
mkdir: created directory '/usr/sbin'
mkdir: created directory '/usr/src'
mkdir: created directory '/usr/localbin'
mkdir: created directory '/usr/localinclude'
mkdir: created directory '/usr/locallib'
mkdir: created directory '/usr/localsbin'
mkdir: created directory '/usr/localsrc'

I have no name!:/#


LFS 8.1 book explains that the "I have no name!" results from there not yet being a /etc/passwd file in the new LFS system. Continuing the terminal capture to illustrate bash shell's pattern expansion from curly braced text:



I have no name!:/# mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man}
mkdir: created directory '/usr/share'
mkdir: created directory '/usr/share/color'
mkdir: created directory '/usr/share/dict'
mkdir: created directory '/usr/share/doc'
mkdir: created directory '/usr/share/info'
mkdir: created directory '/usr/share/locale'
mkdir: created directory '/usr/share/man'
mkdir: created directory '/usr/local'
mkdir: created directory '/usr/local/share'
mkdir: created directory '/usr/local/share/color'
mkdir: created directory '/usr/local/share/dict'
mkdir: created directory '/usr/local/share/doc'
mkdir: created directory '/usr/local/share/info'
mkdir: created directory '/usr/local/share/locale'
mkdir: created directory '/usr/local/share/man'

I have no name!:/# mkdir -v  /usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir: created directory '/usr/share/misc'
mkdir: created directory '/usr/share/terminfo'
mkdir: created directory '/usr/share/zoneinfo'
mkdir: created directory '/usr/local/share/misc'
mkdir: created directory '/usr/local/share/terminfo'
mkdir: created directory '/usr/local/share/zoneinfo'

I have no name!:/# mkdir -v  /usr/libexec
mkdir: created directory '/usr/libexec'

I have no name!:/# mkdir -pv /usr/{,local/}share/man/man{1..8}
mkdir: created directory '/usr/share/man/man1'
mkdir: created directory '/usr/share/man/man2'
mkdir: created directory '/usr/share/man/man3'
mkdir: created directory '/usr/share/man/man4'
mkdir: created directory '/usr/share/man/man5'
mkdir: created directory '/usr/share/man/man6'
mkdir: created directory '/usr/share/man/man7'
mkdir: created directory '/usr/share/man/man8'
mkdir: created directory '/usr/local/share/man/man1'
mkdir: created directory '/usr/local/share/man/man2'
mkdir: created directory '/usr/local/share/man/man3'
mkdir: created directory '/usr/local/share/man/man4'
mkdir: created directory '/usr/local/share/man/man5'
mkdir: created directory '/usr/local/share/man/man6'
mkdir: created directory '/usr/local/share/man/man7'
mkdir: created directory '/usr/local/share/man/man8'
I have no name!:/#

I have no name!:/# mkdir -v /var/{log,mail,spool}
mkdir: created directory '/var/log'
mkdir: created directory '/var/mail'
mkdir: created directory '/var/spool'

I have no name!:/# ln -sv /run /var/run
'/var/run' -> '/run'

I have no name!:/# ln -sv /run/lock /var/lock
'/var/lock' -> '/run/lock'

I have no name!:/# mkdir -pv /var/{opt,cache,lib/{color,misc,locate},local}
mkdir: created directory '/var/opt'
mkdir: created directory '/var/cache'
mkdir: created directory '/var/lib'
mkdir: created directory '/var/lib/color'
mkdir: created directory '/var/lib/misc'
mkdir: created directory '/var/lib/locate'
mkdir: created directory '/var/local'

I have no name!:/#


^ LFS chapter 6.6 - create essential files and syminks


The purpose of the following symbolic links are explained in LFS 8.1 book chapter 6.6:



I have no name!:/# # LFS chapter 6.6 - Creating Essential Files and Symlinks

I have no name!:/# ln -sv /tools/bin/{bash,cat,dd,echo,ln,pwd,rm,stty} /bin
'/bin/bash' -> '/tools/bin/bash'
'/bin/cat' -> '/tools/bin/cat'
'/bin/dd' -> '/tools/bin/dd'
'/bin/echo' -> '/tools/bin/echo'
'/bin/ln' -> '/tools/bin/ln'
'/bin/pwd' -> '/tools/bin/pwd'
'/bin/rm' -> '/tools/bin/rm'
'/bin/stty' -> '/tools/bin/stty'

I have no name!:/# ln -sv /tools/bin/{install,perl} /usr/bin
'/usr/bin/install' -> '/tools/bin/install'
'/usr/bin/perl' -> '/tools/bin/perl'

I have no name!:/# ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
'/usr/lib/libgcc_s.so' -> '/tools/lib/libgcc_s.so'
'/usr/lib/libgcc_s.so.1' -> '/tools/lib/libgcc_s.so.1'

I have no name!:/# ln -sv /tools/lib/libstdc++.{a,so{,.6}} /usr/lib
'/usr/lib/libstdc++.a' -> '/tools/lib/libstdc++.a'
'/usr/lib/libstdc++.so' -> '/tools/lib/libstdc++.so'
'/usr/lib/libstdc++.so.6' -> '/tools/lib/libstdc++.so.6'

I have no name!:/# sed 's/tools/usr/' /tools/lib/libstdc++.la > /usr/lib/libstdc++.la

I have no name!:/# ln -sv bash /bin/sh
'/bin/sh' -> 'bash'

I have no name!:/#


^ Uses of patch during LFS 8.1 chapter 5


Ted noting that as of 2017 later summer, among the Linux From Scratch 8.1 packages there are six which download with associated patch files. These patches are important to apply after un-archiving given package, and before preparing to compile given package:



root:/sources# # Working in LFS chapter 6.22, Installation of Pkg-config

root:/sources# ls *.patch
bash-4.4-upstream_fixes-1.patch   coreutils-8.27-i18n-1.patch  kbd-2.0.4-backspace-1.patch
bzip2-1.0.6-install_docs-1.patch  glibc-2.26-fhs-1.patch       sysvinit-2.88dsf-consolidated-1.patch

root:/sources#


Uses of patch during LFS chapter 5 system build steps:


lfs@localhost:/mnt/lfs$ history | grep patch
   31  ls *patch
   36  vi glibc-2.26-fhs-1.patch
   45  patch -Np1 -i ../glibc-2.26-fhs-1.patch
  194  history | grep patch
  195  patch -Np1 -i ../bash-4.4-upstream_fixes-1.patch
  218  history | grep patch
  219  patch -Np1 -i ../bzip2-1.0.6-install_docs-1.patch
  228  patch -Np1 -i ../coreutils-8.27-i18n-1.patch 
  364  unxz patch-2.7.5.tar.xz 
  365  tar xvf patch-2.7.5.tar 
  367  cd patch-2.7.5
  373  mv patch-2.7.5 z--set-aside/
  501  history | grep patch

lfs@localhost:/mnt/lfs$



^     Aside:  LFS chapter 6.9 - glibc-2.26 programs and libraries

Really interesting section of the LFS 8.1 book here, chapter 6.9, which describes some of the utilities which come with GNU C library project. Quoting this book these utilities include "catchsegv, gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, makedb, mtrace, nscd, pldd, sln, sotruss, sprof, tzselect, xtrace, zdump, and zic".



Here is a snippet of last lines of `make check` on glibc-2.26 package:



scripts/merge-test-results.sh -t /sources/glibc-2.26/build/ subdir-tests.sum \
  . argp assert catgets conform crypt csu ctype debug dirent dlfcn elf gmon gnulib grp gshadow hesiod iconv iconvdata inet intl io libidn libio locale localedata login malloc manual math mathvec misc nis nptl nptl_db nscd nss po posix pwd resolv resource rt setjmp shadow signal socket stdio-common stdlib streams string sunrpc support sysvipc termios time timezone wcsmbs wctype \
  > /sources/glibc-2.26/build/tests.sum
XPASS: elf/tst-protected1a
XPASS: elf/tst-protected1b
UNSUPPORTED: io/tst-open-tmpfile
UNSUPPORTED: nptl/test-cond-printers
UNSUPPORTED: nptl/test-condattr-printers
UNSUPPORTED: nptl/test-mutex-printers
UNSUPPORTED: nptl/test-mutexattr-printers
UNSUPPORTED: nptl/test-rwlock-printers
UNSUPPORTED: nptl/test-rwlockattr-printers
FAIL: posix/tst-getaddrinfo4
FAIL: posix/tst-getaddrinfo5
UNSUPPORTED: stdlib/tst-getrandom
Summary of test results:
      2 FAIL
   4108 PASS
      8 UNSUPPORTED
     29 XFAIL
      2 XPASS
make[1]: *** [Makefile:304: tests] Error 1
make[1]: Leaving directory '/sources/glibc-2.26'
make: *** [Makefile:9: check] Error 2

real    116m41.448s
user    72m16.311s
sys     21m0.223s



^ LFS chapter 6.10 - adjusting toolchain, respecting new glibc

Chapter 6.10 -


root:/sources/glibc-2.26/build# mv -v /tools/bin/{ld,ld-old}
'/tools/bin/ld' -> '/tools/bin/ld-old'

root:/sources/glibc-2.26/build# mv -v /tools/$(uname -m)-pc-linux-gnu/bin/{ld,ld-old}
'/tools/i686-pc-linux-gnu/bin/ld' -> '/tools/i686-pc-linux-gnu/bin/ld-old'

root:/sources/glibc-2.26/build# mv -v /tools/bin/{ld-new,ld}
'/tools/bin/ld-new' -> '/tools/bin/ld'

root:/sources/glibc-2.26/build# ln -sv /tools/bin/ld /tools/$(uname -m)-pc-linux-gnu/bin/ld
'/tools/i686-pc-linux-gnu/bin/ld' -> '/tools/bin/ld'

root:/sources/glibc-2.26/build#



^ LFS chapter 6.16 - binutils-2.29 requires 4.2 GB disk space to test!


Ok we've run into a too small partition for our root LFS file system. 7.6GB was not sufficient, though in an early chapter (chapter 2 or 3 of the LFS 8.1 book) Ted recalls there being word that a partition between five (5) and ten (10) GB would typically be sufficient to compile and install all Linux From Scratch programs. Ted now looking to re-partitioning software options under Linux . . .

Ok, got the partition resized, and then the file system on the root LFS partition resized too. Took a few notes and command line captures, which are in the wiki page titled Resize partition and file system.

Moving on and building binutils-2.29, found two tests to fail during the mandatory `make -k check` step. Failures noted here in case there are problems in later steps of the LFS 8.1 system build process:


make  check-TESTS
make[5]: Entering directory '/sources/binutils-2.29/build/gold/testsuite'
make[6]: Entering directory '/sources/binutils-2.29/build/gold/testsuite'
PASS: incremental_test.sh
PASS: gc_comdat_test.sh
PASS: gc_tls_test.sh
PASS: gc_orphan_section_test.sh
PASS: pr14265.sh
PASS: pr20717.sh
PASS: gc_dynamic_list_test.sh
PASS: icf_test.sh
PASS: icf_keep_unique_test.sh
PASS: icf_safe_test.sh
PASS: icf_safe_pie_test.sh
FAIL: icf_safe_so_test.sh
PASS: final_layout.sh
PASS: text_section_grouping.sh
PASS: section_sorting_name.sh
PASS: icf_preemptible_functions_test.sh
PASS: icf_string_merge_test.sh
PASS: icf_sht_rel_addend_test.sh
PASS: merge_string_literals.sh
PASS: eh_test_2.sh
PASS: two_file_shared.sh
PASS: weak_plt.sh
PASS: copy_test_protected.sh
PASS: tls_pie_test.sh
PASS: i386_mov_to_lea.sh
PASS: file_in_many_sections_test.sh
FAIL: debug_msg.sh


Ted noting that the second failure is noted in LFS 8.1 as a known failure, and doesn't break the overall process or target system building.


- 2017-11-28 - On this Tuesday got LFS Linux kernel to start to boot, via manual invocation at GRUB2 prompt. Unfortunately kernel quickly reached a panic state and stopped, but not all error messages were visible on the low resolution output of the LFS kernel 4.12.7. Ted returning to run `make mrproper; make menuconfig` on kernel again and check whether there are any basic drivers not selected, and how video mode may be improved -- if possible -- via `make menuconfig`. But found now that some of the basic build tools such as GNU portable assembler 'as' are not found in the expected LFS system directories. Needed to return and build binutils-2.29 but try to build and to install it without reference to the LFS chapter 5 temporary /tools directory. Needed to go back further and build `expect` and `tcl` on which binutils, or binutils tests depend.

While testing `expect` ran into an issue of "The system has no more ptys . . ." which LFS book 8.1 explains is critical and must be solved, in order to verify binutils programs work. In Ted's case, it was necessary to again mount a device directory per the chapter 6.2 instruction:


  mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620


Which strangely Ted sure he had already invoked in each of the two shell instances which are chrooted to /mnt/lfs as root of filesystem . . .




^ LFS chapter 6.20, gcc-7-2-.0

Ted noting that after compiling gcc using the new LFS tools from chapter 5, a check that the new gcc of chapter 6 sees correct header files gives slightly lesser results than what's in chapter 6.20. The book and chapter say to expect,


#include <...> search starts here:
 /usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/include
 /usr/local/include
 /usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/include-fixed
 /usr/include


But on our i686 host Ted obtains from the same post-gcc-build test:


root:/sources/gcc-7.2.0/build# grep -B4 '^ /usr/include' dummy.log
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/i686-pc-linux-gnu/7.2.0/include
 /usr/lib/gcc/i686-pc-linux-gnu/7.2.0/include-fixed
 /usr/include
root:/sources/gcc-7.2.0/build#


We're missing /usr/local/include among gcc's search paths. Not sure why, nor whether this is a deal breaker going forward with the LFS 8.1 build - TMH


^ LFS chapter 6.21

To better understand Posix regular expressions, Ted to return and look at differences between old and amended versions of bzip2 makefile here in LFS 8.1 chapter 6.21 . . .



root:/sources/bzip2-1.0.6# patch -Np1 -i ../bzip2-1.0.6-install_docs-1.patch
patching file Makefile
root:/sources/bzip2-1.0.6# sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile
root:/sources/bzip2-1.0.6# cp Makefile makefile-before
root:/sources/bzip2-1.0.6# sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile
root:/sources/bzip2-1.0.6# diff makefile-before Makefile
Makefile            Makefile-libbz2_so  
root:/sources/bzip2-1.0.6# diff makefile-before Makefile
75,76c75,76
<       if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi
<       if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi
---
>       if ( test ! -d $(PREFIX)/share/man ) ; then mkdir -p $(PREFIX)/share/man ; fi
>       if ( test ! -d $(PREFIX)/share/man/man1 ) ; then mkdir -p $(PREFIX)/share/man/man1 ; fi
87,88c87,88
<       cp -f bzip2.1 $(PREFIX)/man/man1
<       chmod a+r $(PREFIX)/man/man1/bzip2.1
---
>       cp -f bzip2.1 $(PREFIX)/share/man/man1
>       chmod a+r $(PREFIX)/share/man/man1/bzip2.1
103,110c103,110
<       cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1
<       chmod a+r $(PREFIX)/man/man1/bzgrep.1
<       chmod a+r $(PREFIX)/man/man1/bzmore.1
<       chmod a+r $(PREFIX)/man/man1/bzdiff.1
<       echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1
<       echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1
<       echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1
<       echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1
---
>       cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/share/man/man1
>       chmod a+r $(PREFIX)/share/man/man1/bzgrep.1
>       chmod a+r $(PREFIX)/share/man/man1/bzmore.1
>       chmod a+r $(PREFIX)/share/man/man1/bzdiff.1
>       echo ".so man1/bzgrep.1" > $(PREFIX)/share/man/man1/bzegrep.1
>       echo ".so man1/bzgrep.1" > $(PREFIX)/share/man/man1/bzfgrep.1
>       echo ".so man1/bzmore.1" > $(PREFIX)/share/man/man1/bzless.1
>       echo ".so man1/bzdiff.1" > $(PREFIX)/share/man/man1/bzcmp.1
root:/sources/bzip2-1.0.6#



^ LFS chapter 6.28, shadow-4.5 . . .

Some notes on configuring shadow-4.5. The following snippet is a summary report from running `./configure --sysconfdir=/etc --with-group-name-max-length=32 --with-libcrack` in the shadow-4.5 sources directory:


config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile

shadow will be compiled with the following features:

        auditing support:               no
        CrackLib support:               yes
        PAM support:                    no
        SELinux support:                no
        ACL support:                    yes
        Extended Attributes support:    yes
        tcb support (incomplete):       no
        shadow group support:           yes
        S/Key support:                  no
        SHA passwords encryption:       yes
        nscd support:                   yes
        subordinate IDs support:        yes

root:/sources/shadow-4.5#



--- break ---

^ standing as of chapter 6.32 - flex-2.6.4 . . .


2017-10-04 - Ted noting that there are mixed ownerships on the most recently installed packages of the LFS build underway and documented here . . .



root@localhost:/mnt/lfs/sources/z--set-aside# ls -l
total 92
drwxr-xr-x 16 root  root    4096 Sep 29 11:04 acl-2.2.52
drwxr-xr-x 16 root  root    4096 Sep 29 10:18 attr-2.4.47
drwxr-xr-x 19 root  root    4096 Sep 27 14:53 binutils-2.29
drwxr-xr-x 14   505 dialout 4096 Sep 29 14:03 bison-3.0.4
drwxr-xr-x  2 root  root    4096 Sep 29 09:37 bzip2-1.0.6
drwxrwxr-x  9   500     500 4096 Sep 29 13:16 cracklib-2.9.6
drwxr-xr-x  8 root  root    4096 Sep 22 13:08 file-5.31
drwxrwxr-x 11 user  user   4096 Sep 29 14:09 flex-2.6.4
drwxrwxr-x 70 root  root    4096 Sep 22 10:48 glibc-2.26
drwxr-xr-x 16 lfs   root    4096 Sep 28 07:10 gmp-6.1.2
drwxr-xr-x  2 root  root    4096 Sep 29 13:58 iana-etc-2.30
drwxr-xr-x  7 root  root    4096 Sep 29 11:07 libcap-2.25
drwxrwxr-x 10 root  root    4096 Sep 22 13:15 m4-1.4.18
drwxr-xr-x 11 user  user   4096 Jul 13 22:28 man-pages-4.12
drwxr-xr-x  6 lfs   lfs     4096 Sep 28 07:36 mpc-1.0.3
drwxr-xr-x  9 user  user   4096 Sep 28 07:26 mpfr-3.1.5
drwxr-xr-x 17 lfs       999 4096 Sep 29 10:12 ncurses-6.0
drwxrwxr-x  6 user  user   4096 Sep 29 10:02 pkg-config-0.29.2
drwxr-xr-x  8 user  user   4096 Sep 29 13:56 psmisc-23.1
drwxrwxr-x  6   286 dialout 4096 Sep 22 13:10 readline-7.0
drwxr-xr-x 10 root  root    4096 Sep 29 11:19 sed-4.4 
drwxrwxr-x 10 user  user   4096 Sep 29 13:28 shadow-4.5
drwxr-xr-x 14   501 dialout 4096 Sep 22 13:06 zlib-1.2.11

root@localhost:/mnt/lfs/sources/z--set-aside#


Was simply looking for latest package compiled and installed, following LFS book 8.1. But instead found permissions to differ. Perhaps some of the installed packages reflect those originally downloaded by the 'lfs' user. For some reason it was necessary to download some packages again after remounting the LFS partition and resuming work following a power-down event over two days' time . . .


--- break ---

^ LFS chapter 6.35 - libtool-2.4.6


Tail end of results from building libtool-2.4.6:



   .
   .
   .
sysroot tests

166: -L=.../lib -l                                   skipped (sysroot.at:203)
167: -L SYSROOT/.../lib -l                           skipped (sysroot.at:204)
168: SYSROOT/.../*.la                                skipped (sysroot.at:205)

Libtool stress test.

169: Link option thorough search test                ok
170: Run tests with low max_cmd_len                  ok

## ------------- ##
## Test results. ##
## ------------- ##

ERROR: 140 tests were run,
65 failed (60 expected failures).
30 tests were skipped.
## -------------------------- ##
## testsuite.log was created. ##
## -------------------------- ##

Please send `tests/testsuite.log' and all information you think might help:

   To: <bug-libtool@gnu.org>
   Subject: [GNU Libtool 2.4.6] testsuite: 123 124 125 126 130 failed

You may investigate any problem if you feel able to do so, in which
case the test suite provides a good starting point.  Its output may
be found below `tests/testsuite.dir'.

make[3]: *** [Makefile:2459: check-local] Error 1
make[3]: Leaving directory '/sources/libtool-2.4.6'
make[2]: *** [Makefile:1897: check-am] Error 2
make[2]: Leaving directory '/sources/libtool-2.4.6'
make[1]: *** [Makefile:1606: check-recursive] Error 1
make[1]: Leaving directory '/sources/libtool-2.4.6'
make: *** [Makefile:1899: check] Error 2
root:/sources/libtool-2.4.6#



^ LFS chapter 6.40 - perl-5.26.0


Tail output from running `make -k test` on perl-5.26.0:



lib/utf8 ....................................................... ok
lib/vars ....................................................... ok
lib/vars_carp .................................................. ok
lib/vmsish ..................................................... ok
lib/warnings ................................................... ok
Failed 9 tests out of 2452, 99.63% okay.
        ../cpan/Compress-Raw-Zlib/t/01version.t
        ../cpan/Compress-Raw-Zlib/t/02zlib.t
        ../cpan/Compress-Raw-Zlib/t/18lvalue.t
        ../cpan/Compress-Raw-Zlib/t/19nonpv.t
        ../cpan/IO-Compress/t/cz-01version.t
        ../cpan/IO-Compress/t/cz-03zlib-v1.t
        ../cpan/IO-Compress/t/cz-06gzsetp.t
        ../cpan/IO-Compress/t/cz-08encoding.t
        ../cpan/IO-Compress/t/cz-14gzopen.t
### Since not all tests were successful, you may want to run some of
### them individually and examine any diagnostic messages they produce.
### See the INSTALL document's section on "make test".
### You have a good chance to get more information by running
###   ./perl harness
### in the 't' directory since most (>=80%) of the tests succeeded.
### You may have to set your dynamic library search path,
### LD_LIBRARY_PATH, to point to the build directory:
###   setenv LD_LIBRARY_PATH `pwd`:$LD_LIBRARY_PATH; cd t; ./perl harness
###   LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd t; ./perl harness
###   export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH; cd t; ./perl harness
### for csh-style shells, like tcsh; or for traditional/modern
### Bourne-style shells, like bash, ksh, and zsh, respectively.
Elapsed: 2050 sec
u=48.13  s=8.22  cu=1549.23  cs=94.46  scripts=2452  tests=1243855
make: *** [makefile:792: test] Error 1

real    34m40.210s
user    27m2.669s
sys     1m45.343s
root:/sources/perl-5.26.0# 



^ LFS chapter 6.43 - autoconf-2.69

<bv /> Tail end of output from running `make check` on autoconf-2.69 project build:



   .
   .
   .

500: AC_HAVE_LIBRARY                                 ok

Compatibility with other tools.

501: Libtool                                         FAILED (foreign.at:61)
502: shtool                                          ok

Autoscan.

503: autoscan                                        FAILED (autoscan.at:44)

## ------------- ##
## Test results. ##
## ------------- ##

ERROR: 450 tests were run,
6 failed (4 expected failures).
53 tests were skipped.
## -------------------------- ##
## testsuite.log was created. ##
## -------------------------- ##

Please send `tests/testsuite.log' and all information you think might help:

   To: <bug-autoconf@gnu.org>
   Subject: [GNU Autoconf 2.69] testsuite: 501 503 failed

You may investigate any problem if you feel able to do so, in which
case the test suite provides a good starting point.  Its output may
be found below `tests/testsuite.dir'.

make[3]: *** [Makefile:596: check-local] Error 1
make[3]: Leaving directory '/sources/autoconf-2.69/tests'
make[2]: *** [Makefile:411: check-am] Error 2
make[2]: Leaving directory '/sources/autoconf-2.69/tests'
make[1]: *** [Makefile:357: check-recursive] Error 1
make[1]: Leaving directory '/sources/autoconf-2.69'
make: *** [Makefile:665: check] Error 2

real    25m15.337s
user    12m47.136s
sys     2m59.419s
root:/sources/autoconf-2.69# 



^ LFS chapter 6.44 - automake-1.15


Tail of test results testing automake-1.15:


   .
   .
   .
PASS: t/depcomp-lt-auto.tap 80 - [absolute VPATH, nostatic] simple make
PASS: t/depcomp-lt-auto.tap 81 - [absolute VPATH, nostatic] clean & rebuild
PASS: t/depcomp-lt-auto.tap 82 - [absolute VPATH, nostatic] generated Plo files look correct
PASS: t/depcomp-lt-auto.tap 83 - [absolute VPATH, nostatic] dependency tracking works
PASS: t/depcomp-lt-auto.tap 84 - [absolute VPATH, nostatic] make distclean
============================================================================
Testsuite summary for GNU Automake 1.15.1
============================================================================
# TOTAL: 2901
# PASS:  2704
# SKIP:  154
# XFAIL: 41
# FAIL:  2
# XPASS: 0
# ERROR: 0
============================================================================
See ./test-suite.log
Please report to bug-automake@gnu.org
============================================================================
make[2]: *** [Makefile:3029: test-suite.log] Error 1
make[2]: Leaving directory '/sources/automake-1.15.1'
make[1]: *** [Makefile:3137: check-TESTS] Error 2
make[1]: Leaving directory '/sources/automake-1.15.1'
make: *** [Makefile:3368: check-am] Error 2

real    116m14.466s
user    103m28.428s
sys     18m55.411s
root:/sources/automake-1.15.1#


^ LFS chapter 6.49 - e2fsprogs-1.43.5


Three tests failing in just-built e2fsprogs . . .



. . .
m_offset: mke2fs with offset option (-E offset=N): ok
f_invalid_bad_inode: check for bogus bad inode: ok
f_h_badnode: hash directory with bad HTREE nodes: ok
337 tests succeeded     3 tests failed
Tests failed: f_del_dup_quota f_quota f_quota_extent_opt 
make[1]: *** [Makefile:367: test_post] Error 1
make[1]: Leaving directory '/sources/e2fsprogs-1.43.5/build/tests'
make: *** [Makefile:394: check-recursive] Error 1
root:/sources/e2fsprogs-1.43.5/build#

.....





^ LFS Chapter 6.73 - cleaning up after builds and future chroot invocations

Following LFS book 8.1 work in chapters 1 through 6, chroot invocations best made with the following parameters. Note too that it may be necessary to precede this command with `sudo` on some Debian and Ubuntu hosts . . .



chroot "$LFS" /usr/bin/env -i              \
    HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin     \
    /bin/bash --login


For easy of copy and paste:


sudo chroot "$LFS" /usr/bin/env -i HOME=/root TERM="$TERM" PS1='\u:\w\$ ' PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash --login




^ Linux From Scratch - Chapter 7 - System Configuration

 
Picking up LFS 8.1 project after reboot, here at start of chapter seven. Must re-mount the LFS root file system, and four file systems under the root mount point at /mnt/lfs. Also must chroot (change root directory for present user) as a prerequisite for carrying out chapter seven configurations. Chroot invocation is given in LFS book 8.1 section 6.73 and is repeated here,


chroot "$LFS" /usr/bin/env -i              \
    HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin     \
    /bin/bash --login

LFS book 8.1 chapter 7 table of contents here:




^ LFS chapter 7.3

Here is an important quote and comment from Linux From Scratch book, regarding kernel and udev naming of detected peripherals and devices:


  "You should not rely upon the kernel device names being stable. Instead, create your
  own rules that make symlinks with stable names based on some stable attributes of the
  device, such as a serial number or the output of various *_id utilities installed by
  Udev."



^ LFS chapter 7.4 - managing devices

Following excerpt of LFS build session shows when last udev rules were created, those other than the role whose name begins with '70-':



root:/lib/udev# bash ./init-net-rules.sh 
root:/lib/udev# ls /etc/udev/rules.d
55-lfs.rules  70-persistent-net.rules  81-cdrom.rules  83-cdrom-symlinks.rules
root:/lib/udev# ls -lt /etc/udev/rules.d
total 16
-rw-r--r-- 1 root root 410 Nov 21 20:55 70-persistent-net.rules
-rw-r--r-- 1 root root 525 Oct  5 15:07 55-lfs.rules
-rw-r--r-- 1 root root 204 Oct  5 15:07 81-cdrom.rules
-rw-r--r-- 1 root root 551 Oct  5 15:07 83-cdrom-symlinks.rules
root:/lib/udev#




^ LFS chapter 7.5 - no notes yet

^ LFS chapter 7.6 - run levels and init script, udev, module loading

This chapter describes:

  • Unix / Linux run levels 0 through 6
  • Udev bootscripts
  • modules loading



^ next LFS chapter . . .

^ LFS chapter 8 - making new system bootable

Linux From Scratch eighth chapter has n sections.



^ LFS chapter 8.1 - introduction

This chapter to cover:

  • creating a file system table file /etc/fstab
  • building a kernel
  • installing Grand Unified Bootloader (GRUB)



^ LFS chapter 8.2 - creation of /etc/fstab

This LFS chapter covers creation of /etc/fstab file system table file.



^ LFS chapter 8.3 - compiling Linux kernel

- Kernel build 1 -

Tail end of kernel building messages:


  CC      arch/x86/boot/version.o
  CC      arch/x86/boot/video-vga.o
  CC      arch/x86/boot/video-vesa.o
  CC      arch/x86/boot/video-bios.o
  LD      arch/x86/boot/setup.elf
  OBJCOPY arch/x86/boot/setup.bin
  OBJCOPY arch/x86/boot/vmlinux.bin
  HOSTCC  arch/x86/boot/tools/build
  BUILD   arch/x86/boot/bzImage
Setup is 15676 bytes (padded to 15872 bytes).
System is 6652 kB
CRC dcb7012a
Kernel: arch/x86/boot/bzImage is ready  (#1)
  Building modules, stage 2.
  MODPOST 18 modules
  CC      drivers/thermal/x86_pkg_temp_thermal.mod.o
  LD [M]  drivers/thermal/x86_pkg_temp_thermal.ko
  CC      fs/efivarfs/efivarfs.mod.o
  LD [M]  fs/efivarfs/efivarfs.ko
  CC      net/ipv4/netfilter/ipt_MASQUERADE.mod.o
  LD [M]  net/ipv4/netfilter/ipt_MASQUERADE.ko
  CC      net/ipv4/netfilter/iptable_nat.mod.o
  LD [M]  net/ipv4/netfilter/iptable_nat.ko
  CC      net/ipv4/netfilter/nf_log_arp.mod.o
  LD [M]  net/ipv4/netfilter/nf_log_arp.ko
  CC      net/ipv4/netfilter/nf_log_ipv4.mod.o
  LD [M]  net/ipv4/netfilter/nf_log_ipv4.ko
  CC      net/ipv4/netfilter/nf_nat_ipv4.mod.o
  LD [M]  net/ipv4/netfilter/nf_nat_ipv4.ko
  CC      net/ipv4/netfilter/nf_nat_masquerade_ipv4.mod.o
  LD [M]  net/ipv4/netfilter/nf_nat_masquerade_ipv4.ko
  CC      net/ipv6/netfilter/nf_log_ipv6.mod.o
  LD [M]  net/ipv6/netfilter/nf_log_ipv6.ko
  CC      net/netfilter/nf_log_common.mod.o
  LD [M]  net/netfilter/nf_log_common.ko
  CC      net/netfilter/nf_nat.mod.o
  LD [M]  net/netfilter/nf_nat.ko
  CC      net/netfilter/nf_nat_ftp.mod.o
  LD [M]  net/netfilter/nf_nat_ftp.ko
  CC      net/netfilter/nf_nat_irc.mod.o
  LD [M]  net/netfilter/nf_nat_irc.ko
  CC      net/netfilter/nf_nat_sip.mod.o
  LD [M]  net/netfilter/nf_nat_sip.ko
  CC      net/netfilter/xt_LOG.mod.o
  LD [M]  net/netfilter/xt_LOG.ko
  CC      net/netfilter/xt_addrtype.mod.o
  LD [M]  net/netfilter/xt_addrtype.ko
  CC      net/netfilter/xt_mark.mod.o
  LD [M]  net/netfilter/xt_mark.ko
  CC      net/netfilter/xt_nat.mod.o
  LD [M]  net/netfilter/xt_nat.ko

real	51m41.223s
user	46m25.550s
sys	3m14.452s
root:/sources/linux-4.12.7# 


- Kernel build 2 - Here Ted selected some additional kernel options, but no option jumped at as being necessary for the kernel to boot properly, which it did not yesterday when loaded manually via GRUB2 command line 'load' command followed by GRUB 'boot' command . . .


  CC      net/netfilter/nf_nat.mod.o
  LD [M]  net/netfilter/nf_nat.ko
  CC      net/netfilter/nf_nat_ftp.mod.o
  LD [M]  net/netfilter/nf_nat_ftp.ko
  CC      net/netfilter/nf_nat_irc.mod.o
  LD [M]  net/netfilter/nf_nat_irc.ko
  CC      net/netfilter/nf_nat_sip.mod.o
  LD [M]  net/netfilter/nf_nat_sip.ko
  CC      net/netfilter/xt_LOG.mod.o
  LD [M]  net/netfilter/xt_LOG.ko
  CC      net/netfilter/xt_addrtype.mod.o
  LD [M]  net/netfilter/xt_addrtype.ko
  CC      net/netfilter/xt_mark.mod.o
  LD [M]  net/netfilter/xt_mark.ko
  CC      net/netfilter/xt_nat.mod.o
  LD [M]  net/netfilter/xt_nat.ko

real	81m49.500s
user	78m34.331s
sys	5m38.665s
root:/sources/linux-4.12.7# 


2017-11-27 - Monday, Ted noting too that we encountered strange problems when running one of the initial `make defconfig` build invocations, verbatim from the LFS book 8.1. The LFS version of hostname returns the name of the encompanssing host on which we're building all LFS components, and not the hostname of the new LFS system. The GNU portable assembler and `expect` utilities also were not in the standard, sanitized LFS system directories, but were only available in $LFS/tools/bin. Ted unsure whether newly compiled kernel and other LFS software components will boot and run properly . . .

When installing kernel modules, Ted noting these messages from kernel make file and supporting configuration, compilation and installation scripts:


root:/sources/linux-4.12.7# make modules_install
  INSTALL drivers/thermal/x86_pkg_temp_thermal.ko
  INSTALL fs/efivarfs/efivarfs.ko
  INSTALL net/ipv4/netfilter/ipt_MASQUERADE.ko
  INSTALL net/ipv4/netfilter/iptable_nat.ko
  INSTALL net/ipv4/netfilter/nf_log_arp.ko
  INSTALL net/ipv4/netfilter/nf_log_ipv4.ko
  INSTALL net/ipv4/netfilter/nf_nat_ipv4.ko
  INSTALL net/ipv4/netfilter/nf_nat_masquerade_ipv4.ko
  INSTALL net/ipv6/netfilter/nf_log_ipv6.ko
  INSTALL net/netfilter/nf_log_common.ko
  INSTALL net/netfilter/nf_nat.ko
  INSTALL net/netfilter/nf_nat_ftp.ko
  INSTALL net/netfilter/nf_nat_irc.ko
  INSTALL net/netfilter/nf_nat_sip.ko
  INSTALL net/netfilter/xt_LOG.ko
  INSTALL net/netfilter/xt_addrtype.ko
  INSTALL net/netfilter/xt_mark.ko
  INSTALL net/netfilter/xt_nat.ko
  DEPMOD  4.12.7
root:/sources/linux-4.12.7#


After second kernel build there are some additional modules to install:

root:/sources/linux-4.12.7# make modules_install
  INSTALL crypto/xor.ko
  INSTALL drivers/block/floppy.ko
  INSTALL drivers/block/null_blk.ko
  INSTALL drivers/char/lp.ko
  INSTALL drivers/char/ppdev.ko
  INSTALL drivers/input/mousedev.ko
  INSTALL drivers/lguest/lg.ko
  INSTALL drivers/parport/parport.ko
  INSTALL drivers/thermal/x86_pkg_temp_thermal.ko
  INSTALL fs/btrfs/btrfs.ko
  INSTALL fs/efivarfs/efivarfs.ko
  INSTALL fs/fuse/cuse.ko
  INSTALL fs/fuse/fuse.ko
  INSTALL fs/jfs/jfs.ko
  INSTALL fs/quota/quota_v1.ko
  INSTALL lib/raid6/raid6_pq.ko
  INSTALL net/ipv4/netfilter/ipt_MASQUERADE.ko
  INSTALL net/ipv4/netfilter/iptable_nat.ko
  INSTALL net/ipv4/netfilter/nf_log_arp.ko
  INSTALL net/ipv4/netfilter/nf_log_ipv4.ko
  INSTALL net/ipv4/netfilter/nf_nat_ipv4.ko
  INSTALL net/ipv4/netfilter/nf_nat_masquerade_ipv4.ko
  INSTALL net/ipv6/netfilter/nf_log_ipv6.ko
  INSTALL net/netfilter/nf_log_common.ko
  INSTALL net/netfilter/nf_nat.ko
  INSTALL net/netfilter/nf_nat_ftp.ko
  INSTALL net/netfilter/nf_nat_irc.ko
  INSTALL net/netfilter/nf_nat_sip.ko
  INSTALL net/netfilter/xt_LOG.ko
  INSTALL net/netfilter/xt_addrtype.ko
  INSTALL net/netfilter/xt_mark.ko
  INSTALL net/netfilter/xt_nat.ko
  DEPMOD  4.12.7
root:/sources/linux-4.12.7#


^ edit point

Preparing for further installation of LFS system files, now mounting LFS boot partition so that it appears in the LFS environment as a mounted file system. This command we run at a host prompt, not an LFS shell nor prompt:


 $ sudo mount --bind /boot /mnt/lfs/boot


Then checking at an LFS shell we see the newly mounted boot partition:


root:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb5        17G  6.4G  9.8G  40% /
udev             10M     0   10M   0% /dev
tmpfs          1013M     0 1013M   0% /run
/dev/sda1        56G   13G   40G  25% /boot
root:/#


Ok, so we did this a couple days ago and noticed early on that when following the LFS book instructions to copy the newly compiled kernel, the new kernel ended up on the host system's /boot file system and not on the LFS /boot partition, which isn't mounted. In fact the output of `df -h` just above shows that our LFS chroot environment sees /dev/sda1 as its /boot file system, when that should be /dev/sdb1. We fixed that, however, unmounting /dev/sda1 from /boot and mounting /dev/sdb1 to /boot. But in which environment did we do the corrected mount?

As user root in the LFS chroot environment, mounting /dev/sdb1 to /boot results in root then seeing the following LFS environment mounts:

root:/sources/linux-4.12.7# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb5        17G  7.9G  8.3G  49% /
udev             10M     0   10M   0% /dev
tmpfs          1013M     0 1013M   0% /run
/dev/sdb1        99M   16M   79M  17% /boot
root:/sources/linux-4.12.7#


The host system and its normal user then see mounts (filtering for sd type disks):

ted@localhost:~/Desktop$ mount | grep sd
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered)
/dev/sda6 on /home type ext4 (rw,relatime,user_xattr,barrier=1,data=ordered)
/dev/sdb5 on /mnt/lfs type ext4 (rw,relatime,user_xattr,barrier=1,data=ordered)
/dev/sdb1 on /mnt/lfs/boot type ext4 (rw,relatime,user_xattr,barrier=1,data=ordered)
ted@localhost:~/Desktop$



^ LFS chapter 8.4 - installing GRUB bootloader

From the LFS book:


    "GRUB2 names drives and partitions in the form of (hdn,m), where n is an integer starting at zero and m is integer starting at 1 . . ."


In our LFS environment we have:

root:/boot# grub-install -V
grub-install (GRUB) 2.02
root:/boot#


References for GRUB 2:



^ next LFS chapter . . .

^ next LFS chapter . . .

^ First Boot Into New LFS System

- 2017-11-29 - Wednesday is today and the first boot into the new LFS system, present host name 'lfs-8.1' shows basic Linux hardware drivers working. Corrected /boot/grub/grub.cnf and /etc/fstab files able to boot the system, and get the root file system mounted at / and swap initialized and in use by the new operating system instance. During boot the network interface is detected and first named 'eth0' and then renamed 'eth3'. Manual addition of /etc/sysconfig/ifconfig.eth3 permits bringing up the sole network interface on the hosting hardware.

Learned a really useful and basic basic networking command to connect to subnets beyond the subnet assigned to a given network interface. Command is of the form:

  # ip route add <subnet x.x.x.0>[/8|16|24] via <subnet assigned to interface> on <interface device name>

As a regular user we must prepend `sudo` to invocations of this command, and it appears that when there's only one configured network interface that we may drop the 'on device_name' tokens at the end of the command:

  $ sudo ip route add 10.166.250.0/24 via 10.166.253.254

Learned as well that a user can issue a simpler command to see the local host's IP routine table:


  # ip route


See the second external reference to networking in the local NN wiki article at Linux Administration topics.

So couple observations on the new LFS 8.1 system, we don't have an ssh client and we don't have wget to easily download packages and project source tarballs. We're also missing scp and rsync. So we may need to send a file to this LFS host in order to have one tool which lets us pull files from the world onto the new host . . .


Ted also noting that default video support is at a low resolution, system provides 25 lines by 80 columns text. How can we adjust this? - TMH



^ Dependencies of openssh

Ted making notes here of openssh dependencies in new LFS system. Working to install openssl, openssh and wget . . .



^ Beyond Linux From Scratch

Beyond Linux From Scratch network and computer security chapter:






- - - top of page - - -