การเปิดตัวระบบแพ็คเกจแบบแยกส่วน Flatpak 1.14.0

ชุดเครื่องมือ Flatpak 1.14 สาขาเสถียรใหม่ได้รับการเผยแพร่แล้ว ซึ่งจัดให้มีระบบสำหรับการสร้างแพ็คเกจที่มีในตัวเองซึ่งไม่ได้เชื่อมโยงกับลินุกซ์รุ่นใดรุ่นหนึ่ง และทำงานในคอนเทนเนอร์พิเศษที่แยกแอปพลิเคชันออกจากส่วนที่เหลือของระบบ รองรับการรันแพ็คเกจ Flatpak สำหรับ Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint, Alt Linux และ Ubuntu แพ็คเกจ Flatpak รวมอยู่ในที่เก็บ Fedora และได้รับการสนับสนุนจากตัวจัดการแอปพลิเคชัน GNOME ดั้งเดิม

นวัตกรรมสำคัญในสาขา Flatpak 1.14:

  • เป็นไปได้ที่จะสร้างไดเร็กทอรีสำหรับไฟล์ในสถานะ (.local/state) และตั้งค่าตัวแปรสภาพแวดล้อม XDG_STATE_HOME ที่ชี้ไปที่ไดเร็กทอรีนี้
  • เพิ่มการตรวจสอบตามเงื่อนไขของแบบฟอร์ม "have-kernel-module-name" เพื่อกำหนดการมีอยู่ของโมดูลเคอร์เนล (อะนาล็อกสากลของการตรวจสอบ have-intel-gpu ที่เสนอก่อนหน้านี้ แทนที่จะเป็นนิพจน์ "have-kernel-module-i915) ” สามารถใช้งานได้แล้ว)
  • มีการใช้คำสั่ง “flatpak document-unexport —doc-id=…” แล้ว
  • มีการส่งออกข้อมูลเมตาของ Appstream เพื่อใช้ในสภาพแวดล้อมหลัก
  • เพิ่มกฎการสำเร็จคำสั่ง flatpak สำหรับเปลือกปลา
  • อนุญาตให้เข้าถึงเครือข่ายไปยังบริการ X11 และ PulseAudio ได้ (หากเพิ่มการตั้งค่าที่เหมาะสม)
  • สาขาหลักในพื้นที่เก็บข้อมูล Git ถูกเปลี่ยนชื่อจาก "master" เป็น "main" เนื่องจากคำว่า "master" เพิ่งได้รับการพิจารณาว่าไม่ถูกต้องทางการเมือง
  • ตอนนี้สคริปต์เริ่มต้นจะถูกเขียนใหม่หากมีการเปลี่ยนชื่อแอปพลิเคชัน
  • เพิ่มตัวเลือก "--include-sdk" และ "--include-debug" ให้กับคำสั่งติดตั้งเพื่อติดตั้งไฟล์ SDK และ debuginfo
  • เพิ่มการรองรับพารามิเตอร์ “DeploySideloadCollectionID” ให้กับไฟล์ flatpakref และ flatpakrepo เมื่อตั้งค่าแล้ว ID คอลเลกชันจะถูกตั้งค่าเมื่อเพิ่มพื้นที่เก็บข้อมูลระยะไกล ไม่ใช่หลังจากโหลดข้อมูลเมตา
  • อนุญาตให้สร้างสภาพแวดล้อมแซนด์บ็อกซ์แบบซ้อนสำหรับตัวจัดการในเซสชันที่มีชื่อ MPRIS (ข้อกำหนดการเชื่อมต่อระยะไกลของเครื่องเล่นสื่อ) แยกต่างหาก
  • ขณะนี้ยูทิลิตี้บรรทัดคำสั่งให้ข้อมูลเกี่ยวกับการใช้ส่วนขยายรันไทม์ที่ล้าสมัย
  • คำสั่งถอนการติดตั้งจะใช้คำขอยืนยันก่อนที่จะลบรันไทม์หรือส่วนขยายรันไทม์ที่ยังคงใช้งานอยู่
  • เพิ่มการรองรับตัวเลือก “--socket=gpg-agent” ให้กับคำสั่งเช่น “flatpak run”
  • ช่องโหว่ได้รับการแก้ไขแล้วใน libostree ซึ่งอาจทำให้ผู้ใช้สามารถลบไฟล์ที่กำหนดเองบนระบบผ่านการจัดการตัวจัดการ flatpak-system-helper (ส่งคำขอลบด้วยชื่อสาขาที่จัดรูปแบบพิเศษ) ปัญหาจะปรากฏเฉพาะใน Flatpak และ libostree เวอร์ชันเก่าที่เปิดตัวก่อนปี 2018 (< 0.10.2) และไม่ส่งผลกระทบต่อรุ่นปัจจุบัน

เราขอเตือนคุณว่า Flatpak ช่วยให้นักพัฒนาแอปพลิเคชันลดความซับซ้อนในการแจกจ่ายโปรแกรมของตนที่ไม่รวมอยู่ในพื้นที่เก็บข้อมูลการแจกจ่ายมาตรฐานโดยการเตรียมคอนเทนเนอร์สากลหนึ่งคอนเทนเนอร์โดยไม่ต้องสร้างชุดประกอบแยกกันสำหรับการแจกจ่ายแต่ละครั้ง สำหรับผู้ใช้ที่คำนึงถึงความปลอดภัย Flatpak ช่วยให้คุณสามารถเรียกใช้แอปพลิเคชันที่น่าสงสัยในคอนเทนเนอร์ โดยให้การเข้าถึงเฉพาะฟังก์ชันเครือข่ายและไฟล์ผู้ใช้ที่เกี่ยวข้องกับแอปพลิเคชันเท่านั้น สำหรับผู้ใช้ที่สนใจผลิตภัณฑ์ใหม่ Flatpak ช่วยให้คุณสามารถติดตั้งการทดสอบล่าสุดและแอพพลิเคชั่นที่เสถียรโดยไม่จำเป็นต้องทำการเปลี่ยนแปลงระบบ ตัวอย่างเช่น แพ็คเกจ Flatpak ถูกสร้างขึ้นสำหรับ LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 AD, Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio เป็นต้น

เพื่อลดขนาดแพ็คเกจ จะรวมเฉพาะการพึ่งพาเฉพาะแอปพลิเคชัน และระบบพื้นฐานและไลบรารีกราฟิก (ไลบรารี GTK, Qt, GNOME และ KDE ฯลฯ) ได้รับการออกแบบให้เป็นสภาพแวดล้อมรันไทม์มาตรฐานของปลั๊กอิน ข้อแตกต่างที่สำคัญระหว่าง Flatpak และ Snap คือ Snap ใช้ส่วนประกอบของสภาพแวดล้อมระบบหลักและการแยกตามการกรองการเรียกของระบบ ในขณะที่ Flatpak สร้างคอนเทนเนอร์ที่แยกจากระบบและทำงานกับชุดรันไทม์ขนาดใหญ่ โดยไม่ให้แพ็คเกจเป็นการพึ่งพา แต่เป็นมาตรฐาน สภาพแวดล้อมของระบบ (เช่น ไลบรารีทั้งหมดที่จำเป็นสำหรับการทำงานของโปรแกรม GNOME หรือ KDE)

นอกเหนือจากสภาพแวดล้อมระบบมาตรฐาน (รันไทม์) ที่ติดตั้งผ่านพื้นที่เก็บข้อมูลพิเศษแล้ว ยังมีการพึ่งพาเพิ่มเติม (บันเดิล) ที่จำเป็นสำหรับการทำงานของแอปพลิเคชันอีกด้วย โดยรวมแล้ว รันไทม์และบันเดิลจะสร้างการเติมคอนเทนเนอร์ แม้ว่ารันไทม์จะถูกติดตั้งแยกกันและเชื่อมโยงกับคอนเทนเนอร์หลายอันในคราวเดียว ซึ่งช่วยให้คุณหลีกเลี่ยงการทำซ้ำไฟล์ระบบที่เหมือนกันกับคอนเทนเนอร์ได้ ระบบหนึ่งสามารถติดตั้งรันไทม์ที่แตกต่างกันได้หลายแบบ (GNOME, KDE) หรือรันไทม์เดียวกันหลายเวอร์ชัน (GNOME 3.40, GNOME 3.42) คอนเทนเนอร์ที่มีแอปพลิเคชันเป็นแบบพึ่งพาจะใช้การเชื่อมโยงเฉพาะกับรันไทม์ที่ระบุเท่านั้น โดยไม่คำนึงถึงแต่ละแพ็คเกจที่ประกอบเป็นรันไทม์ องค์ประกอบที่ขาดหายไปทั้งหมดจะถูกรวมเข้ากับแอปพลิเคชันโดยตรง เมื่อคอนเทนเนอร์ถูกสร้างขึ้น เนื้อหารันไทม์จะถูกเมาท์เป็นพาร์ติชัน /usr และบันเดิลจะถูกเมาท์ในไดเร็กทอรี /app

คอนเทนเนอร์รันไทม์และแอปพลิเคชันถูกสร้างขึ้นโดยใช้เทคโนโลยี OSTree ซึ่งรูปภาพได้รับการอัปเดตแบบอะตอมมิกจากที่เก็บที่คล้ายกับ Git ซึ่งช่วยให้สามารถนำวิธีการควบคุมเวอร์ชันไปใช้กับส่วนประกอบการกระจายได้ (เช่น คุณสามารถย้อนกลับระบบอย่างรวดเร็วเป็น สถานะก่อนหน้า) แพ็คเกจ RPM ได้รับการแปลไปยังที่เก็บ OSTree โดยใช้เลเยอร์ rpm-ostree พิเศษ ไม่รองรับการติดตั้งและอัปเดตแพ็คเกจแยกต่างหากภายในสภาพแวดล้อมการทำงาน ระบบได้รับการอัปเดตไม่ได้อยู่ที่ระดับของแต่ละส่วนประกอบ แต่โดยรวมแล้วจะเปลี่ยนสถานะแบบอะตอมมิก มีเครื่องมือเพื่อใช้การอัปเดตแบบค่อยเป็นค่อยไป โดยไม่จำเป็นต้องแทนที่รูปภาพทั้งหมดด้วยการอัพเดตแต่ละครั้ง

สภาพแวดล้อมแบบแยกที่สร้างขึ้นนั้นไม่ขึ้นอยู่กับการกระจายที่ใช้โดยสิ้นเชิง และด้วยการตั้งค่าที่เหมาะสมของแพ็คเกจ ทำให้ไม่สามารถเข้าถึงไฟล์และกระบวนการของผู้ใช้หรือระบบหลัก ไม่สามารถเข้าถึงอุปกรณ์ได้โดยตรง ยกเว้นเอาต์พุตผ่าน DRI และเรียกไปยังระบบย่อยเครือข่าย การจัดวางเอาต์พุตกราฟิกและอินพุตจะดำเนินการโดยใช้โปรโตคอล Wayland หรือผ่านการส่งต่อซ็อกเก็ต X11 การโต้ตอบกับสภาพแวดล้อมภายนอกจะขึ้นอยู่กับระบบการส่งข้อความ DBus และพอร์ทัล API พิเศษ

สำหรับการแยกออก มีการใช้เลเยอร์ Bubblewrap และเทคโนโลยีการจำลองเสมือนคอนเทนเนอร์ Linux แบบดั้งเดิม โดยอิงตามการใช้ cgroups, เนมสเปซ, Seccomp และ SELinux PulseAudio ใช้เพื่อส่งสัญญาณเสียง ในกรณีนี้ สามารถปิดใช้งานการแยกได้ ซึ่งนักพัฒนาแพ็คเกจยอดนิยมจำนวนมากใช้เพื่อให้สามารถเข้าถึงระบบไฟล์และอุปกรณ์ทั้งหมดในระบบได้อย่างเต็มที่ ตัวอย่างเช่น GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity และ VLC มาพร้อมกับโหมดแยกที่จำกัดซึ่งทำให้สามารถเข้าถึงโฮมไดเร็กตอรี่ได้อย่างเต็มที่ หากแพ็คเกจที่สามารถเข้าถึงโฮมไดเร็กตอรี่ถูกโจมตี แม้ว่าจะมีป้ายกำกับ “แซนด์บ็อกซ์” ในคำอธิบายแพ็คเกจ ผู้โจมตีเพียงแค่เปลี่ยนไฟล์ ~/.bashrc เพื่อรันโค้ดของเขาเท่านั้น อีกประเด็นหนึ่งคือการควบคุมการเปลี่ยนแปลงแพ็คเกจและความไว้วางใจในตัวสร้างแพ็คเกจซึ่งมักจะไม่เกี่ยวข้องกับโปรเจ็กต์หลักหรือการแจกแจง

ที่มา: opennet.ru

เพิ่มความคิดเห็น