Linux From Scratch 9.0 (LFS) 사용자 고유의 Linux 배포를 사용자 정의하는 과정에서의주의 사항

0,이 기사는 동의했습니다

0.0. 참조 내용

LFS 매뉴얼 번역 해주신 " Linux China-LCTT-LFS Translation Team "에게     특별히 감사드립니다 . 그룹의 공식 웹 사이트는 https://lctt.github.io 이고 LFS 매뉴얼의 URL은 https : //입니다. lctt.github.io/LFS-BOOK .


    이 기사에 사용 된 LFS 매뉴얼은 팀에서 번역 한 Linux From Scratch (중국어 간체 버전) -9.0-SysV HTML 버전 입니다.


운영 프로세스에 대해서는 LFS 매뉴얼의 HTML 버전을 참조하는 것이 좋습니다. 그 이유 때문에이 기사의 섹션 1.1.을 참조하십시오 .

0.1. 입력 및 출력 스타일

    Linux 환경에서 입력 된 명령 및 출력 결과는 다음 스타일로 표현됩니다 (내용은 터미널 디스플레이와 일치 함).

lfs@lfs-VirtualBox:~$ echo "hello world"

0.2.주의 사항

    다음 스타일을 사용하여 표현하십시오.

다음은주의 사항입니다.

0.3. 호스트 구성

    이 기사에 사용 된 물리적 머신은 다음과 같습니다.

HP ZHAN 66 Pro 14 G3
CPU : i7-10510U
RAM : 16GB
운영 체제 : Windows10-64

    LFS 컴파일 환경 :

VirualBox-6.1 및 Ubuntu-Desktop-20.04 (서버 버전을 사용하는 경우 LFS 매뉴얼 8.3 장의 "mount --bind / boot / mnt / lfs / boot"명령을 실행하고 터미널 소프트웨어를 사용하여 연결하십시오. 순서를 실행하기 위해 ssh를 통해 호스트에)

    LFS 컴파일 환경의 소프트웨어 버전 :

bash, 버전 5.0.17 (1) -release
/ bin / sh- > / usr / bin / bash
Binutils : GNU ld (Ubuntu 용 GNU Binutils) 2.34
bison (GNU Bison) 3.5.1
/ usr / bin / yacc-> /usr/bin/bison.yacc
bzip2, 버전 1.0.8, 2019 년 7 월 13 일.
Coreutils : 8.30
diff (GNU diffutils) 3.7
find (GNU findutils) 4.7.0
GNU Awk 5.0.1, API : 2.0 (GNU MPFR 4.0.2, GNU MP 6.2.0)
/ usr / bin / awk- > / usr / bin / gawk
gcc (Ubuntu 9.3.0-17ubuntu1 ~ 20.04) 9.3.0
g ++ (Ubuntu 9.3.0-17ubuntu1 ~ 20.04)
9.3.0 (Ubuntu GLIBC 2.31-0ubuntu9.2) 2.31
grep (GNU grep) 3.4
gzip 1.10
Linux 버전 5.4.0-42-generic (buildd @ lgw01-amd64-038) (gcc 버전 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) # 46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020
m4 ( GNU M4) 1.4.18
GNU Make 4.2.1
GNU 패치 2.7.6
Perl 버전 = '5.30.0';
Python 3.8.5
sed (GNU sed) 4.7
tar (GNU tar) 1.30
texi2any (GNU texinfo) 6.7
xz (XZ Utils) 5.2.4
g ++ 컴파일 확인

1. LFS에 대한 약간의 이해

