ละเว้นการอ้างอิงทั้งหมดสำหรับแพ็คเกจที่เฉพาะเจาะจงด้วย apt-get


16

นี่เป็นคำถามที่เฉพาะเจาะจงซึ่ง Google ไม่ได้ช่วยตอบ

ผมใช้ Ubuntu 13.04 apt 0.9.7.7ubuntu4 for amd64 compiled on Oct 3 2013 15:25:56กับ

ฉันต้องการติดตั้ง Erlang จากแพ็คเกจ. deb แต่ฉันไม่ต้องการดึงการอ้างอิงทั้งหมด ตัวแพ็คเกจระบุว่ามันขึ้นอยู่กับไลบรารี Java และ wx แต่ในความเป็นจริงนั้นไม่จำเป็นต้องใช้เว้นแต่คุณต้องการเชื่อมต่อกับ Java หรือ wxWidgets

ฉันสามารถติดตั้ง Erlang แบบนี้ได้

sudo dpkg -i --force-depends erlang.deb

อย่างไรก็ตามการติดตั้งสิ่งอื่นใดก็ตามapt-getหลังจากนั้นล้มเหลวเนื่องจากการพึ่งพาที่ไม่แน่นอน ดังนั้นหากฉันต้องการติดตั้งคอมไพล์หลังจาก Erlang ฉันจะได้รับสิ่งต่อไปนี้

$ sudo apt-get install -y git
Reading package lists...
Building dependency tree...
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 esl-erlang : Depends: default-jre-headless but it is not going to be installed or
                       java2-runtime-headless or
                       java1-runtime-headless or
                       java2-runtime or
                       java1-runtime
              Depends: libwxbase2.8-0 but it is not going to be installed
              Depends: libwxgtk2.8-0 but it is not going to be installed
              Recommends: erlang-mode but it is not going to be installed
 git : Depends: libcurl3-gnutls (>= 7.16.2-1) but it is not going to be installed
       Depends: perl-modules but it is not going to be installed
       Depends: liberror-perl but it is not going to be installed
       Depends: git-man (> 1:1.7.9.5) but it is not going to be installed
       Depends: git-man (< 1:1.7.9.5-.) but it is not going to be installed
       Recommends: patch
       Recommends: rsync
       Recommends: ssh-client
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

มีวิธีทำให้esl-erlangแพ็คเกจปิดโดยไม่ใช้งานapt-get install -fหรือไม่

ฉันต้องการสิ่งนี้:

sudo apt-get install --ignore-deps-for-package=esl-erlang git

หรือเช่นนี้

sudo apt-cache shut-package-up esl-erlang

หรือสิ่งนี้:

sudo apt-get download git
sudo dpkg -i --with-deps git.deb

ฉันได้พบคำถามที่คล้ายกัน: /server/250224/how-do-i-get-apt-get-to-ignore-some-dependencies คำตอบสองสามข้อให้ขั้นตอนแบบแมนนวลเพื่อแก้ไขการขึ้นต่อกันของบางแพ็กเกจ

ฉันยังคงมองหาวิธีการอัตโนมัติที่มีประสิทธิภาพ


คุณเคยลอง--nodeps( apt-get) หรือ--ignore-dependsด้วยdpkg?
Mike Koch

คำตอบ:


27

ฉันเข้าใจประเด็นของ bjanssen แต่ดูเหมือนว่าไร้สาระสำหรับผู้จัดการแพคเกจที่อนุญาตให้--force-dependsติดตั้งแพคเกจเดียว แต่ไม่อนุญาตให้บังคับขึ้นอยู่กับตลอดไปและหยุดเตือนฉันเกี่ยวกับการพึ่งพานี้

ฉันมีปัญหาคล้ายกันกับแพคเกจซึ่งขึ้นอยู่กับเวอร์ชัน libcairo สูงกว่าที่มีอยู่ใน Debian เล็กน้อย สำหรับวัตถุประสงค์ของฉันมันยังคงทำงานได้ดี ฉันยินดีที่จะใช้ต่อไปจนกว่าการอัปเดต libcairo จะปรากฏขึ้นใน apt ฉันไม่ต้องการรวบรวมจากแหล่งที่มาหรือสร้างแพ็คเกจของตัวเอง

วิธีแก้ปัญหาที่ฉันพบ:

  • แก้ไข/var/lib/dpkg/status,
  • ค้นหาแพคเกจที่มีการอ้างอิงที่ใช้งานไม่ได้
  • แก้ไขDepends:บรรทัดเพื่อหยุดการบรรจุหีบห่อ

ฉันคิดว่ามันจะถูกเขียนทับในครั้งต่อไปที่มีการอัพเดทแพ็คเกจ แต่นั่นคือสิ่งที่ฉันต้องการ


2
นี่คือสิ่งที่สมบูรณ์แบบสิ่งที่ฉันต้องการเพื่อแก้ปัญหาการพึ่งพา PPA ไม่ถูกต้องเป็นการชั่วคราว!
Cas

2

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

วิธีที่ถูกต้องในการแก้ไขปัญหาของคุณคือการสร้างแพ็คเกจของคุณเองด้วยการอ้างอิงที่เหมาะกับคุณ มีวิธีการอย่างเป็นทางการ (เกี่ยวข้องค่อนข้าง: http://www.debian.org/doc/manuals/maint-guide/index.en.html ) และวิธีที่รวดเร็วและสกปรกในการใช้apt-buildหรือสำหรับแพ็คเกจที่ไม่ได้อยู่ในแหล่งแจกจ่ายcheckinstall. แพคเกจการผลิตทั้งหมดที่ฉลาดได้รับจะติดตั้งอย่างมีความสุข

ในหมายเหตุสุดท้ายคุณอาจถามภูมิปัญญาของผู้ดูแล esl-erlang เพื่อรวมการพึ่งพาบางอย่าง แต่คุณไม่สามารถติติงตัวจัดการแพคเกจสำหรับพฤติกรรมที่ต้องการได้ หากคุณคิดว่าการพึ่งพาเหล่านี้ผิดคุณควรยื่นข้อบกพร่องด้วยแพ็คเกจ


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

นี่เป็นสถานการณ์ที่อยากรู้อยากเห็น ฉันเดาว่าคุณติดตั้งแพคเกจจากพื้นที่เก็บข้อมูลที่ไม่ใช่การกระจาย? ในกรณีเช่นนี้ให้ดูที่equivs"การห้ามไม่ให้พูด" ฉลาด - รับโดยไม่ทำลายมัน
bjanssen

มันคงเป็นอย่างนั้น แต่อันที่จริงมันไม่ใช่ ... ฉันเพิ่งติดตั้งแพ็คเกจเก่าจาก distro เดียวกันดังนั้นในแง่ Ubuntu ฉันใช้เวลา 15.x แต่ฉันติดตั้ง libmng1 จาก 12.04 LTS
ไวยากรณ์

0

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

โดยทั่วไปหากคุณใช้พรอกซีคุณ/etc/apt/apt.confก็จะมีลักษณะดังนี้:

Acquire::ftp::proxy "ftp://<user>:<password>@<ip>:<port>/";
Acquire::http::proxy "http://<user>:<password>@<ip>:<port>/";
Acquire::https::proxy "https://<user>:<password>@<ip>:<port>/";
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.