ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LINUX PXE서버구축을 통한 OS 설치하는 방법
    System of Infra/Linux System 2022. 7. 6. 00:00
    반응형

    LINUX 로고이미지

    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
    ▶ 해당 데몬들이 정상적으로 활성화가 되었는지 확인합니다.

     

    LINUX 로고이미지1

    ▶ 설치가 될 Client 서버를 부팅하게 되면 PXE서버를 통해서 통신을 시도하며 사전에 설정된 vmlinuz와 initrd.img 파일들을 불러와 수행되는 것을 확인할 수 있습니다.

     

    LINUX 로고이미지2

    ▶ 부팅이 되는 시간까지 5 ~ 10분 정도 소요가 됩니다.

     

    LINUX 로고이미지3

    ▶ CentOS Linux 8.0이 started 됐다는 호출이 떨어지게 되면 바이오스에서 부팅은 성공된 것입니다.

     

    LINUX 로고이미지4

    ▶ 부팅이 완료가 되면 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를 추가해줍니다.

    LINUX 로고이미지5

    ▶ 설치가 될 Client 서버를 부팅하게 되면 PXE서버를 통해서 통신을 시도하며 사전에 설정된 vmlinuz와 initrd.img 파일들을 불러와 수행되는 것을 확인할 수 있습니다.

     

    LINUX 로고이미지6

    ▶ 부팅 이미지가 완료되고 OS 설치를 별도의 언어, 패키지, 계정 설정을 하지 않아도 PXE서버와 동일한 환경으로 설정 값이 지정되어 설치가 완료가 되었습니다.

     

    LINUX 로고이미지7

    ▶ 설치가 완료된 OS를 확인하게 되면 192.168.111.123의 아이피를 부여받았으며, 사전에 패키지 항목에 설치하라는 패키지가 설치된 것을 확인할 수 있습니다. 이런 방식으로 다수의 서버에 설정을 통해 한번에 여러 대의 서버를 설치할 수 있습니다.

     

    LINUX 로고이미지8

    ▶ 사전에 포함된 패키지 mc가 정상적으로 작동되는 것을 확인할 수 있습니다.

     

    2020.12.02 - [System of Infra/UNIX] - IBM AIX NIM서버 구성 mksysb를 활용한 구성 방법[1]

     

    IBM AIX NIM서버 구성 mksysb를 활용한 구성 방법[1]

    IBM AIX NIM서버 구성 mksysb를 활용한 구성 방법[1] [root@test_svr1:/]# vi /etc/inetd.conf #tftp dgram udp6 SRC nobody /usr/sbin/tftpd tftpd -n tftp dgram udp6 SRC nobody /usr/sbin/tftpd tftpd -n(변..

    pinetreeday.tistory.com

    2020.12.02 - [System of Infra/UNIX] - IBM AIX NIM서버 구성 mksysb를 활용한 구성 방법[2]

     

    IBM AIX NIM서버 구성 mksysb를 활용한 구성 방법[2]

    IBM AIX NIM서버 구성 mksysb를 활용한 구성 방법[2] [root@test_svr1:/]# smit nim Configure the NIM Environment Perform NIM Software Installation and Maintenance Tasks Perform NIM Administration Tasks..

    pinetreeday.tistory.com

    2020.12.02 - [System of Infra/UNIX] - IBM AIX NIM서버 구성 mksysb를 활용한 구성 방법[3]

     

    IBM AIX NIM서버 구성 mksysb를 활용한 구성 방법[3]

    IBM AIX NIM서버 구성 mksysb를 활용한 구성 방법[3] [root@test_svr1:/]# smit nim Configure the NIM Environment Perform NIM Software Installation and Maintenance Tasks(선택) Perform NIM Administration..

    pinetreeday.tistory.com

     

    PS. 포스팅의 내용은 제 기준으로 작성한 것이기 때문에 참고해서 보시면 감사하겠습니다.

    포스팅 과정의 오류 및 오타 그리고 궁금한 점에 대해서는 댓글 남겨주세요.

    반응형

    댓글

Designed by Tistory.