CentOS7 기반 PXE 서버 구성하기

2019. 4. 24. 23:28포트폴리오

 


이글은 CentOS7 기반으로 PXE 서버를 구성하는 방법을 설명합니다.


학교 수행 평가로 CentOS7을 사용해 PXE 서버를 구성한뒤 네트워크 부팅으로 인스톨 하기 시험을 하였습니다.

따라서 본글은 해당 시험 내용 과정을 정리한 글입니다.

 

0.PXE 란?

...더보기

리눅스의 PXE(Pre-boot eXecution Environment)는 사전 부팅 실행환경으로 네트워크 인터페이스(NIC)를 통해서 부팅을 하는 환경인데(메인보드내에 내장되어있는기능) 설치CD나 이미지파일(ISO) 없이 네트워크를 통해서 운영체제를 설치하거나 부팅할때 사용됩니다.

 

1.시험 조건

시험 조건

 

 

2.서버 구성

VM웨어를 사용

  1. CentOS 설치 모드 : Server with GUI
  2. Root 계정 설정 : 비밀번호 1234
  3. 사용자 계정 설정 : 이름 0424 | 비밀번호 1234
  4. 파티션 설정 : Swap 크기 1024MIB | 0424 이름의 Mount Point 만들기
  5. 설치 언어 : 영문[기본]

3.기본 설정

우선 정상적으로 위의 구성 조건을 사용해서 서버를 설치후 아래 세팅을 진행합니다

편한 작업을 위한 팁

vi /root/.bashrc 에서 아래 라인 추가

alias vi='vim' 

 

vi /etc/vimrc 에서 아래 라인 추가

set number

set hlsearch

 

vi /etc/bashrc  의 41 라인에서

PS1="[\u@\h \W]\\$ " 를

PS1="[\u@\h \w]\\$ "  로 수정

(대문자 W를 소문자 w 로 수정)

 

 위 설정 모두 적용하고 터미널만 다시 열어주면 설정 적용됨

 

4.패키지 설치

yum -y install syslinux
yum -y install tftp-server 
yum -y install vsftpd 
yum -y install dhcp
yum -y install xinetd

 명령어를 입력해서 [tftp-server,vsftpd,dhcp] 를 설치합니다.

  • syslinux는 부팅 메뉴 구성을 위한 파일과 부트로더 파일을 제공합니다.
  • tftp-server는 PXE 부팅 직후, OS를 설치할 시스템의 커널 이미지 파일과 syslinux패키지에 제공된 부팅 관련 파일을 전송합니다.
  • vsftpd는 운영체제 설치시 필요한 파일 전송합니다.
  • dhcp는 PXE 부팅시 IP를 할당하여 원격지에 있는 데이터를 다룬받기 위한 환경 제공합니다.

 

5.TFTP 서버 설정

vi /etc/xinetd.d/tftp 

명령어로 TFTP 설정 파일에 들어갑니다.

그후 14번 라인 disable = no 로 설정해줍니다

  • 참고 : tftp는 xinetd데몬에 의해서 동작하는 데몬입니다. 

 

6.CD 마운트

mount -t iso9660 /dev/cdrom /mnt

명령어로 리눅스 ISO 파일을 /mnt[시디마운트포인트]에 마운트 해줍니다

  • 참고 : -t iso9660 옵션은 iso9660 형식으로 마운트 하라는 뜻입니다.
mkdir -p /var/ftp/myCentos

그후 CD 이미지 파일을 복사하기위해 myCentos 디렉터리를 생성해줍니다

