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.
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~.
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.
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 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.
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 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.
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.