목차

Linux From Scratch - Version 12.1-systemd
Chapter 10. Making the LFS System Bootable
이전 위로 / 처음으로 다음
/etc/fstab 파일 생성 GRUB를 사용한 부팅 설정

10.3. Linux-6.7.4

Linux 패키지에는 Linux 커널이 포함되어 있습니다.

대략적인 빌드 시간: 0.6 - 20.4 SBU(일반적으로 약 1.4 SBU)
필요한 디스크 공간: 1.8 - 10.6GB(일반적으로 약 2GB)


10.3.1. 커널 설치

커널을 빌드하려면 구성, 컴파일 및 설치의 몇 가지 단계가 필요합니다. 이 책에서 커널을 구성하는 방법에 대한 대체 방법은 커널 소스 트리의 README 파일을 참조하세요.

중요
Linux 커널을 처음 빌드하는 것은 LFS에서 가장 까다로운 작업 중 하나입니다. 올바른 설정은 대상 시스템의 특정 하드웨어와 사용자의 특정 요구 사항에 따라 달라집니다. 커널에 사용할 수 있는 구성 항목은 거의 12,000개에 달하지만 대부분의 컴퓨터에는 이 중 약 1/3만 필요합니다. LFS 편집자는 이 프로세스에 익숙하지 않은 사용자는 아래 절차를 매우 면밀히 따를 것을 권장합니다. 이 절차의 목적은 나중에 11.3장 "시스템 재부팅하기"에서 재부팅할 때 명령줄에서 로그인할 수 있는 초기 시스템을 만드는 것입니다. 이 시점에서 최적화 및 사용자 설정은 목표가 아닙니다.

커널 구성에 대한 일반적인 정보는 간략하게 알아보는 커널을 참조하세요. 커널 구성 및 빌드에 대한 추가 정보는 커널 개요에서 확인할 수 있습니다. 이러한 참조 자료는 다소 오래되었지만 여전히 프로세스에 대한 합리적인 개요를 제공합니다.

다른 모든 방법이 실패하면 lfs-support 메일링 리스트에서 도움을 요청할 수 있습니다. 스팸을 방지하려면 메일링 리스트에 가입해야 한다는 점에 유의하세요.

다음 명령을 실행하여 컴파일을 준비합니다.

make mrproper

이렇게 하면 커널 트리가 완전히 깨끗해집니다. 커널 팀은 각 커널 컴파일 전에 이 명령을 실행할 것을 권장합니다. 압축을 푼 후 소스 트리가 깨끗해졌다고 안심하지 마세요.

커널 옵션을 구성하는 방법에는 여러 가지가 있습니다. 일반적으로 메뉴 중심 인터페이스를 통해 구성하는 경우가 많습니다.

make menuconfig

선택적 make 환경 변수의 의미는 다음과 같습니다:

참고
커널 구성을 설정하기 위한 좋은 시작점은 make defconfig를 실행하는 것입니다. 이렇게 하면 현재 시스템 아키텍처를 고려한 기본 구성이 기본적인 상태로 설정됩니다.

다음 기능을 활성화/비활성화/설정하지 않으면 시스템이 제대로 작동하지 않거나 아예 부팅되지 않을 수 있습니다.

General setup --->
  [ ] Compile the kernel with warnings as errors                        [WERROR]
  [ ] Auditing support                                                   [AUDIT]
  CPU/Task time and stats accounting --->
    [*] Pressure stall information tracking                                [PSI]
    [ ]   Require boot parameter to enable pressure stall information tracking
                                                     ...  [PSI_DEFAULT_DISABLED]
  < > Enable kernel headers through /sys/kernel/kheaders.tar.xz      [IKHEADERS]
  [*] Control Group support --->                                       [CGROUPS]
    [*] Memory controller                                                [MEMCG]
  [ ] Configure standard kernel features (expert users) --->            [EXPERT]

Processor type and features --->
  [*] Build a relocatable kernel                                   [RELOCATABLE]
  [*]   Randomize the address of the kernel image (KASLR)       [RANDOMIZE_BASE]

General architecture-dependent options --->
  [*] Stack Protector buffer overflow detection                 [STACKPROTECTOR]
  [*]   Strong Stack Protector                           [STACKPROTECTOR_STRONG]

[*] Networking support --->                                                [NET]
  Networking options --->
    [*] TCP/IP networking                                                 [INET]
    <*>   The IPv6 protocol --->                                          [IPV6]

