Syslinux/ko
syslinux는 부트로더en 모음이 들어있는 꾸러미입니다. 이 꾸러미에는 (FAT 파일 시스템용) SYSLINUX, (ext2/3/4, btrfs, xfs 파일 시스템용) EXTLINUX, (네트워크 PXE 부팅용) PXELINUX, (CD/DVD 부트 로딩용) ISOLINUX가 들어 있습니다.
EFI 지원은 6.00 이상에 추가했습니다.[1]
설치
syslinux 꾸러미 설치는 시스템 프로그램에서 제공합니다만 꾸러미에 들어있는 다양한 부트로더는 설치하거나 활성화하지 않습니다.
USE 플래그
USE flags for sys-boot/syslinux SYSLINUX, PXELINUX, ISOLINUX, EXTLINUX and MEMDISK bootloaders
+bios
|
Enable BIOS support |
+uefi
|
Enable UEFI support |
secureboot
|
Automatically sign efi executables using user specified key |
Emerge
root #
emerge --ask sys-boot/syslinux
BIOS 시스템 설정
이 설정 절차는 BIOS 시스템용입니다. (U)EFI용은 EFI 시스템 설정 부분을 보십시오.
이 장의 나머지 부분은 부팅 분할 영역이 /dev/sda1(일반 위치)에 있다고 가정합니다. 이 경우가 아니라면 필요한 대로 위치를 바꾸었는지 확인하십시오.
EXTLINUX를 활용하려면 올바른 부트 섹터 이미지를 설치했는지 확인한 후 부트 로더를 분할 영역에 설치하십시오. 이 과정을 생략하면 EXTLINUX가 동작하지 않습니다. 이런식의 부트 섹터 설치는 SYSLINUX, PXELINUX, ISOLINUX 설치시 필요하지 않습니다.
부트 섹터 설정
MBR(MS-DOS) 설정
이 부분은 MBR(MS-DOS) 공간 분할 형식용 절차를 다룹니다. GPT 형식으로 설정하려면 이 부분을 건너뛰고 GPT 설정으로 이동하십시오.
우선 syslinux에서 제공하는 부트 섹터를 설치하십시오. 다음 명령을 사용하여 추가로 처리할 부분을 다루십시오. count=1
값을 주지 않으면 처음 440 바이트 부분이 아닌 전체 디스크를 덮어쓰기 할 수 있습니다:
root #
dd bs=440 conv=notrunc count=1 if=/usr/share/syslinux/mbr.bin of=/dev/sda
부팅 영역을 활성화 하십시오. Boot 열에 *
표시가 나타납니다:
root #
fdisk /dev/sda
Command (m for help): a Partition number (1-3): 1 Command (m for help): p ... Device Boot Start End Blocks Id System /dev/sda1 * 2048 133119 65536 83 Linux /dev/sda2 133120 4327423 2097152 82 Linux swap / Solaris /dev/sda3 4327424 1953525167 974598872 83 Linux Command (m for help): w
GPT 설정
이 절차는 GPT 분할 형식을 다루는 절차입니다 MBR(MS-DOS) 분할 형식을 다루려면 MBR(MS-DOS)을 다루는 부분으로 이동하십시오.
우선 syslinux에서 제공하는 부트 섹터를 설치하십시오. 다음 명령을 사용하여 특별히 다룰 부분을 처리하십시오. count=1
값을 주지 않으면 처음 440 바이트 부분이 아닌 전체 디스크를 덮어쓰기 할 수 있습니다:
root #
dd bs=440 conv=notrunc count=1 if=/usr/share/syslinux/gptmbr.bin of=/dev/sda
sys-apps/gptfdisk의 gdisk 유틸리티를 실행하고 /boot/extlinux를 넣은 분할 영역의 legacy BIOS bootable 속성을 활성화하십시오.
root #
gdisk /dev/sda
Command (? for help): x Expert command (? for help): a Partition number (1-3): 1 Known attributes are: 0: system partition 1: hide from EFI 2: legacy BIOS bootable 60: read-only 62: hidden 63: do not automount Attribute value is 0000000000000000. Set fields are: No fields set Toggle which attribute field (0-63, 64 or <Enter> to exit): 2 Have enabled the 'legacy BIOS bootable' attribute. Attribute value is 0000000000000004. Set fields are: 2 (legacy BIOS bootable) Toggle which attribute field (0-63, 64 or <Enter> to exit): Expert command (? for help): w
부트로더 설치
EXTLINUX 설치
/boot/extlinux에 필요한 파일을 설치하려면 extlinux 명령을 사용하십시오
root #
mkdir /boot/extlinux
root #
extlinux --install /boot/extlinux
root #
ln -snf . /boot/boot
"boot -> ." 심볼릭 링크는 있는 그대로 필요하진 않지만, 일관성을 위해서라면 /boot 디렉터리의 분할 영역과 동일한 분할 영역을 사용자가 선택하여 동일한 설정을 사용하여 심볼릭 링크를 유효하게 해야합니다.
syslinux 꾸러미에는 추가 기능을 활성화하는 다양한 모듈이있습니다. syslinux 버전 5부터는 일부 모듈이 다른 모듈과 의존성이 있어 어떤 사용 예와 관계 없이 기본 모듈은 무조건 복사하는 것이 좋습니다. 모든 의존 요소를 설치했는지 확인하려면 동적 링크 확인 을 살펴보십시오.
root #
cd /usr/share/syslinux
root #
cp menu.c32 memdisk libcom32.c32 libutil.c32 /boot/extlinux
ISOLINUX 설치
ISOLINUX를 설치하려면 CD 또는 DVD라고 간주하는 위치를 기본 디렉터리로 하여 모든 파일을 넣어야합니다. 기본 디렉터리에 isolinux 디렉터리를 만들고 syslinux 꾸러미에 있는 isolinux.bin 파일을 isolinux 폴더에 복사하십시오:
root #
mkdir isolinux
root #
cp /usr/share/syslinux/isolinux.bin isolinux/
아래 알려드리는 대로 isolinux.cfg 파일을 만드십시오.
다음, 기본 디렉터리에 kernel 디렉터리와 images 디렉터리를 만드십시오:
root #
mkdir kernel images
memdisk 바이너리를 kernel 디렉터리에 복사하십시오:
root #
cp /usr/share/syslinux/memdisk kernel/
mkisofs 명령을 사용하려면 app-cdr/cdrtools 꾸러미를 설치해야합니다. 이 꾸러미는 다음 명령을 실행하여 가져올 수 있습니다:
root #
emerge --ask app-cdr/cdrtools
설정을 만들고 나면, 다음과 같이 mkisofs 명령을 사용하여 최종 ISO 이미지를 만들 수 있습니다(여기서 ${BASEDIR}
를 앞서 사용한 명령의 기본 디렉터리로 바꾸십시오):
root #
mkisofs -o output.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ${BASEDIR}
boot.cat 파일은 자동으로 만듭니다.
PXELINUX 설치
PXELINUX는 TFTP 서버로 공유한 이미지를 사용하여 네트워크 부팅을 수행할 수 있습니다. 이 글은 TFTP 서버를 설치했고 TFTP 루트 디렉터리가 /var/lib/tftpboot에 있음을 가정합니다. 이 설치 과정에서는 PXELINUX 로더를 TFTP 부팅 디렉터리에 복사하고 설정 디렉터리를 만듭니다:
root #
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/pxelinux.0
root #
mkdir /var/lib/tftpboot/pxelinux.cfg
새 lpxelinux.0파일을 pxelinux.0 대신 복사할 때 HTTP로 커널과 램 디스크를 불러올 수 있으며 설정 파일에서 DNS 이름을 활용할 수 있습니다.
설정 디렉터리는 네트워크 부팅을 수행하는 다른 클라이언트의 설정을 저장하는데 사용합니다. 클라이언트가 부팅을 시도할 때 MAC 주고 또는 IP 주소를 사용하여 적당한 클라이언트 설정 파일을 찾습니다. 우선 MAC 주소를 찾고, 그 다음 16진수로 표현한 클라이언트 IP로 찾습니다. 그 다음 문자가 하나도 남지 않거나 설정 파일을 찾을 때까지 문자를 하나하나 빼냅니다. 일치하는 항목이 없다면 default 설정 파일을 사용합니다.
IP 주소의 16진수 표기 방식은 gethostip 명령으로 확인할 수 있습니다:
user $
gethostip -x 192.168.0.50
C0A80032
예제 설정 파일은 다음과 같이 일치할 순차 반복 문자열이 들어있습니다:
01-88-99-aa-bb-cc-dd
C0A80032
C0A8003
C0A800
C0A80
C0A8
C0A
C0
C
default
관리를 쉽게 하려면 호스트 이름으로 설정 파일을 만들고 IP 주소 방식으로 심볼릭 링크를 거십시오. 기본값을 다시 활성화하려면 간단하게 삭제하거나 심볼릭 링크의 이름을 바꾸십시오.
SYSLINUX 설치
SYSLINUX 부트로더를 (FAT) 파일 시스템에 설치하려면 syslinux 명령을 사용하십시오:
root #
syslinux --install /dev/sda1
EFI 시스템 설정
EFI는 syslinux 6.00부터 지원합니다.
EFI 시스템 공간 분할
EF
(MBR) 또는 EF00
(GPT) 형식의 분할 공간을 FAT32 파일 시스템과 함께 만드십시오 기존의 EFI 시스템 분할 공간이 있다면 이걸 활용할 수도 있습니다. 이 분할 공간을 /boot/efi/ 위치에 마운트하는 것이 좋습니다.
다음 과정은 EFI 모드에서 시스템을 부팅하며, EFI 시스템 분할 공간은 /dev/sda1에 위치한다고 가정합니다.
부트 로더 설치
EFI 시스템 분할 영역에서 syslinux 파일의 디렉터리를 만드십시오. 이 디렉터리에는 나중에 만들 설정 파일도 들어갑니다.
root #
mkdir -p /boot/efi/EFI/syslinux
syslinux.efi 파일과 ldlinux.e64 파일을 다른 .c32 파일과 함께 /usr/share/syslinux/efi64/ 디렉터리에서 syslinux 디렉터리로 복사하십시오. 예를 들면 다음과 같습니다:
root #
cd /usr/share/syslinux/efi64
root #
cp syslinux.efi ldlinux.e64 menu.c32 libcom32.c32 libutil.c32 /boot/efi/EFI/syslinux
EFI 모드로 부팅하지 않았다면, syslinux 파일을 /boot/efi/EFI/Boot 디렉터리로 대신 복사해야 하며 syslinux.efi 파일 이름을 bootx64.efi로 바꾸어야합니다. 이 경우 efibootmgr 유틸리티를 다루는 다음 부분을 건너뛰십시오.
syslinux를 EFI에 알리기
CONFIG_EFI_VARS
옵션을 커널에서 활성화했는지 확인하십시오. 모듈로 빌드했다면 메모리에 불러왔는지 확인하십시오. 이 과정은 modprobe 유틸리티로 처리할 수 있습니다. 모듈을 불러오고 나야 efibootmgr 프로그램으로 새 부팅 항목을 만들 수 있습니다:
root #
modprobe efivars
root #
efibootmgr -c -l '\EFI\syslinux\syslinux.efi' -L SYSLINUX -p 1
efibootmgr는 자동으로 EFI 부팅 순서를 최근 만든 항목부터 목록 상단에 배치하는 순서로 정렬합니다. 원하는 방식이 아니라면 부팅 순서를 -o
옵션으로 바꾸십시오.
efibootmgr 명령이 동작하려면, sys-boot/efibootmgr 꾸러미를 이머지해야합니다. 필요하다면 다음 명령을 실행하십시오:
root #
emerge --ask sys-boot/efibootmgr
설정
syslinux 설정 파일은 syslinux.cfg 입니다. 기존 설치와 호환성을 유지하기 위해 다음 예전 설정 파일도 지원합니다:
- EXTLINUX: extlinux.conf
- ISOLINUX: isolinux.cfg
그러나 설정 형식은 같습니다. 설정 파일은 syslinux를 설치한 디렉터리에 있어야합니다.
간단한 설정
이 과정을 통해 젠투 소형 LiveCD와 같이 간단한 "boot:" 프롬프트를 띄웁니다:
DEFAULT gentoo
LABEL gentoo
LINUX /boot/kernel-3.6.11-gentoo
메뉴 설정
다음 설정에서는 간단한 텍스트 메뉴 예제를 보여드립니다. vesamenu
모듈을 통해 처리할 수 있습니다. vesa
모듈이 호환 모듈이 아니라면 더 단순한 메뉴 모듈을 동작하게 할 수 있습니다. VESA 메뉴 모듈을 부트 파일 시스템 또는 EFI 시스템 분할 영역 에 복사하십시오. BIOS 시스템에서 다음 예제를 활용합니다:
root #
cp /usr/share/syslinux/vesamenu.c32 /boot/extlinux/
EFI 시스템에서 다음 파일을 활용합니다:
root #
cp /usr/share/syslinux/efi64/vesamenu.c32 /boot/efi/EFI/syslinux/
TIMEOUT 30
ONTIMEOUT gentoo
UI vesamenu.c32
MENU TITLE Boot
LABEL gentoo
MENU LABEL Gentoo Linux
LINUX /boot/kernel-3.6.11-gentoo
LABEL gentoo-old
MENU LABEL Gentoo Linux (previous kernel)
LINUX /boot/kernel-3.5.7-gentoo
KERNEL
매개 변수가 리눅스 커널 이미지 선택을 하지 못하게 하려면 LINUX
매개 변수를 대신 사용하십시오 KERNEL
매개 변수를 활용하며, 이미지 파일 이름이 .0으로 끝나면 extlinux에서 잘못 이해하며 PXE 부팅을 시도하고 엉망진창의 화면 상태에서 끝장이 납니다. 자세한 내용은 SYSLINUX 위키의 "KERNEL file" 섹션을 참고하십시오.설정 파일에서 절대 경로는 파일 시스템 루트에 대한 상대 경로가 되며, 비 절대 경로는 syslinux 설치 디렉터리에 대한 상대 경로가 됩니다.
커널 매개변수 전달
커널 매개 변수를 하드코딩하지 않고 커널 이미지에 initramfs를 내장하지 않았다면 부트로터에서 커널로 매개 변수를 통해 전달해야 합니다. 매개 변수를 전달하려면 APPEND
또는 INITRD
매개 변수를 활용하십시오:
DEFAULT gentoo
LABEL gentoo
LINUX /boot/kernel-3.6.11-gentoo
INITRD /boot/initramfs-3.6.11-gentoo
APPEND root=/dev/sda1
References to PARTUUID labels (not filesystem UUID) can be appended with the format
root=PARTUUID=xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx
.동적 링크 확인
syslinux-5.00부터 .c32는 동적 링크 방식을 활용합니다. 의존 요소를 설치했는지 확인하려면 syslinux 디렉터리로 이동한 후 ldd 명령을 활용하십시오:
root #
LD_LIBRARY_PATH=. ldd *.c32
.c32 모듈이 빠져있으면 디렉터리에 복사했는지 확인하십시오.
추가 참조
참고 자료
- ↑ Syslinux development team. Syslinux 6 Changelog, syslinux.org. Released on June 20th, 2013. Retrieved on March 27th, 2016.