Comment puis-je installer GNU Parallel aux côtés de Moreutils sur Ubuntu / Debian?

22

Puis-je demander au gestionnaire de paquets de résoudre le conflit, par exemple en renommant le binaire ( par exemple parallèle → gparallel ) ou en l'installant à un autre endroit ( par exemple / usr / → / usr / local / )?

PSkocik
la source

Réponses:

19

Pour Ubuntu v17.04 ( "Zesty Zapus") et Debian v9 ( "Stretch") , ( 2017 ou plus récent), ou distros basées sur ces versions, s'il vous plaît lire la réponse de Bryan Larsen premier , qui devrait être suffisant.

Pour les versions antérieures à 2017 , lisez la suite ...


Utilisez dpkgpour forcer l'installation; parallèle s'entend bien avec moreutils - il renomme l' utilité de moreutilsparallel en parallel.moreutils. Une fois l'installation terminée, les deux programmes ( GNU et moreutils ) sont disponibles.

NB: si des scripts utilisateur appellent les anciens moreutils parallel , changez ces scripts pour utiliser le nom plus long.

Détails: récupérer le package parallèle (sans rien installer ni supprimer). Ensuite, à l'aide de compgen(une bashcommande interne), recherchez le package parallèle dans l'archive. S'il y en a plusieurs, utilisez la dernière. Forcer l'installation de ce package, malgré les conflits.

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

Comment afficher les détournements résultants:

dpkg-divert --list 'par*'

Sortie:

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

Découvrez comment les deux exécutables binaires sont disponibles:

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

Sortie:

-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
la source
1
Peut être pas! Cela permet de travailler OK, mais sur une boîte Lubuntu, tout Installe, mais apt-get ne cesse de vouloir se débarrasser d'un des parallèles ... a probablement besoin d'une autre dérogation. Plus tard ...
agc
... sauf que cela apt-get installcontinue de se plaindre du conflit, comme vous l'avez écrit plus tôt.
krlmlr
1
J'ai modifié /var/lib/dpkg/statuspour supprimer le conflit. Vous avez recherché "Conflicts: moreutils", supprimé cette ligne. Source: superuser.com/a/815371/99136 . Semble fonctionner maintenant, mais je crains qu'une mise à jour du package "parallèle" ne brise à nouveau les choses.
krlmlr
1
Non: apt-get installprévient que le parallelpackage ne sera pas mis à niveau, mais apt-cache policyn'affiche pas de versions différentes et apt-get dist-upgradene touchera même pas le parallelpackage. La mise parallelà niveau semble donc être un processus qui doit être initié consciemment. Ça va pour moi.
krlmlr
@krlmlr, c'est un nouveau pour moi ... BTW, si vous avez la gentillesse de poster l'astuce ci-dessus ici Définissez les options apt-get pour tolérer le kludge inoffensif 'dpkg --force-conflits'? , Je voterais pour.
agc
7

Ce conflit est résolu dans Ubuntu 17.04 et Debian Stretch .

Si vous installez parallel & moreutils vous obtenez le GNU parallel as /usr/bin/parallelet moreutil 's parallelas /usr/bin/parallel.moreutils. Si vous installez uniquement moreutils , il fournit /usr/bin/parallel.

Si vous utilisez une ancienne version d' Ubuntu ou de Debian , vous pouvez télécharger et installer les .deb à partir d'une version plus récente: ils s'installent et fonctionnent très bien.

Bryan Larsen
la source
1

Je suppose que la voie la plus simple serait d'installer normalement l'un des packages (par exemple parallel) et d'en extraire un autre sur le chemin personnalisé:

$ 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
la source
1

GNU parallels n'est qu'un script perl, vous pouvez donc simplement le copier dans un endroit utile (par exemple / usr / local / bin / gnu-parallel).

(Il suffit de vérifier les dépendances perl).

David Goodwin
la source