Cobbler を使用して自動インストール環境を作る

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

令和3年1月24日公開 令和4年11月22日更新

はじめに

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

環境

インストール

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

dnf install epel-release
dnf module enable cobbler
dnf install cobbler cobbler-web python3-librepo

にてインストールします。
全て cobbler コマンドのみで操作する場合は、cobbler-web は不要です。
すでにインストールしていた何かの影響により、python3-django3 が邪魔をしているようでしたので、dnf swap python3-django3 python3-django で入れ替えました。

Error:
 Problem: problem with installed package python3-django3-3.1.4-1.el8.noarch
  - package python3-django3-3.1.4-1.el8.noarch conflicts with python3-django provided by python3-django-2.2.17-1.el8.noarch
  - package cobbler-web-3.2.0-2.module_el8+10474+71f42bad.noarch requires python3-django, but none of the providers can be installed
  - conflicting requests
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages)

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

systemctl enable cobblerd
systemctl enable tftpd

CentOS Stream 9 の場合、下記を設置するととりあえず入りますが保証はありません。

cat /etc/yum.repos.d/cobbler-fedora.repo
[fedora-34]
name=Fedora 34 - $basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-34&arch=$basearch
enabled=1
countme=1
metadata_expire=7d
repo_gpgcheck=0
type=rpm
gpgcheck=0
includepkgs=cobbler*,python3-django,python3-pymongo,python3-bson

詳細は、2022/10/22 公開ブログ記事に記載していますが、バージョン 3.3 は cobbler-web が現状利用できないのでご注意下さい。

cobbler の初期設定

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

# cobbler signature update
task started: 2021-01-24_015444_sigupdate
task started (id=Updating Signatures, time=Sun Jan 24 01:54:44 2021)
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

詳細は、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 8 cobbler import

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

mkdir /mnt/iso
mount /dev/cdrom /mnt/iso
cobbler import --name CentOS-Stream-8-20210120-boot-x86_64 --path /mnt/iso --breed redhat --os-version rhel8

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-8-20210120-boot-x86_64
Exception occured:
Exception value: 'No signature matched in /var/www/cobbler/distro_mirror/CentOS-Stream-8-20210120-boot-x86_64'
Exception Info:
File "/usr/lib/python3.6/site-packages/cobbler/remote.py", line 98, in run
rc = self._run(self)

File "/usr/lib/python3.6/site-packages/cobbler/remote.py", line 305, in runner
self.logger

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

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

!!! TASK FAILED !!!

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

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

CentOS Stream 8 cobbler repo

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

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

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

ln -s /var/www/cobbler/repo_mirror/CentOS-Stream-8-BaseOS-x86_64/repodata /var/www/cobbler/distro_mirror/CentOS-Stream-8-20210120-boot-x86_64/repodata
ln -s /var/www/cobbler/repo_mirror/CentOS-Stream-8-BaseOS-x86_64/Packages /var/www/cobbler/distro_mirror/CentOS-Stream-8-20210120-boot-x86_64/Packages

Oracle Linux 8.3

cobbler import

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

mount /dev/cdrom /mnt/iso
cobbler import --name Oracle-Linux-8.3-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

CentOS Stream 9 cobbler import

CentOS Stream 9 のインポートを行います。
CentOS Stream 8 では boot を使いましたが、2022/1 時点で 9 の日本のミラーサイトがないので、DVD をインポートします。
cobbler import 時の name の途中に x86_64 があっても、最後に付くようになるので、それを考慮した命名にしておきます。

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

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

Ubuntu 20.04

legacy の方の ISO を使用します。