20

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

4 ответа4

17

Для Ubuntu v17.04 ("Zesty Zapus") и Debian v9 ("Stretch"), (2017 или новее) или дистрибутивов, основанных на этих версиях, сначала прочтите ответ Брайана Ларсена , чего должно быть достаточно.

Для версий до 2017 года читайте дальше ...


Используйте dpkg для принудительной установки; Параллельно хорошо ладит с moreutils - он переименовывает parallel утилит moreutils в parallel.moreutils . Когда установка завершена, доступны обе программы (GNU и moreutils).

NB. Если какие-либо пользовательские сценарии вызывают parallel старый файл moreutils , измените эти сценарии на более длинное имя.

Детали: Получить параллельный пакет (без установки или удаления чего-либо). Затем с помощью 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
6

Этот конфликт разрешен в Ubuntu 17.04 и Debian Stretch.

При установке параллельно & moreutils вы получаете parallel GNU как /usr/bin/parallel и moreutil «ы parallel как /usr/bin/parallel.moreutils Если вы только устанавливаете 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 Parallels - это всего лишь Perl-скрипт, поэтому вы можете просто скопировать его куда-нибудь полезное (например, /usr /local /bin /gnu -rallel).

(Просто проверьте зависимости perl).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .