0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Foremanを構築し、Ubuntu24.04をベアメタルプロビジョニングする

Posted at

概要

The Foreman はベアメタルサーバ、仮想サーバのプロビジョニングや構成を一括して管理できるオープンソースソフトウェアです。基本的にはベアメタルサーバを PXE ブートする際に必要となるコンポーネント(DHCP、TFTP、DNS など)を内包しつつ、ダッシュボードや API を備えているものと思っていただければよいと思います。

比較されるサービスとしては Canonical MaaS や OpenStack Ironic があると思いますが、RedHat Satellite の中身になっているソフトウェアでもあり、やや RedHat 系の OS とは親和性が高い作りになっていますが Ubuntu でも問題なく使用可能です。

それなりに歴史のあるソフトウェアだとは思うのですが、なぜかネット上に恐ろしいほど情報が無く、かつ MaaS などに比べると設定がなかなか複雑なので情報を残すことにしました。

Foreman の仕組み

基本的には以下の通りですが、特筆すべきは Smart Proxy(forman-proxy.service)と呼ばれるプロキシサービスです。

image.png
出典: https://theforeman.org/manuals/3.16/index.html

Foreman 自体はダッシュボード(UI)や各種機能、API を提供するもので、PXE ブートの中心となる DHCP や TFTP などは Foreman 自体が持っているというよりは外部の DHCP や TFTP を Smart Proxy が中継することで、包括的なサービスとして動かしているイメージです。

文字通り Foreman サーバとは全くのリモートに置いてもいいですし Foreman サーバと同居させることも可能ですが、今回は基本的に後者の同居パターンで構築していきます。

構成

今回は以下のような Foreman が動作するサーバ、PXE ブートによって自動構築するベアメタルサーバの 2 台、ネットワークも PXE 関連のパケットを流す NW のみと、最小構成の環境で試しました。
なお、検証には ESXi 上の VM を使用しています。

image.png

構築手順

1. Foreman のインストール

まずは以下の組み合わせで Foreman のインストーラーを VM 上にインストールしていきます。
なお v3.16 時点では Ubuntu 24.04 上へのインストールはパッケージ互換の問題で失敗します(公式にも非サポートです)。ご注意ください。

  • Ubuntu 22.04.05 LTS
  • Foreman 3.16

手順は公式に記載の通りです。

/* 要件である puppet の導入 */
root@foreman-test:~# apt-get -y install ca-certificates
root@foreman-test:/tmp# cd /tmp && wget https://apt.puppet.com/puppet8-release-jammy.deb
root@foreman-test:/tmp# apt-get install /tmp/puppet8-release-jammy.deb

/* foreman 導入 */
root@foreman-test:~# wget https://deb.theforeman.org/foreman.asc -O /etc/apt/trusted.gpg.d/foreman.asc
root@foreman-test:~# echo "deb http://deb.theforeman.org/ jammy 3.16" | sudo tee /etc/apt/sources.list.d/foreman.list
root@foreman-test:~# echo "deb http://deb.theforeman.org/ plugins 3.16" | sudo tee -a /etc/apt/sources.list.d/foreman.list
...

root@foreman-test:~# apt-get update && sudo apt-get -y install foreman-installer
...

続けてインストーラーを起動していきます。インストーラがホスト名を FQDN で解決できることを要求しますので、サンプルでも構わないので hostnamectl で設定しておきます。

root@foreman-test:~# hostnamectl set-hostname foreman-test.example.com

インストーラを起動します。前述のように今回の構成では Foreman 上で DHCP と TFTP を統合して動かしますので必要なオプションを指定します。

