Cara menggunakan versi saya sendiri dari paket standar

10

Saya mengalami masalah dengan Nautilus yang saya tidak menemukan solusi apa pun selain mengunduh kode sumber, membuat beberapa perubahan dan mengkompilasinya sendiri. Jadi sekarang saya memiliki dua versi nautilus, versi resmi dari repositori dan milik saya dengan beberapa perubahan. Saya ingin menyimpan keduanya.

Apa cara yang baik untuk memberi tahu aplikasi agar menggunakan Nautilus versi kompilasi saya sendiri ketika memulai Nautilus dari dalam aplikasi? (mis. membuka folder Unduhan dengan firefox)

Saya menemukan panggilan firefox /usr/bin/nautilussehingga saya bisa mengganti ini dengan symlink ke program saya sendiri. Namun, saya percaya symlink ini akan ditimpa segera setelah saya menginstal pembaruan untuk Nautilus. Apakah ada hal lain yang bisa saya lakukan?


sumber
1
Menempatkan versi Anda /usr/local/bintidak berhasil? yaitu apakah firefox mencari $PATHdan menemukan versinya di /usr/bin, atau apakah itu (atau xdg-open stuff Anda) hard-code /usr/bin/nautilus? Menginstal versi Anda sendiri dari sesuatu di / usr / local biasanya berfungsi.
Peter Cordes
Saya mencoba ini sekarang dan itu tidak berhasil. Saya tidak tahu apa yang dilakukan firefox secara internal, tetapi /usr/bin/nautilusentah bagaimana sepertinya ada kode-kerasnya. Jika itu dihapus, firefox tidak melakukan apa-apa lagi ketika saya mencoba membuka folder Unduhan, walaupun ada symlink ke versi nautilus saya sendiri di /usr/local/bin. $PATHVariabel saya adalah/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Jika Anda penasaran, Anda bisa lari strace -f -efile,execve -o firefox_syscalls.txt firefoxuntuk melihat apa yang dilakukan si pria. Jika Anda mencari log nautilus, itu mungkin menunjukkan sesuatu kepada Anda. (Itu -ememfilter panggilan sistem untuk execvedan mengarsipkan hal-hal buka / tutup / pathname, jika tidak akan menjadi banjir futexdan soket baca / tulis untuk X11).
Peter Cordes

Jawaban:

14

Saya akan memperbaiki versi paket Nautilus, yang mungkin tampak menakutkan pada awalnya tetapi cukup mudah - meskipun tidak selamat dari peningkatan paket sehingga membutuhkan disiplin. (Lihat jawaban Wouter untuk detailnya.)

Pendekatan paling sederhana dalam situasi Anda adalah menambahkan pengalihan:

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

Ini akan menginstruksikan dpkguntuk mengubah nama /usr/bin/nautilusuntuk /usr/bin/nautilus.originalsetiap kali sebuah paket mencoba untuk menginstalnya. Kemudian Anda dapat menambahkan symlink Anda sendiri, dan itu akan tetap tak tersentuh bahkan ketika paket Nautilus ditingkatkan. Untuk menghapusnya, jalankan

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

Anda dapat menerapkan teknik yang sama untuk file lain yang perlu Anda ganti dengan cara yang serupa, terlepas dari beberapa file konfigurasi yang tidak ditangani dengan benar ketika dialihkan.

Stephen Kitt
sumber
7

Solusi jangka panjang terbaik adalah dengan menghubungi pengembang nautilus dan bekerja dengannya di patch ke kode nautilus resmi, sehingga setelah versi terbaru nautilus mengenai sistem Anda, Anda tidak perlu berurusan dengan ini lagi.

Dengan asumsi Anda telah melakukan itu, sampai perubahan itu menetes ke sistem Anda, Anda masih harus berurusan dengan masalah keinginan untuk menggunakan versi nautilus yang telah Anda tempel sendiri.

Cara termudah adalah dengan membuat paket nautilus dengan tambalan Anda yang sudah diterapkan, dan menginstalnya sedemikian rupa sehingga tidak akan ditingkatkan secara otomatis.

Di Debian (yang menurut tag pada pertanyaan ini yang Anda gunakan), cara termudah untuk mencapai itu adalah:

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

Ini membangun paket baru dengan tambalan Anda, memasangnya, dan menandainya dalam dpkg sehingga tidak akan diperbarui secara otomatis lagi.

Lain kali versi yang diperbarui dari paket akan dirilis, apt akan memberi tahu Anda bahwa ada versi yang diperbarui, tetapi sedang ditahan. Anda kemudian perlu melakukan hal di atas lagi.

Wouter Verhelst
sumber
apt-mark hold packagenameadalah cara modern memegang paket. (Saya bahkan membuat skrip sendiri dpkg-hold/ digunakan alih-alih metode yang telah mereka gunakan selama bertahun-tahun. Skrip tersebut usang karena apt-mark tetapi saya masih memiliki skrip lain yang memanggilnya, dan menghapusnya mungkin mematahkan skrip yang ditulis oleh pengguna lain dari paket dlocate)dpkg-unholddlocateapt-markdpkg --set-selections
cas
Bagian yang ditahan man apt-markmengatakan 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, jadi saya pikir itu hal kecil ;-)
Wouter Verhelst