[Linux] Cobbler 설치 및 기본 구성 가이드

2025. 5. 29. 22:56·깐돌의 클라우드 도구함
목차
  1. RHEL 8에서 Cobbler 설치 및 기본 구성 가이드
  2. 목차
  3. 1. EPEL 저장소 설정 및 Cobbler 모듈 활성화
  4. 2. Cobbler 설치 및 관련 패키지 설치
  5. 3. Cobbler 설정
  6. 4. OS Image 마운트 및 Cobbler에 추가
  7. 5. Cobbler Sync
  8. 6. Kickstart 구성
  9. 7. Cobbler를 통한 OS 자동 설치 및 기타 설정 확인
  10. 8. 그 외 활용할 수 있는 유용한 자료
  11.  
  12. 마무리
728x90

RHEL 8에서 Cobbler 설치 및 기본 구성 가이드

클라우드 환경에서 서버를 대량으로 배포할 때, PXE(Preboot Execution Environment) 기반의 자동 설치 시스템은 필수적입니다. Cobbler는 이러한 자동 설치를 위한 강력한 오픈소스 도구입니다. RHEL 7 및 CentOS 7에서는 설치 가이드대로 진행하면 Cobbler가 정상적으로 작동했지만, RHEL 8에서는 동일한 방식으로 설치 시 문제가 발생합니다. 아직 정확한 원인은 불분명하지만, 공식적으로 RHEL 8에 대한 명확한 지원 문서가 부족하며, Cobbler 공식 사이트에서도 RHEL 7에서 사용되던 Cobbler 2.x 버전에 대한 지원이 더 이상 이루어지지 않는다고 합니다. 따라서 이 가이드는 RHEL 8에서 Cobbler를 설치하고 기본 구성하는 방법을 정리하여 공유하고자 합니다.

이 가이드에서는 KVM 가상 머신에 Cobbler 서버를 구성했으며, SSH 및 설치용 NIC 1개, 그리고 Cobbler 서비스용 사설 NIC (192.168.5.0/24) 1개로 설정했습니다. 또한, SELinux와 firewalld는 비활성화하고 진행했습니다.

목차

  1. EPEL 저장소 설정 및 Cobbler 모듈 활성화: 필수 저장소 및 모듈 준비
  2. Cobbler 및 관련 패키지 설치: 필요한 소프트웨어 설치
  3. Cobbler 설정: 주요 설정 파일 및 DHCP 설정 변경
  4. OS 이미지 마운트 및 Cobbler에 추가: 설치할 OS 이미지 등록
  5. Cobbler Sync: 설정 변경 사항 동기화
  6. Kickstart 구성: 자동 설치를 위한 Kickstart 파일 작성
  7. Cobbler를 통한 OS 자동 설치 확인: 최종 검증
  8. 그 외 활용 자료: Kickstart 생성 도구 안내

1. EPEL 저장소 설정 및 Cobbler 모듈 활성화

Cobbler는 RHEL의 기본 저장소에 포함되어 있지 않으므로, Extra Packages for Enterprise Linux (EPEL) 저장소를 먼저 설정해야 합니다. 또한, RHEL 8에서는 DNF 모듈을 사용하여 Cobbler를 활성화해야 합니다.

[root@hk-cobbler ~]# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

위 명령은 EPEL 저장소 패키지를 설치합니다. 이어서 Cobbler 모듈을 활성화합니다.

[root@hk-cobbler ~]# dnf module enable cobbler

모듈 활성화 후 시스템 패키지를 업데이트하여 최신 상태를 유지합니다.

[root@hk-cobbler ~]# dnf update
EPEL 공식 문서 (Fedora Project)

2. Cobbler 설치 및 관련 패키지 설치

EPEL 저장소 설정 및 Cobbler 모듈 활성화가 완료되면, 다음 명령어를 사용하여 Cobbler 및 관련 패키지를 설치합니다. 이 과정에서 dhcpd 활성화 시 초기에 에러가 발생할 수 있습니다. 이 부분은 다음 단계에서 설정 파일을 수정한 후 해결되므로, 일단 무시하고 진행해도 무방합니다.

[root@hk-cobbler ~]# dnf install cobbler cobbler-web python3-future python3-coverage httpd-devel tftp yum-utils pykickstart dhcp-server syslinux
  • cobbler: Cobbler 핵심 패키지.
  • cobbler-web: Cobbler 웹 UI를 위한 패키지.
  • python3-future, python3-coverage: Python 3 관련 종속성.
  • httpd-devel: Apache 웹 서버 개발 라이브러리 (Cobbler 웹 UI에 필요).
  • tftp: TFTP 서버 (PXE 부팅에 필요).
  • yum-utils: Yum 유틸리티 (dnf와 호환).
  • pykickstart: Kickstart 파일 처리 유틸리티.
  • dhcp-server: DHCP 서버 (PXE 부팅 시 IP 할당에 필요).
  • syslinux: PXE 부팅을 위한 부트로더.