1.0. LFS 크로스 컴파일 환경 정보

    기본적으로 호스트 운영 체제에서는 다른 컴퓨터에서 사용할 수있는 다른 운영 체제, 즉 크로스 컴파일이 컴파일됩니다.


    문제는 컴파일 결과가 호스트의 환경 변수와 소프트웨어 버전의 영향을받지 않도록하여 컴파일 결과, 환경 변수 등의 링크가 호스트를 가리 키도록하여 컴파일 결과가 다른 기계에서 일반적으로 사용됩니다.


    이러한 상황 (환경 오염)을 피하기 위해 LFS 매뉴얼의 모든 작업은 실제로 세 단계로 나뉩니다.

  • 첫 번째 단계는 도구 세트를 신중하게 구성하는 것입니다 (심볼 링크, 컴파일 매개 변수 등을 엄격하게 설정).
  • 두 번째 단계는 환경 오염을 유발하지 않는이 도구 세트를 사용하여 기본적인 교차 컴파일 환경을 컴파일하는 것입니다.
  • 세 번째 단계 인 기본 크로스 컴파일 환경이 구축되면 LFS 매뉴얼은 chroot 명령을 통해이 환경으로 전환하고 환경에서 가장 기본적인 컴파일 도구를 사용하여 필요한 다른 소프트웨어를 컴파일하도록 안내합니다.

마지막 그림은 이해를 돕기위한 것입니다.
여기에 사진 설명 삽입

1.1. 작동 단계 정보

    LFS 매뉴얼의 쉘 코드 부분 (아래 그림 참조)은 복사하여 붙여넣고 실행하기 만하면됩니다. 그러나 참조하는 LFS 매뉴얼이 PDF 버전 인 경우 아래 코드 부분에 줄 바꿈이 없거나 (즉, Linux에서는 \ n, Windows에서는 \ r \ n) 일부 기호가 표시되지 않을 수 있습니다. 복사 됨 (예 : 일부 장의 영어 기호). 다시 말하지만, 운영 프로세스에 대해서는 LFS 매뉴얼의 html 버전을 참조하는 것이 좋습니다 .

여기에 사진 설명 삽입
    LFS 매뉴얼의 전체 운영 과정은 대략 다음 그림과 같이 이해됩니다.

여기에 사진 설명 삽입

2. LFS 매뉴얼에서주의해야 할 여러 부분

2.0. 소프트웨어 버전 확인 정보

    LFS 매뉴얼의 "2.2. 호스트 시스템 요구 사항"장에서 제공된 소프트웨어 버전 확인 스크립트가 ubuntu20.04에서 Binutils 버전을 올바르게 표시 할 수 없습니다. 아래 그림에서 스크립트 내용을 수정하고 노란색 형광펜을 삭제해야합니다. 그게 다입니다 (즉, 원본 삭제 | cut -d ""-f3- ). 그렇지 않으면 Binutils의 출력 버전은 " Binutils : GNU "이고 수정 후 출력 버전은 " Binutils : GNU ld (Ubuntu 용 GNU Binutils) 2.34 "입니다.

여기에 사진 설명 삽입

2.1. 파티션 정보

    LFS 매뉴얼의 "2.4. 새 파티션 만들기"장에서 LFS 시스템을 구축하기 위해 새 파티션을 사용하는 것이 좋으며 스왑 파티션, / boot 파티션 및 기타 파티션을 만드는 것이 좋습니다. 이렇게하지 않고 50GB 새 하드 디스크 / dev / sdb를 마운트하고 전체 주 파티션 / dev / sdb1을 만든 다음 ext4 형식으로 포맷합니다.

2.2. 패키지 컴파일 및 설치 정보

