Když se řekne 'aktualizujte si systém' – co provedete? Většina asi odpoví, že...
yum upgrade
Tento příkaz vám sice aktualizuje systém, ale už vám nedokáže zaktualizovat vaše konfigurační soubory. Ne, že by nechtěl, ale zásadní vlastností rpm
je, že se jedná o neinteraktivní proces. Takže se vás přirozeně nemůže zeptat, jak chcete konfigurační soubory zmergovat.
Takže pokud je nějaký soubor v rpm balíku označen jako konfigurační, mohou nastat tyto tři stavy:
.rpmnew
Pokud jste konfigurační soubor na svém počítači změnili, tak rpm ponechá váš soubor nedotčený a nový konfigurační soubor pojmenuje s příponou .rpmnew
. Takže v používaném konfiguračním souboru je váš původní obsah (který už nemusí fungovat s nově nainstalovanou verzí programu) a v souboru s příponou .rpmnew
je konfigurační soubor nové verze programu, ale bez vašich úprav.
.rpmsave
Pokud si autor balíčku myslí, že by se měla vždy nainstalovat nová verze konfiguračního souboru i za cenu zahození vašich lokálních modifikací (takový přístup se nedoporučuje, ale občas smysl má), tak rpm přejmenuje váš starý soubor, dá mu příponu .rpmsave
a nainstaluje novou verzi konfiguračního souboru. Takové soubory byste měli co nejdříve vyhledat a své změny zapojit do nového souboru.
Soubory s příponou .rpmsave
se vytváří ještě v jednom případě: pokud odinstalujete balík a máte nějaké modifikace v konfiguračním souboru, který vlastní, tak se takový konfigurační soubor jenom přejmenuje s příponou .rpmsave
.
.rpmorig
Pokud instalujete balíček poprvé, ale konfigurační soubor už existuje (např. když jste program před tím manuálně instalovali z tar.gz
), tak je původní soubor přejmenován na .rpmorig
a je vám nainstalován nový konfigurační soubor.
Takže po každé instalaci nebo aktualizaci byste měli vyhledat všechny soubory s příponou .rpmnew
, .rpmsave
a .rpmorig
a jejich obsahy zmergovat. Naštěstí to nemusíte dělat manuálně, ale můžet použít program rpmconf
.
rpmconf
rpmconf
je silně inspirovaný programem debconf
z Debianu, který tam podobné modifikace řeší již v průběhu aktualizace. To si může dovolit, protože Debian má interaktivní aktualizační program. Ve Fedoře je rpmconf je nutné spouštět manuálně až po instalaci/aktualizaci. Má několik parametrů (viz man rpmconf
), ale asi nejlépe uděláte, když ho spustíte jako:
rpmconf -a
Velmi rychle najde výše uvedené soubory a vypíše takovýto text:
# rpmconf -a Configuration file `/etc/cups/cups-browsed.conf' -rw-r--r-- 1 root root 1124 May 29 11:37 /etc/cups/cups-browsed.conf -rw-r--r-- 1 root root 1122 Aug 21 13:43 /etc/cups/cups-browsed.conf.rpmnew ==> 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 M : merge configuration files Z : background this process to examine the situation S : skip this file The default action is to keep your current version. *** aliases (Y/I/N/O/D/Z/S) [default=N] ?
První, co budete chtít udělat, je podívat se na rozdíl mezi soubory. Ten rozdíl bývá zpravidla velmi malý. Zadejte D a Enter. Zobrazení rozdílu ukončíte klávesou q (jedná se o výstup diffu přesměrovaný do less
).
Poté budete chtít zvolit Y, pokud si raději necháte nový konfigurační soubor dodaný distribucí. Nebo N, pokud si chcete ponechat vámi upravenou verzi souboru (to je vůbec nejčastější volba). Třetí možností je soubory spojit. Buď to můžete udělat sami v jiném okně (což osobně preferuji), nebo můžete zvolit Z, situaci ručně vyřešit a příkazem fg
se opět vrátíte do běžícího rpmconf.
Poslední možností je použít nástroj na spojování. Například:
rpmconf -a -fvimdiff
Po stisknutí M spustí na obou souborech vimdiff
. Takže budete mít oba soubory zobrazeny vedle sebe ve vimu, po skončení editace bude ten vlevo zachován, a ten, co byl vpravo, bude smazán. Podobně můžete použít obdobné programy, z nichž mnohé jsou uživatelsky vstřícnější. Podporované jsou gvimdiff
, diffuse
, kdiff3
a meld
.
Pozor na defaultní hodnoty rpmconfu! V případě souboru .rpmnew
je defaultní hodnotou N, v případě .rpmsave
a .rpmorig
je to Y. Toto rozdělení vám většinou umožní jenom mačkat Enter, ale opatrně!
rpmconf je velmi rychlý, protože hledá pouze v konfiguračních souborech nainstalovaných balíků. Ale občas se někam zatoulá soubor .rpmnew
/.rpmsave
, ke kterému nemáte nainstalován balík. Z toho důvodu je dobré jednou za čas ještě spustit:
rpmconf -c
Ten prohledá adresáře /etc
, /var
a /usr
. To je ovšem trochu zdlouhavé. Výstup pak vypadá následovně:
# rpmconf -c These files need merging - you may want to run 'rpmconf -a': initscripts /etc/inittab.rpmsave ca-certificates /etc/pki/tls/certs/ca-bundle.trust.crt.rpmsave ca-certificates /etc/pki/tls/certs/ca-bundle.crt.rpmsave ca-certificates /etc/pki/java/cacerts.rpmsave Skipping files above. Orphaned .rpmnew and .rpmsave files: /etc/yum/pluginconf.d/presto.conf.rpmsave /etc/yum/pluginconf.d/katello.conf.rpmsave /etc/tomcat6/logging.properties.rpmsave /etc/tomcat6/catalina.policy.rpmsave /etc/unbound/root.anchor.rpmsave /etc/lftp.conf.rpmsave /etc/beaker/client.conf.rpmsave /var/spool/hylafax/FIFO.rpmnew /var/lib/mock/fedora-17-x86_64/root/etc/hosts.rpmnew /var/lib/mock/fedora-20-x86_64/root/etc/hosts.rpmnew /var/lib/mock/fedora-19-x86_64/root/etc/hosts.rpmnew /var/lib/mock/fedora-14-x86_64/root/etc/hosts.rpmnew /var/lib/mock/fedora-rawhide-x86_64/root/etc/hosts.rpmnew /var/lib/mock/fedora-18-x86_64/root/etc/hosts.rpmnew /var/lib/mock/fedora-rawhide-i386/root/etc/hosts.rpmnew /var/lib/mock/epel-6-x86_64/root/etc/hosts.rpmnew /usr/share/texlive/texmf/web2c/fmtutil.cnf.rpmsave /usr/share/texlive/texmf/web2c/updmap.cfg.rpmsave Delete these files (Y/n):
Takže příště až budete aktualizovat svůj počítač, už můžete spouštět tuto dvojici příkazů:
yum upgrade rpmconf -a
A budete vědet proč.
11. 9. 2013 at 09:01
Supr shrnuti.
rpmconf jsem ani poradne neznal… Hned je clovek o kousek chytrejsi. Diky!
12. 9. 2013 at 08:13
Souhlasím, velmi dobrý článek.
.rpmsave a .rpmnew jsem vždy hledal přes příkaz find a následně porovnával konfigy přes meld applikaci.
O .rpmorig jsem ani nevěděl….
Tož taky díky 🙂
31. 10. 2013 at 10:59
ahoj,
super nastroj, diky za shrnuti… zarazila mne jedna vec pri pouzivani. kdyz si pustim funkci pro merge a vyskocim, nehlede na to zda sem neco provedl nebo ne, tak dojde k zahozeni .rpmnew/.rpmsave. to se mi zda trosku nesikovne nebo mi unika nejaky prepinac ci funkce.
do nynejska sem pro ostatni mel pripraveny nagios check aby se na to nezapominalo, vyuzivajici command co umel vypsat tyto soubory a trosku pomahal i pri manualnim merge.
po cem patram je moznost automatickeho reseni novych configu. napadlo mne mit stary, novy, diff a kdyz se diff nelisi tak lze rovnu aplikovat na novy config ktery pritekl s novou verzi rpm.
31. 10. 2013 at 11:14
Bohuzel, vimdiff, diffuse a meld neumi rict jestli uzivatel skoncil s ulozenim nebo bez. To si musite nejak vymoci na autorech techto nastroju. Napriklad kdiff3 to umi (ten ale zase neni na serverech), takze kdyz skoncite bez ulozeni, tak vrati nenulovy navratovy kod a rpmconf ten druhy soubor nesmaze.