Bagaimana agar kemasan Debian menghasilkan dua paket yang diberi arsip sumber hulu?

14

Saya mengemas sesuatu untuk PPA saya. Sumber upstream adalah .tar.gzarsip yang berbasis Makefile.

Karena paket ini memiliki sejumlah besar data arsitektur-independen, akan lebih bijaksana jika skrip build menghasilkan dua paket:

  • paket
  • paket -data

Bagaimana saya bisa mengatur ini? Saya telah mengedit controlfile Debian untuk menghasilkan dua paket, tetapi saya tidak tahu bagaimana cara mendapatkan file yang tepat ke paket yang tepat.

Karena file data saat ini semua diinstal melalui Makefile, saya agak tersesat di sini.

Nathan Osman
sumber

Jawaban:

14

Ini adalah tempat di mana saya selalu menemukan dokumentasi yang kurang. Saya cukup banyak hanya belajar bagaimana ini bekerja dengan melihat bagaimana hal itu dilakukan dalam paket lain. Seperti kebanyakan hal dalam kemasan Debian, ada beberapa cara untuk melakukan ini. Saya menemukan cara paling sederhana adalah menggunakan debian/package.installfile. Berikut adalah contoh paket yang saya kerjakan, imajinasi (cabang bzr) .

Pertama, kita perlu membuat paket di debian/control. Ada tiga bait sekarang. Satu untuk paket sumber dan satu untuk setiap paket biner. Perhatikan bahwa paket foo-data seharusnya Architecture: all. Perhatikan juga bahwa imajinasi bergantung imagination-common (= ${source:Version}).

Selanjutnya, kita membuat debian/imagination.installfile. Ini berisi file atau jalur tertentu yang ingin kita akhiri dalam paket imajinasi. Untuk paket ini kami ingin semua file tergantung arsitektur. File desktop disertakan karena perlu dikatakan dengan biner yang dipanggilnya dalam Exec:barisannya.

usr/bin/
usr/lib/
/usr/share/applications/imagination.desktop

Kita perlu membuat debian/imagination-common.installfile. Ini akan berisi semua file arsitektur independen, gambar, terjemahan, dokumen, dan sejenisnya.

/usr/share/doc/
/usr/share/icons/
/usr/share/imagination/
/usr/share/locale/

man dh_install menjelaskan apa yang sebenarnya terjadi di sini:

mungkin Anda memiliki paket besar yang membangun beberapa paket biner. Anda dapat menggunakan Makefile upstream untuk menginstal semuanya ke debian / tmp, dan kemudian menggunakan dh_install untuk menyalin direktori dan file dari sana ke dalam direktori pembuatan paket yang tepat.

Apa yang dimaksud dengan "direktori build paket yang tepat" adalah bahwa pada akhir proses build, semua yang akan dihasilkan foo.debakan ditemukan di src/debian/foo. File yang akan berakhir foo-data.debakan ditemukan di src/debian/foo-data. Karena debian/rulespada dasarnya hanya Makefile, Anda dapat mulai membayangkan cara-cara lain untuk mendapatkan hasil yang sama.

andrewsomething
sumber
Terima kasih banyak! Penjelasan yang sangat jelas dan bekerja dengan sempurna.
Nathan Osman