RedHat Linux Standard Install 프로젝트 결과물로서 UEFI, Legacy BIOS 자동 탐색 적용과 메모리에 따른 swap, crash 파티션 용량 자동 계산 스크립트가 적용되었다.

 

1. 준비물

VM : VMWare Workstation (by 10.0.7 build-2844087)

Build Server : RHEL 6.5 64 Bit (VMWare Work Station), RAM 1G

ISO File : rhel-server-6.5-x86_64-dvd.iso, rhel-server-6.6-x86_64-dvd.iso

* VM 구성 및 빌드서버 OS 설치에 관련된 내용은 생략한다.

참고 : UEFI PXE를 위한 grub.efi는 grub package에 포함, Legacy PXE를 위한 pxelinux.0 는 syslinux package에 포함 되어 있다. 또한 bootloader의 옵션은 UEFI와 Legacy에 따라 차이가 많이 난다는 것을 유념 해야한다.

 

2. Kickstart Build Server 구성

2.1. dhcpd 구성

필요 패키지 :

dhcp-4.1.1-38.P1.el6.x86_64

[root@Kicksatrt-server ~]# vim /etc/dhcp/dhcpd.conf
allow bootp;
allow booting;
max-lease-time 60;
default-lease-time 60;
ddns-update-style none;
option domain-name-servers 168.126.63.1, 168.126.63.2;
option pxe-system-type code 93 = unsigned integer 16;

class "PXE" {
     match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
     next-server 192.168.0.140;  # Kickstart 서버 ip
     #filename "pxelinux.0";
     #filename "BOOTX64.efi";
     if option pxe-system-type = 00:07 {
         filename "BOOTX64.efi";
     } else {
         filename "pxelinux.0";
     }
}

subnet 192.168.0.0 netmask 255.255.255.0 {
     option broadcast-address 192.168.0.255;
     option routers 192.168.0.1;  # gateway 지정. 외부망 연결이 필요 없다면 없어도 되고, 만약 라우터의 dhcp 서버가 on 이면 충돌이 나므로 지정하지 않거나 router의 dhcp server를 off로 하고 지정한다.
     option subnet-mask 255.255.255.0;
     range dynamic-bootp 192.168.0.2 192.168.0.99;  # kickstart OS 설치 때 부여받는 dhcp ip 영역
     default-lease-time 21600;
     max-lease-time 43200;
     pool {
           allow members of "PXE";
           range 192.168.0.201 192.168.0.230;  # pxe dhcp ip 영역
     }
}

– dhcpd 서버 : 192.168.0.140

– kickstart 서버의 dhcpd를 구동할 땐 공유기의 dhcpd 기능을 off로 해둔다.

└ on으로 하여도 동작에는 문제가 없다. 하지만 kickstart 서버로 부터 ip를 받지 않을 경우 messages 로그를 통해 dhcp client ip 로그를 확인할 수 없다.

– 라우터(gateway)는 사무실내의 로컬네트워크상의 공유기 192.168.0.1으로 설정 하였으므로 공유기의 dhcp가 off로 되어 있어도 dhcp client 장치들의 인터넷 통신에는 문제가 없다.

 

2.2. tftpd 구성

필요 패키지 :

xinetd-2.3.14-39.el6_4.x86_64

tftp-server-0.49-7.el6.x86_64

[root@Kicksatrt-server ~]# vim /etc/xinetd.d/tftp
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
}

– xinetd 를 통해 tftpd 가 구동 되므로 xinetd가 없으면 먼저 설치를 해야한다.

– /tftpboot 디렉토리를 tftpd 홈 디렉토리로 설정을 하였다.

 

2.3. httpd 구성

필요 패키지 :

httpd-2.2.15-29.el6_4.x86_64

[root@Kicksatrt-server ~]# vim /etc/httpd/conf/httpd.conf
.
.
Alias   /ks    /tftpboot/kickstart
Alias   /redhat6.5   /rhel65
Alias   /redhat6.6   /rhel66

– kickstart cfg 파일과 DVD repo를 웹을 통해 전송 하도록 하였다.

– NFS, FTP 방식으로도 구성이 가능하다.

 

– 위에서 지정한 repo를 위해 아래와 같이 DVD(또는 ISO 파일)를 mount 한다.

[root@Kicksatrt-server ~]# mkdir /rhel65 ; mkdir /rhel66
[root@Kicksatrt-server ~]# mount /dev/sr0 /rhel65
[root@Kicksatrt-server ~]# mount /dev/sr1 /rhel66
[root@Kicksatrt-server ~]# vim /etc/rc.local
mount /dev/sr0 /rhel65/
mount /dev/sr1 /rhel66/

 

2.4. smb 구성

필요 패키지 :

samba-3.6.9-164.el6.x86_64

[root@Kicksatrt-server /]# vim /etc/samba/smb.conf
[Global]
workgroup = WORKGROUP
security = share
map to guest = bad user
#netbios name = kickstart
server string = KickstartServer
load printers = no
printing = bsd
printcap name = /dev/null
disable spoolss = yes

[ISO]
path = /data1/MakeISO
force user = root
force group = root
browsable = no
writable = yes
guest ok = yes
read only = no

– samba는 OS 자동 설치를 위해 없어도 되지만, 생성된 ISO 파일을 Windows PC상의 VMWare 에서 Direct로 잡아서 설치 시 필요한 것이다. 즉, DVD 설치 테스트 시 ISO 파일을 복사하지 않고 바로 잡아서 쓰기 위함.

– /data1/MakeISO 디렉토리는 ISO 파일이 위치하는 곳이다.

 

2.5. service on

[root@Kicksatrt-server ~]# /etc/init.d/dhcpd start; /etc/init.d/xinetd start; /etc/init.d/httpd start; /etc/init.d/smb start

[root@Kicksatrt-server ~]# chkconfig dhcpd on ; chkconfig xinetd on ; chkconfig httpd on ; chkconfig smb on

 

2.6. 디렉토리 구성

디렉토리 생성, 파일 복사 :

