การติดตั้ง apt-get ทำอะไรภายใต้ประทุน?


60

อะไรapt-get install ...คำสั่งทำอย่างไร

เมื่อฉันป้อนapt-get install ...คำสั่งมีข้อความปรากฏบนหน้าจอ แต่มีข้อมูลไม่เพียงพอสำหรับฉัน ฉันต้องการทราบว่ามีการสร้าง / แก้ไขไฟล์ใดบ้างบริการใด ๆ ที่เริ่มต้นและกิจกรรมอื่น ๆ ...

มี.shไฟล์ใดapt-get install ...บ้างที่เรียกใช้เมื่อเรียกใช้หรือไม่ ถ้าเป็นเช่นนั้นฉันจะดูเนื้อหาของshไฟล์นั้นได้อย่างไร?

เหตุผลสำหรับคำถามนี้คือเมื่อเร็ว ๆ นี้ผมพยายามที่จะติดตั้ง tomcat7 apt-get install tomcat7กับ ทุกอย่างทำงานได้ดีจนกระทั่งฉันติดตั้งtomcat7-admin(เว็บแอปพลิเคชันผู้จัดการ) เซิร์ฟเวอร์ไม่ตอบสนองต่อคำขอใด ๆ ฉันลองมาหลายครั้งแล้วและมันก็เกิดขึ้นเสมอ


ดูเพิ่มเติมได้ที่: askubuntu.com/questions/110988/…
lesmana

นอกจากนี้โปรดไปที่askubuntu.com/questions/481241/…
Pandya

เยี่ยมชมwiki.debian.org/Aptสำหรับรายละเอียดเพิ่มเติม
Pandya

2
จาก 14.04, จะถูกแทนที่ด้วยapt-get aptทดแทนยังไม่เสร็จสมบูรณ์ แต่การทำงานสำหรับinstall, upgradeและdist-upgradeอื่น ๆ ในกลุ่ม
Paddy Landau

@PaddyLandau เป็นโปรแกรมทดแทนที่เหมาะสมหรือเป็นโปรแกรมเสริม / wrapper หรือไม่?
muru

คำตอบ:


49

ส่วนใหญ่apt-getทำสิ่งต่อไปนี้:

  • ตรวจสอบการพึ่งพา (และขอให้ติดตั้ง)
  • ดาวน์โหลดแพคเกจตรวจสอบแล้วบอกdpkgให้ติดตั้ง

dpkg จะ:

  • แตกแพ็กเกจและคัดลอกเนื้อหาไปยังตำแหน่งที่ถูกต้องและตรวจสอบไฟล์ที่มีอยู่แล้วและการแก้ไขไฟล์
  • วิ่งแพคเกจสคริปต์ดูแล : preinst, postinst, (และprerm, postrmก่อนที่เหล่านี้ถ้าเป็นแพคเกจจะถูกปรับ)
  • ดำเนินการบางอย่างตามทริกเกอร์

/var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst}คุณอาจจะสนใจในสคริปต์ดูแลซึ่งมักจะตั้งอยู่ที่ เหล่านี้มักจะเชลล์สคริปต์ แต่ไม่มีกฎยาก ตัวอย่างเช่น:

$ ls /var/lib/dpkg/info/xml-core.{pre,post}{rm,inst}
/var/lib/dpkg/info/xml-core.postinst
/var/lib/dpkg/info/xml-core.postrm
/var/lib/dpkg/info/xml-core.preinst
/var/lib/dpkg/info/xml-core.prerm

30

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

อีกต่อไป:

รอบคัดเลือกโซน:

จากmanpage :

แพ็คเกจทั้งหมดที่แพ็คเกจที่ระบุไว้สำหรับการติดตั้งจะถูกเรียกคืนและติดตั้งด้วย