설치 후 다음 명령어를 사용하여 필요한 서비스들을 활성화하고 즉시 시작합니다.

[root@hk-cobbler ~]# systemctl enable httpd cobblerd dhcpd tftp --now

마지막으로 Cobbler에서 필요한 부트로더 파일들을 가져옵니다. 이 명령어는 TFTP 서버에서 사용될 부트로더 파일을 준비합니다.

[root@hk-cobbler ~]# cobbler get-loaders

3. Cobbler 설정

Cobbler의 주요 설정을 변경하고 DHCP 서버 설정을 구성합니다. 먼저 /etc/cobbler/settings.yaml 파일을 백업한 후 편집합니다.

[root@hk-cobbler ~]# cp -pr /etc/cobbler/settings.yaml /etc/cobbler/settings.yaml-orig
[root@hk-cobbler ~]# vi /etc/cobbler/settings.yaml

다음 설정들을 찾아 값을 변경합니다. 192.168.5.5는 Cobbler 서버의 IP 주소입니다.

  • manage_dhcp: false -> true로 변경
  • manage_tftpd: false -> true로 변경
  • manage_rsync: false -> true로 변경
  • next_server: 127.0.0.1 -> 192.168.5.5 (DHCP 서버의 IP)로 변경
  • register_new_installs: false -> true로 변경
  • server: 127.0.0.1 -> 192.168.5.5 (DHCP 서버의 IP)로 변경

다음으로 DHCP 서버 설정 파일 /etc/dhcp/dhcpd.conf를 편집합니다. 특히 filename 설정에서 UEFI 및 레거시 BIOS 부팅을 모두 지원하도록 pxelinux.0을 추가하는 것이 중요합니다. RHEL 8에서는 기본 grub/grub.cfg 설정만으로는 PXE 부팅이 원활하지 않을 수 있습니다.

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 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는 기본적으로 /var/lib/cobbler/loaders 경로에 PXE 파일을 제공하며, cobbler sync 시 이 경로의 파일들을 /var/lib/tftpboot/로 복사합니다.

RHEL 8에서는 Cobbler 설치 후 기본적으로 구성되는 pxelinux.0과 menu.c32 파일이 PXE 부팅 시 인식되지 않는 문제가 발생했습니다. 이를 해결하기 위해 최초 설치한 syslinux 패키지에 포함된 파일들을 복사하여 사용했습니다.