특히 강조

  • 소프트웨어 패키지를 컴파일하고 설치할 때 먼저 $ LFS / sources 디렉토리를 입력해야합니다.

  • 소프트웨어를 컴파일 할 때마다 먼저 tar 명령을 사용하여 대상 소프트웨어의 압축을 풉니 다 (xz 파일의 경우 tar -xf, bz2 파일의 경우 tar -jxf, gz 파일의 경우 tar -zxf).

  • 그런 다음 cd 명령을 사용하여 소프트웨어 소스 코드 디렉토리를 입력하십시오.

  • 그런 다음 LFS 프롬프트를 따릅니다.

  • 마지막으로, 작업이 완료된 후 cd… 또는 cd… /… 명령을 사용하여 $ LFS / sources 디렉토리로 돌아가서 rm -rf 명령을 사용하여 소프트웨어 소스 코드 디렉토리를 제거하십시오 (LFS 매뉴얼이 명시 적으로 유지해야 함).

  • clear 명령은 화면 표시를 지 웁니다 ( 그렇지 않으면 너무 많은 콘텐츠로 인해 터미널이 충돌 할 것으로 의심됩니다 ).

  • LFS 매뉴얼 페이지 넘기기

  • "6.7. Linux-5.2.8 API 헤더 파일"장부터 시작하여 cd 명령을 사용하여 작업을 위해 $ LFS / sources 디렉토리를 입력하십시오.

  • "6.80. 정리"장에서 다음 명령을 올바르게 실행할 수없는 것으로 알려져 있습니다.

logout

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

이 글은 ubuntu-desktop의 데스크탑 시스템 로그인을 사용하고 데스크탑 시스템에서 터미널을 열어 명령을 실행하기 때문입니다. 현재 명령을 실행하고있는 쉘은 로그인 쉘이 아니므로 오류가보고됩니다. 종료 실패로 인해 $ LFS 환경 변수 및 해당 디렉토리를 찾지 못합니다.

