アプリケーションがDebianではなくUbuntuで実行されているように見えるようにするための偽の/ etc / os-release

アプリケーションがDebianではなくUbuntuで実行されているように見えるようにするための偽の/ etc / os-release

RHEL、SuSE(SLE [DS])、および特定のUbuntu LTSバージョンを正式にサポートするサードパーティ製のソフトウェアを使用する必要があります。

残念ながら、私はすべてのシステムでDebianを使用しています。

このソフトウェアのインストーラスクリプトを実行すると、エラーメッセージ(「配布はサポートされていません」)で終了してインストールされません。

インストールのダウンロードには、.debUbuntuで実際に動作するパッケージが付属しています。.debインストーラスクリプトは、Ubuntuのバージョンが含まれている場合にのみこのファイルをインストールします(簡単な文字列の確認)。/etc/os-releaseしかし、良いニュースは、ファイル名を見つけて.debDebianに手動でインストールするだけで、インストールされたdpkg -iソフトウェアが完全に機能するということです。 :)

私が満足していない唯一のことがあります。ソフトウェアの自動更新機能は上記のインストーラスクリプトを使用しますが、これはDebianを好まない。したがって、私はこのアプリケーションの無人アップグレードを実行しません。更新プロセスは.debファイルを含む新しいバージョンを正常にダウンロードしましたが、ファイルをインストールするのではなく、インストーラスクリプトを起動しました.deb。インストーラがエラーで終了します。更新が失敗しました。 :((なぜサプライヤが/etc/apt/sources.list.dこの不気味なカスタム更新メカニズムを作成するのではなく、URLだけを提供していないのかわかりません。)

新しいバージョンを手動でダウンロードし、* .debファイルを抽出して再インストールする必要がありました。

これについてどんな考えや提案がありますか?

/etc/os-release「Debian」の代わりに「Ubuntu」を表示するようにテキストファイルを編集します。これで問題が解決します。しかし、これはシステムに問題のような副作用をもたらしますかapt-get update && apt-get upgrade

それとも、/etc/os-releaseシステムサービスユニットの偽のファイルを「マウント」できますか?それでは、このサービスだけがDebianではなくUbuntuで実行されていると思いますか?おそらくchrootのようなものですか?しかし、chrootディレクトリにあるシステム全体のコピーを手動で最新の状態に保つ必要がありますか?

答え1

それとも、システムサービスユニットの偽の/ etc / os-releaseファイルを「マウント」できますか?

これが systemdBindPathsBindReadOnlyPathsオプションの目的です(文書):

BindPaths=BindReadOnlyPaths=

セルごとのバンドルマウントを構成します。バインドマウントを使用すると、ファイルシステムのセルビューの他の場所で特定のファイルまたはディレクトリを使用できます。このオプションを使用して作成されたバインドマウントはそのデバイスにのみ適用され、ホストのマウントテーブルには表示されません。このオプションには、スペースで区切られたバインドマウント定義のリストが必要です。各定義は、ソースパス、ターゲットパス、およびオプション文字列のコロンで区切られた3つのペアで構成され、最後の2つはオプションです。ソースパスのみを指定した場合、ソースとターゲットは同じと見なされます。オプション文字列は、再帰的または非再帰的バインドマウントを構成する「rbind」または「norbind」のいずれかです。宛先パスを省略した場合は、オプション文字列も省略する必要があります。各バインドマウント定義には「-」プレフィックスを付けることができます。その場合、対応するソースパスが存在しない場合は無視されます。

BindPaths=通常の書き込み可能バインドマウントを作成し(ソースファイルシステムマウントが読み取り専用としてマークされていない場合)、読み取り専用BindReadOnlyPaths=バインドマウントも作成します。これらの設定は複数回使用でき、各使用はデバイスのバンドルインストールリストに追加されます。空の文字列がこれら2つのオプションのいずれかに割り当てられると、以前に定義されたバインドマウントの完全なリストがリセットされます。この場合、どちらの設定が使用されているかに関係なく、読み取り専用および通常のバインドマウントの両方がリセットされます。

次のディレクトリを指すWebサーバーを実行する簡単なサービスを考えてみましょう/etc

[Service]
Type=exec
ExecStart=/usr/sbin/darkhttpd /etc --port 8080

このサービスを実行してhttp://localhost:8080/os-releaseにアクセスすると、Fedoraホストのファイルの内容が表示されます。

$ curl -s http://localhost:8080/os-release
NAME="Fedora Linux"
VERSION="39 (Workstation Edition)"
ID=fedora
VERSION_ID=39
VERSION_CODENAME=""
...

os-release偽のファイルをその場所にバインドするようにサービスを変更できます。まず、/tmp/fake-osrelease次を作成します。

NAME="I reall am Ubuntu"

次に、BindReadOnlyPathsサービスユニットにオプションを追加します。

[Service]
Type=exec
ExecStart=/usr/sbin/darkhttpd /etc --port 8080
BindReadOnlyPaths=/tmp/fake-osrelease:/etc/os-release

システムを再ロードしてサービスを再起動すると、次のようになります。

systemctl daemon-reload
systemctl restart fakeosrelease.service

ファイルをスキャンすると、偽のコンテンツが表示されますos-release

$ curl -s http://localhost:8080/os-release
NAME="I am really Ubuntu"

この変化ただサービス自体に影響を与えます。これにより、cat /etc/os-release元のコンテンツが引き続き表示されます。

関連情報