Como posso instalar o GNU Parallel ao lado do Moreutils no Ubuntu / Debian?


22

Posso fazer com que o gerenciador de pacotes resolva o conflito, renomeando o binário ( por exemplo, paralelo → gparallel ) ou instalando em um local diferente ( por exemplo, / usr / → / usr / local / )?

Respostas:


19

Para Ubuntu v17.04 ("Zesty Zapus") e Debian v9 ("Stretch") , ( 2017 ou mais recente) ou distribuições baseadas nessas versões, leia a resposta de Bryan Larsen primeiro , o que deve ser suficiente.

Para versões anteriores a 2017 , continue lendo ...


Use dpkgpara forçar a instalação; O paralelo se dá muito bem com o moreutils - renomeia o utilitário do moreutilsparallel para parallel.moreutils. Quando a instalação é concluída, ambos os programas ( GNU e moreutils ) estão disponíveis.

Nota: se algum script de usuário chamar o antigo moreutils parallel , altere-o para usar o nome mais longo.

Detalhes: Busque o pacote paralelo (sem instalar ou remover nada). Em seguida compgen, usando (um bashcomando interno), encontre o pacote paralelo no arquivo morto. Se houver mais de um, use o mais recente. Forçar a instalação desse pacote, apesar dos conflitos.

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

Como visualizar os desvios resultantes:

dpkg-divert --list 'par*'

Saída:

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

Veja como os dois executáveis ​​binários estão disponíveis:

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

Saída:

-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

11
Talvez não! Isso costumava funcionar bem, mas em uma caixa do Lubuntu, tudo é instalado, mas o apt-get continua querendo se livrar de um dos paralelos ... provavelmente precisa de outra substituição. Mais tarde ...
agc 5/05

... exceto que apt-get installcontinua reclamando do conflito, como você escreveu anteriormente.
krlmlr

11
Eu editei /var/lib/dpkg/statuspara remover o conflito. Pesquisou por "Conflitos: moreutils", excluiu esta linha. Fonte: superuser.com/a/815371/99136 . Parece funcionar agora, mas temo que uma atualização do pacote "paralelo" interrompa as coisas novamente.
precisa saber é o seguinte

11
Não: apt-get installavisa que o parallelpacote não será atualizado, mas apt-cache policynão mostra versões diferentes e nem apt-get dist-upgradetoca no parallelpacote. Portanto, a atualização parallelparece ser um processo que precisa ser iniciado conscientemente. Tudo bem por mim.
precisa saber é o seguinte

@krlmlr, isso é novo para mim ... BTW, se você tiver a gentileza de postar o truque acima aqui Defina as opções apt-get para tolerar o kludge inofensivo do 'dpkg --force-conflitos'? , Eu votaria.
agc

7

Este conflito foi resolvido no Ubuntu 17.04 e Debian Stretch .

Se você instala o paralelo & moreutils, obtém o GNU parallel as /usr/bin/parallele moreutil 's parallelcomo /usr/bin/parallel.moreutils. Se você instalar apenas o moreutils , ele fornece /usr/bin/parallel.

Se você estiver usando uma versão mais antiga do Ubuntu ou Debian , poderá baixar e instalar o .deb a partir de uma versão mais recente: eles instalam e funcionam perfeitamente.


1

Eu acho que a rota mais fácil seria instalar um dos pacotes normalmente (por exemplo parallel) e apenas extrair outro para o caminho personalizado:

$ 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

Paralelos GNU é apenas um script perl, então você pode copiá-lo em algum lugar útil (por exemplo, / usr / local / bin / gnu-parallel).

(Apenas verifique as dependências do perl).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.