학습자료(~2017)/리눅스

[리눅스] PXE, KICKSTART ( 네트워크 부팅 , 리눅스 자동설치)

단세포소년 2012. 9. 27. 17:32
반응형
내가 아래의 내용을 기반으로 만들었던 설정파일이다. 압축을 풀고 디렉토리를 뒤지면 설정파일들이 존재 할 것이다.


우선 참고한 위치다.

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/System_management/KickStart
http://wiki.linuxstudy.pe.kr/wiki.php/kickstart
http://jonnychoe.egloos.com/5459100
http://xinet.kr/tc/69
http://docs.oracle.com/cd/E19140-01/821-2242/p49.html#scrolltoc

http://joinc.co.kr/modules/moniwiki/wiki.php/Site/cloud/virtualbox/PXE?action=highlight&value=4


http://docs.fedoraproject.org/en-US/Fedora/14/html/Installation_Guide/s1-kickstart2-options.html
fedora kickstart option

https://access.redhat.com/knowledge/docs/ko-KR/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/sn-automating-installation.html
anaconda.cfg 즉 fedora(redhat 계열) 를 설치하고 나면 설치시 입력했던 설정파일(kickstart 구성파일)이 자동으로 /root/anaconda.cfg 로 저장된다 이를 이용하면 kickstart 더 쉬워진다. 위의 사이트는 이에 해당하는 내용이다.


테스트 장비가 없는 분들은 virtualbox를 이용하여 테스트해 보아라. 아래는 virtualbox 를 이용하여 pxe 네트워크 부팅 테스트방법이다.
http://joinc.co.kr/modules/moniwiki/wiki.php/Site/cloud/virtualbox/PXE?action=highlight&value=4


http://tftpd32.jounin.net/
윈도우용 dhcp, tftp, syslog 서버



문서 마지막에는 pxe 네트워크 부팅 설치를 하면서 발생했던 문제를 적겠다.



들어가기전 용어 설명

    • PXE 란? 

  Pre-boot eXecution Environment 의 약자이다.

PXE는 클라이언트/서버 인터페이스의 산업계 표준으로서, 원격지에 있는 관리자가, 아직 운영체계조차 적재되지 않은 채 네트웍에 접속된 컴퓨터들을 구성하고, 부팅할 수 있도록 해준다. PXE 코드는 대체로 컴퓨터의 롬, 또는 클라이언트가 네트웍 서버와 통신할 수 있게 해주는 부트 디스크 상에 넣어 전달됨으로써, 클라이언트 PC를 원격지에서 구성하거나 부팅시킬 수 있다. 있다. PXE는 다음의 세 가지 서비스를 제공한다.

DHCP : 클라이언트가 네트웍 서버에 액세스하기 위한 IP 주소를 받을 수 있게 한다.

일련의 API들 : 클라이언트의 BIOS, 또는 다운로드된 NBP (Network Bootstrap Program)에 의해 사용됨으로써, 운영체계의 부팅이나, 기타의 구성 단계를 자동화한다.

PXE 롬이나 부트 디스크 내에 있는 PXE 코드를 초기화하는 표준 방법

PXE 과정은 PXE를 사용하여 서버에게 통지하는 클라이언트로 구성되어 있다. 만약에 그 서버가 PXE를 사용하면, 서버는 이용 가능한 운영체계가 들어있는 부트 서버의 목록을 클라이언트에게 보낸다. 클라이언트는 필요한 부트 서버를 찾은 다음, 다운로드할 파일이름을 받는다. 그 다음에 클라이언트는 TFTP를 사용하여 파일을 다운로드하며, 그것을 실행시킴으로써 운영체계를 적재한다. 만약에 클라이언트에는 PXE가 장착되고 서버에는 장착되지 않았다면, 서버는 DHCP와 BOOTP 연산들 내에서의 혼란을 방지하기 위해 PXE 코드를 무시한다.

PXE 사용시 얻을 수 있는 이점은 다음과 같다.


클라이언트 PC에 운영체계, 심지어 하드디스크조차 반드시 있어야 할 필요가 없다.

클라이언트 PC는 하드웨어나 소프트웨어 고장시 재부팅 될 수 있다. 이것은 관리자가 문제점을 진단하고, 어쩌면 해결할 수도 있게 해준다.

PXE는 공급자에 독립적이기 때문에, 새로운 형태의 컴퓨터도 손쉽게 네트웍에 추가할 수 있다.

-- 출처 :http://www.terms.co.kr/PXE.htm

다시 말해 OS 설치시 부팅 시디를 삽입하고 부팅하던 과정을 네트워크에서 지원하도록 해준다. 


    • KICKSTART 란?

 리눅스 설치시 사용자는 지역이나 시간, 패스워드, 언어지정, 마우스 설정등을 일일히 해야한다. 하지만 kickstart 는 이러한 설정들을 미리 파일에 지정하여 리눅스 설치 프로그램이 설정 파일을 보고 자동으로 알아서 설치를 하는 방법이다. 



    • TFTP 란?

 TFTP란

