Provided by: dpkg_1.19.7ubuntu3.2_amd64 

NAAM
dpkg-maintscript-helper - omzeilt in de scripts van de onderhouder gekende beperkingen van dpkg
OVERZICHT
dpkg-maintscript-helper commando [parameter...] -- onderhouderscriptparameter...
COMMANDO'S EN PARAMETERS
supports commando
rm_conffile configuratiebestand [vorige-versie [pakket]]
mv_conffile oud-configuratiebestand nieuw-configuratiebestand [vorige-versie [pakket]]
symlink_to_dir padnaam oud-doel [vorige-versie [pakket]]
dir_to_symlink padnaam nieuw-doel [vorige-versie [pakket]]
BESCHRIJVING
Dit programma is ontwikkeld om uitgevoerd te worden binnenin onderhouderscripts om sommige taken te
verrichten die dpkg (nog) niet alleen kan uitvoeren, ofwel omwille van gemaakte keuzes inzake design
ofwel ten gevolge van actuele beperkingen.
Veel van deze taken vereisen gecoördineerde actie van verschillende onderhouderscripts (preinst,
postinst, prerm, postrm). Om fouten te vermijden moet gewoon dezelfde aanroep in alle scripts geplaatst
worden en het programma zal zijn gedrag automatisch aan passen op basis van de omgevingsvariabele
DPKG_MAINTSCRIPT_NAME en de argumenten van de onderhouderscripts die na een dubbel koppelteken opgegeven
moeten worden.
GEMEENSCHAPPELIJKE PARAMETERS
vorige-versie
Definieert de laatste versie van het pakket waarvan de opwaardering de operatie moet uitlokken.
Het is belangrijk om vorige-versie correct te berekenen, zodat de operaties correct uitgevoerd
worden zelfs in het geval de gebruiker het pakket met een lokaal versienummer herbouwde. Indien
vorige-versie leeg of weggelaten is, dan wordt geprobeerd om bij elke opwaardering de operatie uit
te voeren (merk op dat het veiliger is om de versie op te geven zodat slechts eenmaal geprobeerd
wordt om de operatie uit te voeren).
Indien sinds verschillende versies geen configuratiebestand meer meegeleverd werd en u nu de
scripts van de pakketonderhouder aan het wijzigen bent om het verouderde bestand op te ruimen,
moet vorige-versie ingesteld worden op de versie van het pakket dat u nu aan het voorbereiden
bent, niet op de eerste versie van het pakket zonder het configuratiebestand. Dit geldt op
dezelfde wijze voor alle andere acties.
Voor een configuratiebestand dat in de versie 2.0-1 van een pakket verwijderd werd, moet
vorige-versie ingesteld worden op 2.0-1~. Dit heeft tot effect dat het configuratiebestand
verwijderd wordt, zelfs als de gebruiker de vorige versie 1.0-1 herbouwde als 1.0-1lokaal1. En in
het geval waarin in een pakket een pad eerst een symbolische koppeling was (bij versie 1.0-1) en
later een map werd (bij versie 2.0-1), maar u pas in versie 3.0-1 de eigenlijke omschakeling
doorvoert in de scripts van de pakketonderhouder, moet vorige-versie ingesteld worden op 3.0-1~.
pakket De pakketnaam met die padnaam/namen. Als het pakket “Multi-Arch: same” is, moet deze parameter de
architectuurkwalificatie bevatten, anders zou er gewoonlijk geen architectuurkwalificatie in
moeten voorkomen (aangezien dit geen cross-grades zou toelaten, of de omschakeling van
architectuurspecifiek naar architectuur all en vice versa). Indien de parameter leeg is of
weggelaten werd, zullen de omgevingsvariabelen DPKG_MAINTSCRIPT_PACKAGE en DPKG_MAINTSCRIPT_ARCH
(zoals die door dpkg ingesteld werden bij het uitvoeren van de scripts van de onderhouder)
gebruikt worden om een pakketnaam met architectuurkwalificatie te genereren.
-- Alle parameters van de scripts van de pakketonderhouder moeten doorgegeven worden aan het
programma na --.
TAKEN IN VERBAND MET CONFIGURATIEBESTANDEN
Bij het opwaarderen van een pakket zal dpkg niet automatisch een conffile (configuratiebestand) (conffile
= een configuratiebestand waarin dpkg door de gebruiker gemaakte aanpassingen moet behouden) verwijderen
indien dat niet in de nieuwe versie voorkomt. Daarvoor zijn twee belangrijke redenen. De eerste is dat
het configuratiebestand per ongeluk weggevallen kan zijn en dat de volgende versie dit zou kunnen
herstellen en dat gebruikers hun aanpassingen niet graag verloren zouden zien gaan. De tweede is om
pakketten de mogelijkheid te bieden om over te gaan van een door dpkg onderhouden configuratiebestand
naar een bestand dat onderhouden wordt door de scripts van de pakketonderhouder, meestal met behulp van
gereedschap zoals debconf of ucf.
Dit houdt in dat indien een pakket de bedoeling heeft om een conffile (configuratiebestand) te hernoemen
of te verwijderen, het dit expliciet moet doen en dat dpkg-maintscript-helper kan gebruikt worden in
scripts van de pakketonderhouder om het verwijderen en verplaatsen van conffiles op een elegante manier
uit te voeren.
Een configuratiebestand verwijderen
Indien een configuratiebestand volledig verwijderd wordt, moet het van schijf verwijderd worden, tenzij
de gebruiker het aangepast heeft. Indien er lokale aanpassingen aangebracht werden, moeten die behouden
blijven. Indien het opwaarderen van het pakket afbreekt, mag het pas in onbruik geraakte
configuratiebestand niet verdwijnen.
Dit alles wordt toegepast door het volgende shell-fragment te plaatsen in de scripts preinst, postinst en
postrm van de pakketonderhouder:
dpkg-maintscript-helper rm_conffile \
configuratiebestand vorige-versie pakket -- "$@"
configuratiebestand is de bestandsnaam van het te verwijderen configuratiebestand.
Huidige toepassing: in het script preinst controleert het of het configuratiebestand gewijzigd werd en
hernoemt het ofwel naar configuratiebestand.dpkg-remove (als het niet gewijzigd was) of naar
configuratiebestand.dpkg-backup (als het wel gewijzigd was). In het script postinst wordt dit laatste
bestand hernoemd naar configuratiebestand.dpkg-bak en het wordt ter referentie behouden vermits het door
de gebruiker gemaakte aanpassingen bevat. In het eerste geval (niet gewijzigd configuratiebestand) wordt
het bestand verwijderd. Indien de opwaardering van het pakket afbreekt, herinstalleert het script postrm
het originele configuratiebestand. Tijdens het uitvoeren van een wisopdracht (purge) zal het script
postrm ook het tot dan bewaarde bestand .dpkg-bak verwijderen.
Een configuratiebestand hernoemen
Indien een configuratiebestand verplaatst wordt van de ene locatie naar een andere, moet u er voor zorgen
dat eventuele wijzigingen die de gebruiker maakte mee gaan. Op het eerste gezicht kan dit lijken op een
eenvoudige aanpassing aan het script preinst. Dat zal evenwel als resultaat hebben dat de gebruiker door
dpkg gevraagd wordt om de aanpassingen aan het configuratiebestand goed te keuren, al heeft hij er in dit
geval niets mee te maken.
Een vlotte manier van hernoemen kan gerealiseerd worden door het volgende shell-fragment te plaatsen in
de scripts preinst, postinst en postrm van de pakketonderhouder:
dpkg-maintscript-helper mv_conffile \
oud-configuratiebestand nieuw-configuratiebestand vorige-versie pakket -- "$@"
oud-configuratiebestand en nieuw-configuratiebestand zijn de oude en de nieuwe naam van het
configuratiebestand dat hernoemd moet worden.
Huidige toepassing: het script preinst controleert of het configuratiebestand gewijzigd werd. Indien dat
het geval is wordt het gelaten waar het is, anders wordt het hernoemd naar
oud-configuratiebestand.dpkg-remove. Bij het configureren verwijdert het script postinst
oud-configuratiebestand.dpkg-remove en hernoemt oud-configuratiebestand naar nieuw-configuratiebestand
als oud-configuratiebestand nog steeds voorhanden is. Bij abort-upgrade/abort-install (afbreken van de
opwaardering/installatie) hernoemt het script postrm zo nodig oud-configuratiebestand.dpkg-remove terug
naar oud-configuratiebestand.
OMSCHAKELEN TUSSEN SYMBOLISCHE KOPPELING EN MAP
Bij het opwaarderen van een pakket zal dpkg niet automatisch een symbolische koppeling omzetten naar een
map of vice versa. Degradaties worden niet ondersteund en het pad wordt onveranderd gelaten.
Een symbolische koppeling omzetten naar een map
Indien een symbolische koppeling veranderd wordt naar een echte map, moet u er voor zorgen dat de
symbolische koppeling verwijderd wordt voor het uitpakken. Op het eerste gezicht kan dit een eenvoudige
wijziging in het script preinst lijken. Nochtans kan dit enige problemen opleveren in het geval de
systeembeheerder de symbolische koppeling lokaal aanpaste of bij een degradatie van het pakket.
Een vlotte manier van hernoemen kan gerealiseerd worden door het volgende shell-fragment te plaatsen in
de scripts preinst, postinst en postrm van de pakketonderhouder:
dpkg-maintscript-helper symlink_to_dir \
padnaam oud-doel vorige-versie pakket -- "$@"
padnaam is de absolute naam van de oude symbolische koppeling (op het einde van de installatie zal het
pad een map zijn) en oud-doel is de naam van het doel van de vroegere symbolische koppeling in padnaam.
Die kan ofwel absoluut zijn ofwel relatief ten opzichte van de map die padnaam bevat.
Huidige toepassing: het script preinst gaat na of de symbolische koppeling bestaat en verwijst naar
oud-doel. Is dit niet het geval dan wordt ze gerust gelaten. Anders wordt ze hernoemd naar
padnaam.dpkg-backup. Tijdens het configureren verwijdert het script postinst padnaam.dpkg-backup indien
padnaam.dpkg-backup nog steeds een symbolische koppeling is. Bij een abort-upgrade/abort-install
(afbreken van de opwaardering/installatie) hernoemt het script postrm padnaam.dpkg-backup zo nodig terug
naar padnaam.
Een map omzetten naar een symbolische koppelling
Indien een echte map omgezet wordt naar een symbolische koppeling, moet u ervoor zorgen dat de map
verwijderd wordt voor het uitpakken. Dit kan op het eerste gezicht een eenvoudige aanpassing aan het
script preinst lijken. Nochtans kan dit enige problemen opleveren in het geval de map conffiles
(configuratiebestanden) bevat, padnamen die eigendom zijn van andere pakketten of lokaal aangemaakte
padnamen, of in het geval het pakket gedegradeerd wordt.
Een elegante omschakeling kan gerealiseerd worden door het volgende shell-fragment op te nemen in de
scripts preinst, postinst en postrm van de pakketonderhouder:
dpkg-maintscript-helper dir_to_symlink \
padnaam nieuw-doel vorige-versie pakket -- "$@"
padnaam is de absolute naam van de oude map (het pad zal op het einde van de installatie een symbolische
koppeling zijn) en nieuw-doel is het doel van de nieuwe symbolische koppeling in padnaam. Dit kan ofwel
absoluut of relatief zijn ten opzichte van de map die padnaam bevat.
Huidige toepassing: het script preinst controleert of de map bestaat en geen conffiles
(configuratiebestanden), padnamen die eigendom zijn van andere pakketten of lokaal aangemaakte padnamen
bevat. Is dat niet het geval, dan wordt ze gerust gelaten. Anders wordt ze hernoemd naar
padnaam.dpkg-backup en wordt een lege voorlopige map padnaam aangemaakt die met een bestand gemarkeerd
wordt, zodat dpkg ze kan opvolgen. Tijdens het configureren beëindigt het script postinst de overgang
indien padnaam.dpkg-backup nog steeds een map is en padnaam de voorlopige map. Het verwijdert het bestand
dat de voorlopige map markeert en verplaatst de zopas in de map aangemaakte bestanden naar het doel van
de symbolische koppeling nieuw-doel/, vervangt de nu lege voorlopige map padnaam door een symbolische
koppeling naar nieuw-doel en verwijdert padnaam.dpkg-backup. In geval van abort-upgrade/abort-install
(afbreken van de opwaardering/installatie) hernoemt het script postrm zo nodig padnaam.dpkg-backup terug
naar padnaam.
DE INTEGRATIE IN PAKKETTEN
Gelieve bij het gebruiken van een hulpmiddel voor het verpakken na te gaan of er geen systeemeigen
integratie in dpkg-maintscript-helper van bestaat, wat het leven voor u makkelijker zou maken. Zie
bijvoorbeeld dh_installdeb(1).
Gegeven het feit dat dpkg-maintscript-helper gebruikt wordt in het script preinst, houdt een
onvoorwaardelijk gebruik ervan een voorafgaande vereiste in om te kunnen garanderen dat de benodigde
versie van dpkg voordien uitgepakt werd. De benodigde versie hangt af van het gebruikte commando. Voor
rm_conffile en mv_conffile is dat 1.15.7.2. Voor symlink_to_dir en dir_to_symlink is dat 1.17.14:
Pre-Depends: dpkg (>= 1.17.14)
Maar in veel gevallen is de operatie die door het programma uitgevoerd wordt, niet kritiek van aard voor
het pakket en in plaats van een voorafgaande vereiste te gebruiken, kunnen we ook het programma pas
aanroepen als we weten dat het benodigde programma ondersteund wordt door de huidige geïnstalleerde
versie van dpkg:
if dpkg-maintscript-helper supports commando; then
dpkg-maintscript-helper commando ...
fi
Het commando supports geeft in geval van succes een 0 terug en anders een 1. Het commando supports gaat
na of de omgevingsvariabelen die ingesteld worden door dpkg en die het script nodig heeft, voorhanden
zijn. Indien de omgeving niet voldoet, zal dit als een mislukking beschouwd worden.
OMGEVING
DPKG_COLORS
Stelt de kleurmodus in (sinds dpkg 1.19.1). Waarden die momenteel gebruikt mogen worden zijn: auto
(standaard), always en never.
ZIE OOK
dh_installdeb(1).
1.19.7 2022-05-25 dpkg-maintscript-helper(1)