cp -r /mnt/* /var/ftp/myCentos &

명령어를 입력해서 /mnt [시디마운트포인트] 디렉터리안에 있는 파일들을 모두 복사합니다

  • 참고 : & 옵션을 통해 백그라운드로 복사 합니다.
  • 이 작업은 로컬저장소를 만드는 과정으로 네트워크를 통해 부팅을 한 시스템(PXE)는 운영체제 설치에 필요한 파일을 vsftp를 통해 다운받습니다.

 

7.SYSLINUX 패키지 복사

cd /usr/share/syslinux

명령어를 입력해서 SYSLINUX패키지 파일이 위치한 디렉터리로 이동합니다 그후 [menu.c32,pxelinux.0] 파일들을 /var/lib/tftpboot 경로에 복사합니다

  • 참고 : menu.c32는 부팅메뉴 구성파일이고 pxelinux.0 부트로더 파일입니다.
cp menu.c32 /var/lib/tftpboot
cp pxelinux.0 /var/lib/tftpboot

 

8.커널 이미지 파일 복사

mkdir -p /var/lib/tftpboot/centos

명령어를 입력해서 커널이미지가 들어갈 디렉터리를 생성합니다

cp /var/ftp/myCentos/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/centos/

명령어를 입력해서 커널이미지를 복사합니다

  • 참고 : vmlinux는 리눅스 커널을 컴파일한 결과를 gzip으로 압축한 파일로 부팅시 해당 파일이 압축해제가 되어 메모리에 로딩되어서 리눅스가 시작합니다. initrd.img파일은 커널이 사용하는 모듈을 모아놓은 이미지 파일로 커널이미지보다 먼저 메모리에 로딩이 됩니다.

 

9.부팅 메뉴 구성하기

mkdir /var/lib/tftpboot/pxelinux.cfg

명렁어를 입력해서 부팅메뉴 환경설정파일이 들어갈 디렉터리를 생성후

vi /var/lib/tftpboot/pxelinux.cfg/default

명령어를 사용하여 default 파일을 생성후 아래와 같이 입력합니다.

 

default menu.c32
prompt 0
timeout 300
ontimeout local

LABEL local

        MENU LABEL ^0) Boot Local hard Disk

        localboot 0

LABEL CentOS 7

        MENU LABEL ^1) CentOS 7 Install (VSFTP)

        KERNEL /centos/vmlinuz

        APPEND initrd=/centos/initrd.img repo=ftp://xxx.xxx.xxx.xxx/myCentos

LABEL CentOS 7

        MENU LABEL ^2) CentOS 7 Install (Mirror)

        KERNEL /centos/vmlinuz

        APPEND initrd=/centos/initrd.img repo=http://mirror.kakao.com/centos/7.6.1810/os/x86_64/
  • 참고 :
  • 0번 메뉴 -> localboot 0 하드디스크부팅
  • 1번 메뉴 -> 커널이미지 파일(vmlinux,initrd.img)을 실행후 설치에 필요한 데이터를 FTP서버에서 다운로드합니다.
  • 2번 메뉴 -> 커널 이미지 파일(vmlinux,initrd.img)을 실행후 설치에 필요한 데이터를 Kakao Mirror 서버에서 다운로드합니다.
  • ftp://xxx.xxx.xxx.xxx/centos7 부분에는 현재 자신의 IP를 입력합니다. [ifconfig 명령어로 확인가능]

 

10. DHCP 서버 구성하기

vi /etc/dhcp/dhcpd.conf

명령어를 입력하여 DHCP 설정파일을 수정합니다

subnet 192.168.192.0 netmask 255.255.255.0 { #아이피와 서브넷 지정 옵션
        range 192.168.192.10 192.168.192.20; #시작 IP와 끝 IP 설정
        option routers 192.168.192.2; #게이트웨이 설정 옵션
        option broadcast-address 192.168.192.255; #브로드캐스트 설정
        option subnet-mask 255.255.255.0; #넷마스크 설정 옵션
        option domain-name-servers 8.8.8.8; #네임서버 설정
        default-lease-time 3000; #임대시간(s)
        max-lease-time 6000; #최대 임대시간(s)
        filename "pxelinux.0"; #부팅 파일 이름(syslinux)

}
  • 참고 : 위 내용은 각 실습환경마다 다르므로 따라하지 말고 본인의 정보를 기재하여야 합니다
  • 게이트웨이는 ip route 명령으로 확인가능합니다
  • 그밖에 IP는 ifconfig 명령으로 확인가능합니다

 

11.서비스 실행

systemctl start vsftpd
systemctl start xinetd
systemctl start tftp
systemctl start dhcpd
systemctl stop firewalld

명령어로 서비스들을 시작&중지 해줍니다.

  • 참고 : firewalld 서비스는 방화벽이므로 재부팅시 다시 종료해주어야 합니다

 

12.전체 동작 과정

...더보기

PXE가 동작하는 과정은 먼저 컴퓨터(서버)에 전원을 키면 PXE환경이 실행되어 DHCP서버를 찾고 DHCP로 IP를 할당 받은 후 tftp로 부터 pxelinux.0 menu.c32 파일을 다운받아 실행합니다. 그리고 default (메뉴구성파일)에 설정에 따라 메뉴가 실행되고 설치 메뉴 선택시 실행할 내용 (KERNEL, APPEND)에 따라 커널이미지 파일을 다운받아 실행하고 운영체제 설치에 필요한 파일을 VSFTP로 부터 다운받습니다. VSFTP경로는 /var/lib/tftpboot/pxelinux.cfg/default파일의 repo=ftp://경로입니다. 

 

13.위 모든 과정을 편하게 만들어주는 스크립트

이 글을 쓰고나니 쉘 스크립트를 사용해서 위 모든 과정을 편하게 반자동으로 해줄수 있는 스크립트를 짜볼까 하는 생각이 문득 들었습니다.

 

그리고 아래와 같은 스크립트를 완성하였습니다.

#! /bin/bash

#명령 실행 성공 유무 확인 함수
check()
{
	if [[ $? != 0 ]]; then
		echo -e "\033[31m"FAILED\!"\033[0m"
		exit
	fi
	echo -e "\033[32m"OK\!"\033[0m"
}

#root 검사
echo -n -e " \033[34m"root 실행 여부를 확인중입니다... "\033[0m"
sleep 2
if [[ $EUID != 0 ]]; then
	echo -e "\033[31m"FAILED\!"\033[0m"
	echo -e "\033[31m"root 권한으로 스크립트를 실행해주세요"\033[0m"
	exit
fi
echo -e "\033[32m"OK\!"\033[0m"

#메인 부분
echo -e "\033[34m"스크립트를 실행합니다\!"\033[0m"

echo ""
echo "- PXE Setup Script -"

echo "==================="
echo "1. Setup_PXE Server"
echo "2. Exit"
echo "==================="

echo -n -e "\033[34m"Select Option : "\033[0m"

read input

if [[ $input != 1 ]]; then
	echo -e "\033[31m"스르립트를 종료합니다"\033[0m"
	exit
fi

echo -e "\033[34m"스크립트를 시작합니다..."\033[0m"
echo ""
sleep 2

#기본 설정 시작
echo -n "1. 시스템 기본설정을 시작합니다..."
echo ""
#/root/.bashrc 설정
echo -n -e "\033[34m"/root/.bashrc 설정..."\033[0m"
echo alias vi=\'vim\'  >> /root/.bashrc
check # 성공 유무 반환
echo -n -e "\033[34m"overlap 검사를 진행중입니다..."\033[0m"
overlap_ck=$(cat /root/.bashrc | uniq) #중복검사 패턴 aa 형식 중복 제거
echo "$overlap_ck" > /root/.bashrc
check
#/etc/vimrc 설정
echo -n -e "\033[34m"/etc/vimrc 설정_1..."\033[0m"
echo set number >> /etc/vimrc
check
echo -n -e "\033[34m"/etc/vimrc 설정_2..."\033[0m"
echo set hlsearch >> /etc/vimrc
check
echo -n -e "\033[34m"overlap 검사를 진행중입니다..."\033[0m"
overlap_ck=$(awk 'NR<=66 {print $0}' /etc/vimrc) #중복검사 66라인 이후는 모두 중복이니 짜름
echo "$overlap_ck" > /etc/vimrc
check

echo ""
sleep 2

#패키지 설치 시작
echo -n "2.패키지 설치를 시작합니다[다소 시간이 걸릴 수 있음]..."
echo ""
#syslinux 설치
echo -n -e "\033[34m"syslinux 설치..."\033[0m"
yum -y install syslinux &> /dev/null # &> /dev/null 은 설치진행 과정을 커맨드에 표시 X
check
#tftp-server 설치
echo -n -e "\033[34m"tftp-server 설치..."\033[0m"
yum -y install tftp-server &> /dev/null
check
#vsftpd 설치
echo -n -e "\033[34m"vsftpd 설치..."\033[0m"
yum -y install vsftpd &> /dev/null
check
#dhcp 설치
echo -n -e "\033[34m"dhcp 설치..."\033[0m"
yum -y install dhcp &> /dev/null
check
#xinetd 설치
echo -n -e "\033[34m"xinetd 설치..."\033[0m"
yum -y install xinetd &> /dev/null
check

echo ""
sleep 2

#tftp 서버 설정
echo -n "3.tftp 서버 설정을 시작합니다..."
echo ""
echo -n -e "\033[34m"/etc/xinetd.d/tftp 설정..."\033[0m"
sed -i "14s/.*/        disable                 = no/g" /etc/xinetd.d/tftp
check

