Cobbler を使用して自動インストール環境を作る(CentOS Stream 9)

トップページ > パソコン備忘録 > Cobbler

令和6年4月29日公開 令和6年6月12日更新

はじめに

Cobbler」で自宅の OS インストールを自動化した際のメモです。
技術系の記事は基本的にブログにて公開していますが、これは随時情報を追記したりするので、ホームページの方で紹介します。

環境

インストール

CentOS Stream 9 で確認します。epel をインストール後、cobbler をインストールします。

dnf install epel-release
dnf module enable cobbler
dnf install cobbler3.2 cobbler3.2-web python-django3 python3-librepo

にてインストールします。
cobbler 3.3 以上は cobbler-web が標準で利用できないため、あえて cobbler 3.2 をインストールしています。
全て cobbler コマンドのみで操作する場合は、3.3 で良いかと思います。
Django 4 系だと cobbler-web が正常に動作しないため、3系をインストールします。

インストールが終わったら、Enable しておきます。

systemctl enable cobblerd
systemctl enable tftp

cobbler の初期設定

新しい ISO に対応するために、sigunature を更新しておきます。

# cobbler signature update
task started: 2024-04-29_013726_sigupdate
task started (id=Updating Signatures, time=Mon Apr 29 01:37:26 2024)
running python triggers from /var/lib/cobbler/triggers/task/sigupdate/pre/*
running shell triggers from /var/lib/cobbler/triggers/task/sigupdate/pre/*
shell triggers finished successfully
Successfully got file from https://cobbler.github.io/signatures/3.0.x/latest.json
*** TASK COMPLETE ***

次に、PXE に必要なブートローダーをコピーします。このバージョンでは cobbler get-loaders が使えないので手作業で配置します。

# ll /var/lib/cobbler/loaders/
total 772
-rw-r--r-- 1 root root 18007 Jan 15 2021 COPYING.syslinux
-rw-r--r-- 1 root root 626 Jan 15 2021 COPYING.yaboot
drwxr-xr-x 2 root root 79 Feb 19 2021 grub
-rw-r--r-- 1 root root 243679 Jan 15 2021 grub-x86_64.efi
-rw-r--r-- 1 root root 237224 Jan 15 2021 grub-x86.efi
-rw-r--r-- 1 root root 54964 Jan 15 2021 menu.c32
-rw-r--r-- 1 root root 16794 Jan 15 2021 pxelinux.0
-rw-r--r-- 1 root root 1054 Jan 15 2021 README
-rw-r--r-- 1 root root 198236 Jan 15 2021 yaboot

詳細は、2021/01/24 公開ブログ記事に記載していますが、HTTP の reposync が正常に走るように、「reposync_flags: "-n --delete"」の設定を入れておきます。

ファイアウォール(Firewalld)の設定

cobbler で使用するポートを許可します。

firewall-cmd --add-service http --permanent
firewall-cmd --add-service https --permanent
firewall-cmd --add-service tftp --permanent
systemctl reload firewalld

CentOS Stream 9 cobbler import

CentOS Stream 9 のインポートを行います。
CentOS Stream の都合上、軽量な boot iso を読み込ませます。
cobbler import 時の name の途中に x86_64 があっても、最後に付くようになるので、それを考慮した命名にしておきます。

mkdir /mnt/iso
mount /dev/cdrom /mnt/iso
cobbler import --name CentOS-Stream-9-20240429-boot-x86_64 --path /mnt/iso --breed redhat --os-version rhel9

boot iso の sigunature はないのでエラーが出ます。

running python triggers from /var/lib/cobbler/triggers/task/import/pre/*
running shell triggers from /var/lib/cobbler/triggers/task/import/pre/*
shell triggers finished successfully
No signature matched in /var/www/cobbler/distro_mirror/CentOS-Stream-9-20240429-boot-x86_64
Exception occurred: <class 'cobbler.cexceptions.CX'>
Exception value: 'No signature matched in /var/www/cobbler/distro_mirror/CentOS-Stream-9-20240429-boot-x86_64'
Exception Info:
File "/usr/lib/python3.9/site-packages/cobbler/remote.py", line 98, in run
rc = self._run(self)

File "/usr/lib/python3.9/site-packages/cobbler/remote.py", line 277, in runner
self.remote.api.import_tree(

File "/usr/lib/python3.9/site-packages/cobbler/api.py", line 1476, in import_tree
import_module.run(path, mirror_name, network_root, autoinstall_file, arch, breed, os_version)

File "/usr/lib/python3.9/site-packages/cobbler/modules/managers/import_signatures.py", line 195, in run
raise CX(error_msg)

!!! TASK FAILED !!!

コピーは完了しているので、次の手順に進みます。

cobbler distro add --name CentOS-Stream-9-20240429-boot-x86_64 --arch x86_64 --breed redhat --initrd /var/www/cobbler/distro_mirror/CentOS-Stream-9-20240429-boot-x86_64/images/pxeboot/initrd.img --kernel /var/www/cobbler/distro_mirror/CentOS-Stream-9-20240429-boot-x86_64/images/pxeboot/vmlinuz --os-version rhel9 --autoinstall-meta "tree=http://@@http_server@@/cblr/links/CentOS-Stream-9-20240429-boot-x86_64" --boot-loader grub

CentOS Stream 9 cobbler repo

rsync の場合、古いパッケージもミラーするため多くの容量が必要になります。http を利用することで ISO ファイル相当の 11GB 程度まで容量を削減できます。

cobbler repo add --name="CentOS-Stream-9-BaseOS-x86_64" --mirror=http://ftp.iij.ad.jp/pub/linux/centos-stream/9-stream/BaseOS/x86_64/os/
cobbler reposync --only CentOS-Stream-9-BaseOS-x86_64
cobbler repo add --name="CentOS-Stream-9-AppStream-x86_64" --mirror=http://ftp.iij.ad.jp/pub/linux/centos-stream/9-stream/AppStream/x86_64/os/
cobbler reposync --only CentOS-Stream-9-BaseOS-x86_64
cobbler reposync --only CentOS-Stream-9-AppStream-x86_64

boot イメージは BaseOS を含んでいないので、リンクを張ります。

ln -s /var/www/cobbler/repo_mirror/CentOS-Stream-9-BaseOS-x86_64/repodata /var/www/cobbler/distro_mirror/CentOS-Stream-9-20240429-boot-x86_64/repodata
ln -s /var/www/cobbler/repo_mirror/CentOS-Stream-9-BaseOS-x86_64/Packages /var/www/cobbler/distro_mirror/CentOS-Stream-9-202404290-boot-x86_64/Packages

Fedora 40

signature

cobbler signature update を実行しても、半年に一回アップデートされる Fedora には対応していない場合があります。

/var/lib/cobbler/distro_signatures.json を開き、周りの行を見つつ、インストールしたい fedora バージョンの例を開きます。

cobbler import

mount /dev/cdrom /mnt/iso
cobbler import --name Fedora-40-DVD-x86_64 --path /mnt/iso --breed redhat --os-version fedora40

cobbler repo

下記コマンドを実行します。

cobbler repo add --name="Oracle-Linux-8.7-BaseOS-x86_64" --mirror=http://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/
cobbler reposync --only Oracle-Linux-8.7-BaseOS-x86_64
cobbler repo add --name="Oracle-Linux-8.7-AppStream-x86_64" --mirror=http://yum.oracle.com/repo/OracleLinux/OL8/appstream/x86_64/
cobbler reposync --only Oracle-Linux-8.7-AppStream-x86_64
cobbler repo add --name="Oracle-Linux-8-UEKR6-x86_64" --mirror=http://yum.oracle.com/repo/OracleLinux/OL8/UEKR6/x86_64/
cobbler reposync --only Oracle-Linux-8-UEKR6-x86_64

Oracle Linux 8.10

cobbler import

Oracle Linux ISOs のページより、OracleLinux-R8-U10-x86_64-dvd.iso をダウンロードします。

mount /dev/cdrom /mnt/iso
cobbler import --name Oracle-Linux-8.10-x86_64 --path /mnt/iso --breed redhat --os-version rhel8

cobbler repo

下記コマンドを実行します。

cobbler repo add --name="Oracle-Linux-8.7-BaseOS-x86_64" --mirror=http://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/
cobbler reposync --only Oracle-Linux-8.7-BaseOS-x86_64
cobbler repo add --name="Oracle-Linux-8.7-AppStream-x86_64" --mirror=http://yum.oracle.com/repo/OracleLinux/OL8/appstream/x86_64/
cobbler reposync --only Oracle-Linux-8.7-AppStream-x86_64
cobbler repo add --name="Oracle-Linux-8-UEKR6-x86_64" --mirror=http://yum.oracle.com/repo/OracleLinux/OL8/UEKR6/x86_64/
cobbler reposync --only Oracle-Linux-8-UEKR6-x86_64

Debian 12.5

cobbler import

Preseed を使います。

mount /dev/cdrom /mnt/iso
cobbler import --name Debian-12.5-x86_64 --path /mnt/iso --breed debian --os-version bookworm

https://blog.oyasu.info/2021/01/26/8098/ と同様の現象が発生します。Ubuntu 20.04 の場合、ISO に含まれているのですが、Debian には含まれていないのでダウンロードしてから変更します。

wget https://deb.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux -O /var/www/cobbler/distro_mirror/Debian-12.5-x86_64/install/linux
wget https://deb.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz -O /var/www/cobbler/distro_mirror/Debian-12.5-x86_64/install/initrd.gz