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říkladchmod 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í prorpm
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
neboyum install vybrana.java.rpm
je příkaz pro instalaci. Vhodnější buderpm
, 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 linkylatest
ukazující najdk
/jre1.7.0-XY
default
ukazující nalatest
- Balíčky jsou takzvaně
relocatable
, tzn. že můžete změnit jejich cílové umístění. Na to slouží příkazrpm -ivh –prefix=/nejaka/cesta vybrana.java.rpm
- Kromě adresáře s javou, který bude
- klasické
- Archív tar.gz si spokojeně rozbalte, kam chcete.
- buď vaším oblíbeným nástrojem s GUI
- nebo pomocí
<code>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 komfortalternatives
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říkazln -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. Anázev
je jméno linku.man ln
je na věky váš kamarád!cíl
musí být absolutní cestaná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/sdk
Toto je pouhý zlomek všech linků, které se dají nastavit, ale na běh a základní kompilaci stačí. Adresářejre
asdk
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 zjdk1.7.0-XY/jre/bin
ajdk1.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
ajre:
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
- lze obejít linkováním přes „mezi-link“ link
- 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
ajre
linky).
V poslední části článku o instalaci javy ve Fedoře se podíváme na využití systému alternatives.
27. 12. 2012 at 19:00
Neudrzuje si nahodou IBM vlastni javu kuli hruzam typu Lotus Notes?
28. 12. 2012 at 20:41
Je to mozny. Je spousta IBM produktu ktere maji v klauzuly dodatek ze support je jen zaroven s IBM javou. Jednim z takovych produktu byl donedavna SAP. dnes ma ovsem sap – svete div se SAP javu….
Jeste do JDK6 mela IBM java vice cryptografickych rozsireni, ale tohle se v sedmicce srovnalo. V soucastnosti mi ten duvod fakt unika, ale asi nejaky bude kdyz je to v Rhel supplementaty kanalech ….