TFTP(Trivial File Transfer Protocol)란 이더넷을 이용하여 파일을 다운 받는 프로토콜로직이다. UDP 방식을 사용한다. TFTP은 ftp와 같은 파일 전송 프로토콜이지만, 매우 간단한 프로토콜로 구성되므로 부트로더와 같은 작은 크기의 프로그램에서 수행할 수가 있다.


보통 BOOTP와 연동하여 네트워크 부트를 할 때 사용하게 된다.


TFTP는 다음의 두 가지 방법에 의해 사용될 수 있다.

일반 ftp프로토콜은 tcp프로토콜(3웨이 핸드쉐이킹방식, 자세한 사항은 네트웍 관련서적을 참고 하기 바람.)을 사용하지만, tftp는 udp프로토콜(단방향 핸드쉐이킹 방식, 자세한 사항은 네트웍 관련 서적을 참고 하기 바람.)을 사용하여 전송한다.


동작되는 방식은 클라이언트가 서버에 접속하여 파일을 요청하면 해당 파일을 서버는 전송하고 이를 클라이언트는 응답하는 방식을 취한다. 매번 파일의 블록을 전송 시 블록의 길이를 전송하는데 이 블록의 크기는 고정되어 있어 이 크기보다 작은 블록이 오면 이를 마지막 블록으로 인식한다.


단점은 하나의 블록 전송이라도 실패하면 전송을 중지하므로 패켓 손실이 많은 환경에서는 사용이 곤란하다.


거의 모든 유닉스의 구현에 있어서 tftp 서버를 포함하고, 아마 스스로 설치할 일은 없을 것이다.

 

TFTP 구축 필요성

리눅스를 다운로드 하는 방식에는 시리얼을 이용하는 방식과 랜을 이용하는 방식이 있다.


다운 받아야 할 내용이 매우 큰 램 디스크 이미지를 시리얼로 다운 받게 되면 개발속도가 현저히 떨어진다. 시리얼은 전송속도가 매우 늦기 때문이다. 랜을 이용하여 파일을 타겟보드5에 다운로드하는 방법으로 TFTP를 이용하도록 하고 있다. TFTP를 사용하면 매우 빠른 속도로 다운 받기 때문에 개발속도가 향상될 수 있다.


다시 말해 부트로더를 제공하고 클라이언트가 이를 다운받기 위해 사용된다.


    • DHCP 란?

 DHCP[디에이치씨피]는 네트웍 관리자들이 조직 내의 네트웍 상에서 IP 주소를 중앙에서 관리하고 할당해줄 수 있도록 해주는 프로토콜이다. 인터넷의 TCP/IP 프로토콜에서는, 각 컴퓨터들이 고유한 IP 주소를 가져야만 인터넷에 접속할 수 있다. 조직에서 컴퓨터 사용자들이 인터넷에 접속할 때, IP 주소는 각 컴퓨터에 반드시 할당되어야만 한다. DHCP를 사용하지 않는 경우에는, 각 컴퓨터마다 IP 주소가 수작업으로 입력되어야만 하며, 만약 컴퓨터가 네트웍의 다른 부분에 속한 장소로 이동되면 IP 주소를 새로이 입력해야 한다. DHCP는 네트웍 관리자가 중앙에서 IP 주소를 관리하고 할당하며, 컴퓨터가 네트웍의 다른 장소에 접속되었을 때 자동으로 새로운 IP 주소를 보내줄 수 있게 해준다.


DHCP는 주어진 IP 주소가 일정한 시간동안만 그 컴퓨터에 유효하도록 하는 "임대" 개념을 사용한다. 임대시간은 사용자가 특정한 장소에서 얼마나 오랫동안 인터넷 접속이 필요할 것인지에 따라 달라질 수 있다. DHCP는 사용자들이 자주 바뀌는 학교와 같은 환경에서 특히 유용하다. DHCP는 사용 가능한 IP 주소의 개수보다 더 많은 컴퓨터가 있는 경우에도 IP 주소의 임대시간을 짧게 함으로써 네트웍을 동적으로 재구성할 수 있다.


DHCP는 영구적인 IP 주소를 필요로 하는 웹서버에 대해서는 정적인 주소를 제공한다.


DHCP는 네트웍 IP 관리 프로토콜인 BOOTP의 대안으로 사용된다. DHCP가 더욱 진보된 프로토콜이지만, 두 개의 프로토콜 모두 일반적으로 사용된다. 어떤 조직에서는 두 개의 프로토콜 모두를 사용하지만, 동일한 조직에서 그것을 언제, 어떻게 사용할지를 이해하는 것이 무엇보다 중요하다. 윈도우NT와 같은 몇몇 운영체계에는 DHCP 서버가 딸려 나온다. DHCP 또는 BOOTP 클라이언트는 네트웍이 구성될 수 있도록 각 컴퓨터에 위치하는 프로그램이다