(lfs chroot) root:/usr/lib# logout
bash: logout: not login shell: use `exit'
(lfs chroot) root:/usr/lib# 
(lfs chroot) root:/usr/lib# chroot "$LFS" /usr/bin/env -i          \
>     HOME=/root TERM="$TERM"            \
>     PS1='(lfs chroot) \u:\w\$ '        \
>     PATH=/bin:/usr/bin:/sbin:/usr/sbin \
>     /bin/bash --login
chroot: cannot change root directory to '': No such file or directory

따라서 logout 명령 대신 "exit"명령을 사용해야합니다. 수정 된 명령은 다음과 같습니다.

exit

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

2.3. 리눅스 헤더 파일 설치 정보

    LFS 매뉴얼 원본의 "5.6. Linux-5.2.8 API 헤더 파일"및 "6.7. Linux-5.2.8 API 헤더 파일"장에서는 준비 단계가 설명되어 있지 않습니다 (그림 참조). 이하).

여기에 사진 설명 삽입


    사실 이것은이 기사의 섹션 2.2.와 동일합니다. 먼저 Linux 커널 소스 패키지의 압축을 풀고 입력 한 다음 실행합니다. 코드 쇼 :
lfs@lfs-VirtualBox:/mnt/lfs/sources$ tar -xf linux-5.2.8.tar.xz
lfs@lfs-VirtualBox:/mnt/lfs/sources$ cd linux-5.2.8

2.4. "7.7. Bash Shell 시작 파일"장의 로컬 문자 집합 지원 정보

지원되는 문자 세트를 보려면 다음 명령을 사용하십시오.

locale -a

이 문서는 zh_CN.gb18030 만 볼 수 있으므로 원본 LFS 설명서에서 / etc / profile을 만드는 스크립트는 다음과 같이 수정되었습니다.

cat > /etc/profile << "EOF"
# Begin /etc/profile

export LANG=zh_CN.gb18030

# End /etc/profile
EOF

2.5. "8.2. / etc / fstab 파일 생성"장에서 fstab 파일 생성

이 기사는 단일 파티션을 사용하기 때문에 섹션 8.2의 fstab 파일을 만드는 스크립트는 다음과 같이 수정되었습니다.

cat > /etc/fstab << "EOF"
# Begin /etc/fstab

# file system  mount-point  type     options             dump  fsck
#                                                              order

/dev/sdb1     /            <fff>    defaults            1     1
proc           /proc        proc     nosuid,noexec,nodev 0     0
sysfs          /sys         sysfs    nosuid,noexec,nodev 0     0
devpts         /dev/pts     devpts   gid=5,mode=620      0     0
tmpfs          /run         tmpfs    defaults            0     0
devtmpfs       /dev         devtmpfs mode=0755,nosuid    0     0

# End /etc/fstab
EOF

2.6. "8.3. Linux-5.2.8"장

/ sources 디렉토리에 linux-5.2.8.tar.xz 압축 패키지의 압축을 푼 다음 cd로 들어가서 먼저 make mrproper 명령을 실행 한 다음 make defconfig 명령을 실행 한 다음 make menuconfig 명령을 실행 한 다음 커널 구성을 완료하기위한 LFS의 권장 사항.

다음 명령 chroot 환경에서 실행 되지 않아야합니다.

mount --bind /boot /mnt/lfs/boot

원본 텍스트는 매우 명확하며 호스트에서 실행해야합니다. 이 기사의 호스트는 우분투 데스크탑 환경이며 터미널을 열어 실행합니다.


이 장에서 주목해야 할 또 다른 사항이 있습니다. 다음 명령은 수정할 필요가 없습니다 (X86_64 시스템을 사용하는 경우에도 수정할 필요가 없음).

cp -iv arch/x86/boot/bzImage /boot/vmlinuz-5.2.8-lfs-9.0

그 이유는 arch / x86_64 / boot / bzImage 파일이 실제로 링크이고 가리키는 경로가 ... / ... / x86 / boot / bzImage이기 때문입니다. 여기서 명령이 수정되면 아치를 가리 킵니다. / x86_64 디렉토리로 인해 후속 시작이 실패합니다.

2.7. "8.4. GRUB를 사용하여 부팅 프로세스 설정"장 부팅 설정

우선, grub-install / dev / sda 명령은이 기사에서 실행되지 않습니다.
둘째, 다음 명령을 실행하기 전에 /boot/grub/grub.cfg를 /boot/grub/grub.cfg.bak에 백업합니다.
마지막으로 LFS 설명서의 설명에 따라 (아래 그림 참조)
여기에 사진 설명 삽입

이 기사에서 사용 된 / dev / sdb1은 grub에서 (hd1,1)로 설정되어야하며 루트는 / dev / sdb1을 가리 킵니다.

/boot/grub/grub.cfg 파일을 생성하는 원본 스크립트는 다음과 같이 수정됩니다.

cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod ext2
set root=(hd1,1)

menuentry "GNU/Linux, Linux 5.2.8-lfs-9.0" {
        linux   /boot/vmlinuz-5.2.8-lfs-9.0 root=/dev/sdb1 ro
}
EOF

2.8 테스트 스위트의 실패에 대하여

2.8.1. "6.9. Glibc-2.30"장

    LFS 컴파일에 대해서는이 기사를 참조하십시오. LFS 매뉴얼 "6.9. Glibc-2.30"의 장에서 작동 할 때 LFS inet / tst-idna_name_classify 및 misc / tst-ttyname에 설명 된 알려진 테스트 실패 항목을 찾을 수 있으며 동시에 LFS 매뉴얼에서 설명되지 않은 테스트는 nptl / tst-mutex10 실패 합니다. 그러나 후속 실제 운영에서는 치명적 영향을 미치지 않았으며, 후유증을보기 위해 여기에서 제안한다.

특정 테스트 결과는 다음과 같이 출력됩니다.

UNSUPPORTED: elf/tst-audit10
UNSUPPORTED: elf/tst-avx512
UNSUPPORTED: elf/tst-ldconfig-bad-aux-cache
UNSUPPORTED: elf/tst-pldd
XPASS: elf/tst-protected1a
XPASS: elf/tst-protected1b
FAIL: inet/tst-idna_name_classify
UNSUPPORTED: math/test-double-libmvec-alias-avx512
UNSUPPORTED: math/test-double-libmvec-alias-avx512-main
UNSUPPORTED: math/test-double-libmvec-sincos-avx512
UNSUPPORTED: math/test-float-libmvec-alias-avx512
UNSUPPORTED: math/test-float-libmvec-alias-avx512-main
UNSUPPORTED: math/test-float-libmvec-sincosf-avx512
UNSUPPORTED: misc/tst-pkey
FAIL: misc/tst-ttyname
UNSUPPORTED: nptl/test-cond-printers
UNSUPPORTED: nptl/test-condattr-printers
UNSUPPORTED: nptl/test-mutex-printers
UNSUPPORTED: nptl/test-mutexattr-printers
UNSUPPORTED: nptl/test-rwlock-printers
UNSUPPORTED: nptl/test-rwlockattr-printers
FAIL: nptl/tst-mutex10
UNSUPPORTED: nss/tst-nss-db-endgrent
UNSUPPORTED: nss/tst-nss-db-endpwent
UNSUPPORTED: nss/tst-nss-files-hosts-long
UNSUPPORTED: nss/tst-nss-test3
UNSUPPORTED: resolv/tst-resolv-ai_idn
UNSUPPORTED: resolv/tst-resolv-ai_idn-latin1
Summary of test results:
      3 FAIL
   6070 PASS
     23 UNSUPPORTED
     17 XFAIL
      2 XPASS
make[1]: *** [Makefile:412: tests] Error 1
make[1]: Leaving directory '/sources/glibc-2.30'
make: *** [Makefile:9: check] Error 2

2.8.2. "6.21. GCC-9.2.0"장

LFS 매뉴얼 "6.21. GCC-9.2.0"은이 기사에서 6 개의 알려진 실패와 8 개의 실패를 설명하지만, 후속 검증에서 올바른 검증 결과를 얻었습니다. [요청 프로그램 인터프리터 : / lib64 / ld-linux- x86-64 .so.2], LFS 설명 및 기타 정보에 따르면 이러한 오류는 언어 환경, 시간 문제, CPU 명령 집합 문제 등으로 인해 발생할 수 있으므로 당분간이 문제를 조사하지 않을 것입니다. 또한이 장은 총 4 시간이 소요되므로 인내심을 가지십시오. 테스트 보고서는 다음과 같습니다.

(lfs chroot) root:/sources/gcc-9.2.0/build# ../contrib/test_summary
gawk: cmd. line:36: warning: regexp escape sequence `\=' is not a known regexp operator
cat <<'EOF' |
LAST_UPDATED: Obtained from SVN: tags/gcc_9_2_0_release revision 274275

