Cách tạo gói gỡ lỗi cài đặt một loạt tệp


23

Tôi muốn tạo một gói deb hoàn toàn mới để cài đặt hàng loạt tệp. Nếu có thể, tôi muốn gỡ bỏ thư mục chứa các tệp này như một phần của cài đặt vào một vị trí thư mục đã biết. Không có điều đó, một số kiến ​​thức về cách đóng gói các thư mục và tệp nguồn sẽ rất hữu ích.

Câu hỏi là - điều này có thể không và nếu có - làm thế nào?

Hãy cho một ví dụ:

~/mypluginfolder/chứa các tệp x, ymột thư mục con được gọi abcvà bên trong tệp khác được gọi z.

Tôi muốn tar thư mục này: tar -cvf myfiles.tar ~/mypluginfolder

Tôi đoán gói debian của tôi sẽ như thế nào

myfiles.tar.gz
myfiles+ppafoss_0.1-1/
   myfiles.tar
   DEBIAN
      changelog, compat, control, install, rules source

Có thể bằng cách nào đó myfiles.targỡ bỏ một vị trí thư mục đã biết chẳng hạn

/usr/share/rhythmbox/plugins/

Do đó, kết quả cuối cùng sẽ là:

/usr/share/rhythmbox/plugins/mypluginfolder
/usr/share/rhythmbox/plugins/mypluginfolder\x
/usr/share/rhythmbox/plugins/mypluginfolder\y
/usr/share/rhythmbox/plugins/mypluginfolder\abc\z

Nếu - giả sử launchpad cần nguồn, lời khuyên được tìm kiếm là nơi tôi nên thả các thư mục nguồn và tệp vào cấu trúc gói gỡ lỗi.


Điều này cuối cùng sẽ trở thành một loạt các gói PPA launchpad riêng lẻ.

Điều tôi thích (nhưng có thể không đạt được ...) là giữ cho bao bì của tôi ở mức tối thiểu - tạo một loạt các gói từ một mẫu và điều chỉnh mức tối thiểu (changelog, v.v. + cấu trúc tệp / tệp & thư mục tar) .


Ừm ... tại sao bạn muốn một .deb thực hiện trích xuất tar ? Tại sao không chỉ lấy mã nguồn từ tar và tạo deb từ đầu với nguồn?
Thomas Ward

2
Một khả năng có thể là bạn quên tarball từ một nơi khác, phong cách adobe-flash.
JRG

@jrg, tải xuống trình cài đặt .bin, không phải tarball. kiểu đóng gói adobe không cung cấp nguồn (nguồn đóng). Mặc dù vậy, khái niệm này vẫn giống nhau, tải xuống mã từ nơi khác và sau đó giải nén / cài đặt (tôi đang nit = kén chọn ở đây: P)
Thomas Ward

@LordofTime Sự khác biệt giống nhau. ; p
jrg

Câu trả lời:


31

Dưới đây, tôi giả sử rằng nguồn là mở (ví dụ: tập lệnh Python) do đó không bị ràng buộc với bất kỳ kiến ​​trúc nào (ví dụ: amd64 hoặc i386), do đó "tất cả". Nếu bạn có một số nguồn C, bạn cần sử dụng Architecture: amd64 i386trong controltệp nguồn của mình .


tạo gói sẵn sàng cho Launchpad

Điều này cuối cùng sẽ trở thành một loạt các gói PPA launchpad riêng lẻ.

Điều tôi thích (nhưng có thể không đạt được ...) là giữ cho bao bì của tôi ở mức tối thiểu - tạo một loạt các gói từ một mẫu và điều chỉnh mức tối thiểu trần (changelog, v.v. + tệp tar).

Launchpad chỉ chấp nhận các gói nguồn, vì vậy hãy tạo một rulescài đặt các tệp ở đúng nơi. Để thuận tiện, tôi sẽ sử dụng debrcper . Thư mục chứa các tệp của bạn sẽ trông như sau:

debian/changelog
debian/control
debian/rules
debian/compat
mypluginfolder/...

Một debian/copyrighttệp cũng có thể hữu ích để thông báo cho người dùng về các giấy phép liên quan đến gói. Tôi không nghĩ rằng bạn cần một postinsttập lệnh vì bạn chỉ cần giải nén một số tệp. compatnên chứa mức độ tương thích gỡ lỗi, nói "8". (vui lòng tham khảo trang hướng dẫn sử dụng trình gỡ lỗi để biết thêm chi tiết)

Các changelogtập tin có thể được chỉnh sửa bằng dchlệnh, có sẵn từ devscriptsgói. Các rules(sử dụng debhelper) nên chứa:

#!/usr/bin/make -f
%:
    dh $@
override_dh_install:
    dh_install mypluginfolder/ /usr/share/rhythmbox/plugins

Làm cho nó thực thi bằng cách sử dụng chmod 755 debian/rules. Một gói nguồn có thể được xây dựng bằng cách sử dụng debuild -S. Hãy chắc chắn là trong một thư mục có tên <package-name>-<version>. Thông tin thêm về override_hành vi và dhlệnh có thể được tìm thấy trên trang hướng dẫn của nó .

Các Hướng dẫn Debian bảo trì mới là rất có giá trị đối với tôi để hiểu được điều này, đó là khuyến cáo đọc. Ví dụ bao bì có thể được tìm thấy trên https://github.com/Bumblebee-Project/bumblebee-ppa .


tạo gói từ cây tập tin hiện có

dpkg-deb -bcó thể được sử dụng để tạo tarball từ cây tập tin hiện có. Đầu tiên, bắt đầu với việc tạo một thư mục nên được đặt tên theo gói của bạn. Tôi sẽ cho rằng bạn muốn đặt tên cho nó myplugin, và đặt nó vào /usr/share/rhythmbox/plugins/mypluginfolder. Ngoài ra, tạo DEBIANthư mục (chữ hoa!) Để lưu trữ thông tin gói:

mkdir -p myplugin/usr/share/rhythmbox/plugins/mypluginfolder
mkdir myplugin/DEBIAN

Sao chép tập tin của bạn:

cp -r ~/mypluginsfolder myplugin/usr/share/rhythmbox/plugins

Tiếp theo, bạn sẽ cần một tệp điều khiển được gọi là myplugin/DEBIAN/controlmô tả gói đó. Nội dung của một tập tin như vậy được đặt dưới đây:

Package: myplugin
Version: 1.0-1
Maintainer: You <whatever@contact.address>
Architecture: all
Description: plugins for Rhythmbox
 Longer description here
 .
 As you can see, new paragraph are split by a single dot,
 and lines have to be indented by one space.

Bây giờ, bạn có thể tùy chọn xác minh nội dung của gói của bạn. Lệnh tiếp theo liệt kê các mục nhập tệp và thư mục của myplugin:

find myplugin -ls

Nếu bạn hài lòng, hãy xây dựng gói trong thư mục hiện tại:

dpkg-deb -b myplugin .

Một tệp mới sẽ xuất hiện, được đặt tên giống như <package>_<version>_<architecture>.debtrong ví dụ này myplugin_1.0-1_all.deb. Bạn có thể sử dụng lesschương trình để nhìn trộm trong tập tin. Ví dụ , less myplugin_1.0-1_all.deb.


3
+1 thiên tài tuyệt đối - Tôi cúi đầu chào ngài. Cảm ơn!
fossfreedom

Cảm ơn sự giúp đỡ tuyệt vời này! Tuy nhiên, có một số rắc rối với tệp điều khiển, cuối cùng thì nó vẫn hoạt động, nhưng đừng hỏi tôi làm thế nào;)
Gerhard Burger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.