다시 말해 IP를 수동으로 설정하지 않아도 자동으로 설정되기 위해서는 DHCP 서버가 필요하다. 일반 가정집에 공유기에도 이 기능이 존재한다.

.

    • vmlinuz 파일

 vmlinuz 는 리눅스 커널을 컴파일한 결과인 바이너리 파일을 bzImage를 사용하여 gzip으로 압축한 것입니다. 리눅스 부팅시 이 파일은 압축을 해제되며 메모리에 로딩되어 리눅스의 운영이 시작됩니다.


    • initrd.img

 커널 모듈을 모아놓은 이미지로 커널이 로딩되기전에 메모리에 미리 로딩됩니다. 이 모듈은 예를 들어 마우스 드라이버나 그랙픽카드 모듈 등이 있습니다. 인텔 그래픽 카드를 사용하는 본체에 리눅스를 부팅하게되면 initrd.img 의 인텔 그래픽 카드 모듈이 메모리에 로딩됩니다.


    • SYSLINUX

 SYSLINUX는 MS-DOS/Windows FAT 파일 시스템에서 실행 리눅스 운영 체제 용 부트 로더입니다. 그것은 리눅스 처음 설치를 단순화하기위한, 구조 및 기타 특수 목적의 부팅 디스크 생성에 있습니다.

제대로 구성되어 있으면, SYSLINUX는 완전히 원시 부트 플로피 이미지 배포에 대한 필요성을 제거하는 데 사용할 수 있습니다. SYSLINUX 플로피는 그것을 만든 후에는 표준 MS-DOS (또는 MS-DOS 파일 시스템을 액세스의 OS 할 수있는) 도구를 사용하여 조작 할 수 있습니다.

  • pxelinux.0

 syslinux 패키지에 포함되어있는 파일로 대부분의 시스템에는 기본적으로 설치가 되어있다.
pxelinux.0 는 네트워크 부트 로더로 리눅스의 grub 이나 lilo 와 같은 역활을 한다.




  • PXE 서버 구축  필요한것
    - pxe 서버만 딱 구축한다면 컴퓨터를 부팅하고 어떤 리눅스를 설치할 것인지 물어보는 단계까지 작업한 것이다.
    예를 들자면 리눅스를 설치하고 안전모드로 부팅할것인가 표준모드로 부팅할것인가 고르는 이쁘지 않은 UI 있지 않은가 그것까지만 딱 나온다. 설치모드를 선택했을때 pxelinux.cfg/default 에 설정된 설치모드에 연결되어있는 vmlinuz가 실행된다.

프로그램
- DHCP server
- TFTP server


파일 
- syslinux 의 pxelinux.0
- syslinux 의 menu.c32
http://www.kernel.org/pub/linux/utils/boot/syslinux/ 에서 자료를 얻을수 있다.

- vmlinux
- initrd.img
centos 를 설치한다고 예를 들자면 http://ftp.daum.net/centos/6/os/x86_64/isolinux/ (centos 6.0) 에서 얻거나 .iso 로 끝나는 설치파일의 압축을 풀어 얻을수 있다. 각 리눅스에 해당하는 설치파일(iso)를 열어보면 얻을수 있다.

- pxelinux.cfg/default
네트워크 부팅이 수행되고 나오는 메뉴와 설치모드 정의 설정파일이다.

 - 실제 설치파일(리눅스 설치파일인 iso 를 다운받아 압축을 푼 파일들)


  • PXE 네트워크 부팅 과정

 1. DHCP 서버를 찾는다.
 2. DHCP 서버에서 주소를 할당받는다.
 3. DHCP 서버에서 지정된 pxeclient 들에 대한 부팅파일(pxelinux.0) 정보를 얻는다.
 4. TFTP 서버를 통해 pxelinux.0 와 menu.c32 파일을 받는다.
 5. 네트워크 부팅이 이루어지며 /[TFTP 관리디렉토리]/pxelinux.cfg/default 파일에 지정된 메뉴들이 나타난다.
 6. 메뉴들중 하나를 선택하면 설정되어있는 vmlinuz 커널을 메모리에 로딩하며 초기 설치 화면이 나타난다.(initrd.img 은 하드웨어 설정시 필요 모듈을 로드할때 쓰임)

6번이 진행되될때 pxelinux.cfg/default 파일에 kickstart 파일이 지정되어 있다면 바로 자동 설치가 될 것이고
없다면 설정을 하나하나 잡아가야한다.

