วิธีการติดตั้งไฟล์ deb โดย dpkg -i หรือ apt?


601

ฉันมีแพคเกจ deb สำหรับการติดตั้ง

ฉันจะติดตั้งโดยdpkg -i my.debหรือโดยฉลาด?

ทั้งสองจะจัดการปัญหาการพึ่งพาซอฟต์แวร์ได้ดีหรือไม่

ถ้าเป็น apt ฉันจะติดตั้งจาก deb โดย apt ได้อย่างไร


คุณสามารถใช้aptitudeซึ่งลบแพคเกจที่ไม่จำเป็นเช่นกัน
Ramesh

2
dpkgผมขอแนะนำที่จะไม่ใช้โดยตรง ในกรณีที่เดียว deb ไปกับgdebiและในกรณีของบส์หลายไปสำหรับพื้นที่เก็บข้อมูลท้องถิ่น APT
Pandya

5
ทำไม ......... @Pandya
ทิม

2
@Tim เพราะdpkgไม่สามารถแก้ปัญหาการพึ่งพาได้
Pandya

1
@Tim gdebi ระบุการพึ่งพาที่ขาดหายไปสามารถดาวน์โหลดและติดตั้ง (โดยใช้ apt) สามารถติดตั้งและกำหนดค่า (โดยใช้ dpkg)
Pandya

คำตอบ:


771

เมื่อคุณใช้ในการติดตั้งแพคเกจภายใต้ประทุนจะใช้apt dpkgเมื่อคุณติดตั้งแพ็กเกจโดยใช้ apt มันจะสร้างรายการของการขึ้นต่อกันทั้งหมดและดาวน์โหลดจากที่เก็บ

เมื่อการดาวน์โหลดเสร็จสิ้นจะมีการเรียกdpkgให้ติดตั้งไฟล์เหล่านั้นทั้งหมดเพื่อสร้างความพึงพอใจต่อการอ้างอิงทั้งหมด

ดังนั้นหากคุณมี.debไฟล์:

  • คุณสามารถติดตั้งโดยใช้:

    sudo dpkg -i /path/to/deb/file
    sudo apt-get install -f
    
  • คุณสามารถติดตั้งโดยใช้sudo apt install ./name.deb(หรือsudo apt install /path/to/package/name.deb)

    ด้วยapt-getเวอร์ชันเก่าคุณต้องย้ายไฟล์ deb ไปยัง/var/cache/apt/archives/ไดเรกทอรีก่อน สำหรับทั้งคู่หลังจากเรียกใช้งานคำสั่งนี้คำสั่งจะดาวน์โหลดการอ้างอิงโดยอัตโนมัติ

  • ติดตั้งgdebiและเปิดไฟล์. deb ของคุณโดยใช้ ( คลิกขวา -> เปิดด้วย ) มันจะติดตั้งแพคเกจ. deb ของคุณด้วยการอ้างอิงทั้งหมด

    ( หมายเหตุ : APT เก็บรักษาดัชนีแพ็กเกจซึ่งเป็นฐานข้อมูลของแพ็กเกจที่มีอยู่ใน repo ที่กำหนดไว้ใน/etc/apt/sources.listไฟล์และใน/etc/apt/sources.list.dไดเรกทอรีวิธีการเหล่านี้ทั้งหมดจะล้มเหลวในการตอบสนองการพึ่งพาซอฟต์แวร์หากการพึ่งพาที่ deb จำเป็นต้องใช้ .)


ทำไมต้องใช้งานsudo apt-get install -fหลังจากsudo dpkg -i /path/to/deb/file (กล่าวถึงในวิธีแรก)

จากman apt-get:

 -f, --fix-broken
           Fix; attempt to correct a system with broken dependencies in place.

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

sudo apt-get install -f คำสั่งพยายามแก้ไขแพ็กเกจที่ใช้งานไม่ได้นี้โดยติดตั้งการพึ่งพาที่ขาดหายไป


2
@Tim, apt-get ถูกออกแบบมาเพื่อติดตั้งแพ็คเกจจากที่เก็บ จะรักษารายการแพคเกจเช่นเดียวกับที่อยู่ที่เก็บของตน ดังนั้นเพียงแค่ย้ายไฟล์. dev ซึ่งไม่ปรากฏในรายการแพ็คเกจ apt ในไดเร็กทอรี / var / cache / apt / archives จะไม่ทำงาน เพราะเมื่อใดก็ตามที่คุณพยายามติดตั้งแพ็กเกจนี้โดยใช้ apt-get มันจะทำการค้นหาที่เก็บซึ่งไม่มีอยู่ สำหรับเรื่องนี้คุณต้องสร้างพื้นที่เก็บข้อมูลท้องถิ่นซึ่งฉันคิดว่าไม่มีประโยชน์
g_p

