GNU/Linux >> Linux の 問題 >  >> Cent OS

既存のLUKSデバイスにキックスタートを介してFedora/RHEL/CentOSをインストールする方法

キックスタートインストールを使用すると、Fedora、Red Hat Enterprise Linux、またはCentOSの無人または半無人のインストールを簡単にスクリプト化および複製できます。オペレーティングシステムのインストールに必要な手順は、Anacondaインストーラーに渡されるキックスタートファイル内に専用の構文で指定されています。このチュートリアルでは、既存の LUKSを再利用する方法を説明します。 (Linux Unified Keys Setup)キックスタートインストールを実行するときのコンテナー:これは、キックスタートの手順だけでは達成できないものであり、いくつかの追加の手順が必要です。

このチュートリアルでは、次のことを学びます。

  • Fedora、RHEL、またはCentOSのキックスタートインストールを実行するときに既存のLUKSコンテナーを使用する方法
  • Anacondaインストーラーで使用するupdates.imgファイルを作成して使用する方法。

既存のLUKSデバイスにキックスタートを介してFedora/RHEL/CentOSをインストールする方法

使用されるソフトウェア要件と規則

システム ソフトウェア その他 規約
ソフトウェア要件とLinuxコマンドラインの規則
カテゴリ 使用する要件、規則、またはソフトウェアバージョン
Fedora / Rhel / CentOS
このチュートリアルに従うために特定のソフトウェアは必要ありません。
  • キックスタート構文の知識
  • LUKS(Linux Unified Key Setup)とcryptsetupコマンドの知識。
–指定されたLinuxコマンドは、rootユーザーとして直接、または sudo を使用して、root権限で実行する必要があります。 コマンド
$ –特定のLinuxコマンドを通常の非特権ユーザーとして実行する必要があります

はじめに

キックスタートを使用すると、Anacondaグラフィカルインストーラーでは実現できない方法で、オペレーティングシステムのインストールを簡単に複製およびカスタマイズできます。たとえば、システムにインストールするパッケージまたはパッケージグループを宣言し、代わりに除外するパッケージを宣言できます。

また、インストールの実行前または実行後にカスタムコマンドを実行して、専用の%pre内で指定することもできます。 および%post それぞれキックスタートファイルのセクション。この最後に述べた機能を利用して、既存の LUKSを使用します インストールプロセス中のデバイス。

ネイティブキックスタート構文による暗号化

LUKSコンテナの作成は非常に簡単で、ネイティブのキックスタート手順を使用するだけで実行できます。次に例を示します:

part pv.01 --ondisk=sda --encrypted --luks-type=luks1 --cipher=aes-xts-plain64 --pbkdf-time=5000 --passphrase=secretpassphrase