리눅스 설치파일은 자신이 nfs, ftp 서버를 사용하여도 되지만 이미 공개되어 있는 저장소(예를 들어 ftp.daum.net) 같은 곳을 지정해서 사용해도 된다. 학교나 회사등 외부 네트워크로 접속하기 힘든 경우는 자신이 nfs 나 ftp 서버를 구축하고 설치파일을 자신의 서버에서 배포해야한다.



  • 1. DHCP 설치/설정/실행법

 1. 설치
   redhat 계열(fedora, centos 등) : yum install dhcp
   debian 계열(ubunto 등)           : sudo apt-get install isc-dhcp-server

 2 . 설정 
   설정파일                                : /etc/dhcp/dhcpd.conf

 3. 실행
   redhat 계열(fedora, centos 등) : /etc/init.d/dhcpd start  service start dhcpd.service
   debian 계열(ubunto 등)           : sudo /etc/init.d/isc-dhcp-server restart


파일명 : /etc/dhcp/dhcpd.conf
설정파일 설정과 설명


ddns-update-style ad-hoc;

allow booting;

allow bootp;

default-lease-time 60;

max-lease-time 60;

option subnet-mask              255.255.255.0;

option domain-name-servers      8.8.8.8;

class "pxeclients" {

        match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";

        next-server TFTP서버;

        filename "pxelinux.0";

}

#Windows 클라이언트 클래스 설정 

class "ms-clients" {

        match if substring (option vendor-class-identifier, 0, 4) = "MSFT";

}


# DHCP 서버가 돌고 있는 리눅스 머신 클래스 설정

class "linux-dhcp" {

        match if substring (option vendor-class-identifier, 0, 5) = "Linux";

}

subnet 네트워크주소(ex.192.168.0.0) netmask 255.255.255.0 {

        option routers  GATEWAY주소;

        option broadcast-address 브로드캐스트 주소;

        pool {

                deny members of "ms-clients";

                deny members of "linux-dhcp";                 

                range dynamic-bootp 192.168.0.1 192.168.0.10 ;(dhcp로 할당할 아이피 범위)

        }

}

 설명

option domain-name-servers 는 dns 서버를 뜻한다. ip 8.8.8.8 은 google 의 dns 서버이므로 이값을 써라


빨간색의 부분은 꼭 존재하여야한다.

class "pxeclients" {

        match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";

        next-server TFTP서버;

        filename "pxelinux.0";

}

이 부분은 pxelinux.0 란 부트로더를 지정하는 부분이다. 부트로더의 이름과 이를 가지고 있는 tftp 서버 이다. dhcp와 tftp 서버의 위치가 동일하다면 자기자신의 주소를 쓰면된다.

 subnet 네트워크주소(ex.192.168.0.0) netmask 255.255.255.0 {

        option routers  GATEWAY주소;

        option broadcast-address 브로드캐스트 주소;

        pool {

                deny members of "ms-clients";

                deny members of "linux-dhcp";                 

                range dynamic-bootp 192.168.0.1 192.168.0.10 ;(dhcp로 할당할 아이피 범위)

        }

}

subnet 값은 네트워크주소 즉 자신의 host ip  다시 설명하면 같은 네트워크영역에 존재하는지 판단하기 위한 수단이다.  간단하게는 자신의 ip를 적는다.

netmask 는 같은 네트워크 영역인지 판단하기 위해 bit and 연산하기 위한 값이다. 모르면 그냥 255.255.255.0 적는다.

gateway 주소는 외부로 나가기위한 통로를 말한다. 윈도우의 ipconfig, 리눅스의 ifconfig 로 gateway의 주소를 찾으면 된다.

브로드캐스트 주소는 네트워크 영역에 모든 host 에게 패킷을 전달할때 쓰인다. 모르면 자기자신의 ip에 마지막 주소에 255 적는다. 예를들어 자신의 ip가  192.168.0.1 이면 브로드캐스트 주소는 그냥 192.168.0.255 적는다.

range 는 자동으로 ip를 할당할때 할당해줄 ip 범위이다. 모르면 자신의 ip 가 192.168.0.1 이라면 192.168.0.2 와 192.168.0.200 적는다.


 파일명 : /etc/dhcp/dhcpd.conf 좀더 간단한 설정
위의 설정이 많다면 아래를 적는다. 빨간 부분만 변경한다.

 ddns-update-style none;


# option definitions common to all supported networks...

option domain-name "example.org";

option domain-name-servers 8.8.8.8, 8.8.4.4;

option routers 172.30.1.254;

option subnet-mask 255.255.255.0;


default-lease-time 60;

max-lease-time 72;


log-facility local7;

subnet 172.30.1.0 netmask 255.255.255.0 {

        range 172.30.1.100 172.30.1.200;

}


  • 2. TFTP 설치/설정/실행법

  1. 설치

   redhat 계열(fedora, centos 등) : yum install tftp-server
   debian 계열(ubunto 등)           : sudo apt-get install tftp tftpd

 2 . 설정 
   설정파일                                : /etc/xinetd.d/tftp

 3. 실행
   redhat 계열(fedora, centos 등) : /etc/init.d/xinetd start
   debian 계열(ubunto 등)           : sudo  /etc/init.d/xinetd start

 4. tftp 작업 디렉토리 생성 (이 위치를 잘 기억해두어라.)
   mkdir /tftpboot


 파일명 : /etc/xinetd.d/tftp
