Come usare la mia versione di un pacchetto standard


10

Ho riscontrato un problema con Nautilus per il quale non ho trovato alcuna soluzione se non scaricare il codice sorgente, apportare alcune modifiche e compilarlo da solo. Quindi ora ho due versioni di nautilus, la versione ufficiale dai repository e la mia con alcune modifiche. Vorrei mantenere entrambi.

Quale sarebbe un buon modo per dire alle applicazioni di usare la mia versione compilata di Nautilus all'avvio di Nautilus dall'interno dell'applicazione? (es. apertura della cartella Download con firefox)

Ho capito che Firefox chiama /usr/bin/nautilusper poterlo sostituire con un collegamento simbolico al mio programma. Tuttavia, credo che questo link simbolico verrà sovrascritto non appena installo un aggiornamento per Nautilus. C'è qualcos'altro che potrei fare?

debian  apt 

1
Inserire la tua versione /usr/local/binnon ha funzionato? cioè firefox ha cercato nel tuo $PATHe trovato la versione /usr/bino (o il tuo xdg-open stuff) codifica /usr/bin/nautilus? L'installazione della propria versione di qualcosa in / usr / local normalmente funziona.
Peter Cordes,

Ho provato questo ora e non ha funzionato. Non so cosa faccia Firefox internamente, ma /usr/bin/nautilusin qualche modo sembra essere codificato. Se viene rimosso firefox non fa più nulla quando provo ad aprire la cartella Download, anche se c'è un link simbolico alla mia versione di nautilus in /usr/local/bin. La mia $PATHvariabile è/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Se sei curioso, potresti correre strace -f -efile,execve -o firefox_syscalls.txt firefoxper vedere cosa fa ff. Se cerchi il registro nautilus, questo potrebbe mostrarti qualcosa. (Ciò -efiltra il sistema richiede execvee file apre / chiude / nome percorso, altrimenti sarebbe un flusso di futexe socket lettura / scrittura per X11).
Peter Cordes,

Risposte:


14

Vorrei correggere la versione in pacchetto di Nautilus, che all'inizio potrebbe sembrare scoraggiante ma è abbastanza semplice, anche se non sopravvive agli aggiornamenti dei pacchetti, quindi richiede un po 'di disciplina. (Vedi la risposta di Wouter per i dettagli.)

L'approccio più semplice nella tua situazione è quello di aggiungere un diversivo:

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

Questo indicherà dpkgdi rinominare /usr/bin/nautilusper /usr/bin/nautilus.originalogni volta che un pacchetto di prova ad installarlo. Quindi puoi aggiungere il tuo symlink e rimarrà intatto anche quando il pacchetto Nautilus viene aggiornato. Per rimuoverlo, esegui

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

Puoi applicare la stessa tecnica per qualsiasi altro file che devi sostituire in modo simile, ad eccezione di alcuni file di configurazione che non vengono gestiti correttamente quando vengono deviati.


7

La migliore soluzione a lungo termine è contattare gli sviluppatori di nautilus e lavorare con loro su una patch al codice nautilus ufficiale, in modo che una volta che la versione aggiornata di nautilus raggiunga il tuo sistema, non dovrai più occupartene.

Supponendo di averlo fatto, fino a quando la modifica non arriva al tuo sistema, dovrai comunque affrontare il problema di voler usare la tua versione patinata di nautilus.

Il modo più semplice è produrre un pacchetto di nautilus con la patch già applicata e installarlo in modo che non venga aggiornato automaticamente.

Su Debian (che secondo i tag di questa domanda che stai usando), il modo più semplice per farlo è:

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

Questo crea un nuovo pacchetto con la tua patch, lo installa e quindi lo contrassegna in dpkg in modo che non venga più aggiornato automaticamente.

La prossima volta che verrà rilasciata una versione aggiornata del pacchetto, apt ti avviserà che esiste una versione aggiornata, ma viene trattenuta. È quindi necessario ripetere quanto sopra.


apt-mark hold packagenameè il modo moderno di tenere un pacchetto. (Ho persino creato i miei dpkg-hold/ dpkg-unholdscript in dlocateuso al apt-markposto del dpkg --set-selectionsmetodo che avevano usato per anni. Gli script sono obsoleti a causa del marchio apt, ma ho ancora altri script che li chiamano e rimuoverli potrebbe rompere gli script scritti da altri utenti di il pacchetto dlocate)
cas

La sezione in sospeso man apt-markdice 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, quindi penso che sia una cosa minore ;-)
Wouter Verhelst
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.