Native configuration is x86_64-pc-linux-gnu

		=== g++ tests ===


Running target unix

		=== g++ Summary ===

# of expected passes		134787
# of expected failures		527
# of unsupported tests		5921
/sources/gcc-9.2.0/build/gcc/xg++  version 9.2.0 (GCC) 

		=== gcc tests ===


Running target unix
FAIL: gcc.target/i386/pr57193.c scan-assembler-times movdqa 2
FAIL: gcc.target/i386/pr90178.c scan-assembler-times xorl[\\\\t ]*\\\\%eax,[\\\\t ]*%eax 1

		=== gcc Summary ===

# of expected passes		139439
# of unexpected failures	2
# of expected failures		527
# of unsupported tests		2151
/sources/gcc-9.2.0/build/gcc/xgcc  version 9.2.0 (GCC) 

		=== libatomic tests ===


Running target unix

		=== libatomic Summary ===

# of expected passes		54
		=== libgomp tests ===


Running target unix

		=== libgomp Summary ===

# of expected passes		2316
# of expected failures		2
# of unsupported tests		210
		=== libitm tests ===


Running target unix

		=== libitm Summary ===

# of expected passes		42
# of expected failures		3
# of unsupported tests		1
		=== libstdc++ tests ===


Running target unix
FAIL: 22_locale/time_get/get_time/char/2.cc execution test
FAIL: 22_locale/time_get/get_time/char/wrapped_env.cc execution test
FAIL: 22_locale/time_get/get_time/char/wrapped_locale.cc execution test
FAIL: 22_locale/time_get/get_time/wchar_t/2.cc execution test
FAIL: 22_locale/time_get/get_time/wchar_t/wrapped_env.cc execution test
FAIL: 22_locale/time_get/get_time/wchar_t/wrapped_locale.cc execution test
FAIL: experimental/net/internet/resolver/ops/lookup.cc execution test
FAIL: experimental/net/internet/resolver/ops/reverse.cc execution test

		=== libstdc++ Summary ===

