Hlídejte si instalaci

Jan Švec 29. 3. 2004

Po předchozím článku věnovaném teoretickému popisu distribuce programů od programátora k uživateli ve formě binárních a zdrojových balíčků následuje krátké povídání o malém, ale šikovném skriptu checkinstall.

Úvod

Jak již víte, programy se na Linuxu instalují buď z binárních balíčků, nebo ze zdrojových kódů. Cesta binárních balíčků je poměrně pohodlná a měla by být preferována. Mohou se ale vyskytnout okolnosti, kdy je potřeba zvolit instalaci ze zdrojových kódů. Proto obvykle z internetu stáhneme nějaký ten .tar.gz nebo .tar.bz2, od[gb]zipujeme a odtarujeme, volitelně přečteme README a INSTALL, GNU fanatici přečtou COPYING a pak následuje ./configure s případnými volbami, pokud projde, přistoupíme k make a následnému make install. Tím bychom měli mít ve svém systému funkční instalaci daného programu. Ale!

Existuje zde několikero ale:

  • Ale1: Program sice v systému máme, ale nevíme kde.
  • Ale2: Pokud najdeme, kde se program uhnízdil, zjistíme, že jeho binárka přepsala starší verzi.
  • Ale3: Chceme tedy program odstranit, ale ten se usilovně brání a na make uninstall se dozvíme jen: make: *** No rule to make target `uninstall'. Stop.
  • Ale4: Spravujete-li více počítačů, je často potřeba jeden program nainstalovat na všechny či několik z nich. Samozřejmě se to dá udělat kompilací na jednom a následným make install spuštěným z adresáře exportovaného třeba přes NFS, ale jistě cítíte, že to není to pravé ořechové.
  • Ale5: A pokud program v systému máme a nevadí nám, může se stát, že na něj časem zapomeneme. A program, který se nepoužívá, jaky by ani nebyl. Proto by bylo vhodné, kdyby se zapsal do databáze nainstalovaných balíčků. To ale jde jen s binárními balíčky, a proto potřebujeme ze zkompilovaného programu udělat balíček. Mnozí lidé to umí sami, některé programy to naučili jejich autoři (třeba distribuce zdrojových kódů mplayeru obsahuje skripty pro vygenerování debianího balíčku) a zbytku lidí může pomoci skript checkinstall.

Checkinstall

Skript checkinstall je určen všem, kteří chtějí mít svůj systém v pořádku a chtějí si udržet přehled o tom, co v něm mají nainstalováno. Tento skript používá knihovnu installwatch, jejíž zdrojové kódy jsou přibaleny k checkinstallu. Ta se „předlinkuje“ (pomocí LD_PRELOAD) k libovolnému programu a po jeho ukončení máme v syslogu (případně v nějakém souboru) uložena všechna systémová volání, které modifikovala soubory na disku (například open(), mkdir(), rename()).

Toho využívá checkinstall k „posbírání“ souborů vytvořených zavoláním make install z vašeho systému a k následnému vytvoření binárního balíčku s těmito soubory přímo pro váš systém. K tomu za vás „připraví“ i dokumentaci, kterou přidá do balíčku a jež se nainstaluje na vhodné místo vašeho systému (například /usr/doc). Příprava dokumentace je opravdu jenom symbolická, v aktuálním adresáři se pokusí najít adresář doc-pak, jehož obsah pak považuje za dokumentaci.

Instalace a první balíček

Instalace checkinstallu je jednoduchá. Na mém Debianu Woody vše probíhá podle předpokladů. Archiv checkinstallu rozbalíme do libovolného adresáře (např. /usr/src) a spustíme make. Ten přeloží knihovnu installwatch. Následně nainstalujeme skript i s knihovnou pomocí make install. Pokud vše proběhne, jak má, máme již na systému nainstalován skript checkinstall. Nyní pomocí něho vytvoříme svůj první balíček. A nebude obsahovat nic jiného než sám skript checkinstall. To proto, abychom ho později mohli ze systému třeba odstranit nebo jej nahradit novou verzí.

Vytvoření nového balíčku pomocí checkinstallu je naprosto triviální záležitostí. Stačí příkaz svaté trojice ./configure; make; make install zaměnit na ./configure; make; checkinstall, a pokud jste přihlášeni jako root, vše již běží, jak má. Tak tedy v aktuálním adresáři zdrojových kódů spustíte příkaz checkinstall a již se před námi objevuje probíhající instalace pomocí příkazu make install, nyní již ovšem hlídána skriptem checkinstall. Po jejím skončení se vás skript zeptá, jaký typ balíčku chcete vytvořit. Na výběr máme ze třech možností: Slackware, RPM a DEB. Následuje dialog určující základní vlastnosti balíčku – jméno, verzi, popisek, autora atd. Vše můžete pohodlně změnit k obrazu svému. Nakonec se balíček – v mém případě soubor checkinstall1.5.3–1_i386.deb v aktuálním adresáři – nainstaluje na váš systém. Pokud při instalaci došlo k přepsání nějakých souborů, jsou tyto zálohovány do souboru například backup-031020042202-pre-checkinstall.tgz v aktuálním adresáři.

Druhý balíček

Ukážeme si použití pro klasický program. Za ten si zvolíme program xmms ve verzi 1.2.8. Nejprve spustíme ./configure. Nato se rozběhne konfigurační skriptík a po jeho dokončení spustíme make a nakoneccheckin­stall. Pokud je třeba, vytvoříme v aktuálním adresáři soubor description-pak a do něj napíšeme popisek balíčku, pokud to neuděláme, checkinstall se nás na něj zeptá.

Třetí balíček

Nyní zkusíme balíček vytvořit z programu s „atypickou“ instalací, a to z Pythonu verze 2.3. Instalace začíná klasicky ./configure a následně make, čímž vytvoříme funkční interpret Pythonu. Následuje spuštění příkazu ./python setup.py build a ./python setup.py install pro nainstalování Pythonu. My ale chceme použít checkinstall, proto místo posledního příkazu nyní použijemechec­kinstall ./python setup.py install a vše by mělo proběhnout podle předpokladů. V mém případě se dpkg bránilo tomuto balíčku, protože balíček reportbug byl s Pythonem této verze v konfliktu. Nebylo proto nic jednoduššího než tento balíček odstranit.

Čtvrtý a poslední balíček – zkouška ohněm

Ačkoli se doba, kdy píšu tento článek chýlí k pozdním nočním hodinám, rozhodl jsem se vyzkoušet poslední experiment. Zkusit zabalíčkovat binární distribuci OpenOffice.org, jež jsem kdysi získal na CD. I smazal jsem tedy svou instalaci tohoto bumbrlíčka, nalezl CD s OpenOffice.org a jal se instalovat.

Bohuzel přímou cestou to nešlo, neboť po každém spuštění checkinstall ./install –prefix=/opt, kde ./install je jméno instalačního skriptu OOo, se pouze ukázala detekce verze libc, následovala krátká zpráva o tom, že probíhá instalace, a vzápětí instalace dokončena, přičemž se ani installwatch nestihl podělit o to, co vlastně ohlídal. Zkusil jsem tedy rafinovanější postup. Nejprve jsem OOo nainstaloval do nějakého pomocného adresáře a spoléhal na to, že nevytvoří nic mimo tento adresář. Po dokončení instalace jsem provedlcheckinstall mc a všechny soubory OOo jsem pomocí Midnight Commanderu překopíroval na své místo. Po ukončení mc zase pokračoval checkinstall, který mi z takto zkopírovaných souborů udělal DEB balíček a následně ho nainstaloval. Nutno podotknout, že k tomu bylo potřeba hoooodně místa na disku. V závěru se OOo na disku vyskytovala několikrát – jednou jako již nainstalovaný balíček, podruhé jako DEB balíček a nakonec jako záloha předchozího stavu. Podotkněme ještě, že výsledný DEB balíček měl velikost něco kolem 64 MB.

Závěr

Jak jste jistě poznali, checkinstall je opravdu mocný nástroj velmi usnadňující administraci systému. Pokud má některý ze čtenářů své vlastní zkušeností s tímto skriptem v kombinaci s nějakým programem a uzná za vhodné, určitě se s námi může podělit v diskusi pod článkem.

Našli jste v článku chybu?
120na80.cz: Jak se zbavit nadměrného pocení?

Jak se zbavit nadměrného pocení?

Vitalia.cz: Pepsi Cola mění sirup za cukr

Pepsi Cola mění sirup za cukr

Podnikatel.cz: 3 velké průšvihy obchodních řetězců

3 velké průšvihy obchodních řetězců

Podnikatel.cz: AČTO: Výjimka u EET pro farmáře? Nepřijatelné

AČTO: Výjimka u EET pro farmáře? Nepřijatelné

Podnikatel.cz: Profese budoucnosti? Úředník nepřežije

Profese budoucnosti? Úředník nepřežije

Podnikatel.cz: Tahle praktika stála šmejdy přes milion

Tahle praktika stála šmejdy přes milion

DigiZone.cz: Samsung uvolnil nástroj pro Tizen

Samsung uvolnil nástroj pro Tizen

DigiZone.cz: Sat novinky: Skylink skončil s kanály ČT

Sat novinky: Skylink skončil s kanály ČT

Vitalia.cz: Jak může být v uzenině 150 % masa?

Jak může být v uzenině 150 % masa?

DigiZone.cz: Skylink o půlnoci vypnul 12 525

Skylink o půlnoci vypnul 12 525

Lupa.cz: eIDAS: Nepřehnali jsme to s výjimkami?

eIDAS: Nepřehnali jsme to s výjimkami?

Vitalia.cz: Paní výčepní: Holka, co mluví chlapům do piva

Paní výčepní: Holka, co mluví chlapům do piva

Podnikatel.cz: Selhala pokladna k EET. Kdo zaplatí pokutu?

Selhala pokladna k EET. Kdo zaplatí pokutu?

Podnikatel.cz: Italské těstoviny nebyly k mání, tak je začal vyrábět

Italské těstoviny nebyly k mání, tak je začal vyrábět

Lupa.cz: Změňte si výchozí heslo u routeru od UPC

Změňte si výchozí heslo u routeru od UPC

Lupa.cz: Největší pitominy s logem “nyní smart a připojené”

Největší pitominy s logem “nyní smart a připojené”

DigiZone.cz: Skylink: do pátku může docházet k výpadkům

Skylink: do pátku může docházet k výpadkům

Měšec.cz: Do ostravské MHD bez jízdenky. Stačí vaše karta

Do ostravské MHD bez jízdenky. Stačí vaše karta

Měšec.cz: Banky umí platby na kartu, jen to neříkají

Banky umí platby na kartu, jen to neříkají

Podnikatel.cz: Polská vejce na českém pultu Albertu

Polská vejce na českém pultu Albertu