V běžných linuxových distribucích současnosti je v součástí instalace prostředí OpenJDK JRE (Java Runtime Environment), které se letos pyšně představilo v dlouho očekávané verzi 7. Na vývojářských strojích je OpenJDK JDK – Java Development Kit.

Nebylo tomu tak ale vždy. V některých distribucích dlouho byla (a stále může být!) jako výchozí java JRE GNU classpath spolu s kompilátorem GCJ nebo předkompilovaná proprietární Sun (dnes Oracle) Java (a ta už by být nikde neměla, neboť vydáním OpenJDK 7 se naplnil závazek Sunu, že bude dodávat předkompilovanou javu do linuxových distribucí tak dlouho, dokud nebude „OpenJDK použitelné“).

Také může nastat situace, kdy je prostě potřeba javu změnit, případně nainstalovat jednu z proprietárních jav. Se zorientováním, co je co a kam to vlastně patří, by vám měl pomoci tento článek.

Část 2. – Proprietární javy ve Fedoře a jejich integrace

Proprietární javy (viz slovníček v prvním díle) mají své místo na světě a jejich dodavatele vnímají Linux jako svoji cílovou platformu. Ač ve světě desktopů není jejich potřeba nijak velká, přesto nastat může. Vyznat se v bludišti proprietárních jav a správně je integrovat do systému by vás měl naučit tento článek.

  • Oracle Java a Fedora
    • Proč to?
    • Možnosti instalace
      • Instalace
    • Konfigurace
      • Statické linkování „na tvrdo“
      • Dynamické „přepínatelné“ linkování přes alternatives
    • Přidání linků pod alternatives
    • Přidání celé množiny linků pod alternatives
    • Manuální aktualizace a kontrola letmým pohledem
    • Verifikace
  • Linkování pluginů

Oracle java a Fedora

Stejně jako nevidím moc důvodů, proč by měl někdo používat java-1.5.0-gcj, nevidím ani důvod k využívání proprietárních JVM java-1.7.0-oracle nebo java-1.7.0-ibm. Ovšem specifické případy si vyžadují specifická řešení a jedním ze specifických případů je plugin.

Icedtea-web je od počátku designován zcela jinak než původní plugin javy od Sunu. Na základě chyb (často neopravených až neopravitelných) v originálním pluginu vzniklo obrovské množství neuvěřitelně složitých aplikací, které těchto „vychytávek“ využívají a které tudíž pod icedtea-web z bezpečnostních důvodu prostě fungovat nemohou a nikdy fungovat nebudou. Pokud je takovou aplikací například applet pro přístup do bankovnictví (a banku z nějakého záhadného důvodu změnit nemůžete), pak vám nezbývá nic jiného než proprietární java.

I když IBM java má své důvody, proč ji někdy nasadit, na klientských stanicích tyto důvody většinou nejsou. Proto se budou následující instrukce týkat javy od Oracle (a to aktuální verze 7). Jejich aplikace na IBM javy nebo Oracle javu 6 jsou prakticky stejné, snad až na url stažení…

Možnosti instalace

Rozcestník pro instalace Oracle javy je zde: http://www.oracle.com/technetwork/java/javase/downloads/index.html

Za předpokladu, že chceme prostě jen instalovat JRE/SDK, pokračujeme rovnou nejbližším linkem Java SE 7uX (kde X je aktuální verze) JDK nebo JRE. Kdybychom zkoumali stránku dále, narazíme na dema, javu 6, javafx pro jdk6, dokumentaci, java-access-bridge, (neúplné) zdrojové soubory jdk 6, nástroj Timezone Update Tool, který slouží k aktualizaci javy na poslední změny ve světových časech a na kryptografická rozšíření. Prostě samé zajímavé věci, které jsou pro vás v balíčcích OpenJDK již předchystány…

Pokud tedy klikneme na první link a rozhodneme se nainstalovat jen tak JDK, musíme na další stránce odsouhlasit licenci (což je rozhodně výhoda oproti IBM java, kde člověk musí mít účet, ale otevřeností to zrovna nevoní). Dále je zde soustava linků pro základní platformy Mac OS X, Solaris, Windows, Linux a pouze dvě architektury: 32bitová x86 a 64bitová x86_64. Nás samozřejmě zajímá Linux.

