-
LINUX PXE서버구축을 통한 OS 설치하는 방법System of Infra/Linux System 2022. 7. 6. 00:00반응형
LINUX PXE서버 구축을 통한 OS 설치하는 방법
★PXE서버 설명
사전 부팅 실행 환경 또는 간단히 PXE는 네트워크 인터페이스를 통해 컴퓨터를 부팅할 수 있게 해주는 환경이다.
★테스트 환경
192.168.111.100 = DHCP 서버, TFTP 서버, FTP 서버, syslinux 서버 역할
192.168.100.120 ~ 192.168.100.199 = PXE서버를 통해 원격으로 OS 설치가 될 Client[root@localhost /]# dnf -y install syslinux dhcp-server tftp-server vsftpd CentOS-8 - AppStream 1.2 kB/s | 4.3 kB 00:03 CentOS-8 - Base 2.2 kB/s | 3.9 kB 00:01 CentOS-8 - PowerTools 2.4 kB/s | 4.3 kB 00:01 CentOS-8 - Plus 1.7 kB/s | 3.0 kB 00:01 CentOS-8 - Extras 599 B/s | 1.5 kB 00:02 종속성이 해결되었습니다. ======================================================================================================== 꾸러미 아키텍처 버전 리포지토리 크기 ======================================================================================================== Installing: tftp-server x86_64 5.2-24.el8 AppStream 50 k vsftpd x86_64 3.0.3-28.el8 AppStream 180 k dhcp-server x86_64 12:4.3.6-30.el8 BaseOS 529 k syslinux x86_64 6.04-1.el8 BaseOS 576 k 종속성 설치: syslinux-nonlinux noarch 6.04-1.el8 BaseOS 551 k 거래 요약 ======================================================================================================== 설치 5 꾸러미 총 다운로드 크기 : 1.8 M 설치 크기 : 4.2 M 패키지 다운로드중: (1/5): vsftpd-3.0.3-28.el8.x86_64.rpm 75 kB/s | 180 kB 00:02 (2/5): tftp-server-5.2-24.el8.x86_64.rpm 20 kB/s | 50 kB 00:02 (3/5): dhcp-server-4.3.6-30.el8.x86_64.rpm 179 kB/s | 529 kB 00:02 (4/5): syslinux-6.04-1.el8.x86_64.rpm 602 kB/s | 576 kB 00:00 (5/5): syslinux-nonlinux-6.04-1.el8.noarch.rpm 554 kB/s | 551 kB 00:00 -------------------------------------------------------------------------------------------------------- 합계 529 kB/s | 1.8 MB 00:03 ...(생략) 설치됨: tftp-server-5.2-24.el8.x86_64 vsftpd-3.0.3-28.el8.x86_64 dhcp-server-12:4.3.6-30.el8.x86_64 syslinux-6.04-1.el8.x86_64 syslinux-nonlinux-6.04-1.el8.noarch 완료되었습니다!
▶ 192.168.111.100 서버에 PXE 서버의 역할을 수행하기 위해서 다음과 같은 패키지를 설치하도록 합니다.
★설치 패키지 리스트
tftp-server-5.2-24.el8.x86_64
vsftpd-3.0.3-28.el8.x86_64
dhcp-server-12:4.3.6-30.el8.x86_64
syslinux-6.04-1.el8.x86_64
syslinux-nonlinux-6.04-1.el8.noarch[root@localhost /]# systemctl status firewalld | grep -i Active Active: active (running) since Tue 2022-07-05 20:59:12 KST; 3min 9s ago [root@localhost /]# systemctl stop firewalld [root@localhost /]# systemctl status firewalld | grep -i Active Active: inactive (dead) since Tue 2022-07-05 21:02:31 KST; 58s ago
▶ 테스트를 위해서 방화벽 정책을 disable 시켜주도록 합니다. PXE 서버를 통한 OS 설치의 경우 초기 세팅으로 서버 간의 통신만 된다면 방화벽 정책을 모두 disable 시켜주도록 하고, 운영 중인 서버에 설치를 시도 시 해당 서비스 포트에 맞는 포트를 추가해야 합니다.
★방화벽 운영시 설정 포트
TFTP : 69번 포트
VSFTP : 20,21번 포트
DHCP : 67번 포트(Server, Relay Agent), 68번 포트(Client)[root@localhost /]# vi /etc/dhcp/dhcpd.conf # # DHCP Server Configuration file. # see /usr/share/doc/dhcp-server/dhcpd.conf.example # see dhcpd.conf(5) man page # subnet 192.168.111.0 netmask 255.255.255.0 { option routers 192.168.111.2; --> 라우팅 테이블에서 해당 아이피를 사용 option subnet-mask 255.255.255.0; --> 서브넷 마스크 C클래스 사용 range dynamic-bootp 192.168.111.120 192.168.111.199; --> Client 서버의 IP대역 범위 option domain-name-servers 192.168.111.2; --> 도메인 네임서버 아이피 = 라우팅 테이블과 동일 allow booting; --> 부팅 allow bootp; --> 부팅이미지 next-server 192.168.111.100; --> PXE서버 아이피 filename "pxelinux.0"; --> 설치될 파일 }
▶ PXE서버가 DHCP 역할을 수행하기 위해서 /etc/dhcp/dhcpd.conf 파일에 해당 내용을 추가합니다.
[root@localhost vsftpd]# vi vsftpd.conf # Example config file /etc/vsftpd/vsftpd.conf # # The default compiled in settings are fairly paranoid. This sample file # loosens things up a bit, to make the ftp daemon more usable. # Please see vsftpd.conf.5 for all compiled in defaults. # # READ THIS: This example file is NOT an exhaustive list of vsftpd options. # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's # capabilities. # # Allow anonymous FTP? (Beware - allowed by default if you comment this out). anonymous_enable=NO -> YES로 변경 # # Uncomment this to allow local users to log in. # When SELinux is enforcing check for SE bool ftp_home_dir local_enable=YES # # Uncomment this to enable any form of FTP write command. write_enable=YES # # Default umask for local users is 077. You may wish to change this to 022, # if your users expect that (022 is used by most other ftpd's) local_umask=022
▶ /etc/vsftpd.conf 파일에 annoymous_enable=NO를 YES로 변경합니다. 비인가된 사용자의 접근을 허용한다는 의미입니다.
[root@localhost vsftpd]# df -Th | grep -i /dev/sr0 /dev/sr0 iso9660 6.7G 6.7G 0 100% /run/media/root/CentOS-8-BaseOS-x86_64 [root@localhost vsftpd]# umount /dev/sr0
▶ CentOS iso이미지를 cdrom에 마운트 합니다. 마운트 후 PXE 서버에서는 CDROM이 아닌 디렉터리에 파일을 생성하여 그 기반으로 다수의 Client에 설치를 하기 위해 umount 합니다.
[root@localhost dev]# mount /dev/sr0 /var/ftp/pub/ mount: /var/ftp/pub: WARNING: device write-protected, mounted read-only. [root@localhost dev]# df -Th | grep -i /var/ftp/pub /dev/sr0 iso9660 6.7G 6.7G 0 100% /var/ftp/pub
▶ CentOS iso이미지를 /var/ftp/pub 디렉터리에 마운트 합니다.
[root@localhost /]# cp /var/ftp/pub/images/pxeboot/vmlinuz /var/lib/tftpboot/ [root@localhost /]# cp /var/ftp/pub/images/pxeboot/initrd.img /var/lib/tftpboot/ [root@localhost /]# cp /var/ftp/pub/isolinux/ldlinux.c32 /var/lib/tftpboot/ [root@localhost /]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ [root@localhost /]# cd /var/lib/tftpboot [root@localhost tftpboot]# ls -ltr 합계 66920 -r-xr-xr-x 1 root root 7872760 7월 5 21:18 vmlinuz -r--r--r-- 1 root root 60484580 7월 5 21:20 initrd.img -r--r--r-- 1 root root 116064 7월 5 21:20 ldlinux.c32 -rw-r--r-- 1 root root 42744 7월 5 21:21 pxelinux.0
▶ CentOS iso이미지 파일이 마운트가 됐다면 해당 이미지 파일에서 4가지 파일을 추출하여 /var/lib/tftpboot/에 복사를 합니다.
★복사 파일명
1. vmlinuz
2. initrd.img
3. ldlinux.c32
4. pxelinux.0[root@localhost tftpboot]# mkdir /var/lib/tftpboot/pxelinux.cfg [root@localhost tftpboot]# cd pxelinux.cfg/ [root@localhost pxelinux.cfg]# touch default
▶ /var/lib/tftpboot/ 아래 pxelinux.cfg 디렉터리를 만들고 해당 디렉터리 안에 touch 파일로 default를 생성합니다. 이유는 부팅을 하기 위한 디렉터리
[root@localhost pxelinux.cfg]# vi default DEFAULT CentOS8_Auto_Install LABEL CentOS8_Auto_Install kernel vmlinuz APPEND initrd=initrd.img repo=ftp://192.168.111.100/pub
▶ default 파일에 해당 내용을 추가하도록 합니다. LABEL은 CentOS8_Auto_Install Kernel은 vmlinuz APPEND는 initrd=initrd.img 마지막으로 repo=ftp://192.168.111.100/pub
★설정 파일 설명
1. Initrd - NITial RamDisk, 초기 램디스크. 부팅할 때 초기에 한 번만 마운트 되어 사용되는 디스크
2. kernel vmlinuz - 리눅스가 지원하는 목적 파일 포맷들 중 하나에서 리눅스 커널을 포함하는 정적으로 링크된 실행 파일[root@localhost pxelinux.cfg]# systemctl restart dhcpd [root@localhost pxelinux.cfg]# systemctl restart vsftpd [root@localhost pxelinux.cfg]# systemctl restart tftp [root@localhost pxelinux.cfg]# systemctl enable dhcpd Created symlink /etc/systemd/system/multi-user.target.wants/dhcpd.service → /usr/lib/systemd/system/dhcpd.service. [root@localhost pxelinux.cfg]# systemctl enable vsftpd Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service. [root@localhost pxelinux.cfg]# systemctl enable tftp Created symlink /etc/systemd/system/sockets.target.wants/tftp.socket → /usr/lib/systemd/system/tftp.socket.
▶ 설정이 완료가 됐다면 dhcpd, vsftpd, tftp의 데몬을 재기동하고 부팅 시 자동으로 활성화되도록 enable 설정을 합니다.
[root@localhost pxelinux.cfg]# systemctl status dhcpd | grep -i Active Active: active (running) since Tue 2022-07-05 21:29:16 KST; 1min 22s ago [root@localhost pxelinux.cfg]# systemctl status tftp | grep -i Active Active: active (running) since Tue 2022-07-05 21:29:31 KST; 1min 19s ago [root@localhost pxelinux.cfg]# systemctl status vsftpd | grep -i Active Active: active (running) since Tue 2022-07-05 21:29:22 KST; 1min 46s ago
▶ 해당 데몬들이 정상적으로 활성화가 되었는지 확인합니다.
▶ 설치가 될 Client 서버를 부팅하게 되면 PXE서버를 통해서 통신을 시도하며 사전에 설정된 vmlinuz와 initrd.img 파일들을 불러와 수행되는 것을 확인할 수 있습니다.
▶ 부팅이 되는 시간까지 5 ~ 10분 정도 소요가 됩니다.
▶ CentOS Linux 8.0이 started 됐다는 호출이 떨어지게 되면 바이오스에서 부팅은 성공된 것입니다.
▶ 부팅이 완료가 되면 CD/DVD로 부팅이 아닌 PXE 서버를 통해서 ISO 이미지를 가져온 것을 확인할 수 있습니다. 하지만 단점으로는 서버 1~2대의 설치의 경우 해당 방식으로 사용하면 되지만 10대 이상의 서버에 배포를 할 경우 각각 언어, 패키지, LVM 설정을 별도로 해야 하기 때문에 이때 퀵스타트 파일을 활용하여 사전에 패키지를 등록하여 배포 설치할 수 있도록 할 수 있습니다.
[root@localhost /]# ls /root/anaconda-ks.cfg /root/anaconda-ks.cfg
▶ 설치했을 때 세팅되어 있던 값들이 저장되어 있는 파일로 Quick Start를 하기 위해서 설정 파일을 열어 줍니다.
[root@localhost /]# vi /root/anaconda-ks.cfg #version=RHEL8 ignoredisk --only-use=sda # Partition clearing information clearpart --none --initlabel # Use graphical install graphical repo --name="AppStream" --baseurl=file:///run/install/repo/AppStream # Use CDROM installation media cdrom # Keyboard layouts keyboard --vckeymap=kr --xlayouts='kr' # System language lang ko_KR.UTF-8 # Network information network --bootproto=dhcp --device=ens160 --ipv6=auto --activate network --hostname=localhost.localdomain # Root password rootpw --iscrypted $6$MJwYqEVQpPMPnQyF$fPaow7WPscywsCbrw71v855sUGuJeYHi9s919aGUCxyU/rlytznJlPFkvUHbWiRa.iJuMUOy5hTQDh0E3lNKo/ # X Window System configuration information xconfig --startxonboot # Run the Setup Agent on first boot firstboot --enable # System services services --disabled="chronyd" # System timezone timezone Asia/Seoul --isUtc --nontp ...(생략)
▶ /root/anaconda-ks.cfg 파일을 복사하여 pxe서버에서 부팅 시 해당 파일을 참조한다면 10대가 넘는 서버에 Intall을 진행 시 하나하나 개별 세팅이 아닌 경우라면 동일한 설정 값으로 OS 설치가 가능합니다.
★anaconda-ks.cfg 설명
아나콘다(Anaconda)는 레드헷에서 만든 설치 소프트웨어 중 하나이며 킥스타트 파일은 설치할 때 설정 한 값들을 파일로 기록해둔 파일이다. 이 파일은 아나콘다를 이용하여 설치할 때 사용한다.[root@localhost ftp]# vi /var/ftp/centos.ks #version=RHEL8 ignoredisk --only-use=sda # Partition clearing information clearpart --none --initlabel # Use graphical install graphical url --url=ftp://192.168.111.100/pub --> 해당부분 내용 추가 # Use CDROM installation media cdrom # Keyboard layouts keyboard --vckeymap=kr --xlayouts='kr' # System language lang ko_KR.UTF-8 ...(생략) # Disk partitioning information part / --fstype="xfs" --ondisk=sda --size=77823 part swap --fstype="swap" --ondisk=sda --size=4096 %packages @^workstation-product-environment --> 삭제 kexec-tools --> 삭제 @^Server with GUI --> 추가 @GNOME Applications --> 추가 mc --> 추가 %end %addon com_redhat_kdump --enable --reserve-mb='auto' %end
▶ /var/ftp/centos.ks 파일을 vi 편집기로 열어 해당 내용을 추가합니다.
★centos.ks 내용 추가
graphical
url--url=ftp://192.168.111.100/pub --> 해당 부분 내용 추가
# Use CDROM installation media
%packages
@^workstation-product-environment --> 삭제
kexec-tools --> 삭제
@^Server with GUI --> 추가
@GNOME Applications --> 추가
mc --> 추가
%end[root@localhost /]# vi /var/lib/tftpboot/pxelinux.cfg/default DEFAULT CentOS8_Auto_Install LABEL CentOS8_Auto_Install kernel vmlinuz APPEND initrd=initrd.img repo=ftp://192.168.111.100/pub ks=ftp://192.168.111.100/centos.ks --> 추가
▶ PXE서버를 통한 Client 설치 시 사전에 설정된 패키지 파일을 모두에게 동일하게 적용하여 사용할 수 있도록 default 파일에 ks=ftp://192.168.111.100/centos.ks를 추가해줍니다.
▶ 설치가 될 Client 서버를 부팅하게 되면 PXE서버를 통해서 통신을 시도하며 사전에 설정된 vmlinuz와 initrd.img 파일들을 불러와 수행되는 것을 확인할 수 있습니다.
▶ 부팅 이미지가 완료되고 OS 설치를 별도의 언어, 패키지, 계정 설정을 하지 않아도 PXE서버와 동일한 환경으로 설정 값이 지정되어 설치가 완료가 되었습니다.
▶ 설치가 완료된 OS를 확인하게 되면 192.168.111.123의 아이피를 부여받았으며, 사전에 패키지 항목에 설치하라는 패키지가 설치된 것을 확인할 수 있습니다. 이런 방식으로 다수의 서버에 설정을 통해 한번에 여러 대의 서버를 설치할 수 있습니다.
▶ 사전에 포함된 패키지 mc가 정상적으로 작동되는 것을 확인할 수 있습니다.
2020.12.02 - [System of Infra/UNIX] - IBM AIX NIM서버 구성 mksysb를 활용한 구성 방법[1]
2020.12.02 - [System of Infra/UNIX] - IBM AIX NIM서버 구성 mksysb를 활용한 구성 방법[2]
2020.12.02 - [System of Infra/UNIX] - IBM AIX NIM서버 구성 mksysb를 활용한 구성 방법[3]
PS. 포스팅의 내용은 제 기준으로 작성한 것이기 때문에 참고해서 보시면 감사하겠습니다.
포스팅 과정의 오류 및 오타 그리고 궁금한 점에 대해서는 댓글 남겨주세요.
반응형'System of Infra > Linux System' 카테고리의 다른 글
LINUX SMB 리눅스 공유볼륨 윈도우 드라이브 연결하기 (2) 2022.07.08 LINUX SMB 윈도우 공유볼륨 리눅스에 마운트하는 방법 (2) 2022.07.08 LINUX NMAP 패키지를 활용한 포트 상태 확인하는 방법 (6) 2022.06.28 LINUX Banner(Motd, issue.net, issue) 설정하는 방법 (10) 2022.06.27 LINUX VI 및 VIM 편집기 Set number 설정하는 방법 (4) 2022.06.27