オフラインLinux環境にリモデス(RDP)接続出来るようにしてみた
はじめに
実務では一部サイトにのみインターネット接続可能な環境(本記事ではこれを「オフライン環境」と呼びます)を使うことが多いです。オフライン環境ではパッケージの依存関係など、普段あまり意識しない部分も考慮する必要があります。
つい最近オフラインLinux環境にxrdpパッケージをインストールする必要があり、「オンライン環境で依存関係込みでダウンロード」→「オフライン環境でインストール」しました。トラブルも何度かあったため、本記事にて手順を整理します。
環境
- OS: AlmaLinux 9
- ネットワーク: 社内 LAN 、および、一部のサイト(AlmaLinux 標準リポジトリ含む)
- 導入対象:
xrdp(EPELリポジトリ上) - パッケージ管理:
dnf
Step.1 EPELリポジトリ追加(オンライン環境)
EPELリポジトリ設定(repoファイル)はデフォルトでインストールされないため、epel-releaseパッケージ経由でインストールします。本パッケージはAlmaLinux標準リポジトリから取得できます。
$ dnf install epel-release
リポジトリ設定はデフォルト有効なため、即EPELパッケージの取得が可能となります。
余談になりますが、パッケージのインストールファイルって気になりますよね?以下のコマンドで確認できます。(dnfには調査用コマンドはないのでしょうか?)
$ rpm -ql <パッケージ名>
Step.2 xrdpパッケージダウンロード(オンライン環境)
EPELリポジトリからxrdpパッケージを依存関係込みダウンロード(インストールではない)します。
$ dnf download --resolve xrdp
Trouble.1 依存パッケージのダウンロードに失敗(CRBリポジトリ有効化漏れ)
xrdp及び依存パッケージをダウンロードできることを期待しましたが、結果として一部のパッケージは取得先を特定できずダウンロードに失敗しました。原因はEPELが前提とするCRBリポジトリの有効化漏れでした。
下記公式ドキュメントを読めば事前にCRBリポジトリを有効化すべきと分かるのですが、某ChatAIの回答を鵜呑みにした結果残念な結果となりました...(ファクトチェックは大事)
なお、CRBリポジトリの(永続的な)有効化は下記コマンドで実施できます。
$ sudo dnf config-manager --set-enabled crb
Step.3 xrdpパッケージインストール(オフライン環境)
ダウンロード結果(パッケージ一式)をオフライン環境に配置・インストールします。
$ dnf install <ダウンロード結果>/xrdp*.rpm
Trouble.2 依存パッケージのダウンロード不足(--alldepsオプション指定漏れ)
xrdp及び依存パッケージが全てダウンロード済みであることを期待しましたが、結果として一部の依存パッケージが不足していました。原因はダウンロード時の--alldepsオプション指定漏れでした。
ダウンロード時に--resolveオプションのみ指定すると、 依存パッケージの内インストール済みのものが対象外 になります。--alldepsオプションでインストール済みのものも対象とする必要がありました。某ChatAIの回答を(省略)
結論として、ダウンロードは下記オプション指定で実行すると良いです。
$ dnf download --resolve --alldeps xrdp
Trouble.3 依存パッケージの指定不足(--disablerepoオプション指定漏れ)
xrdpを対象にインストールを実行すれば、ダウンロードした依存パッケージが参照され、インストールが成功することを期待しました。
結果として一部の依存パッケージが不足しているとみなされ、リポジトリへのアクセスが発生→オフライン環境なのでタイムアウトエラーとなりました。
原因は2点ありました。
1点目は--disablerepoオプションの指定漏れです。--disablerepo="*"を指定し、全リポジトリを無効化しないと、依存パッケージが不足する場合にリポジトリへのアクセスが発生します。
2点目はインストール対象パッケージの指定不足です。<ダウンロード結果>/内の全パッケージを指定する必要がありました。この指定不足により、依存パッケージが不足していると判断され、外部アクセスが発生していました。
以上を踏まえ、オフラインインストールは下記コマンドで実行すると良いです。
$ dnf install --disablerepo="*" <ダウンロード結果>/*.rpm
おわりに(教訓)
オフライン環境にパッケージを依存関係込みでインストールする際、以下にご注意ください。
- EPELパッケージのダウンロード時、CRBリポジトリを有効化しているか?
-
--alldepsオプション指定にて、環境差を吸収できているか? -
--disablerepoオプション指定にて、リポジトリアクセスを禁止できているか? - インストール対象パッケージに依存パッケージを含めているか?
以上、同じところでハマる人の助けになれば幸いです。
Discussion