Pokud máte nepodporovanou architekturu nebo operační systém (!) pak máte u Oracle smůlu a musíte sáhnout po IBM (kde ovšem mimo x86_64 a i386 neočekávejte plugin!) nebo (radši) po vlastním buildu IcedTea 6 nebo 7. IcedTea-web jde zkompilovat proti libovolnému JDK, ovšem to nevyřeší případný problém s OpenJDK. O vlastním buildu IcedTea/OpenJDK si zvídavý čtenář snadno něco najde na webu IcedTea – http://icedtea.classpath.org/wiki/Main_Page

Až zvolíte architekturu, musíte ještě zvolit způsob instalace. Vzhledem k tomu, že Oracle prakticky prodává Fedoru, jsou zde v nabídce balíčky RPM a prosté tar.gz. Ačkoliv se může zdát řešení z RPM jako snazší, nedoporučuji (viz níže).

Po drobné eliminaci vám zbudou ke stažení tyto instalační balíčky (X je verze a ARCH je jedna z i586 a x64 [čili 32b systém a 64b systém]):

JDK

  • jdk-7uX-linux-ARCH.rpm
  • jdk-7uX-linux-ARCH.tar.gz
  • jdk-6uXY-linux-ARCH.rpm.bin
  • jdk-6uXY-linux-ARCH.bina jejich varianty JRE
  • jre-7uX-linux-ARCH.rpm
  • jre-7uX-linux-ARCH.tar.gz
  • jre-6uXY-linux-ARCH.rpm.bin
  • jre-6uXY-linux-ARCH.bin

Všechny nainstalované javy verze 7 a všechny nainstalované javy verze 6 jsou navzájem zcela identické co se obsahu týče.

Zda-li JRE či JDK záleží na tom, jestli chcete javu jen využívat, nebo pro ni i vyvíjet. JRE balíčky mají zhruba poloviční velkost. JDK archivy vždy obsahují také JRE. A to v /cesta/jdk1.7.0_XY/jre. JRE jsou nainstalována přímo jako /cesta/jre1.7.0_XY/.

Nutno podotknout, že IBM má místo binárních skriptů instalátor také ve formě InstalAnywhere, Což je instalátor javy v jave. Funguje tak, že někam rozbalí javu, ve které se pak sám spustí a nainstaluje vaši javu. Nevýhodou je dvojnásobná velikost balíčků. Výhodou se může zdát GUI/TUI průvodce. Existuje ve dvou verzích – pro roota, která se vám trošku (nevhodně) integruje do systému, a ve verzi, která práva roota nepotřebuje, ale pouze se rozbalí do aktuálního adresáře – doporučuji.

Instalace

Zda rpm.bin, či bin pro javu 6 je snadná volba.

  • Bin je samo-instalační skript (je potřeba mu dát práva na spuštění – execute – například chmod 775 balicek.bin), který se nahraje do pracovního adresáře, a není co řešit (I když dělá nějaké nekalosti, např. spuštění prohlížeče na konci instalace apod.).
  • Rpm je parodie na balíček, ale kromě likvidace rpm-databáze nedělá nic užitečného a platí pro něj vše, co platí pro rpm javy 7.

Zda rpm, či tar.gz pro javu 7 je volba ještě jednoduší a díky Oraclu za ni – za archiv tar.gz.

  • Balíček rpm, jak je dodávaný, je hotová katastrofa. Instalace většinou neproběhne správně. Také se balíček nainstaluje neznámo kam, a hlavně pokaždé jinam. Kdybyste přece jen potřebovali instalaci přes rpm, tak zde je několik rad:
    • klasické rpm -ivh vybrana.java.rpm nebo yum install vybrana.java.rpm je příkaz pro instalaci. Vhodnější bude rpm, neboť parametry --force a --prefix se mohou stát nezbytností.
    • Odinstalace stejnou cestou pravděpodobně nepůjde, protože při odinstalaci dostanete „package javaX.Y.Z is not installed“, ale při opětovné instalaci dostanete informaci, že již balíček nainstalován je – „Nothing to do, package javaX.Y.Z is already installed“.
    • Přednastavená cesta je /usr/java (občas /opt/java)
      • Kromě adresáře s javou, který bude /usr/java/jre1.7.0-XY nebo /usr/java/jdk1.7.0-XY, budou existovat v /usr/java/ také dva linky
        • latest ukazující na jdk/jre1.7.0-XY
        • default ukazující na latest
      • Balíčky jsou takzvaně relocatable, tzn. že můžete změnit jejich cílové umístění. Na to slouží příkaz rpm -ivh –prefix=/nejaka/cesta vybrana.java.rpm
  • Archív tar.gz si spokojeně rozbalte, kam chcete.
    • buď vaším oblíbeným nástrojem s GUI
    • nebo pomocítar zxvf balicek.tar.gz

