Přihlásit | Registrovat

INSTALACE SOFTWARE V SYSTÉMU URPMI

ÚVOD - aneb proč nepoužívat rpm

Pro správu balíčků (instalace, deinstalace, reinstalace, vyhledávání, vypisování vlastností atd) a pro správu zdrojů balíčků je v Mandriva Linuxu systém urpmi.
V uvedeném odkazu najdete pod odkazy k jednotlivým příkazům seznamy dostupných parametrů.

Název má znamenat něco jako „uživatelský rpm“, tedy něco, co je snadno použitelné a co zároveň řeší některé nedostatky v návrhu samotného rpm systému. S touto ideou přišla jsko první právě Mandriva, obdobné nástroje pak začaly vytvářet i ostatní distribuce.
Systém rpm, s nímž je urpmi úzce provázáno neřeší problém závislostí. To znamená, že program1, který pro svoji funkci vyžaduje např. knihovnu libabcd se při použití instalačního příkazu

rpm -i program1

nenainstaluje, ale systém zahlásí první nalezený nedostatek - chybějící knihovnu libabcd. Provedete tedy prohlídku internetu, naleznete požadovanou knihovnu, stáhnete si ji do počítače a zadáte:

rpm -i libabcd

Když budete mít štěstí (ale moc s tím nepočítejte), knihovna libabcd nebude vyžadovat jiný balíček. Takže sláva, budeme pokračovat v instalaci programu1:

rpm -i program1

a vyskočí hláška, že je zapotřebí libabdc. A kolečko začíná nanovo. Pochopitelně že lze zjistit např. příkazem rpm -q jmeno_balicku –whatrequires všechny závislosti a potřebné balíčky si instalovat, ale i tak to někdy bývá téměř nekonečné, protože totéž musíte udělat pro:

  • všechny balíčky, které vyžaduje program1 a pro
  • všechny balíčky které vyžadují balíčky, které vyžaduje program1 a pro
  • všechny balíčky, které vyžadují balíčky, požadované balíčky, které vyžaduje program1 a pro
  • všechny….. 8-O

Tomu se říká „dependecy hell“, neboli peklo závislostí.
Při případné deinstalaci vám pak v systému zbude hromada zcela nepotřebných souborů, které jen zabírají místo a vy už vůbec nevíte, k čemu patří či patřily.

Řešení závislostí s urpmi

Systém urpmi na to jde jinak. Stáhne si z internetu soubor, který obsahuje jména balíčků a některé další informace, vytvoří si z těchto dat indexy a pak pracuje s těmito soubory. Pokud hledáte informace o nějakém balíčku, urpmi se podívá právě sem a dodá odpověď.

Instalace

Pokud instalujete program1 pomocí urpmi

urpmi program1

urpmi se ozve, a je několik možností:

  1. Balíček jmeno_balicku je již nainstalován
  2. Následující balíčky obsahují: program1:

program11
program110
program120

a vy si vyberete ten pravý ořechový program1YZ

Aby byly splněny závislosti, budou nainstalovány následující balíčky
Balíček                        Verze        Vydání        Arch.\\
(zdroj "Official Contrib Release")\\
libabcd                        R11B         11mdv2008.0   i586\\
libabdc                        R11B         11mdv2008.0   i586\\
Bude použito 13MB dodatečného diskového prostoru.\\
Pokračovat v instalaci 2 balíčků? (A/n)\\ \\
  - Žádný balíček s názvem program1

Jednoduše reagujete podle okolností. Je ovšem zapotřebí chápat některé souvislosti.

1. Práce s indexy je rychlá a pohodlná, ale funguje jen tehdy, jsou-li indexy odkazující na skutečné balíčky někde na netu, aktuální. Proto je nutné čas od času tyto indexy (tzv. zdroje) balíčků aktualizovat, tedy stáhnout aktuální verze. Pokud index ukazuje například na soubor http://mandrivalinux.cz/distro/mandrivalinux/2008.1/contrib/program1.0.12.3, ale na webu je už verze program1.0.12.5, tak se soubor nenalezne a nenainstaluje.

Možné problémy

Pokud tedy nejde nainstalovat nějaký program, který v repozitáři (seznamu balíčků) určitě máte, zkontrolujte si:

  1. zda je funkční připojení k internetu a zda je server funkční (např. příkaz ping na server, kde jsou balíčky uloženy)
  2. zaktualizujte si indexy balíčků (příkaz urpmi.update )

a pak to zkuste znovu.

