tạo Gói .deb từ tập lệnh hoặc tệp nhị phân


73

Tôi đã tìm kiếm một cách đơn giản để tạo Gói .deb cho những thứ không có mã nguồn để biên dịch (cấu hình, shellscripts, phần mềm độc quyền). Đây là một vấn đề khá lớn bởi vì hầu hết các hướng dẫn gói đều cho rằng bạn có một tarball nguồn mà bạn muốn biên dịch. Sau đó, tôi đã tìm thấy hướng dẫn ngắn này (tiếng Đức).

Sau đó, tôi đã tạo một tập lệnh nhỏ để tạo một kho lưu trữ đơn giản. Như thế này:

rm /export/my-repository/repository/*
cd /home/tdeutsch/deb-pkg
for i in $(ls | grep my); do dpkg -b ./$i /export/my-repository/repository/$i.deb; done
cd /export/avanon-repository/repository
gpg --armor --export "My Package Signing Key" > PublicKey
apt-ftparchive packages ./ | gzip > Packages.gz
apt-ftparchive packages ./ > Packages
apt-ftparchive release ./ > /tmp/Release.tmp; mv /tmp/Release.tmp Release
gpg --output Release.gpg -ba Release

Tôi đã thêm khóa vào khóa apt và bao gồm nguồn như thế này:

deb http://my.default.com/my-repository/ ./

Có vẻ như bản thân repo đang hoạt động tốt (Tôi gặp một số vấn đề, để khắc phục chúng, tôi cần thêm Gói hai lần và thực hiện giải pháp thay thế tệp tạm thời cho tệp Phát hành). Tôi cũng đã đặt một số .deb đã tải xuống vào repo, có vẻ như chúng cũng đang hoạt động mà không gặp vấn đề gì. Nhưng các gói tự tạo của tôi đã không ... Wenn tôi làm sudo apt-get update, chúng đang gây ra lỗi như thế này:

E: Problem parsing dependency Depends
E: Error occurred while processing my-printerconf (NewVersion2)
E: Problem with MergeList /var/lib/apt/lists/my.default.com_my-repository_._Packages
E: The package lists or status file could not be parsed or opened.

Có ai biết tôi đã làm gì sai không?

CẬP NHẬT 2012 / 03-06 : Chỉ là một gợi ý cho một người khác đang tìm kiếm một cách dễ dàng để tạo DEB: Hãy xem FPM .


Bạn đã thêm tệp DEBIAN / control vào gói chứa trường Phụ thuộc :?
Bilal Akhtar

5
Btw. Bây giờ tôi đang sử dụng FPM cho nhu cầu đóng gói của mình: github.com/jordansissel/fpm
Thomas Deutsch

FWIW, tôi đã nhận được thông báo lỗi tương tự trên một gói mà tôi đã xây dựng vì tôi đã chỉ định một trong các phụ thuộc không chính xác. Tôi đã viết "foo> = 2.1" khi nó phải là "foo (> = 2.1)". Tôi đã dành hơn một giờ để xem xét nửa lỗi cuối cùng trước khi tôi nhận ra nửa lỗi đầu tiên đang nói cho tôi biết chính xác điều gì đã sai ... (PS: FPM đá. Bạn cũng nhìn vào Aptly.)
Mark E. Haase

2
Tôi hoàn toàn đồng ý rằng không có hướng dẫn hay hướng dẫn nào cho việc đóng gói thứ gì đó không đến từ một quả bóng nhựa với các tập tin, v.v ... Rất khó để tìm ra cách làm điều này. Chúng tôi cần một hướng dẫn như vậy cho những người như các nhà phát triển java, những người muốn phân phối một cuộc chiến với một vài tập lệnh và có lẽ là chất lỏng, nhưng không phải là quản trị viên sys debian hay người duy trì debian. FPM không giúp ích gì trong trường hợp này, vì nó cũng yêu cầu bạn phải biết cách tạo ra thứ gì đó có thể đóng gói.
John Little

1
Cảm ơn rất nhiều vì đã chia sẻ thông tin về fpm. Nó hoạt động như quyến rũ!
Damian Nadales

Câu trả lời:


70

Hướng dẫn bạn đã liên kết sử dụng cách tiếp cận cấp thấp để xây dựng gói. Cách tiếp cận như vậy thường không được khuyến nghị và có thể dẫn đến tất cả các loại vấn đề khi không được thực hiện cẩn thận.

Tạo một .deb cho một tập lệnh rất đơn giản một khi bạn hiểu những điều cơ bản về đóng gói. Tóm lại:

# Configure your paths and filenames
SOURCEBINPATH=~
SOURCEBIN=myscript.sh
DEBFOLDER=~/somescripts
DEBVERSION=0.1

DEBFOLDERNAME=$DEBFOLDER-$DEBVERSION

# Create your scripts source dir
mkdir $DEBFOLDERNAME

# Copy your script to the source dir
cp $SOURCEBINPATH/$SOURCEBIN $DEBFOLDERNAME 
cd $DEBFOLDERNAME

# Create the packaging skeleton (debian/*)
dh_make -s --indep --createorig 

# Remove make calls
grep -v makefile debian/rules > debian/rules.new 
mv debian/rules.new debian/rules 

# debian/install must contain the list of scripts to install 
# as well as the target directory
echo $SOURCEBIN usr/bin > debian/install 

# Remove the example files
rm debian/*.ex

# Build the package.
# You  will get a lot of warnings and ../somescripts_0.1-1_i386.deb
debuild

Thêm nhiều tập lệnh yêu cầu chúng phải được sao chép vào thư mục và thêm vào tập tin debian / install - sau đó chỉ cần chạy lại debuild. Bạn cũng nên kiểm tra và cập nhật các tệp debian / * theo yêu cầu.

Bạn nên đọc các trang người đàn ông cho: dh_make, dh_install, vàdebuild


3
Chỉnh sửa debian / control, "Architecture: any" phải được đổi thành "Architecture: all". Đừng quên đặt câu hỏi như đã trả lời;)
João Pinto

3
Ngoài việc đổi tên thư mục và cập nhật debian / changelog, bạn phải tạo tệp lưu trữ .orig tương ứng với phiên bản mới, đây là tệp lưu trữ dưới dạng nội dung thư mục nguồn (không bao gồm debian /).
João Pinto

1
Với thư mục bao gồm, những gì tôi thường làm là một cái gì đó như: cp sourcedir sourcedir.orig && rm -rf sourcedir.orig / debian && tar czvf filename.orig.tar.gz sourcedir.orig
João Pinto

1
Thêm --indepcờ vào dh_makesẽ làm cho gói "Architecture: all" Ngoài ra, -bcờ không tồn tại trong 11.04 trở lên.
andrews Something

1
Sau khi xây dựng gói .deb, bạn nên kiểm tra lỗi và cải tiến với lintian somescripts_0.1-1_i386.debhoặc lintian package-source.changes- xem: bao
bì.ubfox.com / html / khăn
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.