Bagaimana saya bisa menginstal GNU Parallel bersama Moreutils di Ubuntu / Debian?

22

Dapatkah saya membuat manajer paket menyelesaikan konflik misalnya dengan mengganti nama biner ( misalnya paralel → gparallel ) atau menginstal ke tempat yang berbeda ( mis. / Usr / → / usr / local / )?

PSkocik
sumber

Jawaban:

19

Untuk Ubuntu v17.04 ("Zesty Zapus") dan Debian v9 ("Stretch") , ( 2017 atau yang lebih baru), atau distro berdasarkan versi-versi itu, silakan baca jawaban Bryan Larsen terlebih dahulu , yang seharusnya cukup.

Untuk versi dari sebelum 2017 , baca terus ...


Gunakan dpkguntuk memaksa instalasi; paralel bisa bergaul dengan baik dengan MoreUtils - itu mengganti nama MoreUtils ' parallelutil untuk parallel.moreutils. Ketika instalasi selesai, kedua program ( GNU dan moreutils ) tersedia.

NB: jika ada skrip pengguna yang memanggil moreutils lama parallel, ubah skrip tersebut untuk menggunakan nama yang lebih panjang.

Detail: Ambil paket paralel (tanpa menginstal atau menghapus apa pun). Kemudian menggunakan compgen, ( bashperintah internal), temukan paket paralel dalam arsip. Jika ada lebih dari satu, gunakan yang terbaru. Paksa paket itu untuk menginstal, meskipun ada konflik.

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

Cara melihat pengalihan yang dihasilkan:

dpkg-divert --list 'par*'

Keluaran:

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

Lihat bagaimana kedua executable biner tersedia:

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

Keluaran:

-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
agc
sumber
1
Mungkin tidak! Ini dulunya berfungsi dengan baik, tetapi pada kotak Lubuntu, semuanya terpasang, tetapi apt-get tetap ingin menyingkirkan satu paralelnya ... mungkin perlu ditimpa lagi. Lebih lanjut lagi ...
agc
... kecuali yang apt-get installterus mengeluh tentang konflik, seperti yang Anda tulis sebelumnya.
krlmlr
1
Saya mengedit /var/lib/dpkg/statusuntuk menghapus konflik. Mencari "Konflik: moreutils", menghapus baris ini. Sumber: superuser.com/a/815371/99136 . Tampaknya berfungsi sekarang, tetapi saya khawatir pembaruan dari paket "paralel" akan merusak lagi.
krlmlr
1
Tidak: apt-get installmemperingatkan bahwa parallelpaket tidak akan ditingkatkan, tetapi apt-cache policytidak menampilkan versi yang berbeda, dan bahkan apt-get dist-upgradetidak akan menyentuh parallelpaket. Jadi, peningkatan paralleltampaknya merupakan proses yang harus dimulai secara sadar. Baik dengan saya.
krlmlr
@ krlmlr, itu yang baru pada saya ... BTW, jika Anda akan berbaik hati memposting trik di atas di sini. Tetapkan opsi apt-get untuk mentolerir 'dpkg - force-konflik' kludge yang tidak berbahaya? , Saya akan mengangkatnya.
agc
7

Konflik ini diselesaikan di Ubuntu 17.04 dan Debian Stretch .

Jika Anda menginstal parallel & moreutils Anda mendapatkan GNU parallel as /usr/bin/paralleldan moreutil 's parallelas /usr/bin/parallel.moreutils. Jika Anda hanya menginstal lebih banyak kernel , ia menyediakan /usr/bin/parallel.

Jika Anda menggunakan versi Ubuntu atau Debian yang lebih lama , Anda dapat mengunduh dan menginstal .deb dari versi yang lebih baru: mereka menginstal & berfungsi dengan baik.

Bryan Larsen
sumber
1

Saya kira, rute termudah adalah menginstal salah satu paket secara normal (mis. parallel) Dan mengekstrak yang lain ke jalur khusus:

$ 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/
barti_ddu
sumber
1

Paralel GNU hanyalah skrip perl, jadi Anda bisa menyalinnya di tempat yang berguna (mis. / Usr / local / bin / gnu-parallel).

(Cukup periksa dependensi perl).

David Goodwin
sumber