Ještě jednou zdůrazním, že uJRE (případně JDK) jsou všechny varianty instalace zcela shodné a kvůli statickému linkování i nezávislé na verzích základních knihoven ve vašem systému (jinými slovy si sebou nesou všechny závislosti).

Konfigurace

Java se nám úspěšně nainstalovala, ale chybí veškerá funkcionalita, kterou servírují oficiální distribuční kanály pro Fedoru.

Pokud si čtenář vzpomene na kapitolu „Ovládání více nainstalovaných java“ z předchozího dílu“, pak ví, že systém jednotlivých jav je ve Fedoře standardizovaný a mocný. Pomocí různých variant linkování můžeme docílit podobného výsledku.

Všechny ukázky níže jsou pro JDK 7, ale lze je snadno aplikovat na JRE (změnou cesty z /cesta/jdk1.7.0_XY/jre na /cesta/jre1.7.0_XY/) nebo na JDK/JRE 6.

Statické linkování „na tvrdo“

$PATH

Zkušenější uživatel ví, že aby mohl jen tak spustit nějakou aplikaci, musí být její „spouštěč“ v $PATH. PATH je proměnná prostředí, která říká systému, kde má hledat spustitelné soubory. Nejnevhodnější varianta, jak naši javu „dostat do path“, je přidat do path její adresáře /vysledny/adresar/jdk1.7.0-XY/bin a /vysledny/adresar/jdk1.7.0-XY/jre/bin.

  • Toho lze docílí modifikací souboru ~/.bash_profile – přidejte do něj následující řádek:PATH=$PATH:/vysledny/adresar/jdk1.7.0-XY/bin:/vysledny/adresar/jdk1.7.0-XY/jre/bin
  • Výhody:
    • V path budou všechny dostupné příkazy javy (a že jich je).
    • Nepotřebujete práva roota.
    • Celkem snadná manipulace.
  • Nevýhody:
    • Nestandardní.
    • Neprůhledný $JAVA_HOME.
    • Pokud je nějaká java deklarována v $PATH dříve, pak se na vaši javu nikdy nedostane.
    • Nelze takto nakonfigurovat plugin (leda s jeho nalinkováním zvláště).
  • Pokud uděláte místo původní změny PATH tuto:PATH=/vysledny/adresar/jdk1.7.0-XY/bin:/vysledny/adresar/jdk1.7.0-XY/jre/bin:$PATHPak se sice vyhnete problému s javami definovanými v path dříve, ale zato si můžete rozladit celý systém.
  • Místo souboru ~/.bash_profile můžete editovat /etc/bashrc, kterým tuto změnu provedete pro všechny uživatele. Na to již potřebujete práva roota, a možná, pokud měli ostatní uživatelé do tohoto okamžiku OpenJDK, anebo byli zvyklí na komfort alternatives nebo na vlastní modifikace PATH, si vysloužíte jejich nenávist.

Linky z již existující path:

