📦

オフライン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の回答を鵜呑みにした結果残念な結果となりました...(ファクトチェックは大事)
https://docs.fedoraproject.org/en-US/epel/getting-started/

なお、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