Điểm:1

Gói .deb có thể bao gồm các nguồn sẽ được biên dịch bởi dpkg không?

lá cờ us

Tôi có một pkg với một số mã C++. Hiện tại tôi đang biên dịch một số mã C++ dưới dạng nhị phân, một số dưới dạng thư viện và tôi có thể gửi và triển khai mã đó trên các nền tảng khác.

Tuy nhiên, tôi cũng có một trình điều khiển ở đó, mà tôi không thể biên dịch chéo do sự phụ thuộc của nó vào kernel, điều này khiến cho mỗi kernel có thể cần một nhị phân khác nhau.

Vì vậy, những gì tôi muốn có là một .deb nơi tôi sẽ lưu trữ tệp nhị phân bên dưới/usr/bin (đã hoàn tất), thư viện bên dưới/usr/lib (cũng đã hoàn thành) và mã nguồn trình điều khiển bên dưới/opt/driver (tôi đoán vậy ... Đây có phải là một nơi hợp pháp cho điều đó?)

Đóng gói đây là phần dễ dàng, vì tất cả những gì tôi cần làm là đặt nó vào không gian làm việc của mình và gọi dpkg-deb. Điều tôi không chắc chắn là hai điều

  1. Việc đóng gói mã nguồn trong .deb có hợp pháp không? (Trong thuật ngữ python - là .deb một bdist (phân phối nhị phân) hoặc cũng có thể là một sdist (phân phối nguồn))
  2. Nếu nó hợp pháp, làm cách nào tôi có thể gọi các lệnh tạo? Có thể dpkg / apt làm điều đó cho tôi? Hay tôi cần phải chạy dpkg -i pkg và sau đó chạy chế tạo? [nhìn postinst nhưng tôi không chắc liệu đây có phải là con đường đúng đắn hay không]

Tôi sẵn sàng sử dụng bất kỳ loại hệ thống xây dựng nào nếu nó có thể giải quyết vấn đề này mặc dù tôi hiện đang sử dụng cmake và rất muốn gắn bó với nó


POC của tôi:

cây bla_x86_64
bla_x86_64
âââ DEBIAN
â  âââ kiểm soát
â  âââ postinst
âââ chọn
â âââ bla.cpp
âââ usr
    âââ thùng
    â âââ bla.bin
    âââ lib
        âââ bla.lib
mèo bla_x86_64/DEBIAN/postinst 
#!/bin/sh

đặt -e

tiếng vang xin chào thế giới!
biên dịch tiếng vang $(ls /opt/bla.cpp)
dọn dẹp tiếng vang
rm -rvf /opt/bla.cpp
$ dpkg-deb --build --root-owner-group bla_x86_64/
dpkg-deb: xây dựng gói 'bla' trong 'bla_x86_64.deb'.
$ sudo dpkg -i bla_x86_64.deb 
(Đọc cơ sở dữ liệu ... 407519 tệp và thư mục hiện được cài đặt.)
Chuẩn bị giải nén bla_x86_64.deb ...
Giải nén bla (4.0) qua (3.0) ...
Đang thiết lập bla (4.0) ...
Chào thế giới!
biên dịch /opt/bla.cpp
dọn dẹp
đã xóa '/opt/bla.cpp'
lá cờ ru
`dpkg` không kiểm soát bất cứ thứ gì. Nếu bạn đang sử dụng DKMS đúng cách, bạn không *cần* lệnh `make` ở bất kỳ đâu trong tệp Debian. DKMS sẽ tự động biên dịch những thứ cần thiết - bạn không cần phải có bất kỳ lệnh `make` đặc biệt nào ở bất kỳ đâu.
CIsForCookies avatar
lá cờ us
@ThomasWard Tuy nhiên, tôi sẽ cần lệnh `dkms` phải không? Vì vậy, tôi vẫn tự hỏi liệu điều này có phù hợp không và nếu vậy, có ai đã làm như vậy chưa (tôi đã sử dụng `make` trong câu hỏi của mình thay vì `dkms` để đơn giản hóa, nhưng tôi đoán đó chỉ là những thứ phức tạp. ..)
Điểm:2
lá cờ cn

