chroot 환경에서 LFS 시스템 구축 과정을 다룬다.
Installing Basic System Software
Package install
하기 패키지를 설치한다
- Man-pages-6.03
- Iana-Etc-20230202
- Glibc-2.37
- Zlib-1.2.13
- Bzip2-1.0.8
- Xz-5.4.1
- Zstd-1.5.4
- File-5.44
- Readline-8.2
- M4-1.4.19
- Bc-6.2.4
- Flex-2.6.4
- Tcl-8.6.13
- Expect-5.45.4
- DejaGNU-1.6.3
- Binutils-2.40
- GMP-6.2.1
- MPFR-4.2.0
- MPC-1.3.1
- Attr-2.5.1
- Acl-2.3.1
- Libcap-2.67
- Shadow-4.13
- GCC-12.2.0
- Pkg-config-0.29.2
- Ncurses-6.4
- Sed-4.9
- Psmisc-23.6
- Gettext-0.21.1
- Bison-3.8.2
- Grep-3.8
- Bash-5.2.15
- Libtool-2.4.7
- GDBM-1.23
- Gperf-3.1
- Expat-2.5.0
- Inetutils-2.4
- Less-608
- Perl-5.36.0
- XML::Parser-2.46
- Intltool-0.51.0
- Autoconf-2.71
- Automake-1.16.5
- OpenSSL-3.0.8
- Kmod-30
- Libelf from Elfutils-0.188
- Libffi-3.4.4
- Python-3.11.2
- Wheel-0.38.4
- Ninja-1.11.1
- Meson-1.0.0
- Coreutils-9.1
- Check-0.15.2
- Diffutils-3.9
- Gawk-5.2.1
- Findutils-4.9.0
- Groff-1.22.4
- GRUB-2.06
- Gzip-1.12
- IPRoute2-6.1.0
- Kbd-2.5.1
- Libpipeline-1.5.7
- Make-4.4
- Patch-2.7.6
- Tar-1.34
- Texinfo-7.0.2
- Vim-9.0.1273
- MarkupSafe-2.1.2
- Jinja2-3.1.2
- Systemd-252
- D-Bus-1.14.6
- Man-DB-2.11.2
- Procps-ng-4.0.2
- Util-linux-2.38.1
- E2fsprogs-1.47.0
Cleaning up
- 패키지 설치를 위한 컴파일 시 디버그 옵션(-g)가 들어가 있으르모 디버그 심볼이 포함되어 있다. 이를 제거한다면 용량을 줄일 수 있다. 그러나 시스템 소프트웨어에서 디버깅을 하거나 valgrind 또는 GDB를 이용한 회기 테스트 시 디버그 심볼이 필요하다. 매뉴얼을 참조하여 디버깅 심볼을 스트리핑하여 백업하자
/tmp
폴더의 임시파일, libtool archive 파일, 이전 장에서 사용한 컴파일러 등은 필요없으니 매뉴얼을 참조하여 삭제
System Configuration
- General Network Configuration
systemd-networkd
에 의해 기본적인 네트워크 구성이 된다.- 네트워크 디바이스의 이름을 변경하고 싶거나 정적 IP/DHCP를 구성하고 싶을시
/etc/systemd/network
하위에 관련 설정 파일을 생성 - /etc/resolv.conf 파일을 이용해 인터넷 연결 시 필요한 DNS를 설정할 수 있다.
/etc/hosts
에 호스트 이름을 설정(요즘은 네임서버가 거의 있어서 필요업지만 /etc/hosts를 참조하여 네임서버를 ip로 변환)
- Managing Devices
- systemd를 설치했으므로 udev 데몬이 활성화 된다.(udev는 부팅시 sysfs, 내부적으로는 devtmpfs에 검색된 디바이스를 로딩한다.)
- devtmpfs 인스턴스가 /dev에 마운트 될때, 디바이스 노드가 이름,퍼미션,소유권을 변경하면서 생성, 그 뒤커널은 uevent를 udev데몬(udevd)에 날린다. /etc/udev/rules.d 등 에 기술된 rule을 기반으로 udevd는 디바이스 노드에대한 새로운 심볼릭링크를 생성
- 만약 중복된 디바이스의 이름을 변경하고 싶다면(ex, usb 카메라와 같은) /etc/udev/rules.d에 룰을 기술
- Time zone과 NTP time synq등을 설정한다.
- 리눅스 콘설 설정파일을 만들고 locale등을 설정한다.
- readline을 위한 /etc/inputrc를 만들고 /etc/shells 파일을 생성한다.
Making the LFS System Bootable
/etc/fstab
파일을 만들어 rootfs 와 swap파티션을 마운트 하자- 리눅스 커널을 빌드하여
/boot
폴더에 복사한다. - grub을 설치하고 grub.cfg파일을 만들어 부팅 메뉴를 작성한다.(메뉴얼에서는 백업방법이 나와있다. 왠만하면 따라서 하자)
The end
chroot환경에서 로그아웃 후 마운트된 디렉토리를 해제하고 리부팅하면 끝이다. 그런데 커널패닉이 발생하니….디버깅은 다음장에….