Device Drivers --->
  Generic Driver Options --->
    [ ] Support for uevent helper                                [UEVENT_HELPER]
    [*] Maintain a devtmpfs filesystem to mount at /dev               [DEVTMPFS]
    [*]   Automount devtmpfs at /dev, after the kernel mounted the rootfs
                                                           ...  [DEVTMPFS_MOUNT]
    Firmware loader --->
      < /*> Firmware loading facility                                [FW_LOADER]
      [ ]     Enable the firmware sysfs fallback mechanism
                                                    ...  [FW_LOADER_USER_HELPER]
  Firmware Drivers --->
    [*] Export DMI identification via sysfs to userspace                 [DMIID]
  Graphics support --->
    < /*/M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
                                                                      ...  [DRM]
    # If [DRM] is selected as * or M, this must be selected.
    [ /*]   Enable legacy fbdev support for your modesetting driver
                                                      ...  [DRM_FBDEV_EMULATION]
    Console display driver support --->
      # If [DRM] is selected as * or M, this must be selected.
      [ /*] Framebuffer Console support                    [FRAMEBUFFER_CONSOLE]

File systems --->
  [*] Inotify support for userspace                               [INOTIFY_USER]
  Pseudo filesystems --->
    [*] Tmpfs virtual memory file system support (former shm fs)         [TMPFS]
    [*]   Tmpfs POSIX Access Control Lists                     [TMPFS_POSIX_ACL]

64비트 시스템을 구축하는 경우 몇 가지 추가 기능을 활성화합니다. 메뉴 구성을 사용하는 경우 옵션은 종속성이 선택된 후에만 표시되므로 CONFIG_PCI_MSI, CONFIG_IRQ_REMAP, 마지막 CONFIG_X86_X2APIC의 순서로 활성화하세요.

Processor type and features --->
  [*] Support x2apic                                                [X86_X2APIC]

Device Drivers --->
  [*] PCI support --->                                                     [PCI]
    [*] Message Signaled Interrupts (MSI and MSI-X)                    [PCI_MSI]
  [*] IOMMU Hardware Support --->                                [IOMMU_SUPPORT]
    [*] Support for Interrupt Remapping                              [IRQ_REMAP]

RAM이 4GB를 초과하는 하드웨어에서 실행되는 32비트 시스템을 구축하는 경우 커널이 최대 64GB의 물리적 RAM을 사용할 수 있도록 구성을 조정하세요.

Processor type and features --->
  High Memory Support --->
    (X) 64GB                                                        [HIGHMEM64G]

LFS 시스템의 파티션이 NVME SSD에 있는 경우(즉, 파티션의 장치 노드가 /dev/sd*가 아닌 /dev/nvme*인 경우) NVME 지원을 활성화하지 않으면 LFS 시스템이 부팅되지 않습니다.

Device Drivers --->
  NVME Support --->
    <*> NVM Express block device                                  [BLK_DEV_NVME]

참고 “IPv6 프로토콜”이 반드시 필요한 것은 아니지만, 시스템 개발자는 이를 적극 권장합니다.

시스템 요구 사항에 따라 몇 가지 다른 옵션이 필요할 수 있습니다. BLFS 패키지에 필요한 옵션 목록은 BLFS 커널 설정 색인을 참조하세요.

*참고*
호스트 하드웨어가 UEFI를 사용 중이고 이를 통해 LFS 시스템을 부팅하려는 경우 호스트 배포판의 UEFI 부트로더를 사용하더라도 BLFS 페이지에 따라 일부 커널 구성을 조정해야 합니다.

위의 구성 항목에 대한 근거는 다음과 같습니다:

또는 일부 상황에서는 make oldconfig가 더 적합할 수 있습니다. 자세한 내용은 README 파일을 참조하세요.

원하는 경우 커널 구성 파일인 .config를 호스트 시스템(사용 가능하다고 가정)에서 압축을 푼 리눅스-6.7.4 디렉터리로 복사하여 커널 구성을 건너뛸 수 있습니다. 그러나 이 옵션은 권장하지 않습니다. 모든 구성 메뉴를 탐색하고 커널 구성을 처음부터 새로 만드는 것이 더 나은 경우가 많습니다.

커널 이미지와 모듈을 컴파일합니다.

make

커널 모듈을 사용하는 경우 /etc/modprobe.d에서 모듈 구성이 필요할 수 있습니다. 모듈 및 커널 구성과 관련된 정보는 섹션 9.3, "장치 및 모듈 처리 개요"리눅스-6.7.4/Documentation 디렉터리의 커널 설명서에 나와 있습니다. 또한 modprobe.d(5)도 관심을 가질 수 있습니다.

커널 구성에서 모듈 지원을 비활성화하지 않았다면 다음과 같이 모듈을 설치하세요.

make modules_install

커널 컴파일이 완료되면 설치를 완료하기 위해 추가 단계가 필요합니다. 일부 파일을 /boot 디렉터리에 복사해야 합니다.

주의
LFS 시스템에 별도의 /boot 파티션을 사용하기로 결정한 경우(호스트 배포판과 /boot 파티션을 공유할 수도 있음) 아래에 복사한 파일은 이 파티션으로 이동해야 합니다. 가장 쉬운 방법은 먼저 /etc/fstab/boot 항목을 만든 다음(자세한 내용은 이전 섹션 참조), 루트 환경에서 루트 사용자로 다음 명령을 실행하는 것입니다.

mount /boot
장치 노드 경로는 마운트에서 /etc/fstab에서 읽을 수 있으므로 명령에서 생략합니다.

커널 이미지 경로는 사용 중인 플랫폼에 따라 다를 수 있습니다. 아래 파일 이름은 사용자의 취향에 맞게 변경할 수 있지만, 다음 섹션에서 설명하는 부팅 프로세스의 자동 설정과 호환되려면 파일 이름의 줄기는 vmlinuz여야 합니다. 다음 명령은 x86 아키텍처를 가정합니다.

cp -iv arch/x86/boot/bzImage /boot/vmlinuz-6.7.4-lfs-12.1-systemd

System.map은 커널의 심볼 파일입니다. 이 파일은 커널 API의 모든 함수의 함수 진입점과 실행 중인 커널의 커널 데이터 구조 주소를 매핑합니다. 커널 문제를 조사할 때 리소스로 사용됩니다. 다음 명령을 실행하여 맵 파일을 설치합니다.

cp -iv System.map /boot/System.map-6.7.4

위의 make menuconfig 단계에서 생성된 커널 구성 파일 .config에는 방금 컴파일한 커널에 대한 모든 구성 선택 사항이 포함되어 있습니다. 나중에 참조할 수 있도록 이 파일을 보관해 두는 것이 좋습니다.

cp -iv .config /boot/config-6.7.4

Linux 커널에 대한 설명서를 설치합니다.

cp -r Documentation -T /usr/share/doc/linux-6.7.4

커널 소스 디렉터리의 파일을 루트가 소유하지 않았다는 점에 유의하세요. 패키지가 사용자 루트로 압축 해제될 때마다(chroot 내부에서 했던 것처럼) 파일은 패키지의 컴퓨터에서 무엇이든 사용자 및 그룹 ID를 갖습니다. 이는 일반적으로 설치 후 소스 트리가 제거되므로 다른 패키지를 설치할 때는 문제가 되지 않습니다. 하지만 Linux 소스 트리는 오랫동안 유지되는 경우가 많습니다. 이 때문에 패키저가 사용한 사용자 ID가 컴퓨터의 누군가에게 할당될 가능성이 있습니다. 그러면 해당 사용자가 커널 소스에 대한 쓰기 권한을 갖게 됩니다.

참고
대부분의 경우 나중에 BLFS에서 설치될 패키지에 대해 커널 구성을 업데이트해야 합니다. 다른 패키지와 달리 새로 빌드된 커널을 설치한 후에는 커널 소스 트리를 제거할 필요가 없습니다.

커널 소스 트리를 유지하려면 linux-6.7.4 디렉터리에서 chown -R 0:0을 실행하여 모든 파일이 사용자 루트에 의해 소유되는지 확인합니다.

경고
일부 커널 문서에서는 커널 소스 디렉터리를 가리키는 심볼릭 링크를 /usr/src/linux에서 만들 것을 권장합니다. 이는 2.6 시리즈 이전의 커널에만 해당되며 기본 LFS 시스템이 완료된 후 빌드하려는 패키지에 문제를 일으킬 수 있으므로 LFS 시스템에서 생성해서는 안 됩니다.

경고
시스템의 include 디렉토리(/usr/include)에 있는 헤더는 항상 Glibc가 컴파일된 헤더, 즉 섹션 5.4, “Linux-6.7.4 API 헤더”에 설치된 위생 처리된 헤더를 사용해야 합니다. 따라서 원시 커널 헤더나 다른 커널 위생 처리된 헤더로 대체해서는 안 됩니다.

10.3.2. Linux 모듈 로드 순서 구성하기

대부분의 경우 Linux 모듈은 자동으로 로드되지만 때로는 특정 지시가 필요한 경우가 있습니다. 모듈을 로드하는 프로그램인 modprobe 또는 insmod는 이를 위해 /etc/modprobe.d/usb.conf를 사용합니다. 이 파일을 생성해야 USB 드라이버(ehci_hcd, ohci_hcd 및 uhci_hcd)가 모듈로 빌드된 경우 올바른 순서로 로드되며, 부팅 시 경고가 출력되는 것을 방지하려면 ehci_hcd가 ohci_hcd 및 uhci_hcd보다 먼저 로드되어야 합니다.

다음을 실행하여 /etc/modprobe.d/usb.conf 파일을 새로 만듭니다.

install -v -m755 -d /etc/modprobe.d
cat > /etc/modprobe.d/usb.conf << "EOF"
# Begin/etc/modprobe.d/usb.conf

install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true

# End /etc/modprobe.d/usb.conf 
EOF

10.3.3. Linux 패키지 구성

설치된 파일: config-6.7.4, vmlinuz-6.7.4-lfs-12.1-systemd 및 System.map-6.7.4 설치된 디렉터리: /lib/modules, /usr/share/doc/linux-6.7.4

간략한 설명