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にラベルを付け、以下に示すように、ディレクトリ構造にconfig.ignを含むignitionディレクトリを含めます。
<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/fstab9.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
9.2.5 サービスの有効化 #
SSHサービスなど、一部のサービスを有効化する必要がある場合があります。SSHサービスを有効化するには、次の行をscriptに追加します。
systemctl enable sshd.service
9.2.6 パッケージのインストール #
一部のパッケージには追加のサブスクリプションが必要になる場合があるため、あらかじめシステムを登録する必要がある場合があります。また、追加のパッケージをインストールするには、利用可能なネットワーク接続が必要になる場合もあります。
最初のブート設定時に、システムに追加パッケージをインストールできます。たとえば、以下を追加して、vimエディタをインストールできます。
zypper --non-interactive install vim-small
設定が完了して、設定されたシステムでブートした後では、zypperを使用できないことに注意してください。後で変更を実行するには、transactional-updateコマンドを使用して、変更されたスナップショットを作成する必要があります。詳細については、Section 2, “Administration using transactional updates”を参照してください。