[LFS_prj] 04 Building the LFS system

How to build LFS 시스템

chroot 환경에서 LFS 시스템 구축 과정을 다룬다.

Installing Basic System Software

Package install

하기 패키지를 설치한다

  1. Man-pages-6.03
  2. Iana-Etc-20230202
  3. Glibc-2.37
  4. Zlib-1.2.13
  5. Bzip2-1.0.8
  6. Xz-5.4.1
  7. Zstd-1.5.4
  8. File-5.44
  9. Readline-8.2
  10. M4-1.4.19
  11. Bc-6.2.4
  12. Flex-2.6.4
  13. Tcl-8.6.13
  14. Expect-5.45.4
  15. DejaGNU-1.6.3
  16. Binutils-2.40
  17. GMP-6.2.1
  18. MPFR-4.2.0
  19. MPC-1.3.1
  20. Attr-2.5.1
  21. Acl-2.3.1
  22. Libcap-2.67
  23. Shadow-4.13
  24. GCC-12.2.0
  25. Pkg-config-0.29.2
  26. Ncurses-6.4
  27. Sed-4.9
  28. Psmisc-23.6
  29. Gettext-0.21.1
  30. Bison-3.8.2
  31. Grep-3.8
  32. Bash-5.2.15
  33. Libtool-2.4.7
  34. GDBM-1.23
  35. Gperf-3.1
  36. Expat-2.5.0
  37. Inetutils-2.4
  38. Less-608
  39. Perl-5.36.0
  40. XML::Parser-2.46
  41. Intltool-0.51.0
  42. Autoconf-2.71
  43. Automake-1.16.5
  44. OpenSSL-3.0.8
  45. Kmod-30
  46. Libelf from Elfutils-0.188
  47. Libffi-3.4.4
  48. Python-3.11.2
  49. Wheel-0.38.4
  50. Ninja-1.11.1
  51. Meson-1.0.0
  52. Coreutils-9.1
  53. Check-0.15.2
  54. Diffutils-3.9
  55. Gawk-5.2.1
  56. Findutils-4.9.0
  57. Groff-1.22.4
  58. GRUB-2.06
  59. Gzip-1.12
  60. IPRoute2-6.1.0
  61. Kbd-2.5.1
  62. Libpipeline-1.5.7
  63. Make-4.4
  64. Patch-2.7.6
  65. Tar-1.34
  66. Texinfo-7.0.2
  67. Vim-9.0.1273
  68. MarkupSafe-2.1.2
  69. Jinja2-3.1.2
  70. Systemd-252
  71. D-Bus-1.14.6
  72. Man-DB-2.11.2
  73. Procps-ng-4.0.2
  74. Util-linux-2.38.1
  75. E2fsprogs-1.47.0

Cleaning up

  1. 패키지 설치를 위한 컴파일 시 디버그 옵션(-g)가 들어가 있으르모 디버그 심볼이 포함되어 있다. 이를 제거한다면 용량을 줄일 수 있다. 그러나 시스템 소프트웨어에서 디버깅을 하거나 valgrind 또는 GDB를 이용한 회기 테스트 시 디버그 심볼이 필요하다. 매뉴얼을 참조하여 디버깅 심볼을 스트리핑하여 백업하자
  2. /tmp 폴더의 임시파일, libtool archive 파일, 이전 장에서 사용한 컴파일러 등은 필요없으니 매뉴얼을 참조하여 삭제

System Configuration

  1. General Network Configuration
    • systemd-networkd에 의해 기본적인 네트워크 구성이 된다.
    • 네트워크 디바이스의 이름을 변경하고 싶거나 정적 IP/DHCP를 구성하고 싶을시 /etc/systemd/network 하위에 관련 설정 파일을 생성
    • /etc/resolv.conf 파일을 이용해 인터넷 연결 시 필요한 DNS를 설정할 수 있다.
    • /etc/hosts에 호스트 이름을 설정(요즘은 네임서버가 거의 있어서 필요업지만 /etc/hosts를 참조하여 네임서버를 ip로 변환)
  2. Managing Devices
    • systemd를 설치했으므로 udev 데몬이 활성화 된다.(udev는 부팅시 sysfs, 내부적으로는 devtmpfs에 검색된 디바이스를 로딩한다.)
    • devtmpfs 인스턴스가 /dev에 마운트 될때, 디바이스 노드가 이름,퍼미션,소유권을 변경하면서 생성, 그 뒤커널은 uevent를 udev데몬(udevd)에 날린다. /etc/udev/rules.d 등 에 기술된 rule을 기반으로 udevd는 디바이스 노드에대한 새로운 심볼릭링크를 생성
    • 만약 중복된 디바이스의 이름을 변경하고 싶다면(ex, usb 카메라와 같은) /etc/udev/rules.d에 룰을 기술
  3. Time zone과 NTP time synq등을 설정한다.
  4. 리눅스 콘설 설정파일을 만들고 locale등을 설정한다.
  5. readline을 위한 /etc/inputrc를 만들고 /etc/shells 파일을 생성한다.

Making the LFS System Bootable

  1. /etc/fstab 파일을 만들어 rootfs 와 swap파티션을 마운트 하자
  2. 리눅스 커널을 빌드하여 /boot폴더에 복사한다.
  3. grub을 설치하고 grub.cfg파일을 만들어 부팅 메뉴를 작성한다.(메뉴얼에서는 백업방법이 나와있다. 왠만하면 따라서 하자)

The end

chroot환경에서 로그아웃 후 마운트된 디렉토리를 해제하고 리부팅하면 끝이다. 그런데 커널패닉이 발생하니….디버깅은 다음장에….

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy