From fcc027677da55c41dcaea045f5b9ff8b088e6495 Mon Sep 17 00:00:00 2001 From: Bruce Dubbs Date: Sun, 7 Jun 2020 20:16:00 +0000 Subject: Initial commit of alternative cross LFS git-svn-id: http://svn.linuxfromscratch.org/LFS/branches/cross2@11897 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689 --- chapter10/chapter10.xml | 19 +++ chapter10/fstab.xml | 125 ++++++++++++++ chapter10/grub.xml | 191 +++++++++++++++++++++ chapter10/introduction.xml | 18 ++ chapter10/kernel.xml | 403 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 756 insertions(+) create mode 100644 chapter10/chapter10.xml create mode 100644 chapter10/fstab.xml create mode 100644 chapter10/grub.xml create mode 100644 chapter10/introduction.xml create mode 100644 chapter10/kernel.xml (limited to 'chapter10') diff --git a/chapter10/chapter10.xml b/chapter10/chapter10.xml new file mode 100644 index 000000000..d7236b21c --- /dev/null +++ b/chapter10/chapter10.xml @@ -0,0 +1,19 @@ + + + %general-entities; +]> + + + + + + Making the LFS System Bootable + + + + + + + diff --git a/chapter10/fstab.xml b/chapter10/fstab.xml new file mode 100644 index 000000000..ebfae3aaf --- /dev/null +++ b/chapter10/fstab.xml @@ -0,0 +1,125 @@ + + + %general-entities; +]> + + + + + Creating the /etc/fstab File + + + /etc/fstab + + + The /etc/fstab file is used by some programs to + determine where file systems are to be mounted by default, in which order, and + which must be checked (for integrity errors) prior to mounting. Create a new + file systems table like this: + +cat > /etc/fstab << "EOF" +# Begin /etc/fstab + +# file system mount-point type options dump fsck +# order + +/dev/<xxx> / <fff> defaults 1 1 +/dev/<yyy> swap swap pri=1 0 0 +proc /proc proc nosuid,noexec,nodev 0 0 +sysfs /sys sysfs nosuid,noexec,nodev 0 0 +devpts /dev/pts devpts gid=5,mode=620 0 0 +tmpfs /run tmpfs defaults 0 0 +devtmpfs /dev devtmpfs mode=0755,nosuid 0 0 + +# End /etc/fstab +EOF + +cat > /etc/fstab << "EOF" +# Begin /etc/fstab + +# file system mount-point type options dump fsck +# order + +/dev/<xxx> / <fff> defaults 1 1 +/dev/<yyy> swap swap pri=1 0 0 + +# End /etc/fstab +EOF + + Replace <xxx>, + <yyy>, and <fff> + with the values appropriate for the system, for example, sda2, sda5, and ext4. For details on the six + fields in this file, see man 5 fstab. + + Filesystems with MS-DOS or Windows origin (i.e. vfat, ntfs, smbfs, + cifs, iso9660, udf) need a special option, utf8, in order for non-ASCII + characters in file names to be interpreted properly. For non-UTF-8 locales, + the value of should be set to be the same as the + character set of the locale, adjusted in such a way that the kernel + understands it. This works if the relevant character set definition (found + under File systems -> Native Language Support when configuring the kernel) + has been compiled into the kernel or built as a module. However, if the + character set of the locale is UTF-8, the corresponding option + would make the file system case sensitive. To + fix this, use the special option instead of + , for UTF-8 locales. The + codepage option is also needed for vfat and smbfs filesystems. + It should be set to the codepage number used under MS-DOS in your country. + For example, in order to mount USB flash drives, a ru_RU.KOI8-R user would + need the following in the options portion of its mount line in + /etc/fstab: + +noauto,user,quiet,showexec,codepage=866,iocharset=koi8r + + The corresponding options fragment for ru_RU.UTF-8 users is: + +noauto,user,quiet,showexec,codepage=866,utf8 + + Note that using is the default for + iso8859-1 (which keeps the file system case + insensitive), and the option tells + the kernel to convert the file names using UTF-8 so they can be + interpreted in the UTF-8 locale. + + + + It is also possible to specify default codepage and iocharset values for + some filesystems during kernel configuration. The relevant parameters + are named + Default NLS Option (, + Default Remote NLS Option (), + Default codepage for FAT (), and + Default iocharset for FAT (). + There is no way to specify these settings for the + ntfs filesystem at kernel compilation time. + + It is possible to make the ext3 filesystem reliable across power + failures for some hard disk types. To do this, add the + mount option to the appropriate entry in + /etc/fstab. To check if the disk drive supports + this option, run + hdparm + on the applicable disk drive. For example, if: + +hdparm -I /dev/sda | grep NCQ + + returns non-empty output, the option is supported. + + Note: Logical Volume Management (LVM) based partitions cannot use the + option. + + diff --git a/chapter10/grub.xml b/chapter10/grub.xml new file mode 100644 index 000000000..d6897d5e5 --- /dev/null +++ b/chapter10/grub.xml @@ -0,0 +1,191 @@ + + + %general-entities; +]> + + + + + + grub + &grub-version; +
&grub-url;
+
+ + Using GRUB to Set Up the Boot Process + + + Introduction + + Configuring GRUB incorrectly can render your system + inoperable without an alternate boot device such as a CD-ROM. This + section is not required to boot your LFS system. You may just + want to modify your current boot loader, e.g. Grub-Legacy, GRUB2, or + LILO. + + + Ensure that an emergency boot disk is ready to rescue + the computer if the computer becomes unusable (un-bootable). If you do not + already have a boot device, you can create one. In order for the procedure + below to work, you need to jump ahead to BLFS and install + xorriso from the + libisoburn package. + +cd /tmp +grub-mkrescue --output=grub-img.iso +xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso + + + + To boot LFS on host systems that have UEFI enabled, the kernel needs to + have been built with the CONFIG_EFI_STUB capabality described in the + previous section. However, LFS can be booted using GRUB2 without such + an addition. To do this, the UEFI Mode and Secure Boot capabilities in + the host system's BIOS need to be turned off. For details, see + the lfs-uefi.txt hint at + &hints-root;lfs-uefi.txt. + + + + + + + GRUB Naming Conventions + + GRUB uses its own naming structure for drives and partitions in + the form of (hdn,m), where n + is the hard drive number and m is the partition + number. The hard drive number starts from zero, but the partition number + starts from one for normal partitions and five for extended partitions. + Note that this is different from earlier versions where + both numbers started from zero. For example, partition sda1 is (hd0,1) to + GRUB and sdb3 is + (hd1,3). In contrast to Linux, GRUB does not + consider CD-ROM drives to be hard drives. For example, if using a CD + on hdb and a second hard drive + on hdc, that second hard drive + would still be (hd1). + + + + + Setting Up the Configuration + + GRUB works by writing data to the first physical track of the + hard disk. This area is not part of any file system. The programs + there access GRUB modules in the boot partition. The default location + is /boot/grub/. + + The location of the boot partition is a choice of the user that + affects the configuration. One recommendation is to have a separate small + (suggested size is 100 MB) partition just for boot information. That way + each build, whether LFS or some commercial distro, can access the same boot + files and access can be made from any booted system. If you choose to do + this, you will need to mount the separate partition, move all files in the + current /boot directory (e.g. the + linux kernel you just built in the previous section) to the new partition. + You will then need to unmount the partition and remount it as /boot. If you do this, be sure to update + /etc/fstab. + + Using the current lfs partition will also work, but configuration + for multiple systems is more difficult. + + Using the above information, determine the appropriate + designator for the root partition (or boot partition, if a separate + one is used). For the following example, it is assumed that the root + (or separate boot) partition is sda2. + + Install the GRUB files into /boot/grub and set up the boot track: + + + The following command will overwrite the current boot loader. Do not + run the command if this is not desired, for example, if using a third party + boot manager to manage the Master Boot Record (MBR). + + +grub-install /dev/sda + + + If the system has been booted using UEFI, + grub-install will try to install files for the + x86_64-efi target, but those files + have not been installed in chapter 6. If this is the case, add + to the command above. + + + + + + + Creating the GRUB Configuration File + + Generate /boot/grub/grub.cfg: + + cat > /boot/grub/grub.cfg << "EOF" +# Begin /boot/grub/grub.cfg +set default=0 +set timeout=5 + +insmod ext2 +set root=(hd0,2) + +menuentry "GNU/Linux, Linux &linux-version;-lfs-&version;" { + linux /boot/vmlinuz-&linux-version;-lfs-&version; root=/dev/sda2 ro +} +EOF + + cat > /boot/grub/grub.cfg << "EOF" +# Begin /boot/grub/grub.cfg +set default=0 +set timeout=5 + +insmod ext2 +set root=(hd0,2) + +menuentry "GNU/Linux, Linux &linux-version;-lfs-&versiond;" { + linux /boot/vmlinuz-&linux-version;-lfs-&versiond; root=/dev/sda2 ro +} +EOF + + + From GRUB's perspective, the + kernel files are relative to the partition used. If you + used a separate /boot partition, remove /boot from the above + linux line. You will also need to change the + set root line to point to the boot partition. + + + GRUB is an extremely powerful program and it provides a tremendous + number of options for booting from a wide variety of devices, operating + systems, and partition types. There are also many options for customization + such as graphical splash screens, playing sounds, mouse input, etc. The + details of these options are beyond the scope of this introduction. + + There is a command, grub-mkconfig, that + can write a configuration file automatically. It uses a set of scripts in + /etc/grub.d/ and will destroy any customizations that you make. These scripts + are designed primarily for non-source distributions and are not recommended for + LFS. If you install a commercial Linux distribution, there is a good chance + that this program will be run. Be sure to back up your grub.cfg file. + + + +
diff --git a/chapter10/introduction.xml b/chapter10/introduction.xml new file mode 100644 index 000000000..5cb40b882 --- /dev/null +++ b/chapter10/introduction.xml @@ -0,0 +1,18 @@ + + + %general-entities; +]> + + + + + Introduction + + It is time to make the LFS system bootable. This chapter + discusses creating an fstab file, building a + kernel for the new LFS system, and installing the GRUB boot loader so + that the LFS system can be selected for booting at startup. + + diff --git a/chapter10/kernel.xml b/chapter10/kernel.xml new file mode 100644 index 000000000..0033028cf --- /dev/null +++ b/chapter10/kernel.xml @@ -0,0 +1,403 @@ + + + %general-entities; +]> + + + + + + kernel + &linux-version; +
&linux-url;
+
+ + Linux-&linux-version; + + + Linux + + + + + + <para>The Linux package contains the Linux kernel.</para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&linux-ch8-sbu;</seg> + <seg>&linux-ch8-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of the kernel + + Building the kernel involves a few steps—configuration, + compilation, and installation. Read the README file + in the kernel source tree for alternative methods to the way this book + configures the kernel. + + Prepare for compilation by running the following command: + +make mrproper + + This ensures that the kernel tree is absolutely clean. The + kernel team recommends that this command be issued prior to each + kernel compilation. Do not rely on the source tree being clean after + un-tarring. + + + + Configure the kernel via a menu-driven interface. For general + information on kernel configuration see . BLFS has some information + regarding particular kernel configuration requirements of packages outside + of LFS at . Additional + information about configuring and building the kernel can be found at + + + + + A good starting place for setting up the kernel configuration is to + run make defconfig. This will set the base + configuration to a good state that takes your current system architecture + into account. + + Be sure to enable/disable/set the following features or the system might + not work correctly or boot at all: + + +Device Drivers ---> + Generic Driver Options ---> + [ ] Support for uevent helper [CONFIG_UEVENT_HELPER] + [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS] + +Kernel hacking ---> + Choose kernel unwinder (Frame pointer unwinder) ---> [CONFIG_UNWINDER_FRAME_POINTER] + + +General setup --> + [*] Control Group support [CONFIG_CGROUPS] + [ ] Enable deprecated sysfs features to support old userspace tools [CONFIG_SYSFS_DEPRECATED] + [*] Configure standard kernel features (expert users) [CONFIG_EXPERT] ---> + [*] open by fhandle syscalls [CONFIG_FHANDLE] + [ ] Auditing support [CONFIG_AUDIT] +Processor type and features ---> + [*] Enable seccomp to safely compute untrusted bytecode [CONFIG_SECCOMP] +Firmware Drivers ---> + [*] Export DMI identification via sysfs to userspace [CONFIG_DMIID] +Networking support ---> + Networking options ---> + <*> The IPv6 protocol [CONFIG_IPV6] +Device Drivers ---> + Generic Driver Options ---> + [ ] Support for uevent helper [CONFIG_UEVENT_HELPER] + [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS] + Firmware Loader ---> + [ ] Enable the firmware sysfs fallback mechanism [CONFIG_FW_LOADER_USER_HELPER] +File systems ---> + [*] Inotify support for userspace [CONFIG_INOTIFY_USER] + <*> Kernel automounter support (supports v3, v4, and v5) [CONFIG_AUTOFS_FS] + Pseudo filesystems ---> + [*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL] + [*] Tmpfs extended attributes [CONFIG_TMPFS_XATTR] + + + + While "The IPv6 Protocol" is not strictly + required, it is highly recommended by the systemd developers. + + + There are several other options that may be desired + depending on the requirements for the system. For a list of options needed + for BLFS packages, see the BLFS + Index of Kernel Settings + (&lfs-root;blfs/view/&short-version;/longindex.html#kernel-config-index). + + + If your host hardware is using UEFI, then the 'make defconfig' + above should automatically add in some EFI-related kernel options. + + In order to allow your LFS kernel to be booted from within your + host's UEFI boot environment, your kernel must have this option + selected: + +Processor type and features ---> + [*] EFI stub support [CONFIG_EFI_STUB] + + A fuller description of managing UEFI environments from within LFS + is covered by the lfs-uefi.txt hint at + . + + + + + The rationale for the above configuration items: + + + Support for uevent helper + + Having this option set may interfere with device + management when using Udev/Eudev. + + + + + Maintain a devtmpfs + + This will create automated device nodes which are populated by the + kernel, even without Udev running. Udev then runs on top of this, + managing permissions and adding symlinks. This configuration + item is required for all users of Udev/Eudev. + + + + + +make menuconfig + + + The meaning of optional make environment variables: + + + LANG=<host_LANG_value> LC_ALL= + + This establishes the locale setting to the one used on the + host. This may be needed for a proper menuconfig ncurses interface + line drawing on a UTF-8 linux text console. + + If used, be sure to replace + <host_LANG_value> by the value of + the $LANG variable from your host. You can + alternatively use instead the host's value of $LC_ALL + or $LC_CTYPE. + + + + + + Alternatively, make oldconfig may be more + appropriate in some situations. See the README + file for more information. + + If desired, skip kernel configuration by copying the kernel + config file, .config, from the host system + (assuming it is available) to the unpacked linux-&linux-version; directory. However, + we do not recommend this option. It is often better to explore all the + configuration menus and create the kernel configuration from + scratch. + + Compile the kernel image and modules: + +make + + If using kernel modules, module configuration in /etc/modprobe.d may be required. + Information pertaining to modules and kernel configuration is + located in and in the kernel + documentation in the linux-&linux-version;/Documentation directory. + Also, modprobe.d(5) may be of interest. + + Unless module support has been disabled in the kernel configuration, + install the modules with: + +make modules_install + + After kernel compilation is complete, additional steps are + required to complete the installation. Some files need to be copied to + the /boot directory. + + + If the host system has a separate /boot partition, the files copied + below should go there. The easiest way to do that is to bind /boot on the + host (outside chroot) to /mnt/lfs/boot before proceeding. As the root + user in the host system: + +mount --bind /boot /mnt/lfs/boot + + + The path to the kernel image may vary depending on the platform being + used. The filename below can be changed to suit your taste, but the stem of + the filename should be vmlinuz to be compatible with + the automatic setup of the boot process described in the next section. The + following command assumes an x86 architecture: + +cp -iv arch/x86/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&version; + +cp -iv arch/x86/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&versiond; + + System.map is a symbol file for the kernel. + It maps the function entry points of every function in the kernel API, + as well as the addresses of the kernel data structures for the running + kernel. It is used as a resource when investigating kernel problems. + Issue the following command to install the map file: + +cp -iv System.map /boot/System.map-&linux-version; + + The kernel configuration file .config + produced by the make menuconfig step + above contains all the configuration selections for the kernel + that was just compiled. It is a good idea to keep this file for future + reference: + +cp -iv .config /boot/config-&linux-version; + + Install the documentation for the Linux kernel: + +install -d /usr/share/doc/linux-&linux-version; +cp -r Documentation/* /usr/share/doc/linux-&linux-version; + + It is important to note that the files in the kernel source + directory are not owned by root. Whenever a + package is unpacked as user root (like we did + inside chroot), the files have the user and group IDs of whatever + they were on the packager's computer. This is usually not a problem + for any other package to be installed because the source tree is + removed after the installation. However, the Linux source tree is + often retained for a long time. Because of this, there is a chance + that whatever user ID the packager used will be assigned to somebody + on the machine. That person would then have write access to the kernel + source. + + + In many cases, the configuration of the kernel will need to be + updated for packages that will be installed later in BLFS. Unlike + other packages, it is not necessary to remove the kernel source tree + after the newly built kernel is installed. + + If the kernel source tree is going to be retained, run + chown -R 0:0 on the linux-&linux-version; directory to ensure + all files are owned by user root. + + + + Some kernel documentation recommends creating a symlink from + /usr/src/linux pointing to the kernel + source directory. This is specific to kernels prior to the 2.6 series and + must not be created on an LFS system as it can cause + problems for packages you may wish to build once your base LFS system is + complete. + + + + The headers in the system's include directory (/usr/include) should + always be the ones against which Glibc was compiled, + that is, the sanitised headers installed in . Therefore, they should + never be replaced by either the raw kernel headers + or any other kernel sanitized headers. + + + + + + Configuring Linux Module Load Order + + + /etc/modprobe.d/usb.conf + + + Most of the time Linux modules are loaded automatically, but + sometimes it needs some specific direction. The program that loads + modules, modprobe or insmod, uses + /etc/modprobe.d/usb.conf for this purpose. This file + needs to be created so that if the USB drivers (ehci_hcd, ohci_hcd and + uhci_hcd) have been built as modules, they will be loaded in the correct + order; ehci_hcd needs to be loaded prior to ohci_hcd and uhci_hcd in order + to avoid a warning being output at boot time. + + Create a new file /etc/modprobe.d/usb.conf by running + the following: + +install -v -m755 -d /etc/modprobe.d +cat > /etc/modprobe.d/usb.conf << "EOF" +# Begin /etc/modprobe.d/usb.conf + +install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true +install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true + +# End /etc/modprobe.d/usb.conf +EOF + + + + + Contents of Linux + + + Installed files + Installed directories + + + config-&linux-version;, + vmlinuz-&linux-version;-lfs-&version;, + vmlinuz-&linux-version;-lfs-&versiond;, + and System.map-&linux-version; + /lib/modules, /usr/share/doc/linux-&linux-version; + + + + + Short Descriptions + + + + + config-&linux-version; + + Contains all the configuration selections for the kernel + + /boot/config-&linux-version; + + + + + + vmlinuz-&linux-version;-lfs-&version; + vmlinuz-&linux-version;-lfs-&versiond; + + The engine of the Linux system. When turning on the computer, + the kernel is the first part of the operating system that gets loaded. + It detects and initializes all components of the computer's hardware, + then makes these components available as a tree of files to the + software and turns a single CPU into a multitasking machine capable + of running scores of programs seemingly at the same time + + lfskernel-&linux-version; + + + + + + System.map-&linux-version; + + A list of addresses and symbols; it maps the entry points and + addresses of all the functions and data structures in the + kernel + + /boot/System.map-&linux-version; + + + + + + + + +
-- cgit v1.2.3-54-g00ecf