티스토리 뷰

CentOS 강좌 PART 2. 10 PXE기반의 CentOS 서버 자동 구축 1편

[ PXE 개념 소개 및 구성요소 ]

PXE (Preboot Excution Environment) 기반의 운영체제 자동설치 방법은 앞서 강좌에서 소개한 다양한 서버 구축 기술을 적용하여 편리하게 운영체제를 설치할 수 있다.
서버들은 기본적으로 BIOS와 NIC (Network Interface Card : 랜카드)를 내장하고 있는데, 이 2개의 하드웨어 구성요소는 Network Boot/PXE 기술을 기본 지원한다.
설치가 다소 복잡해 보이지만, 동작방식을 이해하면 설치를 쉽게 할 수 있다.

우선 PXE 아래와 같은 구성요소들이 핵심으로 동작한다.

Server 구성요소
  • dhcpd - 설치할 클라이언트와 서버간의 동작은 DHCP 기반으로 모든 네트워크 정보를 주고 받기 때문에 반드시 필요하다. (구성 파일 - /etc/dhcp/dhcpd.conf)
  • TFTP - 설치에 필요한 서버 구성 내용과 PXE boot 이미지는 모두 TFTP로 동작시킨다. (구성파일 - /var/lib/tftpboot/pxelinux.cfg, PXE 이미지 - /var/lib/tftpboot/vmlinuz,initrd.img)
  • FTP / HTTP/ NFS - PXE 부트이후 실제 리눅스 이미지를 설치하려면 서버에서 서비스를 제공해 주어야 한다. 네트워크 서비스가 가능한 패키지가 있어야 한다. 웹 서비스, FTP, NFS 등 지원이 가능하다.
  • Kickstart - 실제 리눅스 설치시 환경에 대해서 미리 설정하면 해당 설정파일을 참조해서 설치한다. (구성파일 - 네트워크서비스 디렉토리에 포함 시킨다. centos에서는 root directory에 anaconda-ks.cfg라는 파일로 샘플 파일이 존재한다.)

Client 구성요소
  • BIOS/NIC - BIOS에서 PXE Boot가 우선되거나, 설정되어야 하고 NIC에서 PXE boot를 지원해야 한다. 거의 대부분 서버가 지원한다.


[PXE 동작 프로세스 소개]

PXE 기반의 설치 동작 방식은 크게 11단계 내외로 구성이 된다.


1. 먼저 클라이언트가 부팅하면서 DHCP Discover 패킷을 브로드캐스트로 전송한다. 이 역할은 NIC이 수행하고 이때 DHCP payload에 PXE Client Flag를 넣어서 보낸다.

2. 수신한 서버는 DHCP Offer로 응답하며, 클라이언트가 가져갈 IP 정보들에 대해 제공해 준다. 이때 일반 DHCP에 추가되어 이미 DHCP에 사전에 설정된 Next-Server IP (TFTP서버) 정보도 함께 제공된다. TFTP 서버는 DHCP가 함께 수행해도 되고 그렇지 않을 경우 Proxy 형태로도 제공할 수 있다. 

3.클라이언트는 서버로 부터 받은 정보를 가지고 다시 DHCP Request를 한다. 

4. DHCP 서버는 DHCP ACK를 통해서 최종적으로 IP 정보와 TFTP 정보를 함께 전송한다.

DHCP 에 대한 상세소개는 앞서 다뤘던 강좌를 참조하면 이해가 쉽다. (참조 강좌 0 "DHCP 서버 구축 강좌”)



5. 클라이언트는 DHCP 수신 정보 가운데, TFTP 서버 정보를 보고 NBP(Network Boot Program)으로 PXE 요청을 TFTP  서버에게 보낸다.

6. 서버는 요청을 받고, "pxelinux.0” 를 클라이언트에게 응답하고, 클라이언트는 해당 정보를 수신하면서 랜카드에서 메모리로 로딩을 시작한다.

7. 클라이언트는 이제 실제 구성정보를 서버에게 요청한다.

8. 서버는 PXE boot 이미지와 기타 구성정보가 포함된 “pxelinux.cfg” 내용을 클라이언트에게 전송하고 , 클라이언트는 해당 내용을 수신한다.

9. 클라이언트는 “pxelinux.cfg” 구성에 포함되어 있는 커널과 PXE 이미지 파일을 요청한다.

10. 서버는 클라이언트의 요청내용을 받고 , 서버 내부에 TFTP 지정 디렉토리에서 PXE 커널,부트 이미지를 클라이언트에게 로딩한다.

11. 클라이언트는 PXE 커널 및 부트 이미지를 로딩하고 , 추가적으로 정보에 포함된 리눅스 파일을 로딩하여 부팅을 시작한다.
이때 kickstart 정보를 통해서 설치시 필요한 정보 (언어, 시간, 패키지 선택, 패스워드 등등)에 대해 이 파일을 참조하고 설치를 완료한다.


1.PXE 구성을 위한 패키지 설치

먼저 서버에서 필요한 패키지들을 설치한다. 

1
2
3
4
[root@centrepo ~]# yum -y install tftp ttfp-server xinetd
[root@centrepo ~]# yum -y install vsftpd
[root@centrepo ~]# yum -y install dhcpd
[root@centrepo ~]# yum -y install syslinux
cs



2. 서버에서 필요한 보안 정책을 구성

서버에서 필요한 보안 정책을 구성해 준다.

1
2
3
4
5
6
7
8
9
10
[root@centrepo ~]# firewall-cmd --permanent --add-service=ftp
[root@centrepo ~]# firewall-cmd --permanent --add-service=tftp
[root@centrepo ~]# firewall-cmd --permanent --add-service=dhcp
[root@centrepo ~]# firewall-cmd --permanent --add-service=proxy-dhcp
[root@centrepo ~]# firewall-cmd --add-port=69/tcp --permanent
[root@centrepo ~]# firewall-cmd --add-port=69/udp --permanent
[root@centrepo ~]# firewall-cmd --add-port=4011/udp --permanent
 
[root@centrepo ~]#  firewall-cmd --reload
# 필요한 서비스들을 허용해 주고 , 방화벽을 reload 한다.
cs


3. 서비스 구동 및 환경설정

서버에서 필요한 서비스들을 구동하고 환경설정을 해 준다.

1
2
3
4
5
6
[root@centrepo ~]#  systemctl start dhcpd && systemctl enable dhcpd
[root@centrepo ~]# systemctl start tftp && systemctl enable tftp 
[root@centrepo ~]# systemctl start xinetd && systemctl enable xinetd 
[root@centrepo ~]# systemctl enable vsftpd && systemctl start vsftpd
 
# 설치된 서비스들을 구동하고, 재부팅시 사용할 수 있도록 설정한다.
cs


3. DHCP 설정

DHCP 구성은 일반적인 구성과 동일하지만 TFTP 구성을 위해 몇가지 추가해야 될 내용들이 있으므로 추가해서 넣어 준다. (Bootp, pxe, tftp server선언, 파일명 등…)
기타 설정은 기존 DHCP 구성과 동일하다. (DHCP 상세 내용은 "DHCP 서버 구축 강좌”를 다시 참조한다.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@centrepo whchoi]# vi /etc/dhcp/dhcpd.conf
 
# config for the PXE service
ddns-update-style interim;
ignore client-updates;
allow booting;
allow bootp;
allow unknown-clients;
# Top file for the Cisco DC LAB
option domain-name "cisko-dc.com";
option domain-name-servers ns1.cisko-dc.com, ns2.cisko-dc.com;
default-lease-time 360;
max-lease-time 720;
authoritative;
 
subnet 10.72.78.128 netmask 255.255.255.128 {
        option routers                  10.72.78.129;
        option subnet-mask              255.255.255.128;
        option domain-search            "cisko-dc.com";
        option domain-name-servers      10.72.86.7;
        range   10.72.78.131   10.72.78.140;
        next-server 10.72.78.253;
        filename "pxelinux.0";
}
 
# PXE service를 위해서 DHCP 서비스에 추가할 항목들이 있다. 해당 부분을 기입한다.
# 또한 next-server(TFTP server)와 파일 이미지를 작성한다.
cs



4. ftp 환경설정.

DHCP 서비스를 제공하기 위해서는 setseboo을 설정한다. ftp 서비스에서는 특별하게 설정할 것은 없으나, 상세한 설정을 원할 경우 "FTP 서버 구축 강좌"를 참조한다.

1
2
3
4
[root@centrepo whchoi]#setsebool -P allow_ftpd_full_access 1
 
# vsftpd에 대한 접속을 허가하기 위한 설정을 한다.
# 기타 추가설정은 여기에서는 필요없다.
cs



5. tftp 환경 설정.

리눅스 클라이언트가 DHCP를 사용하기 위해서는 network-script파일을 변경해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@centrepo whchoi]# vi /etc/xinetd.d/tftp
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
 
# tftp 서비스 환경설정이 기본 disable=yes 로 되어 있다. 해당 정보를 disable = no로 바꾸어 서비스를 활성화한다.
cs


6. Syslinux 파일 copy.

앞서 syslinux 부트로더 패키지를 설치했다. 해당 패키지들 중에 실제 TFTP 서비스를 제공할 때 필요한 파일을 tftp 폴더로 복제한다.

1
2
3
4
5
6
7
[root@centrepo whchoi]# cp -v /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
[root@centrepo whchoi]# cp -v /usr/share/syslinux/menu.c32 /var/lib/tftpboot
[root@centrepo whchoi]# cp -v /usr/share/syslinux/memdisk /var/lib/tftpboot
[root@centrepo whchoi]# cp -v /usr/share/syslinux/mboot.c32 /var/lib/tftpboot
[root@centrepo whchoi]# cp -v /usr/share/syslinux/chain.c32 /var/lib/tftpboot
 
# syslinux 설치 디렉토리에서 부트로드에 관련된 파일들을 tftpboot 디렉토리로 복제한다.
cs



7. PXE Menufile

PXE menufile을 구성한다. PXE menufile은 기본 생성되지 않으므로, 수동으로 생성해야 하며, tftp 디렉토리에 존재해야한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@centrepo whchoi]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@centrepo whchoi]# vi /var/lib/tftpboot/pxelinux.cfg/default
 