TFTP 는 슈퍼데몬 즉 xinetd 기반으로 동작한다.

 service tftp

{

        disable = no

        socket_type             = dgram

        protocol                = udp

        wait                    = yes

        user                    = root

        server                  = /usr/sbin/in.tftpd

        server_args             = -s /tftpboot

        per_source              = 11

        cps                     = 100 2

        flags                   = IPv4

}

 따로 설명은 하지 않겠다.


  • PXE boot 설정
    pxelinux.0 , menu.c32 옮기기

1. syslinux 설치 (syslinux 에 pxelinux.0 가 포함되어 있다.)
   redhat 계열(fedora, centos 등) : yum install syslinux
   debian 계열(ubunto 등)           : sudo apt-get install syslinux syslinux-common
   http://www.kernel.org/pub/linux/utils/boot/syslinux/ 이곳에서 직접 다운로드해도 된다.

2. pxelinux.0 위치
   redhat 계열(fedora, centos 등) : /usr/share/syslinux/pxelinux.0
   debian 계열(ubunto 등)           : /usr/lib/syslinux/pxelinux.0
주의 : 위의 경로가 정확한 것이 아닐수 있다. find 를 이용하여 찾는것이 좋다.

3. pxelinux.0 옮기기
   redhat 계열(fedora, centos 등) : cp  /usr/share/syslinux/pxelinux.0 /tftpboot
   debian 계열(ubunto 등)           : /usr/lib/syslinux/pxelinux.0 /tftpboot
참고 : tftpboot 디렉토리는 tftp의 작업 디렉토리이며 이는 위의 TFTP 설치법에서 설정파일에 지정한 위치이다.

4. menu.c32 옮기기 (설치시 메뉴를 보여주기 위한 파일)
   redhat 계열(fedora, centos 등) : cp  /usr/share/syslinux/ menu.c32  /tftpboot
   debian 계열(ubunto 등)           : /usr/lib/syslinux/ menu.c32  /tftpboot


5. pxelinux.0 파일이 읽어들일 config 파일 생성
   /tftpboot/pxelinux.cfg 디렉토리생성 : mkdir /tftpboot/pxelinux.cfg

   기본 config 파일은 default 이다. /tftpboot/pxelinux.cfg/default
   다른 config 파일이 지정되지 않았다면 default 파일의 설정을 따를 것이다.
   만약 특정 맥어드레스나 특정 네트워크에 있는 클라이언트들에게 특정한 config 파일을 지정하고 싶다면
    /tftpboot/pxelinux.cfg/ 디렉토리에 따로 만들어 주면 된다.
   예를 들어 맥어드레스가  00-0E-0C-66-FC-BE 인 사용자에게만 특정하게 사용할 config 파일을 만들고 싶다면
    /tftpboot/pxelinux.cfg/00-0E-0C-66-FC-BE 의 이름의 설정파일을 만들면 되고
    192.168.0.0 네트워크에 있는 사용자에게만 특정하게 사용할 config 파일은
    /tftpboot/pxelinux.cfg/c0a800 의 이름의 설정파일을 만들면 된다. c0a800 은 192.168.0 의 hex 값이다.

    sh# printf "%02X%02X%02X" 192 168 0 하면 hex 값이 나온다. 아님 계산기를 이용하도록..

 파일명 : /tftpboot/pxelinux.cfg/default


default menu.c32

timeout 100

menu background splash.jpg

menu color border 0 #ffffffff #00000000

menu color sel 7 #ffffffff #ff000000

menu color title 0 #ffffffff #00000000

menu color tabmsg 0 #ffffffff #00000000

menu color unsel 0 #ffffffff #00000000

menu color hotsel 0 #ff000000 #ffffffff

menu color hotkey 7 #ffffffff #ff000000

menu color timeout_msg 0 #ffffffff #00000000

menu color timeout 0 #ffffffff #00000000

menu color cmdline 0 #ffffffff #00000000

menu tabmsg Press ENTER to Install or TAB to edit a menu entry

 

  

menu title ####  OS Installer Boot Menu  ####

label 1 

  menu label CentOS5.7(32bit) on R210

  kernel centos/x86/vmlinuz

  append ksdevice=eth0 initrd=centos/x86/initrd.img network ks=nfs:192.168.0.10:/tftpboot/ks/ks32.cfg text


 설명 :


default menu.c32 의 경우 syslinux 에서 menu.c32 를 옮겨야 이 구성파일이 동작을 한다. 


label 1 

  menu label CentOS5.7(32bit) on R210

  kernel centos/x86/vmlinuz

  append ksdevice=eth0 initrd=centos/x86/initrd.img network ks=nfs:192.168.0.10:/tftpboot/ks/ks32.cfg text