แพ็คเกจเหล่านั้นถูกเก็บไว้ในที่เก็บในเครือข่าย ดังนั้นapt-getดาวน์โหลดสิ่งที่จำเป็นทั้งหมดลงในไดเรกทอรีชั่วคราว ( /var/cache/apt/archives/) พวกเขาจะถูกดาวน์โหลดจากเว็บหรือเซิร์ฟเวอร์ ftp พวกเขามีการระบุไว้ในที่เรียกว่าsources.list; รายการของที่เก็บ จากนั้นพวกเขาได้รับการติดตั้งทีละขั้นตอน

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

แต่ละแพ็คเกจผ่านขั้นตอนการติดตั้ง

การติดตั้งแพคเกจ:

ในลินุกซ์ Debian-based เช่น Ubuntu, แพคเกจเหล่านี้จะอยู่ในรูปแบบที่กำหนดมาตรฐานที่เรียกว่า: Deb - Debian รูปแบบแพคเกจไบนารี

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

  • preinst: ก่อนการติดตั้งไฟล์ลงในระบบไฟล์ลำดับชั้น
  • postinst: หลังการติดตั้ง
  • prerm: ก่อนการถอนการติดตั้ง
  • postrm: หลังจากการถอนการติดตั้ง

มีภาพที่น่าสนใจแสดงขั้นตอนการติดตั้งแพ็คเกจใหม่:

การติดตั้ง

นอกจากนี้ยังมีไฟล์ควบคุมเพิ่มเติมที่สำคัญที่สุดคือ:


11

สำหรับสิ่งที่เกิดขึ้นจริงภายใต้ประทุน คุณจะต้องคว้าแหล่งข้อมูล Apt ค่อนข้างง่ายถ้าคุณเปิดใช้แหล่งเก็บข้อมูลต้นฉบับ:

apt-get source apt

คำสั่งตัวเองอาศัยอยู่ในapt-get cmdline/apt-get.ccมันเป็นความเจ็บปวดที่จะอ่าน แต่apt-getการกระทำส่วนใหญ่นั้นถูกสะกดออกมาอย่างกว้างขวาง การติดตั้ง แต่ถูกแมปผ่านฟังก์ชั่นที่อาศัยอยู่ในDoInstallapt-private/private-install.{cc,h}

คุณต้องจำไว้ว่า apt-get เป็นเพียงด้านเดียวของเหรียญ
dpkgกำลังจัดการการติดตั้งจริง แต่DoInstallไม่รู้dpkgโดยตรง apt-getเป็นผู้ไม่เชื่อเรื่องพระเจ้าผู้ดูแลแพ็คเกจอย่างแท้จริง ฟังก์ชั่นทั้งหมดจะถูกสรุปผ่านapt-pkg/package-manager.cc

ฉันแค่ดูสั้น ๆ แต่ก็ยังไม่เห็นว่าสิ่งนี้จริง ๆ แนบกับdpkgระบบ บางส่วนของสิ่งนี้ดูเหมือนจะได้รับการคำนวณโดยอัตโนมัติapt-pkg/aptconfiguration.ccแต่นี่เป็นบ่อลึก คุณสามารถใช้เวลาหลายวันในการไขปัญหานี้

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


6

มีบางคำตอบที่ยอดเยี่ยมที่นี่ซึ่งจะดีกว่าหนึ่งในระยะสั้นนี้ แต่สิ่งที่คุณอาจพิจารณาที่จะช่วยให้คุณได้รับความเข้าใจที่ดีขึ้นของการเปลี่ยนแปลงที่เกิดขึ้นโดยผู้จัดการแพคเกจเป็นหาง คุณสามารถ diff การเปลี่ยนแปลงที่เกิดขึ้นใน container โดยใช้docker diff <container>และมันจะแสดงให้คุณเห็นการเปลี่ยนแปลงทั้งหมด สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับการตรวจดูใต้กระโปรงหน้ารถเพื่อดูว่าอะไรapt-get installจะเกิดขึ้นกับระบบ ค้นหาอย่างรวดเร็วคุณจะได้รับหลาย ทรัพยากรเพื่อช่วยดำเนินการนี้


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