Як я можу встановити GNU Parallel поряд з Moreutils на Ubuntu / Debian?


22

Чи можу я змусити менеджера пакунків вирішити конфлікт, наприклад, перейменувавши бінарний ( наприклад, паралельний → gparallel ) або встановивши його в інше місце ( наприклад, / usr / → / usr / local / )?

Відповіді:


19

Для Ubuntu v17.04 ( «Zesty Zapus») і Debian v9 ( «Stretch») , ( 2017 р або новіше) або дистрибутивів , заснованих на ці версії, будь ласка , прочитайте відповідь Брайана Ларсена першим , який повинен бути достатнім.

Про версії до 2017 року читайте далі ...


Використовувати dpkgдля примусового встановлення; паралельно ладнає добре з moreutils - перейменовує moreutils ' parallelUtil до parallel.moreutils. Коли встановлення завершено , доступні обидві програми ( GNU та moreutils ).

Примітка: якщо будь-які сценарії користувачів викликають старі moreutils parallel , змініть ці сценарії, щоб використовувати довше ім'я.

Деталі: Виберіть паралельний пакет (не встановлюючи і не видаляючи нічого). Потім за допомогою compgen( bashвнутрішньої команди) знайдіть паралельний пакет в архіві. Якщо їх більше, використовуйте останні. Примушуйте цей пакет встановлювати, незважаючи на конфлікти.

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

Як переглянути отримані відхилення:

dpkg-divert --list 'par*'

Вихід:

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

Подивіться, як доступні обидва бінарні виконавчі файли:

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

Вихід:

-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
Можливо ні! Це використовується для роботи ОК, але на коробці Lubuntu, все інсталяціях, але схильні-прибуду продовжує бажаючи позбутися від одного паралелей ... ймовірно , потребує в іншому перевизначенні. Більше пізніше ...
agc

... окрім цього apt-get install, як і раніше, скаржиться на конфлікт, як ви писали раніше.
krlmlr

1
Я відредагував, /var/lib/dpkg/statusщоб усунути конфлікт. Шукали "Конфлікти: moreutils", видалили цей рядок. Джерело: superuser.com/a/815371/99136 . Здається, зараз це працює, але я боюся, що оновлення "паралельного" пакета знову розіб'є справи.
krlmlr

1
Нія: apt-get installпопереджає, що parallelпакет не буде оновлено, але apt-cache policyне містить різних версій і навіть apt-get dist-upgradeне торкнеться його parallel. Отже, модернізація, parallelздається, є процесом, який слід починати свідомо. Добре зі мною.
krlmlr

@krlmlr, це для мене нове ... До речі, якщо ви будете настільки люб'язними, щоб опублікувати вищевказаний трюк тут. Встановіть опції apt-get, щоб терпіти нешкідливий глузд "dpkg --force-конфлікти"? , Я б схвалив це.
agc

7

Цей конфлікт вирішується в Ubuntu 17.04 та Debian Stretch .

Якщо встановити паралельні та moreutil, ви отримаєте GNU parallel як /usr/bin/parallelі moreutil 's parallelяк /usr/bin/parallel.moreutils. Якщо ви встановлюєте лише більшеутилітів , це забезпечує /usr/bin/parallel.

Якщо ви використовуєте старішу версію Ubuntu або Debian , ви можете завантажити та встановити .deb з нової версії: вони встановлюють і працюють просто чудово.


1

Напевно, найпростішим маршрутом було б встановити один із пакунків зазвичай (наприклад parallel) та просто витягнути ще один на спеціальний шлях:

$ 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 - це просто сценарій perl, тому ви можете просто скопіювати його кудись корисно (наприклад, / usr / local / bin / gnu-паралельний).

(Просто перевірте залежності perl).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.