Bagaimana dan mengapa membuat paket -dbg, -dev, -doc?

15

Saya sedang menulis paket Ubuntu untuk paket yang pada dasarnya menyediakan sejumlah perpustakaan dan header yang kemudian digunakan untuk membangun perangkat lunak lain. Paket ini juga memecah di subpackages kecil yang saling tergantung; dalam hal ini paketnya sangat mirip dengan boost.

Saya perhatikan bahwa paket-paket seperti boost menyediakan

[...]
libboost-dbg
libboost-dev
libboost-doc
[...]
libboost-all-dev
[...]

tapi tidak ada yang sesuai dengan namanya boostatau libboost.

  • Apa ide di balik ini?
  • Apa tujuan dari -dbg, -dev, dan -docpaket?
  • Apakah ada instruksi yang diberikan tentang cara menulis file build untuk paket-paket itu?
Nico Schlömer
sumber

Jawaban:

13

Ide & Tujuan

Alasan utama untuk memisahkan paket-paket yang berbeda ini berkaitan dengan ruang disk dan kecepatan unduh. Secara khusus, ini adalah masalah besar untuk ruang cermin karena itu berarti mendistribusikan banyak salinan data. Dengan membuat foo-common, foo-dataatau foo-docpaket Architecture: all, kami hanya menyimpan satu copy dari data dalam arsip bukannya setelah itu disalin dengan setiap arsitektur (misalnya i386, amd64, dll ...). Simbol debugging tidak diperlukan oleh sebagian besar pengguna dan akhirnya membuat pengunduhan paket lebih lama.

Untuk paket dalam arsip resmi Ubuntu, sebenarnya tidak ada alasan untuk membuat -dbgpaket secara manual. Mesin pembuat secara otomatis menghapus simbol debug dan memasukkannya ke dalam -dbgsympaket yang dihosting di ddebs.ubuntu.com. (Lihat: Paket Simbol Debug ) -dbgpaket yang ada biasanya hanya dibawa dari Debian.

Instruksi

Adapun implementasi, lihat pertanyaan ini:

Secara singkat, bait baru perlu dibuat debian/controluntuk setiap paket. Maka debian/foo-*.installfile perlu dibuat juga. Ini akan memungkinkan dh_installuntuk memasukkan konten yang benar ke dalam paket yang tepat.

The foo.installuntuk paket biner utama akan terlihat seperti:

usr/bin/
usr/lib/

foo-common.install, foo-data.install, foo-doc.install, Atau apa pun:

/usr/share/doc/
/usr/share/icons/
/usr/share/foo/
/usr/share/locale/

Dan untuk foo-dev:

