Niedawno zacząłem pakować część mojego oprogramowania i publikować je na Launchpad. Instalacja i usuwanie działa dobrze, ale aktualizacja pakietu z jednej wersji do następnej jest problematyczna.
Problem polega na tym, że niektóre skrypty muszą zostać uruchomione tylko podczas pierwszej instalacji pakietu. Skrypty te wypełniają bazę danych, tworzą użytkownika itp. Obecnie są wywoływane w configure)
sekcji package.postinst . Jednak powoduje to, że są one wywoływane podczas aktualizacji, a także pokazane na schemacie .
Czy istnieje sposób na dołączenie skryptu opiekuna do pakietu .deb, który jest wykonywany tylko podczas pierwszej instalacji pakietu, a nie podczas aktualizacji? Lub jaki byłby elegancki sposób na włączenie niektórych skryptów konfiguracji początkowej do pakietu .deb?
źródło
Możesz być w stanie użyć skryptu debian / preinst w połączeniu z postinst.
W skrypcie wstępnym sprawdź, czy plik, który zdecydowanie instaluje pkg. Jeśli jest obecny, nie rób nic (ponieważ pakiet był wcześniej zainstalowany), w przeciwnym razie wykonaj kroki instalacji.
Jeśli kroki instalacji wymagają zainstalowania pakietu pkg (w takim przypadku powyższe nie zadziała, ponieważ preinstalacja jest uruchamiana przed instalacją), wówczas skrypt preinst może zapisać plik, na przykład: / tmp / setupmypkg. Twój skrypt postinst może po prostu przetestować, czy ten plik jest obecny, a jeśli tak, wykonaj dwie czynności:
źródło
Odkryłem, że testowanie za 2 USD w skrypcie „postinst config” nie działa poprawnie, jeśli już wcześniej zainstalowałeś swój pakiet, a następnie odinstalowałeś go (ale bez czyszczenia), a następnie spróbuj ponownie zainstalować. W takim przypadku skrypt postinst nadal otrzymuje argument wersji dla kroku „konfiguracja postinst”.
Jednak jeśli wcześniej zainstalowałeś pakiet, usuń ORAZ wyczyść go, a następnie zainstaluj ponownie, skrypt „postinst config” NIE dostanie argumentu wersji w 2 $
źródło
Nie sądzę, ale możesz łatwo zmodyfikować skrypty preinst / postinst, aby sprawdzić, czy pakiet jest instalowany po raz pierwszy i podjąć standardowe działania.
Może być coś takiego
na wstępie.
w postinst,
Edytować
Hmm, być może możesz to wszystko sprawdzić bezpośrednio w postinst, ponieważ myślę, że dpkg nie ustawiłby statusu pakietu jako zainstalowany przed uruchomieniem postinst, ale nie jestem pewien. Aby powyższe mogło przyjść,
w postinst,
Gdzie is_package_installed może być funkcją wykrywania stanu instalacji. Może być coś w stylu „dpkg --status nazwa_pakietu”
LUB
Dlaczego nie po prostu sprawdzić, czy zmiany, które chcesz wprowadzić, już istnieją, i postępuj tylko, jeśli ich nie ma.
źródło