Cara membuat paket deb yang menginstal serangkaian file

23

Saya ingin membuat paket deb baru untuk menginstal serangkaian file. Jika memungkinkan, saya ingin membuka folder yang berisi file-file ini sebagai bagian dari instalasi ke lokasi folder yang dikenal. Gagal itu, beberapa pengetahuan cara mengemas folder dan file sumber akan sangat berguna.

Pertanyaannya adalah - apakah ini mungkin dan jika demikian - bagaimana?

Mari kita beri contoh:

~/mypluginfolder/berisi file x,, ysubfolder yang dipanggil abcdan di dalamnya ada file lain yang dipanggil z.

Saya ingin tar folder ini: tar -cvf myfiles.tar ~/mypluginfolder

Saya kira paket debian saya akan terlihat seperti

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

Apakah mungkin untuk entah bagaimana myfiles.tarmembuka ke lokasi folder yang diketahui misalnya

/usr/share/rhythmbox/plugins/

Dengan demikian hasil akhirnya adalah:

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

Jika - menganggap launchpad membutuhkan sumber, saran dicari di mana saya harus meletakkan folder sumber dan file ke dalam struktur paket deb.


Ini pada akhirnya akan menjadi serangkaian paket PPA launchpad individual.

Apa yang saya sukai (tetapi mungkin tidak dapat mencapai ...) adalah untuk menjaga kemasan saya ke minimum - membuat serangkaian paket dari template dan menyesuaikan minimum (changelog dll + file tar / file & struktur folder) .

kebebasan fosil
sumber
Um ... mengapa Anda ingin .deb melakukan ekstraksi tar ? Mengapa tidak mengambil kode sumber dari tar dan membuat deb dari awal dengan sumbernya?
Thomas Ward
2
Kemungkinannya adalah Anda melepaskan tarball dari tempat lain, gaya adobe-flash.
jrg
@jrg, yang mengunduh penginstal .bin, bukan tarball. gaya kemasan adobe tidak menyediakan sumber (sumber tertutupnya). Konsepnya masih sama, unduh kode dari tempat lain lalu ekstrak / instal (saya sedang nit = pilih-pilih di sini: P)
Thomas Ward
@LordofTime Perbedaan yang sama. ; p
jrg

Jawaban:

31

Di bawah, saya mengasumsikan bahwa sumbernya terbuka (mis. Skrip Python) yang karenanya tidak terikat dengan arsitektur apa pun (mis. Amd64 atau i386), karenanya "semua". Jika Anda memiliki beberapa sumber C, Anda perlu menggunakannya Architecture: amd64 i386dalam controlfile sumber Anda .


membuat paket yang siap untuk Launchpad

Ini pada akhirnya akan menjadi serangkaian paket PPA launchpad individual.

Apa yang saya sukai (tetapi mungkin tidak dapat mencapai ...) adalah untuk menjaga kemasan saya ke minimum - membuat serangkaian paket dari template dan menyesuaikan minimum (changelog dll + file tar).

Launchpad hanya menerima paket sumber, jadi buat rulesyang memasang file di tempat yang benar. Untuk kenyamanan, saya akan menggunakan debhelper . Direktori dengan file Anda akan terlihat seperti:

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

Sebuah debian/copyrightfile yang mungkin juga berguna untuk menginformasikan pengguna tentang lisensi terkait dengan paket. Saya tidak berpikir Anda memerlukan postinstskrip karena Anda hanya perlu mengekstrak beberapa file. compatharus mengandung tingkat kesesuaian debhelper, katakan "8". (lihat halaman manual debhelper untuk lebih jelasnya)

The changelogfile dapat diedit dengan dchperintah, tersedia dari devscriptspaket. The rules(menggunakan debhelper) harus berisi:

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

Jadikan itu dapat dieksekusi menggunakan chmod 755 debian/rules. Paket sumber dapat dibangun menggunakan debuild -S. Pastikan berada di direktori bernama <package-name>-<version>. Informasi lebih lanjut tentang override_perilaku dan dhperintah dapat ditemukan di halaman manualnya .

The Debian Pengelola Baru Guide sangat berharga bagi saya untuk memahami ini, itu membaca direkomendasikan. Contoh kemasan dapat ditemukan di https://github.com/Bumblebee-Project/bumblebee-ppa .


membuat paket dari pohon file yang ada

dpkg-deb -bdapat digunakan untuk membuat tarbal dari pohon file yang ada. Pertama, mulailah dengan membuat direktori yang harus dinamai setelah paket Anda. Saya akan menganggap Anda ingin memberi nama myplugin, dan memasukkannya ke dalam /usr/share/rhythmbox/plugins/mypluginfolder. Selain itu, buat DEBIANdirektori (huruf besar!) Untuk menyimpan informasi paket:

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

Salin file Anda:

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

Selanjutnya, Anda akan memerlukan file kontrol yang disebut myplugin/DEBIAN/controlyang menggambarkan paket. Isi dari file tersebut diletakkan di bawah ini:

Package: myplugin
Version: 1.0-1
Maintainer: You <[email protected]>
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.

Sekarang, Anda dapat memverifikasi isi paket Anda secara opsional. Perintah selanjutnya berisi daftar entri file dan direktori myplugin:

find myplugin -ls

Jika Anda puas, buat paket di direktori saat ini:

dpkg-deb -b myplugin .

File baru akan muncul, beri nama seperti <package>_<version>_<architecture>.debyang ada dalam contoh ini myplugin_1.0-1_all.deb. Anda dapat menggunakan lessprogram ini untuk mengintip file. Sebagai contoh less myplugin_1.0-1_all.deb,.

Lekensteyn
sumber
3
+1 jenius mutlak - Saya tunduk kepada Anda, Tuan. Terima kasih!
fossfreedom
Terima kasih atas bantuannya! Namun ada beberapa masalah dengan file kontrol, pada akhirnya itu berhasil, tetapi jangan tanya saya bagaimana;)
Gerhard Burger