/usr/include/
/usr/lib/pkgconfig
/usr/lib/*.so

Membuat foo-dbgpaket membutuhkan pengeditan debian/ruleskarena biasanya dh_stripakan menghilangkan simbol debugging. Jadi kita perlu mengganti perilaku itu:

.PHONY: override_dh_strip
override_dh_strip:
        dh_strip --dbg-package=foo-dbg
andrewsomething
sumber
12

Boost adalah contoh kompleks, mari kita lihat yang lebih sederhana dulu.

Secara tepat, paket source openssl menyediakan 5 paket biner:

  • libssl1.0.0berisi pustaka dinamis OpenSSL, versi 1.0.0. Itulah yang harus dijalankan oleh program yang terhubung dengan perpustakaan ini. Nama paket berisi nomor versi karena Anda mungkin memiliki versi lain dari perpustakaan diinstal pada saat yang sama, jika Anda memiliki program lain yang ditautkan dengan versi lain yang tidak kompatibel dengan biner dengan 1.0.0.
  • opensslberisi alat baris perintah yang menggunakan pustaka OpenSSL. Sekalipun Anda memiliki beberapa versi pustaka, Anda tidak memerlukan beberapa versi alat ini: hanya ada satu /usr/bin/openssldan alat terkait, data, dan dokumentasi.
  • libssl-devberisi file-file yang Anda butuhkan jika Anda ingin mengkompilasi sebuah program yang terhubung dengan OpenSSL. Ada file header C ( *.h), perpustakaan untuk menautkan ( *.a, *.so), dan beberapa file berbagai macam.
  • libssl-docberisi dokumentasi untuk perpustakaan OpenSSL. Anda hanya perlu paket ini jika Anda akan menulis program yang menggunakan pustaka.
  • libssl1.0.0-dbgberisi simbol debugging. Ini hanya berguna untuk orang-orang yang men-debug pustaka OpenSSL atau program yang menggunakannya. Jawaban andrewsomething memiliki informasi lebih lanjut tentang -dbgpaket - paket ini .

Selain itu, tepatnya berisi versi perpustakaan yang lebih lama libssl0.9.8,, karena ada program yang masih tertaut dengan versi yang lebih lama.

Paket lain yang mungkin Anda lihat adalah binding untuk bahasa selain C. OpenSSL tidak dikirimkan bersama (ada binding ke OpenSSL untuk bahasa lain, tetapi mereka tidak berasal dari sumber yang sama). Contohnya adalah sqlite3 , yang dikirimkan dengan binding TCL .

Alasan utama untuk memecah paket seperti ini adalah bahwa paket yang berbeda memiliki audiens target yang berbeda. Sebuah sistem di mana tidak ada yang pernah mengkompilasi apa pun hanya membutuhkan libpaket inti , dan mungkin alat-alat baris perintah; mereka akan diinstal secara otomatis dari dependensi jika diperlukan. Jika seseorang ingin mengkompilasi program yang menggunakan pustaka, mereka membutuhkan -devpaket. Jika seseorang ingin menulis sebuah program yang menggunakan perpustakaan, mereka memerlukan -docpaket itu.

Jadi bagaimana dengan Boost? Ini mengikuti struktur yang sama, tetapi karena Boost adalah perpustakaan besar, itu dipecah menjadi banyak paket yang lebih kecil: libboost-*1.46.1dan libboost-*1.46-dev. Secara tepat, hanya ada satu versi Boost, 1,46 , tetapi oneiric memiliki keduanya 1,42 dan 1,46 . Ada juga metapackage boost-defaults yang menarik dalam paket versi sebagai ketergantungan.

Melihat libhangul , selain paket perpustakaan dinamis libhangul1dan paket pengembangan libhangul-dev, ada paket libhangul-data. Paket ini berisi data tambahan yang diperlukan oleh perpustakaan. Bahkan jika Anda memiliki beberapa versi perpustakaan, mereka dapat berbagi -datapaket. Juga, paket ini adalah arsitektur-independen. Perangkat lunak yang berisi sejumlah besar data arsitektur-independen dipecah menjadi paket arsitektur-bergantung dan arsitektur-independen, untuk menghemat ruang di situs distribusi. Sufiks lain dengan makna yang serupa adalah -common.

Aturan pengemasan Ubuntu dan Debian sangat mirip, sehingga materi tentang pembuatan paket Debian juga berlaku untuk Ubuntu. Bahkan, Anda dapat memiliki paket sumber yang sama untuk Debian dan Ubuntu; satu-satunya hal yang membuat paket Debian dan Ubuntu berbeda adalah mengkompilasinya terhadap versi pustaka yang berbeda, dan itu tidak lebih dari perbedaan antara rilis Ubuntu yang berbeda. Siapkan dokumentasi pengembang Debian , khususnya Manual Kebijakan Debian dan Referensi Pengembang ; lihat Panduan Maintainer Baru untuk pengantar. Abaikan bagian tentang bekerja dengan proyek Debian dan sebagainya, cukup baca bagian tentang membuat paket.dh_make adalah cara yang baik untuk memulai dengan paket deb (Anda ingin memilih "Perpustakaan").

Gilles 'SANGAT berhenti menjadi jahat'
sumber