Sunin Java Fedorassa

Linux.fista
Versio hetkellä 23. elokuuta 2009 kello 13.11 – tehnyt Vpv (keskustelu | muokkaukset)
Siirry navigaatioon Siirry hakuun

Tämä ohje on alustava ja sen noudattamisesta saattaa seurata jotakin ongelmia. On suositeltavaa, että ohjetta seuraavalla käyttäjällä olisi jo ennestään perustiedot RPM-pakettien kääntämisestä.

Fedorassa versiosta 10 eteenpäin on oletuksena saatavilla avoimen lähdekoodin OpenJDK-Java-toteutus paketteina java-1.6.0-openjdk, java-1.6.0-openjdk-devel ja java-1.6.0-openjdk-plugin. Sen asennus on suositeltavaa ja useimmat Java-ohjelmat toimivat sillä hyvin. Jotkin Java-ohjelmat ja appletit saattavat kuitenkin vaatia niin sanotun virallisen Sunin suljetun lähdekoodin Java-toteutuksen. Merkittävä tällainen esimerkki Suomessa on aiemmin ollut Sammon verkkopankki. Fedora 11:n OpenJDK-versiolla sekin toimii ainakin kirjautumisruutuun asti.

Sunin Java-toteutusta ei saa levittää vapaasti, joten esimerkiksi Fedoran kolmannen osapuolen ohjelmalähteet eivät voi jakaa valmiita paketteja siitä. Sunin itse verkkosivuillaan jakamat RPM-paketit eivät taas integroidu Fedoraan parhaalla mahdollisella tavalla. JPackage-projekti tarjoaa sivuillaan valmiita "koodittomia" (nosrc) SRPM-paketteja, joista saa yhdessä Sunin Java-binäärien kanssa käännettyä Fedoraan sopivat RPM-paketit Sunin Javasta. Tässä menetelmässä siis tavallaan yhdistetään JPackagen paketointiskriptit Sunilta ladattuun Java-koodiin.

Nämä ohjeet on tehty Fedora 10:lle, mutta ne toimivat mahdollisesti myös Fedora 9:llä.

Asennetaan tarvittavia ohjelmia:

su -c "yum install jpackage-utils rpm-build rpmdevtools wget system-switch-java"

Asetetaan RPM-kääntöpuu omaan kotihakemistoon:

rpmdev-setuptree

Sitten on haettava JPackage-ohjelmalähteestä sopiva Java-SRPM. Sen saa osoitteesta http://mirrors.dotsrc.org/jpackage/1.7/generic/non-free/SRPMS/ mistä ladataan tiedosto java-1.6.0-sun-*.nosrc.rpm. Artikkelin kirjoitushetkellä sopiva tiedosto on java-1.6.0-sun-1.6.0.11-1jpp.nosrc.rpm.

Siirrytään RPM-kääntöpuun SRPMS-hakemistoon:

cd ~/rpmbuild/SRPMS

Ladataan SRPM (tässä on muistettava korvata tiedostonimi uusimmalla saatavalla versiolla):

wget http://mirrors.dotsrc.org/jpackage/1.7/generic/non-free/SRPMS/java-1.6.0-sun-1.6.0.11-1jpp.nosrc.rpm

Asennetaan ladattu tiedosto RPM:llä tässä on muistettava korvata tiedostonimi ladatun tiedoston nimellä):

 rpm -i java-1.6.0-sun-1.6.0.11-1jpp.nosrc.rpm

Tässä vaiheessa on ladattava uusin Java Development Kit Sunin lataussivuilta. Tätä kirjoitettaessa se on "Java SE Development Kit (JDK) 6 Update 16". Sivuilta valitaan alustaksi Linux ja ladataan tiedosto jdk-6*-linux-i586.bin, ei siis RPM-versiota. Artikkelia kirjoitettaessa tiedoston nimi on jdk-6u16-linux-i586.bin. Tiedosto ladataan hakemistoon ~/rpmbuild/SOURCES.

Nyt on verrattava ladatun nosrc.rpm-tiedoston ja bin-tiedoston versioita. Korostettuna tässä ovat merkitsevät osat: java-1.6.0-sun-1.6.0.11-1jpp.nosrc.rpm ja jdk-6u16-linux-i586.bin. Artikkelia kirjoitettaessa uusin saatava nosrc.rpm-tiedosto on siis tehty JDK Update 11:ä varten ja uusin JDK-versio on Update 16, tässä on ristiriita, joka on korjattava. Jos merkityt numerot ovat molemmissa tiedostoissa samat, seuraavaa osuutta ei tarvitse tehdä.

