Perintah utama untuk memanipulasi paket deb adalah dpkg-deb
.
Untuk membongkar paket, buat direktori kosong dan pindah ke sana, kemudian jalankan dpkg-deb
untuk mengekstrak informasi kontrol dan file paket. Gunakan dpkg-deb -b
untuk membangun kembali paket.
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Berhati-hatilah karena kecuali skrip Anda dijalankan sebagai root, izin dan kepemilikan file akan rusak pada tahap ekstraksi. Salah satu cara untuk menghindari ini adalah dengan menjalankan skrip Anda di bawah fakeroot
. Perhatikan bahwa Anda perlu menjalankan seluruh urutan di bawah fakeroot
, tidak masing dpkg-deb
- masing secara individual, karena fakeroot
proses itulah yang membuat memori izin file yang tidak dapat dibuat seperti mereka.
fakeroot sh -c '
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
'
Daripada mengacaukan izin, Anda dapat menjaga arsip data tetap utuh dan hanya memodifikasi arsip kontrol. dpkg-deb
tidak menyediakan cara untuk melakukan itu. Untungnya, paket deb dalam format standar: mereka ar
arsip. Jadi, Anda dapat menggunakan ar
untuk mengekstrak arsip kontrol, memodifikasi file-nya, dan menggunakan ar
lagi untuk mengganti arsip kontrol dengan versi baru.
mkdir tmp
cd tmp
ar p ../original.deb control.tar.gz | tar -xz
# edit postinst
cp ../original.deb ../fixed.deb
tar czf control.tar.gz *[!z]
ar r ../fixed.deb control.tar.gz
Anda harus menambahkan entri changelog dan mengubah nomor versi jika Anda memodifikasi sesuatu di dalam paket. Infrastruktur untuk memanipulasi paket Debian mengasumsikan bahwa jika dua paket memiliki nama dan versi yang sama, mereka paket yang sama. Tambahkan akhiran ke bagian debian_revision di akhir nomor versi; untuk alasan penyortiran, akhiran harus dimulai dengan ~
, misalnya 1.2.3-4.1
menjadi 1.2.3-4.1~johnjumper1
.
Alih-alih menggunakan alat shell, Anda dapat menggunakan Emacs. The dpkg-dev-el
paket (yang merupakan hulu sendiri karena ini adalah paket Debian asli) berisi mode untuk mengedit .deb
file dan mengedit changelogs Debian. Emacs dapat digunakan secara interaktif atau ditulis.
-e
saklar fpm untuk mengubah file control:fpm -e -s deb -t deb ../old.deb
. Ini akan membuka file kontrol di editor Anda.fakeroot bash
dan mencoba mengeluarkan perintah tidak akan berhasil mengenai kepemilikan, danar
metode ini sangat cepat untuk file deb besar!dpkg-deb -R
mode disimpan dandpkg-deb -b
resetuid:gid
file yang diekstraksi0:0
. Tidak perlu fakeroot (saya kira mungkin ada masalah jika ada set {u, g} id file di dalam arsip tapi itu tidak terjadi dalam situasi saya./etc
atau/var
yang perlu milik grup tertentu.Anda dapat menggunakan fpm dengan
--after-install
opsi untuk menggantipostinst
skrip, seperti ini:sumber