![カスタマイズ不可能なアプリケーションが手動で変更されたファイルを上書きするのを防ぐ方法は? [閉鎖]](https://linux33.com/image/121325/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E4%B8%8D%E5%8F%AF%E8%83%BD%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%8C%E6%89%8B%E5%8B%95%E3%81%A7%E5%A4%89%E6%9B%B4%E3%81%95%E3%82%8C%E3%81%9F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%B8%8A%E6%9B%B8%E3%81%8D%E3%81%99%E3%82%8B%E3%81%AE%E3%82%92%E9%98%B2%E3%81%90%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
つまり、私のアプリケーションの1つでいくつかの画像リソースを交換したいと思います。手動でファイルを上書きすると操作が実行されますが、アプリが更新されるたびに変更したすべてのファイルが元のファイルに置き換えられます。リソースファイルを上書きしたかどうかはわかりません。包装袋または、アップデート後に初めて実行すると、アプリケーション自体によって実行されます。ファイルを読み取り専用に設定するのはアプリケーションです。包装袋削除してみてください読み取り専用とにかくファイルを表示して交換してください。
具体的には、私がカスタマイズしたいアプリケーションは「Plex Media Server」です。このアプリケーションには、DLNAアイコンを変更する公式の方法はありません。ただし、アイコンは「/usr/lib/plexmediaserver/Resources/Graphics/dlna-icon-260.png」にあり、手動で交換するとPlexとそれに接続されているすべてのデバイスに正しく表示されます。ただし、Plexソフトウェアを更新すると、すべての変更が元のファイルに置き換えられます。
したがって、この問題を解決するために私が考えることができる1つの方法は、リソースをカスタムリソースに置き換えて更新するたびに実行できる小さなシェルスクリプトを作成することです。しかし、私はこれを行うより良い、より適切で、より自動化された方法があるかどうかを調べようとしています。
最良の「家庭」の例として、ファイルを読み取るときにLinuxシステムに常に自分のコンテンツを返すようにします。
だから私の質問は:「ベストシナリオ」はLinuxで実装できますか?またはファイルの上書きを防ぐ方法包装袋?
ご挨拶ありがとうございます。
答え1
ここでのソリューションは、アプリケーションの構成の柔軟性とパッケージマネージャの機能に大きく依存します。パスが変更されると、突然アプリケーションが機能しない状況が発生する可能性があることに注意してください。
ほとんどのプログラムでは、構成ファイルを使用してパスをオーバーライドできます。ここで独自のイメージディレクトリを指定することもできます。そうしないと、アプリケーションがデフォルトのイメージディレクトリ(既定のインストール済みイメージを含む)を見つける前に、特定のディレクトリにそのイメージを見つけることができます。もしあなたならできるこれらのアプリケーションがサポートする方法の1つを使用する必要があります。
chattr +i
そうでない場合は、後でパッケージを更新しようとするとパッケージマネージャがエラーで終了する可能性があるため、ファイルの交換(使用など)を中止したくない場合があります。
より良い方法は協力必要な結果を得るには、パッケージマネージャと協力してください。たとえば、次のいずれかを試すことができます。
- パッケージマネージャでインストールを実行するときにこれらのファイルを抽出しないように指示します。たとえば、
pacman
次のことができます。
% cat /etc/pacman.conf
[...]
NoExtract = usr/lib/my_image_dir/* usr/lib/my_image_dir_2/*
[...]
- パッケージマネージャでそのファイルを提供するパッケージをインストール/アップグレードした後、これらのファイルを置き換えるためのフックを設定します。たとえば、
pacman
次のフックを使用して、次のことができます。
% cat /usr/share/libalpm/hooks/replace-images.hook
[Trigger]
Type = Package
Operation = Upgrade
Target = the_package_to_target
[Action]
Description = Replacing images
When = PostTransaction
Exec = /usr/bin/script_to_replace_images
これらのいずれも可能でない場合は、次のコマンドを使用してアプリケーションを実行できます。書く実行すると、アプリケーションにのみ表示されるインストール名前空間にあります。これはオーバーレイを表示できないため、パッケージマネージャを満たし、オーバーレイに代替画像のみを含めることができるため、要件を満たします。