Về mặt kỹ thuật, không có thứ gọi là nội dung "hợp pháp" hoặc "bất hợp pháp" của tệp .deb. Bạn có thể đóng gói bất cứ thứ gì bạn muốn trong đó.

Một nơi tốt để đặt mã nguồn của bạn vào hệ thống đích sẽ nằm dưới /usr/share/${packagename}.

đpkg hoặc đúng cách gọi các lệnh tạo của bạn, chỉ cần đặt chúng trong gói của bạn postinst kịch bản. Đảm bảo rằng bạn khai báo dưới dạng phụ thuộc tất cả các chương trình cần thiết cho quá trình xây dựng, chẳng hạn như cmake, g++binutils, cũng như các tiêu đề hạt nhân, nếu không thì quá trình cài đặt sẽ không thành công trên các hệ thống không được cài đặt trình biên dịch. Ngoài ra, hãy đảm bảo rằng bạn thực hiện xử lý lỗi thích hợp trong postinst tập lệnh để tránh khiến hệ thống đích không hoạt động bằng cách cài đặt mô-đun hạt nhân không hợp lệ do quá trình biên dịch không thành công.

Lưu ý rằng điều này chỉ giải quyết được một nửa vấn đề của bạn. Ngoài việc biên dịch trình điều khiển cho nhân đang sử dụng khi gói của bạn được cài đặt, bạn cũng cần đảm bảo rằng nó được biên dịch lại cho nhân mới sau mỗi lần cập nhật nhân. Giải pháp cho vấn đề này là DKMS, viết tắt của Dynamic Kernel Module Support. Vì vậy, bạn cũng sẽ muốn xem xét việc hỗ trợ DKMS trong gói .deb của mình.

CIsForCookies avatar
lá cờ us
Bạn có tình cờ biết về pkgs đang làm một việc như vậy không? (tức là gọi make/dkms từ postinst). Tôi đang cố gắng tìm những người đã làm điều này trước tôi và học hỏi từ họ
Tilman avatar
lá cờ cn
Không tự nhiên. Nếu tôi muốn tìm một cái, có lẽ tôi sẽ xem xét các gói Linux từ các nhà sản xuất phần cứng, những người duy trì trình điều khiển ngoài cây. Bộ điều hợp đồ họa xuất hiện trong tâm trí.
CIsForCookies avatar
lá cờ us
đã tìm thấy nó. Nvidia không tương tác với dkms trong tập lệnh postinst của họ
CIsForCookies avatar
lá cờ us
Bạn có biết liệu một `.deb` như vậy (tức là chỉ các nguồn) có nên có một `arch` đặc biệt không? Nó phải độc lập với vòm, nhưng tôi không chắc liệu điều này có khả thi hay không
Tilman avatar
lá cờ cn
Bạn có thể đặt `Architecture` thành `all` để biểu thị gói độc lập với kiến ​​trúc. Một cách tiếp cận khác, nếu gói của bạn thực sự chứa _only_ nguồn, thì thực sự biến nó thành gói nguồn.
CIsForCookies avatar
lá cờ us
Tôi không chắc. Các nguồn trong gói phải được biên dịch thành trình điều khiển. Tôi đã đọc về các gói nguồn trong https://wiki.debian.org/Packaging/SourcePackage, nhưng tôi nghĩ vì [trích dẫn] "Các nguồn thường **không** được cài đặt", gói nhị phân là tốt nhất - nó sẽ chứa các nguồn + lệnh make trong `postinst` và cài đặt gói sẽ `make` các nguồn. Bạn nghĩ sao?
Tilman avatar
lá cờ cn
Nếu bạn cân nhắc biến nó thành gói nguồn, bạn nên đọc trên hệ thống xây dựng gói deb. Điều đó cũng sẽ làm rõ ý nghĩa của câu mà bạn trích dẫn. Nếu không, hãy gắn bó với `Architecture: all`.
CIsForCookies avatar
lá cờ us
Bạn có thể chia sẻ một liên kết? Tôi đã tìm thấy rất nhiều dữ liệu, nhưng dường như không có dữ liệu nào tôi đang tìm kiếm
Tilman avatar
lá cờ cn
Tôi khuyên bạn nên bắt đầu tại https://wiki.debian.org/Packaging/Intro và tiến lên từ đó.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.