root@foreman-test:~# foreman-installer \
--foreman-proxy-dns false \
--foreman-proxy-dhcp true \
--foreman-proxy-dhcp-provider isc \
--foreman-proxy-dhcp-managed true \
--foreman-proxy-dhcp-range "192.168.100.50 192.168.100.100"  \
--foreman-proxy-dhcp-server=192.168.100.190 \
--foreman-proxy-dhcp-interface=ens160 \
--foreman-proxy-tftp true \
--foreman-proxy-tftp-managed true \
--foreman-proxy-tftp-servername=192.168.100.190
2025-10-07 11:03:12 [NOTICE] [root] Loading installer configuration. This will take some time.
2025-10-07 11:03:15 [NOTICE] [root] Running installer with log based terminal output at level NOTICE.
2025-10-07 11:03:15 [NOTICE] [root] Use -l to set the terminal output log level to ERROR, WARN, NOTICE, INFO, or DEBUG. See --full-help for definitions.
2025-10-07 11:03:16 [NOTICE] [checks] System checks passed
2025-10-07 11:03:17 [NOTICE] [configure] Starting system configuration.
2025-10-07 11:06:02 [NOTICE] [configure] 250 configuration steps out of 1344 steps complete.
2025-10-07 11:06:28 [NOTICE] [configure] 500 configuration steps out of 1346 steps complete.
2025-10-07 11:06:44 [NOTICE] [configure] 750 configuration steps out of 1478 steps complete.
2025-10-07 11:06:47 [NOTICE] [configure] 1000 configuration steps out of 1504 steps complete.
2025-10-07 11:06:49 [NOTICE] [configure] 1250 configuration steps out of 1504 steps complete.
2025-10-07 11:08:21 [NOTICE] [configure] 1500 configuration steps out of 1504 steps complete.
2025-10-07 11:08:27 [NOTICE] [configure] System configuration has finished.
Executing: foreman-rake upgrade:run
  Success!
  * Foreman is running at https://foreman-test.example.com
      Initial credentials are admin / ***************
  * Foreman Proxy is running at https://foreman-test.example.com:8443

The full log is at /var/log/foreman-installer/foreman.log

成功するとエンドポイント、admin のパスワードが表示されますので記載の通りアクセスしてください。
image.png

オプション説明

参考までに、指定しているオプションは以下のような内容となります。

オプション 内容
--foreman-proxy-dns false Foreman の DNS 機能を無効化する。設定が複雑でめんどくさく、今回は自前で DNS を用意するため無効。
--foreman-proxy-dhcp true Foreman の DHCP 機能を有効化する。今回は PXE ブート時の IP アドレスを配布する目的として使用する。
--foreman-proxy-dhcp-range "192.168.100.50 192.168.100.100" PXE ブート用の NW で DHCP として配布する IP アドレスのレンジ。
--foreman-proxy-dhcp-server 192.168.100.190 DHCP サーバアドレス。Foreman サーバの IP と同じだが、PXE ネットワークからアクセスされることに注意。
--foreman-proxy-dhcp-interface ens160 PXE ネットワークの IF を指定。
--foreman-proxy-tftp true Foreman の TFTP 機能を有効にする。
--foreman-proxy-tftp-servername 192.168.100.190 TFTP サーバアドレス。Foreman サーバの IP と同じだが、PXE ネットワークからアクセスされることに注意。

Smart Proxy 確認

[インフラストラクチャー] > [Smart Proxy] にて、Smart Proxy で有効になっている機能を確認しておきます。ここでは DHCP TFTP が有効になっていれば問題ありません。
image.png

2. DNS 設定

前述の手順で Foreman 自身の DNS 機能を無効化しました。

PXE ブートのシーケンス中には Foreman サーバ自体の名前解決(FQDN)を(cloud-init によって構築されるクライアント側から)求められますので、簡易的な DNS を構築しておきます。ここでは dnsmasq を利用します。

root@foreman-test:~# apt install dnsmasq
...

root@foreman-test:~# vim /etc/dnsmasq.d/local.conf
listen-address=192.168.100.190
bind-interfaces
address=/foreman-test.example.com/192.168.100.190

root@foreman-test:~# systemctl restart dnsmasq
root@foreman-test:~# systemctl enable dnsmasq

以下のようなコマンドでテストして、正常に名前解決できていれば問題ありません。

root@foreman-test:~# dig @192.168.100.190 foreman-test.example.com

3. インストールメディアの作成

Foreman はインストールに使用する ISO をミラー参照することができますが、ローカルに置いておいた方が確実に利便性があるため、インストールメディアを作成していきます。

まずは Foreman サーバに SSH ログインし、公式から ISO をダウンロードします。今回は Ubuntu 24.04.03 LTS を使用します。

