Anaconda のカスタマイズ
Red Hat Enterprise Linux でのインストーラーの外観の変更およびカスタムアドオンの作成
概要
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。
Jira からのフィードバック送信 (アカウントが必要)
- Jira の Web サイトにログインします。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ダイアログの下部にある Create をクリックします。
第1章 Anaconda のカスタマイズの概要 リンクのコピーリンクがクリップボードにコピーされました!
1.1. Anaconda のカスタマイズの概要 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux および Fedora インストールプログラムである Anaconda では、最新バージョンに多くの改良が追加されました。これらの改善の 1 つは、カスタマイズの可能性が強化されました。アドオンを作成して、ベースインストーラー機能を拡張し、グラフィカルユーザーインターフェイスの外観を変更できるようになりました。
このドキュメントでは、以下をカスタマイズする方法を説明します。
- ブートメニュー: 事前設定されたオプション、色スキーム、および背景
- グラフィカルインターフェイスの外観: ロゴ、背景、製品名
- インストーラーの機能: グラフィカルユーザーインターフェイスおよびテキストユーザーインターフェイスに新しいキックスタートコマンドと新しい画面を追加して、インストーラーを強化できるアドオン
また、このガイドは、Red Hat Enterprise Linux 8 および Fedora 17 以降にのみ適用されることに注意してください。
本ガイドで説明されている手順は、Red Hat Enterprise Linux 8 または同様のシステム用に記述されています。他のシステムでは、使用されるツールやアプリケーション (カスタム ISO イメージを作成する genisoimage
など) は異なるため、手順の調整が必要になる場合があります。
サポートステートメント
Red Hat は、Red Hat Enterprise Linux Image Builder を使用した Red Hat Enterprise Linux インストールメディアとイメージのカスタマイズのみサポートします。もしくは、キックスタートを使用してインフラストラクチャーに一貫性のあるシステムをデプロイすることもできます。
第2章 事前カスタマイズタスクの実行 リンクのコピーリンクがクリップボードにコピーされました!
2.1. ISO イメージの使用 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、以下の方法を説明します。
- Red Hat ISO をデプロイメントします。
- カスタマイズを含む新規ブートイメージを作成します。
2.2. RH ブートイメージのダウンロード リンクのコピーリンクがクリップボードにコピーされました!
インストーラーのカスタマイズを開始する前に、Red Hat が提供するブートイメージをダウンロードします。アカウントにログインした後に、Red Hat カスタマーポータル から Red Hat Enterprise Linux 8 ブートメディアを取得できます。
- アカウントには、Red Hat Enterprise Linux 8 イメージをダウンロードするために十分なエンタイトルメントが必要です。
-
Binary DVD
またはBoot ISO
イメージをダウンロードし、任意のイメージバリアント (Server または ComputeNode) を使用することができます。 -
KVM Guest Image や Supplementary DVD などの他の利用可能なダウンロードを使用してインストーラーをカスタマイズすることはできません。
KVM Guest Image
やSupplementary DVD
などの利用可能なダウンロードも可能です。
バイナリー DVD およびブート ISO のダウンロードの詳細は、製品のダウンロード を参照してください。
2.3. Red Hat Enterprise Linux ブートイメージの抽出 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順に従って、ブートイメージの内容を抽出します。
手順
-
/mnt/iso
ディレクトリーが存在し、現在そこにマウントされていないことを確認してください。 ダウンロードしたイメージをマウントします。
mount -t iso9660 -o loop path/to/image.iso /mnt/iso
# mount -t iso9660 -o loop path/to/image.iso /mnt/iso
Copy to Clipboard Copied! Toggle word wrap Toggle overflow path/to/image.iso は、ダウンロードしたブートイメージのパスです。
ISO イメージのコンテンツを配置する作業ディレクトリーを作成します。
mkdir /tmp/ISO
$ mkdir /tmp/ISO
Copy to Clipboard Copied! Toggle word wrap Toggle overflow マウントされたイメージのすべてのコンテンツを新しい作業ディレクトリーにコピーします。
-p
オプションを使用して、ファイルおよびディレクトリーのパーミッションと所有権を保持するようにしてください。cp -pRf /mnt/iso /tmp/ISO
# cp -pRf /mnt/iso /tmp/ISO
Copy to Clipboard Copied! Toggle word wrap Toggle overflow イメージをアンマウントします。
umount /mnt/iso
# umount /mnt/iso
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第4章 グラフィカルユーザーインターフェイスのブランド化と色調節 リンクのコピーリンクがクリップボードにコピーされました!
Anaconda ユーザーインターフェイスのカスタマイズには、グラフィカル要素のカスタマイズや製品名のカスタマイズが含まれます。
このセクションでは、グラフィカル要素と製品名をカスタマイズする方法を説明します。
前提条件
- ISO イメージをダウンロードしてデプロイメントしている。
- 独自のブランディングマネージメントを作成している。
ブートイメージのダウンロードと抽出については、Red Hat Enterprise Linux ブートイメージの抽出を参照してください。
ユーザーインターフェイスのカスタマイズには、以下のハイレベルなタスクが必要です。
- 前提条件を完了します。
- カスタムブランディング資料を作成する (グラフィカル要素をカスタマイズする予定の場合)
- グラフィカル要素のカスタマイズ (カスタマイズする予定の場合)
- 製品名のカスタマイズ (カスタマイズを計画している場合)
- product.img ファイルを作成。
- カスタムブートイメージを作成
カスタムブランディング資料を作成するには、まずデフォルトのグラフィカル要素ファイルタイプと寸法を参照します。適切なカスタム資料を作成できます。デフォルトのグラフィカル要素の詳細は、Customizing graphical elements セクションに記載されているサンプルファイルを参照してください。
4.1. グラフィカル要素のカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
グラフィカル要素をカスタマイズするには、カスタマイズ可能な要素をカスタムブランドの資料に変更または置き換え、コンテナーファイルを更新します。
インストーラーのカスタマイズ可能なグラフィカル要素は、インストーラーランタイムファイルシステムの /usr/share/anaconda/pixmaps/
ディレクトリーに保存されます。このディレクトリーには、以下のカスタマイズ可能なファイルが含まれます。
さらに、/usr/share/anaconda/
ディレクトリーには、anaconda-gtk.css
という名前の CSS スタイルシートが含まれており、メインの UI 要素のファイル名とパラメーター (サイドバーとトップバーのロゴおよび背景) を決定します。このファイルには、要件に従ってカスタマイズできる以下の内容が含まれます。
CSS ファイルの最も重要な部分は、解決に基づいてスケーリングを処理する方法です。PNG イメージの背景はスケーリングされず、常に実際の画面に表示されます。代わりに、バックグラウンドには透過的な背景があり、スタイルシートは @define-color
行に一致する背景色を定義します。そのため、バックグラウンド イメージ は背景の 色 に "フェード" します。これは、イメージのスケーリングを必要とせずに、すべての解像度でバックグラウンドが機能することを意味します。
また、background-repeat
パラメーターをバックグラウンドのタイル配置に変更することもできます。インストールするすべてのシステムが同じディスプレイの解像度を持つことを保証している場合は、バー全体を埋めるバックグラウンドイメージを使用できます。
上記のファイルはどれでもカスタマイズできます。これを行ったら、セクション 2.2 "product.img ファイルの作成" の手順に従い、カスタムグラフィックスを備えた独自の product.img を作成します。その後、セクション 2.3 "カスタムブートイメージの作成" を参照し、変更が含まれる新しいブート可能な ISO イメージを作成します。
4.2. 製品名のカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
プロダクト名をカスタマイズするには、カスタム .buildstamp
ファイルを作成する必要があります。これを行うには、以下の内容で新しいファイル .buildstamp.py
を作成します。
My Distribution を、インストーラーで表示する名前に変更します。
カスタム .buildstamp ファイルを作成したら、Creating a product.img file セクションの手順に従い、カスタマイズを含む新しい product.img ファイルを作成します。また、Creating custom boot images セクションに従い、を含む変更が含まれる新しい起動可能な ISO ファイルを作成します。
4.3. デフォルト設定のカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
独自の設定ファイルを作成し、これを使用してインストーラーの設定をカスタマイズすることができます。
4.3.1. デフォルトの設定ファイルの設定 リンクのコピーリンクがクリップボードにコピーされました!
Anaconda 設定ファイルは、.ini
ファイル形式で記述できます。Anaconda 設定ファイルは、セクション、オプション、およびコメントで構成されています。各セクションは、[section]
ヘッダー、#
文字で始まるコメント、および オプション
を定義するためのキーで定義されます。生成される設定ファイルは、configparser
設定ファイルパーサーで処理されます。
/etc/anaconda/anaconda.conf
にあるデフォルトの設定ファイルには、文書化されたセクションおよびオプションが含まれています。このファイルは、インストーラーの完全なデフォルト設定を提供します。製品設定ファイルの設定は、/etc/anaconda/product.d/
から変更でき、カスタム設定ファイルは /etc/anaconda/conf.d/
から変更できます。
以下の設定ファイルは、RHEL 8 のデフォルト設定を説明します。
4.3.2. 製品設定ファイルの設定 リンクのコピーリンクがクリップボードにコピーされました!
製品設定ファイルには、製品を識別するセクションが 1 つまたは 2 つあります。[Product]
セクションは、プロダクトの製品名を指定します。[Base Product]
セクションは、ベース製品 (存在する場合) の製品名を指定します。たとえば、Red Hat Enterprise Linux は Red Hat Virtualization のベース製品です。
インストーラーは、指定された製品の設定ファイルを読み込む前に、ベース製品の設定ファイルを読み込みます。たとえば、まず Red Hat Enterprise Linux の設定を読み込み、次に Red Hat Virtualization の設定を読み込みます。
Red Hat Enterprise Linux の製品設定ファイルの例を参照してください。
Red Hat Virtualization の製品設定ファイルの例を参照してください。
プロダクトのインストーラー設定をカスタマイズするには、製品設定ファイルを作成する必要があります。上記の例のような内容で、my-distribution.conf
という名前の新しいファイルを作成します。[Product]
セクションの product_name を、製品の名前 (例: My Distribution) に変更します。製品名は、.buildstamp
ファイルで使用される名前と同じでなければなりません。
カスタム設定ファイルを作成したら、product.img ファイルの作成 セクションの手順に従って、カスタマイズを含む 新しい product.img
ファイルを作成し、カスタムブートイメージの作成 に従って、変更を含めた新しい起動可能な ISO ファイルを作成します。
4.3.3. カスタム設定ファイルの設定 リンクのコピーリンクがクリップボードにコピーされました!
インストーラー設定を製品名とは別にカスタマイズするには、カスタム設定ファイルを作成する必要があります。これを行うには、Configuring the default configuration files の例のような内容で 100-my-configuration.conf
という名前の新規ファイルを作成し、[Product]
および [Base Product]
セクションを省略します。
カスタム設定ファイルを作成したら、product.img ファイルの作成 セクションの手順に従って、カスタマイズを含む 新しい product.img
ファイルを作成し、カスタムブートイメージの作成 に従って、変更を含めた新しい起動可能な ISO ファイルを作成します。
第5章 インストーラーアドオンの開発 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、Anaconda とそのアーキテクチャーの詳細と、独自のアドオンの開発方法を説明します。Anaconda およびそのアーキテクチャーの詳細は、Anaconda バックエンドおよびアドオンが機能するさまざまなプラグインポイントを理解するのに役立ちます。また、アドオンの開発に対応するのに役立ちます。
5.1. Anaconda およびアドオンの概要 リンクのコピーリンクがクリップボードにコピーされました!
Anaconda: Fedora、Red Hat Enterprise Linux、およびその他の派生製品に使用されるオペレーティングシステムインストーラーです。これは、Gtk
ウィジェット (C で記述)、systemd
ユニット、dracut
ライブラリーなどの一部の追加ファイルが含まれる、一連の Python モジュールおよびスクリプトです。同時に、これらは、作成される (ターゲット) システムのパラメーターを設定してから、このシステムをマシンにセットアップできるツールを形成します。インストールプロセスには、主に 4 つのステップがあります。
- インストール先の準備 (通常は、ディスクのパーティション設定)
- パッケージおよびデータのインストール
- ブートローダーのインストールおよび設定
- 新規インストールシステムの設定
Anaconda を使用すると、以下の 3 つの方法で Fedora、Red Hat Enterprise Linux、および派生製品をインストールできます。
グラフィカルユーザーインターフェイス (GUI) の使用:
これは、最も一般的なインストール方法です。インターフェイスを使用すると、インストールを開始する前に、設定がほとんどまたは何も必要のない状態でシステムを対話的にインストールできます。この方法は、複雑なパーティションレイアウトの設定など、一般的なすべてのユースケースを取り上げます。
グラフィカルインターフェイスは VNC
を介したリモートアクセスをサポートします。これにより、グラフィックカードやモニターが接続されていないシステムでも GUI を使用できます。
テキストユーザーインターフェイス (TUI) の使用:
TUI はモノクロラインプリンターと同様に動作します。これにより、カーソルの移動、色、その他の高度な機能に対応しないシリアルコンソールで作業できます。テキストモードは限定されており、ネットワーク設定、言語オプション、インストール (0 パッケージ) ソースなど、最も一般的なオプションのみをカスタマイズできます。このインターフェイスでは、手動パーティション設定などの高度な機能は利用できません。
キックスタートファイルの使用:
キックスタートファイルは、シェルのような構文を持つプレーンテキストファイルで、インストールプロセスを実行するためのデータを含めることができます。キックスタートファイルを使用すると、インストールを部分的または完全に自動化できます。インストールを完全に自動化するには、すべての必要なエリアを設定する一連のコマンドが必要になります。1 つ以上のコマンドが見つからない場合は、インストールに対話が必要です。
インストーラー自体の自動化以外に、キックスタートファイルには、インストールプロセス中に特定の時点で実行するカスタムスクリプトを含めることができます。
5.2. Anaconda アーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
Anaconda は Python モジュールおよびスクリプトのセットです。また、外部パッケージおよびライブラリーも使用します。このツールセットの主要コンポーネントには、以下のパッケージが含まれます。
-
pykickstart
- キックスタートファイルを解析し、検証します。また、インストールを動作させる値を保存するデータ構造も提供します。 -
yum
: パッケージをインストールして依存関係を解決するパッケージマネージャー -
blivet
: ストレージ管理に関連するすべてのアクティビティーを処理します。 -
pyanaconda
- キーボードおよびタイムゾーンの選択、ネットワーク設定、ユーザー作成など、Anaconda のユーザーインターフェイスおよびモジュールが含まれます。システム指向の機能を実行するためのさまざまなユーティリティーも提供します。 -
python-meh
- クラッシュ発生時に追加のシステム情報を収集して保存する例外ハンドラーを含みます。また、この情報をlibreport
ライブラリーに渡します。それ自体は ABRT プロジェクト に含まれます。 -
dasbus
-D-Bus
ライブラリーと、anaconda のモジュールと外部コンポーネントとの通信を有効にします。 -
python-simpleline
- Anaconda テキストモードでユーザーの対話を管理するテキスト UI フレームワークライブラリー -
gtk
- GUI を作成および管理する Gnome ツールキットライブラリー
前述したパッケージへの分割以外に、Anaconda は内部的にユーザーインターフェイスと、別個のプロセスとして実行され、D-Bus
ライブラリーを使用して通信するモジュールセットに分けられています。これらのモジュールは以下のとおりです。
-
Boss
- 内部モジュール検出、ライフサイクル、およびコーディネーションを管理します。 -
Localization
- ロケールを管理します。 -
Network
- ネットワークを処理します。 -
Payloads
-rpm
、ostree
、tar
などの異なる形式でインストール用のデータを処理します。ペイロードはインストール用のデータのソースを管理します。ソースは CD-ROM、HDD、NFS、URL などの形式によって異なる可能性があります。 -
Security
- セキュリティー関連機能を管理します。 -
Service
- サービスを処理します。 -
Storage
-blivet
を使用してストレージを管理します。 -
Subscription
-subscription-manager
ツールと Insights を処理します。 -
Timezone
- 時間、日付、ゾーン、および時刻の同期を処理します。 -
Users
- ユーザーおよびグループを作成します。
各モジュールは、処理するキックスタート部分を宣言し、キックスタートから設定を適用してインストール環境とインストール済みシステムに適用します。
Anaconda の Python コード部分 (pyanaconda
) は、ユーザーインターフェイスを所有する “メイン” プロセスとして起動します。指定のキックスタートデータはすべて pykickstart
モジュールと Boss
モジュールを使用して解析され、その他のすべてのモジュールを検出し、起動します。その後、メインプロセスは宣言された機能に応じてキックスタートデータをモジュールに送信します。モジュールはデータを処理し、インストール環境に設定を適用し、必要な選択がすべて行われているかどうかを UI が検証します。インストールされていない場合は、対話式インストールモードでデータを指定する必要があります。必要な選択がすべて行われると、インストールを開始できます。モジュールは、インストール済みシステムにデータを書き込むことができます。
5.3. Anaconda ユーザーインターフェイス リンクのコピーリンクがクリップボードにコピーされました!
Anaconda ユーザーインターフェイス (UI) には、ハブおよびスポークモデルとして知られる非リニア構造があります。
Anaconda のハブおよびスポークモデルの利点は以下のとおりです。
- インストーラー画面をフォローする柔軟性。
- デフォルト設定を保持する柔軟性。
- 設定された値の概要を説明します。
- 拡張性をサポートします。ハブは、何も並べ替えることなく追加でき、複雑な順序の依存関係を解決できます。
- グラフィカルおよびテキストモードでのインストールをサポートします。
以下の図は、インストーラーレイアウトと ハブ と スポーク (スクリーン) 間の対話を可能にします。
図5.1 ハブおよびスリープモデル
この図では、画面 2-13 は 通常のスポーク と呼ばれ、スクリーン 1 および 14 は スタンドアロンのスポーク です。スタンドアロンのスリープとは、スタンドアロンのドアまたはハブの前後に使用できる画面です。たとえば、インストール先頭の Welcome
画面では、残りのインストールに言語を選択するように求められます。
-
インストールの概要
は、Anaconda の唯一のハブです。インストールを開始する前に設定されたオプションの概要が示されます。
各スポークには、ハブを反映する以下の事前定義 プロパティー があります。
-
ready
: 到着できるかどうかを示します。たとえば、インストーラーがパッケージソースを設定している場合は、スポークがグレーで色化され、設定が完了するまでアクセスできません。 -
completed
- スポークが完了しているかどうかをマークします (必要なすべての値が設定されます)。 -
mandatory
- インストールを続行する前にスポークにアクセスする 必要がある かどうかを決定します。たとえば、ディスクの自動パーティション設定を使用する場合でも、Installation Destination
スポークにアクセスする必要があります。 -
status
: (ハブのスポーク名で表示される) 内で設定された値の短いサマリーを提供します。
ユーザーインターフェイスを明確にするために、スポークは カテゴリー に分類されます。たとえば、ローカライゼーションカテゴリーグループは、キーボードレイアウト
の選択、言語サポート、タイムゾーン設定などに使用できます。
各スリープには UI 制御が含まれており、1 つ以上のモジュールから値を表示し、変更できます。アドオンが提供するスポークにも同様のことが言えます。
5.4. Anaconda スレッド間の通信 リンクのコピーリンクがクリップボードにコピーされました!
インストールプロセス中に実行する必要のあるアクションの一部には時間がかかる場合があります。たとえば、既存のパーティションのディスクをスキャンしたり、パッケージメタデータをダウンロードしたりできます。待機して応答しなくなるため、Anaconda はこれらのアクションを別のスレッドで実行します。
Gtk ツールキットは、複数のスレッドからの要素の変更をサポートしません。Gtk の主なイベントループは、Anaconda プロセスのメインスレッドで実行されます。したがって、GUI に関連するすべてのアクションはメインスレッドで実行する必要があります。これを行うには、GLib.idle_add
を使用しますが、これは常に簡単でも望ましい訳ではありません。pyanaconda.ui.gui.utils モジュールに定義されているいくつかのヘルパー関数およびデコレーターが難易度に追加される場合があります。
@gtk_action_wait
および @gtk_action_nowait
デコレーターにより、デコードされた関数またはメソッドが呼び出されたときに、メインスレッドで実行される Gtk のメインループに自動的にキューに置かれるように、デコレートされた関数またはメソッドが変更されます。戻り値はそれぞれ呼び出し元またはドロップされた値に返されます。
スポークやハブの通信では、準備ができ、ブロックされていないときにスポークが通知します。hubQ
メッセージキューはこの機能を処理し、メインのイベントループを定期的に確認します。スポークがアクセス可能になると、メッセージをキューに送付し、メッセージをブロックしないようにします。
スポークがステータスを更新するか、フラグを完了する必要がある場合にも、同じことが当てはまります。Configuration and Progress
ハブには、progressQ
と呼ばれる異なるキューがあり、インストール進捗の更新を転送するためのメディアとして機能します。
これらのメカニズムは、テキストベースのインターフェイスにも使用されます。テキストモードではメインループはありませんが、キーボード入力にかかる時間がほとんどありません。
5.5. Anaconda モジュールおよび D-Bus ライブラリー リンクのコピーリンクがクリップボードにコピーされました!
Anaconda のモジュールは、独立したプロセスとして実行されます。D-Bus
API を使用してこれらのプロセスと通信するには、dasbus
ライブラリーを使用します。
D-Bus
API を使用したメソッドへの呼び出しは非同期ですが、dasbus
ライブラリーでは Python で同期メソッド呼び出しに変換できます。以下のプログラムのいずれかを記述することもできます。
- 非同期呼び出しおよびリターンハンドラーを使用するプログラム
- 呼び出しが完了するまで呼び出しを待機する同期呼び出しを使用するプログラム
スレッドと通信の詳細は、Anaconda スレッド間 の通信を参照してください。
また、Anaconda は、モジュールで実行している Task オブジェクトを使用します。タスクには、追加のスレッドで自動的に実行される D-Bus
API とメソッドがあります。タスクを正常に実行するには、sync_run_task
関数および async_run_task
ヘルパー関数を使用します。
5.6. Hello World アドオンの例 リンクのコピーリンクがクリップボードにコピーされました!
Anaconda 開発者が、GitHub で利用可能な “Hello World” というサンプルを公開しています。https://github.com/rhinstaller/hello-world-anaconda-addon/ その他のセクションの説明は、これで再現しています。
5.7. Anaconda アドオン構造 リンクのコピーリンクがクリップボードにコピーされました!
Anaconda アドオンは、__init__.py
とその他のソースディレクトリー (サブパッケージ) のディレクトリーが含まれる Python パッケージです。Python では各パッケージ名を一度だけインポートできるため、パッケージの最上層のディレクトリーに一意の名前を指定します。アドオンは名前に関係なく読み込まれるため、任意の名前を使用できます。唯一の要件は、特定のディレクトリーに配置する必要があることです。
そのため、推奨のアドオン命名規則は Java パッケージまたは D-Bus サービス名に似ています。
ディレクトリー名を Python パッケージの一意の名前にするには、アドオン名を、ドットではなくアンダースコア (_
) を使用して組織の逆引きドメイン名に接頭辞を指定します。例: com_example_hello_world
各ディレクトリーに __init__.py
ファイルを作成してください。このファイルがないディレクトリーは、無効な Python パッケージとみなされます。
アドオンを作成する場合は、以下を確認してください。
-
各インターフェイス (グラフィカルインターフェイスおよびテキストインターフェイス) のサポートは個別のサブパッケージで利用可能です。このサブパッケージには、グラフィカルインターフェイスには
gui
、テキストベースのインターフェイスにはtui
という名前が付けられています。 -
gui
パッケージおよびtui
パッケージには、spoke
サブパッケージが含まれています。[1] - パッケージに含まれるモジュールには任意の名前があります。
-
gui/
およびtui/
ディレクトリーには、任意の名前の Python モジュールを含めることができます。 - アドオンの実際の作業を実行するサービスがあります。このサービスは、Python またはその他の言語で記述できます。
- サービスは、D-Bus およびキックスタートのサポートを実装します。
- アドオンには、サービスの自動起動を有効にするファイルが含まれます。
以下は、全インターフェイス (Kickstart、GUI、および TUI) をサポートするアドオンのディレクトリー構造の例です。
例5.1 アドオン構造の例
各パッケージには、API で定義される 1 つ以上のクラスから継承されるクラスを定義する任意の名前を持つモジュールが少なくとも 1 つ含まれる必要があります。
アドオンが新しいカテゴリーを定義する必要がある場合は、カテゴリーサブパッケージを追加できますが、これは推奨していません。
5.8. Anaconda サービスおよび設定ファイル リンクのコピーリンクがクリップボードにコピーされました!
Anaconda サービスと設定ファイルは data/ ディレクトリーに含まれます。アドオンサービスを起動し、D-Bus を設定するには、これらのファイルが必要です。
以下は、Anaconda Hello World アドオンの例です。
例5.2 addon-name.conf の例:
このファイルは、インストール環境の /usr/share/anaconda/dbus/confs/
ディレクトリーに置く必要があります。org.fedoraproject.Anaconda.Addons.HelloWorld
は D-Bus 上の addon のサービスの場所に対応する必要があります。
例5.3 addon-name.service の例:
このファイルは、インストール環境の /usr/share/anaconda/dbus/services/
ディレクトリーに置く必要があります。org.fedoraproject.Anaconda.Addons.HelloWorld
は D-Bus 上の addon のサービスの場所に対応する必要があります。Exec=
で始まる行の値は、インストール環境でサービスを開始する有効なコマンドである必要があります。
5.9. GUI アドオンの基本機能 リンクのコピーリンクがクリップボードにコピーされました!
アドオンのキックスタートサポートと同様に、GUI サポートでは、アドオンのすべての部分に、API で定義される特定のクラスから継承されたクラスを定義するモジュールが少なくとも 1 つ含まれる必要があります。グラフィカルアドオンサポートの場合、追加すべき唯一のクラスは NormalSpoke
クラスで、これはスクリーンの通常スポークタイプのクラスとして pyanaconda.ui.gui.spokes
に定義されています。詳細は、Anaconda ユーザーインターフェイス を参照してください。
NormalSpoke
から継承された新しいクラスを実装するには、API が必要とする以下のクラス属性を定義する必要があります。
-
builderObjects
: スポークの.glade
ファイルからすべての最上位オブジェクトをリスト表示します。これは、子オブジェクトでスポークに (再帰的に) 公開される必要があります。すべてをスポークに公開する必要がある場合 (非推奨) は、リストは空でなければなりません。 -
mainWidgetName
:.glade
ファイルで定義されているようにメインウィンドウウィジェット (Add Link) の ID が含まれます。 -
uiFile
:.glade
ファイルの名前が含まれます。 -
category
: スポークが属するカテゴリーのクラスが含まれます。 -
icon
: ハブ上のスポークに使用するアイコンの識別子が含まれます。 -
title
: ハブ上のスポークに使用するタイトルを定義します。
5.10. アドオングラフィカルユーザーインターフェイス (GUI) のサポートの追加 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、以下の大まかな手順を実行することで、アドオンのグラフィカルユーザーインターフェイス (GUI) にサポートを追加する方法を説明します。
- Normalspoke クラスに必要な属性を定義します。
-
__init__
とinitialize
メソッドを定義します。 -
refresh
、apply
、およびexecute
メソッドを定義します。 -
status
およびready
、completed
およびmandatory
のプロパティーを定義します。
前提条件
- アドオンには、キックスタートのサポートが含まれています。Anaconda アドオンの構造 を参照してください。
-
Anaconda
固有の Gtk ウィジェット (SpokeWindow
など) が含まれる anaconda-widgets および anaconda-widgets-devel パッケージをインストールします。
手順
- 以下の例に従って、アドオングラフィカルユーザーインターフェイス (GUI) のサポートを追加するために必要なすべての定義で以下のモジュールを作成します。
例5.4 Normalspoke クラスに必要な属性の定義
__all__
属性は spoke
クラスをエクスポートします。この後に、以前 GUI アドオンの基本機能 で言及した、属性の定義を含む定義の最初の行が続きます。これらの属性値は、com_example_hello_world/gui/spokes/hello.glade
ファイルで定義されるウィジェットを参照します。この他に、以下の 2 つの重要な属性があります。
-
category
。この値は、com_example_hello_world.gui.categories
モジュールのHelloWorldCategory
クラスからインポートされます。アドオンへのパスがsys.path
にあるHelloWorldCategory
。これにより、com_example_hello_world
パッケージから値をインポートできます。category
属性はN_ function
名の一部で、変換用の文字列をマークしますが、変換は後の段階で行われるため、変換されていない文字列のバージョンを返します。 -
タイトル
。定義内にアンダースコアが 1 つ含まれています。title
属性アンダースコアは、タイトル自体の先頭をマークし、Alt+H
キーボードショートカットを使用してスポークに到達できるようにします。
通常、クラス定義のヘッダーとクラス attributes
の定義に続くのは、クラスのインスタンスを初期化するコンストラクターです。Anaconda グラフィカルインターフェイスオブジェクトの場合、新しいインスタンスの初期化には __init__
メソッドおよび initialize
メソッドの 2 つのメソッドがあります。
このようなメソッドが 2 つある理由は、spoke
の初期化に時間がかかる可能性があるため、あるタイミングで GUI オブジェクトがメモリーに作成され、別のタイミングで完全に初期化される可能性があるためです。したがって、__init__
メソッドは親の _init__
メソッドのみを呼び出し、たとえば、GUI 以外の属性を初期化する必要があります。一方、インストーラーのグラフィカルユーザーインターフェイスの初期化時に呼び出される initialize
メソッドは、スポークの完全な初期化を完了する必要があります。
Hello World add-on
の例で、以下のようにこの 2 つのメソッドを定義します。__init__
メソッドに渡される引数の数および説明をメモしてください。
例5.5 __init__
と初期化メソッドの定義
__init__
メソッドに渡されるデータパラメーターは、すべてのデータが保存されるキックスタートファイルのメモリー内ツリーのような表示になります。ancestor の __init__
メソッドのいずれかで、self.data
属性に格納されます。これにより、クラス内の他のすべてのメソッドで構造の読み取りおよび修正が可能になります。
storage object
は RHEL8 以降利用できなくなりました。アドオンがストレージ設定と対話する必要がある場合は、Storage DBus
モジュールを使用します。
HelloWorldData クラスは Hello World アドオンの例 ですでに定義されているため、このアドオンの self.data にはすでにサブツリーがあります。クラスのインスタンスである root は self.data.addons.com_example_hello_world
として利用できます。
ancestor の __init__
が実行するもう 1 つのアクションは、spoke's .glade
で GtkBuilder のインスタンスを初期化し、これを self.builder
として保存することです。initialize
メソッドはこれを使用して、キックスタートファイルの %addon セクションにあるテキストを表示し、変更するために使用される GtkTextEntry
を取得します。
__init__
および initialize
メソッドは両方とも、スポークの作成時に重要となります。ただし、スポークの主なロールは、スポークの値の表示と設定を変更または確認したいユーザーがアクセスすることです。これを有効にするには、その他の 3 つの方法を使用できます。
-
refresh
: スポークがアクセスされようとするときに呼び出されます。このメソッドは、スポーク (主に UI 要素) の状態を更新し、表示されるデータが内部データ構造と一致するようにします。これにより、self.data 構造に保存されている現在の値が表示されるようにします。 -
apply
: スポークが残っている場合に呼び出され、UI 要素の値をself.data
構造に戻す際に使用されます。 -
execute
: ユーザーがスポークを離れる場合に呼び出され、スポークの新しい状態に基づいてランタイムの変更を実行する際に使用されます。
これらの関数は、以下のように Hello World アドオンのサンプルに実装されます。
例5.6 更新、適用、および実行メソッドの定義
複数の追加のメソッドを使用して、スポークの状態を制御できます。
-
ready
: スポークへアクセスできるかどうかを判断します。値が "False" の場合はspoke
へアクセスできません。たとえば、パッケージソースを設定する前にPackage Selection
スポークにアクセスできません。 -
completed
- スポークが完了しているかどうかを確認します。 -
mandatory
: スポークが必須かどうかを判別します。たとえば、自動パーティションを使用する場合でも、常にアクセスする必要があるInstallation Destination
スポークが必須かどうか判別します。
これらの属性はすべて、インストールプロセスの現在の状態に基づいて動的に決定する必要があります。
以下は、Hello World アドオンでのこれらのメソッドの実装例です。これには、HelloWorldData
クラスの text 属性に特定の値を設定する必要があります。
例5.7 準備完了、完了、および必須メソッドの定義
これらのプロパティーが定義された後、スポークはそのアクセス可能性と完全性を制御できますが、内部で設定された値のサマリーを提供することはできません。スポークにアクセスして、スポークがどのように設定されているかを確認する必要がありますが、これは望ましくない場合があります。このため、status
という追加のプロパティーが存在します。このプロパティーには、設定された値の短いサマリーを含む 1 行のテキストが含まれ、スポークタイトルの下のハブに表示することができます。
status プロパティーは、以下のように Hello World
の例のアドオンで定義されます。
例5.8 status
プロパティーの定義
例で説明しているプロパティーをすべて定義した後に、アドオンには、グラフィカルユーザーインターフェイス (GUI) とキックスタートを示す完全なサポートがあります。
ここで示した例は非常にシンプルで、制御を含むものはありません。GUI で機能的かつインタラクティブなスポークを開発するには、Python Gtk プログラミングに関する知識が必要です。
主な制限の 1 つとして、それぞれのスポークに独自のメインウィンドウ (SpokeWindow
ウィジェットのインスタンス) が必要である点が挙げられます。このウィジェットは、Anaconda 固有の他のウィジェットとともに、anaconda-widgets
パッケージにあります。Glade
など、GUI サポートでアドオンの開発に必要な他のファイルは、anaconda-widgets-devel
パッケージで見つけることができます。
グラフィカルインターフェイスのサポートモジュールに、必要な方法をすべて含むと、以下のセクションへ進んでテキストベースのユーザーインターフェイスのサポートを追加するか、Anaconda アドオンのデプロイおよびテスト へ進んでアドオンをテストすることができます。
5.11. アドオン GUI の高度な機能 リンクのコピーリンクがクリップボードにコピーされました!
pyanaconda
パッケージには、ヘルパー関数やユーティリティー関数が複数含まれ、ハブやスポークで使用されるコンストラクトも含まれます。そのほとんどは、pyanaconda.ui.gui.utils
パッケージにあります。
Hello World
アドオンの例は、Anaconda も使用する englightbox
コンテンツマネージャーの使用方法を示しています。このコンテンツマネージャーはウィンドウをライトボックスに入れ、可視性を高め、ユーザーの基礎となるウィンドウとの対話を防ぐことに重点を置くことができます。この機能を示すために、サンプルアドオンには新しいダイアログウィンドウを開くボタンが含まれています。ダイアログ自体は、pyanaconda.ui.gui.init で定義される GUIObject クラスから継承される特別な HelloWorldDialog です。
ダイアログクラスは、self.window 属性を介してアクセス可能な内部 Gtk ダイアログを実行および破棄する run メソッドを定義します。この属性は、同じ意味の mainWidgetName クラス属性を使用して設定されます。そのため、以下の例のようにダイアログを定義するコードは非常にシンプルです。
例5.9 englightbox Dialog の定義
Defining an englightbox Dialog
のサンプルコードは、ダイアログのインスタンスを作成してから、enlightbox コンテキストマネージャーを使用してライトボックス内でダイアログを実行します。コンテキストマネージャーにはスポークのウィンドウへの参照があり、ダイアログのライトボックスをインスタンス化するためにダイアログのウィンドウだけを必要とします。
Anaconda が提供するもう 1 つの便利な機能は、インストール時および最初の再起動後に表示されるスポークを定義する機能です。Initial Setup
ユーティリティーは、アドオングラフィカルユーザーインターフェイス (GUI) のサポートの追加 で説明されています。Anaconda と初期セットアップの両方でスポークを使用できるようにするには、pyanaconda.ui.common
モジュールで定義される最初の継承クラスとして、特別な FirstbootSpokeMixIn
クラス (別称 mixin
) を継承する必要があります。
スポークを Anaconda および初期セットアップの再設定モードで使用できるようにするには、pyanaconda.ui.common
モジュールで定義された最初の継承クラスとして、mixin
とも呼ばれる特別な FirstbootSpokeMixIn
クラスを継承する必要があります。
初期セットアップでのみ特定のスポークを利用可能にする場合は、このスポークは代わりに FirstbootOnlySpokeMixIn
クラスを継承する必要があります。
次の例に示すように、スポークを Anaconda と初期設定の両方で常に使用できるようにするには、スポークで should_run
メソッドを再定義する必要があります。
例5.10 should_run メソッドの再定義
@classmethod def should_run(cls, environment, data): """Run this spoke for Anaconda and Initial Setup""" return True
@classmethod
def should_run(cls, environment, data):
"""Run this spoke for Anaconda and Initial Setup"""
return True
pyanaconda
パッケージは、@gtk_action_wait
および @gtk_action_nowait
デコレーターなど、より高度な機能を提供しますが、これらはこのガイドの対象外となっています。その他の例は、インストーラーのソースを参照してください。
5.12. TUI アドオンの基本機能 リンクのコピーリンクがクリップボードにコピーされました!
Anaconda は、テキストベースのインターフェイス (TUI) にも対応しています。このインターフェイスは機能がさらに制限されていますが、一部のシステムでは、インタラクティブインストールの唯一の選択肢となる場合があります。テキストベースのインターフェイスとグラフィカルインターフェイスの違い、および TUI の制限に関する詳細は、Introduction to Anaconda and add-ons を参照してください。
テキストインターフェイスのサポートをアドオンに追加するには、Anaconda add-on structure の説明に従って、tui ディレクトリー内に新しいサブパッケージのセットを作成します。
インストーラーのテキストモードサポートは simpleline
ライブラリーに基づいており、非常にシンプルなユーザーの対話のみを許可します。テキストモードインターフェイスは、
- カーソルの移動には対応していません。代わりに、ラインプリンターのように動作します。
- 視覚的機能拡張 (異なる色やフォントの使用など) はサポートしません。
内部的には、simpleline
ツールキットには、App
、UIScreen
および Widget
の 3 つの主要クラスがあります。ウィジェットは、画面に出力される情報が含まれるユニットです。これらは、App クラスの単一のインスタンスによって切り替えられる UIScreens に配置されます。基本的な要素に加え、hubs
、spoke`s and `dialogs
はすべて、グラフィカルインターフェイスと同じような方法でさまざまなウィジェットを含んでいます。
アドオンで最も重要なクラスは、NormalTUISpoke
および pyanaconda.ui.tui.spokes
パッケージで定義される他のさまざまなクラスです。これらのクラスはすべて TUIObject
クラスをベースとしています。このクラス自体は、Add-on GUI advanced features で説明されている GUIObject
クラスと同じものになります。各 TUI スポークは、NormalTUISpoke
クラスを継承する Python クラスであり、API で定義される特別な引数とメソッドをオーバーライドします。テキストインターフェイスは GUI よりも簡単なため、引数は以下の 2 つのみになります。
-
title
: GUI の title 引数と同様にスポークのタイトルを決定します。 -
category
: スポークのカテゴリーを文字列として判別します。カテゴリー名はどこにも表示されず、グループ化にのみ使用されます。
TUI は GUI とは異なる方法でカテゴリーを処理します。既存のカテゴリーを新しいスポークに割り当てることが推奨されます。新しいカテゴリーを作成するには、Anaconda にパッチを適用する必要があり、ほとんどメリットがありません。
また、各スポークは、init
、initialize
、refresh
、apply
、execute
、input
、prompt
、および properties
(ready
、complete
、mandatory
、status
) メソッドをオーバーライドすることが想定されています。
5.13. シンプルな TUI Spoke の定義 リンクのコピーリンクがクリップボードにコピーされました!
以下の例は、Hello World サンプルアドオンのシンプルな Text User Interface (TUI) スポークの実装を示しています。
前提条件
- Anaconda add-on structure の説明に従って、tui ディレクトリーに新しいサブパッケージセットを作成している。
手順
- 以下の例に従って、アドオン Text User Interface (TUI) のサポートを追加するために必要なすべての定義を含むモジュールを作成します。
例5.11 シンプルな TUI Spoke の定義
ancestor の init
のみを呼び出す場合は init
メソッドを上書きする必要はありませんが、この例のコメントでは、一般的な方法でスポーククラスのコンストラクターへ渡された引数を記述します。
上の例では、以下のようになります。
-
setup
メソッドは、各エントリーのスポークの内部属性のデフォルト値を設定します。これは、refresh
メソッドによって表示され、input
メソッドによって更新され、apply
メソッドによって使用されて内部データ構造を更新します。 -
execute
メソッドの目的は、GUI の同等のメソッドの目的と同じです。この場合、このメソッドは効果がありません。 -
input
メソッドはテキストインターフェイスに固有のものです。キックスタートまたは GUI には同等のものはありません。input
メソッドはユーザーの対話を行います。 -
input
メソッドは、入力された文字列を処理し、そのタイプと値に応じてアクションを取ります。上記の例は値を要求してから、それを内部属性 (キー) として保存します。より複雑なアドオンでは、通常、文字をアクションとして解析したり、数値を整数に変換したり、追加の画面を表示したり、ブール値を切り替えたりするなど、重要なアクションを実行する必要があります。 -
この入力を別の画面で処理する必要がある場合に備えて、入力クラスの
return
値は、InputState
enum またはinput
文字列自体のいずれかである必要があります。グラフィカルモードとは対照的に、apply
メソッドとexecute
メソッドは、スポークを離れるときに自動的に呼び出されません。入力メソッドから明示的に呼び出す必要があります。スポークの画面を閉じる (非表示にする) 場合も同様です。close
メソッドから明示的に呼び出す必要があります。
別のスポークで入力した追加情報が必要な場合など、別の画面を表示するには、別の TUIObject
をインスタンス化し、ScreenHandler.push_screen_modal()
を使用してそれを表示します。
テキストベースのインターフェイスの制限により、TUI スポークは非常によく似た構造を持つ傾向があり、ユーザーがチェックまたはチェックを外して入力する必要があるチェックボックスまたはエントリーのリストで構成されます。
5.14. NormalTUISpoke を使用したテキストインターフェイススポークの定義 リンクのコピーリンクがクリップボードにコピーされました!
シンプルな TUI スポークの定義 の例では、利用可能なデータと提供されたデータの出力と処理をメソッドによって扱う TUI スポークを実装する方法を示しました。しかし、これは別の方法でも実現できます。pyanaconda.ui.tui.spokes
パッケージの NormalTUISpoke
クラスを使用する方法です。このクラスを継承することで、設定する必要のあるフィールドと属性を指定するだけで、一般的な TUI スポークを実装できます。以下の例で説明します。
前提条件
-
Anaconda アドオン構造 で説明されているように、
TUI
ディレクトリーの下に新しいサブパッケージのセットを追加しました。
手順
- 以下の例に従って、アドオン Text User Interface (TUI) のサポートを追加するために必要なすべての定義を含むモジュールを作成します。
例5.12 NormalTUISpoke を使用したテキストインターフェイススポークの定義
5.15. Anaconda アドオンのデプロイおよびテスト リンクのコピーリンクがクリップボードにコピーされました!
独自の Anaconda アドオンをインストール環境にデプロイしてテストできます。テストを行う方法は、以下の手順に従います。
前提条件
- アドオンを作成している。
-
D-Bus
ファイルにアクセスできる。
手順
-
任意の場所に
DIR
ディレクトリーを作成します。 -
Add-on
python ファイルをDIR/usr/share/anaconda/addons/
に追加します。 -
D-Bus
サービスファイルをDIR/usr/share/anaconda/dbus/services/
にコピーします。 -
D-Bus
サービス設定ファイルを/usr/share/anaconda/dbus/confs/
にコピーします。 更新 イメージを作成します。
DIR
ディレクトリーにアクセスします。cd DIR
cd DIR
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新 イメージを見つけます。
find . | cpio -c -o | pigz -9cv > DIR/updates.img
find . | cpio -c -o | pigz -9cv > DIR/updates.img
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ISO ブートイメージの内容を抽出します。
作成された
更新
イメージを使用します。-
デプロイメント済みの ISO コンテンツを含む images ディレクトリーに
updates.img
ファイルを追加します。 - イメージを再パッケージ化します。
-
HTTP 経由で Anaconda インストーラーに
updates
.img ファイルを渡すように Web サーバーを設定します。 以下の仕様を起動オプションに追加して、システムの起動時に
updates
.img ファイルを読み込みます。inst.updates=http://your-server/whatever/updates.img to boot options.
inst.updates=http://your-server/whatever/updates.img to boot options.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
デプロイメント済みの ISO コンテンツを含む images ディレクトリーに
既存のブートイメージをデプロイメントし、product.img
ファイルを作成してイメージを再パッケージ化する方法は、Extracting Red Hat Enterprise Linux boot images を参照してください。
第6章 ポストカスタマイズタスクの完了 リンクのコピーリンクがクリップボードにコピーされました!
カスタマイズを行うには、以下のタスクを実行します。
- product.img イメージファイルを作成します (グラフィカルカスタマイズにのみ適用)。
- カスタムのブートイメージを作成します。
このセクションでは、product.img イメージファイルを作成し、カスタムブートイメージを作成する方法を説明します。
6.1. product.img ファイルの作成 リンクのコピーリンクがクリップボードにコピーされました!
product.img
イメージファイルは、実行時に既存のインストーラーファイルを置き換える新しいインストーラーファイルを含むアーカイブです。
システムの起動時に、Anaconda は起動用メディア上の images/ ディレクトリーから product.img ファイルを読み込みます。その後、このディレクトリーにあるファイルを使用して、インストーラーのファイルシステムで同じ名前が付けられたファイルを置き換えます。置き換えると、インストーラーをカスタマイズします (例: デフォルトのイメージをカスタムイメージに置き換えるためなど)。
注記: product.img
イメージには、インストーラーと同じディレクトリー構造が含まれている必要があります。インストーラーのディレクトリー構造の詳細は、以下の表を参照してください。
カスタムコンテンツのタイプ | ファイルシステムの場所 |
---|---|
pixmaps (ログ、サイドバー、トップバーなど) |
|
GUI スタイルシート |
|
Anaconda アドオン |
|
製品設定ファイル |
|
カスタム設定ファイル |
|
Anaconda DBus サービスの conf ファイル |
|
Anaconda DBus サービスファイル |
|
以下の手順では、product.img
ファイルの作成方法を説明します。
手順
/tmp
などの作業ディレクトリーに移動し、product/
という名前のサブディレクトリーを作成します。cd /tmp
$ cd /tmp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サブディレクトリー product/ を作成します。
mkdir product/
$ mkdir product/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 置き換えるファイルの場所と同じディレクトリー構造を作成します。たとえば、インストールシステムの
/usr/share/anaconda/addons
ディレクトリーにあるアドオンをテストする場合は、作業ディレクトリーに同じ構造を作成します。mkdir -p product/usr/share/anaconda/addons
$ mkdir -p product/usr/share/anaconda/addons
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記インストーラーのランタイムファイルを表示するには、インストールを起動し、仮想コンソール 1 (Ctrl+Alt+F1) に切り替えてから、2 番目の tmux ウィンドウ (Ctrl+b+2) に切り替えます。ファイルシステムの閲覧に使用できるシェルプロンプトが開きます。
カスタマイズしたファイル (この例では、Anaconda のカスタムアドオン) を新しく作成したディレクトリーに配置します。
cp -r ~/path/to/custom/addon/ product/usr/share/anaconda/addons/
$ cp -r ~/path/to/custom/addon/ product/usr/share/anaconda/addons/cp -r ~/path/to/custom/addon/ product/usr/share/anaconda/addons/cp -r ~/path/to/custom/addon/ product/usr/share/anaconda/addons/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - インストーラーに追加するすべてのファイルについて、ステップ 3 および 4 を繰り返します (ディレクトリー構造を作成してカスタムファイルをそこに配置します)。
ディレクトリーのルートに
.buildstamp
ファイルを作成します。.buildstamp
ファイルは、システムバージョン、製品、およびその他のパラメーターを説明します。以下は、Red Hat Enterprise Linux 8.4 からの.buildstamp
ファイルの例です。Copy to Clipboard Copied! Toggle word wrap Toggle overflow IsFinal
パラメーターは、イメージが製品のリリース (GA) バージョン (True
) か、Alpha、Beta、または内部マイルストーン (False
) などのプレリリースであるかを指定します。product/
ディレクトリーに移動し、product.img
アーカイブを作成します。cd product
$ cd product
Copy to Clipboard Copied! Toggle word wrap Toggle overflow find . | cpio -c -o | gzip -9cv > ../product.img
$ find . | cpio -c -o | gzip -9cv > ../product.img
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、
product/
ディレクトリーの上にproduct.img
ファイルが 1 レベル上に作成されます。-
product.img
ファイルを、デプロイメントした ISO イメージのimages/
ディレクトリーに移動します。
これで product.img ファイルが作成され、作成するカスタマイズがそれぞれのディレクトリーに配置されるようになりました。
ブート用メディアに product.img
ファイルを追加する代わりに、別の場所にこのファイルを追加し、ブートメニューで inst.updates=
ブートオプションを使用して読み込むことができます。この場合、イメージファイルは任意の名前を指定することができ、インストールシステムからこの場所にアクセス可能な限り、任意の場所 (USB フラッシュドライブ、ハードディスク、HTTP、FTP、または NFS サーバー) に配置できます。
Anaconda 起動オプションの詳細は、Anaconda Boot Options を参照してください。
6.2. カスタムブートイメージの作成 リンクのコピーリンクがクリップボードにコピーされました!
ブートイメージと GUI レイアウトをカスタマイズしたら、変更を含む新しいイメージを作成します。
カスタムブートイメージを作成するには、以下の手順に従います。
手順
-
すべての変更が作業ディレクトリーに含まれていることを確認してください。たとえば、アドオンをテストする場合は、
images/
ディレクトリーにproduct.img
を配置してください。 -
作業ディレクトリーが抽出した ISO イメージのトップレベルのディレクトリーであることを確認します (例:
/tmp/ISO/iso
)。 genisoimage
を使用して新しい ISO イメージを作成します。genisoimage -U -r -v -T -J -joliet-long -V "RHEL-8 Server.x86_64" -volset "RHEL-8 Server.x86_64" -A "RHEL-8 Server.x86_64" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot -o ../NEWISO.iso .
# genisoimage -U -r -v -T -J -joliet-long -V "RHEL-8 Server.x86_64" -volset "RHEL-8 Server.x86_64" -A "RHEL-8 Server.x86_64" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot -o ../NEWISO.iso .
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、以下のようになります。
同じディスクにファイルを読み込む場所を必要とするオプションに
LABEL=
ディレクティブを使用している場合は、-V
、-volset
、-A
のオプションの値がイメージのブートローダー設定と一致することを確認してください。ブートローダーの設定 (BIOS の場合はisolinux/isolinux.cfg
、UEFI の場合は/BOOT/grub.cfg
) がinst.stage2=LABEL=disk_label
スタンザを使用して同じディスクからインストーラーの 2 番目のステージを読み込む場合は、ディスクラベルが一致する必要があります。重要ブートローダー設定ファイルで、ディスクラベルのすべてのスペースを
\x20
に置き換えます。たとえば、RHEL 8.0
ラベルが付いた ISO イメージを作成する場合は、ブートローダー設定にRHEL\x208.0
を使用する必要があります。-o
オプションの値 (-o ../NEWISO.iso
) を、新しいイメージのファイル名に置き換えます。この例の値では、現在のディレクトリーの 上 のディレクトリーにNEWISO.iso
ファイルを作成します。このコマンドの詳細は、システムの
genisoimage(1)
man ページを参照してください。
MD5 チェックサムをイメージに埋め込みます。MD5 checksu を使用しないと、イメージ検証チェック (ブートローダー設定の
rd.live.check
オプション) が失敗し、インストールがハングする可能性があることに注意してください。implantisomd5 ../NEWISO.iso
# implantisomd5 ../NEWISO.iso
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、../NEWISO.iso を、直前の手順で作成したファイル名と ISO イメージの場所に置き換えます。
これで、新しい ISO イメージを物理メディアまたはネットワークサーバーに書き込んで物理ハードウェアで起動することや、仮想マシンのインストールを開始できるようになりました。