Hlídejte si instalaci

29. 3. 2004
Doba čtení: 5 minut

Sdílet

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.

bitcoin školení listopad 24

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.

Autor článku