root@foreman-test:~# cd /tmp
root@foreman-test:/tmp# wget https://releases.ubuntu.com/24.04.3/ubuntu-24.04.3-live-server-amd64.iso
...

以下の通り、HTTP で公開できる場所に ISO をコピーしつつ、中身を配置します。Foreman には Apache2 が内包されているので、特にウェブサービス追加は不要です。

root@foreman-test:/tmp# mount ubuntu-24.04.3-live-server-amd64.iso /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
root@foreman-test:/tmp# mkdir -p /usr/share/foreman/public/pub/installation_media/ubuntu/24.04.3-x86_64/
root@foreman-test:/tmp# cp ubuntu-24.04.3-live-server-amd64.iso /usr/share/foreman/public/pub/installation_media/ubuntu/24.04.3-x86_64.iso
root@foreman-test:/tmp# cp -a /mnt/* /usr/share/foreman/public/pub/installation_media/ubuntu/24.04.3-x86_64/

/* amd64 向けのシンボリックリンク作成 */
root@foreman-test:~# cd /usr/share/foreman/public/pub/installation_media/ubuntu
root@foreman-test:/usr/share/foreman/public/pub/installation_media/ubuntu# ln -s 24.04.3-x86_64 24.04.3-amd64
root@foreman-test:/usr/share/foreman/public/pub/installation_media/ubuntu# ln -s 24.04.3-x86_64.iso 24.04.3-amd64.iso

/* 確認 */
root@foreman-test:~# ls -l /usr/share/foreman/public/pub/installation_media/ubuntu
total 3226036
drwxr-xr-x 3 root root       4096 Oct  9 03:52 ./
drwxr-xr-x 3 root root       4096 Oct  9 03:28 ../
lrwxrwxrwx 1 root root         14 Oct  9 03:48 24.04.3-amd64 -> 24.04.3-x86_64/
lrwxrwxrwx 1 root root         18 Oct  9 03:52 24.04.3-amd64.iso -> 24.04.3-x86_64.iso
drwxr-xr-x 8 root root       4096 Oct  9 03:48 24.04.3-x86_64/
-rw-r--r-- 1 root root 3303444480 Oct  9 03:28 24.04.3-x86_64.iso

/* 不要なので削除 */
root@foreman-test:~# cd /tmp
root@foreman-test:/tmp# umount /mnt 
root@foreman-test:/tmp# rm -rf ubuntu-24.04.3-live-server-amd64.iso 

ISO が展開出来たら、http://xxx.xxx.xxx.xxx/pub/installation_media/ubuntu/24.04.3-x86_64 をインストールメディアとして指定します。
[ホスト] > [プロビジョニング設定] > [インストールメディア] から新規メディアを作成し、以下のように指定します。

項目 備考
名前 Ubuntu 24.04.03LTS -
パス http://192.168.100.190/pub/installation_media/ubuntu/$major.$minor-$arch IP は PXE 用レンジのもの
オペレーティングシステムファミリー Debian -

試しに ISO がダウンロードできることを確認しておきましょう。

root@foreman-test:~# curl --output /dev/null http://192.168.100.190/pub/installation_media/ubuntu/24.04.3-x86_64.iso

4. オペレーティングシステムの作成

[ホスト] > [プロビジョニング設定] > [オペレーティングシステム] を選択し、オペレーティングシステムを新規に作成します。

オペレーティングシステム タブ

項目
名前 Ubuntu
メジャーバージョン 24.04
マイナーバージョン 3
説明 Ubuntu 24.04.3 LTS
ファミリー Debian
リリース名 noble
root パスワードのハッシュ SHA512
アーキテクチャー x86_64 を選択

パーティションテーブル タブ

Preseed default autoinstall を選択。

インストールメディア タブ

先ほど作成した Ubuntu 24.04.03LTS を選択。

テンプレートタブ

後ほど設定するので無指定で構いません。

5. プロビジョニングテンプレートの紐づけ

[ホスト] > [テンプレート] > [プロビジョニングテンプレート] からプロビジョニングテンプレートを紐づけていきます。
それぞれ

  • Preseed Autoinstall cloud-init user data
  • Preseed default PXELinux Autoinstall
  • Preseed default finish

を選択し、「関連付け」のタブで作成したオペレーティングシステムであるUbuntu 24.04.3 LTS を選択します。