Siirrytään RPM-kääntöpuun SPEC-tiedostot sisältävään hakemistoon:

cd ~/rpmbuild/SPECS

Nyt on muokattava jollakin tekstieditorilla tiedostoa java-1.6.0-sun.spec siten, että siellä oleva buildver-määritys muutetaan vastaamaan ladatun bin-tiedoston u- eli update-lukua. Artikkelia kirjoitettaessa spec-tiedostossa on

%define buildver        11

joka on muutettava muotoon

%define buildver        16

Seuraavat komennot on taas annettava tiedostojen versioista huolimatta.

Tehdään RPM-paketit:

setarch i586 rpmbuild -bb java-1.6.0-sun.spec

Jos pakettien tekeminen onnistuu, siirrytään valmiit paketit sisältävään hakemistoon:

cd ~/rpmbuild/RPMS/i586

Nyt on vuorossa pakettien asentaminen järjestelmään. RPM-paketteja on useita, joista java-1.6.0-sun-jdbc ja java-1.6.0-sun-fonts eivät asennu Fedora 10:een riippuvuusongelmien vuoksi. Asennetaan kaikki muut paketit. Tässä on käytetty artikkelin kirjoittamisen aikaan tehtyjä versioita, tarkat tiedostonimet voivat olla erilaisia:

su -c "yum --nogpgcheck localinstall java-1.6.0-sun-1.6.0.16-1jpp.i586.rpm java-1.6.0-sun-alsa-1.6.0.16-1jpp.i586.rpm java-1.6.0-sun-demo-1.6.0.16-1jpp.i586.rpm java-1.6.0-sun-devel-1.6.0.16-1jpp.i586.rpm java-1.6.0-sun-plugin-1.6.0.16-1jpp.i586.rpm java-1.6.0-sun-src-1.6.0.16-1jpp.i586.rpm"

Jos asennus onnistuu, suoritetaan ohjelma system-switch-java, josta valitaan "Sun 1.6.0" käytettäväksi Java-toteutukseksi. Nyt Sunin Java-toteutus on muuten käytössä, mutta Firefoxin Java-liitännäinen ei vielä ole. Koska Java-toteutuksen valinta perustuu Fedorassa muutenkin alternatives-järjestelmään, asetetaan myös Java-liitännäinen valittavaksi alternativesillä.

Lisätään javaplugin.so alternativesin hallintaan:

su -c "alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /usr/lib/jvm/java-1.6.0-sun-1.6.0.16/jre/plugin/i386/ns7/libjavaplugin_oji.so 20000"

Sitten varmistetaan, että Sunin Java-liitännäinen on käytössä, näin ei välttämättä ole, jos esimerkiksi paketti java-1.6.0-openjdk-plugin on ollut asennettuna ennen Sunin Java-toteutuksen asentamista. Annetaan komento

su -c "alternatives --config libjavaplugin.so"

ja valitaan ohjeiden mukaan luettelosta Sunin Java-liitännäinen, joka artikkelin kirjoittamisen aikaan on /usr/lib/jvm/java-1.6.0-sun-1.6.0.16/jre/plugin/i386/ns7/libjavaplugin_oji.so.

java-1.6.0-sun-1.6.0.11-1jpp.nosrc.rpm-paketin vaatimat muutokset

java-1.6.0-sun-1.6.0.11-1jpp.nosrc.rpm-paketissa on virhe eikä se toimi asennettuna oikein. Asennusvaiheessa tulee virheilmoitus "linkki /usr/bin/javaws on virheellinen orjalle javaws (/usr/share/javaws javaws)". Tämän voi korjata muokkaamalla java-1.6.0-sun.spec-tiedostoa ennen rpmbuild-komennon antamista. %post-osiossa noin rivi 414 on seuraava:

--slave %{_datadir}/javaws                 javaws                      %{jrebindir}/javaws \

Se on vaihdettava muotoon:

--slave %{_bindir}/javaws                 javaws                      %{jrebindir}/javaws \

Lisäksi Java-versio jdk-6u16-linux-i586.bin asentaa tiedoston, jota ei ole lueteltu java-1.6.0-sun.spec-määrittelytiedostossa. Sitä varten java-1.6.0-sun.spec-tiedoston %files -f %{name}-%{version}.files-osioon on lisättävä rivin (noin rivi 704)

%config(noreplace) %{_jvmdir}/%{jredir}/lib/security/java.security

alle seuraava rivi:

%config(noreplace) %{_jvmdir}/%{jredir}/lib/security/blacklist

Tämän jälkeen voidaan taas seurata yllä annettuja ohjeita normaalisti.

Lähteet

Katso myös