Standart bir paketin kendi sürümünü nasıl kullanırım


10

Kaynak kodunu indirmek, bazı değişiklikler yapmak ve kendi başıma derlemek dışında herhangi bir çözüm bulamadığım Nautilus ile ilgili bir sorunla karşılaştım. Şimdi iki nautilus versiyonum var, depolardan resmi versiyon ve birkaç değişiklikle benim. İkisini de saklamak istiyorum.

Uygulamalara Nautilus'u uygulama içinden başlatırken kendi derlenmiş Nautilus sürümümü kullanmasını söylemenin iyi bir yolu nedir? (ör. İndirilenler klasörünü firefox ile açma)

Firefox çağrılarını anladım, /usr/bin/nautilusböylece bunu kendi programım için bir symlink ile değiştirebildim. Ancak, Nautilus için bir güncelleme yükler yüklemez bu symlink'in üzerine yazılacağına inanıyorum. Yapabileceğim başka bir şey var mı?

debian  apt 

1
Sürümünüzü koymak /usr/local/binişe yaramadı mı? Firefox $PATH, sürümünüzde arama yaptı ve sürümü buldu /usr/binveya (veya xdg-open öğeleriniz) sabit kodunu /usr/bin/nautilusmu buldu? Kendi sürümünüzü / usr / local dizinine yüklemek normalde işe yarar.
Peter Cordes

Bunu şimdi denedim ve işe yaramadı. Firefox'un dahili olarak ne yaptığını bilmiyorum, ancak bir /usr/bin/nautilusşekilde sabit kodlanmış gibi görünüyor. Kaldırılırsa, kendi nautilus sürümümün bir sembolik bağlantısı olmasına rağmen, İndirilenler klasörünü açmaya çalıştığımda firefox artık hiçbir şey yapmaz /usr/local/bin. Benim $PATHdeğişkendir/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Merak ediyorsanız, strace -f -efile,execve -o firefox_syscalls.txt firefoxff'nin ne yaptığını görmek için koşabilirsiniz . Günlüğü ararsanız nautilus, bu size bir şey gösterebilir. (Bu -esistem çağırır execveve dosya açma / kapama / yol adı şeyler filtreler , aksi takdirde bir sel futexve X11 için soket okuma / yazma olurdu ).
Peter Cordes

Yanıtlar:


14

İlk başta ürkütücü görünebilir, ancak yeterince kolay - Nautilus'un paketlenmiş sürümünü düzeltirim, ancak paket yükseltmelerinden sağ çıkmaz, bu yüzden bazı disiplin gerektirir. (Ayrıntılar için Wouter'ın cevabına bakınız.)

Durumunuzdaki en basit yaklaşım bir saptırma eklemektir:

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

Bu talimat verir dpkgadlandırmak /usr/bin/nautilusiçin /usr/bin/nautilus.originalbir paket yüklemek açılmaya çalışıldığında. Ardından kendi sembolik bağınızı ekleyebilirsiniz ve Nautilus paketi yükseltildiğinde bile dokunulmadan kalır. Kaldırmak için çalıştırın

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

Yönlendirildiğinde doğru şekilde işlenmeyen bazı yapılandırma dosyaları dışında, benzer bir şekilde değiştirmeniz gereken diğer dosyalar için aynı tekniği uygulayabilirsiniz.


7

En iyi uzun vadeli çözüm, nautilus geliştiricileriyle iletişime geçmek ve onlarla resmi nautilus koduna yönelik bir yama üzerinde çalışmaktır, böylece nautilus'un güncellenmiş sürümü sisteminize çarptığında, artık bununla uğraşmanıza gerek kalmayacaktır.

Bunu yaptığınızı varsayarsak, bu değişiklik sisteminize damlayana kadar, kendi yamalı nautilus sürümünüzü kullanmak istemenizle ilgilenmeniz gerekir.

En kolay yol, yamanız zaten uygulanmış bir nautilus paketi üretmek ve otomatik olarak yükseltilmeyecek şekilde kurmaktır.

Debian'da (kullandığınız bu sorudaki etiketlere göre), bunu yapmanın en kolay yolu:

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

Bu, düzeltme ekinizle yeni bir paket oluşturur, yükler ve daha sonra otomatik olarak güncelleştirilmemesi için dpkg olarak işaretler.

Paketin bir sonraki güncellenmiş sürümü yayınlanacaksa, apt size güncellenmiş bir sürümün var olduğunu ancak geri tutulmakta olduğunu bildirecektir. Daha sonra yukarıdakileri tekrar yapmanız gerekir.


apt-mark hold packagenamebir paketi tutmanın modern yoludur. ( Senelerdir kullandıkları yöntem yerine kendi dpkg-hold/ dpkg-unholdscriptlerimi bile kullandım. Scriptler apt-mark nedeniyle kullanılmıyor, ancak yine de onları çağıran diğer scriptlerim var ve bunları kaldırmak diğer kullanıcılar tarafından yazılmış betikleri bozabilir. dlocate paketi)dlocateapt-markdpkg --set-selections
cas

man apt-markThe 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
Bekletilen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.