membuat Paket deb. Dari skrip atau binari

73

Saya mencari cara sederhana untuk membuat Paket deb untuk hal-hal yang tidak memiliki kode sumber untuk dikompilasi (konfigurasi, shellscripts, perangkat lunak berpemilik). Ini cukup masalah karena sebagian besar paket tutorial mengasumsikan Anda memiliki tarball sumber yang ingin Anda kompilasi. Kemudian saya menemukan tutorial singkat ini (Jerman).

Setelah itu, saya membuat skrip kecil untuk membuat repositori sederhana. Seperti ini:

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

Saya menambahkan kunci ke apt keyring dan memasukkan sumber seperti ini:

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

Sepertinya repo itu sendiri bekerja dengan baik (saya mengalami beberapa masalah, untuk memperbaikinya saya perlu menambahkan Paket dua kali dan membuat solusi temp-file untuk file Release). Saya juga menaruh beberapa .deb yang diunduh ke dalam repo, sepertinya mereka juga bekerja tanpa masalah. Tetapi paket yang saya buat sendiri tidak ... Jika saya lakukan sudo apt-get update, mereka menyebabkan kesalahan seperti ini:

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.

Adakah yang tahu kesalahan saya?

UPDATE 2012-03-06: Hanya sedikit petunjuk untuk orang lain yang sedang mencari cara mudah untuk membuat DEB: Lihatlah FPM .

Thomas Deutsch
sumber
Apakah Anda menambahkan file DEBIAN / kontrol ke paket, yang berisi bidang Tergantung:?
Bilal Akhtar
5
Btw. Sekarang saya menggunakan FPM untuk kebutuhan kemasan saya: github.com/jordansissel/fpm
Thomas Deutsch
FWIW, saya mendapat pesan kesalahan yang sama pada paket yang saya buat karena saya salah menentukan dependensi. Saya telah menulis "foo> = 2.1" padahal seharusnya "foo (> = 2.1)". Saya menghabiskan lebih dari satu jam untuk melihat setengah dari kesalahan sebelum saya menyadari bahwa setengah pertama dari kesalahan itu memberitahu saya apa yang salah ... (PS: FPM rocks. Anda juga melihat Aptly.)
Mark E. Haase
2
Saya akan sangat setuju bahwa tidak ada tutorial atau panduan untuk mengemas sesuatu yang tidak berasal dari bola tar dengan membuat file dll. Sangat sulit untuk mengetahui bagaimana melakukan ini. Kami membutuhkan panduan seperti itu untuk orang-orang seperti pengembang java yang ingin mendistribusikan perang dengan beberapa skrip dan mungkin liquibase, tetapi bukan admin debian sys atau pengelola Debian. FPM tidak membantu dalam kasus ini, karena FPM juga mengharuskan Anda sudah tahu cara membuat sesuatu yang bisa dipaketkan.
John Little
1
Terima kasih banyak telah berbagi informasi tentang fpm. Itu bekerja seperti pesona!
Damian Nadales

Jawaban:

70

Tutorial yang Anda tautkan menggunakan pendekatan tingkat rendah untuk membangun sebuah paket. Pendekatan seperti itu biasanya tidak direkomendasikan dan dapat menyebabkan segala macam masalah bila tidak dilakukan dengan hati-hati.

Membuat .deb untuk skrip sangat sederhana setelah Anda memahami dasar-dasar pengemasan. Pendeknya:

# 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

Menambahkan lebih banyak skrip mengharuskan mereka untuk disalin ke direktori dan ditambahkan ke file debian / install - maka jalankan kembali debuild. Anda juga harus memeriksa dan memperbarui file debian / * sesuai kebutuhan.

Anda harus membaca halaman manual untuk: dh_make, dh_install, dandebuild

João Pinto
sumber
3
Edit debian / control, "Architecture: any" harus diubah menjadi "Architecture: all". Jangan lupa untuk mengatur pertanyaan seperti dijawab;)
João Pinto
3
Selain mengganti nama direktori dan memperbarui debian / changelog Anda harus membuat arsip .orig yang sesuai dengan versi baru, ini adalah arsip dari isi direktori sumber (tanpa termasuk debian /).
João Pinto
1
Dengan direktori yang disertakan, apa yang biasanya saya lakukan adalah sesuatu seperti: cp sourcedir sourcedir.orig && rm -rf sourcedir.orig / debian && tar czvf filename.orig.tar.gz sourcedir.orig
João Pinto
1
Menambahkan --indepflag ke dh_makeakan membuat paket "Architecture: all" Juga -bflag tidak ada di 11.04 ke atas.
andrewsomething
1
Setelah membangun paket deb, Anda harus memeriksa kesalahan dan perangkat tambahan dengan lintian somescripts_0.1-1_i386.debatau lintian package-source.changes- lihat: packaging.ubuntu.com/html/...
rubo77