Jak vidíte, urpmi za vás řeší mnoho obtíží a je skutečně velmi snadný na použití.

Chybová hlášení a co s nimi

Nejde spustit program. Na rozdíl od Windows máte možnost spustit program z Konzoly (obvykle menu Systém-Konzole, nebo Emulátor terminálu ap.), což je takové to černé okénko: Tady napíšete příkaz, který nefunguje, např.:

 bash-3.2$ kmixer
bash: kmixer: command not found
bash-3.2$

A nyní vidíte, proč se program nespustil: v systému není přítomen (není nainstalován) Programy vypisují při svém spuštění všechny možné druhy informací, ale zejména jsou důležité případné chybové hlášky, které umožňují identifikovat problém a najít řešení. (tohle si ve woknech neužijete)

bash: prikas: command not found

Jedna z nejčastějších hlášek, které vídá i zkušený uživatel. Po zadání příkazu prikas dostanete tuto hlášku:

[petos@Lizard ~]$ prikas
bash: prikas: command not found

případně česky:

[petos@Lizard ~]$ prikas
bash: prikas: příkaz nenalezen

Systém zde říká: bash: prikas: příkaz nenalezen Co je špatně? Nejspíše překlep (příkaz se píše se z ne s). Řešením tedy je:

  • překontrolujte si, že jste napsali příkaz správně (nejčastější chyba = překlep)
  • není-li příkaz dostupný pouze pro roota - správce systému. Zpravidla se jedná o příkazy spravující systém. Překontrolujte to spustením příkazu s právy roota.
  • máte-li nainstalovaný balíček, který obsahuje příkaz Vámi volaný příkaz:
 urpmf --files prikas
balicek:/usr/bin/bin

Textový řetězec na začátku řádku před dvojtečkou je název balíčku, ve kterém se soubor nachází. V tomto případě je to balíček balicek. Nyní uvedený balíček nainstalujeme buď pomocí ovládacího centra, nebo příkazem urpmi z Konzoly:

urpmi balicek

Některé příkazy jsou poměrně dlouhé a tak se snadno může udělat překlep. Linux má proti tomu jednoduchou obranu: po napsání několika prvních znaků stisněte klávesu Tab a název se doplní, případně se vypíšou dostupné možnosti:

 bash-3.2$ fir /ZDE JSEM STISKL TAB/
fire     firefox  /JSOU DOSTUPNÉ DVA PROGRAMY - FIRE A FIREFOX/
bash-3.2$ fire   /PÍSMENO "E" SE DOPLNILO AUTOMATICKY/
bash-3.2$ firef  /DOPLNIL JSEM PÍSMENO "F" A ZNOVU STISKL TAB/
bash-3.2$ firefox

a nyní stačí příkaz odeslat klávesou Enter a příkaz se spustí. Rozšířené možnosti doplňování zajistí balíček bash-completion (pro nainstalování zadejte: urpmi bash-completion).

cannot open shared object file: No such file or directory

Potřebný soubor neexistuje. Pravděpodobně v systému chybí nějaký balíček, takže bude potřeba ho doinstalovat. Konkrétní příkaz zdiskuzního fóra:

program se mi vůbec nespustí. Vypíše to tohle [martin@localhost ~]$ epsxe
/home/martin/.epsxe/epsxe: error while loading shared libraries: libgtk-1.2.so.0           : 
cannot open shared object file: No such file or directory

Dotyčnému chybí v systému soubor libgtk-1.2.so.0. Je to proto, že spouštěný program nebyl instalován systémem rpm a tudíž nejsou zajištěny příslušné závislosti. Dá se to ale celkem snadno dořešit. Nejprve musíme zjistit, ve kterém balíčku se soubor libgtk-1.2.so.0 nachází:

 bash-3.2$ urpmf --files libgtk-1.2.so.0
libgtk+1.2:/usr/lib/libgtk-1.2.so.0
libgtk+1.2:/usr/lib/libgtk-1.2.so.0.9.1
bash-3.2$ 

Textový řetězec na začátku řádku před dvojtečkou je název balíčku, ve kterém se soubor nachází. V tomto případě je to balíček libgtk+1.2. Nyní uvedený balíček nainstalujeme buď pomocí ovládacího centra, nebo příkazem urpmi z Konzoly:

urpmi libgtk+1.2

Po nainstalování znovu zkuste spustit problémový program. Pokud se rozeběhne, je vyhráno (v uvedené diskuzi to stačilo), pokud ne, najdete ve výpisu v konzoli další příčinu (možná další chybějící soubor). V takovém případě postupujte podle obsahu chybového hlášení.

