Като frontend към пакетите ползващи debconf като конфигиратор може да използвате пакета configure-debian. При стартирането на едноименната команда се появява списък на тези пакети групирани тематично.
Това става чрез debconf-скриптове, извиквани от maintainer scripts:
# apt-get install base-files Preparing to replace base-files 3.0.5 (using .../base-files_3.0.6_i386.deb)... Unpacking replacement base-files ... Setting up base-files (3.0.6) ... Configuration file `/etc/profile' ==> Modified (by you or by a script) since installation. ==> Package distributor has shipped an updated version. What would you like to do about it ? Your options are: Y or I : install the package maintainer's version N or O : keep your currently-installed version D : show the differences between the versions Z : background this process to examine the situation The default action is to keep your current version. *** profile (Y/I/N/O/D/Z) [default=N] ? I Installing new version of config file /etc/profile ...
Divertions на файлове е начин да се укаже на dpkg(8) да инсталира даден файл или файлове от даден пакет не точно на неговото място, а на друго, с цел добавяне на някаква допълнителна функционалност. Обикновено от maintainer scripts се извиква dpkg-divert(8), така щото файлове от даден пакет да могат да бъдат модифицирани при инсталирането или премахването на този пакет. Това например се наблюдава при инсталирането и премахването на пакета dpkg-cross. Нека преди да инсталираме dpkg-cross да направим следната проверка, т.е. с кой пакет идва скрипта /usr/bin/dpkg-buildpackage:
# dpkg -S /usr/bin/dpkg-buildpackage dpkg-dev: /usr/bin/dpkg-buildpackage
Нека сега да инсталираме dpkg-cross и да наблюдаваме неговото поведение:
# apt-get install dpkg-cross Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: dpkg-cross 0 packages upgraded, 1 newly installed, 0 to remove and 19 not upgraded. Need to get 43.7kB of archives. After unpacking 205kB will be used. Get:1 ftp://ftp.de.debian.org stable/main dpkg-cross 1.13.1 [43.7kB] Fetched 43.7kB in 27s (1607B/s) Selecting previously deselected package dpkg-cross. (Reading database ... 154258 files and directories currently installed.) Unpacking dpkg-cross (from .../dpkg-cross_1.13.1_all.deb) ... Adding `diversion of /usr/bin/dpkg-buildpackage to /usr/bin/dpkg-buildpackage.orig by dpkg-cross' Adding `diversion of /usr/bin/dpkg-shlibdeps to /usr/bin/dpkg-shlibdeps.orig by dpkg-cross' Setting up dpkg-cross (1.13.1) ... Updating Debian Packages of System Configurations.
Обърнете внимание какво ни се съобщава с реда Adding diversion.... Файлът /usr/bin/dpkg-buildpackage е бил преименуван на /usr/bin/dpkg-buildpackage.orig, т.е. заместен с друга версия на този файл, идваща с пакета dpkg-cross. Това се прави от неговия postinst-скрипт, който освен в директория debian в сорс пакета можете да намерите и в /var/lib/dpkg/info/dpkg-cross.postinst, след неговото инсталиране, разбира се. Този файл ще бъде върнат в предишното си състояние при премахването на пакета dpkg-cross. Това се прави от неговия prerm-скрипт. Този diversion, извършван от dpkg-cross, в случая е необходим, за да се модифицира скрипта dpkg-buildpackage, така че да може да поддържа крос-компилиране. За повече детайли вижте документацията на dpkg-cross. Забележете, че dpkg-cross изисква наличието на пакета dpkg-dev, в който се съдържа оригиналния скрипт /usr/bin/dpkg-buildpackage и който ще бъде модифициран:
# apt-cache show dpkg-cross | grep Depends Depends: dpkg-dev, perl5 | perl
След като сме инсталирали dpkg-cross, проверяваме какво ще ни каже dpkg -S за /usr/bin/dpkg-buildpackage:
# dpkg -S /usr/bin/dpkg-buildpackage diversion by dpkg-cross from: /usr/bin/dpkg-buildpackage diversion by dpkg-cross to: /usr/bin/dpkg-buildpackage.orig dpkg-cross, dpkg-dev: /usr/bin/dpkg-buildpackage
Т.е. вече е регистриран факта за модификацията на оригиналния скрипт /usr/bin/dpkg-buildpackage и потребителя се информира за това, когато попита с dpkg -S.
Нека сега премахнем пакета dpkg-cross и пак да наблюдаваме какво става:
# apt-get --purge remove dpkg-cross Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: dpkg-cross* 0 packages upgraded, 0 newly installed, 1 to remove and 19 not upgraded. Need to get 0B of archives. After unpacking 205kB will be freed. Do you want to continue? [Y/n] (Reading database ... 154276 files and directories currently installed.) Removing dpkg-cross ... Removing `diversion of /usr/bin/dpkg-buildpackage to /usr/bin/dpkg-buildpackage.orig by dpkg-cross' Removing `diversion of /usr/bin/dpkg-shlibdeps to /usr/bin/dpkg-shlibdeps.orig by dpkg-cross' Purging configuration files for dpkg-cross ... Updating Debian Packages of System Configurations.
Обърнете внимание, че вече ни се съобщава за Removing diversion .... Т.е. нещата се връщат наистина в изходна позиция. Естествено, пак ще попитаме:
# dpkg -S /usr/bin/dpkg-buildpackage dpkg-dev: /usr/bin/dpkg-buildpackage
Вече се съобщава само за dpkg-dev и нямаме наличието на diversion, която беше добавена от dpkg-cross. Т.е. след тези гимнастики имаме чисто премахване, въпреки промените и по файлове от чужди пакети, осъществавяни от dpkg-cross.
Реализацията с код на това не е сложна, разбира се. Важното е, че е
предвиден и подобен начин на модификация на файловете, идващи с
пакетите.