自分のバージョンの標準パッケージを使用する方法


10

Nautilusで問題が発生しました。ソースコードをダウンロードし、変更を加えて自分でコンパイルする以外に解決策は見つかりませんでした。だから今、私はnautilusの2つのバージョンを持っています。リポジトリからの公式バージョンといくつかの変更を加えたものです。両方残しておきたいです。

アプリケーション内からNautilusを起動するときに、独自にコンパイルしたバージョンのNautilusを使用するようにアプリケーションに指示する良い方法は何でしょうか?(FirefoxでDownloadsフォルダーを開くなど)

私はfirefoxが呼び出す/usr/bin/nautilusので、これを自分のプログラムへのシンボリックリンクに置き換えることができるとわかりました。ただし、Nautilusのアップデートをインストールするとすぐに、このシンボリックリンクが上書きされると思います。他に何かできることはありますか?

debian  apt 

1
バージョンを入れても/usr/local/binうまくいきませんでしたか?つまり、Firefoxがあなた$PATHを検索してでバージョンを見つけました/usr/binか、それとも(またはあなたのxdg-openのもの)ハードコードしました/usr/bin/nautilusか?/ usr / localに独自のバージョンをインストールすると、通常は機能します。
Peter Cordes

私は今これを試してみましたが、うまくいきませんでした。私は内部でfirefoxが何をしているのか分かりませんが、どういうわけか/usr/bin/nautilusハードコードされているようです。削除すると、FirefoxはDownloadsフォルダーを開こうとしても何もしませんが、自分のバージョンのnautilusへのシンボリックリンクがあります/usr/local/bin。私の$PATH変数は/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

好奇心が強いなら、走っstrace -f -efile,execve -o firefox_syscalls.txt firefoxてffが何をするかを見ることができます。ログでを検索するとnautilus、何かが表示される場合があります。(これ-eは、システムコールexecveとファイルのオープン/クローズ/パス名などをフィルタリングします。それ以外の場合はfutex、X11のソケットの読み取り/書き込みのフラッドになります)。
Peter Cordes

回答:


14

Nautilusのパッケージバージョンを修正します。これは、最初は気が遠くなるように見えるかもしれませんが、十分簡単です。ただし、パッケージのアップグレードに耐えられないため、ある程度の訓練が必要です。(詳細はWouterの回答を参照してください。)

あなたの状況で最も簡単なアプローチは、宛先変更を追加することです:

sudo dpkg-divert --divert /usr/bin/nautilus.original --rename /usr/bin/nautilus

これは、指示されますdpkg名前を変更する/usr/bin/nautilusには/usr/bin/nautilus.original、パッケージには、それをインストールしようとするたびに。次に、独自のシンボリックリンクを追加できます。これは、Nautilusパッケージがアップグレードされた場合でも変更されません。削除するには、

sudo dpkg-divert --rename --remove /usr/bin/nautilus

流用したときに正しく処理されない構成ファイルを除いて、同様の方法で置き換える必要がある他のファイルに同じ手法を適用できます。


7

最善の長期的な解決策は、nautilus開発者に連絡し、公式のnautilusコードへのパッチについて彼らと協力することです。これにより、nautilusの更新バージョンがシステムに到達したら、これに対処する必要はもうありません。

あなたがそれを行ったと仮定すると、その変更があなたのシステムに流れ落ちるまで、あなたはあなた自身のパッチを当てたバージョンのnautilusを使いたいという問題に対処する必要があります。

最も簡単な方法は、パッチが適用されたnautilusのパッケージを作成し、自動的にアップグレードされないようにインストールすることです。

Debian(これは、あなたが使用しているこの質問のタグに従って)で、これを達成する最も簡単な方法は次のとおりです。

apt-get install devscripts
apt-get build-dep nautilus # note, this also pulls in build-essential
apt-get source nautilus
cd nautilus-*
# apply your patch
dch -i
# Set the version number of the new changelog entry to something like x.y.z-a.local,
# where "x.y.z-a" is the version of the package as it existed prior to your patch,
# add a description of the change after the '*', then save and exit the editor
debuild -uc -us -i && sudo debi --upgrade
echo "nautilus hold" | sudo dpkg --set-selections

これにより、パッチを使用して新しいパッケージが作成され、インストールされてから、dpkgでマークされ、自動更新されなくなります。

パッケージの更新されたバージョンが次にリリースされるとき、aptは更新されたバージョンが存在することを通知しますが、保留されています。その後、上記をもう一度行う必要があります。


apt-mark hold packagenameパッケージを保持する現代的な方法です。(私は長年使用していた方法の代わりに自分のdpkg-hold/ dpkg-unholdスクリプトをdlocate使用することさえしました。スクリプトはapt-markが原因で廃止されましたが、それを呼び出す他のスクリプトがあり、それらを削除すると、他のユーザーが作成したスクリプトが壊れる可能性がありますdlocateパッケージ)apt-markdpkg --set-selections
cas

保留中のセクションはman apt-mark言うThe command is only a wrapper around dpkg --set-selections and the state is therefore maintained by dpkg(1) and not affected by the --file optionので、それはマイナーなことだと思います;-)
Wouter Verhelst
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.