Deinstalace

Obdobným způsobem pracuje urpme, tedy příkaz z rodiny urpm* používaný pro odinstalování balíčků.
Urpme nejprve ve své databázi nainstalovaných balíčků zjistí, zda příslušný balíček nějakým způsobem nesouvisí s některými jinými. V našem příkladu

urpme libabcd

vygeneruje zprávu:

Aby byly splněny závislosti, budou odebrány 2 balíčky (13MB):\\
program1.0.12.3.2008.1.i586
libabdc1.0.12.3.2008.1.i586
(z důvodu chybějícího libabcd1.0.12.3.2008.1.i586)
Odstranit 3 balíčky? (a/N)

a pokud zadáte a <enter>, máte v systému čisto jak od libabcd, tak od programu1, který by zůstal bez knihovny nefunkční, tak i od další závislé knihovny libabdc. Pokud je ovšem knihovna libabdc potřeba ještě pro program11, který zůstal nainstalovaný, odinstalována nebude.

Nu řekněte sami, jestli má smysl se lopotit s příkazy rpm a závislostmi, když urpmi to elegantně dělá za nás?! 8-)

Možné problémy

Příliš mnoho závislých balíčků

- Nestává se to až tak často, ale některé programy či knihovny jsou skutečně klíčové pro celý systém, nebo jeho část (např. zvukovou, grafickou ap.), takže s jeho odstraněním by se stal systém v podstatě nefunkčním. ŘEŠENÍ: neodinstalovávat.

Pokud chcete je vyměnit soubor za jinou verzi, pak je možné soubor odstranit příkazem:

rpm -e –nodeps nazev_balicku

a vzápětí nainstalovat požadovanou verzi:

urpmi nazev_balicku

Jde to i jednodušeji, jedním příkazem, který natvrdo přepíše nainstalovaný balíček jiným, který požadujeme:

urpmi –allow-force nazev_noveho_balicku

a je to. (před parametrem allow-force jsou DVĚ pomlčky; tyhle stránky je vymění za jednu dlouhou)

Některé balíčky nenalezeny

Nebudu vám šahat do svědomí, co jste to se systémem prováděli, ale pokud se to stane (a nemusí to být nezbytně vaší vinou), pak je asi nutné provést obnovu indexu nainstalovaných souborů:

rpm - -va

provede kontrolu všech nainstalovaných balíčků, případně (hlásí-li množství chyb):

rpm –rebuilddb

provede obnovu databáze nainstalovaných balíčků.
POZOR!! Pokud příkaz nedoběhne do konce v pořádku, tak se s rpm systémem můžete rozloučit - čeká vás reinstalace systému!!

Dělení repozitářů

Seznamy balíčků nejsou jedním seznamem, ale jsou rozděleny do několika druhů seznamů:

main - distribuce tak jak je, jde v podstatě o free verzi která je ke stažení na netu
contrib balíčky, které nejsou součástí distribuce volně stažitelné z webu (free), lze ji ale snadno přidat mezi zdroje.
non-free - oficiální zdroj, který obsahuje balíčky bez open-source lincence.
plf-free a plf-nonfree - zejména multimédia
sos různé věci, ne vždy spolehlivě fungují
thac zejména audio

a určitě sami najdete i další.
Balíčky v oficiálních repozitářích (main, contrib, fre a non-free) jsou dále rozděleny do částí release, updates, backorts a testing a jednotlivě je můžete ve správci balíčků povolit nebo zakázet. O co jde?

release nemenný zdroj vydaný v dobe uvedení nové verze Mandriva
updates oficiální aktualizace pro balíčky v release
backports z vývojové verze (je-li např. stabilní verzí 2008.0, pak zde budou balíčky připravované pro 2008.1), preložené pro stabilní vydání (2008.0) Mandriva Linuxu.
testing určeno pro testery, experimentální balíčky.

Takže jako normální uživatel si nastavím jako aktivní zdroje jen release a updates, do backoports si šáhnu zcela vyjímečně z vážných důvodů (a pak je zase vypnu), testingu se budu vyhýbat jako čert kříži, protože si nechci systém rozhasit - nejsem tester. Pokud ale máte rádi adrenalin a křížovky…

Další informace:

Mandriva Wiki
system/prikazovy_radek/instalace.txt · Poslední úprava: 2011/01/05 16:54 autor: yullaw