Uživatelské nástroje

Nástroje pro tento web


system:prikazovy_radek:instalace

Instalace softwaru 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 Mageii 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 jako 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

Konzole

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:

Konzole

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:

Konzole

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

Konzole

urpmi program1

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

  • Balíček program1 je již nainstalován

nebo

  • Žádný balíček s názvem program1
    Následující balíčky obsahují: program1: program11, program110, program120, ...
    Chcete-li použít všechny, použijte volbu "-a"

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 "Core Release (distrib1)")
  libabcd                        1.1.0        1.mga1        i586
  libabdc                        1.1.0        1.mga1        i586
Navíc bude použito 13MB dodatečného diskového prostoru.
Pokračovat v instalaci 2 balíčků? (A/n)

Jednoduše reagujete podle okolností.

Ovšem je zapotřebí chápat některé souvislosti. 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 ftp://mageia.mirror.dkm.cz/pub/mageia/distrib/1/i586/media/core/release/program1, 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 nazev_zdroje )

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 OS Windows máte možnost spustit program z KonzolyKonzoly (obvykle MenuNástrojeKonzole v prostředí KDE4, nebo Emulátor terminálu v prostředí GNOME ap.), což je takové to černé okénko:

system:prikazovy_radek:konzole.png

Tady napíšete příkaz, který nefunguje, např.:

Konzole

# kmixer
bash: kmixer: příkaz nenalezen
#

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í.

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:

Konzole

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

případně česky:

Konzole

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

Systém zde říká: bash: prikas: příkaz nenalezen.

Co je špatně? Nejspíše překlep (prikaz se píše se z ne s).

Řešením tedy je:

  • překontrolujte si, že jste napsali prikaz správně (nejčastější chyba = překlep)
  • není-li prikas dostupný pouze pro roota - správce systému. Zpravidla se jedná o příkazy spravující systém. Překontrolujte to spuštěním příkazu s právy roota.
  • máte-li nainstalovaný balíček, který obsahuje prikas 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 balicek. Nyní uvedený balíček nainstalujeme buď pomocí Ovládací centrum Mageiaovládacího centra Mageia, nebo příkazem urpmi z Konzoly:

Konzole

urpmi balicek

Některé názvy programů/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:

$ fir /ZDE JSEM STISKL TAB/
fire     firefox  /JSOU DOSTUPNÉ DVA PROGRAMY - FIRE A FIREFOX/
$ fire   /PÍSMENO "E" SE DOPLNILO AUTOMATICKY/
$ firef  /DOPLNIL JSEM PÍSMENO "F" A ZNOVU STISKL TAB/
$ 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í:

Konzole

$ 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
$

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í centrum Mageiaovládacího centra Mageia, nebo příkazem urpmi z Konzoly:

Konzole

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 konzoly 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:

Konzole

urpme libabcd

vygeneruje zprávu:

Aby byly splněny závislosti, budou odebrány 2 balíčky (13MB):
program1-1.0.0-mga1.i586
libabdc-1.0.0-mga1.i586
(z důvodu chybějícího libabcd1.0.0-mga1.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:

Konzole

rpm -e --nodeps nazev_balicku

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

Konzole

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:

Konzole

urpmi --allow-force nazev_noveho_balicku

a je to.

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ů:

Konzole

rpm -va

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

Konzole

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!!

Další informace:

system/prikazovy_radek/instalace.txt · Poslední úprava: 2014/10/25 13:14 (upraveno mimo DokuWiki)