echo ""
sleep 2

#cd 마운트
echo -n "4.cd 마운트를 시작합니다..."
echo ""
echo -n -e "\033[34m"iso 파일 마운트..."\033[0m"
mount -t iso9660 /dev/cdrom /mnt &> /dev/null
if [[ $? != 0 ]]; then
	echo -e "\033[31m"FAILED\!"\033[0m"
	echo -e "\033[31m"iso 파일이 cd롬에 들어가있는지 확인하십시오\!"\033[0m"
	echo -e "\033[31m"혹은 /mnt 디렉터리에 이미 마운트 되어있는지 확인하십시오\!"\033[0m"
	echo -e "\033[31m"이미 마운트되어있을 경우 umount 후 다시 시도하십시오\!"\033[0m"
	exit
fi
echo -e "\033[32m"OK\!"\033[0m"
#cd 이미지파일 복사 디렉터리 생성
echo -e "\033[34m"이미지 파일 복사 디렉터리는 /var/ftp/ 경로에 생성됩니다"\033[0m"
echo -n -e "\033[34;1m"이미지 파일을 복사할 디렉터리명을 적어주세요[예시myCentos] : "\033[0m"
read input
echo -n -e "\033[34m"이미지파일 복사 디렉터리 생성..."\033[0m"
mkdir -p /var/ftp/$input &> /dev/null
check
#이미지 파일 복사
echo -n -e "\033[34m"이미지 파일을 복사합니다[다소 시간이 걸릴 수 있음]..."\033[0m"
cp -r /mnt/* /var/ftp/$input &> /dev/null
check

echo ""
sleep 2

#syslinux 패키지 복사
echo -n "5.syslinux 패키지 복사를 시작합니다..."
echo ""
echo -n -e "\033[34m"syslinux 디렉터리 이동중..."\033[0m"
cd /usr/share/syslinux &> /dev/null
check
#menu.c32 복사
echo -n -e "\033[34m"menu.c32 복사중..."\033[0m"
cp menu.c32 /var/lib/tftpboot &> /dev/null
check
#pxelinux.0 복사
echo -n -e "\033[34m"pxelinux.0 복사중..."\033[0m"
cp pxelinux.0 /var/lib/tftpboot &> /dev/null
check
#커널 이미지 복사디렉터리 생성
echo -e "\033[34m"커널 이미지 파일 복사 디렉터리는 /var/lib/tftpboot/ 경로에 생성됩니다"\033[0m"
echo -n -e "\033[34;1m"커널 이미지가 들어갈 디렉터리명을 적어주세요[예시centos] : "\033[0m"
read kernel
echo -n -e "\033[34m"커널 이미지 복사 디렉터리 생성..."\033[0m"
mkdir -p /var/lib/tftpboot/$kernel &> /dev/null
check
#커널 이미지 복사
echo -n -e "\033[34m"커널 이미지 파일을 복사합니다[다소 시간이 걸릴 수 있음]..."\033[0m"
cp /var/ftp/$input/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/$kernel/ &> /dev/null
check

echo ""
sleep 2

#부팅 메뉴 구성
echo -n "6.부팅 메뉴 구성을 시작합니다..."
echo ""
echo -n -e "\033[34m"환경설정 디렉터리 생성중..."\033[0m"
rm -rf /var/lib/tftpboot/pxelinux.cfg &> /dev/null #중복 실행시 오류방지를 위해 디렉터리 삭제후 재생성
mkdir /var/lib/tftpboot/pxelinux.cfg &> /dev/null
check
#IP 구하기
echo -n -e "\033[34m"/var/lib/tftpboot/pxelinux.cfg/default 을 설정합니다..."\033[0m"
ip=$(hostname -I | awk '{print $1}') #IP 를 구해 변수에 담음
# /var/lib/tftpboot/pxelinux.cfg/default 내용 쓰기
echo default menu.c32 > /var/lib/tftpboot/pxelinux.cfg/default
echo prompt 0 >> /var/lib/tftpboot/pxelinux.cfg/default
echo timeout 300 >> /var/lib/tftpboot/pxelinux.cfg/default
echo ontimeout local >> /var/lib/tftpboot/pxelinux.cfg/default
echo >> /var/lib/tftpboot/pxelinux.cfg/default
echo LABEL local >> /var/lib/tftpboot/pxelinux.cfg/default
echo >> /var/lib/tftpboot/pxelinux.cfg/default
echo         MENU LABEL \^0\) Boot Local hard Disk >> /var/lib/tftpboot/pxelinux.cfg/default
echo >> /var/lib/tftpboot/pxelinux.cfg/default
echo         localboot 0 >> /var/lib/tftpboot/pxelinux.cfg/default
echo >> /var/lib/tftpboot/pxelinux.cfg/default
echo LABEL CentOS 7 >> /var/lib/tftpboot/pxelinux.cfg/default
echo >> /var/lib/tftpboot/pxelinux.cfg/default
echo         MENU LABEL \^1\) CentOS 7 Install \(VSFTP\) >> /var/lib/tftpboot/pxelinux.cfg/default
echo >> /var/lib/tftpboot/pxelinux.cfg/default
echo         KERNEL /$kernel/vmlinuz >> /var/lib/tftpboot/pxelinux.cfg/default
echo >> /var/lib/tftpboot/pxelinux.cfg/default
echo         APPEND initrd=/$kernel/initrd.img repo=ftp://$ip/$input >> /var/lib/tftpboot/pxelinux.cfg/default
echo LABEL CentOS 7 >> /var/lib/tftpboot/pxelinux.cfg/default
echo >> /var/lib/tftpboot/pxelinux.cfg/default
echo         MENU LABEL \^2\) CentOS 7 Install \(Mirror\) >> /var/lib/tftpboot/pxelinux.cfg/default
echo >> /var/lib/tftpboot/pxelinux.cfg/default
echo         KERNEL /$kernel/vmlinuz >> /var/lib/tftpboot/pxelinux.cfg/default
echo >> /var/lib/tftpboot/pxelinux.cfg/default
echo         APPEND initrd=/$kernel/initrd.img repo=http://mirror.kakao.com/centos/7.6.1810/os/x86_64/ >> /var/lib/tftpboot/pxelinux.cfg/default
check

echo ""
sleep 2

#DHCP 서버 구성
echo -n "7.DHCP 서버 구성을 시작합니다..."
echo ""
echo -e "\033[34m"/etc/dhcp/dhcpd.conf 파일을 수정합니다..."\033[0m"
echo ""
echo "============================"
echo "1. 세명 컴퓨터 IP 대역 [자동]"
echo "2. 기타 IP 대역 [수동]"
echo "============================"
echo ""
echo -e "\033[31;1m"1번 옵션은 세명컴퓨터 고등학교 IP 대역 PC 만 사용 가능합니다."\033[0m"
echo -n -e "\033[34;1m"원하는 옵션을 선택해주세요: "\033[0m"
read input

if [[ $input != 1 ]]; then #세명 IP 자동 이 아님 무조건 수동으로 잡음
	echo -e "\033[34m"/etc/dhcp/dhcpd.conf 파일을 수정합니다..."\033[0m"
	echo -n -e "\033[34;1m"subnet 적어주세요[예시192.168.32.0] : "\033[0m"
	read subnet
	echo -n -e "\033[34;1m"netmask 적어주세요[예시255.255.255.0] : "\033[0m"
	read netmask
    echo subnet $subnet netmask $netmask \{ > /etc/dhcp/dhcpd.conf
    echo -n -e "\033[34;1m"range 적어주세요[예시192.168.32.10 192.168.32.100] : "\033[0m"
    read range
    echo     range $range\; >> /etc/dhcp/dhcpd.conf
    echo -n -e "\033[34;1m"routers 적어주세요[예시192.168.32.2] : "\033[0m"
    read routers
    echo     option routers $routers\; >> /etc/dhcp/dhcpd.conf
    echo -n -e "\033[34;1m"broadcast-address 적어주세요[예시192.168.32.2] : "\033[0m"
    read broadcastaddress
    echo     option broadcast-address $broadcastaddress\; >> /etc/dhcp/dhcpd.conf
    echo -n -e "\033[34;1m"subnet-mask 적어주세요[예시255.255.255.0] : "\033[0m"
    read subnetmask
    echo     option subnet-mask $subnetmask\; >> /etc/dhcp/dhcpd.conf
    echo -n -e "\033[34;1m"domain-name-servers 적어주세요[예시8.8.8.8] : "\033[0m"
    read domainnameservers
    echo     option domain-name-servers $domainnameservers\; >> /etc/dhcp/dhcpd.conf
    echo     default-lease-time 3000\; >> /etc/dhcp/dhcpd.conf
    echo     max-lease-time 6000\; >> /etc/dhcp/dhcpd.conf
    echo     filename \"pxelinux.0\"\; >> /etc/dhcp/dhcpd.conf
    echo 	\} >> /etc/dhcp/dhcpd.conf
	check
	echo -n -e "\033[31m"추후 에러 발생시 /etc/dhcp/dhcpd.conf 을 다시 수정하시길 바랍니다\!"\033[0m"

	echo ""
	sleep 2

	#서비스 시작
	echo -n "8.서비스를 시작 합니다..."
	echo ""
	#vsftpd 시작
	echo -n -e "\033[34m"vsftpd 시작중..."\033[0m"
	systemctl start vsftpd &> /dev/null
	check
	#xinetd 시작
	echo -n -e "\033[34m"xinetd 시작중..."\033[0m"
	systemctl start xinetd &> /dev/null
	check
	#tftp 시작
	echo -n -e "\033[34m"tftp 시작중..."\033[0m"
	systemctl start tftp &> /dev/null
	check
	#firewalld 중지
	echo -n -e "\033[34m"firewalld 중지중..."\033[0m"
	systemctl stop firewalld &> /dev/null
	check
	echo -e "\033[31m"firewalld 는 서버 재부팅시 수동으로 다시 중지해주어야 합니다\!"\033[0m"
	#dhcpd 시작
	echo -n -e "\033[34m"dhcpd 시작중..."\033[0m"
	systemctl start dhcpd &> /dev/null
		if [[ $? != 0 ]]; then
			echo -e "\033[31m"FAILED\!"\033[0m"
			echo -e "\033[31m"/etc/dhcp/dhcpd.conf 수정후 수동으로 dhcpd 서비스를 시작하세요\!"\033[0m"

			exit
		fi
		echo -e "\033[32m"OK\!"\033[0m"

	echo ""
	sleep 2

	echo "9.스크립트 실행이 완료되었습니다!!!..."
	echo -e "\033[31m"5초후 스크립트를 종료합니다\!"\033[0m"
	sleep 5
	exit
fi

#세명 IP 대역 선택시 작업
echo -n -e "\033[34m"/etc/dhcp/dhcpd.conf 파일을 수정합니다..."\033[0m"
echo subnet 192.168.32.0 netmask 255.255.255.0 \{ > /etc/dhcp/dhcpd.conf
echo     range 192.168.32.10 192.168.32.100\; >> /etc/dhcp/dhcpd.conf
echo     option routers 192.168.32.2\; >> /etc/dhcp/dhcpd.conf
echo     option broadcast-address 192.168.32.255\; >> /etc/dhcp/dhcpd.conf
echo     option subnet-mask 255.255.255.0\; >> /etc/dhcp/dhcpd.conf
echo     option domain-name-servers 8.8.8.8\; >> /etc/dhcp/dhcpd.conf
echo     default-lease-time 3000\; >> /etc/dhcp/dhcpd.conf
echo     max-lease-time 6000\; >> /etc/dhcp/dhcpd.conf
echo     filename \"pxelinux.0\"\; >> /etc/dhcp/dhcpd.conf
echo 	\} >> /etc/dhcp/dhcpd.conf
check
	
echo ""
sleep 2

#서비스 시작
echo -n "8.서비스를 시작 합니다..."
echo ""
#vsftpd 시작
echo -n -e "\033[34m"vsftpd 시작중..."\033[0m"
systemctl start vsftpd &> /dev/null
check
#xinetd 시작
echo -n -e "\033[34m"xinetd 시작중..."\033[0m"
systemctl start xinetd &> /dev/null
check
#tftp 시작
echo -n -e "\033[34m"tftp 시작중..."\033[0m"
systemctl start tftp &> /dev/null
check
#firewalld 중지
echo -n -e "\033[34m"firewalld 중지중..."\033[0m"
systemctl stop firewalld &> /dev/null
check
echo -e "\033[31m"firewalld 는 서버 재부팅시 수동으로 다시 중지해주어야 합니다\!"\033[0m"
#dhcpd 시작
echo -n -e "\033[34m"dhcpd 시작중..."\033[0m"
systemctl start dhcpd &> /dev/null
	if [[ $? != 0 ]]; then
		echo -e "\033[31m"FAILED\!"\033[0m"
		echo -e "\033[31m"/etc/dhcp/dhcpd.conf 수정후 수동으로 dhcpd 서비스를 시작하세요\!"\033[0m"

		exit
	fi
	echo -e "\033[32m"OK\!"\033[0m"

echo ""
sleep 2

echo "9.스크립트 실행이 완료되었습니다!!!..."
echo -e "\033[31m"5초후 스크립트를 종료합니다\!"\033[0m"
sleep 5
exit

 

14.그리고 이것을 채점해줄수 있는 스크립트

반자동 설치 스크립트가 있으면 자동 채점 스크립트도 있어야 한다고 생각하였습니다.

따라서 현서버(PXE서버)에서 확인불가능한[클라이언트 서버에서만 확인가능] PXE 부팅메뉴보임,정상인스톨 빼고 자동으로 채점해주는 스크립트를 작성하였습니다.

#! /bin/bash

jumsu=`expr 0`
#명령 실행 성공 유무 확인 함수
check()
{
	if [[ $? != 0 ]]; then
		echo -e "\033[31m"틀림\!"\033[0m"
	else
		echo -e "\033[32m"정확\!"\033[0m"
		jumsu=`expr $jumsu + 3`
fi
}

#root 검사
echo -n -e "\033[34m"root 실행 여부를 확인중입니다..."\033[0m"
sleep 2

if [[ $EUID != 0 ]]; then
	echo -e "\033[31m"FAILED\!"033[0m"
	echo -e "\033[31m"root 권한으로 스크립트를 실행하세요"\033[0m"
	exit
fi
echo -e "\033[32m"OK\!"\033[0m"

#메인 부분
echo -e "\033[34m"PXE 채점스크립트를 시작합니다\!"\033[0m"

#자동 채점 시작
echo -e "\033[34m"자동채점을 시작합니다..."\033[0m"
echo ""
sleep 2
#syslinux 채점
echo -n "1. [배점 3점] syslinux 채점중..."
rpm -qa | grep syslinux &> /dev/null
check
#vsftp 채점
echo -n "2. [배점 3점] vsftp 채점중..."
rpm -qa | grep  vsftpd &> /dev/null
check
#vsftp 정상 접속 채점
echo -n "3. [배점 3점] vsftp 접속 채점중..."
curl ftp://127.0.0.1/myCentos/ &> /dev/null
check
#dhcp 채점
echo -n "4. [배점 3점] dhcp 채점중..."
rpm -qa | grep  dhcp-4.2.5 &> /dev/null
check
#tftp 채점
echo -n "5. [배점 3점] tftp 채점중..."
rpm -qa | grep  tftp-server &> /dev/null
check
#tftp 다운 채점
echo -n "6. [배점 3점] tftp 다운 채점중..."
yum -y install tftp &> /dev/null
cd /tmp/ &> /dev/null
tftp -m binary  "localhost"  -c get "menu.c32" &> /dev/null
find /tmp -size +50 -ls | grep menu.c32 &> /dev/null
check

echo ""
sleep 2

#채점완료
echo -e "\033[34m"#### 채점완료####"\033[0m"
echo ""
echo "====================================================================="
echo -e "\033[33m"최종 점수는"\033[31m" $jumsu 점"\033[33m" 입니다."\033[0m"
echo "====================================================================="
echo -e "\033[31m"나머지 pxe 부트메뉴 보임 \/ 정상 인스톨 화면은 수동채점 바랍니다."\033[0m"
echo ""
echo -e "\033[34m"PXE 채점스크립트를 종료합니다\!"\033[0m"

 

끝마치며...

본 글에선 모든 설정과 스크립트를 root 계정으로 진행하였습니다.
하지만 다들 아시는 것처럼 root 계정으로 작업하는 것은 보안상 위험하며 권장하지 않습니다

저는 root 계정으로 작업하라는 수행평가 지시가 있었기 때문에 root 로 작업한것이며

따라하시는 분들은 sudo 명령을 통해 진행해주시길 권장드립니다.

 

긴글 읽어주셔서 감사합니다.

 

대표 사진

'포트폴리오' 카테고리의 다른 글

아마존 AWS 활용해서 카카오톡 봇 만들기  (3) 2019.01.11