Saya akhirnya berurusan dengan perangkat lunak yang dimaksudkan untuk digunakan menggunakan dpkg. Paket deb. Bekerja dengan baik pada tes env tetapi gagal pada pementasan. Keduanya menjalankan versi yang sama dari Ubuntu tetapi saya tidak 100% yakin dari sisa konfigurasi. Bagaimana cara men-debug masalah dpkg ini lebih lanjut?
Instalasi gagal seperti ini:
sudo dpkg -i --debug=7337 package.deb
D000010: ensure_pathname_nonexisting `/var/lib/dpkg/tmp.ci'
(Reading database ... 201812 files and directories currently installed.)
Unpacking myProprietarySoftware (from package.deb) ...
D000001: process_archive oldversionstatus=not installed
D000002: fork/exec /var/lib/dpkg/tmp.ci/preinst ( install )
dpkg: error processing package.deb (--install):
subprocess new pre-installation script returned error exit status 1
D000002: maintainer_script_new nonexistent postrm `/var/lib/dpkg/tmp.ci/postrm'
D000010: ensure_pathname_nonexisting `/var/lib/dpkg/tmp.ci'
D000010: ensure_pathname_nonexisting running rm -rf
D000010: ensure_pathname_nonexisting `/var/lib/dpkg/reassemble.deb'
Errors were encountered while processing:
package.deb
Jawaban:
Skrip .preinst paket gagal karena beberapa alasan.
Untuk mengetahui alasannya, periksa skrip di
/var/lib/dpkg/info/PACKAGENAME.preinst
Jika Anda ingin melihat secara tepat pada baris mana script gagal, edit skrip .preinst dan tambahkan
set -x
segera setelah#!
baris. Ini mengaktifkan penelusuran penelusuran di skrip.CATATAN: Ini mengasumsikan bahwa skrip .preinst adalah skrip shell (baik posix sh atau bash). Hampir semua skrip .preinst (dan .postinst, .prerm, dan .postrm) adalah skrip shell tetapi tidak harus, skrip tersebut dapat dieksekusi. mis. pada mesin desktop utama saya dengan 9104 paket yang diinstal, 14 adalah skrip perl, 1 adalah executable yang dikompilasi (bash's preinst - tidak dapat mengasumsikan ada shell yang berfungsi sudah diinstal), dan semua sisanya adalah skrip shell ... 9041 adalah skrip POSIX shell, 63 adalah skrip bash. Jika .preinst adalah perl atau python atau yang lainnya, Anda harus mencari cara untuk mengaktifkan mode penelusuran debug atau eksekusi atau serupa dalam bahasa itu.
Kemudian jalankan
dpkg --configure --pending
.Ini akan menyebabkan dpkg mencoba mengkonfigurasi paket yang setengah terinstal. JANGAN instal ulang dengan
dpkg -i
, yang akan menimpa skrip .preinst Anda yang telah diedit dengan versi dalam paket .deb.Ini mungkin memberi Anda informasi yang cukup untuk memperbaiki masalah. Ini mungkin sesuatu yang sederhana seperti kode keluar yang tidak terduga atau tidak tertangkap dari suatu program (kebanyakan skrip .preinst dll
set -e
, untuk membuatnya berakhir pada kesalahan pertama), atau dengan asumsi bahwa direktori sudah ada (dan ini mungkin karena ketergantungan yang tidak dideklarasikan dalam file debian / control paket - artinya harus bergantung pada foo tetapi tidak menginstal saja foo)Setelah diperbaiki, jalankan
dpkg --configure --pending
lagi, dan paket harus diinstal dengan benar.Jika skrip .preinst bermasalah, ada kemungkinan masuk akal bahwa skrip .postinst (dan / atau .prerm dan .postrm) juga. Anda mungkin perlu memperbaikinya juga.
Jangan lupa untuk mengirimkan laporan bug kepada siapa pun yang membuat paket sehingga mereka dapat memperbaikinya.
sumber
Perangkat lunak Anda yang dikemas menyertakan "skrip pra-instalasi" (pra-instal) yang gagal. Ini adalah skrip shell yang tertanam dalam file deb. Anda dapat mengekstraknya dengan:
Kemudian Anda dapat melihat
out-dir/preinst
dan melihat apakah Anda dapat mengetahui mengapa itu gagal.Jika Anda ingin memodifikasi skrip itu dan membangun kembali
.deb
(mungkin untuk menambahkan beberapa kode debug), cobasumber
Anda perlu mengekstrak file dan melihat mengapa
preinst
skrip keluar dengan kode1
.Tidak yakin apakah ada diskusi tentang UNIX.SE terkait dengan cara melakukan ini, tetapi Anda dapat melihat pertanyaan ini dari AskUbuntu untuk mendapatkan ide tentang cara mengekstrak.
Setelah ini, Anda harus menjalankan
preinst
skrip secara manual untuk melihat mengapa instalasi paket gagal.sumber
Jika Anda ingin mengedit paket langsung coba ini:
Sumber: http://ubuntuforums.org/showthread.php?t=636724
sumber
control
file (dan membangun kembali paket), bukanpreinst
skrip per masalah OP.