Wie kann ich GNU Parallel zusammen mit Moreutils unter Ubuntu / Debian installieren?

22

Kann ich den Paketmanager veranlassen, den Konflikt zu lösen, z. B. durch Umbenennen der Binärdatei ( z. B. parallel → gparallel ) oder durch Installieren an einem anderen Ort ( z. B. / usr / → / usr / local / )?

PSkocik
quelle

Antworten:

19

Für Ubuntu v17.04 ("Zesty Zapus") und Debian v9 ("Stretch") ( 2017 oder neuer) oder Distributionen, die auf diesen Versionen basieren, lesen Sie bitte zuerst die Antwort von Bryan Larsen , die ausreichend sein sollte.

Für Versionen vor 2017 lesen Sie weiter ...


Verwenden Sie dpkg, um die Installation zu erzwingen ; parallel wird entlang gut mit moreutils - es umbenennt moreutils ' parallelutil zu parallel.moreutils. Nach Abschluss der Installation sind beide Programme ( GNU und moreutils ) verfügbar.

NB: Wenn ein Benutzerskript die alten moreutils aufruft parallel , ändern Sie diese Skripte, um den längeren Namen zu verwenden.

Details: Paralleles Paket holen (ohne etwas zu installieren oder zu entfernen). Verwenden Sie dann compgen(einen bashinternen Befehl), um das parallele Paket im Archiv zu finden. Wenn es mehrere gibt, verwenden Sie die neueste. Erzwinge die Installation dieses Pakets trotz Konflikten.

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

So zeigen Sie die resultierenden Umleitungen an:

dpkg-divert --list 'par*'

Ausgabe:

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

Sehen Sie, wie beide ausführbaren Binärdateien verfügbar sind:

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

Ausgabe:

-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
agc
quelle
1
Vielleicht nicht! Diese verwendete , um Arbeit in Ordnung, aber auf einem Lubuntu Box, alles installiert, aber apt-get hält von einer Parallele zu wollen , um loszuwerden , ... muss wahrscheinlich ein anderes außer Kraft setzen. Mehr später ...
5.
... mit der Ausnahme, dass Sie apt-get installsich weiterhin über den Konflikt beschweren, wie Sie zuvor geschrieben haben.
krlmlr
1
Ich habe bearbeitet /var/lib/dpkg/status, um den Konflikt zu entfernen. Gesucht nach "Conflicts: moreutils", löschte diese Zeile. Quelle: superuser.com/a/815371/99136 . Scheint jetzt zu funktionieren, aber ich befürchte, dass ein Update des "Parallel" -Pakets die Dinge wieder kaputt machen wird.
krlmlr
1
Nein: Warnt apt-get installdavor, dass das parallelPaket nicht aktualisiert wird, zeigt aber apt-cache policykeine unterschiedlichen Versionen an und apt-get dist-upgradeberührt das parallelPaket auch nicht . Ein Upgrade parallelscheint also ein Prozess zu sein, der bewusst angestoßen werden muss. Für mich in Ordnung.
krlmlr
@krlmlr, das ist neu für mich ... Übrigens, wenn Sie so freundlich wären, den obigen Trick hier zu posten. Ich würde es stimmen.
agc
7

Dieser Konflikt ist in Ubuntu 17.04 und Debian Stretch gelöst .

Wenn Sie parallel & moreutils installieren, erhalten Sie GNU parallel as /usr/bin/parallelund moreutil 's parallelas /usr/bin/parallel.moreutils. Wenn Sie nur moreutils installieren , bietet es /usr/bin/parallel.

Wenn Sie eine ältere Version von Ubuntu oder Debian verwenden , können Sie die .debs von einer neueren Version herunterladen und installieren: Sie installieren und funktionieren einwandfrei.

Bryan Larsen
quelle
1

Ich denke, der einfachste Weg wäre, eines der Pakete normal zu installieren (zB parallel) und ein anderes einfach in den benutzerdefinierten Pfad zu extrahieren:

$ 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/
barti_ddu
quelle
1

GNU Parallels ist nur ein Perl-Skript, Sie können es also einfach an eine nützliche Stelle kopieren (z. B. / usr / local / bin / gnu-parallel).

(Überprüfen Sie einfach die Perl-Abhängigkeiten).

David Goodwin
quelle