# 생성된 메뉴파일 구성에 하위에 default라는 파일이 생성되며, 여기에 구성파일을 넣어 준다.
# pxelinux.cfg에 직접 넣어도 관계 없다.
 
default menu.c32
prompt 0
timeout 30
MENU TITLE cisko-dc.com PXE Menu
LABEL centos7_x64
MENU LABEL CentOS 7_X64
KERNEL /networkboot/centos/vmlinuz
APPEND initrd=/networkboot/centos/initrd.img inst.repo=ftp://10.72.78.253/pub/centos ks=ftp://10.72.78.253/pub/centos/centos7.cfg
 
# KERNEL은 PXE Kernal이 위치하는 디렉토리이다. 별도로 패스를 지정하지 않으면, /etc/xinetd.d/tftp 의 환경설정에 표기된 Path를 가져가고, 예제에서 처럼 추가로 넣어주면 환경설정에 표기된 Path 뒤에 추가 생성하면 된다.
# APPEND는 kernel 로딩 이후 실제 PXE boot 이미지로 path 설정은 동일하다.
# inst.repo는 PXE boot이후 클라이언트가 실제로 사용할 리눅스 이미지 장소를 선언해준다.
# ks는 kickstart가 위치한 장소를 선언해준다.
cs



8. TFTP/FTP에 PXE Kernel, 이미지 및 리눅스 이미지 로딩

이제 실제 필요한 이미지들을 로딩하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@centrepo whchoi]# mkdir /media/iso
[root@centrepo whchoi]# mount /mnt/freenas/01.DC/OS_Hypervisor/LINUX/CentOS/CentOS-7-x86_64-Minimal-1810.iso /media/iso
 
# 클라이언트에 설치할 리눅스 ISO를 마운트 시킨다.
 
[root@centrepo whchoi]# mkdir /var/ftp/pub/centos
[root@centrepo whchoi]# cp -r /media/iso/* /var/ftp/pub/centos/
 
# 설치 이미지를 ftp public 디렉토리에 전체복사를 한다.
 
[root@centrepo whchoi]# ls -al /var/ftp/pub/centos/
합계 76
drwxr-xr-x.  8 root root   239  4월  5 00:32 .
drwxr-xr-x. 10 root root   120  4월  5 00:15 ..
-rw-r--r--.  1 root root    14  4월  5 00:15 CentOS_BuildTag
drwxr-xr-x.  3 root root    35  4월  5 00:15 EFI
-rw-r--r--.  1 root root   227  4월  5 00:15 EULA
-rw-r--r--.  1 root root 18009  4월  5 00:15 GPL
drwxr-xr-x.  2 root root    43  4월  5 00:15 LiveOS
drwxr-xr-x.  2 root root 24576  4월  5 00:15 Packages
-rw-r--r--.  1 root root  1690  4월  5 00:15 RPM-GPG-KEY-CentOS-7
-rw-r--r--.  1 root root  1690  4월  5 00:15 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--.  1 root root  2883  4월  5 00:15 TRANS.TBL
-rw-r--r--.  1 root root  1349  4월  5 00:32 centos7.cfg
drwxr-xr-x.  3 root root    57  4월  5 00:15 images
drwxr-xr-x.  2 root root   198  4월  5 00:15 isolinux
drwxr-xr-x.  2 root root  4096  4월  5 00:15 repodata
 
# 정상적으로 모든 리눅스 이미지가 복제된 것을 확인한다.
 
[root@centrepo whchoi]# mkdir /var/lib/tftpboot/networkboot/centos/
[root@centrepo whchoi]# cp /var/ftp/pub/centos/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/networkboot/centos/
 
# 해당 설치 이미지 파일들 중에 pxeboot에 필요한 pxe 이미지와 커널을 tftpboot 디렉토리로 복제해 준다.
# 앞서 /var/lib/tftpboot/pxelinux.cfg/default 에서 설정한 경로와 동일하면 된다.
cs



9. FTP 서비스 확인하기.

외부에서 FTP가 정상적으로 열리는 지 확인하면, PXE booting 까지는 모두 완료되었다.



이제 KickStart 구성을 통해서 설치를 완료해 보자 - " CentOS 강좌 PART 2. 10  PXE기반의 CentOS 서버 자동 구축 2편 "


공지사항