Vhodnější je tedy umístit linky z míst, které jsou již na $PATH uvedeny. Ideálně využít již existující konvence, na základě kterých jsou všechny spustitelné soubory javy jsou umístěny v /usr/bin.

  • Na linkování slouží příkaz ln, zvláště příkaz ln -s cíl název, kde -s znamená „soft“ – jemný link, který vytvoří opravdu jen jakési lehké provázání, u něhož nehrozí, že si omylem smažete cíl. Cíl je soubor, který se má tímto linkem spustit. A název je jméno linku. man ln je na věky váš kamarád!
    • cíl musí být absolutní cesta
    • název stačí cesta relativní
    • Na vytváření linků v /usr/bin musíte mít práva roota
  • Pro základní linkování je potřeba nalinkovat java, javac, JRE, JDK a plugin
    • ln -s /vysledny/adresar/jdk1.7.0-XY/jre/bin/java /usr/bin/java
    • ln -s /vysledny/adresar/jdk1.7.0-XY/bin/javac /usr/bin/javac
    • ln -s /vysledny/adresar/jdk1.7.0-XY/jre/ /usr/lib/jvm/jre
    • ln -s /vysledny/adresar/jdk1.7.0-XY/ /usr/lib/jvm/sdkToto je pouhý zlomek všech linků, které se dají nastavit, ale na běh a základní kompilaci stačí. Adresáře jre a sdk bývají využívány různými nástroji, a jejich nastavení je doporučeno. Aby byl seznam příkazů úplný, muselo by se nalinkovat vše z jdk1.7.0-XY/jre/bin a jdk1.7.0-XY/bin, což lze zautomatizovat:
      • a=`ls /vysledny/adresar/jdk1.7.0-XY/bin/`; for x in $a; do ln -s /vysledny/adresar/jdk1.7.0-XY/bin/$x /usr/bin/$x; done;
      • A obdobně pro JRE.
    • Pamatujte, že linky navzájem nemůžete přepisovat – pokus o vytvoření linku stejného názvu skončí chybou. Zato je můžete zcela bezpečně mazat:
      • rm /usr/lib/jvm/sdk, rm /usr/lib/jre ...
      • rm /usr/bin/java,rm /usr/bin/javac ...

      Plugin

    • ln -s /vysledny/adresar/jdk1.7.0-XY/jre/bin/javaws /usr/bin/javaws
    • 32bitový plugin pro 32bitový prohlížeč kompatibilní s rodinou Mozilla (Firefox, Chrome, Chromium, Epiphany, …):ln -s /vysledny/adresar/jdk1.7.0-XY/jre/lib/i386/libnpjp2.so /usr/lib/mozilla/plugins/libjavaplugin.so
    • 64bitový plugin pro 64bitový prohlížeč kompatibilní s rodinou Mozilla (Firefox,
    • Chrome, Chromium, Epiphany,…):ln -s /vysledny/adresar/jdk1.7.0-XY/jre/lib/amd64/libnpjp2.so /usr/lib64/mozilla/plugins/libjavaplugin.so
    • Pro prohlížeče kompatibilní s rodinou Mozilla je možnost linkovat místo na /usr/lib... také na ~/.mozzila/plugins/libjavaplugin.so. To ovšem nastaví plugin pouze pro jediného uživatele (ale zase nepotřebujete roota). Vysvětlení linkování pluginu bude podrobněji v kapitole Linkování pluginů.
    • Výhody:
      • standardní
      • vše tam, kde to má být
      • přímočaré
    • Nevýhody:
      • hodně práce
      • nutné přelinkování v případě updatu
        • lze obejít linkováním přes „mezi-link“ link /usr/lib/jvm/sdk a jre:
          • ln -s /vysledny/adresar/jdk1.7.0-XY/ /usr/lib/jvm/sdk
          • ln -s /usr/lib/jvm/sdk/jre/ /usr/lib/jvm/jre
          • ln -s /usr/lib/jvm/jre/bin/java /usr/bin/java
          • ln -s /usr/lib/jvm/sdk/bin/javac /usr/bin/javac
          • ln -s /usr/lib/jvm/jre/bin/javaws /usr/bin/javaws
          • ln -s /usr/lib/jvm/jre/lib/{amd64 i386}/libnpjp2.so /usr/{lib64 lib}/mozilla/plugins/libjavaplugin.so
      • hodně práce v případě nutnosti použití jiného JDK
    • Pokud nemáte práva roota, tak pravděpodobně ideální řešení je přidat adresář do path (viz $PATH) a pak na dané místo nalinkovat výše zmíněnými způsoby (ovšem oželet sdk a jre linky).

V poslední části článku o instalaci javy ve Fedoře se podíváme na využití systému alternatives.