Score:1

แพ็คเกจ .deb สามารถรวมแหล่งที่มาที่จะรวบรวมโดย dpkg ได้หรือไม่

ธง us

ฉันมี pkg พร้อมรหัส c ++ ขณะนี้ฉันกำลังรวบรวมโค้ด c++ บางส่วนเป็นไบนารี บางส่วนเป็นไลบรารี และฉันสามารถจัดส่งและปรับใช้บนแพลตฟอร์มอื่นได้

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

ดังนั้น สิ่งที่ฉันต้องการคือ .deb ที่ฉันจะเก็บไบนารีภายใต้ /usr/bin (เสร็จสิ้น) ห้องสมุดภายใต้ /usr/lib (เสร็จสิ้นเช่นกัน) และซอร์สโค้ดไดรเวอร์ภายใต้ /opt/driver (ฉันเดาว่า ... ที่นี่เป็นสถานที่ที่ถูกต้องหรือไม่?)

การบรรจุเป็นส่วนที่ง่าย เพราะสิ่งที่ฉันต้องทำคือวางไว้ในพื้นที่ทำงานของฉัน แล้วโทรหา dpkg-deb. สิ่งที่ไม่แน่ใจมีสองอย่าง

  1. การบรรจุซอร์สโค้ดใน .deb นั้นถูกต้องตามกฎหมายหรือไม่ (ในคำศัพท์หลาม - คือ .deb a bdist (การแจกแจงแบบไบนารี) หรืออาจเป็น sdist (การแจกแจงแหล่งที่มา))
  2. หากถูกต้องฉันจะเรียกใช้คำสั่ง make ได้อย่างไร สามารถ dpkg / ฉลาด ทำเพื่อฉัน? หรือฉันต้องวิ่ง dpkg -i pkg แล้วเรียกใช้ ทำ? [มองไปที่ ภายหลัง แต่ฉันไม่แน่ใจว่านี่เป็นวิธีที่ถูกต้องหรือไม่]

ฉันเปิดรับระบบบิลด์ทุกประเภทหากสามารถแก้ปัญหานี้ได้แม้ว่าฉันกำลังใช้ cmake อยู่และอยากจะยึดติดกับมันมาก


POC ของฉัน:

ต้นไม้ bla_x86_64
bla_x86_64
âââ เดเบียน
â âââ ควบคุม
â âââ โพสต์อินส
âââ เลือก
â âââ bla.cpp
€ââ ยูเอสอาร์
    âââ ถัง
    â âââ bla.bin
    âââ ลิบ
        âââ bla.lib
cat bla_x86_64/DEBIAN/postinst 
#!/bin/sh

ตั้ง -e

ก้อง สวัสดีชาวโลก!
echo รวบรวม $(ls /opt/bla.cpp)
ล้างเสียงสะท้อน
rm -rvf /opt/bla.cpp
$ dpkg-deb --build --root-owner-group bla_x86_64/
dpkg-deb: สร้างแพ็คเกจ 'bla' ใน 'bla_x86_64.deb'
$ sudo dpkg -i bla_x86_64.deb 
(กำลังอ่านฐานข้อมูล ... 407519 ไฟล์และไดเร็กทอรีที่ติดตั้งอยู่ในขณะนี้)
กำลังเตรียมแกะ bla_x86_64.deb ...
แกะกล่อง bla (4.0) มากกว่า (3.0) ...
กำลังตั้งค่า bla (4.0) ...
สวัสดีชาวโลก!
รวบรวม /opt/bla.cpp
ทำความสะอาด
ลบ '/opt/bla.cpp'
ru flag
`dpkg` ไม่ได้ควบคุมอะไรเลย หากคุณใช้ DKMS อย่างถูกต้อง คุณไม่จำเป็นต้อง *ต้องการ* คำสั่ง `make` ที่ใดก็ได้ในไฟล์ Debian DKMS จะรวบรวมสิ่งที่ต้องทำโดยอัตโนมัติ - คุณไม่จำเป็นต้องมีคำสั่ง 'make' พิเศษใดๆ ที่ใดก็ได้
CIsForCookies avatar
us flag
@ThomasWard ฉันจะต้องใช้คำสั่ง `dkms` ใช่ไหม ดังนั้นฉันยังคงสงสัยว่านี่เป็นสิ่งที่ถูกต้องหรือไม่ และถ้าเป็นเช่นนั้น มีใครทำไปแล้วหรือยัง (ฉันใช้ `make` ในคำถามของฉันแทน `dkms` เพื่อให้ง่ายขึ้น แต่ฉันคิดว่ามันซับซ้อน ..)
Score:2
ธง cn

ในทางเทคนิคแล้ว ไม่มีเนื้อหาที่ "ถูกต้องตามกฎหมาย" หรือ "ไม่ถูกต้อง" ของไฟล์ .deb คุณสามารถบรรจุสิ่งที่คุณต้องการได้

สถานที่ที่ดีในการวางซอร์สโค้ดของคุณในระบบเป้าหมายจะอยู่ภายใต้ /usr/share/${ชื่อแพ็คเกจ}.

