ฉันเป็นผู้พัฒนา jape ซึ่งเป็นโปรแกรมแก้ไขการพิสูจน์ตรรกะอย่างเป็นทางการซึ่งใช้ java เพื่อจัดหา GUI และ OCaml เพื่อจัดเตรียมเครื่องมือพิสูจน์ขั้นตอน (ดู rbornat/jape บน GitHub) ฉันกำลังพยายามทำแพ็คเกจ jape เป็นแบบ snap snap มี jre ซึ่งสร้างขึ้นโดยใช้ jlink และ JDK 11 จาก adoptopenjdk เริ่มด้วยการเรียกชั้นเรียนใน jre
ในการสร้าง snap ฉันได้รวมไว้แล้ว สร้างแอตทริบิวต์: [เก็บ execstack]
เนื่องจากคอมไพเลอร์ JIT (และไลบรารี่อื่น ลืมไปแล้ว) ต้องการมัน
สแน็ปทำงานร่วมกับ --devmode และ --dangerous ฉันได้บอกให้เชื่อมต่อกับ ไฟล์ส่วนบุคคล
จึงจะได้ที่ ~/.java
และเชื่อมต่อกับ :บ้าน
. จนถึงตอนนี้ดีมาก
แต่คนเก็บขยะของ jre ทำให้ มาก ของการเข้าถึงไฟล์ระบบ แสดงให้ฉันเห็นโดย แก้จุดบกพร่องเร็ว
. ตัวอย่างเช่น มันเริ่มต้นด้วย
= แอพอาร์เมอร์ =
เวลา : 14 ส.ค. 18:49:17 น
บันทึก: apparmor="ALLOWED" operation="open" profile="snap.jape.jape" name="/proc/1/cgroup" pid=40869 comm="java" request_mask="r"dened_mask="r" fsuid =1,000 อูอิด=0
ไฟล์: /proc/1/cgroup (อ่าน)
คำแนะนำ:
* ปรับโปรแกรมไม่ให้เข้า '@{PROC}/@{pid}/cgroup'
= แอพอาร์เมอร์ =
เวลา: 14 ส.ค. 18:49:18 น
บันทึก: apparmor="ALLOWED" operation="open" profile="snap.jape.jape" name="/proc/40869/coredump_filter" pid=40869 comm="java" ask_mask="w"deny_mask="w" fsuid =1,000 อุ้ย=1,000
ไฟล์: /proc/40869/coredump_filter (เขียน)
คำแนะนำ:
* ปรับโปรแกรมไม่ให้เข้า '@{PROC}/@{pid}/coredump_filter'
= แอพอาร์เมอร์ =
เวลา: 14 ส.ค. 18:49:18 น
บันทึก: apparmor="ALLOWED" operation="truncate" profile="snap.jape.jape" name="/proc/40869/coredump_filter" pid=40869 comm="java" request_mask="w"dened_mask="w" fsuid =1,000 อุ้ย=1,000
ไฟล์: /proc/40869/coredump_filter (เขียน)
คำแนะนำ:
* ปรับโปรแกรมไม่ให้เข้า '@{PROC}/@{pid}/coredump_filter'
= แอพอาร์เมอร์ =
เวลา: 14 ส.ค. 18:49:18 น
บันทึก: apparmor="ALLOWED" operation="open" profile="snap.jape.jape" name="/proc/sys/kernel/core_pattern" pid=40869 comm="java" request_mask="r"dened_mask="r " fsuid=1,000 ouid=0
ไฟล์: /proc/sys/kernel/core_pattern (อ่าน)
คำแนะนำ:
* ปรับไม่ให้โปรแกรมเข้าถึง '@{PROC}/sys/kernel/core_pattern'
= แอพอาร์เมอร์ =
เวลา: 14 ส.ค. 18:49:18 น
บันทึก: apparmor="ALLOWED" operation="open" profile="snap.jape.jape" name="/proc/sys/kernel/core_uses_pid" pid=40869 comm="java" request_mask="r"dened_mask="r " fsuid=1,000 ouid=0
ไฟล์: /proc/sys/kernel/core_uses_pid (อ่าน)
คำแนะนำ:
* ปรับไม่ให้โปรแกรมเข้าถึง '@{PROC}/sys/kernel/core_uses_pid'
= แอพอาร์เมอร์ =
เวลา: 14 ส.ค. 18:49:18 น
บันทึก: apparmor="ALLOWED" operation="open" profile="snap.jape.jape" name="/proc/1/cgroup" pid=40869 comm="java" request_mask="r"dened_mask="r" fsuid =1,000 อูอิด=0
ไฟล์: /proc/1/cgroup (อ่าน)
คำแนะนำ:
* ปรับโปรแกรมไม่ให้เข้า '@{PROC}/@{pid}/cgroup'
และต่อมาก็ใช้เวลามากมายไปกับการอ่านเนื้อหาเกี่ยวกับความจำ
= แอพอาร์เมอร์ =
เวลา: 14 ส.ค. 18:49:18 น
บันทึก: apparmor="ALLOWED" operation="open" profile="snap.jape.jape" name="/sys/fs/cgroup/memory/user.slice/user-1000.slice/[email protected]/memory .limit_in_bytes" pid=40869 comm="java" request_mask="r"dened_mask="r" fsuid=1000 ouid=0
ไฟล์: /sys/fs/cgroup/memory/user.slice/user-1000.slice/[email protected]/memory.limit_in_bytes (อ่าน)
ข้อเสนอแนะ:
* ปรับโปรแกรมไม่ให้เข้า '/sys/fs/cgroup/memory/user.slice/user-1000.slice/[email protected]/memory.limit_in_bytes'
* ปรับโปรแกรมไม่ให้เข้า '/sys/fs/cgroup/memory/user.slice/user-[0-9]*.slice/user@[0-9]*.service/memory.limit_in_bytes'
= แอพอาร์เมอร์ =
เวลา: 14 ส.ค. 18:49:18 น
บันทึก: apparmor="ALLOWED" operation="open" profile="snap.jape.jape" name="/sys/fs/cgroup/memory/user.slice/user-1000.slice/[email protected]/memory .usage_in_bytes" pid=40869 comm="java" request_mask="r"dened_mask="r" fsuid=1000 ouid=0
ไฟล์: /sys/fs/cgroup/memory/user.slice/user-1000.slice/[email protected]/memory.usage_in_bytes (อ่าน)
ข้อเสนอแนะ:
* ปรับโปรแกรมไม่ให้เข้า '/sys/fs/cgroup/memory/user.slice/user-1000.slice/[email protected]/memory.usage_in_bytes'
* ปรับโปรแกรมไม่ให้เข้า '/sys/fs/cgroup/memory/user.slice/user-[0-9]*.slice/user@[0-9]*.service/memory.usage_in_bytes'
ฉันกำลังสูญเสียเพื่อดูวิธีทำให้สิ่งนี้รวดเร็ว เดอะ ไฟล์ระบบ
อินเทอร์เฟซบอกว่า snap ต้องไม่ดู / ฯลฯ
หรือ /proc
; เดอะ เค้าโครง
กลไกไม่ชอบเชื่อมโยงไปยัง proc/1/cgroup
(ซึ่งเป็นทั้งหมดที่ฉันได้ลองมาจนถึงตอนนี้) และฉันจะต้องจัดหาให้ได้ เวลาทำงาน uid
และ ปิด
ค่าเพื่ออธิบายสิ่งที่เกิดขึ้น แต่เอกสารประกอบของ snapcraft สำหรับ java ไม่ได้บอกเป็นนัยถึงปัญหาเหล่านี้
ช่วย?