[root@Kicksatrt-server ~]# mkdir /tftpboot
[root@Kicksatrt-server ~]# mkdir /tftpboot/kickstart
[root@Kicksatrt-server ~]# mkdir /tftpboot/pic
[root@Kicksatrt-server ~]# mkdir /tftpboot/pxelinux.cfg
[root@Kicksatrt-server ~]# mkdir /tftpboot/redhat6.5
[root@Kicksatrt-server ~]# mkdir /tftpboot/redhat6.6
[root@Kicksatrt-server ~]# cp /rhel65/isolinux/{vmlinuz,initrd.img} /tftpboot/redhat6.5
[root@Kicksatrt-server ~]# cp /rhel66/isolinux/{vmlinuz,initrd.img} /tftpboot/redhat6.6
[root@Kicksatrt-server ~]# cp /rhel65/EFI/BOOT/BOOTX64.efi /tftpboot
[root@Kicksatrt-server ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot

– 기타 부수적인 파일들은 텍스트 파일이기 때문에 직접 만들어서 사용하면 된다.

– /usr/share/syslinux/pxelinux.0 파일은 syslinux-4.02-8.el6.x86_64 패키지에 포함된 파일이다.

/tftpboot 디렉토리 구조 :

[root@Kicksatrt-server /]# tree /tftpboot
/tftpboot
├── BOOTX64.efi
├── efidefault
├── kickstart
│?? ├── basic_65.sh
│?? ├── basic_66.sh
│?? ├── firstcheck.sh
│?? ├── kernel-2.6.32-504.8.1.el6.x86_64.tar.gz
│?? ├── ks65.cfg
│?? ├── ks66.cfg
│?? ├── osinstallcheck.sh
│?? └── sec_20150202.tar
├── menu.c32
├── pic
│?? ├── ost-splash.png
│?? └── ost-splash.xpm.gz
├── pxelinux.0
├── pxelinux.cfg
│?? └── default
├── redhat6.5
│?? ├── initrd.img
│?? └── vmlinuz
├── redhat6.6
│?? ├── initrd.img
│?? └── vmlinuz
└── vesamenu.c32

권한 : # chmod -R 755 /tftboot 필요.

– efidefault

└ UEFI 펌웨어 형태의 부트로드 메뉴다. /tfpboot에 위치

└ tftp를 통해 BOOTX64.efi 파일을 받아서 부트로더 메뉴를 띄운다.

└ 부트메뉴의 배경그림은 pic 디렉토리의 ost-splash.xmp.gz 를 참조

– default

└ Legacy Bios 형태의 부트로드 메뉴다. /tfpboot/pxelinux.cfg에 위치

└ tftp를 통해 pxelinux.0 파일을 받아서 부트로더 메뉴를 띄운다.

└ 부트메뉴의 배경그림은 pic 디렉토리의 ost-splash.png 를 참조

– kickstart

└ apache 설정에 의해 ks 라는 디렉토리로 alias

└ kickstart cfg 파일을 다운 받는 장소

└ %post 작업에 필요한 파일을 다운 받는 장소

– redhat6.5

└ initrd.img : RHEL 6.5의 ramfs 파일이다. 각 OS 버전에 맞는 파일이 필요함.

└ vmlinuz : RHEL 6.5의 압축된 커널 이미지. 각 OS 버전에 맞는 파일이 필요함.

– redhat6.6

└ initrd.img : RHEL 6.6의 ramfs 파일이다. 각 OS 버전에 맞는 파일이 필요함.

└ vmlinuz : RHEL 6.6의 압축된 커널 이미지. 각 OS 버전에 맞는 파일이 필요함.

– munu.c32, vesamenu.c32

└ 별도의 (ost-splash.png, ost-splash.xpm.gz)을 사용하였기 때문에 해당 파일은 없어도 된다.

└ 두 파일은 /usr/share/syslinux 디렉토리에 위치해 있다.

 

2.7. efidefault 내용

[root@Kicksatrt-server ~]# vim /tftpboot/efidefault
default 0
timeout 10
hiddenmenu
splashimage (nd)/pic/ost-splash.xpm.gz

title Boot local hard drive
      root (hd0,0)
      chainloader /EFI/redhat/grub.efi

title RHEL 6.5
      root (nd)
      kernel /redhat6.5/vmlinuz ks=http://192.168.0.140/ks/ks65.cfg ksdevice=link
      initrd /redhat6.5/initrd.img

title RHEL 6.6
      root (nd)
      kernel /redhat6.6/vmlinuz ks=http://192.168.0.140/ks/ks66.cfg ksdevice=link
      initrd /redhat6.6/initrd.img

– efidefault 와 defualt 는 부트로더 메뉴 설정은 차이가 있으므로 주의 할 것.

└ append 옵션이 들어가거나, root (nd) 설정 등이 빠지면 부팅이 안 된다.

└ timeout, default 와 같은 옵션의 파라미터도 다르게 쓰인다.

└ chainloder는 legacy(default)의 localboot 와 같은 옵션이다.

– 원인은 모르지만 PXE 부팅 후 UEFI 부트로더를 통해서는 로컬 디스크 부팅이 안된다.

└ 아래와 같은 메시지가 발생을 하면서 되지 않는다.

   file path : /File(\efi\redhat\)/File(grub.efi)/EndEntire

└ 아래 레드햇 사이트를 참조하였으나 부팅 안 됨.

   https://access.redhat.com/solutions/629813

└ 특이하게도 Custom DVD로는 로컬 디스크 부팅이 정상적으로 된다.

 

2.8. default 내용

[root@Kicksatrt-server ~]# vim /tftpboot/pxelinux.cfg/default
default vesamenu.c32
timeout 100

menu tabmsg Press ENTER to Install or TAB to edit a menu entry
menu background pic/ost-splash.png

menu title ####  OS Installer Boot Menu  ####
label 0
  menu label Boot local hard drive
  LOCALBOOT 0

label RHEL 6.5
  kernel /redhat6.5/vmlinuz
  append ksdevice=link load_ramdisk=1 initrd=/redhat6.5/initrd.img network ks=http://192.168.0.140/ks/ks65.cfg

label RHEL 6.6
  kernel /redhat6.6/vmlinuz
  append ksdevice=link load_ramdisk=1 initrd=/redhat6.6/initrd.img network ks=http://192.168.0.140/ks/ks66.cfg

 

2.9. kickstart cfg 파일 작성

– 각 옵션에 대한 설명은 cfg 파일 내용의 주석 부분을 참고 할 것.

– rhel 6.6은 그에 맞게 ks66.cfg 파일명으로 하고 파일 내용도 65 -> 66, 6.5 -> 6.6 으로 수정 적용하면 된다.

[root@Kicksatrt-server ~]# vim /tftpboot/kickstart/ks65.cfg
## Install 진행
install

## kickstart 진행을 text 모드로
text

## 설치 매체 설정
url --url http://192.168.0.140/redhat6.5
# cd롬을 매체로 설치시엔 cdrom을 지정
#cdrom

## redhat subscription 설정
#key --skip은 skip, key 서브스크립션 넘버는 등록 옵션
key --skip

## 언어설정
# 참고 : ko_KR.eucKR 으로 지정하면 설치 시 글자가 깨지지만 설치 완료 후 OS 구동시엔 글자가 깨지는 문제가 발생하지 않음.
lang ko_KR.UTF-8
#lang ko_KR.eucKR
#lang en_US.UTF-8
#langsupport ko_KR --default=en_US
#langsupport en_US --default=ko_KR

## 입력장치 설정
keyboard us
#mouse none

## 네트워크와 기타 설정들
network --device link --bootproto dhcp --noipv6 --hostname Sample-local
rootpw !test123
firewall --disabled
# minimal 설치를 할 경우 RHEL 6.6부터는 아래와 같은 설정으로는 selinux disable 이 되지 않는다. %post 작업에 넣음.
selinux --disabled
authconfig --enableshadow --passalgo=sha512

## 시간대 설정. 글로벌 서비스를 위한 서버의 경우 UTC를 GMT 기준으로 맞춘다.
#timezone Asia/Seoul
#timezone --utc Asia/Seoul
#timezone --utc Etc/GMT
timezone --utc Etc/GMT


##### 디스크 설정 부분 설명 #####
# %pre 부분에 선언 됨 #

## 부트로더 설치 위치와 커널 옵션
#printk.time=1 은 dmesg의 timestamp 적용
# ex)
#bootloader --location=mbr --driveorder=sda --append="crashkernel=auto printk.time=1"

## Disk 초기화
# OS가 설치될 sda disk를 초기화 시킨다. zerombr과 ignoredisk 옵션이 빠지면 새 disk의 경우 kickstart 도중 disk를 initialaze 하라는게 나와서 자동 진행을 방해한다.
# HP DL360 장비의 경우 디스크가 레이드컨트롤러 디바이스명인 /dev/cciss 로 잡히므로 ignoredisk 에서 sda로 하면 kickstart 도중 에러가 발생한다. DL380 부터는 레이드볼륨이 /dev/sda로 잡히므로 괜찮다.
#zerombr
#clearpart --initlabel --all

## 만약 실수로 USB 메모리 한개만 꽂고서 kickstart 진행을 했을 경우 sda 장치로 잡히는 USB 메모리의 파티션 초기화를 방지한다.
# USB 메모리를 통한 설치 방법에 해당된다.
#ignoredisk --only-use=sda
##### 디스크 설정 부분 설명 끝 #####

## 설치 후 전원 off
# 설치가 모든 끝난 시스템은 전원이 꺼지도록해서 진행이 모두 끝났음을 쉽게 알 수 있도록 한다.
# kickstart의 맨 마지막 작업으로 kickstart 설정 파일에서의 라인 위치에 상관 없이 마지막에 동작한다.
# 원인은 모르지만 %pre 설정 아래에 poweroff 또는 shutdown 설정을 할 경우, 시스템의 전원이 꺼지지 않고 reboot이 된다. 따라서 %pre 구문이 있을 경우에는 %pre 구문 위에 위치 시킬 것.
poweroff

## Disk partitioning
# kickstart 수행 전 사전작업(pre)으로 파티셔닝 작업을 한다.
# UEFI 지원 시스템일 경우 자동으로 bootloader의 위치를 partition으로 하고 /boot/efi 파티션을 vfat으로 생성하도록 적용하였다.
# UEFI : /boot/efi/EFI/redhat/ 디렉토리에는 EFI 어플리케이션으로 EFI 펌웨어 아키텍처 용으로 컴파일된 GRUB 버전 grub.efi가 들어있다. 서버 설치 후 df로 확인시 300KB 미만을 사용한다.
#        기본적으로 EFI 부트 관리자는 디폴트 부트로더로 grub.efi를 선택하고 이를 메모리로 불러온다.
#        레드햇 권고 /boot/efi 파티션 사이즈 : 200MB
#        -> The /boot/efi partition should be at least 50 MB in size; its recommended size is 200 MB.
# boot : /boot 파티션은 200MB ~ 1GB 사이즈가 레드햇 권장이다.
# kdump: /var/crash 파티션은 레드햇 권장치인 "메모리 크기 * 1.3" 사이즈로 잡는다.
# swap : - 레드햇 공식 문서에서는 RHEL6, RHEL7 OS를 기준으로 아래와 같이 권장한다.
#        * 2G 미만 시스템은 2배
#        * 2 ~ 8G는 동일 용량
#        * 8G 이상 시스템은 최소 4G보다 크면된다.
#        - 서버의 RAM을 확인하여 이 기준으로 자동으로 적용되도록 한다. 이 기준은 S사 시스템을 위한 기준치다.
#        1) 2G  이하 : "메모리 사이즈 * 2"로 설정
#        2) 2 ~ 64G  : 16G로 설정
#        3) 64G 이상 : 32G로 설정 (아래 스크립트에서 64G RAM을 63000(63G)로 기준으로 한 이유는 일부 시스템의 경우 VGA에 Share한 메로리로 인해 실제 RAM 사이즈보다 작을 수도 있기 때문)
# 참고 : kickstart config 옵션은 = 기호가 빠져도 구동에 문제가 없다. 예로 --size=512 와 --size 512 는 동일하다. 마찬가지로 efidefault와 같은 config 파일도 = 이 빠져도 동일한 동작을 한다.
#        %pre 구문은 %end로 막지 않으면 %pre를 실행하기도 전에 그 다음 구문들이 실행되어 버린다. 따라서 꼭 %end로 막을 것.
#        %include는 설치 때 임시 디렉토리인 /tmp 디렉토리에 임시로 파일을 생성하게 해준다. 파일에 기록된 파티션 정보를 바탕으로 파티셔닝을 해준다.
%include /tmp/part-include
%pre
#!/bin/sh
# Script Code By OST(Open Source Technology Co.)
## Define Partition Size (variable) - 아래 파티션 사이즈(5가지)를 원하는 만큼 MB 단위로 설정한다.
# 참고 : /home을 파티셔닝 하려면 Partion Create - Function 부분의 home 을 주석 해제 할 것.
BOOTSIZE=1024
ROOTSIZE=30720
VARSIZE=15360
USRSIZE=15360
HOMESIZE=10240
## Automatic Partition Script
# MEM Info and Sizing - Function
GatherSizing () {
    MEMINFO=$(cat /proc/meminfo | grep MemTotal | awk -F " " '{print $2}')
    MEMSIZE=$(($MEMINFO / 1024))
    CRASHSIZE=$(echo "$MEMSIZE 1.3" | awk '{printf "%.f", $1 * $2}')
    SWAPSIZE1=$(($MEMINFO / 1024 * 2))
    SWAPSIZE2=$(echo "16384")
    SWAPSIZE3=$(echo "32768")
}
# Clear Disk - Function
Clearing () {
    echo "zerombr" >> /tmp/part-include
    echo "ignoredisk --only-use sda" >> /tmp/part-include
    echo "clearpart --initlabel --all" >> /tmp/part-include
}
# UEFI System Boot Create - Function
PartitioningEfiBoot () {
    echo "bootloader --location partition --driveorder sda" >> /tmp/part-include
    echo "part /boot --fstype ext4 --size $BOOTSIZE" >> /tmp/part-include
    echo "part /boot/efi --fstype vfat --size 256" >> /tmp/part-include
}
# Legacy system Boot Create - Function
PartitioningLegacyBoot () {
    echo "bootloader --location mbr --driveorder sda" >> /tmp/part-include
    echo "part /boot --fstype ext4 --size $BOOTSIZE" >> /tmp/part-include
}
# Partion Create - Function
PartitioningCommon () {
    echo "part pv.01 --size 1 --grow" >> /tmp/part-include
    echo "volgroup rootvg pv.01" >> /tmp/part-include
    echo "logvol / --fstype ext4 --vgname rootvg --size $ROOTSIZE --name rootlv" >> /tmp/part-include
    if [ $MEMSIZE -le 2048 ]; then
        echo "logvol swap --fstype swap --vgname rootvg --size $SWAPSIZE1 --name swaplv" >> /tmp/part-include
    elif [ $MEMSIZE -ge 63000 ]; then
        echo "logvol swap --fstype swap --vgname rootvg --size $SWAPSIZE3 --name swaplv" >> /tmp/part-include
    else
        echo "logvol swap --fstype swap --vgname rootvg --size $SWAPSIZE2 --name swaplv" >> /tmp/part-include
    fi
    echo "logvol /var --fstype ext4 --vgname rootvg --size $VARSIZE --name varlv" >> /tmp/part-include
    echo "logvol /var/crash --fstype ext4 --vgname rootvg --size $CRASHSIZE --name crashlv" >> /tmp/part-include
    echo "logvol /usr --fstype ext4 --vgname rootvg --size $USRSIZE --name usrlv" >> /tmp/part-include
    #echo "logvol /home --fstype ext4 --vgname rootvg --size $HOMESIZE --name homelv" >> /tmp/part-include
}
# Action
if [ -d /sys/firmware/efi ] ; then
    GatherSizing;
    Clearing;
    PartitioningEfiBoot;
    PartitioningCommon;
else
    GatherSizing;
    Clearing;
    PartitioningLegacyBoot;
    PartitioningCommon;
fi
%end

## Partitioning Sample
#part /boot --fstype ext4 --size=512
#part /boot/efi --fstype efi --size=128
#part pv.01 --size=1 --grow
#volgroup rootvg pv.01
#logvol swap --fstype swap --vgname=rootvg --size=16384 --name=swaplv
#logvol / --fstype ext4 --vgname=rootvg --size=30720 --name=rootlv
#logvol /var --fstype ext4 --vgname=rootvg --size=15360 --name=varlv
#logvol /var/crash --fstype ext4 --vgname=rootvg --size=157286 --name=crashlv
#logvol /usr --fstype ext4 --vgname=rootvg --size=15360 --name=usrlv
#logvol /home --fstype ext4 --vgname=rootvg --size=30720 --name=homelv
#logvol /oracle11 --fstype ext4 --vgname=rootvg --size=51200 --name=oracle11lv
#logvol /data --fstype ext4 --vgname=rootvg --size=1 --grow --name=lv_data

## yum repo 지정
#cd 사용시
#repo --name="Red Hat Enterprise Linux" --baseurl=file:///mnt/source --cost=100
#network 사용시
repo --name="Red Hat Enterprise Linux" --baseurl=http://192.168.0.140/redhat6.5 --cost=100

## kickstart 설치 후 Graphic 모드로 사용하기
# --startxonboot 를 지정 안하면 /etc/inittab에 id:3 으로 지정이 된다.
#xconfig --startxonboot --defaultdesktop=GNOME

## 패키지 설치 부분.
# @basic-desktop, @fonts, @x11은 x-window(gnome) 설치를 하기 위한 옵션이다.
# packages에 어떤걸 넣어야 될지 잘 모를때는 DVD로 원하는 패키지들을 수동 설치 후 /root/anaconda-ks.cfg 파일을 참조할 것.
# Base 설치 + 추가 패키지 설치이다.
#%packages
#@additional-devel
#@base
#@client-mgmt-tools
#@console-internet
#@core
#@debugging
#@development
#@directory-client
#@british-support
#@storage-client-fcoe
#@hardware-monitoring
#@java-platform
#@korean-support
#@large-systems
#@legacy-unix
#@network-file-system-client
#@performance
#@perl-runtime
#@server-platform
#@server-platform-devel
#@server-policy
#libXinerama-devel
#xorg-x11-proto-devel
#startup-notification-devel
#libgnomeui-devel
#libbonobo-devel
#libXau-devel
#libgcrypt-devel
#popt-devel
#libXrandr-devel
#libxslt-devel
#libglade2-devel
#gnutls-devel
#mtools
#pax
#python-dmidecode
#oddjob
#sgpio
#device-mapper-persistent-data
#systemtap-client
#jpackage-utils
#samba-winbind
#certmonger
#pam_krb5
#krb5-workstation
#tcp_wrappers
#perl-DBD-SQLite
#%end
# minimal 설치를 위함, --nobase 옵션을 줘야 최소 설치가 된다.
%packages --nobase
@korean-support
@server-policy
%end

## 설치 후 DVD를 통해 후 작업
# package 까지 설치한 뒤 후 작업이다. 아래는 OS가 설치되는 disk의 /root 디렉토리에 파일들 copy 작업을 한다.
# kickstat로 OS 설치 후 작업이다. --nochroot는 설치 시점의 임시 쉘로 작업하는 것이다.
#%post --nochroot
#(
#  echo
#  [ -d /mnt/source ] || mkdir /mnt/source
#  mount -o ro /tmp/cdrom /mnt/source
#  cp -a /mnt/source/ks/basic_66.sh /mnt/sysimage/root/
#  cp -a /mnt/source/ks/osinstallcheck.sh /mnt/sysimage/root/
#  cp -a /mnt/source/ks/kernel-2.6.32-504.30.3.el6.x86_64.tar.gz /mnt/sysimage/root/
#  cp -a /mnt/source/ks/sec_20150908.tar.gz /mnt/sysimage/root/
#  cp -a /mnt/source/* /mnt/sysimage/root/rhel65/
#  umount /mnt/source
#) >> /mnt/sysimage/root/postnochroot

# 아래는 --nochroot 없이 chroot(설치된 OS의 쉘상태)로 작업하는 것이다. %post --nochroot 를 통해 file copy를 구지 하지 않아도 된다.
# 설치 화면에서 Alt + F2를 눌러 쉘로 진입 후 chroot /mnt/sysimage 명령을 하여 진행하는 것과 같다.
#%post
#mount /dev/sr0 /mnt
#cp -a /mnt/ks/basic_66.sh /root
#cp -a /mnt/ks/osinstallcheck.sh /root
#cp -a /mnt/ks/kernel-2.6.32-504.30.3.el6.x86_64.tar.gz /root
#cp -a /mnt/ks/sec_20150908.tar.gz /root
#cat > /etc/yum.repos.d/rhel65.repo << EOF
#[rhel]
#name=rhel6
#baseurl=http://192.168.0.140/redhat6.5
#gpgcheck=0
#yum install -y bzip ethtool man-pages man-pages-overrides ntp ntpdate openssh-clients sos sysstat unzip vim-enhanced zip nfs-utils rpcbind xinetd tcp_wrappers
#rm -f /etc/yum.repos.d/rhel66.repo
#chmod 700 /root/basic_66.sh
#chmod 700 /root/osinstallcheck.sh
#sh /root/basic_66.sh
#rm -f /root/basic_66.sh
#sed -i '/^%pre/,/^%end/d;/^%post/,/^%end/d' /root/anaconda-ks.cfg
#sed -i -e 's/\(^SELINUX=\)enforcing$/\1disabled/' /etc/selinux/config

# 설치 후 network를 통해 후 작업
%post
cat > /etc/yum.repos.d/rhel65.repo << EOF
[rhel]
name=rhel6
baseurl=http://192.168.0.140/redhat6.5
gpgcheck=0
EOF
# minimal 설치 시 부수적인 패키지 설치이다. Base 설치라면 아래 yum 라인은 주석처리 해도 된다.
yum install -y bzip ethtool man-pages man-pages-overrides ntp ntpdate openssh-clients sos sysstat zip unzip vim-enhanced nfs-utils rpcbind xinetd tcp_wrappers
rm -f /etc/yum.repos.d/rhel65.repo
sed -i '/^%pre/,/^%end/d;/^%post/,/^%end/d' /root/anaconda-ks.cfg
sed -i -e 's/\(^SELINUX=\)enforcing$/\1disabled/' /etc/selinux/config
%end

– BIOS 펌웨어 형태가 UEFI, Legacy 인지 판별하여 자동으로 그에 맞게 파티셔닝을 하도록 스크립트 적용

– UEFI 모드로 설치 시엔 GPT 파티션 테이블을 사용하므로 확장 파티션이 빠지게 된다.

– 서버의 물리 메모리 크기를 확인하여 swap, crash 파티션을 자동 계산되도록 스크립트 적용

 

만약 LVM을 사용하지 않는다면 파티션 부분의 함수 3개의 내용을 아래와 같이 적용해야 한다.

PartitioningEfiBoot () {
    echo "bootloader --location partition --driveorder sda" >> /tmp/part-include
    echo "part /boot --fstype ext4 --size $BOOTSIZE --asprimary" >> /tmp/part-include
    echo "part /boot/efi --fstype vfat --size 256 --asprimary" >> /tmp/part-include
    if [ $MEMSIZE -le 2048 ]; then
        echo "part swap --fstype swap --size $SWAPSIZE1" >> /tmp/part-include
    elif [ $MEMSIZE -ge 63000 ]; then
        echo "part swap --fstype swap --size $SWAPSIZE3" >> /tmp/part-include
    else
        echo "part swap --fstype swap --size $SWAPSIZE2" >> /tmp/part-include
    fi
}
PartitioningLegacyBoot () {
    echo "bootloader --location mbr --driveorder sda" >> /tmp/part-include
    echo "part /boot --fstype ext4 --size $BOOTSIZE --asprimary" >> /tmp/part-include
     if [ $MEMSIZE -le 2048 ]; then
        echo "part swap --fstype swap --size $SWAPSIZE1 --asprimary" >> /tmp/part-include
    elif [ $MEMSIZE -ge 63000 ]; then
        echo "part swap --fstype swap --size $SWAPSIZE3 --asprimary" >> /tmp/part-include
    else
        echo "part swap --fstype swap --size $SWAPSIZE2 --asprimary" >> /tmp/part-include
    fi
}
PartitioningCommon () {
    echo "part / --fstype ext4 --size $ROOTSIZE --asprimary" >> /tmp/part-include
    echo "part /var --fstype ext4 --size $VARSIZE" >> /tmp/part-include
    echo "part /var/crash --fstype ext4 --size $CRASHSIZE" >> /tmp/part-include
    echo "part /usr --fstype ext4 --size $USRSIZE" >> /tmp/part-include
    # 나머지 파티션은 LVM(PV) 구성(아래 한 줄)
    echo "part pv.01 --size 1 --grow" >> /tmp/part-include
    #echo "logvol /home --fstype ext4 --vgname rootvg --size $HOMESIZE --name homelv" >> /tmp/part-include
}

 

2.10. OS 설치 테스트

PXE 부팅을 우선순위로 두고 OS를 설치하면 된다.

– UEFI 모로 부팅하여 설치 시 부트로더 메뉴가 보이기 까지, 그리고 vmlinux 압축해제가 느리다.(Legacy 모드 대비하여)

└ 아래와 같이 메모리 할당 정보가 모니터에 찍힌다.(일부 VM에 따라서는 안 찍힐 수도 있다.)

Cap 2015-09-14 17-55-27-155

 

– 아래는 Legacy 모드로 부팅 시 부트로더 화면이다.

Cap 2015-09-14 17-57-49-868

 

3. Custom DVD 제작

3.1. DVD 마운트

– 아래는 물리 DVD ROM을 마운트 하였으나, ISO 파일로도 마운트 할 수 있다.

[root@Kicksatrt-server ~]# mkdir /rhel65 ; mkdir /rhel66
[root@Kicksatrt-server ~]# mount /dev/sr0 /rhel65
[root@Kicksatrt-server ~]# mount /dev/sr1 /rhel66

– 부팅 후 자동 마운트 적용

[root@Kicksatrt-server ~]# vim /etc/rc.local
mount /dev/sr0 /rhel65/
mount /dev/sr1 /rhel66/

 

3.2. 마운트 상태 확인

[root@Kicksatrt-server /]# df -h
Filesystem                              Size  Used Avail Use% Mounted on
/dev/mapper/vg_kicksatrtserver-lv_root   18G   15G  1.8G  90% /
tmpfs                                   1.9G     0  1.9G   0% /dev/shm
/dev/sda1                               485M   39M  421M   9% /boot
/dev/sr0                                3.6G  3.6G     0 100% /rhel65
/dev/sr1                                3.6G  3.6G     0 100% /rhel66
/dev/mapper/vg00-data1                   30G   12G   17G  40% /data1

 

3.3. DVD 복사

[root@Kicksatrt-server ~]# mkdir /data1/custom-rhel66

[root@Kicksatrt-server ~]# rsync -av /rhel66/ /data1/custom-rhel66
.
.

[root@Kicksatrt-server ~]# ls -la /data1/custom-rhel66
total 500
dr-xr-xr-x 14 root root   4096 Sep 11 03:22 .
drwxrwxrwx  5 root root   4096 Sep 15 01:38 ..
-r--r--r--  1 root root     56 Sep 26  2014 .discinfo
dr-xr-xr-x  3 root root   4096 Sep 26  2014 EFI
-r--r--r--  1 root root   8724 Nov  8  2012 EULA
-r--r--r--  1 root root  10726 Nov  8  2012 EULA_de
-r--r--r--  1 root root   8724 Nov  8  2012 EULA_en
-r--r--r--  1 root root  10846 Nov  8  2012 EULA_es
-r--r--r--  1 root root  10682 Nov  8  2012 EULA_fr
-r--r--r--  1 root root  10497 Nov  8  2012 EULA_it
-r--r--r--  1 root root  13173 Nov  8  2012 EULA_ja
-r--r--r--  1 root root   9841 Nov  8  2012 EULA_ko
-r--r--r--  1 root root  10033 Nov  8  2012 EULA_pt
-r--r--r--  1 root root   7306 Nov  8  2012 EULA_zh
-r--r--r--  1 root root  18092 Jun 30  2010 GPL
dr-xr-xr-x  3 root root   4096 Sep 26  2014 HighAvailability
dr-xr-xr-x  3 root root   4096 Sep 26  2014 images
dr-xr-xr-x  2 root root   4096 Sep 11 03:25 isolinux
drwxr-xr-x  2 root root   4096 Sep 14 21:44 ks
dr-xr-xr-x  3 root root   4096 Sep 26  2014 LoadBalancer
-r--r--r--  1 root root    114 Sep 26  2014 media.repo
dr-xr-xr-x  2 root root 266240 Sep 26  2014 Packages
-r--r--r--  1 root root  16435 Sep  2  2010 README
dr-xr-xr-x 25 root root   4096 Sep 26  2014 release-notes
dr-xr-xr-x  2 root root   4096 Sep 26  2014 repodata
dr-xr-xr-x  3 root root   4096 Sep 26  2014 ResilientStorage
-r--r--r--  1 root root   3375 Sep 15  2014 RPM-GPG-KEY-redhat-beta
-r--r--r--  1 root root   3211 Sep 15  2014 RPM-GPG-KEY-redhat-release
dr-xr-xr-x  3 root root   4096 Sep 26  2014 ScalableFileSystem
dr-xr-xr-x  3 root root   4096 Sep 26  2014 Server
-r--r--r--  1 root root   3757 Sep 26  2014 TRANS.TBL
-r--r--r--  1 root root   2742 Sep 26  2014 .treeinfo

– .discinfo 와 .treeinfo 파일이 꼭 있어야 한다. 그렇지 않으면 부팅이 안된다.(복사할 때 주의)

– EFI 디렉토리 : UEFI 부팅 관련 파일들 위치

– isolinux 디렉토리 : Legacy Bios 부팅 관련 파일들 위치

– ks 디렉토리 : kickstart 관련 config 파일들 위치

 

– EFI 부트로더 관련 디렉토리 내 파일들

[root@Kicksatrt-server ~]# ls -la /data1/custom-rhel66/EFI/BOOT/
total 296
dr-xr-xr-x 2 root root   4096 Sep 11 03:24 .
dr-xr-xr-x 3 root root   4096 Sep 26  2014 ..
-rwxr-xr-x 1 root root    765 Sep 11 03:24 BOOTX64.conf
-r-xr-xr-x 1 root root 253736 Aug 30  2014 BOOTX64.efi
-rw-r--r-- 1 root root  22803 Sep 11 03:24 ost-splash.xpm.gz
-r--r--r-- 1 root root   1341 May  7  2010 splash.xpm.gz
-r--r--r-- 1 root root    672 Sep 26  2014 TRANS.TBL

– BOOTX64.conf : EFI 펌웨어 모드에서의 부트로더 메뉴

– ost-splash.xpm.gz : 부트로더의 배경 그림(custom)

 

3.4. 부트로더메뉴 설정

– EFI 부트로더 메뉴 BOOTX64.conf 파일의 설정 내용

[root@Kicksatrt-server ~]# vim /data1/custom-rhel66/EFI/BOOT/BOOTX64.conf
default=0
splashimage=/EFI/BOOT/ost-splash.xpm.gz
hiddenmenu

title Boot local hard drive
      root (hd0,0)
      chainloader /EFI/redhat/grub.efi

title custom-rhel66-standard-ko installed system
      kernel /images/pxeboot/vmlinuz ks=cdrom:/ks/ks66_standard_ko.cfg
      initrd /images/pxeboot/initrd.img

title custom-rhel66-standard-en installed system
      kernel /images/pxeboot/vmlinuz ks=cdrom:/ks/ks66_standard_en.cfg
      initrd /images/pxeboot/initrd.img

title Red Hat Enterprise Linux 6.6
      kernel /images/pxeboot/vmlinuz
      initrd /images/pxeboot/initrd.img

title Install system with basic video driver
      kernel /images/pxeboot/vmlinuz xdriver=vesa nomodeset askmethod
      initrd /images/pxeboot/initrd.img

title rescue
      kernel /images/pxeboot/vmlinuz rescue askmethod
      initrd /images/pxeboot/initrd.img

– Language 설정에 따라 선택할 수 있도록 ko, en 으로 메뉴를 나눔

– timeout을 뺌으로서 메뉴 엔터 입력이 없으면 메뉴에 계속 머무름

– splashimage 를 ost-splash.xpm.gz 로 지정하여 부트로더에 custom 배경화면을 적용

 

– Legacy BIOS 부트로더 메뉴 BOOTX64.conf 파일의 설정 내용

[root@Kicksatrt-server ~]# vim /data1/custom-rhel66/isolinux/isolinux.cfg
default vesamenu.c32

menu tabmsg Press ENTER to Install or TAB to edit a menu entry
menu background ost-splash.png

label custom-rhel66-standard-ko
  menu label ^custom-rhel66-standard-ko installed system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/ks/ks66_standard_ko.cfg

label custom-rhel66-standard-en
  menu label ^custom-rhel66-standard-en installed system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/ks/ks66_standard_en.cfg

label linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img

label vesa
  menu label Install system with ^basic video driver
  kernel vmlinuz
  append initrd=initrd.img xdriver=vesa nomodeset

label rescue
  menu label ^Rescue installed system
  kernel vmlinuz
  append initrd=initrd.img rescue

label local
  menu label Boot from ^local drive
  localboot 0xffff

label memtest86
  menu label ^Memory test
  kernel memtest
  append -

– Language 설정에 따라 선택할 수 있도록 ko, en 으로 메뉴를 나눔

– timeout을 뺌으로서 메뉴 엔터 입력이 없으면 메뉴에 계속 머무름

 

– kickstart config 내용

[root@Kicksatrt-server ~]# vim /data1/custom-rhel66/ks/ks66_standard_en.cfg
install
text
cdrom
key --skip
lang en_US.UTF-8
keyboard us
network --device link --bootproto dhcp --noipv6 --hostname Sample-local
rootpw imsi00
firewall --disabled
selinux --disabled
authconfig --enableshadow --passalgo=sha512
timezone Asia/Seoul
poweroff
%include /tmp/part-include
%pre
#!/bin/sh
BOOTSIZE=1024
ROOTSIZE=30720
VARSIZE=15360
USRSIZE=15360
HOMESIZE=10240
GatherSizing () {
    MEMINFO=$(cat /proc/meminfo | grep MemTotal | awk -F " " '{print $2}')
    MEMSIZE=$(($MEMINFO / 1024))
    CRASHSIZE=$(echo "$MEMSIZE 1.3" | awk '{printf "%.f", $1 * $2}')
    SWAPSIZE1=$(($MEMINFO / 1024 * 2))
    SWAPSIZE2=$(echo "16384")
    SWAPSIZE3=$(echo "32768")
}
Clearing () {
    echo "zerombr" >> /tmp/part-include
    echo "ignoredisk --only-use sda" >> /tmp/part-include
    echo "clearpart --initlabel --all" >> /tmp/part-include
}
PartitioningEfiBoot () {
    echo "bootloader --location partition --driveorder sda" >> /tmp/part-include
    echo "part /boot --fstype ext4 --size $BOOTSIZE --asprimary" >> /tmp/part-include
    echo "part /boot/efi --fstype vfat --size 256 --asprimary" >> /tmp/part-include
    if [ $MEMSIZE -le 2048 ]; then
        echo "part swap --fstype swap --size $SWAPSIZE1" >> /tmp/part-include
    elif [ $MEMSIZE -ge 63000 ]; then
        echo "part swap --fstype swap --size $SWAPSIZE3" >> /tmp/part-include
    else
        echo "part swap --fstype swap --size $SWAPSIZE2" >> /tmp/part-include
    fi
}
PartitioningLegacyBoot () {
    echo "bootloader --location mbr --driveorder sda" >> /tmp/part-include
    echo "part /boot --fstype ext4 --size $BOOTSIZE --asprimary" >> /tmp/part-include
     if [ $MEMSIZE -le 2048 ]; then
        echo "part swap --fstype swap --size $SWAPSIZE1 --asprimary" >> /tmp/part-include
    elif [ $MEMSIZE -ge 63000 ]; then
        echo "part swap --fstype swap --size $SWAPSIZE3 --asprimary" >> /tmp/part-include
    else
        echo "part swap --fstype swap --size $SWAPSIZE2 --asprimary" >> /tmp/part-include
    fi
}
PartitioningCommon () {
    echo "part / --fstype ext4 --size $ROOTSIZE --asprimary" >> /tmp/part-include
    echo "part /var --fstype ext4 --size $VARSIZE" >> /tmp/part-include
    echo "part /var/crash --fstype ext4 --size $CRASHSIZE" >> /tmp/part-include
    echo "part /usr --fstype ext4 --size $USRSIZE" >> /tmp/part-include
    #echo "logvol /home --fstype ext4 --vgname rootvg --size $HOMESIZE --name homelv" >> /tmp/part-include
}
if [ -d /sys/firmware/efi ] ; then
    GatherSizing;
    Clearing;
    PartitioningEfiBoot;
    PartitioningCommon;
else
    GatherSizing;
    Clearing;
    echo "ignoredisk --only-use sda" >> /tmp/part-include
    echo "clearpart --initlabel --all" >> /tmp/part-include
}
PartitioningEfiBoot () {
    echo "bootloader --location partition --driveorder sda" >> /tmp/part-include
    echo "part /boot --fstype ext4 --size $BOOTSIZE --asprimary" >> /tmp/part-include
    echo "part /boot/efi --fstype vfat --size 256 --asprimary" >> /tmp/part-include
    if [ $MEMSIZE -le 2048 ]; then
        echo "part swap --fstype swap --size $SWAPSIZE1" >> /tmp/part-include
    elif [ $MEMSIZE -ge 63000 ]; then
        echo "part swap --fstype swap --size $SWAPSIZE3" >> /tmp/part-include
    else
        echo "part swap --fstype swap --size $SWAPSIZE2" >> /tmp/part-include
    fi
}
PartitioningLegacyBoot () {
    echo "bootloader --location mbr --driveorder sda" >> /tmp/part-include
    echo "part /boot --fstype ext4 --size $BOOTSIZE --asprimary" >> /tmp/part-include
     if [ $MEMSIZE -le 2048 ]; then
        echo "part swap --fstype swap --size $SWAPSIZE1 --asprimary" >> /tmp/part-include
    elif [ $MEMSIZE -ge 63000 ]; then
        echo "part swap --fstype swap --size $SWAPSIZE3 --asprimary" >> /tmp/part-include
    else
        echo "part swap --fstype swap --size $SWAPSIZE2 --asprimary" >> /tmp/part-include
    fi
}
PartitioningCommon () {
    echo "part / --fstype ext4 --size $ROOTSIZE --asprimary" >> /tmp/part-include
    echo "part /var --fstype ext4 --size $VARSIZE" >> /tmp/part-include
    echo "part /var/crash --fstype ext4 --size $CRASHSIZE" >> /tmp/part-include
    echo "part /usr --fstype ext4 --size $USRSIZE" >> /tmp/part-include
    echo "part pv.01 --size 1 --grow" >> /tmp/part-include
    #echo "logvol /home --fstype ext4 --vgname rootvg --size $HOMESIZE --name homelv" >> /tmp/part-include
}
if [ -d /sys/firmware/efi ] ; then
    GatherSizing;
    Clearing;
    PartitioningEfiBoot;
    PartitioningCommon;