# of expected passes		12892
# of unexpected failures	8
# of expected failures		78
# of unsupported tests		380

Compiler version: 9.2.0 (GCC) 
Platform: x86_64-pc-linux-gnu
configure flags: --prefix=/usr --enable-languages=c,c++ --disable-multilib --disable-bootstrap --with-system-zlib
EOF
Mail -s "Results for 9.2.0 (GCC) testsuite on x86_64-pc-linux-gnu" [email protected] &&
mv /sources/gcc-9.2.0/build/./gcc/testsuite/g++/g++.sum /sources/gcc-9.2.0/build/./gcc/testsuite/g++/g++.sum.sent &&
mv /sources/gcc-9.2.0/build/./gcc/testsuite/gcc/gcc.sum /sources/gcc-9.2.0/build/./gcc/testsuite/gcc/gcc.sum.sent &&
mv /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libatomic/testsuite/libatomic.sum /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libatomic/testsuite/libatomic.sum.sent &&
mv /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libgomp/testsuite/libgomp.sum /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libgomp/testsuite/libgomp.sum.sent &&
mv /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libitm/testsuite/libitm.sum /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libitm/testsuite/libitm.sum.sent &&
mv /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libstdc++-v3/testsuite/libstdc++.sum /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libstdc++-v3/testsuite/libstdc++.sum.sent &&
mv /sources/gcc-9.2.0/build/./gcc/testsuite/g++/g++.log /sources/gcc-9.2.0/build/./gcc/testsuite/g++/g++.log.sent &&
mv /sources/gcc-9.2.0/build/./gcc/testsuite/gcc/gcc.log /sources/gcc-9.2.0/build/./gcc/testsuite/gcc/gcc.log.sent &&
mv /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libatomic/testsuite/libatomic.log /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libatomic/testsuite/libatomic.log.sent &&
mv /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libgomp/testsuite/libgomp.log /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libgomp/testsuite/libgomp.log.sent &&
mv /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libitm/testsuite/libitm.log /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libitm/testsuite/libitm.log.sent &&
mv /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libstdc++-v3/testsuite/libstdc++.log /sources/gcc-9.2.0/build/./x86_64-pc-linux-gnu/libstdc++-v3/testsuite/libstdc++.log.sent &&
true

검증 결과는 다음과 같습니다.

(lfs chroot) root:/sources/gcc-9.2.0/build# echo 'int main(){}' > dummy.c
(lfs chroot) root:/sources/gcc-9.2.0/build# cc dummy.c -v -Wl,--verbose &> dummy.log
(lfs chroot) root:/sources/gcc-9.2.0/build# readelf -l a.out | grep ': /lib'
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

3. 실제 운영 환경의 구성 및주의 사항

