Come posso installare GNU Parallel insieme a Moreutils su Ubuntu / Debian?


22

Posso fare in modo che il gestore pacchetti risolva il conflitto, ad esempio rinominando il file binario ( ad es. Parallel → gparallel ) o installandolo in un posto diverso ( ad es. / Usr / → / usr / local / )?

Risposte:


19

Per Ubuntu v17.04 ("Zesty Zapus") e Debian v9 ("Stretch") , ( 2017 o più recente) o distribuzioni basate su tali versioni, leggi prima la risposta di Bryan Larsen , che dovrebbe essere sufficiente.

Per le versioni precedenti al 2017 , continua a leggere ...


Utilizzare dpkgper forzare l'installazione; Parallelamente va d'accordo bene con moreutils - rinomina moreutils ' parallelutil a parallel.moreutils. Al termine dell'installazione sono disponibili entrambi i programmi ( GNU e moreutils ).

NB: se uno script utente chiama il vecchio codice parallel , cambia quegli script per usare il nome più lungo.

Dettagli: scarica il pacchetto parallelo (senza installare o rimuovere nulla). Quindi utilizzando compgen, (un bashcomando interno), trovare un pacchetto parallelo nell'archivio. Se ce n'è più di uno, usa l'ultimo. Forza l'installazione di quel pacchetto, nonostante i conflitti.

apt-get --assume-yes --download-only install parallel &&
ls --sort=version $(compgen -f /var/cache/apt/archives/parallel) |
    tail -n 1 | xargs dpkg --force-conflicts -i

Come visualizzare le deviazioni risultanti:

dpkg-divert --list 'par*'

Produzione:

diversion of /usr/share/man/man1/parallel.1.gz to  /usr/share/man/man1/parallel.moreutils.1.gz by parallel
diversion of /usr/bin/parallel to /usr/bin/parallel.moreutils by parallel

Scopri come sono disponibili entrambi gli eseguibili binari:

compgen -c parallel | xargs which | xargs ls -l

Produzione:

-rwxr-xr-x 1 root root 240814 Oct 31  2014 /usr/bin/parallel
-rwxr-xr-x 1 root root  10592 Jul 21  2015 /usr/bin/parallel.moreutils

1
Forse no! Questo usato per lavoro OK, ma su una scatola di Lubuntu, tutto installazioni, ma apt-get continua a voler sbarazzarsi di uno dei parallelismi ... probabilmente ha bisogno un'altra override. Più tardi ...
agc,

... tranne che apt-get installcontinua a lamentarsi del conflitto, come hai scritto prima.
krlmlr,

1
Ho modificato /var/lib/dpkg/statusper rimuovere il conflitto. Ricerca "Conflicts: moreutils", eliminata questa riga. Fonte: superuser.com/a/815371/99136 . Sembra funzionare ora, ma temo che un aggiornamento del pacchetto "parallelo" rompa nuovamente le cose.
krlmlr,

1
No: apt-get installavvisa che il parallelpacchetto non verrà aggiornato, ma apt-cache policynon mostra versioni diverse e apt-get dist-upgradenon tocca nemmeno il parallelpacchetto. Quindi, l'aggiornamento parallelsembra essere un processo che deve essere avviato consapevolmente. Bene con me.
krlmlr,

@krlmlr, questo è uno nuovo su di me ... A proposito, se tu fossi così gentile da pubblicare qui il trucco di cui sopra Impostare le opzioni apt-get per tollerare innocui 'dpkg --force-conflitti' kludge? , Lo voterei.
agc,

7

Questo conflitto è risolto in Ubuntu 17.04 e Debian Stretch .

Se installi parallel & moreutils ottieni GNU parallel as /usr/bin/parallele moreutil 's parallelas /usr/bin/parallel.moreutils. Se si installa solo moreutils , fornisce /usr/bin/parallel.

Se stai usando una versione precedente di Ubuntu o Debian , puoi scaricare e installare i .deb da una versione più recente: si installano e funzionano bene.


1

Immagino, il percorso più semplice sarebbe quello di installare normalmente uno dei pacchetti (es. parallel) Ed estrarne un altro nel percorso personalizzato:

$ sudo apt-get install libio-pty-perl libipc-run-perl
$ sudo apt-get download moreutils
$ dpkg -x moreutils_0.54-1_amd64.deb /tmp/moreutils
$ cd /tmp/moreutils/usr/bin/

1

I paralleli GNU sono solo uno script perl, quindi potresti semplicemente copiarlo in qualche posto utile (ad es. / Usr / local / bin / gnu-parallel).

(Basta controllare le dipendenze perl).

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.