dpkg-maintscript-helper(1)

NAMN
dpkg-maintscript-helper - går runt kända dpkg-begränsningar i paketskript

SYNOPS
dpkg-maintscript-helper kommando [flagga...] -- maint-script-flagga...

KOMMANDON OCH PARAMETRAR

rm_conffile konffil [senasteversion [paket]]

mv_conffile gammalkonffil nykonffil [senasteverison [paket]]

BESKRIVNING

Programmet skrevs för att köras i paketskript för att utföra en del åtgärder som dpkg (ännu) inte själv kan hantera, antingen på grund av designval eller på grund av nuvarande begränsningar.

Många av dessa åtgärder kräver samordnade åtgärder från flera paketskript (preint, postinst, prerm, postrm). För att undvika misstag räcker det att lägga in ett och samma anrop i alla skript, varpå programmet anpassar sitt beteende beroende på miljövariabeln DPKG_MAINTSCRIPT_NAME och på paketskriptets parametrar, vilka du måste vidaresända efter dubbla bindestreck.

KONFFIL-RELATERADE ÅTGÄRDER

När ett paket uppgraders kommer dpkg inte att automatiskt ta bort en konffil (en konfigurationsfil för vilken dpkg skall behålla användarens ändringar) om den inte finns i den nya versionen. Det finns två grundläggande skäl till detta; den första är att konffilen kan ha tappats av misstag och nästa version kan komma att återställa den, varpå användaren inte vill tappa sina ändringar. Den andra är att för att göra det möjligt för paket att gå över från en dpkg-hanterad konffil till en fil som hanteras av paketets skript, vanligtvis genom ett verktyg som debconf eller ucf.

Det innebär att, om paketet menar att byta namn eller ta bort en konfigurationsfil, så måste det göra så explicit, och då kan dpkg-maintscript-helper användas för att implementera en elegant borttagning och flyttning av konffiler i paketscripten.

  TA BORT EN KONFFIL

Om en konffil helt tas bort bör den tas bort från disk, såvida inte användaren har modifierat den. Om det finns lokala ändringar bör de bibehållas. Om paketuppgraderingen avbryts bör inte konffilen som just blev föråldras försvinna.

Allt detta implementeras genom att lägga in följande skalkod i paketskripten preinst, postinst och postrm:

    dpkg-maintscript-helper rm_conffile \
        konffil senasteversion paket -- "$@"

konffil är filnamnet på den konffil som skall tas bort. senasteversion är den senaste versionen av paketet som innehöll konffilen (eller den senaste versionen av paketet som inte tog hand om att ta bort den överblivna konffilen om detta inte omedelbart implementerades). Om senasteversion är tomt eller inte angivits försöks operationen varje gång paketet uppgraderas. paket är paketnamnet, det är frivilligt eftersom det faller tillbaka på $DPKG_MAINSTCRIPT_PACKAGE (variabeln sätts av dpkg till namnet på det paket som behandlas). Alla paramerar till paketskriptet måste vidaresändas till programmet efter "--".

Aktuell implementation: i preinst kontrolleras om konffilen ändrades och i så fall byts namnet på den till antingen konffil.dpkg-remove (om inte modifierad) eller till konffil.dpkg-backup (om modifierad). I postinst byts namnet på den sistnämnda filen till konffil.dpkg-bak och behålls som referens om den innehåller ändringar av användaren, medan den tidigare kommer att tas bort. Om paketuppgraderingen avbryts kommer postrm att ominstallera den ursprungliga konffilen. Vid borttagning kommer postrm även att ta bort .dpkg-bak-filen som behållits fram till dess.

  BYTA NAMN PÅ EN KONFFIL

Om en konffil flyttas från en plats till en annan måste du se till att du flyttar med eventuella ändringar gjorda av användaren. Detta kan först verka vara en enkel ändring av preinst-skriptet, men det kommer leda till att användaren ombeds att godkänna ändringar i konffilen för dpkg, även om denne inte är ansvarig för dem.

En elegant namnändring kan implementeras genom att lägga in följande skalkod i paketskripten preinst, postinst och postrm:

    dpkg-maintscript-helper mv_conffile \
        gammalkonffil nykonffil senasteversion paket -- "$@"

gammalkonffil och nykonffil är det gamla och nya namnet på konffilen vars namn skall bytas. senasteversion är den senaste versionen av paketet som innehöll konffilen med dess gamla namn. Om senasteversion är tom eller inte har angivits kommer operationen att försökas varje gång paketet uppgraderas (observera: det är säkrare att ange versionen och därmed endast utföra operationen en gång). paket är paketnamnet, det är frivilligt eftersom det faller tillbaka på $DPKG_MAINSTCRIPT_PACKAGE (variabeln sätts av dpkg till namnet på det paket som behandlas). Alla paramerar till paketskriptet måste vidaresändas till programmet efter "--".

Aktuell implementation: I preinst kontrolleras om konffilen har ändrats, om ja lämnas den kvar på plats, annars byts namnet på den till gammalkonffil.dpkg-remove. Vid konfigurering tar postinst bort gammalkonffil.dpkg-remove och byter namn på gammalkonffil till nykonffil om gammalkonffil fortfarande finns. Vid avbruten uppgradering eller installation byter postrm tillbaka namnet från gammalkonffil.dpkg-remove till gammalkonffil om så behövs.

INTEGRERA I PAKET

Givet att dpkg-maintscript-helper används i preinst så innebär detta villkorslöst att ett förhandsberoende ("pre-dependency") krävs för att försäkra att den nödvändiga versionen av dpkg redan har packats upp. Den version som krävs beror på vilket kommando som används, för rm_conffile och mv_conffile är det 1.15.7.2:

    Pre-Depends: dpkg (>= 1.15.7.2)

Men i många fall är operationen som utförs av programmet inte kritiskt för paketet, och istället för att använda ett förhandsberoende kan vi anropa programmet endast om vi vet att det nödvändiga kommandot stöds av den nu installerade dpkg:

    if dpkg-maintscript-helper supports kommando; then
        dpkg-maintscript-helper kommando ...
    fi

FÖRFATTARE
Upphovsrättsskyddat © 2010 Raphaël Hertzog
Upphovsrättsskyddat © 2008 Joey Hess
Upphovsrättsskyddat © 2007 Guillem Jover
Upphovsrättsskyddat © 2005 Scott James Remnant

Detta är fri programvara; se GNU General Public License version 2 eller senare för kopieringsvillkor. Det finns INGEN GARANTI.

ÖVERSÄTTNING
Peter Krefting och Daniel Nylander.