else
    GatherSizing;
    Clearing;
    PartitioningLegacyBoot;
    PartitioningCommon;
fi
%end

repo --name="Red Hat Enterprise Linux" --baseurl=file:///mnt/source --cost=100

%packages --nobase
@core
@korean-support
@server-policy
%end

%post
mount /dev/sr0 /mnt
cp -a /mnt/ks/basic_66.sh /root
cp -a /mnt/ks/osinstallcheck.sh /root
cp -a /mnt/ks/kernel-2.6.32-504.30.3.el6.x86_64.tar.gz /root
cp -a /mnt/ks/sec_20150908.tar.gz /root
echo "[rhel]" >> /etc/yum.repos.d/rhel66.repo
echo "name=rhel6" >> /etc/yum.repos.d/rhel66.repo
echo "baseurl=file:///mnt" >> /etc/yum.repos.d/rhel66.repo
echo "gpgcheck=0" >> /etc/yum.repos.d/rhel66.repo
yum install -y bzip ethtool man-pages man-pages-overrides ntp ntpdate openssh-clients sos sysstat unzip vim-enhanced zip nfs-utils rpcbind xinetd tcp_wrappers
rm -f /etc/yum.repos.d/rhel66.repo
chmod 755 /root/basic_66.sh
chmod 755 /root/osinstallcheck.sh
sh /root/basic_66.sh
rm -f /root/basic_66.sh
sed -i '/^%pre/,/^%end/d;/^%post/,/^%end/d' /root/anaconda-ks.cfg
sed -i -e 's/\(^SELINUX=\)enforcing$/\1disabled/' /etc/selinux/config
%end

