Могу ли я заставить менеджер пакетов разрешить конфликт, например, переименовав двоичный файл (например, параллельный → gparallel ) или установив в другое место (например, /usr / → /usr / local / )?
4 ответа
Для 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
Этот конфликт разрешен в Ubuntu 17.04 и Debian Stretch.
При установке параллельно & moreutils вы получаете parallel
GNU как /usr/bin/parallel
и moreutil «ы parallel
как /usr/bin/parallel.moreutils
Если вы только устанавливаете moreutils, он предоставляет /usr/bin/parallel
.
Если вы используете более старую версию Ubuntu или Debian, вы можете загрузить и установить .deb из более новой версии: они устанавливаются и работают просто отлично.
Я предполагаю, что самым простым способом было бы установить один из пакетов в обычном режиме (например, 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/
GNU Parallels - это всего лишь Perl-скрипт, поэтому вы можете просто скопировать его куда-нибудь полезное (например, /usr /local /bin /gnu -rallel).
(Просто проверьте зависимости perl).