3.0. 가상 머신 운영 체제 설치

  • Oracle VitrualBox 설치
  • ubuntu20.04-desktop의 ISO 파일 다운로드
  • VXBOX는 새로운 가상 머신 ubuntu20.04, 메모리 설정 8GB, CPU 4 코어, 첫 번째 하드 디스크 10GB, 두 번째 하드 디스크 50GB를 추가합니다.
  • 설치할 영어 선택 ( 나중에 나타날 수있는 언어에 대한 모든 시스템 오류 방지 )
  • 최소한의 설치를 선택하십시오 ( 시스템 오류를 일으키는 불필요한 소프트웨어를 피하십시오 )
  • 10G 하드 디스크 (/ dev / sda)에 시스템 설치
  • 우분투 설치가 완료되었습니다
  • fdisk -l : 사용 가능한 하드 디스크보기 (50GB 하드 디스크는 / dev / sdb이며 현재 파일 시스템이 없음)
  • fdisk / dev / sdb를 사용하여 파티션을 만듭니다 (n을 입력하고 기본값까지 Enter 키를 누른 다음 완료 후 Enter 키를 눌러 저장하고 종료합니다)
  • mkfs.ext4 / dev / sdb1 형식 파티션
  • / mnt / lfs 디렉토리 생성
  • / etc / fstab 파일을 수정하고, 마운트 정보를 추가하고, 50G 하드 디스크 / dev / sdb1을 / mnt / lfs에 마운트합니다.
  • VXBOX 고급 기능을 설치하려면 gcc, make, perl 및 기타 필요한 종속 소프트웨어를 설치하십시오.
  • VXBOX 고급 기능을 설치 해야합니다. 가상 터미널을 사용할 때 알 수없는 다양한 상황이 발생할 수 있습니다.이 기사에서는 가상 머신에서 컴파일 프로세스를 직접 작동하여 재시작, tty 연결 끊김 및 기타 간섭을 방지합니다. 동시에 LFS 수동은 호스트의 물리적 열기에 있으며 VXBOX의 향상된 기능을 사용하여 물리적 호스트의 명령을 가상 머신의 터미널에 붙여 넣습니다 )
  • 물리적 기계 제어판-> 하드웨어 및 소리-> 전원 옵션-> 계획 설정 변경-> 전원 켜기-> 디스플레이를 끄지 않고 절전 모드로 전환하지 않음-> 고급 전원 설정 변경-> 전원 버튼 및 덮개-> 닫기 덮개 작동-> 전원 켜기-> 조치 없음-> 확인-> 변경 사항 저장
  • ubuntu 虚拟 机-> 설정-> 개인 정보-> 화면 잠금-> 빈 화면 지연-> 사용 안함
  • 컴파일을 일시적으로 중단해야하는 경우 현재 소프트웨어 패키지 컴파일 또는 설치 단계가 완료 될 때까지 기다렸다가 VXbox의 미러링 기능을 사용하고 먼저 현재 미러를 백업 한 다음 ubuntu virtual의 오른쪽 상단 모서리에있는 닫기 버튼을 클릭하십시오. 팝업 확인 페이지에서 다시 시작으로 인해 발생할 수있는 오류 위험을 방지하기 위해 기능 일시 중지를 선택합니다.

3.0. 가상 머신 백업

다음 장이 완료된 후 vxbox의 스냅 샷 기능을 사용하여 현재 컴파일 환경을 백업하는 것이 좋습니다.

  • "2.2. 호스트 시스템 요구 사항"장의 요구 사항을 통과 한 후
  • "5.10. GCC-9.2.0-Second Pass"장 완료 후
  • "5.36. 소유자 변경"장이 완료된 후
  • "6.21. GCC-9.2.0"장 완료 후
  • "6.77. Eudev-3.2.8"장이 완료된 후
  • "7.9. / etc / shells 파일 만들기"장을 완료 한 후에는 여기에서 백업해야합니다. 후속 GRUB 구성이 한 번에 올바르게 구성되지 않을 수 있기 때문입니다.

4. LFS 운영 프로세스 기록

LFS 매뉴얼에서 CTRL + C
를 우분투 환경으로 전환하고 CTRL + V
를 실행하면 결과는 다음과 같습니다.
여기에 사진 설명 삽입
여기에 사진 설명 삽입

5. 포스트 스크립트

몇 가지 사소한 문제가있을 수 있습니다. 예를 들어 가상 머신에 이중 네트워크 카드가있는 경우 교차 컴파일 중에이 문제를 잊어 버려 나중에 조정해야합니다.
네티즌들이 운영시 LFS의 원래 설명에 의문이 생기면 함께 공부하고 공부할 수있는 메시지 나 개인 메시지를 남길 수 있습니다.
또한이 LFS 사용자 지정 릴리스의 전체 빌드 프로세스는 참조 용으로 약 12 ​​시간입니다.

추천

출처blog.csdn.net/crazy_rays/article/details/112647592