이 부분에서 중요한 부분은 

 kernel centos/x86/vmlinuz 이다. pxe 부팅이 되고 label1 메뉴를 선택했을때 메모리에 로딩될 리눅스 바이너리의 위치이다. 이건 tftp 작업디렉토리 즉 현재 여기서는 tftpboot/ 디렉토리를 기준으로하는 위치이다.

ksdevice=eth0 는 kickstart 파일을 가지고 올 네트워크 인터페이스 선택부이다. 

initrd=centos/x86/initrd.img 리눅스 커널 모듈 지정이다. tftpboot 작업디렉토리를 기준으로 한다.

ks=nfs:192.168.0.10:/tftpboot/ks/ks32.cfg kickstart 파일이 위치하는 곳이다. 여기서는 현재 nfs 로 되어있다.
nfs 뿐만아니라 ftp, http 등 지원한다.

 /tftpboot/pxelinux.cfg/default
menu.c38  을 쓰지 않는 구성파일
위 구성파일과 비슷하지만 모양새가 이쁘지는 않을 것이다.

 timeout=30

default CentOS4

label CentOS4

  kernel CentOS4/vmlinuz

  append ksdevice=link load_ramdisk=1 initrd=CentOS4/initrd.img network ks=nfs:NFS서버주소:/ks/ks.cfg

label CentOS5

  kernel CentOS5/vmlinuz

  append ksdevice=link load_ramdisk=1 initrd=CentOS5/initrd.img network ks=nfs:NFS서버주소:/ks/ks.cfg


  • Kickstart config 파일생성

 kickstart 설정파일은 pxelinux.cfg/default 에 설정해둔 " network ks=nfs:NFS서버주소:/ks/ks.cfg  "이 부분에 위치하게 놔두면 된다. 

http://docs.fedoraproject.org/en-US/Fedora/14/html/Installation_Guide/s1-kickstart2-options.html
fedora kickstart option 메뉴얼입니다.

https://access.redhat.com/knowledge/docs/ko-KR/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/sn-automating-installation.html
anaconda.cfg 즉 fedora(redhat 계열) 를 설치하고 나면 설치시 입력했던 설정파일(kickstart 구성파일)이 자동으로 /root/anaconda.cfg 로 저장된다 이를 이용하면 kickstart 더 쉬워진다. 위의 사이트는 이에 해당하는 내용이다.

아래에는 예제 .cfg 내용이다. 참고하기 바란다.

제일 중요한 부분인
# 예) url --url http://centos.mirror.cdnetworks.com/centos/5.4/os/i386 이 부분은 실제 리눅스 설치파일이 위치하는 경로이다. local 경로일수도 있다. 또한 자신이 만든 nfs 나 ftp 서버에 있는 설치 파일일수도 있고 예시 처럼 centos 미러 사이트일수도 있다.

install //install 할것인지 upgrade 할 것인지 적어준다.

url --url nfs://NFS서버/pub/CentOS/5 //OS설치 이미지의 경로를 적어준다.

lang en_US.UTF-8 //기본적으로 사용할 언어 선택

langsupport --default=ko_KR.UTF-8 en_US.UTF-8 //기본 언어 이외에 추가할 언어 선택

keyboard us //키보드 선택

skipx //X-Windows 환경으로 설치하는것을 skip한다. 

network --device eth0 --bootproto static --ip 192.168.0.100--netmask 255.255.255.0 --gateway 192.168.0.1 --nameserver 192.168.0.200 --hostname www1.abc.com

//네트워크 설정 

rootpw --iscrypted $1$5yAFuaK5$w8CB23gcyKeSZzU/wZbuW1 //설치시 기본 root 패스워드

firewall --disabled //firewall 사용 안함

selinux --disabled //selinux 사용안함

authconfig --enableshadow --enablemd5 //shadow 패스워드 및 md5 사용

timezone Asia/Seoul //서버 시간 설정

bootloader --location=mbr //boot 로더를 어디에 설치할 것인지에 대한 내용이다 MBR 에 설치함.

clearpart --all //기존 모든 파티션을 삭제함. 

part / --fstype ext3 --size=1 --grow --ondisk=sda//grow 옵션은 사용가능한 공간을 모두 사용하겠다는 의미이다. ondisk 옵션은 파티션을 생성할 디스크명 이다.


part swap --size=4000 --ondisk=sda

part /var --fstype ext3 --size=1 --grow --ondisk=sdb


%packages --resolvedeps//설치할 패키지 또는 패키지 그룹

// - 표시는 설치하지 않겠다는 의미이며 앞에 @ 가 붙어있는것은 패키지 그룹을 의미한다.

e2fsprogs

grub

kernel

@ everything

-firefox


%post //패키지 설치 후에 실행할 스크립트

chmod 700 /usr/bin/wget

