ฉันจะรับ apt-get เพื่อละเว้นการขึ้นต่อกันได้อย่างไร?


86

ฉันจะทำให้ apt-get ละเว้นการอ้างอิงบางอย่างได้อย่างไร ตัวอย่างเช่นฉันต้องการติดตั้งmailxเพื่อให้ฉันสามารถใช้เพื่อส่งอีเมลจากสคริปต์ cron / เครื่องมือสร้างรายงาน อย่างไรก็ตามการติดตั้ง mailx ยังติดตั้งexim4และการพึ่งพาทั้งหมด (ฉันได้ติดตั้ง Postfix แล้ว) ฉันไม่ต้องการจริงๆและฉันคิดว่า mailx สามารถใช้งานได้โดยไม่ต้องใช้

ฉันจะละเว้นการอ้างอิงบางอย่าง แต่ยังคงใช้ apt-get เนื่องจากมันเป็นเครื่องมือที่ดี?


postfix ติดตั้งอย่างไร? ผ่านแพคเกจเดเบียน? หรือคุณติดตั้ง postfix จากแหล่งที่มา?
สตูว์

ใช่ติดตั้ง Postfix จากซอร์ส
FrancisV

3
แพ็คเกจ mailx ของเดเบียนเพียง 'แนะนำ' exim4 ไม่จำเป็นต้องใช้ หากคุณไม่ต้องการที่จะติดตั้งแพคเกจแนะนำเพียงแค่เพิ่มที่คุณAPT::Install-Recommends "false"; apt.conf
ruief

ฉันพบคำตอบที่น่าพอใจสำหรับเรื่องนี้ที่ unix.stackexchange.com unix.stackexchange.com/a/404449/23542
artfulrobot

คำตอบ:


45

วิธีแก้ปัญหาที่ง่ายและสะดวก:เพียงระบุแพ็คเกจที่ไม่ต้องการด้วยส่วนเสริมพิเศษ-หลังจากแต่ละแพ็คเกจ

ตัวอย่างที่ไม่มี-สวิตช์:

root@debian:~# apt-get install bsd-mailx 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  exim4-base exim4-config exim4-daemon-light liblockfile-bin liblockfile1
[...]

ตัวอย่างการใช้สวิทช์ที่จะหลีกเลี่ยงการติดตั้ง exim4-baseสังเกตเห็น-ในตอนท้าย:

root@debian:~# apt-get install bsd-mailx exim4-base-
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package 'exim4-base' is not installed, so not removed
The following extra packages will be installed:
  liblockfile-bin liblockfile1 ssmtp
[...]

อย่างที่คุณเห็นapt-getอย่าพยายามติดตั้งexim4-baseแพ็กเกจอีกต่อไปและไม่ลองติดตั้งการพึ่งพาต่างๆ ( exim4-configฯลฯ )

และถ้าคุณทำผิดและต้องการการexim4-baseพึ่งพานั้นคุณสามารถทำได้ในapt-get installภายหลัง!


5
นี่เป็นวิธีที่ดีที่สุดในการหลีกเลี่ยงการติดตั้งการพึ่งพาใด ๆ คำตอบอื่น ๆ ก็คือหลีกเลี่ยงการติดตั้งการพึ่งพาทั้งหมดถอนการติดตั้งการพึ่งพาหลังจากติดตั้งแล้วหรือแนะนำแพ็คเกจการแก้ไขที่น่าเบื่อ
Neil

1
นี่คือสิ่งที่ฉันต้องการ! (การติดตั้งgnupg2โดยไม่ต้องpinentry-gtk2หลีกเลี่ยง X deps)
lapo

ที่ดีจริงๆ แต่ในกรณีของฉันฉลาดรับปฏิเสธที่จะติดตั้งแพคเกจด้วย "การพึ่งพา unmet" (ซึ่งฉันระบุโดยใช้วิธีนี้) แพ็คเกจเอกสารขนาด 100 เมกะไบต์ซึ่งฉันไม่สนใจ
Rolf

3
ใช้งานได้กับการอ้างอิงที่เป็นตัวเลือกเท่านั้นไม่ใช่สำหรับการอ้างอิงที่ต้องการ rmessage Depends: xxx but it is not going to be installedข้อผิดพลาด: คุณสามารถข้ามแพ็คเกจเสริมทั้งหมดได้ด้วยapt-get install --no-install-recommends PACKAGE
koppor

ยังใช้ไม่ได้กับแพ็คเกจเสมือน แต่ดูunix.stackexchange.com/a/404449/23542
artfulrobot

55

