RHEL7 및 CentOS7은 설치가이드대로 진행시 정상적으로 진행이 됩니다. 근데 RHEL8에서 진행시 같은 방식으로 설치를 진행하면 Cobbler가 정상적으로 구동되지 않습니다. 아직인지 정확히 모르겠지만, 공식적으로 지원하지 않는 것 같습니다.
cobbler 공식 사이트에서도 RHEL8 관련 내용은 없으며, RHEL7에서 설치되는 cobbler 2.x 버전에 대해서는 더이상 지원하지 않는다고 합니다. 그리고 아직 정리된 내용을 찾질 못했습니다.
그래서 설치 방법 및 기본 구성방식을 정리하였습니다.
cobbler는 KVM에 VM으로 구성하였고, SSH 및 설치용 1 NIC, 그리고 cobbler용으로 사설 1 NIC (192.168.5.0/24)으로 구성하였습니다. 또한, SELINUX와 firewalld는 끄고 진행했습니다.
1. epel repo 설정 및 cobbler 모듈 활성화
[root@hk-cobbler ~]# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
[root@hk-cobbler ~]# dnf module enable cobbler
[root@hk-cobbler ~]# dnf update
2. Cobbler 설치 및 관련 패키지 설치
dhcpd 활성화를 하면 초반에 에러가 발생합니다. 이 부분은 일단 무시하고 진행합니다.
[root@hk-cobbler ~]# dnf install cobbler cobbler-web python3-future python3-coverage httpd-devel tftp yum-utils pykickstart dhcp-server syslinux
[root@hk-cobbler ~]# systemctl enable httpd cobblerd dhcpd tftp --now
[root@hk-cobbler ~]# cobbler get-loaders
3. Cobbler 설정
DHCP 설정 부분에서 DHCP 네트워크 설정과 DHCP 하단에 기본이 "grub/grub.cfg"인데 이를 -> "pxelinux.0" 으로 변경하였습니다.
## cobbler 설정
[root@hk-cobbler ~]# cp -pr /etc/cobbler/settings.yaml /etc/cobbler/settings.yaml-orig
[root@hk-cobbler ~]# vi /etc/cobbler/settings.yaml
manage_dhcp: false ->> true로 변경
manage_tftpd: false->> true 로 변경
manage_rsync: false->> true 로 변경
next_server: 192.168.5.5 ->> DHCP server의 아이피로 변경
register_new_installs: false ->> true 로 변경
server: 192.168.5.5 ->> DHCP server의 아이피로 변경
## DHCP 설정
ddns-update-style interim;
allow booting;
allow bootp;
ignore client-updates;
set vendorclass = option vendor-class-identifier;
option system-arch code 93 = unsigned integer 16;
subnet 192.168.5.0 netmask 255.255.255.0 {
option routers 192.168.5.5;
option domain-name-servers 192.168.5.5;
option subnet-mask 255.255.255.0;
range dynamic-bootp 192.168.5.100 192.168.5.254;
default-lease-time 21600;
max-lease-time 43200;
next-server $next_server;
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
# Legacy
if option system-arch = 00:00 {
filename "grub/grub.0";
}
# UEFI-32-1
if option system-arch = 00:06 {
# Not supported, no 32 bit UEFI grub executable
filename "unsupported";
}
# UEFI-32-2
if option system-arch = 00:02 {
# Not supported, no 32 bit UEFI grub executable
filename "unsupported";
}
# UEFI-64-1
else if option system-arch = 00:07 {
filename "grub/grubx64.efi";
}
# UEFI-64-2
else if option system-arch = 00:08 {
filename "grub/grubx64.efi";
}
# UEFI-64-3
else if option system-arch = 00:09 {
filename "grub/grubx64.efi";
}
# armv7 (aka arm 32 bit)
else if option system-arch = 00:0a {
filename "grub/armv7.efi";
}
# aarch64 (aka arm 64 bit)
else if option system-arch = 00:0b {
filename "grub/grubaa64.efi";
}
# RiskV 32 bit
else if option system-arch = 00:25 {
#ToDo petitboot loader
filename "unsupported";
}
#RiskV 32 bit
else if option system-arch = 00:27 {
#ToDo petitboot loader
filename "unsupported";
}
else if option system-arch = 00:0e {
filename "grub/grub.ppc64le";
}
else
{
filename "pxelinux.0";
}
}
}
#for dhcp_tag in $dhcp_tags.keys():
## group could be subnet if your dhcp tags line up with your subnets
## or really any valid dhcpd.conf construct ... if you only use the
## default dhcp tag in cobbler, the group block can be deleted for a
## flat configuration
# group for Cobbler DHCP tag: $dhcp_tag
group {
#for mac in $dhcp_tags[$dhcp_tag].keys():
#set iface = $dhcp_tags[$dhcp_tag][$mac]
#set mac_dhcp_format = netaddr.EUI($mac,dialect=netaddr.mac_unix)
host $iface.name {
#if $iface.interface_type == "infiniband":
option dhcp-client-identifier = $mac;
#else
hardware ethernet $mac_dhcp_format;
#end if
#if $iface.ip_address:
fixed-address $iface.ip_address;
#end if
#if $iface.dns_name:
option host-name "$iface.dns_name";
#else if $iface.hostname:
option host-name "$iface.hostname";
#end if
#if $iface.netmask:
option subnet-mask $iface.netmask;
#end if
#if $iface.if_gateway:
option routers $iface.if_gateway;
#else if $iface.gateway:
option routers $iface.gateway;
#end if
#if "filename" in $iface.keys() and $iface.filename:
#if $iface.enable_gpxe:
if exists user-class and option user-class = "gPXE" {
filename "http://$cobbler_server/cblr/svc/op/gpxe/system/$iface.owner";
} else if exists user-class and option user-class = "iPXE" {
filename "http://$cobbler_server/cblr/svc/op/gpxe/system/$iface.owner";
} else {
filename "undionly.kpxe";
}
#else
filename "$iface.filename";
#end if
#end if
#if $iface.next_server:
next-server $iface.next_server;
#end if
#if $iface.filename:
filename $filename
#end if
#if $iface.name_servers:
#set $mynameservers = ','.join($iface.name_servers)
option domain-name-servers $mynameservers;
#end if
}
#end for
}
#end for
tftp의 기본 경로는 /var/lib/tftpboot입니다.
cobbler에서는 기본적으로 제공하는 pxe파일의 경우에 /var/lib/cobbler/loaders에 존재하며, cobbler sync시 해당 경로에 있는 파일을 /var/lib/tftpboot/ 복사하는 것 같습니다.
또한 RHEL8에서는 cobbler 설치 후 기본적으로 구성되는 pxelinux.0과 menu.32 파일은 pxe부팅때 인식이 되지 않았습니다.
그래서 해결방법으로 최초 설치한 syslinux 패키지를 복사하여 pxe 부팅하니 정상동작하였습니다.
[root@hk-cobbler ~]# cp -pr /usr/share/syslinux/pxelinux.0 /var/lib/cobbler/loaders/
cp: overwrite '/var/lib/cobbler/loaders/pxelinux.0'? y
[root@hk-cobbler ~]# cp -pr /usr/share/syslinux/menu.c32 /var/lib/cobbler/loaders/
cp: overwrite '/var/lib/cobbler/loaders/menu.c32'? y
[root@hk-cobbler ~]# cp -arv /usr/share/syslinux/* /var/lib/tftpboot/
4. OS Image mount 및 cobber에 추가
OS 설치에 사용할 ISO 파일을 마운트하고 이를 cobbler에 등록하는 작업을 진행합니다.
아래 테스트에는 centos7.7 minimall을 사용했습니다.
만일 DVD ISO파일을 사용 후에 signature 에러가 발생하면 다음 명령어를 실행합니다.
"cobbler signature update"
## cobbler 서버에 cent7.7 iso 마운트
[root@hk-cobbler ~]# mount -t iso9660 -o loop /root/CentOS-7-x86_64-Minimal-1908.iso /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@hk-cobbler ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rhel-root 29G 4.0G 26G 14% /
/dev/vda1 1014M 238M 777M 24% /boot
tmpfs 374M 0 374M 0% /run/user/0
/dev/loop0 942M 942M 0 100% /mnt
## cobbler에 추가
[root@hk-cobbler ~]# cobbler import --path=/mnt --name=cent7.7 --arch=x86_64
task started: 2021-10-27_155859_import
< 생략 >
Keeping repodata as-is :/var/www/cobbler/distro_mirror/cent7.7-x86_64/repodata
*** TASK COMPLETE ***
5. cobbler sync
cobbler sync를 실행한 후 *** TASK COMPLETE *** 이 되어야합니다.
만일 그렇지 않으면 cobbler check CLI를 입력하여, 원인을 분석합니다.
[root@hk-cobbler templates]# systemctl restart dhcpd
[root@hk-cobbler templates]# cobbler sync
6. kickstart 구성
본 가이드에서는 cobbler web을 통해 기본적으로 제공하는 sample.ks를 백업한 후 sample.ks에 아래와 같이 구성하였습니다.
계정 정보는 root / root 이며, 일반 계정도 hk / root입니다.
tcpdump 패키지를 자동으로 설치하게 해봤는데 설치가 되질 않았습니다. 해당 문구를 삭제하고 사용하시거나 무시할 것이냐는 문구에 yes하면 넘어갑니다.
lang en_US
keyboard us
timezone Asia/Seoul --isUtc
rootpw $1$hnH8IhAc$AP7VZTNP1AqX4Y7E5wJIL/ --iscrypted
#platform x86, AMD64, or Intel EM64T
reboot
text
user --name=hk --shell=/bin/bash --homedir=/home/hk --iscrypted --password=$1$hnH8IhAc$AP7VZTNP1AqX4Y7E5wJIL/
url --url=$tree
bootloader --location=mbr --append="rhgb quiet crashkernel=auto"
zerombr
clearpart --all --initlabel
autopart
network --device=eth0 --hostname=test-111 --bootproto=dhcp
auth --passalgo=sha512 --useshadow
selinux --disabled
firewall --disabled
firstboot --disable
%packages
@^minimal
%end
7. Cobbler를 통한 OS 자동 설치 및 기타 설정 확인
호스트네임 / dhcp ip 할당을 통한 IP 설정 / 일반 계정 생성 및 비번 정상 설정 / SELINUX 및 firewalld 비활성화 정상적으로 적용되는 것을 확인했습니다.
PXE 부팅 후 menu 결과 화면도 넣을까 하다가, 이전 글에 추가하여 따로 추가하진 않았습니다.
본 예제 이외에 다른 OS 추가하여 cobbler import (즉 다른 OS추가)를 진행하면, boot menu에 설정한 부트 내용 (label)자동으로 추가되는 것까지 확인했습니다.
8. 그 외 활용한 혹은 이후에 활용할 괜찮은 자료
## kickstart 생성예제 및 샘플
https://www.golinuxcloud.com/rhel-centos-8-kickstart-example-generator/
## 레드햇에서 공식적으로 제공하는 kickstart 생성 (접근 계정필요하지만, GUI를 통해 생성할 수 있어서 편리함 )
https://access.redhat.com/labs/kickstartconfig/
'Linux > RHEL7 & 8' 카테고리의 다른 글
[RHEL8] Harbor (Container Image Registry) 설치 (1) | 2021.11.24 |
---|---|
[Linux] 디렉토리(폴더) 별 디스크 사용량 확인 (0) | 2021.11.19 |
[RHEL8] PXE & Kickstart 서버 구축 (0) | 2021.10.25 |
[RHEL/CentOS 8] cockpit (웹 콘솔)설치방법 (0) | 2021.10.08 |
[RHEL/CentOS 8] SSH는 접속이 되는데 SFTP는 안되는 현상 (0) | 2021.10.07 |