9 Combustionによる設定 #
この章では、Combustionについて説明します。Combustionとは、設定に従って最初のブート時にシステムを設定するために使用するツールです。
9.1 Combustionについて #
Combustionは、最初のブート時にシステムを設定できるdracutモジュールです。Combustionはscript
と呼ばれる提供されるファイルを読み込み、その中でコマンドを実行して、ファイルシステムへの変更を行います。Combustionを使用して、デフォルトパーティションの変更、ユーザのパスワードの設定、ファイルの作成、パッケージのインストールなどを実行できます。
Combustion dracutモジュールは、ignition.firstboot
引数がカーネルコマンドラインに渡された後に呼び出されます。その後、Combustionはscript
から設定を読み込みます。ネットワークフラグがscript
で見つかった場合、Combustionはネットワークを設定しようとします。/sysroot
がマウントされると、Combustionは/etc/fstab
にあるすべてのマウントポイントを有効にしようとし、transactional-update
を呼び出して、他の変更(root
パスワードの設定やパッケージのインストールなど)を適用します。
Combustionを使用する場合は、設定デバイスにcombustion
という名前のラベルを付け、その設定メディアで固有のディレクトリ構造を作成して、script
という名前の設定ファイルを含める必要があります。設定メディアのルートディレクトリに、combustion
というディレクトリを作成し、script
を他のファイル(SSHキー、設定ファイルなど)とともにこのディレクトリに配置します。ディレクトリ構造は次のようになります。
<root directory> └── combustion └── script └── other files
Combustionを使用して、QEMU/KVM仮想マシンを設定できます。この場合、qemu
コマンドのfw_cfg
パラメータを使用してscript
ファイルの場所を渡します。
-fw_cfg name=opt/org.opensuse.combustion/script,file=/var/combustion-script
Combustionは、Ignitionとともに使用することができます。Ignitionとともに使用する場合は、設定メディアのignition
にラベルを付け、以下に示すように、ignition
ディレクトリ構造にconfig.ign
を含むディレクトリを含めます。
<root directory> └── combustion └── script └── other files └── ignition └── config.ign
このシナリオでは、IgnitionはCombustionの前に実行されます。
9.2 script
環境設定ファイル #
script
環境設定ファイルは、transactional-updateシェルでシステム上で実行される一連のコマンドです。このセクションでは、Combustionを使用して、さまざまな設定タスクを実行する例を示します。
script
ファイルはbashによって解釈されるため、必ず最初の行で、インタープリタ宣言を使用してファイルを開始してください。
#!/bin/bash
システムにログインする場合は、少なくともroot
パスワードを含めてください。ただし、SSHキーを使用した認証を確立することをお勧めします。root
パスワードを使用する必要がある場合は、セキュアなパスワードを設定してください。ランダムに生成されたパスワードを使用する場合は、少なくとも10文字を使用してください。パスワードを手動で作成する場合は、10文字以上を使用し、大文字と小文字、および数字を組み合わせます。
9.2.1 ネットワーク設定 #
最初のブート時にネットワーク接続を設定して使用するには、script
に次のステートメントを追加します。
# combustion: network
このステートメントを使用すると、rd.neednet=1
引数がdracutに渡されます。このステートメントを使用しない場合、システムはネットワーク接続なしで設定されます。
9.2.2 パーティショニング #
SLE Micro生イメージは、5.1項 「デフォルトパーティショニング」で説明されるように、デフォルトのパーティショニングスキームで提供されます。異なるパーティショニングを使用することもできます。次の一連のスニペット例では、/home
を別のパーティションに移動します。
次のスクリプトは、スナップショットに含まれていない変更を実行します。スクリプトが失敗し、スナップショットが破棄された場合、一部の変更は表示されたままとなり元に戻すことができません(/dev/vdb
デバイスへの変更と同様)。
次のスニペットは、/dev/vdb
デバイス上で単一パーティションを持つGPTを作成します。
sfdisk /dev/vdb <<EOF label: gpt type=linux EOF partition=/dev/vdb1
パーティションはBTRFSにフォーマットされます。
wipefs --all ${partition} mkfs.btrfs ${partition}
次のスニペットによって、/home
の可能なコンテンツが新しい/home
フォルダの場所に移動されます。
mount /home mount ${partition} /mnt rsync -aAXP /home/ /mnt/ umount /home /mnt
次のスニペットは、/etc/fstab
の古いエントリを削除して、新しいエントリを作成します。
awk -i inplace '$2 != "/home"' /etc/fstab echo "$(blkid -o export ${partition} | grep ^UUID=) /home btrfs defaults 0 0" >>/etc/fstab
9.2.3 root
のパスワードの設定 #
root
パスワードを設定する前に、openssl passwd -6
などを使用して、パスワードのハッシュを生成します。パスワードを設定するには、script
に以下を追加します:
echo 'root:$5$.wn2BZHlEJ5R3B1C$TAHEchlU.h2tvfOpOki54NaHpGYKwdNhjaBuSpDotD7' | chpasswd -e
9.2.4 SSHキーの追加 #
次のスニペットは、root
のSSHキーを格納するディレクトリを作成し、設定デバイスにあるSSH公開鍵をauthorized_keys
ファイルにコピーします。
mkdir -pm700 /root/.ssh/ cat id_rsa_new.pub >> /root/.ssh/authorized_keys
SSHを介したリモートログインを使用する必要がある場合は、SSHサービスを有効にする必要があります。詳細については、9.2.5項 「サービスの有効化」を参照してください。
9.2.5 サービスの有効化 #
SSHサービスなど、一部のサービスを有効化する必要がある場合があります。SSHサービスを有効化するには、次の行をscript
に追加します。
systemctl enable sshd.service
9.2.6 パッケージのインストール #
一部のパッケージには追加のサブスクリプションが必要になる場合があるため、あらかじめシステムを登録する必要がある場合があります。また、追加のパッケージをインストールするには、利用可能なネットワーク接続が必要になる場合もあります。
最初のブート設定時に、システムに追加パッケージをインストールできます。たとえば、以下を追加して、vim
エディタをインストールできます。
zypper --non-interactive install vim-small
設定が完了して、設定されたシステムでブートした後では、zypper
を使用できないことに注意してください。後で変更を実行するには、transactional-update
コマンドを使用して、変更されたスナップショットを作成する必要があります。詳細については、Chapter 3, Administration using transactional updatesを参照してください。