ฉันจะติดตั้ง GNU Parallel ควบคู่กับ Moreutils บน Ubuntu / Debian ได้อย่างไร?


22

ฉันสามารถทำให้ตัวจัดการแพ็กเกจแก้ไขข้อขัดแย้งเช่นโดยเปลี่ยนชื่อไบนารี ( เช่น parallel → gparallel ) หรือติดตั้งไปยังตำแหน่งอื่น ( เช่น / usr / → / usr / local / ) ได้หรือไม่

คำตอบ:


19

สำหรับUbuntu v17.04 ("Zesty Zapus")และDebian v9 ("Stretch") , ( 2017หรือใหม่กว่า) หรือ distros ตามเวอร์ชันเหล่านั้นโปรดอ่านคำตอบของ Bryan Larsen ก่อนซึ่งควรจะเพียงพอ

สำหรับรุ่นก่อนปี 2560อ่านต่อ ...


ใช้dpkgเพื่อบังคับให้ติดตั้ง ขนานรับพร้อมอย่างกับmoreutils - มันเปลี่ยนชื่อmoreutils ' parallelutil parallel.moreutilsไป เมื่อติดตั้งจะทำทั้งสองโปรแกรม ( GNUและmoreutils ) ที่มีอยู่

NB: หากสคริปต์ผู้ใช้ใด ๆเรียก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 ทุกอย่างติดตั้ง แต่apt-getยังคงต้องการกำจัดสิ่งที่คล้ายคลึงกัน ... อาจจะต้องการการแทนที่อีกอัน เพิ่มเติมในภายหลัง ...
agc

... ยกเว้นว่าapt-get installจะบ่นเกี่ยวกับความขัดแย้งดังที่คุณเขียนไว้ก่อนหน้านี้
krlmlr

1
ฉันแก้ไข/var/lib/dpkg/statusเพื่อลบข้อขัดแย้ง ค้นหา "Conflicts: moreutils" ลบบรรทัดนี้ ที่มา: superuser.com/a/815371/99136 ดูเหมือนว่าจะใช้งานได้ในตอนนี้ แต่ฉันกลัวว่าการอัปเดตแพคเกจ "ขนาน" จะทำให้สิ่งต่าง ๆ เสียหายอีกครั้ง
krlmlr

1
ไม่: apt-get installเตือนว่าparallelแพ็คเกจจะไม่ได้รับการอัพเกรด แต่apt-cache policyจะไม่แสดงเวอร์ชั่นที่แตกต่างกันและapt-get dist-upgradeจะไม่แตะต้องparallelแพ็คเกจ ดังนั้นการอัพเกรดparallelดูเหมือนจะเป็นกระบวนการที่ต้องเริ่มต้นอย่างมีสติ สบายดีกับฉัน
krlmlr

@krlmlr, นั่นคืออันใหม่สำหรับฉัน ... BTW, ถ้าคุณใจดีที่จะโพสต์เคล็ดลับข้างต้นที่นี่ตั้งค่าตัวเลือก apt-get เพื่อทนต่อ kludge 'dpkg --force-ขัดแย้ง' ที่ไม่เป็นอันตราย? ฉันต้องการโหวตแล้ว
agc

7

ความขัดแย้งนี้จะแก้ไขได้ในUbuntu 17.04และDebian ยืด

หากคุณติดตั้งแบบขนานและmoreutilsคุณได้รับGNU parallelเป็น/usr/bin/parallelและmoreutil 's เป็น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-parallel)

(เพียงตรวจสอบการพึ่งพา Perl)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.