차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
linuxfromscratch:12.1:166-linux-6.7.4 [2024/04/16 16:04] – 만듦 - 바깥 편집 127.0.0.1linuxfromscratch:12.1:166-linux-6.7.4 [2024/06/15 13:44] (현재) baecy
줄 1: 줄 1:
 +^  Linux From Scratch - Version 12.1-systemd  ^^^
 +^  Chapter 10. Making the LFS System Bootable  ^^^
 +|[[.:165-creating_the_etcfstab_file|이전]]  |  [[.:10-Making the LFS System Bootable|위로]] / [[.:12.1|처음으로]]  |  [[.:167-Using GRUB to Set Up the Boot Process|다음]]|
 +
 +|/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 파일을 참조하세요.
 +<WRAP important center round 90%>
 +**중요** \\
 +Linux 커널을 처음 빌드하는 것은 LFS에서 가장 까다로운 작업 중 하나입니다. 올바른 설정은 대상 시스템의 특정 하드웨어와 사용자의 특정 요구 사항에 따라 달라집니다. 커널에 사용할 수 있는 구성 항목은 거의 12,000개에 달하지만 대부분의 컴퓨터에는 이 중 약 1/3만 필요합니다. LFS 편집자는 이 프로세스에 익숙하지 않은 사용자는 아래 절차를 매우 면밀히 따를 것을 권장합니다. 이 절차의 목적은 나중에 [[.:170-rebooting_the_system|11.3장 "시스템 재부팅하기"]]에서 재부팅할 때 명령줄에서 로그인할 수 있는 초기 시스템을 만드는 것입니다. 이 시점에서 최적화 및 사용자 설정은 목표가 아닙니다.
 +
 +커널 구성에 대한 일반적인 정보는 [[https://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt|간략하게 알아보는 커널]]을 참조하세요. 커널 구성 및 빌드에 대한 추가 정보는 [[https://anduin.linuxfromscratch.org/LFS/kernel-nutshell/|커널 개요]]에서 확인할 수 있습니다. 이러한 참조 자료는 다소 오래되었지만 여전히 프로세스에 대한 합리적인 개요를 제공합니다.
 +
 +다른 모든 방법이 실패하면 [[https://www.linuxfromscratch.org/mail.html|lfs-support]] 메일링 리스트에서 도움을 요청할 수 있습니다. 스팸을 방지하려면 메일링 리스트에 가입해야 한다는 점에 유의하세요.</WRAP>
 +다음 명령을 실행하여 컴파일을 준비합니다.
 +<code bash>make mrproper</code>
 +
 +이렇게 하면 커널 트리가 완전히 깨끗해집니다. 커널 팀은 각 커널 컴파일 전에 이 명령을 실행할 것을 권장합니다. 압축을 푼 후 소스 트리가 깨끗해졌다고 안심하지 마세요.
 +
 +커널 옵션을 구성하는 방법에는 여러 가지가 있습니다. 일반적으로 메뉴 중심 인터페이스를 통해 구성하는 경우가 많습니다.
 +<code bash>make menuconfig</code>\\
 +
 +** 선택적 make 환경 변수의 의미는 다음과 같습니다: **
 +  * **LANG=<host_LANG_value> LC_ALL=** \\이렇게 하면 호스트에서 사용되는 로캘 설정이 설정됩니다. 이는 UTF-8 리눅스 텍스트 콘솔에서 적절한 메뉴 구성 ncurses 인터페이스 선 그리기를 위해 필요할 수 있습니다. \\이 옵션을 사용하는 경우 <host_LANG_value>를 호스트의 $LANG 변수 값으로 바꿔야 합니다. 또는 호스트의 $LC_ALL 또는 $LC_CTYPE 값을 대신 사용할 수도 있습니다.
 +  * **make menuconfig** \\ ncurses 메뉴 기반 인터페이스를 시작합니다. 다른 (그래픽) 인터페이스의 경우 make help를 입력합니다.
 +<WRAP info center round 90%>
 +**참고**\\
 +커널 구성을 설정하기 위한 좋은 시작점은 make defconfig를 실행하는 것입니다. 이렇게 하면 현재 시스템 아키텍처를 고려한 기본 구성이 기본적인 상태로 설정됩니다.
 +
 +다음 기능을 활성화/비활성화/설정하지 않으면 시스템이 제대로 작동하지 않거나 아예 부팅되지 않을 수 있습니다.
 +<code>
 +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]</code>
 +    
 +64비트 시스템을 구축하는 경우 몇 가지 추가 기능을 활성화합니다. 메뉴 구성을 사용하는 경우 옵션은 종속성이 선택된 후에만 표시되므로 //CONFIG_PCI_MSI//, //CONFIG_IRQ_REMAP//, 마지막 //CONFIG_X86_X2APIC//의 순서로 활성화하세요.
 +<code>
 +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]</code>\\
 +
 +RAM이 4GB를 초과하는 하드웨어에서 실행되는 32비트 시스템을 구축하는 경우 커널이 최대 64GB의 물리적 RAM을 사용할 수 있도록 구성을 조정하세요.
 +<code>
 +Processor type and features --->
 +  High Memory Support --->
 +    (X) 64GB                                                        [HIGHMEM64G]</code>\\
 +    
 +LFS 시스템의 파티션이 NVME SSD에 있는 경우(즉, 파티션의 장치 노드가 /dev/sd*가 아닌 /dev/nvme*인 경우) NVME 지원을 활성화하지 않으면 LFS 시스템이 부팅되지 않습니다.
 +<code>
 +Device Drivers --->
 +  NVME Support --->
 +    <*> NVM Express block device                                  [BLK_DEV_NVME]</code></WRAP>
 +<WRAP info center round 90%>
 +**참고**
 +"IPv6 프로토콜"이 반드시 필요한 것은 아니지만, 시스템 개발자는 이를 적극 권장합니다.</WRAP>
 +
 +시스템 요구 사항에 따라 몇 가지 다른 옵션이 필요할 수 있습니다. BLFS 패키지에 필요한 옵션 목록은 [[https://www.linuxfromscratch.org/blfs/view/stable-systemd/longindex.html#kernel-config-index|BLFS 커널 설정]] 색인을 참조하세요.
 +
 +<WRAP info center round 90%>
 +*참고* \\
 +호스트 하드웨어가 UEFI를 사용 중이고 이를 통해 LFS 시스템을 부팅하려는 경우 호스트 배포판의 UEFI 부트로더를 사용하더라도 [[https://www.linuxfromscratch.org/blfs/view/stable-systemd/postlfs/grub-setup.html#uefi-kernel|BLFS 페이지]]에 따라 일부 커널 구성을 조정해야 합니다.</WRAP>
 +
 +**위의 구성 항목에 대한 근거는 다음과 같습니다:**
 +  * //Randomize the address of the kernel image (KASLR)//
 +    * 커널 이미지에 대해 ASLR을 활성화하여 커널의 민감한 데이터 또는 코드의 고정 주소를 기반으로 하는 일부 공격을 완화합니다.
 +  * //Compile the kernel with warnings as errors//
 +    * 컴파일러 및/또는 구성이 커널 개발자의 설정과 다른 경우 빌드 실패가 발생할 수 있습니다.
 +  * //Enable kernel headers through /sys/kernel/kheaders.tar.xz//
 +    * 이를 위해서는 커널 빌드에 ''cpio''가 필요합니다. ''cpio''는 LFS에서 설치되지 않습니다.
 +  * //Configure standard kernel features (expert users)//
 +    * 이렇게 하면 구성 인터페이스에 일부 옵션이 표시되지만 이러한 옵션을 변경하면 위험할 수 있습니다. 이 기능을 잘 모르는 경우 사용하지 마세요.
 +  * //Strong Stack Protector//
 +    * 커널에 SSP를 사용 설정합니다. GCC를 구성하는 //--enable-default-ssp//를 사용하여 전체 사용자 공간에 대해 활성화했지만 커널은 SSP에 대해 GCC 기본 설정을 사용하지 않습니다. 여기에서 명시적으로 활성화합니다.
 +  * //Support for uevent helper//
 +    * 이 옵션을 설정하면 Udev를 사용할 때 장치 관리할때 인터페이스를 설정 가능합니다.
 +  * Maintain a devtmpfs
 +    * 이 옵션을 선택하면 Udev가 실행되지 않아도 커널에 의해 채워지는 자동화된 디바이스 노드가 생성됩니다. 그런 다음 Udev가 이 위에서 실행되어 권한을 관리하고 심볼릭 링크를 추가합니다. 이 구성 항목은 Udev의 모든 사용자에게 필요합니다.
 +  * //Automount devtmpfs at /dev//
 +    * 초기화를 시작하기 직전에 루트 파일 시스템으로 전환할 때 장치의 커널 보기를 /dev에 마운트합니다.
 +  * //Enable legacy fbdev support for your modesetting driver// and //Framebuffer Console support//
 +    * 이는 DRI(직접 렌더링 인프라) 드라이버로 구동되는 GPU에서 Linux 콘솔을 표시하는 데 필요합니다. CONFIG_DRM(다이렉트 렌더링 관리자)이 활성화된 경우 이 두 옵션도 활성화해야 하며, 그렇지 않으면 DRI 드라이버가 로드된 후 빈 화면이 표시됩니다.
 +  * //Support x2apic//
 +    * x2APIC 모드에서 64비트 x86 프로세서의 인터럽트 컨트롤러 실행을 지원합니다. 64비트 x86 시스템에서 펌웨어로 x2APIC을 활성화할 수 있으며, 이 옵션을 활성화하지 않은 커널은 펌웨어로 x2APIC을 활성화하면 부팅 시 패닉에 빠집니다. 이 옵션은 효과가 없지만 펌웨어에 의해 x2APIC이 비활성화되어 있는 경우에도 아무런 해가 없습니다.
 +
 +또는 일부 상황에서는 ''make oldconfig''가 더 적합할 수 있습니다. 자세한 내용은 ''README'' 파일을 참조하세요.
 +
 +원하는 경우 커널 구성 파일인 .config를 호스트 시스템(사용 가능하다고 가정)에서 압축을 푼 리눅스-6.7.4 디렉터리로 복사하여 커널 구성을 건너뛸 수 있습니다. 그러나 이 옵션은 권장하지 않습니다. 모든 구성 메뉴를 탐색하고 커널 구성을 처음부터 새로 만드는 것이 더 나은 경우가 많습니다.
 +
 +커널 이미지와 모듈을 컴파일합니다.
 +<code>make</code>
 +
 +커널 모듈을 사용하는 경우 /etc/modprobe.d에서 모듈 구성이 필요할 수 있습니다. 모듈 및 커널 구성과 관련된 정보는 [[.:156-overview_of_device_and_module_handling|섹션 9.3, "장치 및 모듈 처리 개요"]]와 ''리눅스-6.7.4/Documentation'' 디렉터리의 커널 설명서에 나와 있습니다. 또한 [[https://man.archlinux.org/man/modprobe.d.5|modprobe.d(5)]]도 관심을 가질 수 있습니다.
 +
 +커널 구성에서 모듈 지원을 비활성화하지 않았다면 다음과 같이 모듈을 설치하세요.
 +<code>make modules_install</code>
 +
 +커널 컴파일이 완료되면 설치를 완료하기 위해 추가 단계가 필요합니다. 일부 파일을 ''/boot'' 디렉터리에 복사해야 합니다.
 +<WRAP center round important 90%>
 +**주의** \\
 +LFS 시스템에 별도의 /boot 파티션을 사용하기로 결정한 경우(호스트 배포판과 /boot 파티션을 공유할 수도 있음) 아래에 복사한 파일은 이 파티션으로 이동해야 합니다. 가장 쉬운 방법은 먼저 ''/etc/fstab''에 ''/boot'' 항목을 만든 다음(자세한 내용은 이전 섹션 참조), 루트 환경에서 루트 사용자로 다음 명령을 실행하는 것입니다.
 +<code>mount /boot</code>
 +장치 노드 경로는 마운트에서 ''/etc/fstab''에서 읽을 수 있으므로 명령에서 생략합니다.</WRAP>
 +
 +커널 이미지 경로는 사용 중인 플랫폼에 따라 다를 수 있습니다. 아래 파일 이름은 사용자의 취향에 맞게 변경할 수 있지만, 다음 섹션에서 설명하는 부팅 프로세스의 자동 설정과 호환되려면 파일 이름의 줄기는 vmlinuz여야 합니다. 다음 명령은 x86 아키텍처를 가정합니다.
 +<code bash>cp -iv arch/x86/boot/bzImage /boot/vmlinuz-6.7.4-lfs-12.1-systemd</code>
 +
 +''System.map''은 커널의 심볼 파일입니다. 이 파일은 커널 API의 모든 함수의 함수 진입점과 실행 중인 커널의 커널 데이터 구조 주소를 매핑합니다. 커널 문제를 조사할 때 리소스로 사용됩니다. 다음 명령을 실행하여 맵 파일을 설치합니다.
 +<code bash>cp -iv System.map /boot/System.map-6.7.4</code>
 +
 +위의 ''make menuconfig'' 단계에서 생성된 커널 구성 파일 ''.config''에는 방금 컴파일한 커널에 대한 모든 구성 선택 사항이 포함되어 있습니다. 나중에 참조할 수 있도록 이 파일을 보관해 두는 것이 좋습니다.
 +<code bash>cp -iv .config /boot/config-6.7.4</code>
 +
 +Linux 커널에 대한 설명서를 설치합니다.
 +<code bash>cp -r Documentation -T /usr/share/doc/linux-6.7.4</code>
 +
 +커널 소스 디렉터리의 파일을 루트가 소유하지 않았다는 점에 유의하세요. 패키지가 사용자 루트로 압축 해제될 때마다(chroot 내부에서 했던 것처럼) 파일은 패키지의 컴퓨터에서 무엇이든 사용자 및 그룹 ID를 갖습니다. 이는 일반적으로 설치 후 소스 트리가 제거되므로 다른 패키지를 설치할 때는 문제가 되지 않습니다. 하지만 Linux 소스 트리는 오랫동안 유지되는 경우가 많습니다. 이 때문에 패키저가 사용한 사용자 ID가 컴퓨터의 누군가에게 할당될 가능성이 있습니다. 그러면 해당 사용자가 커널 소스에 대한 쓰기 권한을 갖게 됩니다.
 +<WRAP info center round 90%>
 +**참고** \\
 +대부분의 경우 나중에 BLFS에서 설치될 패키지에 대해 커널 구성을 업데이트해야 합니다. 다른 패키지와 달리 새로 빌드된 커널을 설치한 후에는 커널 소스 트리를 제거할 필요가 없습니다.
 +
 +커널 소스 트리를 유지하려면 ''linux-6.7.4'' 디렉터리에서 ''chown -R 0:0''을 실행하여 모든 파일이 사용자 루트에 의해 소유되는지 확인합니다.</WRAP>
 +
 +<WRAP alert center round 90%>
 +**경고** \\
 +일부 커널 문서에서는 커널 소스 디렉터리를 가리키는 심볼릭 링크를 /usr/src/linux에서 만들 것을 권장합니다. 이는 2.6 시리즈 이전의 커널에만 해당되며 기본 LFS 시스템이 완료된 후 빌드하려는 패키지에 문제를 일으킬 수 있으므로 LFS 시스템에서 생성해서는 안 됩니다.</WRAP>
 +<WRAP alert center round 90%>
 +**경고** \\
 +시스템의 include 디렉토리(/usr/include)에 있는 헤더는 항상 Glibc가 컴파일된 헤더, 즉 섹션 5.4, "Linux-6.7.4 API 헤더"에 설치된 위생 처리된 헤더를 사용해야 합니다. 따라서 원시 커널 헤더나 다른 커널 위생 처리된 헤더로 대체해서는 안 됩니다.</WRAP>
 +
 +==== 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'' 파일을 새로 만듭니다.
 +<code bash>
 +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</code>
 +==== 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
 +=== 간략한 설명===
 +  * **config-6.7.4** \\커널에 대한 모든 구성 선택 사항을 포함합니다.
 +  * **vmlinuz-6.7.4-lfs-12.1-systemd** \\리눅스 시스템의 엔진. 컴퓨터를 켤 때 커널은 운영 체제에서 가장 먼저 로드되는 부분입니다. 커널은 컴퓨터 하드웨어의 모든 구성 요소를 감지하고 초기화한 다음 이러한 구성 요소를 소프트웨어에 파일 트리로 제공하고 단일 CPU를 여러 프로그램을 동시에 실행할 수 있는 멀티태스킹 머신으로 전환합니다.
 +  * **System.map-6.7.4** \\주소 및 기호 목록; 커널의 모든 함수와 데이터 구조의 진입점과 주소를 매핑합니다.
 +
 +
 +
 +
  
  • linuxfromscratch/12.1/166-linux-6.7.4.1713283475.txt.gz
  • 마지막으로 수정됨: 2024/04/16 16:04
  • 저자 127.0.0.1