Baru-baru ini saya mulai mengemas beberapa perangkat lunak saya dan menerbitkannya di Launchpad. Instalasi dan penghapusan berfungsi dengan baik, tetapi memutakhirkan paket dari satu versi ke versi berikutnya bermasalah.
Masalahnya adalah bahwa ada beberapa skrip yang hanya perlu dijalankan saat instalasi pertama dari paket. Script-script ini mengisi DB, membuat pengguna, dll. Mereka saat ini dipanggil di bagian package.postinst configure)
. Namun ini menghasilkan mereka dipanggil saat upgrade serta ditunjukkan dalam diagram .
Apakah ada cara untuk memasukkan skrip pengelola ke dalam paket .deb yang hanya dijalankan saat instalasi pertama dari paket dan tidak selama pembaruan? Atau apa yang akan menjadi cara yang elegan untuk memasukkan beberapa skrip pengaturan awal dalam paket .deb?
sumber
Anda mungkin dapat menggunakan skrip debian / preinst dalam kombinasi dengan postinst.
Di skrip awal, periksa file yang pasti diinstal pkg Anda. Jika ada, jangan lakukan apa pun (karena paket Anda sebelumnya diinstal), jika tidak, lakukan langkah-langkah pengaturan Anda.
Jika langkah-langkah setup Anda mengharuskan pkg Anda diinstal (dalam hal ini di atas tidak akan berfungsi karena preinst berjalan sebelum instalasi), maka skrip preinst Anda dapat menulis file, misalnya: / tmp / setupmypkg. Skrip postinst Anda dapat dengan mudah menguji apakah file itu ada dan jika demikian lakukan dua hal:
sumber
Saya menemukan bahwa pengujian untuk $ 2 dalam skrip "postinst configure" Anda tidak berfungsi dengan baik jika Anda telah menginstal paket Anda sebelumnya, lalu mencopotnya (tetapi tanpa membersihkan), kemudian coba instal ulang lagi. Dalam hal ini, skrip postinst masih mendapatkan argumen versi untuk langkah "postinst configure".
Namun jika Anda telah menginstal paket sebelumnya, kemudian hapus DAN bersihkan, lalu instal kembali, skrip "konfigurasi postinst" TIDAK akan mendapatkan argumen versi dalam $ 2
sumber
Saya rasa tidak, tetapi Anda dapat dengan mudah memodifikasi skrip preinst / postinst untuk memeriksa apakah paket sedang diinstal untuk pertama kalinya dan mengambil tindakan standar.
Mungkin seperti ini,
di awal
di postinst,
Edit
Hmm, mungkin Anda bisa langsung memeriksa semua ini di postinst karena saya pikir dpkg tidak akan mengatur status paket sebagai diinstal sebelum menjalankan postinst tapi saya tidak yakin. Jadi di atas bisa datang,
di postinst,
Di mana, is_package_installed dapat Anda fungsikan untuk mendeteksi status instalasi. Mungkin seperti 'dpkg --status packagename'
ATAU
Mengapa tidak sekadar memeriksa apakah perubahan yang ingin Anda lakukan sudah ada dan hanya melanjutkan jika tidak.
sumber