chkconfig --add mysqld

 #install 또는 upgrade

install

# 설치 모드 지정 (이 옵션이 없으면 그래픽 모드로 설치가 진행 됩니다.)

text 

# 미러링 서버 지정

# 예) url --url http://centos.mirror.cdnetworks.com/centos/5.4/os/i386

# 예) nfs --server=192.168.0.1 --dir=/mnt/md0

nfs --server=192.168.0.10 --dir=/home/centos/x86(or x64)

# 언어선택으로 기본설정 사용. 

# langsupport 에 ko_KR.UTF-8 를 추가해주면 한국어 지원. 

# 예) langsupport --default=en_US.UTF-8 en_US.UTF-8 ko_KR.UTF-8 

lang en_US.UTF-8

langsupport --default=en_US.UTF-8 en_US.UTF-8 ko_KR.UTF-8 

# 키보드 설정 

keyboard us

# 마우스 설정

mouse none

# 네트웍 설정

# dhcp 로 ip를 가져오지 못하면 고정 ip 설정화면이 나옵니다.

# 아래 주석은 여러가지 형태의 네트웍 설정방법을 예로 보여준 것 입니다. 

#network --bootproto dhcp 

#network --bootproto static  

network --device eth0 --bootproto dhcp 

#network --device eth0 --bootproto static --ip 192.168.0.251 --netmask 255.255.255.0 --gateway 192.168.0.1 --nameserver 168.126.63.1 --hostname sunxxx

# root 패스워드 입니다. 원하시는걸로 바꾸시면됩니다. 

rootpw --iscrypted $1$5aH5feJ4$hV4mobHAt8w39MKlqIWOM.

# firewall 설정 단계로 개인적으로 os 설치완료후 설정할 것을 권장합니다. 

firewall --disabled 

# selinux 설정 단계로 완벽하게 이해 하지 못한다면 disabled 하는것을 권장합니다. 

selinux --disabled 

# 시스템에서 사용될 인증 옵션을 설정합니다. 기본값 사용 

authconfig --enableshadow --enablemd5

# timezone 설정

timezone --utc Asia/Seoul

# 부트로더 설정 

bootloader --location=mbr --driveorder=sda --append="rhgb quiet"

# 시스템에 있는 모든 파티션을 삭제 합니다. 

clearpart --initlabel --all

# 파티션을 나눕니다.

part / --fstype ext3 --size=4096 ---ndisk=sda 

part swap --size=8192 ---ndisk=sda 

part /tmp --fstype ext3 --size=4096 ---ndisk=sda

part /var --fstype ext3 --size=10240 ---ndisk=sda

part /usr --fstype ext3 --size=30720 ---ndisk=sda

part /home --fstype ext3 --size=1 --grow ---ndisk=sda

#reboot

# 패키지를 선택합니다. (나머지는 설치 완료 후 yum 으로 설치)

%packages

@development-tools

xinetd 

ntp

net-snmp

net-snmp-devel

# 설치 후 실행할 쉘스크립트

%post

wget -q -O - http://linux.dell.com/repo/hardware/latest/bootstrap.cgi |bash

yum install -y srvadmin-all

cp /etc/modprobe.conf /etc/modprobe.conf.bak

echo "options bnx2 disable_msi=1" >> /etc/modprobe.conf



  • NFS 설치/설정/시작법
    이건 옵션이다. 자신이 설치파일을 자신의 서버에서 배포하고 싶다면 NFS를 설치하고 리눅스 설치파일위치를 export 하며 kicstart 설정파일에 주소를 지정하면 된다. 만약 그렇지 않은 분들은 공개 리눅스 배포처 http://ftp.daum.net 등 미러 사이트들을 사용해도 된다.

  1. 설치

   redhat 계열(fedora, centos 등) : yum install nfs-utils
   debian 계열(ubunto 등)           : sudo apt-get install nfs-kernel-server nfs-common portmap

 2 . 설정 
   설정파일                                : /etc/exports

 3. 실행
   redhat 계열(fedora, centos 등) : /etc/init.d/nfs start service nfs-server start
   debian 계열(ubunto 등)           : sudo /etc/init.d/portmap start , sudo /etc/init.d/nfs-kernel-server start 


파일명 : /etc/exports

 설정 내용

/tftpboot/ks *(ro)
/mount 192.168.0.0/24(ro)

 
설명

/tftpboot/ks *(ro)  : /tftpboot/ks 디렉토리를 모든 ip에 대해 readonly(읽기 전용) 으로 공유

/mount 192.168.0.0/24(ro) : /mount 디렉토리를 192.168.0.~ 에 대해 readonly(읽기 전용) 으로 공유 /24 는 subnetmask 비트수이다. 즉 subnetmask 255.255.255.0 과 같은 말이다.


  • 리눅스 설치 파일 mount 시키고 nfs 를 이용하여 공유시키기
    리눅스 설치 파일은 iso 파일이고 이것을 pxe에서 그냥 사용할 수 없다. iso 파일은 저장공간처럼 디렉토리에 마운트 시킬수 있고 이 마운트된 곳을 nfs 를 이용하여 네트워크 공유시킨다. 그리고 kickstart 설정 파일의 url 부분에 등록해 두면 된다.

 설치 파일 받는 위치