1
@g_p ขอบคุณ! ฉันสับสนเล็กน้อยในคำตอบของคุณด้านบน คุณเขียน: "(มันจะทำงานถ้าแพ็คเกจ. deb มีอยู่ในรายการแพ็คเกจ apt)" - ฉันไม่เข้าใจสิ่งที่มีความหมายที่นี่ เราจะมั่นใจได้อย่างไรว่าแพ็คเกจ. deb นั้นมีอยู่ในรายการแพ็คเกจ apt?
BKSpurgeon

1
@BSpurgeon ฉันได้เพิ่มข้อมูลบิตในคำตอบของฉัน apt-cache search <package name>เพื่อหาออกถ้าแพคเกจที่มีอยู่ในดัชนีหรือไม่ทำงาน นอกจากนี้คุณยังสามารถใช้apt-cache policy <package name>ซึ่งจะให้ข้อมูลเพิ่มเติมเช่นกัน
g_p

1
วิธีการเหล่านี้จะยังคงทำการตรวจสอบลายเซ็นที่มักจะทำโดยฉลาด หรือเป็นไปได้ไหมที่ไฟล์. deb จะถูกติดตั้งด้วยวิธีนี้?
Boann

8
โมเดิร์น apt-get สามารถ uset apt-get install /path/to/package/name.debการติดตั้งแพคเกจเพียงกับ มันจะเรียบร้อยถ้าผู้เขียนคำตอบนี้ตัดสินใจรวมเข้าด้วยกัน ถ้าไม่ฉันจะไปเพิ่มคำตอบที่บางครั้งเมื่อฉันมีตัวแทนเพียงพอที่นี่
Sam Hartman

91

ติดตั้งของไฟล์ที่มีfoo.deb dpkg -i foo.debหากมีข้อผิดพลาดบางอย่างที่มีการขึ้นต่อกันที่ไม่ได้รับการแก้ไขให้รันapt-get install -fหลังจากนั้น


ฉันUnable to locate packageลองด้วยวิธีนี้แล้วก็งง ฉันใช้ใน Windows เพียงแค่ชื่อแพ็คเกจหลังจากเปลี่ยนไปใช้โฟลเดอร์เก็บถาวร ควรเป็น./<file name>Unix หากอยู่ในโฟลเดอร์ปัจจุบันหรือเส้นทางแบบเต็ม นั่นคือถ้าไม่ได้อยู่ในโฟลเดอร์ในปัจจุบันdeb PATH
Alexei Martianov

60

นี่คือวิธีที่ดีที่สุดในการติดตั้ง.debไฟล์บน Ubuntu ในบรรทัดคำสั่ง:

sudo gdebi skype.deb

หากคุณไม่ได้มีการติดตั้งไว้แล้วติดตั้งโดยใช้gdebisudo apt install gdebi-core

ทำไมต้อง gdebi

gdebiจะค้นหาการอ้างอิงทั้งหมดของ.debไฟล์และจะติดตั้งก่อนที่จะพยายามติดตั้ง.debไฟล์ ฉันพบว่าสิ่งนี้ดีกว่าsudo dpkg -i skype.deb && sudo apt install -fมาก หลังมีความกระตือรือร้นมากเกินไปที่จะลบการอ้างอิงในบางสถานการณ์ ตัวอย่างเช่นเมื่อฉันพยายามติดตั้ง Skype ก็พยายามลบแพคเกจ 96 (!) รวมถึงแพ็คเกจ like compizและunity! gdebiให้ข้อความแสดงข้อผิดพลาดที่ชัดเจนมากขึ้น:

 $ sudo gdebi skype.deb
 Cannot install 'libqtgui:i386'

(นี่คือวิธีแก้ปัญหาเฉพาะนั้นโดยวิธี)


ทำงานได้ดีขอบคุณ! btw เป็นไปได้ไหมว่าความพยายามในการลบนั้นเกี่ยวกับแพ็คเกจชั่วคราวหรือชั่วคราว? หรือคุณคิดว่ามันจะทำลายระบบจริงเหรอ?
กุมภ์กุมภ์

เพื่อนฉันพบปัญหาในการแก้ปัญหาของคุณ ฉันพยายามติดตั้ง Rstudio พบรุ่นเก่าของฉันโดยอัตโนมัติ ในขณะที่ใช้โซลูชันโดย @g_p ฉันสามารถติดตั้ง Rstudio เท่านั้น
Dr_Hope

39

คุณสามารถติดตั้งแพ็คเกจ. deb แบบโลคัลโดย:

sudo apt install ./foo.deb

ตรวจสอบให้แน่ใจว่าได้ระบุโลคัลญาติหรือพา ธ สัมบูรณ์ ( ./หากอยู่ใน dir ปัจจุบัน) ไม่เช่นนั้นจะค้นหาfoo.debรีโมตรีโมตและล้มเหลว


2
ควรทำเครื่องหมายเป็นคำตอบที่ถูกต้อง
Rael Gugelmin Cunha