– 주석을 모두 뺀 cfg 파일이다.

– LVM 파티셔닝을 하지 않았다. 단, 파티셔닝 후 나머지 여분의 공간만 PV를 만듬.

 

3.5. ISO 파일 생성

[root@Kicksatrt-server ~]# cd /data1/custom-rhel66/

[root@Kicksatrt-server custom-rhel66]# pwd
/data1/custom-rhel66

[root@Kicksatrt-server custom-rhel66]# mkisofs -U -A "rhel66 x86_64" -V "Custom rhel66 Boot" -volset "Custom RHEL6.6 x86_64" -J -joliet-long -r -v -T -x ./lost+found -o /root/ost-custom-rhel66-standard_150911.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot .

– DVD 파일들이 위치한 /data1/custom-rhel66 디렉토리에서 mkisofs 명령을 수행해야 된다.

 

3.6. OS 설치 테스트

smb로 연결된 윈도우 PC의 VMware에서 생성된 ISO 파일을 이용하여 DVD 자동 설치 진행.

이상 없으면 필요 여부에 따라 DVD를 굽는다.

 

4. 디렉토리 구성 파일[첨부]

– 이 문서를 보고 파일을 만들어도 되지만, 문서를 작성할 당시의 build 서버 내의 구성 파일들을 넣어 두었으니 필요시 아래 파일을 다운 받을 것.

4.1. Network 인스톨을 위한 파일들

tftpboot.tar

– 참고로 redhat6.5, redhat6.6 디렉토리 내의 initrd.img, vmlinuz과 kickstart 디렉토리 내의 별도 패치 파일 등은 용량을 줄이기 위해 뺐다.

– / 디렉토리에 저장 후 / 에 위치하여 압축을 풀면 된다.

4.2. DVD 인스톨을 위한 파일들

custom-rhel66.tar

– 참고로 isolinux 디렉토리 내의 initrd.img, vmlinuz과 ks 디렉토리 내의 별도 패치 파일 등은 용량을 줄이기 위해 뺐다.

– /data1 디렉토리에 저장 후 /data1 에 위치하여 압축을 풀면 된다.

 

5. 참고 자료

RHEL 6, 7 – PXE, UEFI, Kickstart

RedHat Linux UEFI 모드 설치 여부 확인하기

 

이상이다.

kickstart – Network and DVD install

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다