Error bin sh does not point to bash

I was installing the software environment of Armadeus experiment board APF27DEV, and when I tried the make command, it gave me the following error message: On your system /bin/sh is a symbolic link...

I was installing the software environment of Armadeus experiment board APF27DEV, and when I tried the make command, it gave me the following error message:

On your system /bin/sh is a symbolic link that doesn't point to /bin/bash --> please correct that !
lrwxrwxrwx 1 root root 4 2013-08-03 20:57 /bin/sh -> dash

To resolve this error, I’ve tried to change all the shebangs from #!/bin/sh to #!/bin/bash, and I’ve also tried the following command:

ln -s /bin/bash /bin/sh

But, all that I’ve done didn’t resolve the problem. Could anyone please help me out with this problem?

cocomac's user avatar

cocomac

2,6153 gold badges14 silver badges43 bronze badges

asked Aug 3, 2013 at 23:33

batur's user avatar

1

You were almost there with your ln command, except you probably needed to include the -f flag (‘force’) in order to overwrite the old link. Also it’s preferable to use a relative path for the target:

sudo ln -sf bash /bin/sh

When you’re done with the install, you can revert to the system default with:

sudo ln -sf dash /bin/sh

There should be no need to change the script file’s shebangs.

BeastOfCaerbannog's user avatar

answered Aug 3, 2013 at 23:53

steeldriver's user avatar

steeldriversteeldriver

127k21 gold badges226 silver badges311 bronze badges

1

The problem must not be /bin/sh pointing at dash because that’s default (I just checked on my end and it was the same). The problem must be elsewhere; the package doesn’t seem to be compatible with Ubuntu out-of-the-box.

Perhaps in the Makefile you may find a line executing a script through sh explicitly, i.e. sh path/to/script. Replace all such occurrences of sh for bash, and report back your results.

answered Aug 3, 2013 at 23:49

Severo Raz's user avatar

Severo RazSevero Raz

5,9134 gold badges34 silver badges44 bronze badges

1

What is sh

sh (or the Shell Command Language) is a programming language described by the POSIX
standard.
It has many implementations (ksh88, dash, …). bash can also be
considered an implementation of sh (see below).

Because sh is a specification, not an implementation, /bin/sh is a symlink
(or a hard link) to an actual implementation on most POSIX systems.

What is bash

bash started as an sh-compatible implementation (although it predates the POSIX standard by a few years), but as time passed it has acquired many extensions. Many of these extensions may change the behavior of valid POSIX shell scripts, so by itself bash is not a valid POSIX shell. Rather, it is a dialect of the POSIX shell language.

bash supports a --posix switch, which makes it more POSIX-compliant. It also tries to mimic POSIX if invoked as sh.

sh = bash?

For a long time, /bin/sh used to point to /bin/bash on most GNU/Linux systems. As a result, it had almost become safe to ignore the difference between the two. But that started to change recently.

Some popular examples of systems where /bin/sh does not point to /bin/bash (and on some of which /bin/bash may not even exist) are:

  1. Modern Debian and Ubuntu systems, which symlink sh to dash by default;
  2. Busybox, which is usually run during the Linux system boot time as part of initramfs. It uses the ash shell implementation.
  3. BSDs, and in general any non-Linux systems. OpenBSD uses pdksh, a descendant of the Korn shell. FreeBSD’s sh is a descendant of the original UNIX Bourne shell. Solaris has its own sh which for a long time was not POSIX-compliant; a free implementation is available from the Heirloom project.

How can you find out what /bin/sh points to on your system?

The complication is that /bin/sh could be a symbolic link or a hard link.
If it’s a symbolic link, a portable way to resolve it is:

% file -h /bin/sh
/bin/sh: symbolic link to bash

If it’s a hard link, try

% find -L /bin -samefile /bin/sh
/bin/sh
/bin/bash

In fact, the -L flag covers both symlinks and hardlinks,
but the disadvantage of this method is that it is not portable —
POSIX does not require find to support the -samefile option,
although both GNU find and FreeBSD find support it.

Shebang line

Ultimately, it’s up to you to decide which one to use, by writing the «shebang» line.

E.g.

#!/bin/sh

will use sh (and whatever that happens to point to),

#!/bin/bash

will use /bin/bash if it’s available (and fail with an error message if it’s not). Of course, you can also specify another implementation, e.g.

#!/bin/dash

Which one to use

For my own scripts, I prefer sh for the following reasons:

  • it is standardized
  • it is much simpler and easier to learn
  • it is portable across POSIX systems — even if they happen not to have bash, they are required to have sh

There are advantages to using bash as well. Its features make programming more convenient and similar to programming in other modern programming languages. These include things like scoped local variables and arrays. Plain sh is a very minimalistic programming language.

I am trying to build the open source drivers for the c1000a to fix my router. However, I run into a weird issue:

$ make PROFILE=963268BGW
make version is 3.81
kernel version is 3.13.0-29-generic
shell is /bin/sh.  Bash version is 
***************************************************
ERROR: /bin/sh does not invoke bash shell
***************************************************
make: *** [prebuild_checks] Error 1

Can anyone explain what this might mean?

asked Jun 8, 2014 at 0:53

Tyler Scott's user avatar

4

The answer is that someone wrote a script or Makefile which depends on /bin/sh being Bash, and went out of their way to write code to detect that this is the case, rather than to write code which finds the shell that is required to run the script, like /bin/bash or /usr/bin/bash.

It is easy to tell GNU Make what shell to use for executing build «recipes» (bodies of rules), namely the SHELL variable. The default is /bin/sh/ but if you put

SHELL = /usr/bin/bash  # or whatever else

then GNU Make will use that.

I’d gut the Makefile of the logic which tests /bin/sh and bails out, and set up the SHELL variable to point to Bash.

answered Jun 8, 2014 at 4:27

Kaz's user avatar

KazKaz

54.1k9 gold badges97 silver badges145 bronze badges

1

This error might happen when you are doing compilation in Debian flavor distributions such as Ubuntu. Use the command below to compile:

$> make PROFILE=963268BGW SHELL=/bin/bash

Stephen Rauch's user avatar

Stephen Rauch

46.7k31 gold badges109 silver badges131 bronze badges

answered Sep 22, 2017 at 3:46

Tigran's user avatar

  • Home
  • Forum
  • The Ubuntu Forum Community
  • Ubuntu Official Flavours Support
  • Installation & Upgrades
  • [SOLVED] linking /bin/sh to bash instead of dash

  1. linking /bin/sh to bash instead of dash

    if you have not noticed, this is my ubuntu master thesis….
    http://ubuntuforums.org/showthread.php?t=1836890
    check it out and share it with your friends =)

    i prefer bash over dash. bash is a traditional linux program and is on (almost) all linux systems.

    alt + f2

    gnome-terminal

    run

    to see if your running dash run

    ls -al /bin/sh

    Code:

    sudo ln -s /bin/bash /bin/sh

    ls -al /bin/sh

    should now point to bash

    to run dash again

    Code:

    sudo ln -s /bin/dash /bin/sh

    curiosity killed the process, but thats ok because i’m god.


  2. Re: linking /bin/sh to bash instead of dash

    This should probably be in tutorials and tips, not in the help sections…just for future reference. Although nice work.


Bookmarks

Bookmarks


Posting Permissions

I think that the root filesystem was corrupted by an unclean shutdown and important files such as /sbin/init, /bin/sh and /etc/rc.d/rc.sysinit were damaged somehow. I am not completely sure about it, though.

I suggest you to reinstall bash, SysVinit and initscripts packages using the image CD. Assuming that CDROM contents will be available through /dev/hdb device node in rescue mode, the reinstallation process can be performed by using the following steps:

# mkdir -p /mnt/cdrom
# mount /dev/hdb /mnt/cdrom
# rpm --root /mnt/sysimage -ivh --replacepkgs 
    /mnt/CentOS/{bash,SysVinit,initscripts}-*.rpm

Alternatively, by inspecting the file /sbin/init, /etc/inittab and files under the directory /etc/rc.d, you could figure out why /sbin/init is calling /bin/sh and, afterwards, calling a binary named ro. This does not look normal.

PS: /bin/sh should be a symbolic link pointing to /bin/bash and not a regular file.


EDIT: once there is a confirmation that /sbin/init executable does not exist in filesystem, I am sure that such absence is the cause of the problem. CentOS booting process is probably executing /bin/sh as fallback and passing ro root=/dev/VolGroup00/LogVol00 rhgb quiet as command line arguments, thus leading /bin/sh to look for a script file named ro. Because it does not exist, /bin/sh throws the error message ro: no such file or directory and aborts.

I believe that reinstallation of the SysVinit package (which provides the /sbin/init executable) will fix the booting issue.

lfs_screen

— Ashish Tiwari 🇮🇳 (@_ashish_tiwari) April 27, 2020

I have started with www.linuxfromscratch.org, I am facing some challenges and problems which I am going to share with you in this blog. I will keep updating this blog as well as I move forward.

Before we get start

You need some basic linux command knowledge to use linuxfromscratch guide. I am going to build LFS on my local machine. If your machine has a different OS or different configuration, Then some solution will not work.

I am going to use the same chapter title as mentioned in linuxfromscratch. I will skip those sections where I haven’t faced any difficulties.

My Machine Configuration

OS: Ubuntu 14.04
RAM: 2GB
Disk: 500 GB

Going to build

LFS version: 9.1
Published: March 1st, 2020
LFS doc:http://www.linuxfromscratch.org/lfs/downloads/9.1/LFS-BOOK-9.1-NOCHUNKS.html

2.2. Host System Requirements

Doc link: http://www.linuxfromscratch.org/lfs/downloads/9.1/LFS-BOOK-9.1-NOCHUNKS.html#ch-partitioning-hostreqs

Version check

cat > version-check.sh << "EOF"
#!/bin/bash
# Simple script to list version numbers of critical development tools
export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
MYSH=$(readlink -f /bin/sh)
echo "/bin/sh -> $MYSH"
echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"
unset MYSH

echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1

if [ -h /usr/bin/yacc ]; then
  echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
elif [ -x /usr/bin/yacc ]; then
  echo yacc is `/usr/bin/yacc --version | head -n1`
else
  echo "yacc not found" 
fi

bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1

if [ -h /usr/bin/awk ]; then
  echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
elif [ -x /usr/bin/awk ]; then
  echo awk is `/usr/bin/awk --version | head -n1`
else 
  echo "awk not found" 
fi

gcc --version | head -n1
g++ --version | head -n1
ldd --version | head -n1 | cut -d" " -f2-  # glibc version
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
python3 --version
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1  # texinfo version
xz --version | head -n1

echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
  then echo "g++ compilation OK";
  else echo "g++ compilation failed"; fi
rm -f dummy.c dummy
EOF


bash version-check.sh

Error 1:

/bin/sh does not point to bash

Error 2:

version-check.sh: line 11: bison: command not found

sudo apt-get install bison

Error 3:

version-check.sh: line 25: gawk: command not found

sudo apt-get install gawk

Error 4:

version-check.sh: line 36: g++: command not found

Error 5:

version-check.sh: line 48: makeinfo: command not found

sudo apt-get update -y
sudo apt-get install -y texinfo

Final success output:

bash, version 4.3.11(1)-release
/bin/sh -> /bin/bash
Binutils: (GNU Binutils for Ubuntu) 2.24
bison (GNU Bison) 3.0.2
/usr/bin/yacc -> /usr/bin/bison.yacc
bzip2,  Version 1.0.6, 6-Sept-2010.
Coreutils:  8.21
diff (GNU diffutils) 3.3
find (GNU findutils) 4.4.2
GNU Awk 4.0.1
/usr/bin/awk -> /usr/bin/gawk
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4
g++ (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4
(Ubuntu EGLIBC 2.19-0ubuntu6.15) 2.19
grep (GNU grep) 2.16
gzip 1.6
Linux version 4.4.0-142-generic (buildd@lcy01-amd64-006) (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4) ) #168~14.04.1-Ubuntu SMP Sat Jan 19 11:26:28 UTC 2019
m4 (GNU M4) 1.4.17
GNU Make 3.81
GNU patch 2.7.1
Perl version='5.18.2';
Python 3.4.3
sed (GNU sed) 4.2.2
tar (GNU tar) 1.27.1
makeinfo (GNU texinfo) 5.2
xz (XZ Utils) 5.1.0alpha
g++ compilation OK

2.5. Creating a File System on the Partition

Doc link: http://www.linuxfromscratch.org/lfs/downloads/9.1/LFS-BOOK-9.1-NOCHUNKS.html#ch-partitioning-creatingfilesystem

I had only one partition. I need to create new physical partition for LFS.

It is recommended to use Physical partition only not logical.

I have reinstall my OS with new partition which is long way. You can use GParted to make partitions. Remember you can create only 4 Physical partition. Give 1 physical partition dedicated to LFS. Below is my partition view.

$ lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk 
|-sda1   8:1    0   476M  0 part /boot/efi
|-sda2   8:2    0   1.9G  0 part [SWAP]
|-sda3   8:3    0 190.8G  0 part /
`-sda4   8:4    0 272.7G  0 part /lfs

Challenge: My Partition wipe out after restart my system

After restart I again hit the same command lsblk. /lfs partition was not there.

In Ubuntu, You need to make entry in /etc/fstab in order to mount the partition on restart.

You have to find first volumeId or UUID to make entry in /etc/fstab. You can use blkid command to get all UUID:

$ blkid

/dev/sda1: UUID="1FBD-F51A" TYPE="vfat" 
/dev/sda2: UUID="9f41c453-3b5c-4537-81b0-2fb33f19ded8" TYPE="swap" 
/dev/sda3: UUID="1a16afba-cabb-40c7-b704-1129b7004ffb" TYPE="ext4" 
/dev/sda4: UUID="b3b2eb8c-2a43-405d-97da-af8b46c743e2" TYPE="ext4" 

Above my Partition is /dev/sda4 which is mounted on /lfs, So my UUID is b3b2eb8c-2a43-405d-97da-af8b46c743e2. Now I have added below line in /etc/fstab.

UUID=b3b2eb8c-2a43-405d-97da-af8b46c743e2 /lfs            ext4    rw,user,exec,errors=remount-ro              0       0

Here

  • rw: Read, Write
  • exec: Execute
  • errors=remount-ro: It will mount as Read-Only, If you get any error on mounting.

Make sure you have added exec, Otherwise you cannot execute any binaries from chapter 5.4. Binutils-2.34 — Pass 1

5.4. Binutils-2.34 — Pass 1

Doc link: http://www.linuxfromscratch.org/lfs/downloads/9.1/LFS-BOOK-9.1-NOCHUNKS.html#ch-tools-binutils-pass1

Error 1:

bash: ../configure: No such file or directory

As I mentioned on above Section, Make sure you have added exec in your /etc/fstab entry OR Make sure your partition /lfs has Read, Write & Execute permission. Below /etc/fstab entry worked for me:

UUID=b3b2eb8c-2a43-405d-97da-af8b46c743e2 /lfs            ext4    rw,user,exec,errors=remount-ro              0       0

This setting can be different for different OS.

Error 2:

I had no idea where to create build folder.

Below steps worked for me:

$ cd $LFS/source
$ tar xvf binutils-2.34.tar.xz
$ cd binutils-2.34
$ mkdir -v build
$ cd build
$ ../configure --prefix=/tools          
             --with-sysroot=$LFS        
             --with-lib-path=/tools/lib 
             --target=$LFS_TGT          
             --disable-nls              
             --disable-werror

5.5. GCC-9.2.0 — Pass 1

cd $LFS/sources
tar -xvf gcc-9.2.0.tar.xz
cd gcc-9.2.0

After this you can continue with document flow.

tar -xf ../mpfr-4.0.2.tar.xz
mv -v mpfr-4.0.2 mpfr
tar -xf ../gmp-6.2.0.tar.xz
mv -v gmp-6.2.0 gmp
tar -xf ../mpc-1.1.0.tar.gz
mv -v mpc-1.1.0 mpc

Error 1:

On make command, I got below error:

error: ‘for’ loop initial declarations are only allowed in C99 mode

compute_powtab.c: In function 'mpn_compute_powtab_mul':
compute_powtab.c:142:3: error: 'for' loop initial declarations are only allowed in C99 mode
   for (long pi = start_idx; pi >= 0; pi--)
   ^
compute_powtab.c:142:3: note: use option -std=c99 or -std=gnu99 to compile your code
compute_powtab.c: In function 'mpn_compute_powtab_div':
compute_powtab.c:226:3: error: 'for' loop initial declarations are only allowed in C99 mode
   for (long pi = n_pows - 1; pi >= 0; pi--)
   ^
compute_powtab.c:274:13: error: redefinition of 'pi'
   for (long pi = n_pows; pi >= 0; pi--)
             ^
compute_powtab.c:226:13: note: previous definition of 'pi' was here
   for (long pi = n_pows - 1; pi >= 0; pi--)
             ^
compute_powtab.c:274:3: error: 'for' loop initial declarations are only allowed in C99 mode
   for (long pi = n_pows; pi >= 0; pi--)
   ^
compute_powtab.c: In function 'powtab_decide':
compute_powtab.c:296:3: error: 'for' loop initial declarations are only allowed in C99 mode
   for (size_t pn = (un + 1) >> 1; pn != 1; pn = (pn + 1) >> 1)
   ^
compute_powtab.c:304:10: error: redefinition of 'pn'
   size_t pn = un - 1;
          ^
compute_powtab.c:296:15: note: previous definition of 'pn' was here
   for (size_t pn = (un + 1) >> 1; pn != 1; pn = (pn + 1) >> 1)
               ^
compute_powtab.c:308:3: error: 'for' loop initial declarations are only allowed in C99 mode
   for (long i = n_pows - 2; i >= 0; i--)

As per (https://stackoverflow.com/a/29338269)[https://stackoverflow.com/a/29338269],

This happens because declaring variables inside a for loop wasn’t valid C until C99(which is the standard of C published in 1999).

How I sovled this?

Open file:

vim $LFS/sources/gcc-9.2.0/build/gmp/mpn/compute_powtab.c

We will solve first error:

compute_powtab.c:226:3: error: 'for' loop initial declarations are only allowed in C99 mode
   for (long pi = n_pows - 1; pi >= 0; pi--)

Changes on line number 226:

  long pi;

  for (pi = n_pows - 1; pi >= 0; pi--)
    {

Just declare long pi; outside the loop. Similarly you can solve above all errors.

OR

You can download my edited version of compute_powtab.c, Place in $LFS/sources/gcc-9.2.0/build/gmp/mpn/.

Hit

Now it should works :)

5.7. Glibc-2.31

On below command:

../configure                             
      --prefix=/tools                    
      --host=$LFS_TGT                    
      --build=$(../scripts/config.guess) 
      --enable-kernel=3.2                

Error: These critical programs are missing or too old: make

configure: error:
*** These critical programs are missing or too old: make
*** Check the INSTALL file for required versions.

I checked my current make version:

$ make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu

As per (https://stackoverflow.com/a/31915313)[https://stackoverflow.com/a/31915313]

Due to a long-standing unresolved Debian bug report, GNU Make remained the age-old 3.81 in Debian for a very long time, and as a consequence, in Debian-based distributions such as Ubuntu and Mint.

So we need to upgrade our make version. Below steps worked for me.

cd /tmp
wget http://ftp.gnu.org/gnu/make/make-4.1.tar.gz
tar xvf make-4.1.tar.gz
cd make-4.1/
./configure
make
sudo make install
sudo mv /usr/local/bin/make /usr/bin/make

Now again hit ../configure .. command, Now it should work :)

Error

(lfs chroot) root:/sources/linux-5.5.3# make mrproper

/bin/sh: sed: command not found
Makefile:653: arch//Makefile: No such file or directory
make: *** No rule to make target 'arch//Makefile'.  Stop.

Because of my silly mistake. I had not installed the sed package. I just reinstall the package.

6.12. Bzip2-1.0.8

Error:

collect2: error: ld returned 1 exit status
make: *** [Makefile-libbz2_so:38: all] Error 1

Just hit make clean.
Again run make -f Makefile-libbz2_so.

6.18. Binutils-2.34

$ make -k check


make[5]: *** [Makefile:2565: check-DEJAGNU] Error 1
make[5]: Leaving directory '/sources/binutils-2.34/build_6.18/ld'
make[4]: *** [Makefile:1902: check-am] Error 2
make[4]: Leaving directory '/sources/binutils-2.34/build_6.18/ld'
make[3]: *** [Makefile:1771: check-recursive] Error 1
make[3]: Leaving directory '/sources/binutils-2.34/build_6.18/ld'
make[2]: *** [Makefile:1904: check] Error 2
make[2]: Leaving directory '/sources/binutils-2.34/build_6.18/ld'
make[1]: *** [Makefile:7568: check-ld] Error 2
make[1]: Leaving directory '/sources/binutils-2.34/build_6.18'
make: *** [Makefile:2222: do-check] Error 2

As I research these are few common errors But as I have not found any solution So I jump on to the next step as suggested in various places.

make tooldir=/usr install

If you get any solution of above error, Feel free to comment below.

6.25. GCC-9.2.0

Error 1:

make: *** [Makefile:2295: do-check] Error 2

I ignored this and move to next steps.

Error 2: Got no output with below command:

echo 'int main(){}' > dummy.c
cc dummy.c -v -Wl,--verbose &> dummy.log
readelf -l a.out | grep ': /lib'

Performed below steps as mentioned on this link https://stackoverflow.com/a/48289145:

gcc -dumpspecs | sed -e 's@/tools@@g' > `dirname $(gcc --print-libgcc-file-name)`/specs

Again perform above command:

echo 'int main(){}' > dummy.c
$ cc dummy.c -v -Wl,--verbose &> dummy.log
readelf -l a.out | grep ': /lib'

     [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

6.41. Perl-5.30.1

Error:

erlio.c:(.text+0x91b): undefined reference to `pthread_getspecific'
/usr/bin/ld: perlio.o:perlio.c:(.text+0x44e4): more undefined references to `pthread_getspecific' follow
collect2: error: ld returned 1 exit status
make: *** [makefile:364: lib/buildcustomize.pl] Error 1

Solution which suggested here https://www.linuxquestions.org/questions/linux-from-scratch-13/errors-with-6-40-perl-5-28-0-a-4175642138/ It worked for me.

it’s due to not having deleted the extracted Perl-5.28.0 directory after Chapter 5. I deleted the folder. Again untar the file.

8.4. Using GRUB to Set Up the Boot Process

NOTE: I have not performed this section, Becuase I am going to use my host system’s (Ubuntu 14.04) GRUB bootloader. Just go to another terminal of host system and hit below command.

After this again go to old terminal(LFS) and proceed with next step (The End).

Please comment below if you facing any issue.

Thanks

Ссылки:

https://www.linuxfromscratch.org/lfs/downloads/stable/

https://www.linuxfromscratch.org/lfs/downloads/stable-systemd/LFS-BOOK-11.1-NOCHUNKS.html

https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.2-NOCHUNKS.html

https://www.linuxfromscratch.org/lfs/download.html

https://www.linuxfromscratch.org/faq/

https://habr.com/ru/post/257663/

https://www.linuxfromscratch.org/livecd/download.html

https://github.com/automate-lfs/jhalfs

Скрипт проверки готовности системы для сборки lfs:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

cat > versioncheck.sh << «EOF»

#!/bin/bash

# Simple script to list version numbers of critical development tools

export LC_ALL=C

bash version | head n1 | cut d» « f24

MYSH=$(readlink f /bin/sh)

echo «/bin/sh -> $MYSH»

echo $MYSH | grep q bash || echo «ERROR: /bin/sh does not point to bash»

unset MYSH

echo n «Binutils: «; ld version | head n1 | cut d» « f3

bison version | head n1

if [ h /usr/bin/yacc ]; then

  echo «/usr/bin/yacc -> `readlink -f /usr/bin/yacc`»;

elif [ x /usr/bin/yacc ]; then

  echo yacc is `/usr/bin/yacc version | head n1`

else

  echo «yacc not found»

fi

echo n «Coreutils: «; chown version | head n1 | cut d«)» f2

diff version | head n1

find version | head n1

gawk version | head n1

if [ h /usr/bin/awk ]; then

  echo «/usr/bin/awk -> `readlink -f /usr/bin/awk`»;

elif [ x /usr/bin/awk ]; then

  echo awk is `/usr/bin/awk version | head n1`

else

  echo «awk not found»

fi

gcc version | head n1

g++ version | head n1

grep version | head n1

gzip version | head n1

cat /proc/version

m4 version | head n1

make version | head n1

patch version | head n1

echo Perl `perl V:version`

python3 version

sed version | head n1

tar version | head n1

makeinfo version | head n1  # texinfo version

xz version | head n1

echo ‘int main(){}’ > dummy.c && g++ -o dummy dummy.c

if [ -x dummy ]

  then echo «g++ compilation OK»;

  else echo «g++ compilation failed»; fi

rm f dummy.c dummy

EOF

bash versioncheck.sh

0. Подготовим linux для установкам LFS:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

!!! https://github.com/archlinux/archinstall

0. Накатил на виртуалку archlinux без графики использовал команду archinstall

1. после установки подключил еще одни диск /dev/vdb отформатировал его (fstab /dev/vdb)

   создал файловую систему с помощью ext4(mkfs.ext4 /dev/vdb1)

   добавил этот диск в (/etc/fstab) что бы пока не беспокоится о его подключении после перезагрузки системы

   проверил с помощью команды (mount a)

   mkdir /mnt/lfs

2. установил софт на  archlinux

pacman Sy core/openssh vim git wget python gcc

3. временно создал переменную LFS

!!! В книге LFS предполагается что вы все делаете за одни раз

!!! Поэтому, в случае отключения питания ПК, потребуется некоторые команды выполнять заново.

export LFS=/mnt/lfs

4. Создал директории

mkdir v $LFS

mkdir v $LFS/sources

mkdir v $LFS/tools

mkdir v $LFS/usr

5. Создаем еще директории:

mkdir pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin}

6. Создаем символьные ссылки для библиотеки:

for i in bin lib sbin; do

  ln sv usr/$i $LFS/$i

done

7. Создаем символьные ссылки для библиотеки x64:

case $(uname m) in

  x86_64) mkdir pv $LFS/lib64 ;;

esac

8. Права

chmod v a+wt $LFS/sources

9. Загружаем файлы lfs

Список скачиваемых пакетов wgetlist и список контрольных сумм пакетов md5sums:

wget https://www.linuxfromscratch.org/lfs/downloads/stable-systemd/wget-list —directory-prefix=$LFS/sources

wget https://www.linuxfromscratch.org/lfs/downloads/stable-systemd/md5sums —directory-prefix=$LFS/sources

После этого приступаем к закачке исходников всего и вся:

wget inputfile=$LFS/sources/wgetlist continue directoryprefix=$LFS/sources

10. Проверяем скаченное:

!!! команды pushd/popd, делают следующие,

!!! Команда pushd временно переводит вас в указанный в качестве параметра каталог.

!!! Возврат назад происходит командой popd

pushd $LFS/sources

md5sum c md5sums

popd

!!! Если чего-то не окажется, нужно пойти и скачать ручками

!!! если все ок можем продолжать

1.1 Книга:

cd /mnt/lfs/book

git clone git://git.linuxfromscratch.org/jhalfs.git jhalfs

2. подготовим окружение пользователя lfs для сборки:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

!!! если вышли или закрыли консоль не забываем выполнить  (export LFS=/mnt/lfs и проверить с помощью echo $LFS)

0. Настройка рабочего окружения

!!! Создаем символьную ссыдку

!!! Мы обеспечиваем возможность обращения к данному каталогу по пути /tools вне зависимости от текущего расположения корня системы

!!!  В противном случае сразу после перехода во временную систему нас ждет сбой при первой же компиляции.

ln sv $LFS/tools /

1. Создаем группу lfs

groupadd lfs

2. Создаем пользователя lfs

useradd s /bin/bash g lfs m k /dev/null lfs

s /bin/bash используемая в сеансе пользователя командная оболочка

g lfs группа, в которую входит пользователь

m указывает, что необходимо создать домашний каталог пользователя /home/lfs

k /dev/null пустой каталог шаблонов(создать пустую директорию /home/lfs). По-умолчанию при создании домашнего каталога в него помещаются файлы и папки, размещенные в /etc/skel.

3. Устанавливаем пароль пользователю lfs

passwd lfs

4. Сделаем lfs его владельцем каталогов $LFS/sources и $LFS/tools

chown v lfs $LFS/sources

chown v lfs $LFS/tools

chown v lfs $LFS/book

chown v lfs $LFS/usr

3. Продолжаем работу над рабочим окружением пользователя:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

0. Подключаемся от имени lfs:

su lfs

1. Создаем в домашней директории пользователя файл ~/.bash_profile:

!!! Файл ~/.bash_profile определяет индивидуальную пользовательские настройку переменных среды.

——————————

cat > ~/.bash_profile << «EOF»

exec env i HOME=$HOME TERM=$TERM PS1=‘u:w$ ‘ /bin/bash

EOF

——————————

2. Создаем в домашней директории пользователя файл ~/.bashrc:

!!! Файл ~/.bashrc определяет какие настройки должны быть выполнены при логине в сессию данного пользователя

————————————

cat > ~/.bashrc << «EOF»

set +h

umask 022

LFS=/mnt/lfs

LC_ALL=POSIX

LFS_TGT=$(uname m)lfslinuxgnu

PATH=/tools/bin:/bin:/usr/bin

export LFS LC_ALL LFS_TGT PATH

EOF

————————————

set +h отключает хеширование в bash.

         Командная оболочка запоминает пути к исполняемым файлам, запущенным ранее, что безусловно ускоряет работу системы.

         Однако мы будем вызывать разные версии одних и тех программ расположенных по разным путям, поэтому хеширование будет только вредить нам.

umask 022 устанавливает права доступа к новым файлам и каталогам, задаваемые по умолчанию.

            Значение 022 означает, что файлы будут создаваться с правами 644 (rw r r) а каталоги с правами 755 (rwx rx rx).

            Каждый взведенный бит umask означает сброс соответсвующего бита в атрибутах прав

LFS=/mnt/lfs корень собираемой системы

LC_ALL=POSIX определяет локализацию запускаемых программ. POSIX задает стандарт отображения независимый от способа кодировки символов.

LFS_TGT задает описание целевой машины, используемое при построении временных иструментов сборки системы

PATH пути поиска исполняемых файлов

export присваивает указанным переменным заданные выше значения

3. Переключаемся на чистое окружение

exec env i HOME=$HOME TERM=$TERM PS1=‘u:W$ ‘ /bin/bash

создает «чистое» пользовательское окружение (ключ i указывает игнорировать предыдущие настройки), присваивая значения переменным среды

HOME домашний каталог, присваиваем текущее значение переменной, равное /home/lfs

TERM используемый тип терминала, так же оставляем текущий

PS1 формат приглашения командной строки.

В данном случает задается формат вида имя пользователя: текущий рабочий каталог$, где спецсимвол u имя пользователя, W текущий рабочий каталог.

/bin/bash команда, запускающая новый экземпляр командной оболочки

4. Обновим пользовательское окружение командой

source ~/.bash_profile

5. Убеждаемся, что необходимые переменные окружения установлены

set

4. Сборка временного набора инструментов (Temporary System)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

!!! Начиная собирать систему, мы сталкиваемся с классической проблемой «курицы и яйца».

!!! Для сборки системы нам необходимы компилятор, линковщик и библиотеки.

!!! Но у нас нет ничего из перечисленного, только их исходники. У нас есть компилятор в хост-системе, и собирать необходимое ПО мы начнем именно им.

!!! Однако если просто собрать тот же gcc с настройками по-умолчанию он не будет работать в LFS-системе

!!! на начальном этапе её построения он использует динамическую компоновку необходимых для работы библиотек.

!!! Весь необходимый для работы код надо будет скомпоновать статически, то есть явным образом включить в исполняемый файл.

!!! Таким образом первым делом мы выполним кросс-компиляцию некоторых частей будущей системы, чтобы иметь возможность воспользоваться ими при сборке окончательного её варианта.

Переходим в каталог $LFS/sources:

cd $LFS/sources

!!! Для всех собираемых пакетов порядок сборки содержит следующую последовательность действий (если не оговорено иного!):

!!! Распаковываем архив с пакетом

!!! tar pxf <packagearchivefilename>

!!! Переходим в распакованный каталог

!!! cd <packagedirname>

!!! Выполняем инструкции по сборке (у каждого пакета имеются ньюансы, подробно описанные в документации)

!!! Переходим на каталог выше, назад в $LFS/source, и удаляем все созданные при распаковке и сборке директории

!!! Время сборки пакетов различно от практически мгновенной, до двух с половиной часов

!!! Так как быстродействие компьютеров различается, в качестве единицы измерения времени сборки выбрана относительная единица, именуемая Standard Build Unit (SBU)

!!! Один SBU равен времени сборки пакета binutils, который компилируется самым первым.

!!! Рекомендация: не собирайте систему в несколько потоков.

!!! Если у вас многоядерный процессор, то ключик j ускорит работу, но позже это может обернуться непрохождением некоторых важных тестов и нестабильной работой собранного ПО.

!!! Сборка в один поток не так уж и продолжительна гораздо большее время будет затрачено на разгребание нажитых многопоточной сборкой проблем.

5. Сборка Binutils — первый проход. Измерение SBU

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

!!! Binutils пакет, содержащий вспомогательные утилиты для сборки ПО. В их число входят ассемблер (as) и компоновщик (ld).

!!! Они необходимы glibc и gcc для прохождения некоторых тестов, поэтому данный пакет собирается в первую очередь.

0. распаковали и перешли в каталог

tar pxf binutils2.38.tar.xz

cd binutils2.38

1. Для сборки этого пакета рекомендуется создать отдельный каталог, создаем его и переходим туда

mkdir v ../binutilsbuild

cd ../binutilsbuild

2. Теперь надо выполнить конфигурирование пакета, чтобы сгенерировать правильный Makefile.

../binutils2.38/configure prefix=/tools withsysroot=$LFS withlibpath=/tools/lib target=$LFS_TGT disablenls disablewerror  

!!! prefix=/tools указывает на то, что собранные пакеты будут устанавливаться в директорию /tools, где будет размещаться временная система

!!! withsysroot=$LFS корневой каталог системы, относительно которого будет производится поиск библиотек и прочих ресурсов, необходимых для работы программ во временной системе

!!! withlibpath=/tools/lib путь поиска библиотек, указываемый для компоновщика ld

!!! target=$LFS_TGT задаем описание целевой машины

!!! disablenls отключает интернационализацию собираемых пакетов. В данный момент она без надобности, а её наличие может вызвать ряд сбоев

!!! disablewerror отключает остановку компиляции при получении предупреждений от компилятора хост-системы

3. После того как отработает конфигуратор, на выходе мы получим Makefile, предназначенный для сборки и установки пакета.

Собираем пакет и измеряем SBU:

time { make; }

4. Получили вывод:

real    2m17.202s

user    1m58.972s

sys     0m15.231s

5. Из этого следует:

Для моей системы виртуальная машина на 2 ядрах (Intel(R) Core(TM) i51035G1 CPU @ 1.00GHz), 2Gb RAM,

SBU составил 2m17.202s при сборке в один поток.

6. Зачем это SBU?

Например запустить финальную сборку gcc вместе с тестами и уйти делать другие дела, ибо занимает это 63 SBU(2+ часа реального  времени для машины в тесте) нет смысла с надеждой пялится в экран.

7. После того как сборка окончена, создаем символические ссылки на каталоги библиотек.

!!! Данная операция необходима, если ваша система 64-разрядная, так что нижеприведенная команда сначала проверяет разрядность системы, а уж потом при необходимости создает симлинки.

case $(uname m) in

x86_64) mkdir v /tools/lib && ln -sv lib /tools/lib64 ;;

esac

8. Устанавливаем собранное

make install

9. Выходим из каталога binutilsbuild и удаляем больше не нужные каталоги

cd ..

rm r binutils2.38

rm r binutilsbuild

Примечание

!!! https://www.linuxfromscratch.org/lfs/view/stable/partintro/generalinstructions.html#buildinstr

В этой главе часто возникают недоразумения.

Процедуры такие же, как и в любой другой главе, как объяснялось ранее ( Инструкции по сборке пакетов ).

Сначала извлеките tar-архив gcc из исходного каталога, а затем перейдите в созданный каталог.

Только после этого следует приступить к приведенным ниже инструкциям.

10. Сборка GCC — первый проход

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

!!! https://www.linuxfromscratch.org/lfs/view/stable/chapter05/gcc-pass1.html

!!! В процессе сборки системы компилятор придется собирать много раз.

!!! Первые два прохода необходимы для получения компилятора, способного работать независимо от хост-системы.

0. распакуем и перейдем в каталог  gcc

tar xpf gcc11.2.0.tar.xz

cd gcc11.2.0

1. Для успешной компиляции нам потребуются исходники ещё трех пакетов: GMP, MPFR и MPC.

Распакуем их в каталог исходников компилятора и переименуем каталоги так, как на них ссылаются в исходниках gcc

tar pxf ../gmp6.2.1.tar.xz

tar xpf ../mpfr4.1.0.tar.xz

tar xpf ../mpc1.2.1.tar.gz

mv v gmp6.2.1 gmp

mv v mpfr4.1.0 mpfr

mv v mpc1.2.1

mv v mpc1.2.1 mpc

2. На хостах x86_64 установите имя каталога по умолчанию для 64-битных библиотек на « lib » :

case $(uname m) in

  x86_64)

    sed e ‘/m64=/s/lib64/lib/’

        i.orig gcc/config/i386/tlinux64

;;

esac

3. Документация GCC рекомендует собирать GCC в выделенном каталоге сборки:

mkdir v build

cd       build

4. Готовим gcc к компиляции

../configure                  

    target=$LFS_TGT        

    prefix=$LFS/tools      

    withglibcversion=2.35

    withsysroot=$LFS      

    withnewlib            

    withoutheaders        

    enableinitfiniarray  

    disablenls            

    disableshared          

    disablemultilib        

    disabledecimalfloat  

    disablethreads        

    disablelibatomic      

    disablelibgomp        

    disablelibquadmath    

    disablelibssp          

    disablelibvtv          

    disablelibstdcxx      

    enablelanguages=c,c++

Значение параметров настройки:

withglibcversion=2.35 Эта опция указывает версию glibc, которая будет использоваться на цели.

Это не относится к libc хост-дистрибутива, потому что все, скомпилированное с помощью pass1 gcc, будет работать в среде chroot, которая изолирована от libc хост-дистрибутива.

withnewlib Поскольку работающая библиотека C еще недоступна, это гарантирует, что константаinhibit_libc будет определена при сборке libgcc.

Это предотвращает компиляцию любого кода, требующего поддержки libc.

withoutheaders При создании полного кросс-компилятора GCC требует стандартных заголовков, совместимых с целевой системой.

Для наших целей эти заголовки не понадобятся. Этот переключатель предотвращает их поиск GCC.

enableinitfiniarray Этот переключатель заставляет использовать некоторые внутренние структуры данных, которые необходимы, но не могут быть обнаружены при построении кросс-компилятора.

disableshared Этот переключатель заставляет GCC статически связывать свои внутренние библиотеки.

Нам это нужно, потому что общие библиотеки требуют glibc, который еще не установлен в целевой системе.

disablemultilib В x86_64 LFS не поддерживает конфигурацию с несколькими библиотеками. Этот переключатель безвреден для x86.

disabledecimalfloat, disablethreads, disablelibatomic, disablelibgomp, disablelibquadmath, disablelibssp, disablelibvtv, disablelibstdcxx

Эти переключатели отключают поддержку расширения десятичных чисел с плавающей запятой, многопоточности, libatomic, libgomp, libquadmath, libssp, libvtv и стандартной библиотеки C++ соответственно. Эти функции не будут компилироваться при сборке кросс-компилятора и не нужны для задачи кросс-компиляции временной libc.

enablelanguages=c,c++ Этот параметр обеспечивает сборку только компиляторов C и C++. Это единственные языки, которые нужны сейчас.

Скомпилируйте GCC, выполнив:

make

Установите пакет:

make install

Эта сборка GCC установила пару внутренних системных заголовков.

Обычно один из них, limits.h, в свою очередь, включает соответствующий системный limits.hзаголовок, в данном случае $LFS/usr/include/limits.h.

Однако на момент создания этой сборки GCC $LFS/usr/include/limits.hне существует, поэтому только что установленный внутренний заголовок представляет собой частичный автономный файл

и не включает расширенные функции системного заголовка.

Этого достаточно для сборки glibc, но полный внутренний заголовок понадобится позже.

Создайте полную версию внутреннего заголовка с помощью команды, идентичной тому, что система сборки GCC делает в обычных обстоятельствах:

cd ..

cat gcc/limitx.h gcc/glimits.h gcc/limity.h >

  `dirname $($LFS_TGTgcc printlibgccfilename)`/installtools/include/limits.h

Now that our crosstoolchain is complete, finalize the installation of the limits.h header. For doing so, run a utility provided by the GCC developers:

$LFS/tools/libexec/gcc/$LFS_TGT/11.2.0/installtools/mkheaders

После успешной сборки можно удалить

cd /mnt/lfs/sources

rm rf gcc11.2.0

11. Заголовки API Linux-5.16.9

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

0. Выполняем уже для нас стандартные действия (переходим каталог с исходниками, распаковываем нужный пакет, и переходим в папку)

cd /mnt/lfs/sources

tar pxf linux5.16.9.tar.xz

cd linux5.16.9

1. Убедитесь, что в пакете нет устаревших файлов:

make mrproper

2. Теперь извлеките видимые пользователю заголовки ядра из исходного кода.

!!! Рекомендуемую цель make « headers_install » использовать нельзя, так как для этого требуется rsync , который может быть недоступен.

!!! Заголовки сначала помещаются в ./usr, а затем копируются в нужное место.

!!! Команды выполняем последовательно

make headers

find usr/include name ‘.*’ delete

rm usr/include/Makefile

cp rv usr/include $LFS/usr

Установка Glibc-2.35

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

0. Переходим в каталог sources и выполняем стандартные действия

cd /mnt/lfs/sources

tar pxf glibc2.35.tar.xz

cd glibc2.35

1. С помощью крипта создайте символическую ссылку для соответствия LSB.

Кроме того, для x86_64 создайте символическую ссылку совместимости, необходимую для правильной работы загрузчика динамической библиотеки:

!!! Приведенная выше команда верна.

!!! У команды ln есть несколько синтаксических версий, поэтому обязательно проверьте информацию coreutils ln и ln(1)прежде чем сообщать о том, что вы можете принять за ошибку.

case $(uname m) in

    i?86)   ln sfv ldlinux.so.2 $LFS/lib/ldlsb.so.3

    ;;

    x86_64) ln sfv ../lib/ldlinuxx8664.so.2 $LFS/lib64

            ln sfv ../lib/ldlinuxx8664.so.2 $LFS/lib64/ldlsbx8664.so.3

    ;;

esac

2. Некоторые программы Glibc используют /var/dbкаталог, не совместимый с FHS, для хранения своих данных времени выполнения.

Примените следующий патч, чтобы такие программы хранили свои данные времени выполнения в местах, совместимых с FHS:

patch Np1 i ../glibc2.35fhs1.patch

3. Документация Glibc рекомендует собирать Glibc в выделенном каталоге сборки:

mkdir v build

cd       build

4. Убедитесь, что утилиты ldconfig и sln установлены в /usr/sbin:

echo «rootsbindir=/usr/sbin» > configparms

5. Затем подготовьте Glibc к компиляции:

../configure                            

      prefix=/usr                      

      host=$LFS_TGT                    

      build=$(../scripts/config.guess)

      enablekernel=3.2                

      withheaders=$LFS/usr/include    

      libc_cv_slibdir=/usr/lib

Значение параметров настройки:

host=$LFS_TGT, build=$(../scripts/config.guess)

Комбинированный эффект этих переключателей заключается в том, что система сборки Glibc настраивается для кросс-компиляции с использованием кросс-линкера и кросс-компилятора в $LFS/tools.

enablekernel=3.2

Это говорит Glibc скомпилировать библиотеку с поддержкой ядра Linux 3.2 и более поздних версий. Обходные пути для старых ядер не включены.

withheaders=$LFS/usr/include

Это говорит Glibc скомпилировать себя с использованием заголовков, недавно установленных в каталог $LFS/usr/include, чтобы он точно знал,

какие функции имеет ядро, и мог соответствующим образом оптимизировать себя.

libc_cv_slibdir=/usr/lib

Это гарантирует, что библиотека будет установлена ​​в /usr/lib вместо стандартного /lib64 на 64-битных машинах.

6. Скомпилируйте пакет:

make

7. Установите пакет:

!!! Если LFSон не установлен должным образом, и, несмотря на рекомендации, вы собираете как root, следующая команда установит только что собранный glibc в вашу хост-систему,

!!! что, скорее всего, сделает его непригодным для использования. Поэтому дважды проверьте, правильно ли настроена среда, прежде чем запускать следующую команду.

make DESTDIR=$LFS install

8. Исправьте жестко заданный путь к исполняемому загрузчику в скрипте ldd :

sed ‘/RTLDLIST=/s@/usr@@g’ i $LFS/usr/bin/ldd

9. Осторожно. Важный момент. Нужно проверить работу сборщика.

a)На этом этапе необходимо остановиться и убедиться, что основные функции (компиляция и компоновка) новой цепочки инструментов работают должным образом.

Чтобы выполнить проверку работоспособности, выполните следующие команды:

echo ‘int main(){}’ > dummy.c

$LFS_TGTgcc dummy.c

readelf l a.out | grep ‘/ld-linux’

б)Если все работает правильно, ошибок быть не должно, а вывод последней команды будет иметь вид:

[Requesting program interpreter: /lib64/ldlinuxx8664.so.2]

с)Если все работает, очистите тестовые файлы:

rm v dummy.c a.out

10. Теперь, когда наша кросс-инструментальная цепочка завершена, завершите установку заголовка limit.h. Для этого запустите утилиту, предоставленную разработчиками GCC:

$LFS/tools/libexec/gcc/$LFS_TGT/11.2.0/installtools/mkheaders

12. Установка Libstdc++ from GCC-11.2.0, Pass 1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

!!! Libstdc++ это стандартная библиотека C++. Он нужен для компиляции кода C++ (часть GCC написана на C++),

!!! но нам пришлось отложить его установку, когда мы собирали gccpass1, потому что он зависит от glibc, которого еще не было в целевом каталоге.

!!! Примечание

!!! Libstdc++ является частью исходников GCC.

!!! Сначала вы должны распаковать архив GCC и перейти в gcc11.2.0 каталог.

0. Выполняем стандартное:

tar pxf gcc11.2.0.tar.xz

cd gcc11.2.0

mkdir v build

cd build

1. Подготовьте libstdc++ к компиляции:

../libstdc++-v3/configure          

    host=$LFS_TGT                

    build=$(../config.guess)      

    prefix=/usr                  

    disablemultilib              

    disablenls                  

    disablelibstdcxxpch        

    withgxxincludedir=/tools/$LFS_TGT/include/c++/11.2.0

Значение параметров настройки:

host=...

Указывает, что вместо компилятора в /usr/bin.

disablelibstdcxxpch

Этот переключатель предотвращает установку предварительно скомпилированных включаемых файлов, которые на данном этапе не нужны.

withgxxincludedir=/tools/$LFS_TGT/include/c++/11.2.0

Указывает каталог установки для включаемых файлов.

Поскольку libstdc++ является стандартной библиотекой C++ для LFS, этот каталог должен соответствовать местоположению,

в котором компилятор C++ ( $LFS_TGTg++ ) будет искать стандартные включаемые файлы C++.

В обычной сборке эта информация автоматически передается параметрам конфигурации libstdc++ из каталога верхнего уровня.

В нашем случае эта информация должна быть указана явно.

Компилятор C++ добавит путь sysroot $LFS(указанный сборкой GCC pass 1) к пути поиска включаемого файла, поэтому он фактически будет искать в $LFS/tools/$LFS_TGT/include/c++/11.2.0.

Комбинация DESTDIRпеременной (в приведенной ниже команде make install ) и этого переключателя обеспечивает установку заголовков.

2. Скомпилируйте libstdc++, запустив:

make

3. Установите библиотеку:

make DESTDIR=$LFS install

13. Установка М4

0. Выполняем стандартные действия:

cd /mnt/lfs/sources/

tar pxf m41.4.19.tar.xz

cd m41.4.19

1. Подготовьте M4 к компиляции:

./configure prefix=/usr  

            host=$LFS_TGT

            build=$(buildaux/config.guess)

2. Скомпилируйте пакет:

make

3. Установите пакет:

make DESTDIR=$LFS install

14. Установка Ncurses-6.3

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

!!! https://www.linuxfromscratch.org/lfs/view/stable/chapter06/ncurses.html

0. Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf ncurses6.3.tar.gz

cd ncurses6.3

1. Во- первых, убедитесь, что во время настройки сначала найден gawk(выполнение не должно вернуть ошибку):

sed i s/mawk// configure

2. Затем выполните следующие команды, чтобы собрать программу « tic » на хосте сборки:

mkdir build

pushd build

  ../configure

  make C include

  make C progs tic

popd

3. Подготовьте Ncurses к компиляции:

./configure prefix=/usr                

            host=$LFS_TGT              

            build=$(./config.guess)    

            mandir=/usr/share/man      

            withmanpageformat=normal

            withshared                

            withoutdebug              

            withoutada                

            withoutnormal            

            disablestripping          

            enablewidec

Значение новых опций конфигурации:

withmanpageformat=normal

Это предотвращает установку Ncurses сжатых справочных страниц, что может произойти, если сам дистрибутив хоста имеет сжатые справочные страницы.

withoutada

Это гарантирует, что Ncurses не создаст поддержку компилятора Ada, который может присутствовать на хосте, но будет недоступен, как только мы войдем в среду chroot .

disablestripping

Этот переключатель не позволяет системе здания удалять программы с помощью программы удаления с хоста. Использование инструментов хоста в кросс-компилируемой программе может привести к сбою.

enablewidec

Этот переключатель вызывает создание библиотек расширенных символов (например, libncursesw.so.6.3) вместо обычных (например, libncurses.so.6.3).

Эти широкосимвольные библиотеки можно использовать как в многобайтовых, так и в традиционных 8-битных локалях,

в то время как обычные библиотеки правильно работают только в 8-битных локалях.

Библиотеки расширенных символов и обычные библиотеки совместимы с исходным кодом, но не совместимы с двоичным кодом.

withoutnormal

Этот переключатель отключает сборку и установку большинства статических библиотек.

4. Скомпилируйте пакет:

make

5. Установите пакет:

make DESTDIR=$LFS TIC_PATH=$(pwd)/build/progs/tic install

echo «INPUT(-lncursesw)» > $LFS/usr/lib/libncurses.so

Значение параметров установки:

TIC_PATH=$(pwd)/build/progs/tic

Нам нужно передать путь только что построенного тика , способного работать на сборочной машине, чтобы база данных терминала могла быть создана без ошибок.

echo «ВВОД(-lncursesw)» > $LFS/usr/lib/libncurses.so

Библиотека libncurses.soнужна для нескольких пакетов, которые мы скоро создадим.

15. Установка Bash-5.1.16

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

0. Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf bash5.1.16.tar.gz

cd bash5.1.16

1. Подготовьте Bash к компиляции:

./configure prefix=/usr                  

            build=$(support/config.guess)

            host=$LFS_TGT                

            withoutbashmalloc

withoutbashmalloc

Этот параметр отключает использование функции распределения памяти ( malloc) Bash, которая, как известно, вызывает ошибки сегментации.

Если отключить эту опцию, Bash будет использовать malloc более стабильные функции из Glibc.

2. Скомпилируйте пакет:

make

3. Установите пакет:

make DESTDIR=$LFS install

4. Сделайте ссылку на программы, которые используют sh для оболочки:

mkdir $LFS/bin

ln sv bash $LFS/bin/sh

16. Установка Coreutils-9.0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

0. Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf coreutils9.0.tar.xz

cd coreutils9.0

1. Готовим

./configure prefix=/usr                    

            host=$LFS_TGT                  

            build=$(buildaux/config.guess)

            enableinstallprogram=hostname

            enablenoinstallprogram=kill,uptime

Значение параметров настройки:

enableinstallprogram=hostname

Это позволяет создать и установить двоичный файл имени хоста по умолчанию он отключен, но требуется для набора тестов Perl.

2. Скомпилируйте пакет:

make

3. Установите пакет:

make DESTDIR=$LFS install

4. Переместите программы в их окончательные ожидаемые местоположения.

Хотя в этой временной среде в этом нет необходимости, мы должны это сделать, потому что некоторые программы жестко кодируют исполняемые местоположения:

mv v $LFS/usr/bin/chroot              $LFS/usr/sbin

mkdir pv $LFS/usr/share/man/man8

mv v $LFS/usr/share/man/man1/chroot.1 $LFS/usr/share/man/man8/chroot.8

sed i ‘s/»1″/»8″/’                    $LFS/usr/share/man/man8/chroot.8

17. Установка Diffutils-3.8

0.  Выполняем стандартные действия

cd /mnt/lfs/sources/

tar  pxf diffutils3.8.tar.xz

cd diffutils3.8

1. Готовим Diffutils для компиляции:

./configure prefix=/usr host=$LFS_TGT

2. Скомпилируйте пакет:

make

3. Установите пакет:

make DESTDIR=$LFS install

18. Установка File-5.41

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

0.  Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf file5.41.tar.gz

cd file5.41

1. Приступаем к конфигурированию:

!!! Команда file на хосте сборки должна быть той же версии, что и та, которую мы собираем, чтобы создать файл подписи.

!!! Запустите следующие команды, чтобы построить его:

mkdir build

pushd build

  ../configure disablebzlib      

               disablelibseccomp

               disablexzlib      

               disablezlib

  make

popd

Значение новой опции конфигурации:

disable-*

Сценарий конфигурации пытается использовать некоторые пакеты из основного дистрибутива, если существуют соответствующие файлы библиотеки.

Это может привести к сбою компиляции, если файл библиотеки существует, но отсутствуют соответствующие заголовочные файлы.

Эти параметры предотвращают использование этих ненужных возможностей хоста.

2. Подготовьте файл для компиляции:

./configure prefix=/usr host=$LFS_TGT build=$(./config.guess)

3. Скомпилируйте пакет:

make FILE_COMPILE=$(pwd)/build/src/file

4. Установите пакет:

make DESTDIR=$LFS install

19. Установка Findutils-4.9.0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

!!! Пакет Findutils содержит программы для поиска файлов. Эти программы предназначены для рекурсивного поиска в дереве каталогов, а также для создания,

!!! обслуживания и поиска в базе данных (часто быстрее, чем рекурсивный поиск, но ненадежно, если база данных недавно не обновлялась).

0.  Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf findutils4.9.0.tar.xz

cd findutils4.9.0

1. Подготовьте Findutils к компиляции:

./configure prefix=/usr                  

            localstatedir=/var/lib/locate

            host=$LFS_TGT                

            build=$(buildaux/config.guess)

2. Скомпилируйте пакет:

make

3. Установите пакет:

make DESTDIR=$LFS install

20. Установка Gawk-5.1.1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

!!! Пакет Gawk содержит программы для работы с текстовыми файлами.

0.  Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf gawk5.1.1.tar.xz

cd gawk5.1.1

1. Во-первых, убедитесь, что некоторые ненужные файлы не установлены:

sed i ‘s/extras//’ Makefile.in

2. Подготовьте Gawk к компиляции:

./configure prefix=/usr  

            host=$LFS_TGT

            build=$(buildaux/config.guess)

3. Скомпилируйте пакет:

make

4. Установите пакет:

make DESTDIR=$LFS install

21. Установка Grep-3.7

!!! Пакет Grep содержит программы для поиска по содержимому файлов.

0.  Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf grep3.7.tar.xz

cd grep3.7

1. Подготовьте Grep к компиляции:

./configure prefix=/usr  

            host=$LFS_TGT

2. Скомпилируйте пакет:

make

3. Установите пакет:

make DESTDIR=$LFS install

22. Установка Gzip-1.11

!!! Пакет Gzip содержит программы для сжатия и распаковки файлов.

0.  Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf gzip1.11.tar.xz

cd gzip1.11

1. Подготовим Gzip к компиляции:

./configure prefix=/usr host=$LFS_TGT

2. Скомпилируем пакет:

make

3. Устанавливаем пакет:

make DESTDIR=$LFS install

23. Установка Make-4.3

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

!!! Пакет Make содержит программу для управления генерацией исполняемых файлов и других не исходных файлов пакета из исходных файлов.

0.  Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf make4.3.tar.gz

cd make4.3

1. Подготовим Make к компиляции:

./configure prefix=/usr  

            withoutguile

            host=$LFS_TGT

            build=$(buildaux/config.guess)

Значение новой опции конфигурации:

withoutguile

Несмотря на то, что мы выполняем кросс-компиляцию, configure пытается использовать хитрость с хоста сборки, если находит его.

Это приводит к сбою компиляции, поэтому этот переключатель предотвращает его использование.

2. Скомпилируем пакет:

make

3. Установим пакет:

make DESTDIR=$LFS install

24. Установка Patch-2.7.6

!!! Пакет Patch содержит программу для изменения или создания файлов путем применения файла « заплаты » , обычно создаваемого программой diff .

0.  Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf patch2.7.6.tar.xz

cd patch2.7.6

1. Подготовка к компиляции:

./configure prefix=/usr  

            host=$LFS_TGT

            build=$(buildaux/config.guess)

2. Компилируем  пакет:

make

3. Устанавливаем пакет:

make DESTDIR=$LFS install

25. Установка Sed-4.8

!!! https://www.linuxfromscratch.org/lfs/view/stable/chapter06/sed.html

0.  Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf sed4.8.tar.xz

cd sed4.8

1. Подготовьте Sed для компиляции:

./configure prefix=/usr  

            host=$LFS_TGT

2. Скомпилируйте пакет:

make

3. Установите пакет:

make DESTDIR=$LFS install

26. Установка Tar-1.34

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

!!! Пакет Tar предоставляет возможность создавать tar-архивы, а также выполнять различные другие операции с архивами.

!!! Tar можно использовать в ранее созданных архивах для извлечения файлов, для хранения дополнительных файлов или для обновления или списка файлов, которые уже были сохранены.

0.  Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf tar1.34.tar.xz

cd tar1.34

1. Подготовьте Tar для компиляции:

./configure prefix=/usr                    

            host=$LFS_TGT                  

            build=$(buildaux/config.guess)

2. Скомпилируйте пакет:

make

3. Установите пакет:

make DESTDIR=$LFS install

27. Установка Xz-5.2.5

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

!!! Пакет Xz содержит программы для сжатия и распаковки файлов. Он предоставляет возможности для lzma и более новых форматов сжатия xz.

!!! Сжатие текстовых файлов с помощью xz дает лучший процент сжатия, чем с традиционными командами gzip или bzip2 .

0.  Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf xz5.2.5.tar.xz

cd xz5.2.5

1. Подготовьте Xz к компиляции:

./configure prefix=/usr                    

            host=$LFS_TGT                  

            build=$(buildaux/config.guess)

            disablestatic                  

            docdir=/usr/share/doc/xz5.2.5

2. Скомпилируйте пакет:

make

3. Установите пакет:

make DESTDIR=$LFS install

28. Установка Binutils-2.38 — Прохождение 2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

!!! Пакет Binutils содержит компоновщик, ассемблер и другие инструменты для работы с объектными файлами.

0.  Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf binutils2.38.tar.xz

cd binutils2.38

1.  Binutils поставляет устаревшую копию libtool в архиве. В нем отсутствует поддержка sysroot,

поэтому созданные двоичные файлы будут ошибочно связаны с библиотеками из основного дистрибутива.

Решение этой проблемы:

sed ‘6009s/$add_dir//’ i ltmain.sh

2. Снова создайте отдельный каталог сборки:

mkdir v build

cd       build

3. Подготовьте Binutils к компиляции:

../configure                  

    prefix=/usr              

    build=$(../config.guess)

    host=$LFS_TGT            

    disablenls              

    enableshared            

    disablewerror          

    enable64bitbfd

Значение новых опций конфигурации:

enableshared

Создается libbfdкак общая библиотека.

enable64bitbfd

Включает 64-битную поддержку (на хостах с более узкими размерами слов). Может и не понадобится на 64-битных системах, но не навредит.

4. Скомпилируйте пакет:

make

5. Установите пакет:

make DESTDIR=$LFS install

29. Установка GCC-11.2.0 — Pass 2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

!!! Пакет GCC содержит коллекцию компиляторов GNU, в которую входят компиляторы C и C++.

0.  Выполняем стандартные действия

cd /mnt/lfs/sources/

tar pxf gcc11.2.0.tar.xz

cd gcc11.2.0

1. Как и в первой сборке GCC, требуются пакеты GMP, MPFR и MPC.

Распакуйте архивы и переместите их в каталоги с нужными именами:

tar xf ../mpfr4.1.0.tar.xz

mv v mpfr4.1.0 mpfr

tar xf ../gmp6.2.1.tar.xz

mv v gmp6.2.1 gmp

tar xf ../mpc1.2.1.tar.gz

mv v mpc1.2.1 mpc

2. При сборке на x86_64 измените имя каталога по умолчанию для 64-битных библиотек на « lib » :

case $(uname m) in

  x86_64)

    sed e ‘/m64=/s/lib64/lib/’ i.orig gcc/config/i386/tlinux64

  ;;

esac

3. Снова создайте отдельный каталог сборки:

mkdir v build

cd       build

4. Создайте символическую ссылку, позволяющую собирать libgcc с поддержкой потоков posix:

mkdir pv $LFS_TGT/libgcc

ln s ../../../libgcc/gthrposix.h $LFS_TGT/libgcc/gthrdefault.h

5. Теперь подготовьте GCC к компиляции:

../configure                                      

    build=$(../config.guess)                    

    host=$LFS_TGT                                

    prefix=/usr                                  

    CC_FOR_TARGET=$LFS_TGTgcc                    

    withbuildsysroot=$LFS                      

    enableinitfiniarray                        

    disablenls                                  

    disablemultilib                            

    disabledecimalfloat                        

    disablelibatomic                            

    disablelibgomp                              

    disablelibquadmath                          

    disablelibssp                              

    disablelibvtv                              

    disablelibstdcxx                            

    enablelanguages=c,c++

Значение новых опций конфигурации:

withbuildsysroot=$LFS

Обычно использование hostгарантирует, что для сборки GCC используется кросс-компилятор, и этот компилятор знает, что он должен искать заголовки и библиотеки в файлах $LFS.

Но система сборки GCC использует другие инструменты, которые не знают об этом местоположении.

Этот переключатель нужен для того, чтобы они находили нужные файлы в $LFS, а не на хосте.

enableinitfiniarray

Этот параметр автоматически включается при сборке собственного компилятора с помощью собственного компилятора на платформе x86.

Но здесь мы собираем с помощью кросс-компилятора, поэтому нам нужно явно установить эту опцию.

6. Скомпилируйте пакет:

make

7. Установите пакет:

make DESTDIR=$LFS install

8. В качестве последнего штриха создайте символическую ссылку на утилиту.

Многие программы и сценарии запускают cc вместо gcc , который используется для того, чтобы программы оставались универсальными и,

следовательно, могли использоваться во всех типах систем UNIX, где компилятор GNU C не всегда установлен.

Запуск cc оставляет системному администратору свободу решать, какой компилятор C установить:

ln sv gcc $LFS/usr/bin/cc

30. Смена владельца на каталоги

!!! https://www.linuxfromscratch.org/lfs/view/stable/chapter07/changingowner.html

chown R root:root $LFS/{usr,lib,var,etc,bin,sbin,tools}

case $(uname m) in

  x86_64) chown R root:root $LFS/lib64 ;;

esac

31. Подготовка к chroot

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

!!!На некоторые действия потребуется права root

!!! https://www.linuxfromscratch.org/lfs/view/stable/chapter07/kernfs.html

0. Экспортируем переменную:

export LFS=/mnt/lfs

1. Создаем  каталоги в которые будут смонтированы файловые системы:

mkdir pv $LFS/{dev,proc,sys,run}

2. Создание начальных узлов устройств

!!! Когда ядро ​​загружает систему, ему требуется наличие нескольких узлов устройств, в частности устройств consoleи null.

!!! Узлы устройств должны быть созданы на жестком диске, чтобы они были доступны до того, как заполнится ядро /dev), и, кроме того, когда Linux запускается с init=/bin/bash.

mknod m 600 $LFS/dev/console c 5 1

mknod m 666 $LFS/dev/null c 1 3

3.  Установка и заполнение /dev

!!! Рекомендуемый метод заполнения /dev каталога устройствами смонтировать виртуальную файловую систему (такую ​​как tmpfs)

!!! в /dev каталоге и разрешить динамическое создание устройств в этой виртуальной файловой системе по мере их обнаружения или доступа к ним.

!!! Создание устройства обычно выполняется Udev в процессе загрузки.

!!! Поскольку эта новая система еще не имеет Udev и еще не загружена, ее необходимо смонтировать и заполнить /dev вручную.

!!! Это достигается путем привязки монтирования хост-системы./devкаталог.

!!! Связное монтирование это особый тип монтирования, который позволяет создать зеркало каталога или точки монтирования в другом месте.

mount v bind /dev $LFS/dev

4. Монтирование файловых систем виртуального ядра

mount v bind /dev/pts $LFS/dev/pts

mount vt proc proc $LFS/proc

mount vt sysfs sysfs $LFS/sys

mount vt tmpfs tmpfs $LFS/run

!!! В некоторых хост-системах /dev/shm это символическая ссылка на /run/shm.

!!! /run tmpfs был смонтирован выше, поэтому в этом случае нужно создать только каталог.

if [ h $LFS/dev/shm ]; then

  mkdir pv $LFS/$(readlink $LFS/dev/shm)

fi

32. chroot

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

!!! Теперь, когда все пакеты, необходимые для сборки остальных необходимых инструментов, находятся в системе, пришло время войти в среду chroot,

!!! чтобы завершить установку оставшихся временных инструментов.

!!! Эта среда будет использоваться также для установки конечной системы.

!!! От имени пользователя root выполните следующую команду, чтобы войти в среду:

su root

export LFS=/mnt/lfs

chown R root:root $LFS/tools

chroot «$LFS» /usr/bin/env i  

    HOME=/root                  

    TERM=«$TERM»                

    PS1=‘(lfs chroot) u:w$ ‘

    PATH=/usr/bin:/usr/sbin    

    /bin/bash login

!!! Опции:

!!! i, заданная команде env , очистит все переменные среды chroot. После этого снова задаются только переменные HOME, TERM, PS1 и .PATH

!!! Конструкция TERM=$TERM установит для TERM переменной внутри chroot то же значение, что и вне chroot.

!!! Эта переменная необходима для правильной работы таких программ, как vim и меньше.

!!! Если желательны другие переменные, такие как CFLAGS или CXXFLAGS, это хорошее место, чтобы установить их снова.

!!! С этого момента больше нет необходимости использовать эту LFS переменную, поскольку вся работа будет ограничена файловой системой LFS.

!!! Это связано с тем, что оболочке Bash сообщается, что $LFS теперь это корневой ( /) каталог.

!!! Обратите внимание, что /tools/binэто не в PATH. Это означает, что кросс-тулчейн больше не будет использоваться в среде chroot.

!!! Обратите внимание, что в командной строке bash «I have no name!» будет указано, Это нормально, поскольку /etc/passwd файл еще не создан.

34. Создание каталогов для LFS

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

!!! после удачного приглашения в систему

!!! Пришло время создать полную структуру в файловой системе LFS.

!!! Создайте несколько каталогов корневого уровня, которых нет в ограниченном наборе, требуемом в предыдущих главах, с помощью следующей команды:

mkdir pv /{boot,home,mnt,opt,srv}

!!! Создайте необходимый набор подкаталогов ниже корневого уровня, выполнив следующие команды:

mkdir pv /etc/{opt,sysconfig}

mkdir pv /lib/firmware

mkdir pv /media/{floppy,cdrom}

mkdir pv /usr/{,local/}{include,src}

mkdir pv /usr/local/{bin,lib,sbin}

mkdir pv /usr/{,local/}share/{color,dict,doc,info,locale,man}

mkdir pv /usr/{,local/}share/{misc,terminfo,zoneinfo}

mkdir pv /usr/{,local/}share/man/man{1..8}

mkdir pv /var/{cache,local,log,mail,opt,spool}

mkdir pv /var/lib/{color,misc,locate}

ln sfv /run /var/run

ln sfv /run/lock /var/lock

install dv m 0750 /root

install dv m 1777 /tmp /var/tmp

!!! Каталоги по умолчанию создаются с режимом разрешений 755, но это нежелательно для всех каталогов.

!!! В приведенных выше командах вносятся два изменения: одно в домашний каталог пользователя root, а другое в каталоги для временных файлов.

!!! Первое изменение режима гарантирует, что никто не сможет войти в /root каталог так же, как обычный пользователь сделал бы со своим домашним каталогом.

!!! Второе изменение режима гарантирует, что любой пользователь может записывать в каталоги /tmpи /var/tmp, но не может удалять из них файлы другого пользователя.

!!! Последнее запрещено так называемым « липким битом » , старшим битом (1) в битовой маске 1777.

!!! Подробнее про структуру каталогов https://refspecs.linuxfoundation.org/fhs.shtml

35. Создание основных файлов и символических ссылок:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

0. Исторически сложилось так, что Linux поддерживает список смонтированных файловых систем в файле /etc/mtab.

Современные ядра поддерживают этот список внутри себя и предоставляют его пользователю через /proc файловую систему.

Чтобы удовлетворить утилиты, которые ожидают наличия /etc/mtab, создайте следующую символическую ссылку:

ln sv /proc/self/mounts /etc/mtab

1. Создайте базовый /etc/host sфайл, на который будут ссылаться некоторые наборы тестов, а также один из файлов конфигурации Perl:

cat > /etc/hosts << EOF

127.0.0.1  localhost $(hostname)

::1        localhost

EOF

2. Чтобы пользователь rootмог войти в систему и чтобы имя « root » было распознано, в файлах /etc/passwdи должны быть соответствующие записи./etc/group

!!! Фактический пароль для root будет установлен позже.

2.1 Создайте /etc/passwdфайл, выполнив следующую команду:

cat > /etc/passwd << «EOF»

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/dev/null:/usr/bin/false

daemon:x:6:6:Daemon User:/dev/null:/usr/bin/false

messagebus:x:18:18:DBus Message Daemon User:/run/dbus:/usr/bin/false

systemdjournalgateway:x:73:73:systemd Journal Gateway:/:/usr/bin/false

systemdjournalremote:x:74:74:systemd Journal Remote:/:/usr/bin/false

systemdjournalupload:x:75:75:systemd Journal Upload:/:/usr/bin/false

systemdnetwork:x:76:76:systemd Network Management:/:/usr/bin/false

systemdresolve:x:77:77:systemd Resolver:/:/usr/bin/false

systemdtimesync:x:78:78:systemd Time Synchronization:/:/usr/bin/false

systemdcoredump:x:79:79:systemd Core Dumper:/:/usr/bin/false

uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/false

systemdoom:x:81:81:systemd Out Of Memory Daemon:/:/usr/bin/false

nobody:x:99:99:Unprivileged User:/dev/null:/usr/bin/false

EOF

2.2 Создайте /etc/groupфайл, выполнив следующую команду:

cat > /etc/group << «EOF»

root:x:0:

bin:x:1:daemon

sys:x:2:

kmem:x:3:

tape:x:4:

tty:x:5:

daemon:x:6:

floppy:x:7:

disk:x:8:

lp:x:9:

dialout:x:10:

audio:x:11:

video:x:12:

utmp:x:13:

usb:x:14:

cdrom:x:15:

adm:x:16:

messagebus:x:18:

systemdjournal:x:23:

input:x:24:

mail:x:34:

kvm:x:61:

systemdjournalgateway:x:73:

systemdjournalremote:x:74:

systemdjournalupload:x:75:

systemdnetwork:x:76:

systemdresolve:x:77:

systemdtimesync:x:78:

systemdcoredump:x:79:

uuidd:x:80:

systemdoom:x:81:

wheel:x:97:

nogroup:x:99:

users:x:999:

EOF

3. Для некоторых тестов нам потребуется обычный пользователь, добавляем этого пользователяы.

echo «tester:x:101:101::/home/tester:/bin/bash» >> /etc/passwd

echo «tester:x:101:» >> /etc/group

install o tester d /home/tester

4. Чтобы удалить « У меня нет имени! » , запустите новую оболочку.

Поскольку файлы /etc/passwdи /etc/groupбыли созданы, разрешение имен пользователей и групп теперь будет работать:

exec /usr/bin/bash login

5. Программы login , agetty и init (и другие) используют ряд файлов журналов для записи информации, такой как кто и когда входил в систему.

Однако эти программы не будут записывать файлы журналов, если они еще не существуют. Инициализируйте файлы журнала и предоставьте им соответствующие разрешения:

touch /var/log/{btmp,lastlog,faillog,wtmp}

chgrp v utmp /var/log/lastlog

chmod v 664  /var/log/lastlog

chmod v 600  /var/log/btmp

!!! Файл /var/log/wtmp записывает все входы и выходы.

!!! Файл /var/log/lastlog записывает, когда каждый пользователь в последний раз входил в систему.

!!! Файл /var/log/faillog записывает неудачные попытки входа в систему.

!!! Файл /var/log/btmp записывает неудачные попытки входа в систему.

!!! В файле /run/utmp  записываются пользователи, которые в данный момент вошли в систему.

!!! Этот файл создается динамически в сценариях загрузки.

36. LibstdС++ из GCC-11.2.0, проход 2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

!!! Libstdc++ является частью исходников GCC. Сначала вы должны распаковать архив GCC и перейти в gcc11.2.0 каталог.

0. Создайте ссылку, которая существует при сборке libstdc++ в дереве gcc:

ln s gthrposix.h libgcc/gthrdefault.h

1. Создайте отдельный каталог сборки для libstdc++ и введите его:

mkdir v build

cd       build

2. Подготовьте libstdc++ к компиляции:

../libstdc++-v3/configure            

    CXXFLAGS=«-g -O2 -D_GNU_SOURCE»  

    prefix=/usr                    

    disablemultilib              

    disablenls                    

    host=$(uname m)lfslinuxgnu

    disablelibstdcxxpch

Значение параметров настройки:

CXXFLAGS=«-g -O2 -D_GNU_SOURCE»

Эти флаги передаются Makefile верхнего уровня при полной сборке GCC.

host=$(uname m)lfslinuxgnu

Мы должны имитировать то, что произошло бы, если бы этот пакет был собран как часть полной сборки компилятора.

Этот переключатель будет передан для настройки механизмом сборки GCC.

disablelibstdcxxpch

Этот переключатель предотвращает установку предварительно скомпилированных включаемых файлов, которые на данном этапе не нужны.

3. Скомпилируйте libstdc++, запустив:

make

4. Установите библиотеку:

make install

37. Установка Gettext-0.21

!!! Пакет Gettext содержит утилиты для интернационализации и локализации.

!!! Это позволяет компилировать программы с помощью NLS (поддержка родного языка), что позволяет им выводить сообщения на родном языке пользователя.

0. Подготовьте Gettext для компиляции:

./configure disableshared

Значение опции конфигурации:

disableshared

В настоящее время нам не нужно устанавливать какую-либо из общих библиотек Gettext, поэтому нет необходимости их создавать.

1. Скомпилируйте пакет:

make

2. Установим программы msgfmt, msgmerge и xgettext:

cp v gettexttools/src/{msgfmt,msgmerge,xgettext} /usr/bin

38. Установка Bison-3.8.2

!!! Пакет Bison содержит генератор парсеров.

0. Подготовьте Bison для компиляции:

./configure prefix=/usr

            docdir=/usr/share/doc/bison3.8.2

Значение новой опции конфигурации:

docdir=/usr/share/doc/bison3.8.2

Это говорит системе сборки установить документацию bison в версионный каталог.

1. Скомпилируйте пакет:

make

2. Установите пакет:

make install

39. Установка Perl-5.34.0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

!!! https://www.linuxfromscratch.org/lfs/downloads/stable-systemd/LFS-BOOK-11.1-NOCHUNKS.html#ch-tools-binutils-pass1

0. Подготовьте Perl к компиляции:

sh Configure des                                        

             Dprefix=/usr                              

             Dvendorprefix=/usr                        

             Dprivlib=/usr/lib/perl5/5.34/core_perl    

             Darchlib=/usr/lib/perl5/5.34/core_perl    

             Dsitelib=/usr/lib/perl5/5.34/site_perl    

             Dsitearch=/usr/lib/perl5/5.34/site_perl    

             Dvendorlib=/usr/lib/perl5/5.34/vendor_perl

             Dvendorarch=/usr/lib/perl5/5.34/vendor_perl

Значение новых опций Configure:

des

Это комбинация трех параметров:

d использует значения по умолчанию для всех элементов;

e обеспечивает выполнение всех задач;

s отключает несущественный вывод.

1. Скомпилируйте пакет:

make

2. Установите пакет:

make install

40. Установка Python-3.10.2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

!!! Пакет Python 3 содержит среду разработки Python.

!!! Он полезен для объектно-ориентированного программирования, написания сценариев, прототипирования больших программ или разработки целых приложений.

!!! Есть два файла пакета, имя которых начинается с « python » . Тот, из которого нужно извлечь Python3.10.2.tar.xz (обратите внимание на первую букву в верхнем регистре).

0. Подготовьте Python к компиляции:

./configure prefix=/usr  

            enableshared

            withoutensurepip

Значение опции конфигурации:

enableshared

Этот переключатель предотвращает установку статических библиотек.

withoutensurepip

Этот переключатель отключает установщик пакета Python, который на данном этапе не нужен.

1. Скомпилируйте пакет:

make

!!! Некоторые модули Python 3 сейчас не могут быть собраны, потому что зависимости еще не установлены.

!!! Однако система сборки по-прежнему пытается их собрать, поэтому компиляция некоторых файлов завершится ошибкой, и может показаться, что сообщение компилятора указывает на «фатальную ошибку».

!!! Сообщение следует игнорировать.

!!! Просто убедитесь, что команда make верхнего уровня не завершилась ошибкой.

2. Установите пакет:

make install

41. Установка Texinfo-6.8

0. Во-первых, устраните проблему со сборкой пакета с помощью Glibc2.34 или более поздней версии:

sed e ‘s/__attribute_nonnull__/__nonnull/’

    i gnulib/lib/malloc/dynarrayskeleton.c

1. Подготовьте Texinfo к компиляции:

./configure prefix=/usr

2. Скомпилируйте пакет:

make

3. Установите пакет:

make install

42. Установка Util-linux-2.37.4:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

!!! Пакет Utillinux содержит различные утилиты.

0. FHS рекомендует использовать /var/lib/hwclock каталог вместо обычного /etc каталога в качестве места для adjti meфайла.

Создайте этот каталог с помощью:

mkdir pv /var/lib/hwclock

Подготовьте Utillinux к компиляции:

./configure ADJTIME_PATH=/var/lib/hwclock/adjtime    

            libdir=/usr/lib    

            docdir=/usr/share/doc/utillinux2.37.4

            disablechfnchsh  

            disablelogin      

            disablenologin    

            disablesu        

            disablesetpriv    

            disablerunuser    

            disablepylibmount

            disablestatic    

            withoutpython    

            runstatedir=/run

Значение параметров настройки:

ADJTIME_PATH=/var/lib/hwclock/adjtime

Это устанавливает расположение файла записи информации об аппаратных часах в соответствии с FHS.

Это не обязательно для этого временного инструмента, но предотвращает создание файла в другом месте, который не будет перезаписан или удален при сборке окончательного пакета utillinux.

libdir=/usr/lib

Этот переключатель гарантирует, что .soсимволические ссылки будут напрямую указывать на файл общей библиотеки в том же каталоге ( /usr/lib).

disable-*

Эти переключатели предотвращают появление предупреждений о сборке компонентов, для которых требуются пакеты, отсутствующие в LFS или еще не установленные.

withoutpython

Этот переключатель отключает использование Python . Это позволяет избежать попыток создания ненужных привязок.

runstatedir=/run

Этот переключатель правильно устанавливает местоположение сокета, используемого uuiddlibuuid.

1. Скомпилируйте пакет:

make

2. Установите пакет:

make install

42. Очистка и сохранение временной системы:

0. Во-первых, удалите текущую установленную документацию, чтобы предотвратить их попадание в окончательную систему и сэкономить около 35 МБ:

rm rf /usr/share/{info,man,doc}/*

1. Во-вторых, файлы libtool .la полезны только при компоновке статических библиотек.

Они не нужны и потенциально опасны при использовании динамических разделяемых библиотек, особенно при использовании систем сборки, отличных от autotools.

Пока еще в chroot, удалите эти файлы сейчас:

find /usr/{lib,libexec} name *.la delete

2. Текущий размер системы составляет около 3 ГБ, однако каталог /tools больше не нужен.

Он использует около 1 ГБ дискового пространства.

Удалите его сейчас:

rm rf /tools

43. Резервное копирование

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

!!! На данный момент основные программы и библиотеки созданы, и ваша текущая система LFS находится в хорошем состоянии.

!!! В случае фатальных сбоев в последующих главах часто оказывается, что удалить все и начать заново (более осторожно) лучший вариант восстановления.

0. Мы решили сделать резервную копию, покинем среду chroot:

exit

1. Перед созданием резервной копии размонтируйте виртуальные файловые системы:

umount $LFS/dev/pts

umount $LFS/{sys,proc,run,dev}

2. Убедитесь, что у вас есть как минимум 1 ГБ свободного места на диске (исходные tar-архивы будут включены в архив резервной копии) в файловой системе,

содержащей каталог, в котором вы создаете архив резервной копии.

df h

3. Выполняем резервирование:

export LFS=/mnt/lfs

cd $LFS

tar cJpf $HOME/lfstemptools11.1systemd.tar.xz .

4. В каталоге /root должен появится архив

43. Пример восстановления из резервной копии:

!!! Предупреждение

!!! Следующие команды чрезвычайно опасны.

!!! Если вы запустите rm rf ./* от имени пользователя root и не перейдете в каталог $LFS или LFS не установите переменную среды для пользователя root, это разрушит всю вашу хост-систему.

!!! ВЫ ПРЕДУПРЕЖДЕНЫ.

cd $LFS

rm rf ./*

tar xpf $HOME/lfstemptools11.1systemd.tar.xz

44. Для продолжения работы с LFS нам снова требуется выполнить chroot:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

!!! это шаги 31 и 32

0.  Установка и заполнение /dev

!!! Рекомендуемый метод заполнения /dev каталога устройствами смонтировать виртуальную файловую систему (такую ​​как tmpfs)

!!! в /dev каталоге и разрешить динамическое создание устройств в этой виртуальной файловой системе по мере их обнаружения или доступа к ним.

!!! Создание устройства обычно выполняется Udev в процессе загрузки.

!!! Поскольку эта новая система еще не имеет Udev и еще не загружена, ее необходимо смонтировать и заполнить /dev вручную.

!!! Это достигается путем привязки монтирования хост-системы./devкаталог.

!!! Связное монтирование это особый тип монтирования, который позволяет создать зеркало каталога или точки монтирования в другом месте.

mount v bind /dev $LFS/dev

1. Монтирование файловых систем виртуального ядра

mount v bind /dev/pts $LFS/dev/pts

mount vt proc proc $LFS/proc

mount vt sysfs sysfs $LFS/sys

mount vt tmpfs tmpfs $LFS/run

!!! В некоторых хост-системах /dev/shm это символическая ссылка на /run/shm.

!!! /run tmpfs был смонтирован выше, поэтому в этом случае нужно создать только каталог.

if [ h $LFS/dev/shm ]; then

  mkdir pv $LFS/$(readlink $LFS/dev/shm)

fi

2. Выполняем chroot

chroot «$LFS» /usr/bin/env i  

    HOME=/root                  

    TERM=«$TERM»                

    PS1=‘(lfs chroot) u:w$ ‘

    PATH=/usr/bin:/usr/sbin    

    /bin/bash login

45. Установим Man-pages-5.13:

!!! Пакет Manpages содержит более 2200 справочных страниц.

make prefix=/usr install

46. Установка Iana-etc-20220207:

!!! Пакет IanaEtc предоставляет данные для сетевых служб и протоколов.

cp services protocols /etc

Краткие описания:

/etc/protocols

Описывает различные интернет-протоколы DARPA, доступные из подсистемы TCP/IP.

/etc/services

Обеспечивает сопоставление между понятными текстовыми именами для интернет-сервисов и их базовыми назначенными номерами портов и типами протоколов.

47. Установка Glibc-2.35

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

!!! Некоторые программы Glibc используют /var/dbкаталог, не совместимый с FHS, для хранения своих данных времени выполнения.

0. Примените следующий патч, чтобы такие программы хранили свои данные времени выполнения в местах, совместимых с FHS:

patch Np1 i ../glibc2.35fhs1.patch

1. Документация Glibc рекомендует собирать Glibc в выделенном каталоге сборки:

mkdir v build

cd       build

2. Убедитесь, что утилиты ldconfig и sln будут установлены в /usr/sbin:

echo «rootsbindir=/usr/sbin» > configparms

3. Подготовьте Glibc к компиляции:

../configure prefix=/usr                            

             disablewerror                        

             enablekernel=3.2                      

             enablestackprotector=strong          

             withheaders=/usr/include              

             libc_cv_slibdir=/usr/lib

Значение параметров настройки:

disablewerror

Этот параметр отключает параметр Werror, передаваемый в GCC. Это необходимо для запуска набора тестов.

enablekernel=3.2

Эта опция сообщает системе сборки, что этот glibc может использоваться с ядрами версии 3.2. Это означает создание обходных путей на случай, если системный вызов, представленный в более поздней версии, нельзя будет использовать.

enablestackprotector=strong

Этот параметр повышает безопасность системы за счет добавления дополнительного кода для проверки переполнения буфера, например атак, разрушающих стек.

withheaders=/usr/include

Эта опция сообщает системе сборки, где найти заголовки API ядра.

libc_cv_slibdir=/usr/lib

Эта переменная устанавливает правильную библиотеку для всех систем. Мы не хотим, чтобы использовалась lib64.

4. Скомпилируйте пакет:

!!! Важный

!!! В этом разделе набор тестов для Glibc считается критически важным. Ни в коем случае не пропускайте его.

make

5. Вообще несколько тестов не проходят. Ошибки тестирования, перечисленные ниже, обычно можно безопасно игнорировать.

make check

Вы можете увидеть некоторые неудачные тесты. Набор тестов Glibc в некоторой степени зависит от хост-системы.

Несколько отказов из более чем 4200 тестов вообще можно игнорировать.

Это список наиболее распространенных проблем последних версий LFS:

Известно, что io/tstlchmod не работает в среде chroot LFS.

Известно, что misc/tstttyname не работает в среде chroot LFS.

Известно , что тест nss/tstnssfileshostsmulti завершается неудачно, если в системе нет IP-адресов без замыкания на себя.

6. Хотя это безобидное сообщение, на этапе установки Glibc будет жаловаться на отсутствие /etc/ld.so.conf.

Предотвратите это предупреждение с помощью:

touch /etc/ld.so.conf

7. Исправьте Makefile, чтобы пропустить ненужную проверку работоспособности, которая не работает в частичной среде LFS:

sed ‘/test-installation/s@$(PERL)@echo not running@’ i ../Makefile

8. Установите пакет:

make install

9. Исправьте жестко заданный путь к исполняемому загрузчику в скрипте ldd:

sed ‘/RTLDLIST=/s@/usr@@g’ i /usr/bin/ldd

10. Установите файл конфигурации и каталог времени выполнения для nscd:

cp v ../nscd/nscd.conf /etc/nscd.conf

mkdir pv /var/cache/nscd

11. Установите файлы поддержки systemd для nscd:

install v Dm644 ../nscd/nscd.tmpfiles /usr/lib/tmpfiles.d/nscd.conf

install v Dm644 ../nscd/nscd.service /usr/lib/systemd/system/nscd.service

12. Затем установите локали, которые могут заставить систему отвечать на другом языке.

mkdir pv /usr/lib/locale

localedef i POSIX f UTF8 C.UTF8 2> /dev/null || true

localedef i cs_CZ f UTF8 cs_CZ.UTF8

localedef i de_DE f ISO88591 de_DE

localedef i de_DE@euro f ISO885915 de_DE@euro

localedef i de_DE f UTF8 de_DE.UTF8

localedef i el_GR f ISO88597 el_GR

localedef i en_GB f ISO88591 en_GB

localedef i en_GB f UTF8 en_GB.UTF8

localedef i en_HK f ISO88591 en_HK

localedef i en_PH f ISO88591 en_PH

localedef i en_US f ISO88591 en_US

localedef i en_US f UTF8 en_US.UTF8

localedef i es_ES f ISO885915 es_ES@euro

localedef i es_MX f ISO88591 es_MX

localedef i fa_IR f UTF8 fa_IR

localedef i fr_FR f ISO88591 fr_FR

localedef i fr_FR@euro f ISO885915 fr_FR@euro

localedef i fr_FR f UTF8 fr_FR.UTF8

localedef i is_IS f ISO88591 is_IS

localedef i is_IS f UTF8 is_IS.UTF8

localedef i it_IT f ISO88591 it_IT

localedef i it_IT f ISO885915 it_IT@euro

localedef i it_IT f UTF8 it_IT.UTF8

localedef i ja_JP f EUCJP ja_JP

localedef i ja_JP f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true

localedef i ja_JP f UTF8 ja_JP.UTF8

localedef i nl_NL@euro f ISO885915 nl_NL@euro

localedef i ru_RU f KOI8R ru_RU.KOI8R

localedef i ru_RU f UTF8 ru_RU.UTF8

localedef i se_NO f UTF8 se_NO.UTF8

localedef i ta_IN f UTF8 ta_IN.UTF8

localedef i tr_TR f UTF8 tr_TR.UTF8

localedef i zh_CN f GB18030 zh_CN.GB18030

localedef i zh_HK f BIG5HKSCS zh_HK.BIG5HKSCS

localedef i zh_TW f UTF8 zh_TW.UTF8

13. В качестве альтернативы можно установить glibc2.35/localedata/SUPPORTEDсразу все локали,

перечисленные в файле (включая все перечисленные выше локали и многие другие), с помощью следующей трудоемкой команды:

make localedata/installlocales

14. Затем используйте команду localedef для создания и установки локалей, не перечисленных в glibc2.35/localedata/SUPPORTEDфайле, когда они вам понадобятся.

Например, для некоторых тестов далее в этой главе потребуются следующие две локали:

localedef i POSIX f UTF8 C.UTF8 2> /dev/null || true

localedef i ja_JP f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true

48. Configuring Glibc adding nsswitch.conf:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

cat > /etc/nsswitch.conf << «EOF»

# Begin /etc/nsswitch.conf

passwd: files

group: files

shadow: files

hosts: files dns

networks: files

protocols: files

services: files

ethers: files

rpc: files

# End /etc/nsswitch.conf

EOF

49. Configuring Glibc adding time zone data:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

0. Установите и настройте данные часового пояса со следующим:

tar xf ../../tzdata2021e.tar.gz

ZONEINFO=/usr/share/zoneinfo

mkdir pv $ZONEINFO/{posix,right}

for tz in etcetera southamerica northamerica europe africa antarctica  

          asia australasia backward; do

    zic L /dev/null   d $ZONEINFO       ${tz}

    zic L /dev/null   d $ZONEINFO/posix ${tz}

    zic L leapseconds d $ZONEINFO/right ${tz}

done

cp v zone.tab zone1970.tab iso3166.tab $ZONEINFO

zic d $ZONEINFO p America/New_York

unset ZONEINFO

Значение команд zic:

zic L /dev/null ...

Это создает часовые пояса posix без дополнительных секунд.

Обычно их помещают в оба zoneinfoи zoneinfo/posix. Необходимо поставить часовые пояса POSIX в zoneinfo, иначе различные тестовые наборы будут сообщать об ошибках.

Во встроенной системе, где места мало и вы не собираетесь когда-либо обновлять часовые пояса, вы можете сэкономить 1,9 МБ, не используя posix каталог,

но некоторые приложения или наборы тестов могут привести к некоторым сбоям.

zic L leapseconds ...

Это создает правильные часовые пояса, включая дополнительные секунды.

Во встроенной системе, где места мало и вы не собираетесь когда-либо обновлять часовые пояса или заботиться о правильном времени, вы можете сэкономить 1,9 МБ, исключив right каталог.

zic ... p ...

Это создает posixrulesфайл.

Мы используем Нью-Йорк, потому что POSIX требует, чтобы правила перехода на летнее время соответствовали правилам США.

1. Один из способов определить местный часовой пояс запустить следующий скрипт:

tzselect

2. Затем создайте /etc/localtimeфайл, запустив:

ln sfv /usr/share/zoneinfo/<xxx> /etc/localtime

50. Настройка динамического загрузчика

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

!!! По умолчанию динамический загрузчик ( ) выполняет /lib/ldlinux.so.2 поиск динамических библиотек, которые необходимы программам по мере их запуска.

!!! Однако, если есть библиотеки в каталогах, отличных от и , их необходимо добавить в файл, чтобы динамический загрузчик мог их найти.

!!! Два каталога, которые, как известно, содержат дополнительные библиотеки, это и , поэтому добавьте эти каталоги в путь поиска динамического загрузчика.

!!! /lib/usr/lib/lib/usr/lib/etc/ld.so.conf/usr/local/lib/opt/lib

0. Создайте новый файл /etc/ld.so.conf, выполнив следующее:

cat > /etc/ld.so.conf << «EOF»

# Begin /etc/ld.so.conf

/usr/local/lib

/opt/lib

EOF

1. При желании динамический загрузчик также может искать каталог и включать содержимое найденных там файлов.

Обычно файлы в этом каталоге include представляют собой одну строку, указывающую путь к нужной библиотеке. Чтобы добавить эту возможность, выполните следующие команды:

cat >> /etc/ld.so.conf << «EOF»

# Add an include directory

include /etc/ld.so.conf.d/*.conf

EOF

mkdir pv /etc/ld.so.conf.d

Промежуточный этап про сеть

wget http://roy.marples.name/downloads/dhcpcd/dhcpcd-9.4.1.tar.xz —directory-prefix=$LFS/sources

wget https://www.linuxfromscratch.org/blfs/downloads/11.1/blfs-bootscripts-20210826.tar.xz —directory-prefix=$LFS/sources/

51. Содержимое Glibc

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

Installed programs:

gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, ld.so (symlink to ldlinuxx8664.so.2 or ldlinux.so.2),

locale, localedef, makedb, mtrace, nscd, pcprofiledump, pldd, sln, sotruss, sprof, tzselect, xtrace, zdump, and zic

Installed libraries:

ldlinuxx8664.so.2, ldlinux.so.2, libBrokenLocale.{a,so}, libanl.{a,so}, libc.{a,so}, libc_nonshared.a, libc_malloc_debug.so,

libcrypt.{a,so}, libdl.{a,so.2}, libg.a, libm.{a,so}, libmcheck.a, libmemusage.so, libmvec.{a,so}, libnsl.so.1, libnss_compat.so,

libnss_dns.so, libnss_files.so, libnss_hesiod.so, libpcprofile.so, libpthread.{a,so.0}, libresolv.{a,so}, librt.{a,so.1},

libthread_db.so, and libutil.{a,so.1}

Installed directories:

/usr/include/arpa, /usr/include/bits, /usr/include/gnu, /usr/include/net, /usr/include/netash, /usr/include/netatalk, /usr/include/netax25,

/usr/include/neteconet, /usr/include/netinet, /usr/include/netipx, /usr/include/netiucv, /usr/include/netpacket, /usr/include/netrom,

/usr/include/netrose, /usr/include/nfs, /usr/include/protocols, /usr/include/rpc, /usr/include/sys, /usr/lib/audit, /usr/lib/gconv,

/usr/lib/locale, /usr/libexec/getconf, /usr/share/i18n, /usr/share/zoneinfo, /var/cache/nscd, and /var/lib/nss_db

gencat              Генерирует каталоги сообщений.

getconf             Отображает значения конфигурации системы для конкретных переменных файловой системы.

getent              Получает записи из административной базы данных.

iconv               Выполняет преобразование набора символов.

iconvconfig         Создает быстро загружаемые файлы конфигурации модуля iconv.

ldconfig            Настраивает привязки среды выполнения динамического компоновщика.

ldd                 Отчеты о том, какие общие библиотеки требуются каждой данной программе или общей библиотеке.

lddlibc4            Помогает ldd с объектными файлами. Его нет в более новых архитектурах, таких как x86_64.

locale              Выводит различную информацию о текущей локали.

localedef           Компилирует спецификации локали.

makedb              Создает простую базу данных из текстового ввода.

mtrace              Читает и интерпретирует файл трассировки памяти и отображает сводку в удобочитаемом формате.

nscd                Демон, обеспечивающий кеширование наиболее распространенных запросов службы имен.

pcprofiledump       Дамп информации, сгенерированный профилированием ПК.

pldd                Перечисляет динамические общие объекты, используемые запущенными процессами.

sln                 Статически скомпонованная программа ln.

sotruss             Отслеживает вызовы процедур общей библиотеки указанной команды.

sprof               Читает и отображает данные профилирования общих объектов.

tzselect            Спрашивает пользователя о местоположении системы и сообщает соответствующее описание часового пояса.

xtrace              Отслеживает выполнение программы, печатая текущую выполняемую функцию.

zdump               Дампер часовых поясов.

zic                 Компилятор часового пояса.

ld-*.so             Вспомогательная программа для исполняемых файлов общей библиотеки.

libBrokenLocale     Используется внутри Glibc как грубый взлом для запуска сломанных программ (например, некоторых приложений Motif).

libanl              Библиотека асинхронного поиска имен.

libc                Основная библиотека C.

libc_malloc_debug   Включает проверку выделения памяти при предварительной загрузке.

libcrypt            Библиотека криптографии.

libdl               Пустая библиотека, не содержащая функций. Ранее была библиотека интерфейса динамической компоновки, функции которой теперь находятся в libc.

libg                Пустая библиотека, не содержащая функций. Раньше была библиотека времени выполнения для g++

libm                Математическая библиотека

libmvec             Библиотека векторных математических вычислений, подключаемая по мере необходимости при libm использовании.

libmcheck           Включает проверку выделения памяти при подключении к

libmemusage         Используется memusage для сбора информации об использовании памяти программой.

libnsl              Библиотека сетевых сервисов устарела.

libnss_*            Модули Name Service Switch, содержащие функции для разрешения имен хостов, имен пользователей, имен групп, псевдонимов, служб, протоколов и т. д.

                    Загружаются в libc соответствии с конфигурацией в /etc/nsswitch.conf

libpcprofile        Может быть предварительно загружен в профиль ПК в виде исполняемого файла.

libpthread          Пустая библиотека, не содержащая функций. Раньше он содержал функции, обеспечивающие большинство интерфейсов, указанных в расширении реального времени POSIX.1b, теперь в libc.

libresolv           Содержит функции для создания, отправки и интерпретации пакетов на серверы доменных имен в Интернете.

librt               Содержит функции, предоставляющие большинство интерфейсов, указанных в расширении реального времени POSIX.1b.

libthread_db        Содержит функции, полезные для создания отладчиков многопоточных программ.

libutil             Пустая библиотека, не содержащая функций. Ранее содержал код для « стандартных » функций, используемых во многих различных утилитах Unix. Эти функции теперь в libc.

52. Установка Zlib-1.2.11:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

!!! Установленные библиотеки: libz.so

!!! libz Содержит функции сжатия и распаковки, используемые некоторыми программами.

0. Подготовьте Zlib к компиляции:

./configure prefix=/usr

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

4. Удалите бесполезную статическую библиотеку:

rm fv /usr/lib/libz.a

53. Установка Bzip2-1.0.8:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

0. Примените патч, который установит документацию для этого пакета:

patch Np1 i ../bzip21.0.8install_docs1.patch

1. Следующая команда обеспечивает относительную установку символических ссылок:

sed i ‘s@(ln s f )$(PREFIX)/bin/@1@’ Makefile

2. Убедитесь, что справочные страницы установлены в правильном месте:

sed i «s@(PREFIX)/man@(PREFIX)/share/man@g» Makefile

3. Подготовьте Bzip2 к компиляции с помощью:

make f Makefilelibbz2_so

make clean

Значение параметра make:

f Makefilelibbz2_so

Это приведет к сборке Bzip2 с использованием другого Makefile файла, в данном случае Makefilelibbz2_soфайла, который создает динамическую libbz2.so библиотеку и связывает с ней утилиты Bzip2.

4. Скомпилируйте и протестируйте пакет:

make

5. Скомпилируйте и протестируйте пакет:

make PREFIX=/usr install

6. Установите общую библиотеку:

cp av libbz2.so.* /usr/lib

ln sv libbz2.so.1.0.8 /usr/lib/libbz2.so

7. Установите общий двоичный файл bzip2/usr/bin в каталог и замените две копии bzip2 символическими ссылками:

cp v bzip2shared /usr/bin/bzip2

for i in /usr/bin/{bzcat,bunzip2}; do

  ln sfv bzip2 $i

done

8. Удалите бесполезную статическую библиотеку:

rm fv /usr/lib/libbz2.a

9. Содержимое bzip

bunzip2 Распаковывает bzip-файлы

bzcat   Распаковывает в стандартный вывод

bzcmp   Запускает cmp для bzip-файлов

bzdiff  Запускает diff для bzip-файлов

bzegrep Запускает egrep для bzip-файлов

bzfgrep Запускает fgrep для bzip-файлов

bzgrep  Запускает grep для bzip-файлов

bzip2   Сжимает файлы, используя алгоритм сжатия текста с блочной сортировкой Берроуза-Уилера с кодированием Хаффмана; степень сжатия лучше, чем у более традиционных компрессоров, использующих алгоритмы LempelZiv, такие как gzip

bzip2recover    Пытается восстановить данные из поврежденных bzip-файлов.

bzless  Меньше работает с bzip -файлами

bzmore  Работает больше на bzip-файлах

libbz2  Библиотека, реализующая сжатие данных без потерь с блочной сортировкой с использованием алгоритма Барроуза-Уилера.

54. Установка Xz-5.2.5:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

0. Подготовьте Xz к компиляции с помощью:

./configure prefix=/usr    

            disablestatic

            docdir=/usr/share/doc/xz5.2.5

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

4. Содержит:

lzcat   Распаковывает в стандартный вывод

lzcmp   Запускает cmp на сжатых файлах LZMA

lzdiff  Запускает diff для сжатых файлов LZMA

lzegrep Запускает egrep для сжатых файлов LZMA

lzfgrep Запускает fgrep на сжатых LZMA файлах

lzgrep  Запускает grep для сжатых файлов LZMA

lzless  Меньше работает со сжатыми файлами LZMA

lzma    Сжимает или распаковывает файлы в формате LZMA.

lzmadec Небольшой и быстрый декодер для сжатых файлов LZMA.

lzmainfo        Показывает информацию, хранящуюся в сжатом заголовке файла LZMA.

lzmore  Больше работает со сжатыми файлами LZMA

unlzma  Распаковывает файлы в формате LZMA.

unxz    Распаковывает файлы, используя формат XZ

xz      Сжимает или распаковывает файлы в формате XZ.

xzcat   Распаковывает в стандартный вывод

xzcmp   Запускает cmp на сжатых XZ файлах

xzdec   Небольшой и быстрый декодер для сжатых файлов XZ.

xzdiff  Запускает diff на сжатых XZ файлах

xzegrep Запускает egrep на сжатых XZ файлах

xzfgrep Запускает fgrep на сжатых XZ файлах

xzgrep  Запускает grep на сжатых XZ файлах

xzless  Меньше работает со сжатыми файлами XZ

xzmore  Больше работает со сжатыми файлами XZ

liblzma Библиотека, реализующая сжатие данных без потерь с блочной сортировкой с использованием цепного алгоритма Лемпеля-Зива-Маркова.

55. Установка Zstd-1.5.2:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

!!! Zstandard это алгоритм сжатия в реальном времени, обеспечивающий высокую степень сжатия.

!!! Он предлагает очень широкий диапазон компромиссов между сжатием и скоростью при поддержке очень быстрого декодера.

0. Скомпилируйте пакет:

make

1. make check

2. Установите пакет:

make prefix=/usr install

3. Удалите статическую библиотеку:

rm v /usr/lib/libzstd.a

4. Содержимое пакета

zstd            Сжимает или распаковывает файлы в формате ZSTD.

zstdgrep        Запускает grep для сжатых файлов ZSTD

zstdless        Меньше работает со сжатыми файлами ZSTD

libzstd         Библиотека, реализующая сжатие данных без потерь, с использованием алгоритма ZSTD.

56. File-5.41

!!! Пакет File содержит утилиту для определения типа данного файла или файлов.

0. Подготовьте файл для компиляции:

./configure prefix=/usr

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

4. Содержимое:

file Пытается классифицировать каждый заданный файл; он делает это, выполняя несколько тестов тесты файловой системы, тесты магических чисел и языковые тесты.

libmagic Содержит подпрограммы для распознавания магических чисел, используемые файловой программой.

57. Readline-8.1.2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

0. Переустановка Readline приведет к перемещению старых библиотек в <libraryname>.old.

Хотя обычно это не проблема, в некоторых случаях это может вызвать ошибку связывания в ldconfig.

Этого можно избежать, выпустив следующие два sed:

sed i ‘/MV.*old/d’ Makefile.in

sed i ‘/{OLDSUFF}/c:’ support/shlibinstall

1. Подготовьте Readline к компиляции:

./configure prefix=/usr    

            disablestatic

            withcurses    

            docdir=/usr/share/doc/readline8.1.2

Значение опции конфигурации:

withcurses

Этот параметр сообщает Readline, что он может найти функции библиотеки termcap в библиотеке curses, а не в отдельной библиотеке termcap.

Это позволяет создать правильный readline.pc файл.

2. Скомпилируйте пакет:

make SHLIB_LIBS=«-lncursesw»

Значение опции make:

SHLIB_LIBS=«-lncursesw»

Эта опция заставляет Readline связываться с libncursesw библиотекой.

3. Этот пакет не поставляется с набором тестов.

Установите пакет:

make SHLIB_LIBS=«-lncursesw» install

4. При желании установите документацию:

install v m644 doc/*.{ps,pdf,html,dvi} /usr/share/doc/readline8.1.2

5. Содержимое пакета:

libhistory Обеспечивает согласованный пользовательский интерфейс для вызова строк истории

libreadline Предоставляет набор команд для управления текстом, введенным в интерактивном сеансе программы.

58. M4-1.4.19

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

0. Подготовьте M4 к компиляции:

./configure prefix=/usr

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

4. Содержимое m4:

Копирует указанные файлы, расширяя содержащиеся в них макросы.

Эти макросы либо встроены, либо определяются пользователем и могут принимать любое количество аргументов.

Помимо расширения макросов, m4 имеет встроенные функции для включения именованных файлов, запуска команд Unix,

выполнения целочисленной арифметики, манипулирования текстом, рекурсии и т. д.

Программа m4 может использоваться либо как интерфейс для компилятора, либо как макрос. процессор сам по себе.

59. Bc-5.2.2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

0. Подготовьте Bc к компиляции:

CC=gcc ./configure prefix=/usr G O3

1. Значение параметров настройки:

CC=gcc Этот параметр указывает используемый компилятор.

O3    Укажите используемую оптимизацию.

G     Опустите части набора тестов, которые не будут работать без наличия GNU bc.

2. Скомпилируйте пакет:

make

3. Чтобы проверить bc, запустите:

make test

4. Установите пакет:

make install

5. Содержимое пакета:

bc Калькулятор командной строки

dc Калькулятор командной строки с обратной шлифовкой

60. Flex-2.6.4

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

0. Подготовьте Flex к компиляции:

./configure prefix=/usr

            docdir=/usr/share/doc/flex2.6.4

            disablestatic

1. Скомпилируйте пакет:

make

2. Для проверки результатов (около 0,5 SBU) выполните:

make check

3. Установите пакет:

make install

4. Несколько программ еще не знают о flex и пытаются запустить его предшественника, lex.

Для поддержки этих программ создайте символическую ссылку с именем lex, которая работает flexв режиме эмуляции lex:

ln sv flex /usr/bin/lex

5. Содержимое Flex

flex  Инструмент для создания программ, распознающих шаблоны в тексте; это позволяет гибко указывать правила поиска закономерностей, устраняя необходимость разработки специализированной программы.

flex++   Расширение flex используется для генерации кода и классов C++. Это символическая ссылка на flex

lex      Символическая ссылка, которая запускает flex в режиме эмуляции lex .

libfl    flex Библиотека _

61. Tcl-8.6.12

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

!!! Пакет Tcl содержит язык команд инструментов, надежный язык сценариев общего назначения. Пакет Expect написан на языке Tcl.

0. Сначала распакуйте документацию, введя следующую команду:

tar xf ../tcl8.6.12html.tar.gz stripcomponents=1

1. Подготовьте Tcl к компиляции:

SRCDIR=$(pwd)

cd unix

./configure prefix=/usr          

            mandir=/usr/share/man

            $([ «$(uname -m)» = x86_64 ] && echo enable64bit)

Значение параметров настройки:

$([ «$(uname -m)» = x86_64 ] && echo enable64bit)

Конструкция $(<shell command>)заменяется выводом команды оболочки.

Здесь этот вывод пуст, если работает на 32-битной машине, и пуст, enable64bitесли работает на 64-битной машине.

2. Соберите пакет:

make

sed e «s|$SRCDIR/unix|/usr/lib|»

    e «s|$SRCDIR|/usr/include|»  

    i tclConfig.sh

sed e «s|$SRCDIR/unix/pkgs/tdbc1.1.3|/usr/lib/tdbc1.1.3|»

    e «s|$SRCDIR/pkgs/tdbc1.1.3/generic|/usr/include|»    

    e «s|$SRCDIR/pkgs/tdbc1.1.3/library|/usr/lib/tcl8.6|»

    e «s|$SRCDIR/pkgs/tdbc1.1.3|/usr/include|»            

    i pkgs/tdbc1.1.3/tdbcConfig.sh

sed e «s|$SRCDIR/unix/pkgs/itcl4.2.2|/usr/lib/itcl4.2.2|»

    e «s|$SRCDIR/pkgs/itcl4.2.2/generic|/usr/include|»    

    e «s|$SRCDIR/pkgs/itcl4.2.2|/usr/include|»            

    i pkgs/itcl4.2.2/itclConfig.sh

unset SRCDIR

!!! Различные инструкции « sed » после команды « make » удаляют ссылки на каталог сборки из файлов конфигурации и заменяют их каталогом установки.

!!! Это не является обязательным для остальной части LFS, но может понадобиться в случае, если пакет, созданный позже, использует Tcl.

3. Чтобы проверить результаты, введите:

make test

4. Установите пакет:

make install

5. Сделайте установленную библиотеку доступной для записи, чтобы символы отладки можно было удалить позже:

chmod v u+w /usr/lib/libtcl8.6.so

6. Установите заголовки Tcl. Следующий пакет, Expect, требует их.

make installprivateheaders

7. Теперь сделайте необходимую символическую ссылку:

ln sfv tclsh8.6 /usr/bin/tclsh

8. Переименуйте справочную страницу, которая конфликтует с справочной страницей Perl:

mv /usr/share/man/man3/{Thread,Tcl_Thread}.3

9. Если вы загрузили дополнительную документацию, установите ее, выполнив следующие команды:

mkdir v p /usr/share/doc/tcl8.6.12

cp v r  ../html/* /usr/share/doc/tcl8.6.12

10. Содержимое:

tclsh8.6  Командная оболочка Tcl

tclsh  Ссылка на tclsh8.6

libtcl8.6.so Tcl-библиотека

libtclstub8.6.a  Библиотека Tcl Stub

62. Expect-5.45.4

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

0. Подготовьте ожидание к компиляции:

./configure prefix=/usr          

            withtcl=/usr/lib    

            enableshared        

            mandir=/usr/share/man

            withtclinclude=/usr/include

Значение параметров настройки:

withtcl=/usr/lib Этот параметр необходим для указания конфигурации, где находится скрипт tclConfig.sh .

withtclinclude=/usr/include Это явно указывает Expect, где найти внутренние заголовки Tcl.

1. Соберите пакет:

make

2. Чтобы проверить результаты, введите:

make test

3. Установите пакет:

make install

ln svf expect5.45.4/libexpect5.45.4.so /usr/lib

4. Краткие описания

expect  Общается с другими интерактивными программами по сценарию

libexpect5.45.4.so Содержит функции, которые позволяют использовать Expect как расширение Tcl или использовать его непосредственно из C или C++ (без Tcl).

63. DejaGNU-1.6.3

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

0. Разработчики рекомендуют собирать DejaGNU в специальном каталоге сборки:

mkdir v build

cd       build

1. Подготовьте DejaGNU к компиляции:

../configure prefix=/usr

makeinfo html nosplit o doc/dejagnu.html ../doc/dejagnu.texi

makeinfo plaintext       o doc/dejagnu.txt  ../doc/dejagnu.texi

2. Соберите и установите пакет:

make install

install v dm755  /usr/share/doc/dejagnu1.6.3

install v m644   doc/dejagnu.{html,txt} /usr/share/doc/dejagnu1.6.3

3. Чтобы проверить результаты, введите:

make check

4. пакеты:

dejagnu  Вспомогательная программа запуска команд DejaGNU

runtest Сценарий-оболочка, который находит нужную оболочку ожидания , а затем запускает DejaGNU.

64. Binutils-2.38

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

!!! Пакет Binutils содержит компоновщик, ассемблер и другие инструменты для работы с объектными файлами.

!!! Набор тестов для Binutils в этом разделе считается критически важным. Ни в коем случае не пропускайте его.

0. Убедитесь, что PTY правильно работают в среде chroot, выполнив простой тест:

expect c «spawn ls»

!!! Эта команда должна вывести следующее:

!!! spawn ls

!!! Если вместо этого выходные данные содержат приведенное ниже сообщение, значит, среда не настроена для правильной работы PTY.

!!! Эту проблему необходимо решить перед запуском тестовых наборов для Binutils и GCC:

!!! The system has no more ptys.

!!! Ask your system administrator to create more.

1. Компания Upstream выпустила исправление для устранения проблемы при использовании binutils для сборки некоторых пакетов BLFS с включенной оптимизацией времени соединения (LTO).

patch Np1 i ../binutils2.38lto_fix1.patch

2. Теперь внесите исправление, указанное в восходящем потоке, которое влияет на сборку некоторых пакетов:

sed e ‘/R_386_TLS_LE /i    || (TYPE) == R_386_TLS_IE \’

    i ./bfd/elfxxx86.h

3. Документация Binutils рекомендует собирать Binutils в выделенном каталоге сборки:

mkdir v build

cd       build

4. Подготовьте Binutils к компиляции:

../configure prefix=/usr      

             enablegold      

             enableld=default

             enableplugins    

             enableshared    

             disablewerror    

             enable64bitbfd

             withsystemzlib

Значение параметров конфигурации:

enablegold Создайте золотой компоновщик и установите его как ld.gold (наряду с компоновщиком по умолчанию).

enableld=default  Соберите оригинальный компоновщик bfd и установите его как ld (компоновщик по умолчанию) и как ld.bfd.

enableplugins Включает поддержку плагинов для компоновщика.

enable64bitbfd Включает 64-битную поддержку (на хостах с более узкими размерами слов). Может и не понадобится на 64-битных системах, но не навредит.

withsystemzlib Используйте установленную библиотеку zlib вместо сборки включенной версии.

5. Скомпилируйте пакет:

make tooldir=/usr

Значение параметра make:

tooldir=/usr Обычно для tooldir (каталога, в котором в конечном итоге будут расположены исполняемые файлы) установлено значение $(exec_prefix)/$(target_alias).

Например, машины x86_64 расширят это до /usr/x86_64pclinuxgnu.

Поскольку это пользовательская система, этот целевой каталог /usrне требуется.

$(exec_prefix)/$(target_alias)будет использоваться, если система используется для кросс-компиляции (например, при компиляции пакета на машине Intel,

который генерирует код, который может быть выполнен на машинах PowerPC).

6. Проверьте результаты:

make k check

7. Установите пакет:

make tooldir=/usr install

8. Удалите бесполезные статические библиотеки:

rm fv /usr/lib/lib{bfd,ctf,ctfnobfd,opcodes}.a

9. Пакет содержит:

addr2line       Преобразует адреса программ в имена файлов и номера строк; учитывая адрес и имя исполняемого файла, он использует отладочную информацию в исполняемом файле,

                чтобы определить, какой исходный файл и номер строки связаны с адресом.

ar      Создает, изменяет и извлекает из архивов

as      Ассемблер, который собирает вывод gcc в объектные файлы .

c++filt Используется компоновщиком для исправления символов C++ и Java и предотвращения конфликтов перегруженных функций.

dwp     Утилита упаковки DWARF

elfedit Обновляет заголовок ELF файлов ELF.

gprof   Отображает данные профиля графика вызовов

ld      Компоновщик, который объединяет несколько файлов объектов и архивов в один файл, перемещая их данные и связывая ссылки на символы.

ld.gold Урезанная версия ld, которая поддерживает только формат объектных файлов elf.

ld.bfd  Жесткая ссылка на ld

nm      Перечисляет символы, встречающиеся в данном объектном файле.

objcopy Преобразует один тип объектного файла в другой

objdump Отображает информацию о данном объектном файле с параметрами, управляющими отображением конкретной информации;

        показанная информация полезна для программистов, которые работают над инструментами компиляции

ranlib  Генерирует индекс содержимого архива и сохраняет его в архиве; индекс перечисляет все символы, определенные элементами архива, которые являются перемещаемыми объектными файлами.

readelf Отображает информацию о двоичных файлах типа ELF

size    Перечисляет размеры разделов и общий размер для заданных объектных файлов.

strings Выводит для каждого заданного файла последовательности печатных символов, которые имеют по крайней мере указанную длину (по умолчанию четыре);

        для объектных файлов по умолчанию печатаются только строки из разделов инициализации и загрузки, а для других типов файлов сканируется весь файл

strip   Отбрасывает символы из объектных файлов

libbfd  Библиотека дескрипторов двоичных файлов

libctf  Библиотека поддержки отладки Compat ANSIC Type Format

libctfnobfd    Вариант libctf, который не использует функциональность libbfd.

libopcodes      Библиотека для работы с кодами операций « удобочитаемыми текстовыми » версиями инструкций для процессора; он используется для создания утилит, таких как objdump

65. GMP-6.2.1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

!!! Пакет GMP содержит математические библиотеки. У них есть полезные функции для арифметики произвольной точности.

0. Подготовить GMP к компиляции:

./configure prefix=/usr    

            enablecxx    

            disablestatic

            docdir=/usr/share/doc/gmp6.2.1

Значение новых опций конфигурации:

enablecxx Этот параметр включает поддержку C++.

docdir=/usr/share/doc/gmp6.2.1 Эта переменная указывает правильное место для документации.

1. Скомпилируйте пакет и сгенерируйте HTML-документацию:

make

make html

2. Проверьте результаты:

make check 2>&1 | tee gmp-check-log

3. Убедитесь, что все 197 тестов в наборе тестов пройдены.

Проверьте результаты, введя следующую команду:

awk ‘/# PASS:/{total+=$3} ; END{print total} gmpchecklog

4. Установите пакет и его документацию:

make install

make installhtml

5. Содержимое пакета

libgmp Содержит точные математические функции

libgmpxx Содержит точные математические функции C++

66. MPFR-4.1.0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

!!! Пакет MPFR содержит функции для вычислений с множественной точностью.

0. Подготовьте MPFR к компиляции:

./configure prefix=/usr        

            disablestatic    

            enablethreadsafe

            docdir=/usr/share/doc/mpfr4.1.0

1. Скомпилируйте пакет и сгенерируйте HTML-документацию:

make

make html

2. Проверьте результаты и убедитесь, что все тесты пройдены:

make check

3. Установите пакет и его документацию:

make install

make installhtml

4. Содержание  libmpfr

Содержит математические функции с множественной точностью

67. MPC-1.2.1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

!!! Пакет MPC содержит библиотеку для арифметики комплексных чисел с произвольно высокой точностью и правильным округлением результата.

!!! libmpc Содержит сложные математические функции

0. Подготовьте MPC к компиляции:

./configure prefix=/usr    

            disablestatic

            docdir=/usr/share/doc/mpc1.2.1

1. Скомпилируйте пакет и сгенерируйте HTML-документацию:

make

make html

2. Чтобы проверить результаты, введите:

make check

3. Установите пакет и его документацию:

make install

make installhtml

68. Attr-2.5.1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

!!! Пакет attr содержит утилиты для управления расширенными атрибутами объектов файловой системы.

!!! attr Расширяет атрибуты объектов файловой системы

!!! getfattr Получает расширенные атрибуты объектов файловой системы

!!! setfattr Устанавливает расширенные атрибуты объектов файловой системы

!!! libattr Содержит библиотечные функции для управления расширенными атрибутами.

0. Подготовьте Attr к компиляции:

./configure prefix=/usr    

            disablestatic  

            sysconfdir=/etc

            docdir=/usr/share/doc/attr2.5.1

1. Скомпилируйте пакет:

make

2. Тесты необходимо запускать в файловой системе, которая поддерживает расширенные атрибуты, такие как файловые системы ext2, ext3 или ext4. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

69. Acl-2.3.1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

!!! Пакет Acl содержит утилиты для администрирования списков контроля доступа, которые используются для определения более детальных дискреционных прав доступа к файлам и каталогам.

!!! chacl Изменяет список контроля доступа к файлу или каталогу

!!! getfacl Получает списки контроля доступа к файлам

!!! setfacl Устанавливает списки контроля доступа к файлам

!!! libacl Содержит библиотечные функции для управления списками контроля доступа.

0. Подготовьте Acl к компиляции:

./configure prefix=/usr        

            disablestatic      

            docdir=/usr/share/doc/acl2.3.1

1. Скомпилируйте пакет:

make

!!! Тесты Acl необходимо запускать в файловой системе, поддерживающей управление доступом, после сборки Coreutils с библиотеками Acl.

!!! При желании вернитесь к этому пакету и запустите make check после того , как Coreutils будет собран позже в этой главе.

2. Установите пакет:

make install

70. Libcap-2.63

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

!!! Пакет Libcap реализует интерфейсы пользовательского пространства для возможностей POSIX 1003.1e, доступных в ядрах Linux.

!!! Эти возможности представляют собой разделение всех мощных привилегий root на набор отдельных привилегий.

!!! capsh Оболочка-оболочка для изучения и ограничения поддержки возможностей

!!! getcap Изучает возможности файла

!!! getpcaps Отображает возможности запрошенного процесса(ов)

!!! setcap Устанавливает возможности файла

!!! libcap Содержит библиотечные функции для управления возможностями POSIX 1003.1e.

!!! libpsx Содержит функции для поддержки семантики POSIX для системных вызовов, связанных с библиотекой pthread.

0. Запретить установку статических библиотек:

sed i ‘/install -m.*STA/d’ libcap/Makefile

1. Скомпилируйте пакет:

make prefix=/usr lib=lib

Значение опции make:

lib=lib этот параметр задает каталог библиотеки /usr/libвместо /usr/lib64x86_64. На x86 это никак не влияет.

2. Чтобы проверить результаты, введите:

make test

3. Установите пакет:

make prefix=/usr lib=lib install

71. Shadow-4.11.1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

!!! Пакет Shadow содержит программы для безопасной обработки паролей.

!!! Если вы хотите принудительно использовать надежные пароли, обратитесь к https://www.linuxfromscratch.org/blfs/view/stable-systemd/postlfs/cracklib.html

!!! для установки CrackLib перед сборкой Shadow. Затем добавьте withlibcrackв команду configure ниже.

0. Отключите установку программы groups и ее справочных страниц, так как Coreutils предоставляет лучшую версию. Кроме того, запретите установку справочных страниц.

sed i ‘s/groups$(EXEEXT) //’ src/Makefile.in

find man name Makefile.in exec sed i ‘s/groups.1 / /’   {} ;

find man name Makefile.in exec sed i ‘s/getspnam.3 / /’ {} ;

find man name Makefile.in exec sed i ‘s/passwd.5 / /’   {} ;

!!! Вместо использования метода шифрования по умолчанию используйте более безопасный метод шифрования паролей SHA512 , который также позволяет использовать пароли длиннее 8 символов.

!!! Также необходимо изменить устаревшее /var/spool/mail расположение почтовых ящиков пользователей, которое Shadow использует по умолчанию,

!!! на /var/mailтекущее местоположение. И избавьтесь от /bin и /sbinот PATH, поскольку они являются просто символическими ссылками на их аналог в /usr.

!!! Если /binи/или по какой-то причине /sbin предпочтительнее оставить PATH, измените PATH после .bashrc сборки LFS.

sed e ‘s:#ENCRYPT_METHOD DES:ENCRYPT_METHOD SHA512:’

    e ‘s:/var/spool/mail:/var/mail:’                

    e ‘/PATH=/{s@/sbin:@@;s@/bin:@@}’                

    i etc/login.defs

!!! Примечание Если вы выбрали сборку Shadow с поддержкой Cracklib, выполните следующее:

!!! # sed -i ‘s:DICTPATH.*:DICTPATHt/lib/cracklib/pw_dict:’ etc/login.defs

1. Подготовьте Shadow к компиляции:

touch /usr/bin/passwd

./configure sysconfdir=/etc

            disablestatic  

            withgroupnamemaxlength=32

Значение опции конфигурации:

touch /usr/bin/passwd

Файл /usr/bin/passwd должен существовать, потому что его расположение жестко запрограммировано в некоторых программах, и если он не существует, то расположение по умолчанию неверно.

withgroupnamemaxlength=32

Максимальное имя пользователя составляет 32 символа. Сделайте максимальное имя группы одинаковым.

2. Скомпилируйте пакет:

make

3. Установите пакет:

make exec_prefix=/usr install

make C man installman

72. Настройка Shadow

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

!!! Этот пакет содержит утилиты для добавления, изменения и удаления пользователей и групп; устанавливать и менять свои пароли; и выполнять другие административные задачи.

!!! Полное объяснение того, что означает теневое копирование паролейdoc/HOWTO , см. в файле в распакованном дереве исходного кода.

!!! Если вы используете поддержку Shadow, имейте в виду, что программы, которые должны проверять пароли (диспетчеры отображения, FTP-программы, демоны pop3 и т. д.),

!!! должны быть совместимы с Shadow.

!!! То есть им нужно уметь работать с теневыми паролями.

0. Чтобы включить теневые пароли, выполните следующую команду:

pwconv

1. Чтобы включить теневые групповые пароли, запустите:

grpconv

!!! Конфигурация Shadow по умолчанию для утилиты useradd имеет несколько предостережений, требующих пояснений.

!!! Во-первых, по умолчанию утилита useradd создает пользователя и группу с тем же именем, что и у пользователя.

!!! По умолчанию номера идентификатора пользователя (UID) и идентификатора группы (GID) начинаются с 1000.

!!! Это означает, что если вы не передадите параметры в useradd , каждый пользователь будет членом уникальной группы в системе.

!!! Если такое поведение нежелательно, вам нужно будет передать один из параметров gили в useradd или изменить настройку в-NUSERGROUPS_ENAB/etc/login.defs.

!!! См. useradd(8)дополнительную информацию.

2. Во-вторых, чтобы изменить параметры по умолчанию, файл /etc/default/useraddнеобходимо создать и настроить в соответствии с вашими конкретными потребностями.

mkdir p /etc/default

useradd D gid 999

!!! /etc/default/useradd Пояснения к параметрам

!!! GROUP=999

!!! Этот параметр задает начало номеров групп, используемых в /etc/group файле.

!!! Конкретное значение 999 исходит из указанного gid выше параметра.

!!! Вы можете изменить его на все, что пожелаете. Обратите внимание, что useradd никогда не будет повторно использовать UID или GID.

!!! Если используется номер, указанный в этом параметре, будет использоваться следующий доступный номер.

!!! Также обратите внимание, что если в вашей системе нет группы с идентификатором, равным этому номеру,

!!! при первом использовании useradd без gпараметра, вы получите сообщение, отображаемое на терминале,

!!! которое гласит: useradd: unknown GID 999, хотя учетная запись создана правильно.

!!! CREATE_MAIL_SPOOL=yes

!!! Этот параметр заставляет useradd создать файл почтового ящика для вновь созданного пользователя.

!!! useradd сделает групповое владение этим файлом mailгруппе с разрешениями 0660.

!!! Если вы предпочитаете, чтобы эти файлы почтовых ящиков не создавались пользователем , введите следующую команду:

!!! sed i ‘/MAIL/s/yes/no/’ /etc/default/useradd

Краткие описания:

chage   Используется для изменения максимального количества дней между обязательной сменой пароля.

chfn    Используется для изменения полного имени пользователя и другой информации

chgpasswd       Используется для обновления групповых паролей в пакетном режиме.

chpasswd        Используется для обновления паролей пользователей в пакетном режиме.

chsh    Используется для изменения оболочки входа пользователя по умолчанию.

expiry  Проверяет и обеспечивает соблюдение текущей политики истечения срока действия пароля

faillog Используется для проверки журнала неудачных попыток входа в систему, для установки максимального количества неудачных попыток до блокировки учетной записи или для сброса счетчика неудачных попыток.

getsubids       Используется для перечисления подчиненных диапазонов идентификаторов для пользователя.

gpasswd Используется для добавления и удаления участников и администраторов в группы.

groupadd        Создает группу с заданным именем

groupdel        Удаляет группу с указанным именем

groupmems       Позволяет пользователю управлять своим собственным списком членства в группе, не требуя привилегий суперпользователя.

groupmod        Используется для изменения имени данной группы или GID

grpck   Проверяет целостность групповых файлов /etc/groupи /etc/gshadow

grpconv Создает или обновляет файл теневой группы из обычного файла группы.

grpunconv       Обновляет /etc/group , /etc/gshadowа затем удаляет последний

lastlog Сообщает о самом последнем входе в систему всех пользователей или данного пользователя

login   Используется системой, чтобы позволить пользователям войти в систему

logoutd Используется ли демон для принудительного применения ограничений на время входа в систему и порты

newgidmap       Используется для установки сопоставления gid пространства имен пользователя.

newgrp  Используется для изменения текущего GID во время сеанса входа в систему.

newuidmap       Используется для установки сопоставления uid пространства имен пользователя.

newusers        Используется для создания или обновления целой серии учетных записей пользователей.

nologin Выводит сообщение о том, что учетная запись недоступна; он предназначен для использования в качестве оболочки по умолчанию для отключенных учетных записей.

passwd  Используется для изменения пароля для учетной записи пользователя или группы.

pwck    Проверяет целостность файлов паролей /etc/passwdи /etc/shadow

pwconv  Создает или обновляет теневой файл паролей из обычного файла паролей.

pwunconv        Обновляет /etc/passwd , /etc/shadowа затем удаляет последний

sg      Выполняет заданную команду, в то время как GID пользователя установлен на GID данной группы

su      Запускает оболочку с замещающими идентификаторами пользователей и групп.

useradd Создает нового пользователя с заданным именем или обновляет информацию о новом пользователе по умолчанию.

userdel Удаляет указанную учетную запись пользователя

usermod Используется для изменения имени пользователя, идентификатора пользователя (UID), оболочки, исходной группы, домашнего каталога и т. д.

vigr    Редактирует /etc/group или /etc/gshadowфайлы

vipw    Редактирует /etc/passwd или /etc/shadowфайлы

libsubid        библиотека для диапазонов идентификаторов подчиненных процессов для пользователей

73. Установка GCC-11.2.0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

0. Сначала устраните проблему, препятствующую libasan.aсборке этого пакета с помощью Glibc2.34 или более поздней версии:

sed e ‘/static.*SIGSTKSZ/d’

    e ‘s/return kAltStackSize/return SIGSTKSZ * 4/’

    i libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp

1. При сборке на x86_64 измените имя каталога по умолчанию для 64-битных библиотек на « lib »:

case $(uname m) in

  x86_64)

    sed e ‘/m64=/s/lib64/lib/’

        i.orig gcc/config/i386/tlinux64

  ;;

esac

2. Документация GCC рекомендует собирать GCC в выделенном каталоге сборки:

mkdir v build

cd       build

3. Подготовьте GCC к компиляции:

../configure prefix=/usr            

             LD=ld                    

             enablelanguages=c,c++

             disablemultilib      

             disablebootstrap      

             withsystemzlib

Значение новых параметров конфигурации:

LD=ld

Этот параметр заставляет скрипт configure использовать ld, установленный программой binutils, созданной ранее в этой главе, а не перекрестную версию, которая в противном случае использовалась бы.

withsystemzlib

Этот переключатель сообщает GCC о необходимости ссылки на установленную в системе копию библиотеки zlib, а не на собственную внутреннюю копию.

4. Скомпилируйте пакет:

make

5. Известно, что один набор тестов в наборе тестов GCC исчерпывает стек по умолчанию, поэтому увеличьте размер стека перед запуском тестов:

ulimit s 32768

6. Протестируйте результаты как непривилегированный пользователь, но не останавливайтесь на ошибках:

chown Rv tester .

su tester c «PATH=$PATH make -k check»

7. Чтобы получить сводку результатов набора тестов, запустите:

../contrib/test_summary

8. Установите пакет и удалите ненужный каталог:

make install

rm rf /usr/lib/gcc/$(gcc dumpmachine)/11.2.0/includefixed/bits/

9. Каталог сборки GCC уже принадлежит, testerи владение установленным каталогом заголовков (и его содержимым) будет неправильным.

Измените владельца на rootпользователя и группу:

chown v R root:root

    /usr/lib/gcc/*linux-gnu/11.2.0/include{,-fixed}

10. Создайте символическую ссылку, требуемую FHS по «историческим» причинам.

ln -svr /usr/bin/cpp /usr/lib

11. Добавьте символическую ссылку совместимости, чтобы включить сборку программ с оптимизацией времени компоновки (LTO):

ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/11.2.0/liblto_plugin.so

        /usr/lib/bfd-plugins/

12. Теперь, когда наша окончательная цепочка инструментов готова, важно еще раз убедиться, что компиляция и компоновка будут работать должным образом.

Мы делаем это, выполняя некоторые проверки работоспособности:

echo ‘int main(){}’ > dummy.c

cc dummy.c -v -Wl,—verbose &> dummy.log

readelf -l a.out | grep ‘: /lib’

!!! Ошибок быть не должно, и вывод последней команды будет (с учетом платформо-зависимых различий в имени динамического компоновщика):

!!! [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

13. Теперь убедитесь, что мы настроили использование правильных стартовых файлов:

grep -o ‘/usr/lib.*/crt[1in].*succeeded‘ dummy.log

14. Вывод последней команды должен быть:

/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib/crt1.o succeeded

/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib/crti.o succeeded

/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib/crtn.o succeeded

!!! В зависимости от архитектуры вашего компьютера приведенное выше может немного отличаться.

!!! Разница будет заключаться в имени каталога после /usr/lib/gcc.

!!! Здесь важно обратить внимание на то, что gcc нашел все три crt*.o файла в /usr/lib каталоге.

15. Убедитесь, что компилятор ищет правильные файлы заголовков:

grep -B4 ‘^ /usr/include‘ dummy.log

16. Эта команда должна вернуть следующий вывод:

#include <…> search starts here:

/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/include

/usr/local/include

/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/include-fixed

/usr/include

17. Затем убедитесь, что новый компоновщик используется с правильными путями поиска:

grep ‘SEARCH.*/usr/lib‘ dummy.log |sed ‘s|; |n|g

18. Ссылки на пути, содержащие компоненты с «-linuxgnu», следует игнорировать, но в противном случае вывод последней команды должен быть таким:

SEARCH_DIR(«/usr/x86_64-pc-linux-gnu/lib64»)

SEARCH_DIR(«/usr/local/lib64»)

SEARCH_DIR(«/lib64»)

SEARCH_DIR(«/usr/lib64»)

SEARCH_DIR(«/usr/x86_64-pc-linux-gnu/lib»)

SEARCH_DIR(«/usr/local/lib»)

SEARCH_DIR(«/lib»)

SEARCH_DIR(«/usr/lib»);

19. Затем убедитесь, что мы используем правильную libc:

grep «/lib.*/libc.so.6 « dummy.log

!!! Вывод последней команды должен быть:

!11 attempt to open /usr/lib/libc.so.6 succeeded

20. Убедитесь, что GCC использует правильный динамический компоновщик:

grep found dummy.log

!!! Вывод последней команды должен быть (с учетом различий в имени динамического компоновщика, зависящих от платформы):

!!! found ldlinuxx8664.so.2 at /usr/lib/ldlinuxx8664.so.2

21. Как только все заработает правильно, очистите тестовые файлы:

rm v dummy.c a.out dummy.log

22. Наконец, переместите неуместный файл:

mkdir pv /usr/share/gdb/autoload/usr/lib

mv v /usr/lib/*gdb.py /usr/share/gdb/autoload/usr/lib

23. Содержимое пакета:

c++     Компилятор С++

cc      Компилятор C

cpp     Препроцессор Си; он используется компилятором для расширения операторов #include, #define и подобных в исходных файлах.

g++     Компилятор С++

gcc     Компилятор C

gccar  Обертка вокруг ar , добавляющая плагин в командную строку. Эта программа используется только для добавления «оптимизации времени компоновки» и бесполезна с параметрами сборки по умолчанию.

gccnm  Оболочка над nm , добавляющая плагин в командную строку. Эта программа используется только для добавления «оптимизации времени компоновки» и бесполезна с параметрами сборки по умолчанию.

gccranlib      Обертка вокруг ranlib , добавляющая плагин в командную строку. Эта программа используется только для добавления «оптимизации времени компоновки» и бесполезна с параметрами сборки по умолчанию.

gcov    Инструмент тестирования покрытия; он используется для анализа программ, чтобы определить, где оптимизация будет иметь наибольший эффект.

gcovdump       Автономный инструмент для дампа профилей gcda и gcno

gcovtool       Автономный инструмент обработки профиля gcda

ltodump        Инструмент для создания дампа объектных файлов, созданных GCC с включенным LTO.

libasan Библиотека времени выполнения Address Sanitizer

libatomic       Встроенная библиотека времени выполнения GCC atomic

libcc1  Библиотека предварительной обработки C

libgcc  Содержит поддержку времени выполнения для gcc

libgcov Эта библиотека связана с программой, когда GCC получает указание включить профилирование.

libgomp Реализация GNU OpenMP API для многоплатформенного параллельного программирования с общей памятью на C/C++ и Fortran

libitm  Библиотека транзакционной памяти GNU

liblsan Библиотека времени выполнения Leak Sanitizer

liblto_plugin   Плагин GCC LTO позволяет binutils обрабатывать объектные файлы, созданные GCC с включенным LTO.

libquadmath     API математической библиотеки GCC Quad Precision

libssp  Содержит подпрограммы, поддерживающие функциональность защиты стека GCC.

libstdc++       Стандартная библиотека С++

libstdc++fs     Библиотека файловой системы ISO/IEC TS 18822:2015

libsupc++       Предоставляет вспомогательные процедуры для языка программирования C++.

libtsan Библиотека времени выполнения Thread Sanitizer

libubsan        Библиотека времени выполнения Undefined Behavior Sanitizer

74. Pkg-config-0.29.2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

0. Подготовьте Pkgconfig к компиляции:

./configure prefix=/usr              

            withinternalglib      

            disablehosttool        

            docdir=/usr/share/doc/pkgconfig0.29.2

Значение новых опций конфигурации:

withinternalglib

Это позволит pkgconfig использовать свою внутреннюю версию Glib, поскольку внешняя версия недоступна в LFS.

disablehosttool

Эта опция отключает создание нежелательной жесткой ссылки на программу pkgconfig.

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

4. Краткие описания

pkgconfig Возвращает метаинформацию для указанной библиотеки или пакета

75. Ncurses-6.3

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

0. Подготовьте Ncurses к компиляции:

./configure prefix=/usr          

            mandir=/usr/share/man

            withshared          

            withoutdebug        

            withoutnormal        

            enablepcfiles      

            enablewidec          

            withpkgconfiglibdir=/usr/lib/pkgconfig

Значение новых опций конфигурации:

enablewidec

Этот переключатель вызывает создание библиотек расширенных символов (например, libncursesw.so.6.3) вместо обычных (например, libncurses.so.6.3).

Эти широкосимвольные библиотеки можно использовать как в многобайтовых, так и в традиционных 8-битных локалях,

в то время как обычные библиотеки правильно работают только в 8-битных локалях.

Библиотеки расширенных символов и обычные библиотеки совместимы с исходным кодом, но не совместимы с двоичным кодом.

enablepcfiles

Этот переключатель создает и устанавливает файлы .pc для pkgconfig.

withoutnormal

Этот переключатель отключает сборку и установку большинства статических библиотек.

1. Скомпилируйте пакет:

make

2. Установка и удаление бесполезного мусора

make DESTDIR=$PWD/dest install

install vm755 dest/usr/lib/libncursesw.so.6.3 /usr/lib

rm v  dest/usr/lib/{libncursesw.so.6.3,libncurses++w.a}

cp av dest/* /

3. Многие приложения по-прежнему ожидают, что компоновщик сможет найти библиотеки Ncurses, не поддерживающие широкие символы.

Заставьте такие приложения связываться с широкосимвольными библиотеками с помощью символических ссылок и скриптов компоновщика:

for lib in ncurses form panel menu ; do

    rm vf                    /usr/lib/lib${lib}.so

    echo «INPUT(-l${lib}w)» > /usr/lib/lib${lib}.so

    ln sfv ${lib}w.pc        /usr/lib/pkgconfig/${lib}.pc

done

4. Наконец, убедитесь, что старые приложения, которые ищут lcurses во время сборки, по-прежнему доступны для сборки:

rm vf                     /usr/lib/libcursesw.so

echo «INPUT(-lncursesw)» > /usr/lib/libcursesw.so

ln sfv libncurses.so      /usr/lib/libcurses.so

5. Установите документацию Ncurses:

mkdir pv      /usr/share/doc/ncurses6.3

cp v R doc/* /usr/share/doc/ncurses6.3

!!! 6. Приведенные выше инструкции не создают библиотеки Ncurses с неширокими символами, поскольку ни один пакет, установленный путем компиляции из исходного кода,

не будет связан с ними во время выполнения. Тем не менее, единственные известные приложения только для двоичных файлов, которые связываются с библиотеками Ncurses,

не поддерживающими широкие символы, требуют версии 5. Если вам нужны такие библиотеки из-за какого-либо приложения,

предназначенного только для двоичных файлов, или для совместимости с LSB, снова соберите пакет со следующим команды:

make distclean

./configure prefix=/usr    

            withshared    

            withoutnormal

            withoutdebug  

            withoutcxxbinding

            withabiversion=5

make sources libs

cp av lib/lib*.so.5* /usr/lib

7. Краткие описания

captoinfo  Преобразует описание termcap в описание terminfo

clear Очищает экран, если это возможно

infocmp Сравнивает или распечатывает описания терминов

infotocap Преобразует описание terminfo в описание termcap

ncursesw6config Предоставляет информацию о конфигурации для ncurses

reset Повторно инициализирует терминал с его значениями по умолчанию.

tabs Очищает и устанавливает позиции табуляции на терминале

tic Компилятор описания записей terminfo, который переводит файл terminfo из исходного формата в двоичный формат,

    необходимый для подпрограмм библиотеки ncurses [Файл terminfo содержит информацию о возможностях определенного терминала.]

toe Перечисляет все доступные типы терминалов, давая основное имя и описание для каждого.

tput Делает значения возможностей, зависящих от терминала, доступными для оболочки; его также можно использовать для сброса или инициализации терминала или сообщения его длинного имени.

tset Может использоваться для инициализации терминалов

libcursesw Ссылка на libncursesw

libncursesw Содержит функции для отображения текста многими сложными способами на экране терминала;

            хорошим примером использования этих функций является меню, отображаемое во время make menuconfig ядра.

libformw  Содержит функции для реализации форм

libmenuw Содержит функции для реализации меню

libpanelw Содержит функции для реализации панелей

76. Sed-4.8

!!! Фильтрует и преобразует текстовые файлы за один проход

0. Подготовьте Sed для компиляции:

./configure prefix=/usr

1. Скомпилируйте пакет и сгенерируйте HTML-документацию:

make

make html

2. Чтобы проверить результаты, введите:

chown Rv tester .

su tester c «PATH=$PATH make check»

3. Установите пакет и его документацию:

make install

install d m755           /usr/share/doc/sed4.8

install m644 doc/sed.html /usr/share/doc/sed4.8

77. Psmisc-23.4

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

0. Подготовьте Psmisc к компиляции:

./configure prefix=/usr

1. Скомпилируйте пакет:

make

2. тесты

!!! Этот пакет не поставляется с набором тестов.

3. Установите пакет:

make install

4. Краткие описания

fuser Сообщает идентификаторы процессов (PID) процессов, которые используют данные файлы или файловые системы.

killall Убивает процессы по имени; он отправляет сигнал всем процессам, выполняющим любую из заданных команд

peekfd Просмотр файловых дескрипторов запущенного процесса с учетом его PID

prtstat Выводит информацию о процессе

pslog Сообщает текущий путь журналов процесса

pstree Отображает запущенные процессы в виде дерева

pstree.x11 То же , что и pstree , за исключением того, что он ожидает подтверждения перед выходом

78. Gettext-0.21

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

!!! Пакет Gettext содержит утилиты для интернационализации и локализации.

!!! Это позволяет компилировать программы с помощью NLS (поддержка родного языка), что позволяет им выводить сообщения на родном языке пользователя.

0. Подготовьте Gettext для компиляции:

./configure prefix=/usr    

            disablestatic

            docdir=/usr/share/doc/gettext0.21

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты (это занимает много времени, около 3 SBU), введите:

make check

3. Установите пакет:

make install

chmod v 0755 /usr/lib/preloadable_libintl.so

4. Содержимое Gettext

autopoint Копирует стандартные файлы инфраструктуры Gettext в исходный пакет.

envsubst  Заменяет переменные среды в строках формата оболочки

gettext   Переводит сообщение на естественном языке на язык пользователя, ища перевод в каталоге сообщений.

gettext.sh В основном служит библиотекой функций оболочки для gettext.

msgattrib  Копирует все стандартные файлы Gettext в указанный каталог верхнего уровня пакета, чтобы начать его интернационализацию.

msgcat Фильтрует сообщения каталога переводов в соответствии с их атрибутами и манипулирует атрибутами.

msgcat Объединяет и объединяет данные .poфайлы

msgcmp Сравнивает два .po файла, чтобы убедиться, что оба содержат одинаковый набор строк msgid.

msgcomm Находит сообщения, которые являются общими для заданных .poфайлов

msgconv Преобразует каталог переводов в другую кодировку символов

msgen Создает каталог переводов на английский язык

msgexec Применяет команду ко всем переводам каталога переводов

msgfilter Применяет фильтр ко всем переводам каталога переводов

msgfmt Генерирует двоичный каталог сообщений из каталога переводов.

msggrep Извлекает все сообщения из каталога переводов, которые соответствуют заданному шаблону или принадлежат некоторым заданным исходным файлам.

msgfmt  Создает новый .po файл, инициализируя метаинформацию значениями из среды пользователя.

msgmerge Объединяет два необработанных перевода в один файл

msgunfmt Декомпилирует двоичный каталог сообщений в необработанный текст перевода

msguniq Объединяет дубликаты переводов в каталоге переводов

ngettext Отображает перевод текстового сообщения на родной язык, грамматическая форма которого зависит от числа.

recodesrlatin Перекодирует сербский текст с кириллицы на латиницу.

xgettext Извлекает переводимые строки сообщений из заданных исходных файлов для создания первого шаблона перевода.

libasprintf определяет класс autosprintf , который делает подпрограммы вывода в формате C пригодными

            для использования в программах на C++ для использования со строками <string> и потоками <iostream>

libgettextlib частная библиотека, содержащая общие процедуры, используемые различными программами Gettext; они не предназначены для общего использования

libgettextpo Используется для написания специализированных программ, обрабатывающих .poфайлы;

             эта библиотека используется, когда стандартных приложений, поставляемых с Gettext (таких как msgcomm , msgcmp , msgattrib и msgen ), недостаточно .

libgettextsrc Частная библиотека, содержащая общие процедуры, используемые различными программами Gettext; они не предназначены для общего использования

libtextstyle Библиотека стилей текста

preloadable_libintl Библиотека, предназначенная для использования LD_PRELOAD, которая помогает libintlрегистрировать непереведенные сообщения .

79. Bison-3.8.2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

!!! Пакет Bison содержит генератор парсеров.

0. Подготовьте Bison для компиляции:

./configure prefix=/usr docdir=/usr/share/doc/bison3.8.2

1. Скомпилируйте пакет:

make

2. Для проверки результатов (около 5,5 SBU) выдайте:

make check

3. Установите пакет:

make install

4. Краткие описания

bison Генерирует из набора правил программу для анализа структуры текстовых файлов; Bison является заменой Yacc (Yet Another Compiler Compiler)

yacc Оболочка для bison , предназначенная для программ, которые до сих пор вызывают yacc вместо bison ; он вызывает bison с y опцией

liby Библиотека Yacc, содержащая реализации Yacc-совместимых yyerror и main функций; эта библиотека обычно не очень полезна, но POSIX требует ее

79. Grep-3.7

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

!!!  8.33.

!!! https://www.linuxfromscratch.org/lfs/downloads/stable-systemd/LFS-BOOK-11.1-NOCHUNKS.html#ch-tools-binutils-pass1

!!! Пакет Grep содержит программы для поиска по содержимому файлов.

!!! egrep Выводит строки, соответствующие расширенному регулярному выражению

!!! fgrep Выводит строки, соответствующие списку фиксированных строк

!!! grep Выводит строки, соответствующие основному регулярному выражению

0. Подготовьте Grep к компиляции:

./configure prefix=/usr

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

Установите пакет:

make install

80. (8.34.) Bash-5.1.16

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

!!! Пакет Bash содержит BourneAgain SHell.

!!! bash Широко используемый интерпретатор команд; он выполняет множество типов расширений

          и замен в заданной командной строке перед ее выполнением, что делает этот интерпретатор мощным инструментом.

!!! bashbug Сценарий оболочки, помогающий пользователю составлять и отправлять отчеты об ошибках в стандартном формате, касающиеся bash .

!!! sh Cимлинк на программу bash ; при вызове как sh bash пытается максимально точно имитировать поведение при запуске исторических версий sh , при этом также соответствуя стандарту POSIX.

0. Подготовьте Bash к компиляции:

./configure prefix=/usr                      

            docdir=/usr/share/doc/bash5.1.16

            withoutbashmalloc              

            withinstalledreadline

Значение новой опции конфигурации:

withinstalledreadline

Этот параметр указывает Bash использовать readlineбиблиотеку, которая уже установлена ​​в системе, а не использовать собственную версию для чтения.

1. Скомпилируйте пакет:

make

2. Тесты:

Перейдите к «3. Установить пакет» , если не запускаете набор тестов.

Чтобы подготовить тесты, убедитесь, что tester пользователь может писать в дерево исходников:

chown Rv tester .

Набор тестов пакета предназначен для запуска пользователем без полномочий root, которому принадлежит терминал, подключенный к стандартному вводу.

Чтобы выполнить требование, создайте новый псевдотерминал с помощью Expect и запустите тесты от имени tester пользователя:

su s /usr/bin/expect tester << EOF

set timeout 1

spawn make tests

expect eof

lassign [wait] _ _ _ value

exit $value

EOF

3. Установите пакет:

make install

4. Запустите только что скомпилированную программу bash (заменив ту, которая выполняется в данный момент):

exec /usr/bin/bash login

81. (8.35.) Libtool-2.4.6

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

!!! libtool Предоставляет общие услуги по поддержке создания библиотек.

!!! libtoolize Предоставляет стандартный способ добавления поддержки libtool в пакет.

!!! libltdl Скрывает различные трудности с раскрытием библиотек

0. Подготовьте Libtool к компиляции:

./configure prefix=/usr

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

!!! Примечание

!!! Время тестирования libtool может быть значительно сокращено в системе с несколькими ядрами. Для этого добавьте TESTSUITEFLAGS=-j<N> к строке выше.

!!! Например, использование j4 может сократить время тестирования более чем на 60 процентов.

!!! Известно, что пять тестов в среде сборки LFS завершаются неудачно из-за круговой зависимости, но все тесты проходят успешно, если они повторно проверяются после установки automake.

3. Установите пакет:

make install

4. Удалите бесполезную статическую библиотеку:

rm fv /usr/lib/libltdl.a

82. (8.36.1.) GDBM-1.23

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

!!! Пакет GDBM содержит менеджер баз данных GNU.

!!! Это библиотека функций базы данных, использующая расширяемое хеширование и работающая аналогично стандартной базе данных UNIX.

!!! Библиотека предоставляет примитивы для хранения пар ключ/данные, поиска и извлечения данных по его ключу и удаления ключа вместе с его данными.

!!! gdbm_dump Сбрасывает базу данных GDBM в файл

!!! gdbm_load Восстанавливает базу данных GDBM из файла дампа.

!!! gdbmtool Тестирует и модифицирует базу данных GDBM

!!! libgdbm Содержит функции для управления хешированной базой данных.

!!! libgdbm_compat Библиотека совместимости, содержащая старые функции DBM.

0. Подготовьте GDBM к компиляции:

./configure prefix=/usr    

            disablestatic

            enablelibgdbmcompat

Значение опции конфигурации:

enablelibgdbmcompat

Этот переключатель включает сборку библиотеки совместимости libgdbm.

Некоторым пакетам за пределами LFS могут потребоваться более старые подпрограммы DBM, которые он предоставляет.

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

83. (8.37.) Gperf-3.1

!!! gperf Генерирует идеальный хэш из набора ключей

0. Подготовьте Gperf к компиляции:

./configure prefix=/usr docdir=/usr/share/doc/gperf3.1

1. Скомпилируйте пакет:

make

2. Известно, что тесты завершаются сбоем при выполнении нескольких одновременных тестов (параметр j больше 1).

Чтобы проверить результаты, введите:

make j1 check

3. Установите пакет:

make install

84. (8.38.) Expat-2.4.6

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

!!! xmlwf Является непроверяющей утилитой для проверки правильности формата XML-документов.

!!! libexpat Содержит функции API для разбора XML

0. Подготовьте Expat для компиляции:

./configure prefix=/usr    

            disablestatic

            docdir=/usr/share/doc/expat2.4.6

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

4. При желании установите документацию:

install v m644 doc/*.{html,css} /usr/share/doc/expat2.4.6

85. (8.39.1) Inetutils-2.2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

!!! Пакет Inetutils содержит программы для базовой работы в сети.

!!! dnsdomainname Показать доменное имя DNS системы

!!! ftp Является ли программа протокола передачи файлов

!!! hostname Сообщает или устанавливает имя хоста

!!! ifconfig Управляет сетевыми интерфейсами

!!! ping Отправляет пакеты эхо-запросов и сообщает, сколько времени занимают ответы

!!! ping6 Версия ping для сетей IPv6

!!! talk Используется для общения с другим пользователем

!!! telnet Интерфейс к протоколу TELNET

!!! tftp Тривиальная программа для передачи файлов

!!! traceroute Отслеживает маршрут, по которому проходят ваши пакеты от узла, над которым вы работаете, к другому узлу в сети, показывая все промежуточные переходы (шлюзы) на этом пути.

0. Подготовьте Inetutils к компиляции:

./configure prefix=/usr        

            bindir=/usr/bin    

            localstatedir=/var

            disablelogger    

            disablewhois      

            disablercp        

            disablerexec      

            disablerlogin    

            disablersh        

            disableservers

1. Значение параметров настройки:

disablelogger

Этот параметр запрещает Inetutils устанавливать программу регистрации , которая используется сценариями для передачи сообщений демону системного журнала.

Не устанавливайте его, потому что Utillinux устанавливает более новую версию.

disablewhois

Этот параметр отключает сборку whois клиента Inetutils, который устарел. Инструкции для лучшего клиента whois находятся в книге BLFS.

disabler*

Эти параметры отключают создание устаревших программ, которые не следует использовать из-за проблем с безопасностью.

Функции, предоставляемые этими программами, могут быть предоставлены пакетом openssh в книге BLFS.

disableservers

Это отключает установку различных сетевых серверов, входящих в состав пакета Inetutils.

Эти серверы считаются неподходящими для базовой системы LFS.

Некоторые из них небезопасны по своей природе и считаются безопасными только в доверенных сетях.

Обратите внимание, что для многих из этих серверов доступны лучшие замены.

2. Скомпилируйте пакет:

make

3. Чтобы проверить результаты, введите:

make check

4. Установите пакет:

make install

5. Переместите программу в нужное место:

mv v /usr/{,s}bin/ifconfig

86. (8.40.) Less-590

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

!!! Пакет Less содержит средство просмотра текстовых файлов.

!!! less просмотрщик файлов или пейджер; он отображает содержимое данного файла, позволяя пользователю прокручивать, находить строки и переходить к меткам

!!! lessecho Необходимо расширить метасимволы, такие как * и ? , в именах файлов в системах Unix

!!! Используется для указания привязки клавиш для less

0. Подготовить Less к компиляции:

./configure prefix=/usr sysconfdir=/etc

Значение параметров настройки:

sysconfdir=/etc

Эта опция указывает программам, созданным пакетом, искать в /etc файлы конфигурации.

1. Скомпилируйте пакет:

make

2. Этот пакет не поставляется с набором тестов.

3. Установите пакет:

make install

87. (8.41.) Perl-5.34.0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

0. Во-первых, примените патч, устраняющий проблему, обнаруженную в последних версиях gdbm:

patch Np1 i ../perl5.34.0upstream_fixes1.patch

1. Эта версия Perl теперь создает модули Compress::Raw::Zlib и Compress::Raw::BZip2.

По умолчанию Perl будет использовать внутреннюю копию исходников для сборки.

Введите следующую команду, чтобы Perl использовал библиотеки, установленные в системе:

export BUILD_ZLIB=False

export BUILD_BZIP2=0

2. Чтобы иметь полный контроль над тем, как настроен Perl, вы можете удалить опции « des » из следующей команды и вручную выбрать способ сборки этого пакета.

В качестве альтернативы используйте команду точно так же, как показано ниже, чтобы использовать значения по умолчанию, которые Perl автоматически определяет:

sh Configure des                                        

             Dprefix=/usr                                

             Dvendorprefix=/usr                          

             Dprivlib=/usr/lib/perl5/5.34/core_perl      

             Darchlib=/usr/lib/perl5/5.34/core_perl      

             Dsitelib=/usr/lib/perl5/5.34/site_perl      

             Dsitearch=/usr/lib/perl5/5.34/site_perl    

             Dvendorlib=/usr/lib/perl5/5.34/vendor_perl  

             Dvendorarch=/usr/lib/perl5/5.34/vendor_perl

             Dman1dir=/usr/share/man/man1                

             Dman3dir=/usr/share/man/man3                

             Dpager=«/usr/bin/less -isR»                

             Duseshrplib                                

             Dusethreads

Значение параметров настройки:

Dvendorprefix=/usr

Это гарантирует , что Perl знает, как сообщить пакетам, где они должны устанавливать свои модули Perl.

Dpager=«/usr/bin/less -isR»

Это гарантирует, что lessвместо more.

Dman1dir=/usr/share/man/man1 Dman3dir=/usr/share/man/man3

Поскольку Groff еще не установлен, Configure считает, что man-страницы для Perl нам не нужны. Выдача этих параметров отменяет это решение.

Duseshrplib

Создайте общую библиотеку libperl, необходимую для некоторых модулей Perl.

Dusethreads

Создайте Perl с поддержкой потоков.

Dprivlib,Darchlib,Dsitelib,...

Эти настройки определяют, где Perl ищет установленные модули. Редакторы LFS решили поместить их в структуру каталогов, основанную на версии Perl Major.Minor (5.34),

что позволяет обновлять Perl до более новых уровней исправлений (5.34.0) без необходимости повторной переустановки всех модулей.

3. Скомпилируйте пакет:

make

4. Для проверки результатов (примерно 11 SBU) выдайте:

make test

5. Установите пакет и очистите:

make install

unset BUILD_ZLIB BUILD_BZIP2

6. В пакет входит:

corelist Интерфейс командной строки для Module::CoreList

cpan Взаимодействие с комплексной сетью архивов Perl (CPAN) из командной строки

enc2xs Создает расширение Perl для модуля Encode либо из сопоставлений символов Unicode, либо из файлов кодирования Tcl.

encguess Угадайте тип кодировки одного или нескольких файлов

h2ph Преобразует .hзаголовочные файлы C в заголовочные файлы .phPerl

h2xs Преобразует .hзаголовочные файлы C в расширения Perl

instmodsh Сценарий оболочки для проверки установленных модулей Perl и создания архива из установленного модуля.

json_pp Преобразует данные между определенными входными и выходными форматами

libnetcfg Может использоваться для настройки libnetмодуля Perl

perl Объединяет некоторые из лучших функций C, sed , awk и sh в единый язык швейцарской армии.

perl5.34.0 Жесткая ссылка на perl

perlbug Используется для создания отчетов об ошибках Perl или модулей, которые поставляются с ним, и отправки их по почте.

perldoc Отображает часть документации в формате pod, которая встроена в дерево установки Perl или в сценарий Perl.

perlivp Процедура проверки установки Perl; его можно использовать для проверки правильности установки Perl и его библиотек.

perlthanks Используется для создания благодарственных сообщений для отправки по почте разработчикам Perl.

piconv Perl-версия конвертера кодировки символов iconv

pl2pm Грубый инструмент для преобразования файлов Perl4 в модули .plPerl5 ..pm

pod2html Преобразует файлы из формата pod в формат HTML.

pod2man Преобразует данные модуля в форматированный ввод *roff.

pod2html Преобразует данные модуля в форматированный текст ASCII.

pod2usage Печатает сообщения об использовании из встроенных документов pod в файлы

podchecker Проверяет синтаксис файлов документации формата pod.

podselect Отображает выбранные разделы документации модуля

prove Инструмент командной строки для запуска тестов с модулем Test::Harness.

ptar tar подобная программа, написанная на Perl

ptardiff Программа Perl, сравнивающая извлеченный архив с нераспакованным.

ptargrep Программа Perl, которая применяет сопоставление с образцом к содержимому файлов в tar-архиве.

shasum Печатает или проверяет контрольные суммы SHA

splain Используется для принудительной диагностики подробного предупреждения в Perl.

xsubpp Преобразует код Perl XS в код C

zipdetails  Отображает сведения о внутренней структуре Zip-файла.

88. (8.42.) XML::Parser-2.46

!!! Expat предоставляет интерфейс Perl Expat

!!! Модуль XML::Parser представляет собой Perl-интерфейс к XML-парсеру Джеймса Кларка Expat.

0. Подготовьте XML::Parser к компиляции:

perl Makefile.PL

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make test

3.  Установите пакет:

make install

89. (8.43.) Intltool-0.51.0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

!!! ntltool это инструмент интернационализации, используемый для извлечения переводимых строк из исходных файлов.

!!! intltoolize  Подготавливает пакет для использования intltool

!!! intltoolextract Генерирует файлы заголовков, которые могут быть прочитаны gettext

!!! intltoolmerge Объединяет переведенные строки в различные типы файлов

!!! intltoolprepare Обновляет файлы pot и объединяет их с файлами перевода

!!! intltoolupdate Обновляет файлы шаблонов po и объединяет их с переводами

0. Сначала исправьте предупреждение, вызванное perl5.22 и более поздними версиями:

sed i ‘s:\${:\$\{:’ intltoolupdate.in

!!! Примечание

!!! Приведенное выше регулярное выражение выглядит необычно из-за всех обратных косых черт. Что он делает,

!!! так это добавляет обратную косую черту перед правой фигурной скобкой в ​​последовательности ‘${‘, что приводит к ‘${‘.

1. Подготовьте Intltool к компиляции:

./configure prefix=/usr

2. Скомпилируйте пакет:

make

3. Чтобы проверить результаты, введите:

make check

4. Установите пакет:

make install

install v Dm644 doc/I18NHOWTO /usr/share/doc/intltool0.51.0/I18NHOWTO

90. (8.44.) Autoconf-2.71

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

!!! Пакет Autoconf содержит программы для создания сценариев оболочки, которые могут автоматически конфигурировать исходный код.

0. Подготовьте Autoconf к компиляции:

./configure prefix=/usr

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

!!! Примечание

!!! Время тестирования autoconf может быть значительно сокращено в системе с несколькими ядрами.

!!! Для этого добавьте TESTSUITEFLAGS=-j<N> к строке выше. Например, использование j4 может сократить время тестирования более чем на 60 процентов.

3. Установите пакет:

make install

4. Пакет содержит:

autoconf Создает сценарии оболочки, которые автоматически настраивают пакеты исходного кода программного обеспечения для адаптации ко многим видам Unix-подобных систем;

         создаваемые им сценарии конфигурации независимы для их запуска не требуется программа autoconf

autoheader Инструмент для создания файлов шаблонов операторов C #define для использования в configure

autom4te  обертка для макропроцессора M4

autoreconf Автоматически запускает autoconf , autoheader , aclocal , automake , gettextize и libtoolize в правильном порядке,

           чтобы сэкономить время при внесении изменений в файлы шаблонов autoconf и automake .

autoscan Помогает создать configure.inфайл для программного пакета; он проверяет исходные файлы в дереве каталогов,

         ищет в них распространенные проблемы с переносимостью и создает configure.scanфайл, который служит предварительным configure.inфайлом для пакета.

autoupdate Изменяет configure.in файл, который по-прежнему вызывает макросы autoconf по их старым именам, чтобы использовать текущие имена макросов.

ifnames Помогает при записи configure.inфайлов для программного пакета; она выводит идентификаторы, которые пакет использует в условных выражениях препроцессора C.

        [Если пакет уже настроен для некоторой переносимости, эта программа может помочь определить, что нужно проверить configure.

        Он также может заполнять пробелы в configure.in файле, сгенерированном autoscan.]

91. (8.45.) Automake-1.16.5

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

!!! Пакет Automake содержит программы для создания файлов Makefile для использования с Autoconf.

!!! aclocal Генерирует aclocal.m4 файлы на основе содержимого configure.inфайлов

!!! aclocal1.16 Жесткая ссылка на aclocal

!!! automake Инструмент для автоматического создания Makefile.inфайлов из Makefile.amфайлов [Чтобы создать все Makefile.in

             файлы для пакета, запустите эту программу в каталоге верхнего уровня. Сканируя configure.inфайл, он автоматически находит

             каждый подходящий Makefile.amфайл и создает соответствующий Makefile.inфайл.]

!!! automake1.16 Жесткая ссылка на automake

0. Подготовьте Automake к компиляции:

./configure prefix=/usr docdir=/usr/share/doc/automake1.16.5

1. Скомпилируйте пакет:

make

2. Тесты. Использование параметра make j4 ускоряет тесты даже на системах с одним процессором из-за внутренних задержек в отдельных тестах.

Чтобы проверить результаты, введите:

make j4 check

Известно, что тест t/subobj.sh не прошел.

3. Установите пакет:

make install

92. (8.46.) OpenSSL-3.0.1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

!!! Пакет OpenSSL содержит инструменты управления и библиотеки, относящиеся к криптографии.

!!! Они полезны для предоставления криптографических функций другим пакетам, таким как OpenSSH, приложениям электронной почты и веб-браузерам (для доступа к сайтам HTTPS).

0. Подготовьте OpenSSL к компиляции:

./config prefix=/usr        

         openssldir=/etc/ssl

         libdir=lib          

         shared                

         zlibdynamic

1. Скомпилируйте пакет:

make

2 Тесты. Чтобы проверить результаты, введите:

make test

!!! Известно, что один тест, 30test_afalg.t, дает сбой в некоторых конфигурациях ядра (в зависимости от несовместимых значений параметров CONFIG_CRYPTO_USER_API*).

!!! Если он не пройден, его можно смело игнорировать.

3. Установите пакет:

sed i ‘/INSTALL_LIBS/s/libcrypto.a libssl.a//’ Makefile

make MANSUFFIX=ssl install

4. Добавьте версию к имени каталога документации, чтобы она соответствовала другим пакетам:

mv v /usr/share/doc/openssl /usr/share/doc/openssl3.0.1

5. При желании установите дополнительную документацию:

mkdir p /usr/share/doc/openssl3.0.1

cp vfr doc/* /usr/share/doc/openssl3.0.1

!!! Примечание

!!! Вы должны обновлять OpenSSL, когда объявляется новая версия, исправляющая уязвимости.

!!! Релизы выпускаются последовательно, с буквой для каждого выпуска после первоначального выпуска (например, 1.1.1, 1.1.1a, 1.1.1b и т. д.).

!!! Поскольку LFS устанавливает только общие библиотеки, нет необходимости перекомпилировать пакеты, которые ссылаются на libcrypto.soили libssl.so при обновлении той же серии.

!!! Однако любые запущенные программы, связанные с этими библиотеками, необходимо остановить и перезапустить.

!!! c_rehash это Perl скрипт, который сканирует все файлы в каталоге и добавляет символические ссылки к их хеш-значениям.

!!! openssl это инструмент командной строки для использования различных криптографических функций криптографической библиотеки OpenSSL из оболочки.

    Его можно использовать для различных функций, которые задокументированы в man 1 openssl.

!!! libcrypto.so реализует широкий спектр криптографических алгоритмов, используемых в различных интернет-стандартах.

     Услуги, предоставляемые этой библиотекой, используются реализациями OpenSSL SSL, TLS и S/MIME, а также они использовались для реализации OpenSSH ,

     OpenPGP и других криптографических стандартов.

!!!  libssl.so реализует протокол безопасности транспортного уровня (TLS v1).

     Он предоставляет богатый API, документацию по которому можно найти, запустив man 3 ssl .

93. (8.47.) Kmod-29

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

!!! Пакет Kmod содержит библиотеки и утилиты для загрузки модулей ядра.

!!! depmod Создает файл зависимостей на основе символов, которые он находит в существующем наборе модулей;

    этот файл зависимостей используется modprobe для автоматической загрузки необходимых модулей

!!! insmod Устанавливает загружаемый модуль в работающее ядро

!!! kmod Загружает и выгружает модули ядра

!!! lsmod Список загруженных модулей

!!! modinfo Исследует объектный файл, связанный с модулем ядра, и отображает всю информацию, которую он может собрать.

!!! modprobe Использует файл зависимостей, созданный depmod , для автоматической загрузки соответствующих модулей.

!!! rmmod Выгружает модули из работающего ядра

!!! libkmod Эта библиотека используется другими программами для загрузки и выгрузки модулей ядра.

0. Подготовьте Kmod для компиляции:

./configure prefix=/usr          

            sysconfdir=/etc      

            withopenssl        

            withxz              

            withzstd            

            withzlib

Значение параметров настройки:

withopenssl

Эта опция позволяет Kmod обрабатывать подписи PKCS7 для модулей ядра.

withxz, withzlib, и—withzstd

Эти параметры позволяют Kmod обрабатывать сжатые модули ядра.

1. Скомпилируйте пакет:

make

2. Тесты:

Для набора тестов этого пакета требуются необработанные заголовки ядра (а не « продезинфицированные » заголовки ядра, установленные ранее), которые выходят за рамки LFS.

3. Установите пакет и создайте символические ссылки для совместимости с ModuleInitTools (пакет, который ранее обрабатывал модули ядра Linux):

make install

for target in depmod insmod modinfo modprobe rmmod; do

  ln sfv ../bin/kmod /usr/sbin/$target

done

ln sfv kmod /usr/bin/lsmod

94. (8.48.1) Libelf from Elfutils-0.186

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

!!! Libelf это библиотека для обработки файлов ELF (Executable and Linkable Format).

!!! libelf Содержит функции API для обработки объектных файлов ELF.

0. Подготовьте Libelf к компиляции:

./configure prefix=/usr                

            disabledebuginfod        

            enablelibdebuginfod=dummy

1. Скомпилируйте пакет:

make

2. Тесты:

Чтобы проверить результаты, введите:

make check

3. Установить только Libelf:

make C libelf install

install vm644 config/libelf.pc /usr/lib/pkgconfig

rm /usr/lib/libelf.a

95. (8.49.) Libffi-3.4.2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

!!! libffi содержит API-функции внешнего интерфейса функций

!!! Примечание

!!! Подобно GMP, libffi строится с оптимизацией, специфичной для используемого процессора.

!!! При сборке для другой системы экспортируйте CFLAGS и CXXFLAGS, чтобы указать общую сборку для вашей архитектуры.

!!! Если этого не сделать, все приложения, ссылающиеся на libffi, будут вызывать ошибки недопустимых операций.

0. Подготовьте libffi к компиляции:

./configure prefix=/usr          

            disablestatic      

            withgccarch=native

            disableexecstatictramp

Значение опции конфигурации:

withgccarch=native

Убедитесь, что GCC оптимизируется для текущей системы. Если это не указано, система угадывается, и сгенерированный код может быть неправильным для некоторых систем.

Если сгенерированный код будет скопирован из собственной системы в систему с меньшими возможностями, используйте менее эффективную систему в качестве параметра.

Подробнее об альтернативных типах систем см. опции x86 в руководстве по GCC .

disableexecstatictramp

Отключите статическую поддержку батута.

Это новая функция безопасности в libffi, но некоторые пакеты BLFS (особенно GJS и gobjectintrospection ) не адаптированы для нее.

1. Скомпилируйте пакет:

make

2. Тест. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

96. (8.50.) Python-3.10.2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

!!! 2to3 это программа Python , которая читает исходный код Python 2.x и применяет ряд исправлений для преобразования его в действительный код Python 3.x.

!!! idle3 это скрипт-оболочка, который открывает редактор графического интерфейса с поддержкой Python.

            Для запуска этого скрипта вы должны установить Tk перед Python, чтобы модуль Tkinter Python был собран.

!!! pip3 Установщик пакетов для Python.

         Вы можете использовать pip для установки пакетов из индекса пакетов Python и других индексов.

!!! pydoc3 это инструмент документации Python

!!! python3 интерпретируемый, интерактивный, объектно-ориентированный язык программирования

0. Подготовьте Python к компиляции:

./configure prefix=/usr        

            enableshared      

            withsystemexpat  

            withsystemffi    

            withensurepip=yes

            enableoptimizations

Значение параметров настройки:

withsystemexpat

Этот переключатель включает привязку к системной версии Expat .

withsystemffi

Этот переключатель включает линковку с системной версией libffi .

withensurepip=yes

Этот переключатель позволяет создавать программы упаковки pip и setuptools .

enableoptimizations

Этот переключатель обеспечивает стабильную, но дорогостоящую оптимизацию.

1. Скомпилируйте пакет:

make

2. Запускать тесты на этом этапе не рекомендуется. Известно, что тесты зависают на неопределенный срок в частичной среде LFS.

При желании тесты можно запустить повторно в конце этой главы или при переустановке Python 3 в BLFS.

Чтобы запустить тесты в любом случае, введите команду make test .

3. Установите пакет:

make install

4. При желании установите предварительно отформатированную документацию:

install v dm755 /usr/share/doc/python3.10.2/html

tar stripcomponents=1  

    nosameowner      

    nosamepermissions

    C /usr/share/doc/python3.10.2/html

    xvf ../python3.10.2docshtml.tar.bz2

Значение команд установки документации:

nosameownerа также—nosamepermissions

Убедитесь, что установленные файлы имеют правильную собственность и разрешения.

Без этих опций использование tar установит файлы пакета со значениями вышестоящего создателя.

97. (8.51.) Ninja-1.10.2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

!!! Ninja это небольшая система сборки с упором на скорость.

0. Использование приведенной ниже дополнительной процедуры позволяет пользователю ограничить количество параллельных процессов с помощью переменной среды NINJAJOBS.

export NINJAJOBS=4

1. При желании добавьте возможность использовать переменную среды NINJAJOBS, запустив:

sed i ‘/int Guess/a

  int   j = 0;

  char* jobs = getenv( «NINJAJOBS» );

  if ( jobs != NULL ) j = atoi( jobs );

  if ( j > 0 ) return j;

src/ninja.cc

2. Создайте ниндзя с помощью:

python3 configure.py bootstrap

Смысл варианта сборки:

bootstrap

Этот параметр заставляет ниндзя перестраиваться под текущую систему.

3. Чтобы проверить результаты, введите:

./ninja ninja_test

./ninja_test gtest_filter=-SubprocessTest.SetWithLots

4. Установите пакет:

install vm755 ninja /usr/bin/

install vDm644 misc/bashcompletion /usr/share/bashcompletion/completions/ninja

install vDm644 misc/zshcompletion  /usr/share/zsh/sitefunctions/_ninja

98. (8.52.) Meson-0.61.1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

!!! Meson это система сборки с открытым исходным кодом, которая должна быть чрезвычайно быстрой и максимально удобной для пользователя.

0. Скомпилируйте Meson с помощью следующей команды:

python3 setup.py build

1. Тесты.

Этот пакет не поставляется с набором тестов.

2. Установите пакет:

python3 setup.py install root=dest

cp rv dest/* /

install vDm644 data/shellcompletions/bash/meson /usr/share/bashcompletion/completions/meson

install vDm644 data/shellcompletions/zsh/_meson /usr/share/zsh/sitefunctions/_meson

Значение параметров установки:

root=dest

По умолчанию python3 setup.py install устанавливает различные файлы (например, справочные страницы) в яйца Python.

С указанным корневым расположением setup.py устанавливает эти файлы в стандартную иерархию. Затем иерархию можно просто скопировать в стандартное расположение.

99. (8.53.) Coreutils-9.0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

!!! Пакет Coreutils содержит утилиты для отображения и настройки основных характеристик системы.

0. POSIX требует, чтобы программы из Coreutils правильно распознавали границы символов даже в многобайтовых локалях.

   Следующий патч исправляет это несоответствие и другие ошибки, связанные с интернационализацией.

patch Np1 i ../coreutils9.0i18n1.patch

!!! Примечание

!!! В прошлом в этом патче было обнаружено много ошибок.

!!! Сообщая о новых ошибках сопровождающим Coreutils, сначала проверьте, воспроизводятся ли они без этого исправления.

1. Теперь исправьте проблему с возвращаемыми значениями chmod:

patch Np1 i ../coreutils9.0chmod_fix1.patch

2. Теперь подготовьте Coreutils к компиляции:

autoreconf fiv

FORCE_UNSAFE_CONFIGURE=1 ./configure

            prefix=/usr            

            enablenoinstallprogram=kill,uptime

Значение параметров настройки:

autoreconf Патч для интернационализации изменил систему сборки пакета, поэтому файлы конфигурации необходимо сгенерировать заново.

FORCE_UNSAFE_CONFIGURE=1

Эта переменная среды позволяет создавать пакет от имени rootпользователя.

enablenoinstallprogram=kill,uptime

Цель этого переключателя запретить Coreutils устанавливать двоичные файлы, которые позже будут установлены другими пакетами.

3. Скомпилируйте пакет:

make

4. Тесты. Перейдите к «Установить пакет» , если не запускаете набор тестов.

Теперь набор тестов готов к запуску. Сначала запустите тесты, предназначенные для запуска пользователем root:

make NON_ROOT_USERNAME=tester checkroot

Мы собираемся запустить оставшуюся часть тестов от имени testerпользователя.

Некоторые тесты требуют, чтобы пользователь был членом более чем одной группы.

Чтобы эти тесты не пропустить, добавим временную группу и сделаем пользователя testerее частью:

echo «dummy:x:102:tester» >> /etc/group

Исправьте некоторые разрешения, чтобы пользователь без полномочий root мог компилировать и запускать тесты:

chown Rv tester .

Теперь запустите тесты:

su tester c «PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check»

Известно, что тест testgetlogin не работает в среде chroot LFS.

Удалить временную группу:

sed i ‘/dummy/d’ /etc/group

Установите пакет:

5. Установка пакета

make install

Переместите программы в места, указанные FHS:

mv v /usr/bin/chroot /usr/sbin

mv v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8

sed i ‘s/»1″/»8″/’ /usr/share/man/man8/chroot.8

6. Что входит в пакет:

[ Реальная команда /usr/bin/[, которая является синонимом тестовой команды .

base32 Кодирует и декодирует данные в соответствии со спецификацией base32 (RFC 4648).

base64 Кодирует и декодирует данные в соответствии со спецификацией base64 (RFC 4648).

b2sum Печатает или проверяет контрольные суммы BLAKE2 (512 бит)

basename Удаляет любой путь и данный суффикс из имени файла

basenc Кодирует или декодирует данные с использованием различных алгоритмов

cat Объединяет файлы в стандартный вывод

chcon Изменяет контекст безопасности для файлов и каталогов

chgrp Изменяет групповое владение файлами и каталогами

chmod Изменяет разрешения каждого файла на заданный режим; режим может быть либо символическим представлением вносимых изменений, либо восьмеричным числом, представляющим новые разрешения.

chown Изменяет права пользователя и/или группы на файлы и каталоги.

chroot Запускает команду с указанным каталогом в качестве /каталога

cksum Выводит контрольную сумму Cyclic Redundancy Check (CRC) и количество байтов для каждого указанного файла.

comm Сравнивает два отсортированных файла, выводя в три столбца уникальные и общие строки.

ср Копирует файлы

csplit Разбивает заданный файл на несколько новых файлов, разделяя их в соответствии с заданными шаблонами или номерами строк и выводя количество байтов для каждого нового файла.

cut Печатает участки строк, выбирая части в соответствии с заданными полями или позициями

date Отображает текущее время в заданном формате или устанавливает системную дату

dd Копирует файл, используя заданный размер блока и количество, при необходимости выполняя преобразования на нем.

df Сообщает объем доступного (и используемого) дискового пространства во всех смонтированных файловых системах или только в файловых системах, содержащих выбранные файлы.

dir Выводит содержимое каждого заданного каталога (так же, как команда ls )

dircolors Выводит команды для установки LS_COLOR переменной среды для изменения цветовой схемы, используемой ls

dirname Удаляет суффикс, не относящийся к каталогу, из имени файла.

du Сообщает объем дискового пространства, используемого текущим каталогом, каждым из заданных каталогов (включая все подкаталоги) или каждым из заданных файлов.

echo Отображает заданные строки

env Запускает команду в измененной среде

expand Преобразует вкладки в пробелы

expr Оценивает выражения

factor Выводит простые множители всех указанных целых чисел

false Ничего не делает, безуспешно; он всегда завершается с кодом состояния, указывающим на сбой

fmt Переформатирует абзацы в указанных файлах

fold Переносит строки в заданных файлах

groups Сообщает о членстве пользователя в группе

head Печатает первые десять строк (или заданное количество строк) каждого заданного файла.

hostid Сообщает числовой идентификатор (в шестнадцатеричном формате) хоста

id Сообщает эффективный идентификатор пользователя, идентификатор группы и членство в группах текущего пользователя или указанного пользователя.

install Копирует файлы, задавая их режимы разрешений и, если возможно, их владельца и группу

join Соединяет строки с одинаковыми полями соединения из двух отдельных файлов.

link Создает жесткую ссылку с заданным именем на файл

ln Делает жесткие ссылки или мягкие (символические) ссылки между файлами

logname Сообщает имя входа текущего пользователя

ls Перечисляет содержимое каждого заданного каталога

md5sum Сообщает или проверяет контрольные суммы Message Digest 5 (MD5)

mkdir Создает каталоги с заданными именами

mkfifo Создает «первым пришел первым ушел» (FIFO), «именованный канал» на языке UNIX с заданными именами.

mknod Создает узлы устройств с заданными именами; узел устройства представляет собой специальный символьный файл, специальный файл блока или FIFO.

mktemp Безопасно создает временные файлы; он используется в сценариях

mv Перемещает или переименовывает файлы или каталоги

nice Запускает программу с измененным приоритетом планирования

nl Нумерует строки из заданных файлов

nohup Выполняет команду, защищенную от зависаний, с перенаправлением ее вывода в файл журнала.

nproc Выводит количество процессорных единиц, доступных для процесса.

numfmt Преобразует числа в или из удобочитаемых строк

od Создает дамп файлов в восьмеричном и других форматах

paste Объединяет данные файлы, последовательно соединяя соответствующие строки рядом друг с другом, разделенные символами табуляции.

pathchk Проверяет, являются ли имена файлов допустимыми или переносимыми

pinky Легкий клиент для пальцев; он сообщает некоторую информацию о данных пользователях

pr Разбивает файлы на страницы и столбцы для печати

printenv Печатает среду

printf Выводит заданные аргументы в соответствии с заданным форматом, подобно функции C printf.

ptx Создает переставленный индекс из содержимого заданных файлов с каждым ключевым словом в своем контексте.

pwd Сообщает имя текущего рабочего каталога

readlink Сообщает значение данной символической ссылки

realpath Печатает разрешенный путь

rm Удаляет файлы или каталоги

rmdir Удаляет каталоги, если они пусты

runcon Запускает команду с указанным контекстом безопасности

seq Выводит последовательность чисел в заданном диапазоне и с заданным приращением

sha1sum Печатает или проверяет контрольные суммы 160-битного алгоритма безопасного хеширования 1 (SHA1)

sha224sum Печатает или проверяет контрольные суммы 224-битного алгоритма безопасного хеширования.

sha256sum Печатает или проверяет контрольные суммы 256-битного алгоритма безопасного хеширования.

sha384sum Печатает или проверяет контрольные суммы 384-битного алгоритма безопасного хеширования

sha512sum Печатает или проверяет контрольные суммы 512-битного алгоритма безопасного хеширования

shred Многократно перезаписывает заданные файлы сложными шаблонами, что затрудняет восстановление данных.

shuf Перемешивает строки текста

sleep Паузы на заданное время

sort Сортирует строки из заданных файлов

split Разбивает данный файл на части, по размеру или по количеству строк

stat Отображает статус файла или файловой системы

stdbuf Запускает команды с измененными операциями буферизации для своих стандартных потоков.

stty Устанавливает или сообщает настройки линии терминала

sum Выводит контрольную сумму и количество блоков для каждого заданного файла

sync Сбрасывает буферы файловой системы; он принудительно записывает измененные блоки на диск и обновляет суперблок

tac Объединяет данные файлы в обратном порядке

tail Печатает последние десять строк (или заданное количество строк) каждого заданного файла.

tee Читает со стандартного ввода при записи как на стандартный вывод, так и в заданные файлы

test Сравнивает значения и проверяет типы файлов

timeout Запускает команду с ограничением по времени

touch Изменяет временные метки файлов, устанавливая время доступа и модификации данных файлов на текущее время; несуществующие файлы создаются с нулевой длиной

tr Переводит, сжимает и удаляет заданные символы из стандартного ввода

true Ничего не делает, успешно; он всегда завершается с кодом состояния, указывающим на успех

truncate Сжимает или расширяет файл до указанного размера

tsort Выполняет топологическую сортировку; он записывает полностью упорядоченный список в соответствии с частичным порядком в данном файле

tty Сообщает имя файла терминала, подключенного к стандартному вводу.

uname Сообщает системную информацию

unexpand Преобразует пробелы в табуляции

uniq Отбрасывает все, кроме одной из последовательных идентичных строк

unlink Удаляет указанный файл

users Сообщает имена пользователей, которые в данный момент вошли в систему

vdir То же, что ls l

wc Сообщает количество строк, слов и байтов для каждого заданного файла, а также общую строку, если задано более одного файла.

who Сообщает, кто вошел в систему

whoami Сообщает имя пользователя, связанное с текущим эффективным идентификатором пользователя.

yes Повторно выводит « y » или заданную строку, пока не будет уничтожен

libstdbuf Библиотека, используемая stdbuf

100. (8.54.) Check-0.15.2

!!! Check это фреймворк модульного тестирования для C.

!!! checkmk Сценарий Awk для создания модульных тестов C для использования с платформой модульного тестирования Check.

!!! libcheck.{a,so} Содержит функции, позволяющие вызывать Check из тестовой программы.

0. Подготовить чек к компиляции:

./configure prefix=/usr disablestatic

1. Соберите пакет:

make

2. Компиляция завершена. Чтобы запустить набор тестов Check, введите следующую команду:

make check

3. Установите пакет:

make docdir=/usr/share/doc/check0.15.2 install

101. (8.55.) Diffutils-3.8

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

cmp Сравнивает два файла и сообщает, различаются ли они и в каких байтах

diff Сравнивает два файла или каталога и сообщает, какие строки в файлах отличаются

diff3 Сравнивает три файла построчно

sdiff Объединяет два файла и интерактивно выводит результаты

!!! Пакет Diffutils содержит программы, которые показывают различия между файлами или каталогами.

0. Подготовьте Diffutils для компиляции:

./configure prefix=/usr

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

102. (8.56.) Gawk-5.1.1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

awk ссылка на гавк

gawk Программа для работы с текстовыми файлами; это реализация GNU awk

gawk5.1.1 Жесткая ссылка на gawk

!!! Пакет Gawk содержит программы для работы с текстовыми файлами.

0. Во-первых, убедитесь, что некоторые ненужные файлы не установлены:

sed i ‘s/extras//’ Makefile.in

1. Подготовьте Gawk к компиляции:

./configure prefix=/usr

2. Скомпилируйте пакет:

make

3. Чтобы проверить результаты, введите:

make check

4. Установите пакет:

make install

5. При желании установите документацию:

mkdir pv                                   /usr/share/doc/gawk5.1.1

cp    v doc/{awkforai.txt,*.{eps,pdf,jpg}} /usr/share/doc/gawk5.1.1

103. (8.57.) Findutils-4.9.0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

!!! Пакет Findutils содержит программы для поиска файлов.

!!! Эти программы предназначены для рекурсивного поиска в дереве каталогов, а также для создания,

!!! обслуживания и поиска в базе данных (часто быстрее, чем рекурсивный поиск, но ненадежно, если база данных недавно не обновлялась).

!!! find Ищет в заданных деревьях каталогов файлы, соответствующие указанным критериям.

!!! locate Выполняет поиск в базе данных имен файлов и сообщает об именах, которые содержат заданную строку или соответствуют заданному шаблону.

!!! updatedb Обновляет базу данных местонахождения ; он сканирует всю файловую систему (включая другие файловые системы,

             которые в настоящее время смонтированы, если не указано иное) и помещает каждое найденное имя файла в базу данных.

!!! xargs Может использоваться для применения данной команды к списку файлов

0. Подготовьте Findutils к компиляции:

case $(uname m) in

    i?86)   TIME_T_32_BIT_OK=yes ./configure prefix=/usr localstatedir=/var/lib/locate ;;

    x86_64) ./configure prefix=/usr localstatedir=/var/lib/locate ;;

esac

Значение параметров настройки:

TIME_32_BIT_OK=yes

Этот параметр необходим для сборки на 32-битной системе.

localstatedir

Этот параметр изменяет расположение базы данных локации на /var/lib/locate, что соответствует требованиям FHS.

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

chown Rv tester .

su tester c «PATH=$PATH make check»

3. Установите пакет:

make install

104. (8.58.) Groff-1.22.4

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

!!! Пакет Groff содержит программы для обработки и форматирования текста.

addftinfo Читает файл шрифта troff и добавляет некоторую дополнительную информацию о метрике шрифта, используемую системой groff .

afmtodit Создает файл шрифта для использования с groff и grops.

chem Препроцессор Groff для создания диаграмм химической структуры

eqn Компилирует описания уравнений, встроенные во входные файлы troff, в команды, понятные troff .

eqn2graph Преобразует troff EQN (уравнение) в обрезанное изображение.

gdiffmk Отмечает различия между файлами groff/nroff/troff.

glilypond Преобразовывает ноты, написанные на языке lilypond, в язык groff.

gperl Препроцессор для groff, позволяющий добавлять код Perl в файлы groff.

gpinyin Препроцессор для groff, позволяющий добавлять китайско-европейский язык пиньинь в файлы groff.

grap2graph Преобразует графическую диаграмму в обрезанное растровое изображение.

grn Препроцессор groff для файлов Gremlin

grodvi Драйвер для groff , создающий формат TeX dvi .

groff Внешний интерфейс к системе форматирования документов groff; обычно он запускает программу troff и постпроцессор, соответствующий выбранному устройству.

groffer Отображает файлы groff и справочные страницы на терминалах X и tty.

grog Читает файлы и угадывает, какие из параметров groff ,e , man, me, mm, ms, pи sнеобходимы tдля печати файлов, и сообщает команде groff , включая эти параметры .

grolbp Является драйвером groff для принтеров Canon CAPSL (лазерные принтеры серии LBP4 и LBP8).

grolj4 Драйвер для groff , который производит вывод в формате PCL5, подходящем для принтера HP LaserJet 4.

gropdf Переводит вывод GNU troff в PDF

grops Переводит вывод GNU troff в PostScript .

grotty Переводит вывод GNU troff в форму, подходящую для устройств, подобных пишущим машинкам.

hpftodit Создает файл шрифта для использования с groff Tlj4 из файла метрики шрифта с тегом HP.

indxbib Создает инвертированный индекс для библиографических баз данных с указанным файлом для использования с refer , lookbib и lkbib

lkbib Выполняет поиск в библиографических базах данных ссылок, содержащих указанные ключи, и сообщает о любых найденных ссылках.

lookbib Печатает подсказку при стандартной ошибке (если стандартный ввод не является терминалом), читает строку, содержащую набор ключевых слов из стандартного ввода,

        ищет в библиографических базах данных в указанном файле ссылки, содержащие эти ключевые слова, печатает все ссылки,

        найденные на стандартный вывод и повторяет этот процесс до конца ввода

mmroff Простой препроцессор для groff

neqn Уравнения форматов для выходных данных американского стандартного кода для обмена информацией (ASCII)

nroff Скрипт, эмулирующий команду nroff с помощью groff

pdfmom Является оболочкой groff, которая упрощает создание PDF-документов из файлов, отформатированных с помощью макросов mom.

pdfoff Создает PDF-документы с помощью groff

pfbtops Преобразует шрифт PostScript в .pfb формате ASCII.

pic Компилирует описания изображений, встроенных во входные файлы troff или TeX, в команды, понятные TeX или troff .

pic2graph Преобразует диаграмму PIC в обрезанное изображение.

postgrohtml Переводит вывод GNU troff в HTML

preconv Преобразует кодировку входных файлов в то, что понимает GNU troff .

pregrohtml Переводит вывод GNU troff в HTML

refer Копирует содержимое файла в стандартный вывод, за исключением того, что строки между .[ и .] интерпретируются как цитаты, а строки между .R1 и .R2 интерпретируются как команды для обработки цитат.

roff2dvi Преобразует файлы roff в формат DVI.

roff2html Преобразует файлы roff в формат HTML.

roff2pdf Преобразует roff-файлы в PDF-файлы

roff2ps Преобразует файлы roff в файлы ps.

roff2text Преобразует файлы roff в текстовые файлы.

roff2x Преобразует файлы roff в другие форматы.

soelim Читает файлы и заменяет строки вида .so файл содержимым указанного файла

tbl Компилирует описания таблиц, встроенных во входные файлы troff, в команды, понятные troff .

tfmtodit Создает файл шрифта для использования с groff Tdvi

troff Хорошо совместим с Unix troff ; обычно его следует вызывать с помощью команды groff , которая также запускает препроцессоры и постпроцессоры в соответствующем порядке и с соответствующими

!!! Грофф ожидает, что переменная среды PAGEбудет содержать размер бумаги по умолчанию.

!!! Подходит для пользователей в США PAGE=letter.

!!! В другом месте PAGE=A4 может быть более подходящим.

!!! Хотя размер бумаги по умолчанию настраивается во время компиляции, его можно переопределить позже, указав в файле либо « A4 » , либо « letter » ./etc/papersize

0. Подготовьте Groff к компиляции:

#PAGE=<paper_size> ./configure —prefix=/usr

PAGE=A4 ./configure prefix=/usr

1. Этот пакет не поддерживает параллельную сборку. Скомпилируйте пакет:

make j1

2. Этот пакет не поставляется с набором тестов.

3. Установите пакет:

make install

105. (8.59.) GRUB-2.06

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

!!! Пакет GRUB содержит унифицированный загрузчик GRand.

!!! Примечание

!!! Если ваша система поддерживает UEFI и вы хотите загрузить LFS с UEFI, вы можете пропустить этот пакет в LFS и установить GRUB с поддержкой UEFI (и его зависимости),

!!! https://www.linuxfromscratch.org/blfs/view/stable-systemd/postlfs/grub-efi.html

0. Подготовьте GRUB к компиляции:

./configure prefix=/usr          

            sysconfdir=/etc      

            disableefiemu      

            disablewerror

Значение новых опций конфигурации:

disablewerror

Это позволяет завершить сборку с предупреждениями, появившимися в более поздних версиях Flex.

disableefiemu

Этот параметр сводит к минимуму то, что создается за счет отключения функции и тестирования программ, не нужных для LFS.

1. Скомпилируйте пакет:

make

2. Тесты:

Набор тестов для этих пакетов не рекомендуется. Большинство тестов зависят от пакетов, недоступных в ограниченной среде LFS.

Чтобы все равно запустить тесты, запустите

make check

3. Установите пакет:

make install

mv v /etc/bash_completion.d/grub /usr/share/bashcompletion/completions

4. Содержимое пакета:

grubbiossetup Вспомогательная программа для grubinstall

grubeditenv Инструмент для редактирования блока окружения

grubfile Проверяет, относится ли FILE к указанному типу.

grubfstest Инструмент для отладки драйвера файловой системы

grubglueefi Обрабатывает образы EFI ia32 и amd64 и склеивает их в соответствии с форматом Apple

grubinstall  Установите GRUB на свой диск

grubkbdcomp Скрипт, который преобразует макет xkb в макет, распознаваемый GRUB

grubmacbless Благословение в стиле Mac для файлов HFS или HFS+

grubmenulst2cfg Преобразует GRUB Legacy menu.lstв grub.cfgдля использования с GRUB 2

grubmkconfig Создайте файл конфигурации grub

grubmkimage Сделать загрузочный образ GRUB

grubmklayout Создает файл раскладки клавиатуры GRUB.

grubmknetdir Подготавливает сетевой загрузочный каталог GRUB

grubmkpasswdpbkdf2 Генерирует зашифрованный пароль PBKDF2 для использования в меню загрузки.

grubmkrelpath Делает системный путь относительно его корня

grubmkrescue Создайте загрузочный образ GRUB, подходящий для дискеты или CDROM/DVD.

grubmkstandalone Создает отдельное изображение

grubofpathname Вспомогательная программа, которая печатает путь к устройству GRUB.

grubprobe Информация об устройстве зонда для заданного пути или устройства

grubreboot Устанавливает загрузочную запись по умолчанию для GRUB только для следующей загрузки

grubrenderlabel Рендеринг Apple .disk_label для компьютеров Apple Mac

grubscriptcheck Проверяет скрипт конфигурации GRUB на наличие синтаксических ошибок

grubsetdefault Устанавливает загрузочную запись по умолчанию для GRUB

grubsparc64setup Вспомогательная программа для grubsetup

grubsyslinux2cfg Преобразование файла конфигурации syslinux в формат grub.cfg

106. (8.60.) Gzip-1.11

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

!!! Пакет Gzip содержит программы для сжатия и распаковки файлов.

0. Подготовьте Gzip к компиляции:

./configure prefix=/usr

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

4. Содержимое пакета:

gunzip Распаковывает gzip-файлы

gzexe Создает самораспаковывающиеся исполняемые файлы

gzip Сжимает данные файлы, используя кодировку LempelZiv (LZ77)

uncompress Распаковывает сжатые файлы

zcat Распаковывает заданные gzip-файлы в стандартный вывод

zcmp Запускает cmp для gzip-файлов

zdiff Запускает diff для файлов, сжатых gzip

zegrep Запускает egrep для gzip-файлов

zfgrep Запускает fgrep для gzip-файлов

zforce Принудительно устанавливает .gz расширение для всех заданных файлов, которые являются файлами, сжатыми gzip, чтобы gzip не сжимал их снова;

       это может быть полезно, когда имена файлов были усечены во время передачи файла

zgrep Запускает grep для gzip-файлов

zless Меньше работает с файлами, сжатыми gzip

zmore Больше работает с файлами, сжатыми gzip

znew Повторно сжимает файлы из формата Compress в формат gzip .Z чтобы .gz

107. (8.61.) IPRoute2-5.16.0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

!!! Пакет IPRoute2 содержит программы для базовых и расширенных сетей на основе IPV4.

0.  Программа arpd , включенная в этот пакет, не будет собрана, так как она зависит от базы данных Berkeley DB, которая не установлена ​​в LFS.

!!! Однако каталог для arpd и справочная страница все равно будут установлены. Предотвратите это, выполнив приведенные ниже команды.

!!! Если необходим двоичный файл arpd , инструкции по компиляции Berkeley DB можно найти в книге BLFS по адресу https://www.linuxfromscratch.org/blfs/view/stable-systemd/server/db.html .

sed i /ARPD/d Makefile

rm fv man/man8/arpd.8

1. Скомпилируйте пакет:

make

2. Этот пакет не имеет рабочего набора тестов.

3. Установите пакет:

make SBINDIR=/usr/sbin install

4. При желании установите документацию:

mkdir pv             /usr/share/doc/iproute25.16.0

cp v COPYING README* /usr/share/doc/iproute25.16.0

5. Содержимое

bridge Настраивает сетевые мосты

ctstat Утилита состояния подключения

genl  Общий интерфейс утилиты netlink

ifcfg Оболочка сценария оболочки для команды ip [Обратите внимание, что для этого требуются программы arping и rdisk из пакета iputils,

      который можно найти по адресу http://www.skbuff.net/iputils/ .]

ifstat Показывает статистику интерфейса, включая количество переданных и полученных пакетов по интерфейсам.

ip Основной исполняемый файл. Он имеет несколько различных функций:

ip link<device> позволяет пользователям просматривать состояние устройств и вносить изменения

ip addr позволяет пользователям просматривать адреса и их свойства, добавлять новые адреса и удалять старые.

ip neighbor позволяет пользователям просматривать привязки соседей и их свойства, добавлять новые записи соседей и удалять старые.

ip rule позволяет пользователям просматривать политики маршрутизации и изменять их

ip route позволяет пользователям просматривать таблицу маршрутизации и изменять правила таблицы маршрутизации.

ip rule позволяет пользователям просматривать IP-туннели и их свойства, а также изменять их.

ip maddr позволяет пользователям просматривать многоадресные адреса и их свойства и изменять их.

ip mroute позволяет пользователям устанавливать, изменять или удалять многоадресную маршрутизацию.

ip monitor позволяет пользователям постоянно отслеживать состояние устройств, адресов и маршрутов

lnstat Предоставляет сетевую статистику Linux; это обобщенная и более полнофункциональная замена старой программы rtstat

nstat Показывает статистику сети

routef Компонент ip route . Это для сброса таблиц маршрутизации

routel Компонент ip route . Это для перечисления таблиц маршрутизации

rtacct Отображает содержимое/proc/net/rt_acct

rtmon Утилита мониторинга маршрута

rtpr Преобразует вывод ip o обратно в удобочитаемую форму.

rtstat Утилита статуса маршрута

ss Аналогично команде netstat ; показывает активные соединения

tc Исполняемый файл управления трафиком; это для реализаций качества обслуживания (QOS) и класса обслуживания (COS).

tc qdisc позволяет пользователям настроить дисциплину очередей

tc class позволяет пользователям настраивать классы на основе планирования дисциплины очереди.

tc Estimator позволяет пользователям оценить сетевой поток в сеть.

tc filter позволяет пользователям настроить фильтрацию пакетов QOS/COS.

tc policy позволяет пользователям настраивать политики QOS/COS.

107. (8.62.) Kbd-2.4.0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

!!! Пакет Kbd содержит файлы таблиц ключей, консольные шрифты и клавиатурные утилиты.

0. Поведение клавиш возврата и удаления неодинаково для всех раскладок в пакете Kbd.

Следующий патч устраняет эту проблему для раскладок i386:

После исправления клавиша возврата генерирует символ с кодом 127, а клавиша удаления генерирует известную escape-последовательность.

patch Np1 i ../kbd2.4.0backspace1.patch

1. Удалите избыточную программу resizecons (она требует несуществующей svgalib для предоставления файлов видеорежима

для нормального использования setfont соответствующим образом изменяет размеры консоли) вместе с ее справочной страницей.

sed i ‘/RESIZECONS_PROGS=/s/yes/no/’ configure

sed i ‘s/resizecons.8 //’ docs/man/man8/Makefile.in

2. Подготовьте Kbd для компиляции:

./configure prefix=/usr disablevlock

Значение опции конфигурации:

disablevlock

Этот параметр предотвращает сборку утилиты vlock, поскольку для нее требуется библиотека PAM, которая недоступна в среде chroot.

3. Скомпилируйте пакет:

make

4. Чтобы проверить результаты, введите:

make check

5. Установите пакет:

make install

!!! Примечание

!!! Для некоторых языков (например, белорусского) пакет Kbd не предоставляет полезную раскладку, где стандартная раскладка « by » предполагает кодировку ISO88595,

!!! а обычно используется раскладка CP1251. Пользователи таких языков должны загружать рабочие раскладки отдельно.

6. При желании установите документацию:

mkdir pv           /usr/share/doc/kbd2.4.0

cp R v docs/doc/* /usr/share/doc/kbd2.4.0

7. Содержание:

chvt Изменяет виртуальный терминал переднего плана

deallocvt Освобождает неиспользуемые виртуальные терминалы

dumpkeys Сбрасывает таблицы перевода клавиатуры

fgconsole Выводит номер активного виртуального терминала

getkeycodes Распечатывает таблицу сопоставления сканкода ядра с кодом клавиши

kbdinfo Получает информацию о состоянии консоли

kbd_mode Сообщает или устанавливает режим клавиатуры

kbdrate Устанавливает частоту повторения и задержки клавиатуры

loadkeys Загружает таблицы перевода клавиатуры

loadunimap Загружает таблицу сопоставления юникода и шрифта ядра.

mapscrn Устаревшая программа, которая использовалась для загрузки определяемой пользователем таблицы преобразования символов вывода в драйвер консоли; теперь это делает setfont

openvt Запускает программу на новом виртуальном терминале (VT)

psfaddtable Добавляет таблицу символов Unicode в консольный шрифт.

psfgettable Извлекает встроенную таблицу символов Unicode из консольного шрифта.

psfstriptable Удаляет встроенную таблицу символов Unicode из консольного шрифта.

psfxtable Обрабатывает таблицы символов Unicode для консольных шрифтов.

setfont Изменяет шрифты расширенного графического адаптера (EGA) и видеографического массива (VGA) на консоли.

setkeycodes Загружает записи таблицы сопоставления кода сканирования ядра с кодом клавиши; это полезно, если на клавиатуре есть необычные клавиши

setleds Устанавливает флаги клавиатуры и светодиоды.

setmetamode Определяет обработку мета-клавиш клавиатуры

setvtrgb Устанавливает цветовую карту консоли во всех виртуальных терминалах

showconsolefont Показывает текущий шрифт экрана консоли EGA/VGA.

showkey Сообщает скан-коды, коды клавиш и коды ASCII клавиш, нажатых на клавиатуре.

unicode_start Переводит клавиатуру и консоль в режим UNICODE [Не используйте эту программу, если ваш файл раскладки не находится в кодировке ISO88591.

              Для других кодировок эта утилита выдает неправильные результаты.]

unicode_stop Возвращает клавиатуру и консоль из режима UNICODE.

108. (8.63.) Libpipeline-1.5.5

!!! Пакет Libpipeline содержит библиотеку для гибкого и удобного управления конвейерами подпроцессов.

!!! libpipeline Эта библиотека используется для безопасного построения конвейеров между подпроцессами.

0. Подготовьте Libpipeline к компиляции:

./configure prefix=/usr

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

109. (8.64.) Make-4.3

!!! Пакет Make содержит программу для управления генерацией исполняемых файлов и других не исходных файлов пакета из исходных файлов.

!!! make Автоматически определяет, какие части пакета необходимо (повторно) скомпилировать, а затем выдает соответствующие команды.

0. Подготовьте Make к компиляции:

./configure prefix=/usr

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

110. (8.65.) Patch-2.7.6

!!! Пакет Patch содержит программу для изменения или создания файлов путем применения файла « заплаты » , обычно создаваемого программой diff.

!!! Изменяет файлы в соответствии с файлом исправления (файл исправления обычно представляет собой список различий, созданный с помощью программы diff.

!!! Применяя эти различия к исходным файлам, patch создает исправленные версии.)

0. Подготовьте патч к компиляции:

./configure prefix=/usr

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

110. (8.66.) Tar-1.34

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

!!! Пакет Tar предоставляет возможность создавать tar-архивы, а также выполнять различные другие операции с архивами.

!!! Tar можно использовать в ранее созданных архивах для извлечения файлов, для хранения дополнительных файлов или для обновления или списка файлов, которые уже были сохранены.

!!! tar Создает, извлекает файлы и составляет список содержимого архивов, также известных как tarballs.

0. Подготовьте Tar для компиляции:

FORCE_UNSAFE_CONFIGURE=1  

./configure prefix=/usr

Значение опции конфигурации:

FORCE_UNSAFE_CONFIGURE=1

Это заставляет тест для mknod запускаться как root.

Обычно считается опасным запускать этот тест от имени rootпользователя, но, поскольку он выполняется в системе, которая была собрана лишь частично, переопределение допустимо.

1. Скомпилируйте пакет:

make

2. Тесты:

Чтобы проверить результаты, введите:

make check

Известно, что один тест с возможностями: бинарное сохранение/восстановление завершается неудачей (в LFS отсутствует selinux),

но будет пропущен, если ядро ​​хоста не поддерживает расширенные атрибуты в файловой системе, используемой для сборки LFS.

3. Установите пакет:

make install

make C doc installhtml docdir=/usr/share/doc/tar1.34

111. (8.67.) Texinfo-6.8

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

!!! Пакет Texinfo содержит программы для чтения, записи и преобразования информационных страниц.

info Используется для чтения информационных страниц, которые похожи на справочные страницы, но часто гораздо глубже,

     чем просто объяснение всех доступных параметров командной строки [Например, сравните man bison и info bison .]

installinfo Используется для установки информационных страниц; он обновляет записи в файле информационного индекса

makeinfo Переводит заданные исходные документы Texinfo в информационные страницы, обычный текст или HTML.

pdftexi2dvi Используется для форматирования данного документа Texinfo в файл Portable Document Format (PDF).

pod2texi Преобразует Pod в формат Texinfo

texi2any Переводите исходную документацию Texinfo в различные другие форматы.

texi2dvi Используется для форматирования данного документа Texinfo в независимый от устройства файл, который можно распечатать.

texi2pdf Используется для форматирования данного документа Texinfo в файл Portable Document Format (PDF).

texindex Используется для сортировки индексных файлов Texinfo.

0. Подготовьте Texinfo к компиляции:

./configure prefix=/usr

1. Опять же, исправьте проблему со сборкой пакета с помощью Glibc2.34 или более поздней версии:

sed e ‘s/__attribute_nonnull__/__nonnull/’

    i gnulib/lib/malloc/dynarrayskeleton.c

2. Скомпилируйте пакет:

make

3. Чтобы проверить результаты, введите:

make check

4. Установите пакет:

make install

5. При желании установите компоненты, входящие в установку TeX:

make TEXMF=/usr/share/texmf installtex

Значение параметра make:

TEXMF=/usr/share/texmf

Переменная TEXMFmakefile содержит расположение корня дерева TeX, если, например, пакет TeX будет установлен позже.

6. Система документации Info использует простой текстовый файл для хранения списка пунктов меню.

Файл находится по адресу /usr/share/info/dir.

К сожалению, из-за случайных проблем в файлах Makefile различных пакетов он иногда может не синхронизироваться с информационными страницами,

установленными в системе.

Если /usr/share/info/dirфайл когда-либо потребуется воссоздать, следующие необязательные команды выполнят эту задачу:

pushd /usr/share/info

  rm v dir

  for f in *

    do installinfo $f dir 2>/dev/null

  done

popd

112. (8.68.) Vim-8.2.4383

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

!!! Пакет Vim содержит мощный текстовый редактор.

!!! Если вы предпочитаете другой редактор, такой как Emacs, Joe или Nano, обратитесь к https://www.linuxfromscratch.org/blfs/view/stable-systemd/postlfs/editors.html за рекомендациями по установке.

0. Во-первых, измените расположение vimrcфайла конфигурации по умолчанию на /etc:

echo ‘#define SYS_VIMRC_FILE «/etc/vimrc»‘ >> src/feature.h

1/ Подготовьте vim к компиляции:

./configure prefix=/usr

2. Скомпилируйте пакет:

make

3. Чтобы подготовить тесты, убедитесь, что пользователь testerможет писать в исходное дерево:

chown Rv tester .

4. Теперь запустите тесты от имени пользователя tester:

su tester c «LANG=en_US.UTF-8 make -j1 test» &> vim-test.log

Набор тестов выводит на экран много двоичных данных.

Это может вызвать проблемы с настройками текущего терминала.

Этой проблемы можно избежать, перенаправив вывод в файл журнала, как показано выше. Успешный тест приведет к появлению слов «ВСЕ СДЕЛАНО» в файле журнала по завершении.

5. Установите пакет:

make install

6. Многие пользователи привыкли использовать vi вместо vim .

Чтобы разрешить выполнение vim , когда пользователи обычно вводят vi , создайте символическую ссылку как для двоичного файла, так и для справочной страницы на предоставленных языках:

ln -sv vim /usr/bin/vi

for L in  /usr/share/man/{,*/}man1/vim.1; do

    ln sv vim.1 $(dirname $L)/vi.1

done

7. По умолчанию документация vim устанавливается в формате /usr/share/vim.

Следующая символическая ссылка позволяет получить доступ к документации через /usr/share/doc/vim8.2.4383, что делает ее согласованной с расположением документации для других пакетов:

ln sv ../vim/vim82/doc /usr/share/doc/vim8.2.4383

8. Содержимое пакета vim:

ex Запускает vim в ex-режиме

rview Является ограниченной версией представления ; никакие команды оболочки не могут быть запущены, и просмотр не может быть приостановлен

rvim Является ограниченной версией vim ; никакие команды оболочки не могут быть запущены, и vim не может быть приостановлен

vi Ссылка на vim

view Запускает vim в режиме только для чтения

vim Является редактором

vimdiff Редактирует две или три версии файла с помощью vim и показывает различия

vimtutor Обучает основным клавишам и командам vim

xxd Создает шестнадцатеричный дамп данного файла; он также может делать обратное, поэтому его можно использовать для двоичного исправления

9.  Configuring Vim

cat > /etc/vimrc << «EOF»

» Begin /etc/vimrc

« Ensure defaults are set before customizing settings, not after

source $VIMRUNTIME/defaults.vim

let skip_defaults_vim=1

set nocompatible

set backspace=2

set mouse=

syntax on

if (&term == «xterm») || (&term == «putty»)

  set background=dark

endif

« End /etc/vimrc

EOF

10. опции

vim c ‘:options’

11.Авто исправление текста:

set spelllang=en,ru

set spell

114. (8.69.) MarkupSafe-2.0.1

!!! MarkupSafe это модуль Python, реализующий безопасную строку разметки XML/HTML/XHTML.

0. Скомпилируйте MarkupSafe с помощью следующей команды:

python3 setup.py build

1. Этот пакет не поставляется с набором тестов.

2. Установите пакет:

python3 setup.py install optimize=1

115. (8.70.) Jinja2-3.0.3

!!! Jinja2 это модуль Python, реализующий простой язык шаблонов Python.

0. Установите пакет:

python3 setup.py install optimize=1

116. (8.71.) Systemd-250

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

!!! Пакет systemd содержит программы для управления запуском, работой и завершением работы системы.

0. Во-первых, примените патч, чтобы исправить уязвимость безопасности и регрессии с именами хостов и бездействующими единицами:

patch Np1 i ../systemd250upstream_fixes1.patch

1. Удалите две ненужные группы renderи sgxиз правил udev по умолчанию:

sed i e ‘s/GROUP=»render»/GROUP=»video»/’

       e ‘s/GROUP=»sgx», //’ rules.d/50udevdefault.rules.in

2. Подготовьте systemd к компиляции:

mkdir p build

cd       build

meson prefix=/usr                

      sysconfdir=/etc            

      localstatedir=/var          

      buildtype=release          

      Dblkid=true                  

      Ddefaultdnssec=no          

      Dfirstboot=false            

      Dinstalltests=false        

      Dldconfig=false              

      Dsysusers=false              

      Db_lto=false                

      Drpmmacrosdir=no            

      Dhomed=false                

      Duserdb=false                

      Dman=false                  

      Dmode=release                

      Ddocdir=/usr/share/doc/systemd250

      ..

Значение опций мезона:

buildtype=release

Этот переключатель переопределяет тип сборки по умолчанию ( « отладка » ), который будет создавать неоптимизированные двоичные файлы.

Ddefaultdnssec=no

Этот переключатель отключает экспериментальную поддержку DNSSEC.

Dfirstboot=false

Этот переключатель предотвращает установку служб systemd, отвечающих за настройку системы в первый раз. Они бесполезны для LFS, потому что все делается вручную.

Dinstalltests=false

Этот переключатель предотвращает установку скомпилированных тестов.

Dldconfig=false

Этот переключатель предотвращает установку модуля systemd, который запускает ldconfig при загрузке, что бесполезно для дистрибутивов с исходным кодом, таких как LFS, и увеличивает время загрузки. Удалите его, если описанная функция желательна.

Dsysusers=false

Этот переключатель предотвращает установку служб systemd, отвечающих за настройку файлов /etc/groupи . /etc/passwdОба файла были созданы в предыдущей главе. Этот демон бесполезен в системе LFS, поскольку учетные записи пользователей создаются вручную.

Drpmmacrosdir=no

Этот переключатель отключает установку макросов RPM для использования с systemd, поскольку LFS не поддерживает RPM.

D{userdb,homed}=false

Удалите два демона, у которых есть зависимости, не соответствующие области действия LFS.

Dman=false

Предотвратите создание справочных страниц, чтобы избежать дополнительных зависимостей. Позже мы установим предварительно созданные справочные страницы для systemd из архива.

Dmode=release

Отключите некоторые функции, которые авторы восходящей ветки считают экспериментальными.

3. Скомпилируйте пакет:

ninja

4. Установите пакет:

ninja install

5. Установите справочные страницы:

tar xf ../../systemdmanpages250.tar.xz stripcomponents=1 C /usr/share/man

6. Удалить бесполезный каталог:

rm rf /usr/lib/pam.d

7. Создайте /etc/machineidфайл, необходимый для systemdjournald :

systemdmachineidsetup

8. Настройте базовую целевую структуру:

systemctl presetall

9. Содержимое systemd:

busctl Используется для самоанализа и мониторинга шины DBus.

coredumpctl Используется для извлечения дампов памяти из журнала systemd.

halt Обычно вызывает завершение работы с h параметром, за исключением случаев, когда уровень запуска уже равен 0, тогда он сообщает ядру остановить систему; он отмечает в файле /var/log/wtmp,

hostnamectl Используется для запроса и изменения имени хоста системы и связанных с ним настроек.

init Это первый процесс, который должен быть запущен, когда ядро ​​​​инициализировало оборудование, которое берет на себя процесс загрузки

     и запускает все процессы в соответствии с его файлами конфигурации. В этом случае он запускает systemd

journalctl Используется для запроса содержимого журнала systemd

kernelinstall Используется для добавления и удаления образов ядра и initramfs в /boot. В LFS это делается вручную

localectl Используется для запроса и изменения языкового стандарта системы и настроек раскладки клавиатуры.

loginctl Используется для самоанализа и контроля состояния systemd Login Manager.

machinectl Используется для самоанализа и контроля состояния виртуальной машины systemd и диспетчера регистрации контейнеров.

networkctl Используется для самоанализа и настройки состояния сетевых ссылок, настроенных systemdnetworkd.

oomctl Управляет демоном systemd Out Of Memory

portablectl Используется для подключения или отключения портативных сервисов от локальной системы.

poweroff Указывает ядру остановить систему и выключить компьютер (см. halt )

reboot Указывает ядру перезагрузить систему (см. halt )

resolvconf Регистрирует DNS-сервер и конфигурацию домена с помощью systemdresolved.

resolvectl Отправляет управляющие команды диспетчеру разрешения сетевых имен или разрешает доменные имена, адреса IPv4 и IPv6, записи DNS и службы.

runlevel Выводит предыдущий и текущий уровень выполнения, как отмечено в последней записи уровня выполнения в /run/utmp

shutdown Выводит систему из строя безопасным и надежным способом, сигнализируя обо всех процессах и уведомляя всех вошедших в систему пользователей.

systemctl Используется для самоанализа и контроля состояния системы systemd и диспетчера служб.

systemdanalyze Используется для определения производительности запуска системы при текущей загрузке, а также для выявления проблемных модулей systemd.

systemdaskpassword Используется для запроса системного пароля или парольной фразы от пользователя с помощью вопросительного сообщения, указанного в командной строке.

systemdcat Используется для соединения выходных данных STDOUT и STDERR процесса с журналом systemd.

systemdcgls Рекурсивно показывает содержимое выбранной иерархии группы управления Linux в виде дерева

systemdcgtop Отображает верхние группы управления в локальной иерархии групп управления Linux, упорядоченные по загрузке процессора, памяти и дискового ввода-вывода.

systemdcreds Отображает и обрабатывает учетные данные

systemddelta Используется для идентификации и сравнения файлов конфигурации, /etcкоторые переопределяют аналоги по умолчанию в/usr

systemddetectvirt Определяет, работает ли система в виртуальной среде, и соответствующим образом настраивает udev.

systemddissect Используется для проверки образов дисков ОС

systemdescape Используется для экранирования строк для включения в имена модулей systemd.

systemdhwdb Используется для управления аппаратной базой данных (hwdb)

systemdid128 Генерирует и печатает строки id128

systemdinhibit Используется для выполнения программы с включенной блокировкой отключения, перехода в спящий режим или бездействия,

                что предотвращает выполнение таких действий, как отключение системы, до завершения процесса.

systemdmachineidsetup Используется инструментами системного установщика для инициализации идентификатора машины,

                         сохраненного во /etc/machineid время установки, со случайно сгенерированным идентификатором.

systemdmount Используется для временного монтирования или автоматического монтирования дисков.

systemdnotify Используется сценариями демона для уведомления системы инициализации об изменении состояния.

systemdnspawn Используется для запуска команды или ОС в облегченном контейнере пространства имен.

systemdpath Используется для запроса системных и пользовательских путей

systemdrepart Используется для увеличения и добавления разделов в таблицу разделов, когда systemd используется в образе ОС (например, в контейнере).

systemdresolve Используется для разрешения доменных имен, адресов IPV4 и IPv6, записей ресурсов DNS и служб.

systemdrun Используется для создания и запуска временного модуля .service или .scope и запуска в нем указанной команды. Это полезно для проверки модулей systemd.

systemdsocketactivate Используется для прослушивания сокет-устройств и запуска процесса при успешном подключении к сокету.

systemdsysext Активирует образы расширения системы

systemdtmpfiles Создает, удаляет и очищает нестабильные и временные файлы и каталоги на основе формата файла конфигурации и местоположения, указанных в tmpfiles.d каталогах .

systemdumount Размонтирует точки монтирования

systemdttyaskpasswordagent Используется для отображения и/или обработки ожидающих запросов пароля systemd.

telinit Сообщает init , на какой уровень запуска перейти

timedatectl Используется для запроса и изменения системных часов и их настроек.

udevadm Является общим инструментом администрирования udev, который управляет демоном udevd, предоставляет информацию из базы данных оборудования Udev,

        отслеживает ueevents, ожидает завершения ueevents, тестирует конфигурацию udev и запускает uevents для данного устройства.

libsystemd Является основной служебной библиотекой systemd.

libudev Является библиотекой для доступа к информации об устройстве Udev.

117. (8.72.) D-Bus-1.12.20

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

!!! DBus это система шины сообщений, простой способ взаимодействия приложений друг с другом.

!!! DBus предоставляет как системного демона (для таких событий, как «добавление нового аппаратного устройства» или «изменение очереди печати»),

!!! так и демона сеанса входа в систему для каждого пользователя (для общих потребностей IPC среди пользовательских приложений).

!!! Кроме того, шина сообщений построена на основе общей схемы передачи сообщений один к одному,

!!! которая может использоваться любыми двумя приложениями для прямого взаимодействия (без использования демона шины сообщений).

0. Подготовьте DBus к компиляции:

./configure prefix=/usr                        

            sysconfdir=/etc                    

            localstatedir=/var                

            disablestatic                    

            disabledoxygendocs              

            disablexmldocs                  

            docdir=/usr/share/doc/dbus1.12.20

            withconsoleauthdir=/run/console

            withsystempidfile=/run/dbus/pid

            withsystemsocket=/run/dbus/system_bus_socket

Значение параметров настройки:

withconsoleauthdir=/run/console

Это указывает расположение каталога авторизации ConsoleKit.

withsystempidfile=/run/dbus/pid а также—withsystemsocket=/run/dbus/system_bus_socket

Они задают расположение файла PID и сокета системной шины в /run, а не в устаревшем /var/run.

1. Скомпилируйте пакет:

make

2. Установите пакет:

make install

3. Создайте символическую ссылку, чтобы DBus и systemd могли использовать один и тот же machineid файл:

ln sfv /etc/machineid /var/lib/dbus

4. Содержимое:

dbuscleanupsockets используется для удаления оставшихся сокетов в каталоге

dbusdaemon  Демон шины сообщений DBus

dbuslaunch Запускает dbusdaemon из сценария оболочки

dbusmonitor Отслеживает сообщения, проходящие через шину сообщений DBus.

dbusrunsession Запускает экземпляр сеансовой шины dbusdaemon из сценария оболочки и запускает указанную программу в этом сеансе.

dbussend Отправляет сообщение на шину сообщений DBus

dbustesttool Инструмент, помогающий пакетам тестировать DBus

dbusupdateactivationenvironment Обновляет переменные среды, которые будут установлены для сеансовых служб DBus .

dbusuuidgen Генерирует универсальный уникальный идентификатор

libdbus1 Содержит функции API, используемые для связи с шиной сообщений DBus.

118. (8.73.) Man-DB-2.10.1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

!!! https://www.linuxfromscratch.org/lfs/downloads/stable-systemd/LFS-BOOK-11.1-NOCHUNKS.html#ch-tools-binutils-pass1

0. Подготовьте ManDB к компиляции:

./configure prefix=/usr                        

            docdir=/usr/share/doc/mandb2.10.1

            sysconfdir=/etc                    

            disablesetuid                      

            enablecacheowner=bin              

            withbrowser=/usr/bin/lynx          

            withvgrind=/usr/bin/vgrind        

            withgrap=/usr/bin/grap

Значение параметров настройки:

disablesetuid

Это отключает создание программы man с идентификатором user man.

enablecacheowner=bin

Это делает общесистемные файлы кэша принадлежащими пользователю bin.

with...

Эти три параметра используются для установки некоторых программ по умолчанию. lynx это текстовый веб-браузер (инструкции по установке см. в BLFS),

vgrind преобразует исходные тексты программ во входные данные Groff, а grap полезен для набора графиков в документах Groff. vgrind

и grap _ программы обычно не нужны для просмотра справочных страниц.

Они не являются частью LFS или BLFS, но вы сможете установить их самостоятельно после завершения работы с LFS, если захотите.

1. Скомпилируйте пакет:

make

2. Чтобы проверить результаты, введите:

make check

3. Установите пакет:

make install

4. Пакет содержит:

accessdb Создает дамп содержимого базы данных whatis в удобочитаемой форме .

apropos  Выполняет поиск в базе данных whatis и отображает краткие описания системных команд, содержащих заданную строку.

catman Создает или обновляет предварительно отформатированные страницы руководства

lexgrog Отображает сводную информацию в одну строку о данной странице руководства

man Форматирует и отображает запрошенную страницу руководства

manrecode Преобразует справочные страницы в другую кодировку

mandb Создает или обновляет базу данных whatis

manpath Отображает содержимое $MANPATH или (если $MANPATH не задан) подходящий путь поиска на основе настроек в man.conf и среды пользователя.

whatis Ищет в базе данных whatis и отображает краткие описания системных команд, которые содержат заданное ключевое слово в виде отдельного слова.

libman Содержит поддержку во время выполнения для человека

libmandb Содержит поддержку во время выполнения для человека

119. (8.74.) Procps-ng-3.3.17

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

!!! Пакет Procpsng содержит программы для мониторинга процессов.

0. Подготовьте procpsng для компиляции:

./configure prefix=/usr                            

            docdir=/usr/share/doc/procpsng3.3.17

            disablestatic                        

            disablekill                          

            withsystemd

Значение опции конфигурации:

disablekill

Этот переключатель отключает сборку команды kill , которая будет установлена ​​пакетом Utillinux.

1. Скомпилируйте пакет:

make

2. Чтобы запустить набор тестов, запустите:

make check

Известно, что пять тестов, связанных с pkill, не прошли из-за проблемы с тестами, которые не были обновлены.

3. Установите пакет:

make install

4. Пакет содержит:

free Сообщает объем свободной и используемой памяти (как физической, так и памяти подкачки) в системе.

pgrep Ищет процессы на основе их имени и других атрибутов

pidof Сообщает PID заданных программ

pkill Сигналы обрабатываются на основе их имени и других атрибутов

pmap Сообщает карту памяти данного процесса

ps Список текущих запущенных процессов

pwait Ожидает завершения процесса перед выполнением.

pwdx Сообщает текущий рабочий каталог процесса

slabtop Отображает подробную информацию о кэш-памяти ядра в режиме реального времени.

sysctl Изменяет параметры ядра во время выполнения

tload Выводит график текущей средней загрузки системы

top Отображает список процессов, наиболее интенсивно использующих ЦП; он обеспечивает постоянный просмотр активности процессора в режиме реального времени

uptime Сообщает, как долго работает система, сколько пользователей вошли в систему и средние значения загрузки системы.

vmstat Сообщает статистику виртуальной памяти, предоставляя информацию о процессах, памяти, подкачке, блочном вводе/выводе (IO), прерываниях и активности ЦП.

w Показывает, какие пользователи в настоящее время вошли в систему, где и с какого момента

watch Повторно запускает данную команду, отображая первый экран, полный ее вывода; это позволяет пользователю наблюдать за изменением вывода с течением времени

libprocps Содержит функции, используемые большинством программ в этом пакете.

120. (8.75.) Util-linux-2.37.4

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

!!! Пакет Utillinux содержит различные утилиты. Среди них утилиты для работы с файловыми системами, консолями, разделами и сообщениями.

0. Подготовьте Utillinux к компиляции:

./configure ADJTIME_PATH=/var/lib/hwclock/adjtime  

            bindir=/usr/bin    

            libdir=/usr/lib    

            sbindir=/usr/sbin  

            docdir=/usr/share/doc/utillinux2.37.4

            disablechfnchsh  

            disablelogin      

            disablenologin    

            disablesu        

            disablesetpriv    

            disablerunuser    

            disablepylibmount

            disablestatic    

            withoutpython

Параметры disable и without предотвращают появление предупреждений о сборке компонентов, для которых требуются пакеты, отсутствующие в LFS,

или которые несовместимы с программами, установленными другими пакетами.

1. Скомпилируйте пакет:

make

2. Установите пакет:

make install

3. Пакет содержит:

addpart Сообщает ядру Linux о новых разделах

agetty Открывает порт tty, запрашивает имя для входа, а затем вызывает программу входа в систему.

blkdiscard Отбрасывает сектора на устройстве

blkid Утилита командной строки для поиска и печати атрибутов блочного устройства.

blkzone Запускает команду зоны на заданном блочном устройстве

blockdev Позволяет пользователям вызывать ioctl блочного устройства из командной строки.

cal Отображает простой календарь

cfdisk Манипулирует таблицей разделов данного устройства

chcpu Изменяет состояние процессоров

chmem Настраивает память

choom Отображает и настраивает счет OOMkiller

chrt Манипулирует атрибутами процесса в реальном времени

col Отфильтровывает обратные переводы строки

colcrt Фильтрует вывод nroff для терминалов, у которых отсутствуют некоторые возможности, такие как зачеркивание и полустрочки.

colrm Отфильтровывает заданные столбцы

column Форматирует данный файл в несколько столбцов

ctrlaltdel Устанавливает функцию комбинации клавиш Ctrl+Alt+Del на аппаратный или программный сброс.

delpart Запрашивает ядро ​​Linux удалить раздел

dmesg Сбрасывает загрузочные сообщения ядра

eject Извлекает съемный носитель

fallocate Предварительно выделяет место для файла

fdisk Манипулирует таблицей разделов данного устройства

fincore Подсчитывает страницы содержимого файла в ядре

findfs Находит файловую систему по метке или универсальному уникальному идентификатору (UUID).

findmnt Является интерфейсом командной строки к библиотеке libmount для работы с файлами mountinfo, fstab и mtab.

flock Получает блокировку файла, а затем выполняет команду с удерживаемой блокировкой

fsck Используется для проверки и, при необходимости, восстановления файловых систем.

fsck.cramfs Выполняет проверку целостности файловой системы Cramfs на данном устройстве.

fsck.minix Выполняет проверку целостности файловой системы Minix на данном устройстве.

fsfreeze Является очень простой оболочкой для операций драйвера ядра FIFREEZE/FITHAW ioctl.

fstrim Отбрасывает неиспользуемые блоки в смонтированной файловой системе.

getopt Разбирает параметры в заданной командной строке

hexdump Создает дамп данного файла в шестнадцатеричном или другом заданном формате.

hwclock Считывает или устанавливает аппаратные часы системы, также называемые часами реального времени (RTC) или часами базовой системы ввода-вывода (BIOS).

i386 Символическая ссылка на setarch

ionice Получает или задает класс планирования ввода-вывода и приоритет для программы.

ipcmk Создает различные ресурсы IPC

ipcrm Удаляет указанный ресурс межпроцессного взаимодействия (IPC).

ipcs Предоставляет информацию о состоянии IPC

irqtop Отображает информацию счетчика прерываний ядра в top(1)представлении стилей.

isosize Сообщает размер файловой системы iso9660

kill Посылает сигналы процессам

last Показывает, какие пользователи в последний раз входили (и выходили), выполняя поиск в /var/log/wtmpфайле; он также показывает загрузку системы, завершение работы и изменения уровня выполнения.

lastb Показывает неудачные попытки входа в систему /var/log/btmp

ldattach Прикрепляет линейную дисциплину к последовательной линии

linux32 Символическая ссылка на setarch

linux64 Символическая ссылка на setarch

logger Заносит данное сообщение в системный журнал

look Отображает строки, начинающиеся с заданной строки

losetup Настраивает и управляет петлевыми устройствами

lsblk Выводит информацию обо всех или выбранных блочных устройствах в древовидном формате.

lscpu Выводит информацию об архитектуре ЦП

lsipc Выводит информацию о средствах IPC, которые в настоящее время используются в системе.

lsirq Отображает информацию счетчика прерываний ядра

lslocks Список локальных блокировок системы

lslogins Выводит информацию о пользователях, группах и системных учетных записях.

lsmem Перечисляет диапазоны доступной памяти с их онлайн-статусом

lsns Списки пространств имен

mcookie Генерирует волшебные куки (128-битные случайные шестнадцатеричные числа) для xauth

mesg Определяет, могут ли другие пользователи отправлять сообщения на терминал текущего пользователя.

mkfs Создает файловую систему на устройстве (обычно это раздел жесткого диска).

mkfs.bfs Создает файловую систему bfs Santa Cruz Operations (SCO).

mkfs.cramfs Создает файловую систему cramfs

mkfs.minix Создает файловую систему Minix

mkswap Инициализирует данное устройство или файл для использования в качестве области подкачки.

more Фильтр для листания текста по одному экрану за раз

mount Прикрепляет файловую систему на данном устройстве к указанному каталогу в дереве файловой системы.

mountpoint Проверяет, является ли каталог точкой монтирования

namei Показывает символические ссылки в заданных путях

nsenter Запускает программу с пространствами имен других процессов

partx Сообщает ядру о наличии и нумерации разделов на диске

pivot_root Делает данную файловую систему новой корневой файловой системой текущего процесса

prlimit Получить и установить лимиты ресурсов процесса

readprofile Читает информацию о профилировании ядра

rename Переименовывает данные файлы, заменяя данную строку другой

renice Изменяет приоритет запущенных процессов

resizepart Запрашивает ядро ​​Linux изменить размер раздела

rev Переворачивает строки данного файла

rkfill Инструмент для включения и отключения беспроводных устройств

rtcwake Используется для перехода системы в спящий режим до указанного времени пробуждения.

script Делает машинопись сеанса терминала

scriptlive Повторно запустите машинописные тексты сеанса, используя информацию о времени

scriptreplay Воспроизведение машинописных текстов с использованием информации о времени

setarch Изменяет сообщаемую архитектуру в новой программной среде и устанавливает личные флаги

setsid Запускает данную программу в новом сеансе

setterm Устанавливает атрибуты терминала

sfdisk Манипулятор таблицы разделов диска

sulogin Позволяет root авторизоваться; обычно он вызывается init , когда система переходит в однопользовательский режим .

swaplabel Позволяет изменить UUID и метку области подкачки

swapoff Отключает устройства и файлы для подкачки

swapon Включает устройства и файлы для пейджинга и обмена и перечисляет устройства и файлы, используемые в настоящее время.

switch_root Переключается на другую файловую систему в качестве корня дерева монтирования

taskset Получает или устанавливает привязку процессора к процессу.

uclampset Управление атрибутами ограничения использования системы или процесса

ul Фильтр для перевода символов подчеркивания в escape-последовательности, указывающие подчеркивание для используемого терминала.

umount Отключает файловую систему от дерева файлов системы.

uname26 Символическая ссылка на setarch

unshare Запускает программу с некоторыми пространствами имен, не разделенными с родительским

utmpdump Отображает содержимое данного файла входа в систему в более удобном для пользователя формате.

uuidd Демон, используемый библиотекой UUID для создания UUID на основе времени безопасным и гарантированно уникальным способом.

uuidgen Создает новые UUID. Каждый новый UUID можно разумно считать уникальным среди всех UUID, созданных в локальной системе и в других системах в прошлом и будущем.

uuidparse Утилита для разбора уникальных идентификаторов

wall Отображает содержимое файла или, по умолчанию, его стандартный ввод на терминалах всех вошедших в систему пользователей.

wdctl Показывает статус аппаратного сторожевого таймера

whereis Сообщает расположение двоичного файла, исходного кода и справочной страницы для данной команды.

wipefs Стирает подпись файловой системы с устройства

x86_64 Символическая ссылка на setarch

zramctl Программа для настройки и управления устройствами zram (сжатый RAM-диск).

libblkid Содержит подпрограммы для идентификации устройства и извлечения токена.

libfdisk Содержит подпрограммы для управления таблицами разделов.

libmount Содержит подпрограммы для монтирования и размонтирования блочных устройств.

libsmartcols Содержит подпрограммы для облегчения вывода на экран в табличной форме.

libuuid Содержит подпрограммы для генерации уникальных идентификаторов для объектов, которые могут быть доступны за пределами локальной системы.

120. (8.76.) E2fsprogs-1.46.5

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

!!! Пакет e2fsprogs содержит утилиты для работы с ext2 файловой системой.

!!! Он также поддерживает файловые системы c  журналированием ext3 и ext4

0. Документация e2fsprogs рекомендует собирать пакет в подкаталоге исходного дерева:

mkdir v build

cd       build

1. Подготовьте e2fsprogs к компиляции:

../configure prefix=/usr          

             sysconfdir=/etc      

             enableelfshlibs    

             disablelibblkid      

             disablelibuuid      

             disableuuidd        

             disablefsck

Значение параметров настройки:

enableelfshlibs

Это создает общие библиотеки, которые используют некоторые программы в этом пакете.

disable-*

Это предотвращает сборку и установку e2fsprogs libuuidи libblkidбиблиотек, uuiddдемона и оболочки fsck , поскольку utillinux устанавливает более свежие версии.

2. Скомпилируйте пакет:

make

3. Для запуска тестов введите:

make check

Известно, что один тест, u_direct_io, не работает на некоторых системах.

3. Установите пакет:

make install

4. Удалите бесполезные статические библиотеки:

rm fv /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a

5. Этот пакет устанавливает сжатый .info файл, но не обновляет общесистемный dir файл.

Разархивируйте этот файл, а затем обновите системный dirфайл, используя следующие команды:

gunzip v /usr/share/info/libext2fs.info.gz

installinfo dirfile=/usr/share/info/dir /usr/share/info/libext2fs.info

6. При желании создайте и установите дополнительную документацию, выполнив следующие команды:

makeinfo o      doc/com_err.info ../lib/et/com_err.texinfo

install v m644 doc/com_err.info /usr/share/info

installinfo dirfile=/usr/share/info/dir /usr/share/info/com_err.info

7. Пакет содержит:

badblocks Ищет устройство (обычно раздел диска) на наличие поврежденных блоков.

chattr Изменяет атрибуты файлов в ext2файловой системе; он также изменяет ext3файловые системы, журналируемую версию ext2файловых систем

compile_et Компилятор таблицы ошибок; он преобразует таблицу имен кодов ошибок и сообщений в исходный файл C, подходящий для использования с com_errбиблиотекой .

debugfs Отладчик файловой системы; его можно использовать для проверки и изменения состояния ext2файловой системы .

dumpe2fs Выводит информацию о суперблоке и группе блоков для файловой системы, присутствующей на данном устройстве.

e2freefrag Сообщает информацию о фрагментации свободного пространства

e2fsck Используется для проверки и, при необходимости, восстановления ext2файловых систем и ext3файловых систем.

e2image Используется для сохранения важных ext2данных файловой системы в файл

e2label Отображает или изменяет метку файловой системы в ext2файловой системе, присутствующей на данном устройстве.

e2mmpstatus Проверяет состояние MMP файловой системы ext4

e2scrub Проверяет содержимое смонтированной файловой системы ext[234]

e2scrub_all Проверяет все смонтированные файловые системы ext[234] на наличие ошибок

e2undo Воспроизводит журнал отмены undo_log для файловой системы ext2/ext3/ext4, найденной на устройстве [Это можно использовать для отмены неудачной операции программой e2fsprogs.]

e4crypt Утилита шифрования файловой системы Ext4

e4defrag Онлайн-дефрагментатор для файловых систем ext4

filefrag Отчеты о том, насколько сильно может быть фрагментирован конкретный файл

fsck.ext2 По умолчанию проверяет ext2файловые системы и является жесткой ссылкой на e2fsck.

fsck.ext3 По умолчанию проверяет ext3файловые системы и является жесткой ссылкой на e2fsck.

fsck.ext4 По умолчанию проверяет ext4файловые системы и является жесткой ссылкой на e2fsck.

logsave Сохраняет вывод команды в файл журнала

lsattr Перечисляет атрибуты файлов во второй расширенной файловой системе.

mk_cmds Преобразует таблицу имен команд и справочных сообщений в исходный файл C, подходящий для использования с libssбиблиотекой подсистемы .

mke2fs Создает ext2или ext3 файловую систему на данном устройстве

mkfs.ext2 По умолчанию создает ext2 файловые системы и является жесткой ссылкой на mke2fs.

mkfs.ext3 По умолчанию создает ext3 файловые системы и является жесткой ссылкой на mke2fs.

mkfs.ext4 По умолчанию создает ext 4файловые системы и является жесткой ссылкой на mke2fs.

mklost+found Используется для создания lost+foundкаталога в ext2 файловой системе; он предварительно выделяет дисковые блоки в этот каталог, чтобы облегчить задачу e2fsck

resize2fs Может использоваться для увеличения или уменьшения ext2файловой системы .

tune2fs Настраивает настраиваемые параметры файловой системы в ext2файловой системе .

libcom_err Стандартная процедура отображения ошибок

libe2p Используется dumpe2fs , chattr и lsattr

libext2fs Содержит подпрограммы, позволяющие программам пользовательского уровня управлять ext2 файловой системой .

libss Используется отладчиками

Понравилась статья? Поделить с друзьями:
  • Error assignment to expression with array type си
  • Error bgi graphics not supported under windows
  • Error assignment to cast is illegal lvalue casts are not supported
  • Error bfloatpointrendertarget 1 is not set in skyrimprefs ini что делать
  • Error assignment of read only location