แพคเกจ snap จะจัดการการพึ่งพาที่ใช้ร่วมกันได้อย่างไร


30

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

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

xdg-app มีบางสิ่งที่เรียกว่า"runtime" :

แนวคิดพื้นฐานใน xdg-app คือการแยกรันไทม์ / แอปพลิเคชัน แอพทุกตัวขึ้นอยู่กับรันไทม์ซึ่งให้บริการไลบรารีหลักที่แอพใช้ โดยปกติแล้ว Runtimes จะถูกแชร์โดยแอพพลิเคชั่นหลายตัว แต่ผู้ใช้สามารถติดตั้ง Runtimes หลายตัวพร้อมกันได้

ดูเหมือนว่าในกรณีของ OpenSSL มันจะเป็นส่วนหนึ่งของรันไทม์ใน xdg-apps ดังนั้นการอัปเดตเป็น OpenSSL ควรมีผลกับ xdg-apps ทั้งหมดโดยใช้รันไทม์เดียวกัน

คำตอบ:


9

สองสถานการณ์แรกได้รับการจัดการอย่างชาญฉลาด

หนึ่งในคุณสมบัติที่น่าสนใจที่พูดถึงคือการรองรับการขจัดข้อมูลซ้ำซ้อนสำหรับเนื้อหาภายในแพ็คเกจ Snap Snaps จะหักข้อมูลซ้ำซ้อนโดยอัตโนมัติของไฟล์ทั่วไปที่แชร์ระหว่าง snaps โดยยึดตามการแฮชไฟล์ จะมีการทำซ้ำในชั้นระบบไฟล์, การทำซ้ำในการดาวน์โหลด snap (ด้วยการสนับสนุนเซิร์ฟเวอร์) และบางทีการทำซ้ำของห้องสมุดที่แมปจาก linker การทำสำเนาเป็นงานชิ้นใหญ่และอาจใช้เวลาสักครู่ในการดำเนินการอย่างเต็มที่ แต่ก็เป็นเป้าหมายที่น่าสนใจ

ที่มา: http://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-Snappy-Deduplication

สำหรับสถานการณ์ที่สามพวกเขามีบางสิ่งบางอย่างที่คล้ายคลึงกับ runtimes ที่คุณพูดถึง:

มีสามเลเยอร์ที่ประกอบเป็นเครื่องสแนปช็อต: เลเยอร์ระบบจัดทำโดย Canonical เลเยอร์ของเฟรมเวิร์กที่ขยายระบบฐานที่ผลิตโดยผู้ขายโดยร่วมมือกับ Canonical และชุดแอปพลิเคชัน snappy จัดทำโดยผู้ขายโดยตรง การอัปเดตชิ้นส่วนใด ๆ หมายถึงการใช้รูปภาพเวอร์ชันอ่านอย่างเดียวเท่านั้น การย้อนกลับเป็นเวอร์ชันก่อนหน้านั้นง่ายดาย

ที่มา: http://www.ubuntu.com/cloud/snappy

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

ฉันกำลังทดลองกับ Frameworks เพื่อขยายระบบฐาน Snappy โดยซอฟต์แวร์และบริการที่ snaps จำนวนมากต้องการ แต่ไม่ควรรวมอยู่ในสแน็ปอินใด ๆ และแต่ละอันเนื่องจากปัญหาการอัปเดตและขนาด ตัวอย่างที่ดีที่สุดที่ฉันมีสำหรับสิ่งนี้คือไบนารี openssl snaps จำนวนมากต้องการสิ่งนี้เพื่อสร้างและตรวจสอบคีย์และใบรับรอง

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

ฉันบอกกับ IRC ว่าฉันใช้แนวคิดกรอบการใช้งานในทางที่ผิด แต่ก็ยังมีปัญหาสองข้อนี้เกิดขึ้นบนโต๊ะของฉันบ่อยครั้ง

ที่มา: https://lists.ubuntu.com/archives/snappy-app-devel/2015-November/000442.html


1
เพื่อที่จะชี้แจงว่าไม่มีสิ่งเหล่านี้จริง ๆ แล้วใช่ไหม? นี่เป็นแผนและคุณอาจต้องการพูดว่า "จะได้รับการจัดการ" แทนที่จะเป็น "ได้รับการจัดการ" ในบรรทัดแรกใช่หรือไม่
muru

ในทางเทคนิคทั้งสองมีอยู่ ฉันรู้ว่ามีอย่างน้อยเฟรมเวิร์กนักเทียบท่าอยู่แล้วและมีลิงก์สำหรับไลบรารีบางส่วนที่รวมอยู่ใน ubuntu-core ที่แอพที่ติดตั้งใช้ประโยชน์อยู่แล้ว ฉันไม่รู้เลยว่าทั้งสองนั้นไกลแค่ไหน ฉันแค่อธิบายรายละเอียดทางเทคนิคของการแก้ปัญหา
เห็นถากถางดูถูก

1
วิธีการเหล่านี้ไม่ได้จัดการอย่างชาญฉลาดเพียงความคิดที่ถูกกล่าวหาว่าฉลาด ตัวอย่างเช่นยังไม่มีเอกสารอย่างเป็นทางการเกี่ยวกับวิธีการใช้งานจริงครั้งแรกเฉพาะบทความ Phoronix ที่ชี้ไปที่การพูดคุยซึ่งเป็นลิงค์ตาย btw
bviktor

3

ฉันไม่คิดว่า snaps ตรวจสอบสิ่งที่อ้างอิงติดตั้งแล้ว มีเพียงการอ้างอิงและรันไทม์ทั้งหมด (ซึ่งส่วนหนึ่งเป็นเหตุผลว่าทำไม LibreOffice snap คือ 287 MB และ flatpak มีขนาดประมาณ 200MB)

Snaps มีทุกอย่างที่ซอฟต์แวร์ต้องการใช้งาน ฉันไม่คิดว่าจะแบ่งปันอะไรระหว่างสแนป

อย่างไรก็ตามเมื่อมีการอัพเดท snap มันจะทำการดาวน์โหลดการพึ่งพาที่ใหม่และไม่ใช่ snap ทั้งหมด


2

การชี้แจงเพิ่มเติมนั้นเกี่ยวข้องกับวิธีที่ snap Packaging จัดการกับการพึ่งพาที่ใช้ร่วมกัน

Snaps มีทุกอย่างที่ซอฟต์แวร์ต้องการใช้งาน ฉันไม่คิดว่าจะแบ่งปันอะไรระหว่างสแนป

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

  1. snapd - ซึ่งติดตั้งโดยค่าเริ่มต้นใน 16.04 และต่อไปและยังสามารถติดตั้งใน 14.04

  2. หลัก    - (แกนกลาง) ซึ่งจะถูกดาวน์โหลดและติดตั้งโดยอัตโนมัติเมื่อมีการติดตั้งแพคเกจ snap แรก

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

  1. อัพเดทแกนกลาง แม้ว่าสิ่งนี้จะไม่ทำงาน แต่ผลลัพธ์ของการรันคำสั่งต่อไปนี้จะให้ข้อมูลเพิ่มเติมที่จะช่วยแก้ปัญหา

    sudo snap refresh core  
    
  2. ถอนการติดตั้งแกน snap และแพ็คเกจ snap ทั้งหมดแล้วติดตั้งใหม่

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