プロビジョニングテンプレートをオペレーティングシステムに指定する

プロビジョニングテンプレートを設定したら再度 [ホスト] > [プロビジョニング設定] > [オペレーティングシステム] に戻り、「テンプレート」のタブで先ほど紐づけたプロビジョニングテンプレートを設定します。
※ プルダウンでそれぞれ選べるようになっているはずです。

image.png

6. ネットワークの設定

[インフラストラクチャ] > [サブネット] から新規にサブネットを作成していきます。

サブネット タブ

PXE 用の サブネット

項目 備考
名前 Provisioning NW -
プロトコル IPv4 -
ネットワークアドレス 192.168.100.0 -
ネットワークプレフィックス 24 -
ゲートウェイアドレス 空欄 -
IPAM なし -
ブートモード DHCP -

ドメイン タブ

example.com を選択。

プロキシー タブ

項目
DHCP プロキシー 空欄
TFTP プロキシー foreman-test.example.com

※このサブネットは PXE 用であり、DHCP は Smart Proxy 経由ではないことに注意します。

7. ホストグループ設定

[設定] > [ホストグループ] から新規にホストグループを作成していきます。

ホストグループ タブ

項目
名前 Test Host Group
Environment production

ネットワーク タブ

項目
ドメイン example.com
IPv4 サブネット Provisioning NW

オペレーティングシステム タブ

項目
アーキテクチャー x86_64
オペレーティングシステム Ubuntu 24.04.3 LTS
メディア Ubuntu 24.04.03LTS
パーティションテーブル Preseed default autoinstall
PXE ローダー PXELinux BIOS
Root パスワード 任意の値

8. ホストの作成

それでは、[設定] > [ホスト] > [ホストの作成] から新規のホストを作成していきます。

ホスト タブ

項目
名前 任意のサーバ名
ホストグループ Test Host Group

オペレーティングシステム タブ

項目
アーキテクチャー x86_64
オペレーティングシステム Ubuntu 24.04.3 LTS
ビルド チェックを入れる
メディア Ubuntu 24.04.03LTS
パーティションテーブル Preseed default autoinstall
PXE ローダー PXELinux BIOS

インターフェイス タブ

デフォルトでは一つのインタフェースが存在しています。
PXE に使用するインタフェースのアクションの [編集] タブを押下し、MAC アドレスを入力してください。
image.png

設定確認

以上を完了したらサブミットします。問題なければ「すべてのステータスが OK です」となるはずです。
image.png

なお、ここでは「ビルド」と称される処理が実施されており、Foreman 上で自動的に PXE ブートに必要なファイルが生成されています。

root@foreman-test:~# ls -l /srv/tftp/pxelinux.cfg/
total 8
-rw-r--r-- 1 foreman-proxy foreman-proxy 558 Oct  9 07:29 01-00-0c-29-7b-97-48
-rw-r--r-- 1 foreman-proxy foreman-proxy  83 Oct  9 07:29 01-00-0c-29-7b-97-48.ipxe

root@foreman-test:~# ls -l /srv/tftp/boot
total 87164
-rw-r--r-- 1 foreman-proxy foreman-proxy 74245462 Aug  5 17:19 ubuntu-24-04-03lts-iiPJpXbYazNa-initrd
-rw-r--r-- 1 foreman-proxy foreman-proxy 15006088 Aug  5 17:19 ubuntu-24-04-03lts-iiPJpXbYazNa-vmlinuz

また、cloud-init での構築に必要な userdata はサーバ上にファイルの実態としては作成されません。
クライアントから HTTP 要求があったときに Foreman 側がテンプレートからレンダリングして返却する仕組みになっています。

9. PXE ブートの実施

ここまで来たら、構築を行うサーバ側で PXE ブートを実施します。起動後、DHCP から IP アドレスの取得、OS の起動、cloud-init による userdata の構築までが自動で実施され、Ubuntu が起動してくれば成功です。
image.png

まとめ

Foreman を使用して Ubuntu の自動構築環境を試すことができました。
あまりにも情報が無かったため ... ここまででもだいぶ苦労しましたが、他にも Ansible との連携などいろいろな機能がありそうなので、今後もいろいろ試してみようと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?