Difference between revisions of "User:Ted"
m (→^ Linux From Scratch (LFS) project) |
m (→^ Linux From Scratch (LFS) Project - 8.1 Release) |
||
Line 363: | Line 363: | ||
</pre> | </pre> | ||
+ | |||
+ | |||
+ | |||
+ | <!-- comment --> | ||
+ | |||
+ | === [[#top|^]] <!--LFS 8.1--> chapter 6.2 - preparing virtual kernel file systems === | ||
+ | |||
+ | <br /> | ||
+ | Specific mount invocations mentioned in chapter 6.2: | ||
+ | |||
+ | |||
+ | <pre> | ||
+ | |||
+ | 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 | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | |||
+ | Ted's test of cut-and-paste text to permit running all five mount invocations with one text copy action: | ||
+ | |||
+ | <pre> | ||
+ | |||
+ | 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 | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | <!-- comment --> | ||
+ | |||
+ | === [[#top|^]] <!--LFS 8.1--> chapter 6. - entering the chroot environment === | ||
Revision as of 18:23, 4 October 2017
-- 2017-07-21 शुक्रवार --
Ted's page on Neela Nurseries Wiki
Contents
- 1 OVERVIEW
- 2 Web Site Building Blocks - Summer 2017 Work
- 3 ^ Linux Packages
- 4 ^ Bash Shell Scripting
- 5 ^ Aboriginal Linux
- 6 ^ Linux From Scratch (LFS) Project - 8.1 Release
- 6.1 ^ First mount and build steps
- 6.2 ^ chapter 6.2 - preparing virtual kernel file systems
- 6.3 ^ chapter 6. - entering the chroot environment
- 6.4 ^ chapter 5.5 - gcc first pass
- 6.5 ^ LFS 8.1 chapter 6.5 - create new system directories
- 6.6 ^ LFS 8.1 chapter 6.6 - create essential files and syminks
- 6.7 ^ Uses of patch during LFS 8.1 chapter 5
- 6.8 ^ Aside: LFS 8.1 chapter 6.9 - glibc-2.26 programs and libraries
- 6.9 ^ LFS 8.1 chapter 6.10 - adjusting toolchain, respecting new glibc
- 6.10 ^ LFS 8.1 chapter 6.16 - binutils-2.29 requires 4.2 GB disk space!
- 6.11 ^ LFS 8.1 chapter 6.20, gcc-7-2-.0
- 6.12 ^ LFS 8.1 chapter 6.21
- 6.13 ^ LFS 8.1 chapter 6.28, shadow-4.5 . . .
- 6.14 ^ next LFS chapter . . .
- 7 ^ QEMU Emulator
- 8 ^ Python Scripting Language
- 9 ^ Other Things To Explore
- 10 ^ References
OVERVIEW
This wiki document a starting point of Ted's notes on Linux use and configuration, Open Source Software and web development. Recent summer 2017 efforts of Ted's are focused on several high-level programming language and web development frameworks, which can be studied and used separately but are often glued together to achieve meaningful tasks and end-user tools and interfaces. This personal page of Ted's notes on Neela Nurseries wiki not yet well organized, but here as a quick stash point for holding useful references, and a starting point for more complete and formal documentation.
Web Site Building Blocks - Summer 2017 Work
The following tools and web and programming frameworks are all part of Ted's volunteer efforts with ASI web site, and in-progress study of how to configure and customize shopping carts, article and document management pages, and easy-to-read easy-to-adjust web page layouts using CSS and third party, open source frameworks:
- Linux package selection for constrained systems
- MYSQL data base install and config (set up)
- PHP set up
- Apache2 set up
- SSL Self-signed certificate creation and config
- Sub-domain creation under Ubuntu 16.04 LTS and similar Linux releases
- Mediawiki work . . .
- Install and config
- Back-up and restore steps
- Troubleshooting
- Install and config
- OpenCart 2.x install and config, 'Wish List' and 'To Do List' . . .
These are the first topics on which Ted wants to gather together notes. Hard to remember all details regarding pitfalls encountered, solutions found, and ideas for improving the configuration and use experience of these softwares . . . - TMH
^ Linux Packages
- 2017-07-31 सोमवार -
This section a starting point for notes on Linux packages, namely Debian and Ubuntu packages. Focus here is on userland software, and which packages are needed to set up various tools sets in a working Unix / Linux environment . . .
- libreoffice-base
- postfix . . . see section below
- gpm
- ctags
- vim-doc
- vim-scripts
- xfonts-cyrillic
- devhelp
- distcc . . . distributed compiling of C and C++ programs across multiple machines
^ Postfix
^ Linux packages for Raspberry Pi system
^ Logitech wireless devices and unifying receiver
^ sudo
Ted noting sudo manual page URL here, in order to revisit and read about sudo -e
as well as sudo invoked with the -l
and -v
options. Also noting there is an environment variable sometimes set, variable named $SUDO_USER
.
^ parted partition editor
Some excerpts from parted use on LFS volume . . .
(parted) print /dev/sdb Model: ATA ST3160812AS (scsi) Disk /dev/sdb: 160GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 32.3kB 107MB 107MB primary ext4 boot 2 107MB 7789MB 7682MB extended 5 107MB 7789MB 7682MB logical ext4 . . .
Well one thing Ted noting is that parted cannot resize file systems, which are the structured data which overlay and live in partitions. The partition is one thing, mapped in a partition table somewhere on the physical disk or volume. The file system on a given partition is another thing, contained and bounded within that partition. Resizing the partition doesn't resize the file system. So which tool can deal with resizing a partition on which an ext4 file system exists? And then permit a next, independent step to resize the file system there? - TMH
^ Bash Shell Scripting
Shell scripting and use of built-in shell commands is a really practical knowledge to employ, when working in Unix-like environments. One common task is to find all the instances of a given file or program. The locate
command can perform this kind of search, but it's results don't show whether the file instances differ. To check at the rough level of file size, we can use a one-line shell script technique involving shell piping, to "long list" the results of the locate
command, like this . . .
$ for file in `locate tavrasm | grep 'asm$'`; do ls -l ${file}; done
Hmm strange, the above command calls `grep` with a pattern that ends in the shell end-of-line anchoring character $, and appears to filter for results of `locate` which end in 'asm'. But on 2017-09-12 needed to add a "one or more wildcard" character pattern to limit search results for instances of `locate` results ending in 'qemu':
$ locate qemu | grep '.*qemu$'
Why the apparent difference in command invocation? Need to test . . . - TMH
^ Aboriginal Linux
Ok, looks like Robert Landley's Aboriginal Linux project has been superceded by mkroot. Ladnley's newer makeroot project sources are available at GitHub:
Having trouble carrying out the basic build of Aboriginal Linux with armv6l as target . . .
. . . Confirmed e2fsprogs-1.42.13.tar.gz Confirmed zlib-1.2.7.tar.bz2 Confirmed squashfs-4.2.tar.gz === Got all source. real 0m2.240s user 0m1.188s sys 0m0.176s === toybox (host host-tools) Snapshot 'toybox'... scripts/genconfig.sh cc -o kconfig/conf kconfig/conf.c kconfig/zconf.tab.c -DKBUILD_NO_NLS=1 \ -DPROJECT_NAME=\"ToyBox\" kconfig/conf -D /dev/null Config.in > /dev/null scripts/make.sh Generate headers from toys/*/*.c... generated/newtoys.h Library probe....... Make generated/config.h from .config. generated/flags.h generated/globals.h generated/help.h Compile toybox................................................................................................................................................................generated/obj/nsenter.o: In function `unshare_main': nsenter.c:(.text.unshare_main+0x152): undefined reference to `setns' collect2: error: ld returned 1 exit status make: *** [toybox] Error 1 Exiting due to errors (host host-tools toybox)
Robert Landley also has a presence on www.patreon.com/landley, where he talks about the over-arching goals in his programming and software systems level work.
^ Linux From Scratch (LFS) Project - 8.1 Release
- 2017-09-26 - Ted soon to move these Linux From Scratch notes to a linux_from_scratch separate Linux From Scratch wiki page.
Here are notes by Ted, beginning work to build a 'Linux From Scratch' system crossed-compiled for the ARM architecture, in a way suitable to run with complete function 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. 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 . . .
^ 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:
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 *
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 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 2017-09-25 Monday Ted noting history of mounts, which were completed prior to software compilations in chapter 6:
ted@localhost:~$ echo $LFS /mnt/lfs ted@localhost:~$ history | grep mount . . . 556 sudo mount -v -t ext4 /dev/sdb5 /mnt/lfs 673 history | grep mount 674 sudo mount -v -t ext4 /dev/sdb5 /mnt/lfs 779 mount 939 mount 976 sudo mount -v --bind /dev $LFS/dev 977 sudo mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620 978 mount -vt proc proc $LFS/proc 979 sudo mount -vt proc proc $LFS/proc 980 sudo mount -vt sysfs sysfs $LFS/sys 981 sudo mount -vt tmpfs tmpfs $LFS/run 986 mount 988 sudo umount /mnt/lfs 1001 history | grep mount ted@localhost:~$
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:~$
^ chapter 6.2 - preparing virtual kernel file systems
Specific mount invocations mentioned in chapter 6.2:
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
Ted's test of cut-and-paste text to permit running all five mount invocations with one text copy action:
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
^ chapter 6. - entering the chroot environment
^ 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 8.1 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 8.1 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 book 8.1, chapter 6.6 . . . 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 8.1 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 8.1 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 8.1 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 8.1 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 8.1 chapter 6.16 - binutils-2.29 requires 4.2 GB disk space!
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.
^ LFS 8.1 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 8.1 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 8.1 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#
^ next LFS chapter . . .
^ QEMU Emulator
Notes on QEMU, an emulator which can help with building and configuring Linux systems to run on embedded computers and development boards. Ted noting 2017-09-08 that to compile today's latest QEMU source, a 2.10.x release, needed to install Debian stretch packages pkg-config, libglib2.0-dev, dhautoreconf. Here are some links to downloading QEMU project sources, a manual for using QEMU, and an article about emulating a RaspberryPi system by using QEMU:
- QEMU Emulator, source code download site
- QEMU manual
- Emulating Raspberry Pi under Linux, Embedonix article
So got QEMU 2.10.0 sources and dependencies installed, ran `configure` and `make` steps, and let the build process run for an hour or two. But in the end could not find any `qemu` executable. Why is the emulator itself apparently missing? Building latest QEMU under Linux . . .
So I'm following the above article author's typical build steps, and run into this message part-way down those steps, at the step of calling `make`:
user@host-6:~/Downloads/qemu/qemu-2.10.0/bin/debug/native$ make Makefile:21: *** This is an out of tree build but your source tree (/home/veris/Downloads/qemu/qemu-2.10.0) seems to have been used for an in-tree build. You can fix this by running "make distclean && rm -rf *-linux-user *-softmmu" in your source tree. Stop. user@host-6:~/Downloads/qemu/qemu-2.10.0/bin/debug/native$
Ok interesting, I know that QEMU is a complicated project with a complex build process, but clearly I don't know what I'm doing. Following the above 'distclean' command given in the error message from QEMU's makefile, I'm now able to begin an "out of tree" build as described in the "Building QEMU" article at qemu.org just above. Tired already however of QEMU project builds taking more than an hour to complete. Here is one of many articles describing how to invoke `make` to build only limited parts of QEMU project, for example just the pieces needed to emulate ARM type systems:
Ted to test this type of build soon . . .
On a different note, QEMU build has completed and the stock RaspberryPi Debian "Stretch" image is coming up. Needed to install a VNC client to interact with the emulated RaspberryPi operating and software, stored in the downloaded .img file from Rpi's web site. Here's a link to a forum post which clued Ted into Remmina VNC client:
^ Python Scripting Language
^ Other Things To Explore
Dublin Core . . .
- Dublin Core documents, referenced by Drupal default rss.xml feed page
- Dublin Core article on Wikipedia
- Dublin Core Generator
3D Graphics, mathematics behind and programming:
PC Video, Bochs VBE Extensions:
Webvanta:
Unix and Linux building blocks:
- nss, Name Service Switch
- "Burrows-Wheeler block sorting text compression algorithm", noted 2017-09-29 FRI from LFS 8.1 chapter 6.21 - TMH
^ References
Reproducible builds, byte-wise reproducible software:
Apache2 configuration:
Couple of MediaWiki and publishing issues to look into, which came up during wiki configuration:
- https://www.medihttps://alta-ubuntu.veris.com/wiki/index.php/Main_Pageawiki.org/wiki/Manual:User_rights
- https://creativecommons.org/licenses/by-sa/3.0/
- https://choosealicense.com/
Some Hindi language and UTF-8 encoding references, to be factored to a dedicated wiki page later:
- http://jrgraphix.net/r/Unicode/0900-097F
- http://hindilearner.com/hindi_words_phrases/hindi_words_time_days.html
- http://www.learning-hindi.com/post/3072325702/lesson-91-%E0%A4%B8%E0%A4%AA-%E0%A4%A4-%E0%A4%B9-%E0%A4%95-%E0%A4%A6-%E0%A4%A8-days-of-the-week
Linux programs and utilities:
- https://fedoramagazine.org/17-alternatives-to-your-default-image-viewer-on-fedora/
- https://users.cs.cf.ac.uk/Dave.Marshall/C/node33.html
- resize2fs util to resize ext2, ext3, ext4 type partitions
- shell script 'runtest' provided by package dejagnu