각 리눅스의 미러 사이트들에서 다운 받으면 된다.

http://ftp.daum.net/  (centos , ubuntu 제공)
http://ftp.neowiz.com/fedora/ (fedora)

iso 파일 마운트 시키고 nfs 공유하기

### /mount 디렉토리에 iso 파일 마운트 시키기 
sh# mkdir /mount
sh# mount -t iso9660 -o loop /리눅스iso파일경로/file.iso /mount
### 예를 들어 리눅스 iso 파일이 /down/centos.iso 라면 mount -t iso9660 -o loop /down/centos.iso /mount

### /mount 디렉토리 readonly 로 공유시키기
sh# vi /etc/exports
/mount *(ro,no_root_squash)

### /etc/exports 설정 적용하기
sh# exportfs -a


*** 주의할점은 iso를 mount 한 디렉토리를 nfs 공유시 원격지 클라이언트쪽에서 안의 내용이 안보일때가 있다. 이때는 /etc/exports 에 nfs 공유를 위한 옵션에 no_root_squash 를 주어야한다. 그러면 이제 보일것이다.


  • 실행 순서

 1. xinetd (tftp)
 2. dhcp
 3. protmap
 4. nfs



  • pxe 네트워크 부팅 설치시 노하우

딱히 대단한 노하우도 아니다 그냥 한번 읽어보면 다들 아~~ 나도 생각했어, 혹은 그런 방법이 있었지라고 공감할 것이다.

 tftp 서버가 죽을수도 있다.

pxe 로 많은 장비를 설치하다 보면 커널을 전송해주는 tftp 의 한계로 tftp 가 정상적으로 동작하지 않을 수 있다
이때는 많은 클라이언트가 접속가능하도록 tftp의 xinetd 설정을 바꾼다.

wait , cps , instances, max_load, per_source 값을 조정하기 바란다.

 dhcp 서버를 최대한 활용하라.

많은 장비를 설치하게 되면 dhcp 에서 초기 무작위로 ip를 할당하는데 특정 장비에 특정한 ip를 할당하게 하면 설치후 관리가 편리하다.
dhcp 설정에서는 특정 mac address 를 특정 ip 에 매칭시킬수 있다. 이를 적극활용하라.
자세한 설정 방법은 http://linux.die.net/man/5/dhcpd.conf 와 google 을 이용하자.

 /etc/hosts 배포

호스트들을 일일이 ip로 접근하는 것보다 하나의 hosts 파일을 모든 장비에 전송하여 이름으로 편리하게 관리하자.

 장비 전체를 하나의 장비에서 관리하자.

ssh key 파일을 모든 장비에 전송하는 쉘 프로그램을 만들어 이를 전부 전송하면 ssh 연결에 비밀번호를 요구하지 않고 자동으로 로그인이 가능하다.(키 배포후 최초 한번의 비밀번호만 입력하면 된다.) 이를 이용하여 모든 장비에 동일한 ssh 명령을 내리는 쉘 프로그램만 작성한다면 하나의 장비에서 모든 장비를 관리할 수 있어 매우 편리하다.

또한 ssh 명령 뿐아니라 scp 명령을 모든 장비에 내리는 쉘 프로그램을 만들어 파일 배포시 편리하게 활용할 수 있다.
이를 응용하여 활용하면 전체 장비를 관리하는 다양한 쉘 프로그램을 만들수 있다.

ssh 자동로그인은 http://onecellboy.tistory.com/54 참고바란다.

 hostname 바꾸기

pxe로 설치하면 모든 장비의 hostname 이 동일하다. 이도 전체 장비에 명령을 내리는 쉘 프로그램을 작성하여 한번에 바꿀 수 있다. 이는 미리 만든 /etc/hosts 파일을 활용한 쉘 프로그램이라면 좀더 손쉽게 hostname을 전부 바꿀 수 있다.

 tftp 접속 불가, nfs 접속 불가등

 방화벽을 확인해주시기 바랍니다. 방화벽 룰을 추가하거나 귀찮으면 방화벽을 꺼주십시오.
 redhat 계열 : /etc/init.d/iptables stop
 debian 계열 : sudo service ufw stop  (ufw 는 iptables의 wrapping 유틸입니다.)

결론은 이렇다. 장비를 많이 설치하다보면 장비하나씩 설정하고 파일배포하기가 힘들다. dhcp 서버와 ssh(자동로그인) 를 활용한 쉘 프로그램을 작성하면 보다 편히 많은 장비를 한번에 관리할 수 있다.

반응형