วิธีสร้าง repository apt อย่างรวดเร็วสำหรับแพ็กเกจแบบสุ่มโดยใช้การแจกแจงแบบอิงลินุกซ์ Debian?


20

dpkg -i <packagename>บางสถานการณ์เรียกร้องให้มีการติดตั้งแพคเกจในท้องถิ่นด้วยตนเองโดยใช้ บางครั้งอาจมีประโยชน์เพิ่มเติมในการใช้ประโยชน์จากการทำงานaptกับแพ็คเกจนั้นคำถามคือ

คุณจะสร้างที่เก็บในเครื่องสำหรับแพ็คเกจสุ่มโดยใช้การกระจาย Linux บนเดเบียนเช่น Xubuntu 13.04 / Ubuntu ได้อย่างไร


เพียงแค่ FYI สิ่งที่ปกติเป็นไปตามdpkg -i <packagename>ที่มีapt-get -f installการดึงในแพคเกจที่จำเป็น นอกจากนี้สิ่งปกติในการสร้าง repos apt สำหรับ Debian คือ reprepro
Faheem Mitha

ฉันพบว่า reprepro มีประโยชน์
Gilles 'SO- หยุดความชั่วร้าย'

ขอบคุณสำหรับความคิดเห็นของคุณ @Faheem Mitha: คุณสามารถโปรดสั้น ๆ เกี่ยวกับเหตุผลที่ขยายการทำงานaptกับ--fix-brokenจะต้องหลังจากติดตั้งแพคเกจในท้องถิ่นที่มีdpkg -i? dpkg จะไม่สนใจเรื่องนี้หรือไม่ ฉันอ่านมันอาจจำเป็นต้องใช้ครั้งแรกที่เรียกใช้ apt? @ FM และกิลส์: เกี่ยวกับreprepro ดูเหมือนว่ามีประโยชน์ถ้าฉันสามารถทำให้มันใช้งานได้ (ไม่แน่ใจเกี่ยวกับ dir struct เนื้อหาของ 3 ไฟล์หรือ params ตอนรันไทม์) จะลองอีกครั้งและอัปเดตหรือโพสต์คำถามเต็ม

1
@ illuminÉ: dpkgไม่แก้ปัญหาการพึ่งพา แต่aptทำ dpkgจะเตือนการพึ่งพาที่แตกหัก แต่อยู่ในระดับต่ำดังนั้นจะไม่พยายามแก้ไข dpkg -i *.debตามapt-get -f installเป็นขั้นตอนมาตรฐาน มีข้อผิดพลาดสิ่งที่อยากได้ที่จะaptจัดการกับกรณีของการติดตั้งแพคเกจท้องถิ่นและมีแพทช์ฉันคิดว่า แต่มันยังไม่ได้ดำเนินการ ดูที่apt-get install สามารถติดตั้งไฟล์แพ็กเกจโลคัลได้เช่นกันในตอนแรกยื่นในปี 1999
Faheem Mitha

@ illuminÉการแสดงความสนใจในคุณลักษณะนี้จะไม่เจ็บ ฉันคิดว่ายิ่งคนที่ (สุภาพ) แสดงความสนใจมีโอกาสมากขึ้นที่มันจะถูกนำไปใช้ โปรดทราบว่า gdebi เป็นอีกทางเลือกหนึ่งดังที่ระบุไว้ในรายงานข้อผิดพลาด นั่นเป็นส่วนหนึ่งของเหตุผลที่ไม่ได้นำมาใช้ฉันคิดว่า แม้ว่าการมีฟังก์ชั่นหลักของ apt นั้นจะดีกว่าการมีฟังก์ชั่นนี้เป็นส่วนหนึ่งของแพ็คเกจอื่น
Faheem Mitha

คำตอบ:


29

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

ก่อนอื่นให้สร้างไดเรกทอรีเพื่อโฮสต์แพ็คเกจ:

mkdir <packagedir>

จากนั้นย้ายไฟล์แพ็คเกจ. deb ของคุณไปที่นั่น ดำเนินการคำสั่งนี้จากไดเรกทอรีด้านบนที่เราเพิ่งสร้างขึ้น (ให้แน่ใจว่าการอนุญาตให้สิ่งนี้!):

dpkg-scanpackages packagedir | gzip > packagedir/Packages.gz

ตอนนี้สร้างไฟล์ที่มีนามสกุล.listใน/etc/apt/sources.list.d/กับเนื้อหา:

deb [trusted=yes] file:///path_to_dir_above_packagedir packagedir/

และอัพเดตฐานข้อมูล apt:

apt-get update

ณ จุดนี้แพคเกจในพื้นที่เก็บข้อมูลในท้องถิ่นของเราที่สามารถติดตั้งเช่นแพคเกจอื่น ๆ apt-get install <packagename>โดยใช้ เมื่อแพ็กเกจใหม่ถูกเพิ่มในที่เก็บโลคัลdpkg-scanpackagesคำสั่งที่กำหนดต้องถูกเรียกใช้อีกครั้งเพื่ออัพเดตไฟล์Packages.gzและaptต้องถูกอัพเดตก่อนที่แพ็กเกจใหม่จะพร้อมใช้งาน เราหวังว่านี้จะมีประโยชน์สำหรับการทดสอบวัตถุประสงค์


6
ด้วย apt ใหม่ 1.1 สิ่งหนึ่งที่ต้องการ[trusted=yes]ระหว่างdebและfile:///URI (ดูที่sources.list(5)หน้า man) apt-get updateไม่เช่นนั้นจะล้มเหลวเนื่องจากไม่มีลายเซ็น
vinc17

2

หากคุณต้องการสร้าง repo ด้วยโครงสร้างแบบเต็มที่คุณต้องการสำหรับเครื่องมือเช่น debootstrap วิธีที่ง่ายที่สุดที่ฉันพบคือ:

  1. สร้างไดเรกทอรีที่เก็บ

    # mkdir -p /opt/debian
    
  2. สร้างไดเรกทอรีย่อย conf

    # mkdir /opt/debian/conf
    
  3. สร้างไฟล์ / opt / debian / conf / distributions ด้วยเนื้อหาเช่นนี้ (ปรับให้เหมาะสมกับการแจกจ่ายที่คุณกำลังใช้):

    Label: Local APT repository
    Codename: jessie
    Architectures: amd64
    Components: main
    Description: Local APT repository for debootstrap
    
  4. นำเข้าแพคเกจของคุณด้วย reprepro

    # reprepro -b /opt/debian includedeb jessie /path/to/package.db
    
  5. นำเข้าแพ็คเกจจำนวนมากด้วย shell for-loop เช่นทุกสิ่งจากแคช APT ของคุณ:

    # cd /var/cache/apt/archives
    # for DEB in *.deb; do reprepro -b /opt/debian includedeb jessie $DEB; done
    

สิ่งนี้จะสร้างที่เก็บถาวรที่ไม่ได้ลงชื่อ มันสามารถใช้กับ debootstrap ด้วยตัวเลือก --no-check-gpg

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