apt-get ทำงานอย่างไร?


34

ตกลงฉันเข้าใจวิธีใช้apt-get {install|upgrade|remove} mypackagesติดตั้งอัปเกรดหรือลบไบนารีรวมถึงไฟล์ข้อมูลการกำหนดค่าและการอ้างอิง (ที่จริงแล้วremoveจะลบไบนารีเท่านั้นยกเว้นมีการระบุค่าสถานะเพิ่มเติม)

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

นอกจากวิธีการทำงานโดยทั่วไปแล้วฉันมีคำถามเฉพาะดังต่อไปนี้

  1. ไคลเอนต์ที่เข้าถึง apt repository คอยติดตามไฟล์ได้อย่างไร
  2. พื้นที่เก็บข้อมูลจะต้องเป็นโฮสต์ในระบบปฏิบัติการเดียวกัน (เช่นพื้นที่เก็บข้อมูล apt สามารถโฮสต์บน redhat)?
  3. มีการระบุตำแหน่งในการติดตั้งไฟล์อย่างไร .debไฟล์นี้ถูกระบุด้วยหรือไม่?
  4. เครื่องระยะไกลเข้าถึงที่เก็บได้อย่างไร มันเป็นเพียง ftp (s) หรือ http (s)?
  5. เครื่องที่โฮสต์พื้นที่เก็บข้อมูลใช้ซอฟต์แวร์พิเศษ (เช่น gitlab สำหรับที่เก็บ git) หรือเป็นเพียงระบบไฟล์ที่มีโครงสร้างหรือไม่?

คำตอบ:


47

คุณต้องดูที่https://wiki.debian.org/Packaging - บทแนะนำบรรจุภัณฑ์จะช่วยคุณได้มากรวมถึงส่วนต่างๆของคู่มือผู้ดูแลใหม่