@RaelGugelminCunha ไม่ถูกต้อง 100% sudo- ฉลาดติดตั้ง libstdc ++ 6_8-20180414-1ubuntu2_amd64.deb ฉลาด: ข้อผิดพลาดขณะโหลดห้องสมุดสาธารณะ: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: หัวเอลฟ์ที่ไม่ถูกต้อง
mvladk

2
@mvladk โปรดใส่ใจกับไวยากรณ์: คุณหายไป./ก่อนdebไฟล์
Rael Gugelmin Cunha

คำตอบที่ดีที่สุด / ง่ายที่สุดอย่างแน่นอน
gerardw

15

ตรวจสอบการอ้างอิงที่มีdpkg -I my.debและการอ้างอิงก่อนapt-get installdpkg -i my.deb

อาจเป็นคุณสามารถคัดลอกmy.debใน/var/cache/apt/archivesและติดตั้งโดยตรงกับapt-getแต่ฉันไม่เคยลอง ใช้งานไม่ได้apt-getและdpkgกำลังมองหาแพ็คเกจที่อยู่ในรายการเอกสารสำคัญ


ขอบคุณ ใน sentenct แรกของคุณ, คุณหมายถึงapt-get install my.debโดยapt-get install? มันจะติดตั้งจากไฟล์ deb หรือไม่? ทำไมเราต้องการdpkg -i my.debหลังจากนั้น
ทิม

ฉันมักจะติดตั้งในท้องถิ่น.debที่มีต่อdpkg -iความเข้าใจของฉันที่aptไม่ได้มีตัวเลือกในการติดตั้งพวกเขานอกเหนือไดเรกทอรีใน/var/cache/...ที่จะมีการดาวน์โหลด (ผมอาจจะผิด)
อเล็กซ์

ดูเหมือนว่าapt-get install ./my.debจะทำอะไรบางอย่างเพราะมันออกมาหลายสิ่งหลายอย่าง มันทำอะไร?
ทิม

มันทำงานมากเกินไป :-) ไม่ทำงานให้ดู @Igor_Dvoretskyi คำตอบนั้นสมบูรณ์แบบฉันลืมไปแล้ว-f
Alex

5

คำตอบที่ง่ายที่สุดที่จะใช้ dpkg dpkg -i packagename.debโดยการเรียกใช้ dpkg -r packagename.debจากนั้นคุณสามารถถอนการติดตั้งโดยการเรียกใช้
apt-getมีการติดตั้งระดับที่สูงขึ้นตามออกของ dpkg apt-get install packagename.debและเป็นเช่นคุณสามารถ
มันจะเป็นประโยชน์สำหรับการเพิ่มไปยังไดเรกทอรี apt-get archives ของคุณ ( /var/cache/apt/archives) เพื่อให้คุณสามารถอ้างอิงเป็นแพ็กเกจที่มีการอ้างอิงและไม่ใช่ไฟล์เก็บถาวร. deb แบบสแตนด์อโลน นอกจากนี้โดยการเพิ่มการได้รับฉลาดไดเรกทอรีที่เก็บถาวรของคุณคุณมีโอกาสที่จะใช้อ้างอิงกับ
apt-get install packagenameสิ่งนี้จะช่วยให้คุณติดตั้งได้ด้วยการขึ้นต่อกันใด ๆ ที่เพิ่มเข้ามาด้วยตนเองแทนการใช้ระบบเก็บถาวรแบบสแตนด์อโลนของ dpkg


5

โมเดิร์น apt-get apt-get install /path/to/package/name.debสามารถนำมาใช้ในการติดตั้งแพคเกจเพียงกับ

(ควรทำเพื่อแก้ไขคำตอบยอดนิยม แต่ถูกปฏิเสธ - ดูhttps://unix.stackexchange.com/posts/159114/edit )


สิ่งนี้ไม่ได้ทำงานด้วยapt 1.0.9.8.4 for amd64 compiled on Dec 11 2016 09:48:19
Bruno Bronosky

-3

มันง่ายมากถ้าฉันต้องการติดตั้ง Chrome

ติดตั้งไฟล์ Chrome ของคุณเป็น:

dpkg -i googlechrome.deb.

บางครั้งมีโอกาสที่จะได้รับข้อผิดพลาดในการพึ่งพาเช่น:

dpkg: dependency problems prevent configuration of google-chrome-stable:
google-chrome-stable depends on libappindicator1; however:
Package libappindicator1 is not installed.

ดังนั้นเพื่อแก้ไขปัญหาข้างต้นคุณต้องเพิ่มการอ้างอิง ให้คำสั่งต่อไปนี้:

apt-get install -f

หลังจากให้คำสั่งข้างต้นการอ้างอิงจะถูกเพิ่มไปยังเครื่องของคุณและ.debไฟล์Debian package ( ) ของคุณจะถูกติดตั้ง

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