คุณสามารถเปลี่ยนการขึ้นต่อกันของแพ็คเกจ deb เช่นนี้:

  1. Unpack deb: ar x golden-linux.deb(จะสร้างเช่นสามไฟล์: debian-binary control.tar.gz data.tar.gz)
  2. tar xzf control.tar.gzคลายการบีบอัดไฟล์เก็บข้อมูลการควบคุม: (จะสร้าง: การควบคุม postinst postrm preinst prerm md5sums)
  3. แก้ไขการอ้างอิงในcontrol(ใช้โปรแกรมแก้ไขข้อความ)
  4. Repack control.tar.gz: tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
  5. Repack deb: ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz(ลำดับสำคัญ! ดู [หมายเหตุ])

[หมายเหตุ]: dpkg จะไม่สามารถอ่านข้อมูลเมตาของแพคเกจได้อย่างรวดเร็วหากต้องค้นหาว่าส่วนข้อมูลสิ้นสุดลงที่ใด!


2
ดีมันทำให้ฉันเป็นกรณีพิเศษของการพึ่งพาสำหรับ "raring8" ถึง "raring6" แต่รุ่นเดียวกัน = (ขอบคุณมาก
Felipe Alcacibar

1
ขอบคุณจากฉันเช่นกัน ผมต้องใช้วิธีนี้เพราะเป็นโปรแกรมที่จำเป็นlibmng1.so.1แม้จะทำงานอย่างสมบูรณ์แบบด้วยชุด symlink libmng1.so.2ไป apt-getเพียงแค่ไม่สามารถงงและทำให้ฉันน่ารำคาญเกี่ยวกับการพึ่งพาไม่ได้ (แม้เมื่อติดตั้งบางสิ่งที่ไม่เกี่ยวข้องโดยสิ้นเชิง!) แนวคิดเรื่องขยะเป็นภาระ
ไวยากรณ์

+1 มันทำงานได้สมบูรณ์แบบสำหรับฉันเช่นกัน gnome-settings-daemonต้องการแพ็กเกจgnome-settings-daemon-schemas=3.8.6.1-0ubuntu11แต่ฉันมีอยู่แล้วgnome-settings-daemon-schemas=3.8.6.1-0ubuntu11.2(<- สังเกตเห็น ".2" ในตอนท้าย) โพรซีเดอร์นี้อนุญาตให้ฉันแก้ไขแพ็กเกจและบังคับให้ใช้เวอร์ชัน 11.2 ที่ใหม่กว่า ขอขอบคุณ!
Eric Duncan

1
ทางออกที่ดีขอบคุณ ฉันแก้ไขขั้นตอนที่ 2 และ 4 บิต: 2. FILES=$(tar zxvf control.tar.gz)เพื่อเก็บรายการไฟล์ไว้ในตัวแปร 4. tar zcf control.tar.gz $FILES- สร้างไฟล์เก็บถาวรในขั้นตอนเดียวโดยไม่ต้องไพพ์หรือเปลี่ยนเส้นทางโดยใช้รายการไฟล์ดั้งเดิม (หลังจากแก้ไข)
เบร็ท

2
ข้อเสนอแนะอีกคู่ สำหรับ # 4: เพิ่ม--ignore-failed-readเพื่อtarละเว้นไฟล์ที่หายไปจากส่วนที่เหลือของบรรทัดคำสั่ง (ตัวอย่างเช่นprerm, postrmขาดจากหลายแพ็กเกจ.) นอกจากนี้ tarballs สามารถ.xzมากกว่า.gzในรุ่นใหม่ของรูปแบบที่เก็บ Debian (เช่นdata.tar.xz)
Dan Lenski

33

หลังจากคุณติดตั้งแพ็กเกจด้วย--ignore-depends ตัวเลือกให้ไปและแก้ไข/var/lib/dpkg/statusไฟล์แล้วลบสิ่งที่ต้องพึ่งพาที่คุณคิดว่าไม่จำเป็น แค่ระวังให้มาก ในการสั่งซื้อ dep จะต้องก็จะมากขึ้นกว่าที่มีแนวโน้มที่จะถูกต้อง


3
หลังจากอัพเดต/var/lib/dpkg/statusแล้วอาจจำเป็นต้องทำการติดตั้งให้เสร็จสิ้นด้วยsudo apt-get -f install(ไม่จำเป็นต้องระบุแพ็คเกจ)
Zmicier Zaleznicenka

นอกจากนี้ยังพบได้ที่นี่: superuser.com/a/815371/127024
โยฮันน์

มันให้ครีพแก่ฉัน แต่มันไร้ที่ติ!
David Schmitt

25

คุณสามารถลองธง--nodeps หรือดาวน์โหลดแพคเกจและติดตั้งโดยใช้มีตัวเลือกapt-get
dpkg--ignore-depends

ตัวอย่างเช่นหากคุณต้องการติดตั้งแพคเกจfooโดยไม่ต้องพึ่งพาbar:

dpkg --ignore-depends=bar -i foo_1.2.3_amd64.deb

52
คุณมีเวอร์ชัน APT รุ่นใด? เหมืองแร่ ( 0.8.10 ) ไม่มีตัวเลือกดังกล่าว
tshepang

8
การบอก dpkg ให้เพิกเฉยต่อคำสั่งไม่ได้เป็นตัวเลือกสำหรับเขา มีเพียงบอก dpkg ให้เพิกเฉยต่อการขึ้นต่อกันของธุรกรรมนี้มันจะพยายามตอบสนองต่อการอ้างอิงหรือลบ pacakge ในครั้งต่อไปที่คุณทำอะไร
สตูว์

2
ยังไม่มีโชคกับ APT 0.8.16 BTW แย่มากเนื่องจากไม่มีทางเลือกที่สมเหตุสมผล คุณใช้เวอร์ชันใดในปี 2554 เพื่อให้ใช้งานได้
คริสเตียน

2
คุณสามารถใช้การดาวน์โหลด apt-get และจากนั้น dpkg
Frederick Roth

7
--no-install-recommendsทำงานให้ฉัน
Olle Härstedt

14

เนื่องจากคุณติดตั้ง postfix จากแหล่งที่มาคุณต้องติดตั้งแพคเกจ "dummy" ซึ่งจะตอบสนองการพึ่งพา mail-transport-agent ของ mailx (หรือ bsd-mailx) แพ็คเกจ "equivs" ใน debian มีอยู่เพื่อสร้างแพ็คเกจจำลองซึ่งคุณสามารถติดตั้งเพื่อบอก dpkg "การพึ่งพานี้มีความพึงพอใจ"

เหตุผลที่บอกให้ dpkg ละเว้นการอ้างอิงไม่ใช่วิธีแก้ปัญหาที่ดีนั่นคือคุณบอกให้ dpkg / apt เพิกเฉยต่อการทำธุรกรรมเพียงครั้งเดียวคุณไม่สามารถบอกให้ละเว้นการขึ้นต่อกันได้ตลอดไป ทุกครั้งที่คุณใช้มันจะตรวจสอบการขึ้นต่อกันของทุกแพ็คเกจ


2
ดูเพิ่มเติมคำตอบนี้ที่เชื่อมโยงกับการกวดวิชา (แม้ว่าจะมีความซับซ้อนมากเกินไป) superuser.com/a/416560/128960 เวอร์ชันย่อคือ: รันequivs-control <name>แก้ไขไฟล์ที่สร้างเพื่อให้การอ้างอิงที่ถูกต้องและมีชื่อที่ดีจากนั้นรันequivs-build <name>และในที่สุดdpkg -iไฟล์. deb ผลลัพธ์
คริสเตียน

1
IMHO นี่เป็นทางออกที่ดีที่สุดจริงๆ โซลูชันอื่น ๆ ทั้งหมดที่ร้องขอที่นี่เป็นสิ่งที่แฮ็คเกินไป สิ่งนี้จะต้องทำเพียงครั้งเดียวและคุณสามารถติดตั้งซอฟต์แวร์ใดก็ได้ขึ้นอยู่กับซอฟต์แวร์ที่คอมไพล์ด้วยตัวเองในภายหลัง ... ดังนั้นลองโหวตคำตอบนี้!
Rugby

7

ฉันได้มองหาตัวเลือกนี้บน Ubuntu 12.04 Server ที่ใช้ Xen ในโดเมนของฉันฉันใช้เคอร์เนลเสมือนจริงและยังคงพยายามติดตั้งด้วงด้วยการอัพเกรดทุกแพ็คเกจ อย่างไรก็ตามไม่จำเป็นต้องใช้ด้วงใน domU เมื่อใช้ p [yv] ด้วง

ฉันได้รับการมองหาตัวเลือก -nodeps เพื่อ apt-get เช่นกัน แต่มันไม่ได้ผลดังนั้นจึงต้องถอนการติดตั้ง / กำจัด grub * หลังจากการอัพเกรดเคอร์เนลแต่ละครั้ง

ท้ายที่สุดแล้วการอ่าน man page ช่วยจริงๆบางครั้งมันกลายเป็นตัวเลือก apt-get ที่คล้ายกันในวันที่ 12.04 ซึ่งดูเหมือนว่าจะเป็น - ไม่ติดตั้งแนะนำซึ่งใช้งานได้จริงในกรณีนี้เนื่องจากด้วงนั้นแสดงรายการเป็น 'แนะนำ' ใน ข้อมูลแพคเกจ (ฉันเดาว่ามันไม่ใช่การพึ่งพา "ของจริง"?)

ฉันกำลังเพิ่มสิ่งนี้ไว้ที่นี่เพราะในกรณีของฉันมันแก้ไขปัญหาที่คล้ายกันและคำแนะนำสำหรับ '- no-install-recommends' ยังไม่ได้กล่าวถึง


6

คุณสามารถดาวน์โหลดแพ็คเกจด้วย apt-get จากนั้นติดตั้งด้วย dpkg แสดงรายการการพึ่งพาที่คุณต้องการจะเพิกเฉย

ตัวอย่างเช่นหากฉันต้องการดาวน์โหลด mypackage แต่ขึ้นอยู่กับ libperl5.14 และฉันไม่ต้องการติดตั้ง libperl5.14 เนื่องจากฉันมีรุ่นอื่นฉันสามารถเพิกเฉยต่อการพึ่งพานี้ได้ดังนี้

apt-get download mypackage
dpkg -i --ignore-depends=libperl5.14 mypackage.deb

เพียงแค่พูดถึงว่าจะทำให้คุณ "แตกหัก" มันจะไม่ยอมให้คุณติดตั้งแพ็คเกจอื่นจนกว่าคุณจะแก้ไขการพึ่งพาที่ขาดหายไป
drpexe

6

อีกวิธีหนึ่งในการปรับแต่งการพึ่งพาคือ:

apt-get download yourpackage
dpkg-deb -x yourpackage.deb PackageFolder
dpkg-deb --control yourpackage.deb PackageFolder/DEBIAN
vim PackageFolder/DEBIAN/control
dpkg -b PackageFolder yourpackage2.deb
apt-get install ./yourpackage2.deb

2

บนระบบเดเบียนของฉันจริง ๆ แล้ว bsd-mailx ขึ้นอยู่กับdefault-mta | mail-transport-agent(คุณสามารถตรวจสอบสิ่งที่แพคเกจขึ้นอยู่กับapt-cache show <pkg>สิ่งใดในการเก็บถาวรหรือdpkg -s <pkg>สำหรับแพคเกจที่ติดตั้ง

อาจเป็นได้ว่าแพ็คเกจ postfix ของคุณไม่มีProvides: mail-transport-agentดังนั้นจึงไม่ทราบว่าคุณได้ติดตั้ง MTA แล้ว มันจะคุ้มค่าที่จะบันทึกข้อผิดพลาดสำหรับสิ่งนั้นถ้ามันเป็นแพ็คเกจอย่างเป็นทางการ


1

สำหรับจุดประสงค์นี้คุณสามารถติดตั้งตะปูที่ฉันไม่คิดว่ามีการพึ่งพาเหล่านี้

apt-get install nail

-5

ดี - ไม่

การใช้งานของคนอื่นเป็นสิ่งสำคัญมากบนเส้นทางสู่ความสำเร็จ เมื่อคุณสร้างซอฟต์แวร์บางอย่างจากแหล่งที่มา (tarball) คุณพลาดโอกาสที่จะใช้งานของตัวจัดการแพคเกจของ distro

คุณจะไม่ได้รับการอัปเดต "ฟรี" ส่วนใหญ่ไม่มีการอัพเดทแพ็คเกจที่ติดตั้งมาจากแหล่งใดเลย เนื่องจากพวกเขาต้องการติดตามซอฟต์แวร์สำหรับเวอร์ชันใหม่ให้สร้างใหม่และโปรแกรมที่ขึ้นต่อกันทั้งหมด (ลองจำได้)

คุณจะมีปัญหากับแพ็คเกจอื่น ๆ จาก repos ของการแจกจ่าย นี่เป็นกรณีที่ระบุไว้ในคำถาม: อูบุนตูมีผู้จัดการแพคเกจที่ดีและบางคนที่ดีมากที่รักษาแพคเกจ และพวกเขาได้ตัดสินใจแล้วว่าสำหรับโปรแกรม mailx ในการทำงานคุณต้องมี MTA ดังนั้นหากคุณติดตั้ง postfix จากแหล่งที่มา Ubuntu จะไม่ขอให้คุณติดตั้ง exim

ถ้าด้วยเหตุผลบางอย่างการบำรุงรักษาเซิร์ฟเวอร์จะส่งผ่านไปยังบุคคลอื่น (เช่นโครงการของคุณประสบความสำเร็จมากและคุณตัดสินใจที่จะจ้างคนอื่นเพื่อจัดการเซิร์ฟเวอร์ในขณะที่คุณกำลังยุ่งกับสิ่งอื่น ๆ ) เขาจะคาดหวังว่าจะทำงานdpkg --get-selectionsทั้งหมด แพคเกจที่ติดตั้ง

พยายามใช้ซอฟต์แวร์การจัดการบรรจุภัณฑ์ของ distro ให้มากที่สุด เรียนรู้ที่จะสร้างแพ็คเกจของคุณเองถ้าคุณไม่พบตึกที่สร้างไว้ล่วงหน้าและคุณจะกลายเป็นมืออาชีพที่ดีกว่า

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