上記の例では、 partを使用します 命令では、暗号化された lvmを作成します / dev / sdaの物理ボリューム ディスク。 LUKSを指定します 使用するバージョン(この場合はluks1 –少なくとも最近のバージョンのFedora luks2がデフォルトになっています)、 cipher 、および PBKDF に費やす時間(ミリ秒単位) (パスワードベースの鍵導出関数)パスフレーズ処理(-iter-timeを使用するのと同じです cryptsetupのオプション 。

安全な習慣ではない場合でも、-passphraseも使用しました 暗号化パスフレーズを提供するには:このオプションがないと、インストールプロセスが中断され、インタラクティブに提供するように求められます。

Kickstartを使用すると、従来のインストールと比較して、どのように柔軟性が向上するかがはっきりとわかります。では、なぜ追加の手順を実行する必要があるのでしょうか。標準のキックスタート構文だけでは達成できないタスクがまだいくつかあります。特に、 LUKSを作成することはできません rawデバイス上のコンテナ(パーティションのみ)または LUKSに使用するハッシュアルゴリズムを指定します キー設定。デフォルトではsha256に設定されています。 (何も問題はありません)。

これらの理由から、手動で、または%pre 内のpartedなどのツールを使用して、インストールを実行する前にパーティション設定を作成することをお勧めします。 キックスタートファイル自体のセクション。また、既存の LUKSがある場合もあります 破壊したくないセットアップ。これらすべての場合において、すぐにわかる追加の手順を実行する必要があります。

キックスタート%preセクション

%pre キックスタートファイルのセクションは、ファイルが取得されたときに最初に解析されるセクションです。インストールを開始する前にカスタムコマンドを実行するために使用され、%endで明示的に閉じる必要があります 指示。

%preで 、bashシェルインタープリターがデフォルトで使用されますが、その他は-interpreterを介して指定できます。 オプション(Pythonを使用するには、%pre --interpreter / usr / bin / pythonと記述します。 )。このセクションを使用して、既存の LUKSを開くために必要なコマンドを実行できます。 容器。これが私たちが書くことができるものです:

%pre
iotty="$(tty)"
exec > "${iotty}" 2> "${iotty}"

while true; do
  cryptsetup luksOpen /dev/sda1 cryptroot - && break
done
%end

上記のコードを見てみましょう。まず、 ttyの結果を保存します 標準入力に接続されている端末のファイル名をiottyに出力するコマンド 変数。

exec> "$ {iotty}" 2> "$ {iotty}"を使用 コマンド標準出力と標準エラーを同じ端末にリダイレクトしました:
このようにして、 crytpsetup luksOpenのときにコンテナのパスワードを入力できるようになります。 コマンドが実行され、プロンプトが画面に表示されます。コマンドは、 LUKSの場合にのみ中断される無限ループで起動されます コンテナが正常に開かれました。

完全に無人のインストールを実行する必要がある場合は、パスフレーズを直接cryptsetupに渡す必要があります(これもお勧めしません)。私たちは次のように書きます:

%pre
echo -n "ourverysecretpassphrase" | cryptsetup luksOpen /dev/sda1 cryptroot -
%end

上記の例では、パイプ |を介してcryptsetupコマンドの標準入力にパスフレーズを渡しました。 : echoを使用しました -nを使用したコマンド パスフレーズの最後に改行文字が追加されないようにするオプション。

Fedora31anacondaインストーラーのパッチ適用

キックスタートを介してFedora31をインストールするときに、ロック解除されたLUKSコンテナーを使用しようとすると、次のメッセージが表示され、プロセスは中止されます。

既存のロック解除されたLUKSデバイスは、このデバイスに指定された暗号化キーがないとインストールに使用できません。
ストレージを再スキャンしてください。

これは、AnacondaインストーラーのFedora31バージョンで導入されたこのコミットが原因で発生します。コードは基本的に、既存のLUKSデバイスに登録済みのキーがあることを確認します。登録されていない場合は、インストールが中止されます。問題は、 blivet 、Anacondaがパーティションを管理するために使用するPythonライブラリは、コンテナが開かれている場合にのみキーを取得します。これはグラフィカルインストーラーから実行できますが、執筆時点では、既存の<コードのロックを解除するキックスタート命令はありません。> LUKS 容器。状況を説明するコミットに個人的にコメントしましたが、RedHatBugzillaでバグが発生しました。

updates.imgファイルの作成

現時点での唯一の回避策(私が知っている)は、Anacondaソースコードにパッチを適用し、上記のコミットで導入されたコントロールを実行する行にコメントを付けることです。良いニュースは、操作が非常に簡単なことです。

まず最初に、Anaconda gitリポジトリ、具体的には f31-releaseのクローンを作成する必要があります。 ブランチ:

$ git clone https://github.com/rhinstaller/anaconda -b f31-release

リポジトリのクローンが作成されたら、 anacondaを入力します ディレクトリを作成し、 pyanaconda / storage / checker.pyを変更します ファイル:コメント行 619だけです。 :

def set_default_checks(self):
        """Set the default checks."""
        self.checks = list()
        self.add_check(verify_root)
        self.add_check(verify_s390_constraints)
        self.add_check(verify_partition_formatting)
        self.add_check(verify_partition_sizes)
        self.add_check(verify_partition_format_sizes)
        self.add_check(verify_bootloader)
        self.add_check(verify_gpt_biosboot)
        self.add_check(verify_swap)
        self.add_check(verify_swap_uuid)
        self.add_check(verify_mountpoints_on_linuxfs)
        self.add_check(verify_mountpoints_on_root)
       #self.add_check(verify_unlocked_devices_have_key)
        self.add_check(verify_luks_devices_have_key)
        self.add_check(verify_luks2_memory_requirements)
        self.add_check(verify_mounted_partitions)

変更を保存し、リポジトリのルートから makeupdatesを起動します scriptsにあるスクリプト ディレクトリ。スクリプトを実行するには、 python2が必要です。 インストール済み:

$ ./scripts/makeupdates

スクリプトはupdates.imgを生成します 変更を含むファイル。その内容を確認するには、 lsinitrdを使用できます コマンド:

$ lsinitrd updates.img
Image: updates.img: 8.0K
========================================================================
Version:

Arguments:
dracut modules:
========================================================================
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 .
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 run
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 run/install
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 run/install/updates
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 run/install/updates/pyanaconda
drwxr-xr-x   2 egdoc    egdoc           0 Jan 30 09:29 run/install/updates/pyanaconda/storage
-rw-r--r--   1 egdoc    egdoc       25443 Jan 30 09:29 run/install/updates/pyanaconda/storage/checker.py
========================================================================

このファイルを使用して、Fedora31のインストーラーに「パッチを適用」します。

パッチの適用

生成したファイルに含まれている変更を適用するには、FTPやhttp、またはローカルブロックデバイスを介して簡単にアクセスできる場所にファイルを配置し、inst.updates Fedoraインストーラーイメージからそれを参照するためのパラメーター。 grubメニューから、「InstallFedora」メニューエントリを強調表示します:



Fedora31インストーラーメニュー

メニュー行を選択したら、Tabキーを押します。エントリに関連付けられているカーネルコマンドラインが画面の下部に表示されます。



「InstallFedora」エントリで使用されるカーネルコマンドラインここで行う必要があるのは、 inst.updatesを追加することだけです。 命令とupdates.imgへのパスを提供します 作成したファイル。 Kickstartファイルとupdates.imgファイルの両方にIP192.168.0.37のローカルサーバー上のhttp経由でアクセスできるとすると、次のように記述します。
vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=Fedora-S-dvd-x86_31-31 quiet
inst.updates=http://192.168.0.37/updates.img inst.ks=http://192.168.0.37/ks.cfg

この時点で、Enterキーを押して起動できます。上記の変更により、インストーラーは
ロック解除されたLUKSについて文句を言うことはなくなります。 デバイスを使用すれば、インストールは問題なく続行されます。

結論

この記事では、既存の LUKSを再利用するためにキックスタートインストールを調整する方法を説明しました。 デバイス、%preでロックを解除します キックスタートファイルのセクション、およびそのようなタイプのインストールを試みたときに失敗するFedora31Anacondaインストーラーに小さな回避策を適用する方法。キックスタート構文に興味がある場合は、オンラインドキュメントをご覧ください。


Cent OS
  1. Fedora 16、CentOS 6 /RHEL6にGoogleChrome17をインストールする方法

  2. CentOS/RHELおよびFedoraにPython3.5をインストールする方法

  3. CentOS / RHEL / Fedoraで7zパッケージを抽出する方法は?

  1. Linux OS(CentOS、RHEL、およびFedora)にRPMファイルをインストールする方法

  2. RHEL 8 /CentOS8にphpMyAdminをインストールする方法

  3. CentOS / RHEL / Fedora に docker をインストールする方法

  1. RHEL 8 /CentOS8にP7Zipをインストールする方法

  2. RHEL 8 /CentOS8にntfs-3gをインストールする方法

  3. PHP-mbstringをRHEL8/CentOS8にインストールする方法