ตามคำถามของคุณตามลำดับ:

  1. ที่เก็บมีไฟล์ "list" เช่น. http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz ดาวน์โหลดไฟล์รายการเหล่านี้และเก็บไว้ในapt-get update /var/lib/apt/listsไฟล์รายการจะแสดงรายการแพ็คเกจทั้งหมดรวมถึงเมตาดาต้ามัดและ URL สัมพัทธ์เพื่อค้นหา. deb ที่ (เป็นไฟล์ข้อความธรรมดาที่มนุษย์อ่านได้ดังนั้นคุณสามารถดูได้)

  2. ระบบปฏิบัติการไม่สำคัญ คุณสามารถโฮสต์ไว้บน Windows ได้หากต้องการ (คุณอาจมีปัญหากับชื่อไฟล์ที่ Windows ไม่ชอบ) (ดู # 4 และ # 5)

  3. ใช่มันอยู่ในไฟล์ deb ไฟล์ deb นั้นเป็นไฟล์เก็บถาวร (โดยใช้ar) ข้างในมีไฟล์ tar บ้าง หนึ่งในนั้นคือ (เป็นหลัก) /แยกไป

  4. มันเป็นเพียง HTTP (หรือ HTTPS หรือ FTP หรือ ... apt-get รองรับโปรโตคอลจำนวนมาก) ไม่มีอะไรพิเศษ แต่ โปรดทราบว่ามีไฟล์ Release, เซ็นชื่อด้วย gpg ซึ่งรับประกันความถูกต้องแม้ไม่มี HTTPS เดเบียนส่วนใหญ่ใช้ HTTP ไม่ใช่ HTTP (ไม่กี่สนับสนุน HTTPS เช่นกันสำหรับการรักษาความลับ)

  5. มันเป็นเพียงระบบไฟล์ที่มีโครงสร้าง

ภาพรวมอย่างรวดเร็วและระดับสูงของวิธีการที่ apt-get โต้ตอบกับแหล่งแพ็กเกจ

  1. คุณกำหนดค่าแหล่งที่จะดูในไฟล์ sources.list ของคุณ พิจารณาบรรทัดที่ชอบ:

    deb http://http.us.debian.org/debian/ stretch main
    

    debบอกว่านี่เป็นแหล่งสำหรับ gettings .deb (binary) ไฟล์; จากนั้นจะมีคำนำหน้า URL, ชุด / รีลีส ("ยืด") และส่วนประกอบ ("หลัก")

  2. apt-get มีรายชื่อของสถาปัตยกรรมมันได้มาจาก dpkg สมมติว่าเป็นdpkg --print-architecture amd64apt-get สามารถสร้าง URL ที่จะดาวน์โหลดได้จริงโดยการรวมคำนำหน้า URL, คำว่า "dists", ชุดโปรแกรม, ส่วนประกอบและสถาปัตยกรรม จากนั้นจะทำการแก้ไขชื่อไฟล์คงที่บางตัวเช่น "Packages.xz" ที่ให้ URL ข้างต้น (ใน # 1) มีไฟล์เพิ่มเติมอีกสองสามไฟล์ที่มีชื่อ / พา ธ ที่กำหนดเช่นไฟล์ Release http://http.us.debian.org/debian/dists/stretch/Releaseและลายเซ็นของไฟล์นั้น (เหมือนกันโดยมี. gpg ต่อท้าย) เป็นไฟล์ข้อความล้วน (อาจบีบอัด) ไฟล์ Release ประกอบด้วย checksums สำหรับไฟล์อื่น ๆ apt-get กำลังจะดาวน์โหลดเช่น Packages.xz

  3. ไฟล์ Packages.xz แสดงรายการแพ็กเกจทั้งหมดในชุด / ชื่อรหัส / สถาปัตยกรรม นอกจากนี้ยังให้เส้นทางที่ไฟล์นั้นตั้งอยู่ pool/main/0/0ad/0ad_0.0.21-2_amd64.debเช่น

  4. เมื่อคุณขอให้ apt-get เพื่อดาวน์โหลดแพ็คเกจมันจะใช้ตำแหน่งนั้น + URL พื้นฐานเพื่อดาวน์โหลดแพคเกจดังนั้นแพ็คเกจนั้นอยู่ที่http://http.us.debian.org/debian/pool/main/0/0ad /0ad_0.0.21-2_amd64.deb

  5. ไดเรกทอรีที่น่าสนใจอื่น ๆแทนsource binary-amd64ที่ใช้สำหรับdeb-srcรายการของคุณ มันมีข้อมูลเกี่ยวกับแพคเกจแหล่งที่มา (และค่อนข้างคล้ายกัน)

  6. มีบางสิ่งอื่น ๆ (ทั้งหมดเป็นตัวเลือกฉันเชื่อว่า) ซึ่งสามารถเป็นส่วนหนึ่งของที่เก็บ (เช่นมีให้ผ่าน HTTP): มีความแตกต่างระหว่างไฟล์ Packages.xz เวอร์ชันต่างๆ การแปลคำอธิบายแพ็กเกจรายการที่สมบูรณ์ของไฟล์ที่ติดตั้งได้ทุกไฟล์และแพคเกจใดเป็นของ (Contents-amd64.gz ใช้โดยเช่นไฟล์ apt-apt-apt-get ไม่ใช่ apt-get) เป็นต้นสิ่งเหล่านี้ไม่เกี่ยวข้องกับคุณ แต่คุณสามารถเห็นพวกเขาทั้งหมดได้โดยไปที่http://http.us.debian.org/debian/dists/stretch/ ; ส่วนใหญ่เป็นไฟล์ข้อความธรรมดา

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


เอาชนะฉันไปได้ ;-) unix.stackexchange.com/q/285635/86440ครอบคลุมด้านความสมบูรณ์ของสิ่งต่าง ๆ (จุดที่ 4) การสนับสนุน FTP ที่ด้านมิรเรอร์ถูกยกเลิกใช้งานเมื่อเร็ว ๆ นี้ IIRC
สตีเฟ่น Kitt

เกี่ยวกับ # 2 debian.org/doc/manuals/distribute-deb/ …ระบุต่างกัน ขอบคุณ
user1032531

เกี่ยวกับ # 5 จุดประสงค์ของwiki.debian.org/DebianRepository/ คืออะไร
1032531

1
@ user1032531 # 2 การสร้างแพ็คเกจทำได้ดีที่สุดบน Debian แต่เว็บเซิร์ฟเวอร์ของคุณสามารถเป็นอะไรก็ได้ (โดยทั่วไปคุณสร้างแพคเกจบนโฮสต์สร้างของคุณอาจเป็นได้ทั้งโครงสร้างที่เก็บข้อมูลทั้งหมดจากนั้นอัปโหลดไปยังเว็บเซิร์ฟเวอร์) # 5 เครื่องมือเหล่านั้นช่วยให้คุณสร้างระบบไฟล์ที่มีโครงสร้างรวมถึงไฟล์รายการทั้งหมดไฟล์รีลีสที่ลงนามแล้วและอื่น ๆ (ซึ่งอาจจะง่ายที่สุดในการรันบน Debian)
Derobert

2
@FaheemMitha แพคเกจ (จากการบีบอัดบางส่วน apt ที่ทันสมัยชอบ. xz) จะถูกดาวน์โหลดอย่างแน่นอน/var/lib/apt/lists/จบลงด้วย เนื้อหาถูกดาวน์โหลดโดย apt-file และ auto-apt
Derobert
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.