เพื่อที่จะมี dpkg หรือ ฉลาด เรียกใช้คำสั่ง make ของคุณ เพียงแค่วางไว้ในแพ็คเกจของคุณ ภายหลัง สคริปต์ ตรวจสอบให้แน่ใจว่าคุณประกาศโปรแกรมทั้งหมดที่จำเป็นสำหรับกระบวนการสร้างเป็นการอ้างอิงเช่น ซมเมค, ก++ และ บินูทิลเช่นเดียวกับส่วนหัวของเคอร์เนล มิฉะนั้น การติดตั้งจะล้มเหลวในระบบที่ไม่ได้ติดตั้งคอมไพเลอร์ ตรวจสอบให้แน่ใจว่าคุณจัดการข้อผิดพลาดอย่างเหมาะสมใน ภายหลัง สคริปต์เพื่อหลีกเลี่ยงการแสดงผลระบบเป้าหมายไม่ทำงานโดยการติดตั้งโมดูลเคอร์เนลที่ไม่ถูกต้องอันเป็นผลมาจากการคอมไพล์ที่ล้มเหลว

โปรดทราบว่าวิธีนี้ช่วยแก้ปัญหาของคุณได้เพียงครึ่งเดียวเท่านั้น นอกจากการคอมไพล์ไดรเวอร์ของคุณสำหรับเคอร์เนลที่ใช้งานเมื่อติดตั้งแพ็คเกจของคุณแล้ว คุณยังต้องตรวจสอบให้แน่ใจว่ามีการคอมไพล์ไดรเวอร์ใหม่สำหรับเคอร์เนลใหม่หลังจากการอัพเดตเคอร์เนลแต่ละครั้ง วิธีแก้ไขปัญหานี้คือ DKMS ซึ่งย่อมาจาก Dynamic Kernel Module Support ดังนั้น คุณควรพิจารณาการสนับสนุน DKMS ในแพ็คเกจ .deb ของคุณด้วย

CIsForCookies avatar
us flag
คุณรู้จัก pkgs ที่ทำสิ่งนี้หรือไม่? (เช่น โทร make / dkms จาก postinst) ฉันพยายามหาคนที่ทำสิ่งนี้มาก่อนฉันและเรียนรู้จากพวกเขา
Tilman avatar
cn flag
ไม่ใช่มือเปล่า ถ้าฉันต้องการค้นหาฉันอาจจะดูแพ็คเกจ Linux จากผู้ผลิตฮาร์ดแวร์ที่ดูแลไดรเวอร์นอกทรี นึกถึงกราฟิกอแดปเตอร์
CIsForCookies avatar
us flag
พบมัน Nvidia โต้ตอบกับ dkms ในสคริปต์ postinst
CIsForCookies avatar
us flag
คุณรู้หรือไม่ว่า `.deb` (เช่น แหล่งที่มาเท่านั้น) ควรมี `arch` พิเศษหรือไม่ มันควรจะเป็นอิสระจากส่วนโค้ง แต่ฉันไม่แน่ใจว่าเป็นไปได้หรือไม่
Tilman avatar
cn flag
คุณสามารถตั้งค่า 'สถาปัตยกรรม' เป็น 'ทั้งหมด' เพื่อระบุแพ็คเกจที่ไม่ขึ้นกับสถาปัตยกรรม วิธีการอื่น หากแพ็กเกจของคุณมีแหล่งที่มา _only_ จริงๆ ก็จะทำให้เป็นแพ็กเกจซอร์สจริงๆ
CIsForCookies avatar
us flag
ฉันไม่แน่ใจ. ควรรวบรวมแหล่งที่มาในแพ็คเกจเป็นไดรเวอร์ ฉันอ่านเกี่ยวกับซอร์สแพ็กเกจใน https://wiki.debian.org/Packaging/SourcePackage แต่ฉันคิดว่าเนื่องจาก [quote] "Sources ปกติ **ไม่** ติดตั้ง" แพ็กเกจไบนารีจึงดีที่สุด - มันจะมีซอร์ส + คำสั่ง make ใน `postinst` และการติดตั้งแพ็คเกจจะ 'สร้าง' แหล่งที่มา คุณคิดอย่างไร?
Tilman avatar
cn flag
หากคุณพิจารณาที่จะทำให้เป็นซอร์สแพ็กเกจ คุณควรอ่านเกี่ยวกับระบบการสร้างแพ็คเกจ deb นั่นจะทำให้ความหมายของประโยคที่คุณพูดชัดเจนขึ้นด้วย มิฉะนั้นให้ติดกับ `Architecture: all`
CIsForCookies avatar
us flag
คุณช่วยแชร์ลิงค์ได้ไหม ฉันพบข้อมูลมากมาย แต่ดูเหมือนไม่มีสิ่งใดที่ฉันกำลังมองหาเลย
Tilman avatar
cn flag
ฉันขอแนะนำให้คุณเริ่มต้นที่ https://wiki.debian.org/Packaging/Intro และดำเนินการต่อไปจากที่นั่น

โพสต์คำตอบ

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