Saya telah berbicara dengan beberapa pengelola di saluran IRC Debian irc: //irc.debian.org#debian-mentors , menanyakan hal yang persis sama, dan konsensus umum adalah:
Solusi # 1:
Mengintegrasikan dependensi dalam paket Anda dengan menyalin file sumber mereka sebagai basis kode tunggal sangat disukai. Itu akan mengalahkan tujuan dari sistem pengemasan yang menangani dependensi, pembaruan, versi, dll.
Solusi # 3:
Mengunduh paket non-debian dengan cepat saat memasang biner ( .deb
) adalah risiko keamanan yang serius , jelas tidak boleh. Anda bahkan tidak akan dapat memeriksa dependensi dengan mengekstraksi deb
, karena mereka diunduh dan diinstal pada waktu instalasi. Ini adalah pendekatan yang sepenuhnya memotong sistem repositori. Tidak ada pengguna yang peduli akan senang dengan paket yang, di belakang layar (dan seperti root
, ingat!), Mengunduh perangkat lunak tidak terpercaya tambahan dari sumber yang tidak terpercaya. Ya, itu akan membutuhkan mengutak-atik DEBIAN/postinst
(atau preinst
) dan mengeluarkan wget
(atau, dalam kasus Anda,pip install
), dan itulah pendekatan yang diambil oleh Flash, Oracle Java, Steam dan lainnya. Tapi itu adalah perangkat lunak berpemilik, sumber tertutup, jadi keamanan mereka tidak ada.
Solusi # 1.5:
Anda tidak menyebutkan hal itu, tapi Anda bisa mengintegrasikan dependensi hanya pada waktu pembangunan , yakni di sumber paket (yang .orig.tar.gz
, .debian.tar.gz
, .dsc
triad), dengan men-download dari PyPI saat membuat "biner" paket (yang .deb
). Instruksi untuk pip install
akan masuk debian/rules
(perhatikan huruf kecil debian
, yang bertentangan dengan paket biner), dan akan dieksekusi ketika Anda mengeluarkan debuild
atau dpkg-buildpackage
.
Ini adalah jalan tengah antara # 1 dan # 3. Ini mengurangi (tetapi tidak menyelesaikan!) Beberapa masalah # 3: setidaknya Anda dapat memeriksa produk akhir, dan .deb
tidak akan memerlukan akses internet pada waktu pemasangan. Semua risiko dan beban ditransfer dari pengguna akhir ke pengelola paket. Tetapi, memiliki masalah yang sama dengan # 1, karena memotong sebagian besar infrastruktur sistem pengemasan. Afterall, penanganan dependensi (Versi, update, persyaratan, konflik) adalah mengapa dpkg
/ apt
diciptakan di tempat pertama! :)
Solusi # 2:
The One True Right Way ™ . Anda membuat paket debian untuk dependensi Anda, daftar mereka sebagai persyaratan dalam paket Anda, dan mengirimkan semua .debs
paket sumber atau.
Dari sana, Anda memiliki sejumlah opsi:
Kirimkan paket sumber, baik perangkat lunak Anda dan dependensinya, untuk dimasukkan ke Debian. Jika diterima, mereka akan secara otomatis tersedia untuk semua pengguna Debian, termasuk semua turunan seperti Ubuntu.
Unggah paket sumber ke Launchpad , sehingga menciptakan PPA yang dapat dengan mudah ditambahkan dan diinstal oleh pengguna Ubuntu (dan turunannya seperti Linux Mint)
Host repositori debian Anda sendiri di situs web Anda, yang dapat ditambahkan oleh pengguna dari sistem berbasis Debian apa pun /etc/apt/sources.list.d
dan gunakan apt
infrastruktur untuk mengunduh, menginstal, dan terus memperbarui, (seperti di atas!)
Host .deb
file untuk unduh dan instal langsung. Tidak ada apt
atau pembaruan otomatis yang terlibat dipikirkan.
Adapun cara mengemas dependensi PyPi Anda (dan perangkat lunak python Anda juga!), Ada sejumlah alat dan referensi yang membuat prosesnya mudah:
stdeb , seperti yang Anda sebutkan. Oldie dan goodie.
Pybuild , alat baru dan luar biasa dari Debian yang menggantikan stdeb
.
Dan banyak referensi bermanfaat:
Butuh bantuan? Lihat itu: