¿Cómo puedo instalar GNU Parallel junto con Moreutils en Ubuntu / Debian?


22

¿Puedo hacer que el administrador de paquetes resuelva el conflicto, por ejemplo, cambiando el nombre del binario ( por ejemplo, paralelo → gparallel ) o instalándolo en un lugar diferente ( por ejemplo, / usr / → / usr / local / )?

Respuestas:


19

Para Ubuntu v17.04 ("Zesty Zapus") y Debian v9 ("Stretch") , ( 2017 o más reciente), o distribuciones basadas en esas versiones, lea primero la respuesta de Bryan Larsen , que debería ser suficiente.

Para versiones anteriores a 2017 , sigue leyendo ...


Use dpkgpara forzar la instalación; Paralelamente se lleva muy bien con moreutils - renombra moreutils ' parallelutil a parallel.moreutils. Cuando se realiza la instalación, ambos programas ( GNU y moreutils ) están disponibles.

Nota: si alguna secuencia de comandos de usuario llama a moreutils anteriores parallel , cambie esas secuencias de comandos para usar el nombre más largo.

Detalles: Obtenga el paquete paralelo (sin instalar ni quitar nada). Luego compgen, usando (un bashcomando interno), busque el paquete paralelo en el archivo. Si hay más de uno, use el último. Fuerce la instalación de ese paquete, a pesar de los conflictos.

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

Cómo ver los desvíos resultantes:

dpkg-divert --list 'par*'

Salida:

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

Vea cómo ambos ejecutables binarios están disponibles:

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

Salida:

-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
¡Tal vez no! Esto solía funcionar bien, pero en una caja de Lubuntu, todo se instala, pero apt-get sigue deseando deshacerse de uno de los paralelos ... probablemente necesite otra anulación. Más tarde ...
agc

... excepto que apt-get installsigue quejándose del conflicto, como escribiste anteriormente.
krlmlr

1
Edité /var/lib/dpkg/statuspara eliminar el conflicto. Busqué "Conflictos: moreutils", eliminó esta línea. Fuente: superuser.com/a/815371/99136 . Parece funcionar ahora, pero me temo que una actualización del paquete "paralelo" volverá a romper las cosas.
krlmlr

1
No: apt-get installadvierte que el parallelpaquete no se actualizará, pero apt-cache policyno muestra versiones diferentes, e incluso apt-get dist-upgradeno tocará el parallelpaquete. Entonces, la actualización parallelparece ser un proceso que debe iniciarse conscientemente. Bien por mi.
krlmlr

@krlmlr, esa es una nueva para mí ... Por cierto, si fuera tan amable de publicar el truco anterior aquí. Establezca las opciones apt-get para tolerar el inofensivo 'dpkg --force-conflict' kludge? , Lo votaría
agc

7

Este conflicto se resuelve en Ubuntu 17.04 y Debian Stretch .

Si instala en paralelo y moreutils se obtiene la GNU parallel como /usr/bin/parallely moreutil 's parallelcomo /usr/bin/parallel.moreutils. Si solo instala moreutils , proporciona /usr/bin/parallel.

Si está utilizando una versión anterior de Ubuntu o Debian , puede descargar e instalar los .deb de una versión más nueva: se instalan y funcionan bien.


1

Supongo que la ruta más fácil sería instalar uno de los paquetes normalmente (por ejemplo parallel) y simplemente extraer otro a la ruta personalizada:

$ 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

GNU parallels es solo un script perl, por lo que podría copiarlo en algún lugar útil (por ejemplo, / usr / local / bin / gnu-parallel).

(Solo verifique las dependencias perl).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.