[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/

위 명령은 syslinux 패키지의 핵심 PXE 부팅 파일들을 Cobbler의 로더 경로와 TFTP 루트 경로로 복사하여 PXE 부팅이 정상적으로 이루어지도록 합니다.

Cobbler 공식 문서 (GitHub)

4. OS Image 마운트 및 Cobbler에 추가

OS 자동 설치에 사용할 ISO 파일을 마운트하고 이를 Cobbler에 등록하는 작업을 진행합니다. 이 테스트에서는 CentOS 7.7 Minimal ISO를 사용했습니다.

## 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 ***

cobbler import 명령어는 지정된 경로의 OS 이미지를 Cobbler에 디스트로(distro), 프로파일(profile), 이미지(image) 등으로 자동 등록합니다. 만일 DVD ISO 파일을 사용한 후 "signature" 에러가 발생하면 cobbler signature update 명령어를 실행하여 시그니처를 업데이트해야 합니다.


5. Cobbler Sync

Cobbler 설정 변경 후에는 반드시 cobbler sync 명령어를 실행하여 변경 사항을 적용해야 합니다. 이 명령어는 Cobbler 내부 데이터베이스와 TFTP, Apache 등의 서비스 설정을 동기화합니다.

[root@hk-cobbler ~]# systemctl restart dhcpd
[root@hk-cobbler ~]# cobbler sync

cobbler sync 실행 후 *** TASK COMPLETE *** 메시지가 나타나야 정상적으로 동기화된 것입니다. 만약 동기화가 실패하거나 에러가 발생하면 cobbler check CLI 명령어를 입력하여 원인을 분석하고 해결해야 합니다. cobbler check는 일반적인 구성 오류를 진단하는 데 도움을 줍니다.


6. Kickstart 구성

Kickstart 파일은 OS 자동 설치 과정을 정의하는 스크립트입니다. 이 가이드에서는 Cobbler 웹 인터페이스를 통해 기본적으로 제공되는 sample.ks를 백업한 후 수정했습니다. (/var/lib/cobbler/kickstarts/sample.ks)

아래는 테스트에 사용된 sample.ks의 일부 내용입니다. root 계정은 root / root로, 일반 계정 hk는 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

Kickstart 파일의 rootpw 및 user --password 필드에는 암호화된 비밀번호를 사용해야 합니다. python3 -c 'import crypt; print(crypt.crypt("yourpassword", crypt.mksalt(crypt.METHOD_SHA512)))'와 같은 명령어를 사용하여 암호화된 비밀번호를 생성할 수 있습니다.

Pykickstart 공식 문서

 

 


7. Cobbler를 통한 OS 자동 설치 및 기타 설정 확인

Cobbler 서버 구성을 완료했다면, 이제 클라이언트 시스템을 PXE 부팅하여 OS 자동 설치를 테스트할 수 있습니다. 클라이언트 시스템의 BIOS/UEFI 설정에서 네트워크 부팅(PXE Boot)을 최우선 순위로 설정하고 부팅을 시도합니다. 정상적으로 설정되었다면 Cobbler 서버에서 DHCP를 통해 IP를 할당받고, TFTP를 통해 부팅 파일을 내려받아 PXE 메뉴가 나타날 것입니다.

설치된 OS에서 다음 설정들이 정상적으로 적용되었는지 확인했습니다.

  • 호스트네임 (test-111)
  • DHCP를 통한 IP 할당
  • 일반 계정 (hk) 생성 및 비밀번호 정상 설정
  • SELinux 비활성화
  • Firewalld 비활성화

PXE 부팅 후 나타나는 메뉴 화면은 이전 글에서 다루었으므로 여기서는 따로 추가하지 않았습니다. 본 예제 이외에 다른 OS ISO 파일을 cobbler import 명령어를 통해 추가하면, PXE 부팅 메뉴에 해당 OS 설치 항목이 자동으로 추가되는 것까지 확인했습니다. 이는 여러 종류의 OS를 자동 배포해야 할 때 매우 유용한 기능입니다.

 

 

8. 그 외 활용할 수 있는 유용한 자료

Kickstart 파일을 수동으로 작성하는 것이 부담스럽다면, 다음 온라인 도구들을 활용할 수 있습니다.

  • Kickstart 생성 예제 및 샘플: RHEL / CentOS 8 Kickstart Example Generator
  • Red Hat에서 공식적으로 제공하는 Kickstart 생성 도구: 접근 계정(Red Hat Subscription)이 필요하지만, GUI를 통해 편리하게 Kickstart 파일을 생성할 수 있습니다. Red Hat Kickstart Configurator

 

마무리

이 가이드는 RHEL 8 환경에서 Cobbler를 설치하고 기본 구성하는 과정을 상세하게 다루었습니다. RHEL 7과 달리 RHEL 8에서 Cobbler 설치 시 발생하는 특정 문제점들을 해결하는 데 초점을 맞추었으며, EPEL 저장소 설정부터 패키지 설치, 핵심 설정 파일 변경, 그리고 Kickstart 구성까지의 모든 단계를 설명했습니다. 이 가이드가 RHEL 8 기반의 자동화된 서버 배포 환경을 구축하는 데 유용한 자료가 되기를 바랍니다.

728x90
반응형

'깐돌의 클라우드 도구함' 카테고리의 다른 글

[Linux] du 명령어로 디렉토리(폴더)별 디스크 사용량 확인하기  (0) 2025.06.03
[가상화] virsh 명령어 사용 가이드  (0) 2025.05.30
[Linux] PXE 서버 구축 및 자동 OS 설치 가이드  (0) 2025.05.29
[Linux] RHEL 웹 콘솔 (Cockpit) 설치 및 활용 가이드  (0) 2025.05.28
[Linux] root 계정 SFTP 접속 오류 해결 가이드  (0) 2025.05.28
  1. RHEL 8에서 Cobbler 설치 및 기본 구성 가이드
  2. 목차
  3. 1. EPEL 저장소 설정 및 Cobbler 모듈 활성화
  4. 2. Cobbler 설치 및 관련 패키지 설치
  5. 3. Cobbler 설정
  6. 4. OS Image 마운트 및 Cobbler에 추가
  7. 5. Cobbler Sync
  8. 6. Kickstart 구성
  9. 7. Cobbler를 통한 OS 자동 설치 및 기타 설정 확인
  10. 8. 그 외 활용할 수 있는 유용한 자료
  11.  
  12. 마무리
'깐돌의 클라우드 도구함' 카테고리의 다른 글
  • [Linux] du 명령어로 디렉토리(폴더)별 디스크 사용량 확인하기
  • [가상화] virsh 명령어 사용 가이드
  • [Linux] PXE 서버 구축 및 자동 OS 설치 가이드
  • [Linux] RHEL 웹 콘솔 (Cockpit) 설치 및 활용 가이드
깐돌IT
깐돌IT
클라우드 업무 팁
  • 깐돌IT
    조용한 깐돌의 IT창고
    깐돌IT
  • 전체
    오늘
    어제
    • 분류 전체보기 (56)
      • 깐돌의 클라우드 도구함 (56)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    rhocp
    IPMI
    리눅스 가상화
    리눅스 서버
    서버 관리
    rhel
    kickstart
    컨테이너
    private registry
    리눅스
    시스템 모니터링
    오픈소스
    RHEL8
    KVM
    Docker
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
깐돌IT
[Linux] Cobbler 설치 및 기본 구성 가이드

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.