Debian.pro

Блог для пользователей и администраторов Debian


Установка человеческой Java/JDK в Ubuntu 12.04 Precise

Никогда бы не подумал, что придется писать подобные мануалы, тем более для себя… Но, пути копирастов неисповедимы.

Собственно. Если кто не в курсе, то в какой-то момент компаниякоторуюнельзяназывать изменила лицензионное соглашение для JDK так, что её стало невозможно распространять через линуксячьи репозитории.
OpenJDK, который остался в репозиториях — полный шлак и не умеет даже запускать KVM-ные апплеты. Очень многие.
Тем временем jdk делает огромные шаги, вышла уже 7я версия (шустрее, выше, сильнее, а главное, что нет проблем с доступом к ipmi/ip-kvm вообще никаких).
Вот только процесс установки теперь для убунтоводов несколько нетривиален.
Ну а поскольку сам я сижу под бубунтой — мне он тоже пригодится.

Самое паршивое, что теперь она не будет обновляться при apt-get update. Ну то, что оракловцы мудаки — мы уже давно знаем. Ставить её всё равно нужно. Они настолько мудаки, что теперь нельзя найти даже статическую ссылку на последнюю версию (которую можно было бы вставить в статью).

Посему топаем сюда Тут валяется версия 7u4.
По-хорошему нужно пойти сюда, и ткнуть «download» под нужной версией. Короче, ужас.

Скачать нам оттуда нужно файл jdk-7u4-linux-x64.tar.gz или jdk-7u4-linux-i586.tar.gz (ну или новее, соответственно, если найдете). Ну и не забыть найти и выбрать пункт «Accept License Agreement» в уродской бестолковой верстке сайта. Эти полудурки ещё и добавили GET параметр к ссылке в виде… эээ… куска от куки, без которого скачать этот файл не получится (короче, вам обязательно понадобится браузер и хрена с 2 вы скачаете её из консольки сервера).

Когда мы получим файл — можно наконец-то распрощаться с оракловым говносайтом и спокойно идти в консольку.

У меня получился файл jdk-7u4-linux-x64.tar.gz

user@host:~$ tar -xvf jdk-7u4-linux-x64.tar.gz

Положим это отродие в правильное с его точки зрения место:

root@host:~# mv jdk1.7.0_04 /usr/lib/jvm/

Создадим переменную, чтобы мануал остался универсальным для любых версий (потом всё следует делать в том же терминале):

root@host:~# jdir=jdk1.7.0_04
# здесь после равно нужно указать название каталога, которому мы делали mv

Теперь создадим правильные симлинки внутри системы:

root@host:~# update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/$jdir/bin/javac 1
root@host:~# update-alternatives --install /usr/bin/java java /usr/lib/jvm/$jdir/bin/java 1
root@host:~# update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/$jdir/bin/javaws 1
root@host:~# update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/$jdir/bin/jar 1

Теперь самое время убедить нашу убунту в том, что следует использовать именно 7ю jdk, которую мы только что «установили». Если других версий jdk вы не ставили — то вам просто для успокоения совести следует ввести следующие 3 команды. Если ставили — то нам зададут всякие глупые вопросы. На них придется ответить:

root@host:~# update-alternatives --config javac
There are 2 choices for the alternative javac (providing /usr/bin/javac).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac 1051 auto mode
1 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac 1051 manual mode
2 /usr/lib/jvm/jdk1.7.0_04/bin/javac 1 manual mode

Press enter to keep the current choice[*], or type selection number: 2
root@host:~# update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1051 auto mode
1 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1051 manual mode
2 /usr/lib/jvm/jdk1.7.0_04/bin/java 1 manual mode

Press enter to keep the current choice[*], or type selection number: 2
root@host:~# update-alternatives --config javaws
There is only one alternative in link group javaws: /usr/lib/jvm/jdk1.7.0_04/bin/javaws
Nothing to configure.
root@host:~# update-alternatives --config jar
...

Как выбрать циферку, думаю, всем понятно =)
Теперь проверим, что мы всё настроили верно:

user@host:~$ ls -la /etc/alternatives/{java,javac,javaws,jar}
lrwxrwxrwx 1 root root 33 May 23 01:40 /etc/alternatives/java -> /usr/lib/jvm/jdk1.7.0_04/bin/java
lrwxrwxrwx 1 root root 34 May 23 01:39 /etc/alternatives/javac -> /usr/lib/jvm/jdk1.7.0_04/bin/javac
lrwxrwxrwx 1 root root 35 May 23 00:29 /etc/alternatives/javaws -> /usr/lib/jvm/jdk1.7.0_04/bin/javaws
...
user@host:~$ java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)

Ну и осталась мелочь — рассказать нашим браузерам, что у нас есть java-плагин к ним (это актуально почти для всех браузеров, для FF и Chrome/Iron/Chromium — точно):

root@host:~# username=set_your_username_here; su ${username} -c "mkdir ~${username}/.mozilla/plugins"; rm /home/${username}/.mozilla/plugins/libnpjp2.so; su ${username} -c "ln -s /usr/lib/jvm/$jdir/jre/lib/amd64/libnpjp2.so ~${username}/.mozilla/plugins/"

Проверить, что оно заработало можно здесь.

Я бы ещё по вкусу назначил на файлы *.jnlp ассоциацию с javawc, но это уже отдельная история (собственно, jnlp только через javawc и откроется).


Комментарии (63):

  1. А можно просто воспользоваться репозиторием http://www.duinsoft.nl/packages.php
    :)

  2. Не стоит такого делать. Мы же не пираты =)
    Да и старьё там частенько.

  3. Ничего пиратского там нет.
    Это перозиторий скрипта, который делает примерно тоже самое, что описано в этой статье, только автоматически. Полезно, если нужно быстро поставить java и JRE аплет для браузеров.

  4. И лицензионное соглашение заставляет почитать? )

  5. sakal :

    А есть ещё make-jpkg из пакета java-package:

    make-jpkg jdk-7u2-linux-x64.tar.gz
    dpkg -i oracle-j2sdk1.7_1.7.0+update2_amd64.deb

  6. Руслан :

    Извиняюсь за оффтоп, но хотелось-бы спросить, курсов давно не было, или смотреть надо где-то в другом месте?

  7. Мы к инсталл-фесту готовились сначала, а потом анонс сделать забыли на следующую субботу после феста (послезавтра то есть).

  8. Руслан :

    то есть ничего не будет в эту субботу?

  9. maxchik :

    Спасибо вам огромное! Я очень долго мучился и наконец-то получилось именно благодаря вам.

  10. inkvizitor68sl :

    Не за что)

  11. gridis :

    У тебя есть ошибка, ты jdir присваиваешь значение под рутом, а потом используешь его под обычным пользователем, разве это работает? у меня не заработало. а за мануал спасибо, полезно, закинул в копилку.

  12. Хм. Не вижу такого нигде, вроде только от рута $jdir вставляю.

  13. Sergey :

    спасибо огромное, ведь время драгоценно :)

  14. Sergey, не за что.

    gridis, спасибо, нашел ошибку, поправил.

  15. Alexandr :

    Спасибо. В Firefox все заработало, а в Chromium нет.

  16. В нем тоже должно заработать.

    ls -la ~/.mozilla/plugins/

    Покажите

  17. Alexandr :

    alex@alex-VPCS13S8R:~$ ls -la ~/.mozilla/plugins/
    итого 8
    drwxrwxr-x 2 alex alex 4096 авг. 7 23:11 .
    drwx—— 5 alex alex 4096 авг. 7 23:09 ..
    lrwxrwxrwx 1 alex alex 39 авг. 7 23:11 libnpjp2.so -> /usr/lib/jvm//jre/lib/amd64/libnpjp2.so

  18. Странно, должно всё работать. Скорее всего, плагины в браузере отключены или что-то около того.

  19. ptashka :

    помогите пожалуйста, на создание правильных симлинков отвечает:update-alternatives: ошибка: альтернативный путь /usr/lib/jvm/bin/javac не существует.

  20. update-alternatives —install не сделали.

  21. ildar :

    согласен с inkvizitor68sl
    добавил deb http://www.duinsoft.nl/pkg debs all
    в /etc/apt/sources.list
    скачивается последняя версия java
    update-sun-jre/jre-7u6-linux-i586.tar.gz

  22. Иван :

    у меня вот такое на последние действия происходит
    su username -c «mkdir ~username/.mozilla/plugins»; rm ~username/.mozilla/plugins/libnpjp2.so; su username -c «ln -s /usr/lib/jvm/$jdir/jre/lib/amd64/libnpjp2.so ~username/.mozilla/plugins/»
    Неизвестный id: username
    rm: невозможно удалить «~username/.mozilla/plugins/libnpjp2.so»: Нет такого файла или каталога
    Неизвестный id: username

  23. username на своё имя пользователя замените во всех командах…

  24. Иван :

    а сейчас вот такое

    mkdir: невозможно создать каталог «/home/bender/.mozilla/plugins»: Файл существует

  25. Ну существует и существует.

    ls -la туда скажите.

  26. Иван :

    drwxr-xr-x 2 root root 4096 сент. 4 15:33 .
    drwxr-xr-x 3 root root 4096 авг. 18 02:07 ..
    lrwxrwxrwx 1 root root 37 сент. 3 18:45 flashplugin-alternative.so -> /etc/alternatives/mozilla-flashplugin
    lrwxrwxrwx 1 root root 49 сент. 4 15:33 libnpjp2.so -> /usr/lib/jvm/jdk1.7.0_04/jre/lib/i386/libnpjp2.so
    -rw-r—r— 1 root root 5412 июля 9 23:59 librhythmbox-itms-detection-plugin.so
    -rw-r—r— 1 root root 95760 апр. 3 00:56 libtotem-cone-plugin.so
    -rw-r—r— 1 root root 100232 апр. 3 00:56 libtotem-gmp-plugin.so
    -rw-r—r— 1 root root 71204 апр. 3 00:56 libtotem-mully-plugin.so
    -rw-r—r— 1 root root 79564 апр. 3 00:56 libtotem-narrowspace-plugin.so

  27. lrwxrwxrwx 1 root root 49 сент. 4 15:33 libnpjp2.so -> /usr/lib/jvm/jdk1.7.0_04/jre/lib/i386/libnpjp2.so

    Значит, всё правильно.

  28. Илья :

    Подскажите что не так? ->>>

    0. //ubuntu amd64: install g++-multilib

    1. # cp jdk-6u35-linux-i586.bin /opt/java/

    2. # cd /opt/java/

    3. # ./jdk-6u35-linux-i586.bin

    4. # update-alternatives —install /usr/bin/java java /opt/java/jdk1.6.0_35/bin/java 100

    5. # update-alternatives —install /usr/bin/javaws javaws /opt/java/jdk1.6.0_35/bin/javaws 100

    6. # update-alternatives —install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /opt/java/jdk1.6.0_35/jre/lib/i386/libnpjp2.so 100

    7. # update-alternatives —config java

    8. $ JAVA_HOME=/opt/java/jdk1.6.0_35/

    9. $ export JAVA_HOME

    10. $ PATH=$PATH:/opt/java/jdk1.6.0_35/bin

    11. $ export PATH

    После этого javac не находим, и браузер (мозилла) тоже не находит джаву.

  29. Вы откуда это и зачем взяли ?

  30. Nn :

    доброго времени суток у меня при выполнении данной операции mv jdk1.7.0_04/ /usr/lib/jvm/
    говорит что отказанно в доступе как мне это исправить ?

  31. Внимательно смотрите, от какого пользователя выполняется команда.

  32. Bugager :

    root@host:~# su username -c «mkdir ~username/.mozilla/plugins»; rm ~username/.mozilla/plugins/libnpjp2.so; su username -c «ln -s /usr/lib/jvm/$jdir/jre/lib/amd64/libnpjp2.so ~username/.mozilla/plugins/»

    это для Хромиума подходит? плагин все равно не встает

  33. Bugager :

    Хм… все-то то надо было подумать и поставить вместо amd64, i386.

  34. sudo ln -s /usr/lib/jvm/jdk1.7.0_09/jre/lib/i386/libnpjp2.so /home/user/.mozilla/plugins/

    а если там есть старая ссылка удалить её нах

  35. Dennis :

    Материал статьи отличный, но много личного негатива, от чего и статья оставляет негативное впечатление. Лучше постараться обойтись без этого. Правда.
    В остальном — отличная работа!
    Спасибо и всего наилучшего! :)

  36. Денис :

    А мне наоборот понравился негатив в статье. Не в том смысле что так и нужно всегда писать. Просто так статья выглядит живой и читать ее интересно. Дочитал до конца с интересом и воспользовался советом из первого комментария. Для меня так было проще.

  37. BigJ :

    А ещё лучше этим репозиторием пользоваться http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html Там есть и jdk

  38. Alex :

    Да репозиторий из первого коммента уже недоступен — вот он минус репозиториев. Поэтому статья в двойне полезна т.к. описана прямая установка. И спасибо за негатив, я думал только мне одному приходится разбираться в функционале этого Г-сайта. Это хорошо что вам только яву, когда я скачивал комплект для J2me sdk замучился, там это было так глубоко запихнуто.

  39. Огромное спасибо за мануал.

  40. Та не за чт)

  41. jem :

    Ошибка почему то, хотя все остальное отработало на ура. И спасибо за статью!
    user@user-VirtualBox:/$ ls -la /etc/alternatives/{java, javac, javaws}
    ls: cannot access /etc/alternatives/{java,: No such file or directory
    ls: cannot access javac,: No such file or directory
    ls: cannot access javaws}: No such file or directory

  42. update-alternatives не делали.

  43. Спасибо тебе огромное. Выручил. Написано бодро и здраво, респект тебе inkvizitor68sl

  44. Влад :

    Не за чт )

  45. epishan :

    вот рабочий вариант для chromium, может пригодится кому

    sudo ln -s /usr/lib/jvm/$jdir/jre/lib/amd64/libnpjp2.so /usr/lib/chromium-browser/plugins/

    или для i386 архитектуры:
    sudo ln -s /usr/lib/jvm/$jdir/jre/lib/ш386/libnpjp2.so /usr/lib/chromium-browser/plugins/

  46. > вот рабочий вариант для chromium, может пригодится кому
    Он же в .mozilla/plugins тоже смотреть должен?

  47. epishan :

    Ну как бы да, и там и там линк ссылается на libnpjp2.so. Правда не знаю, сработает ли линк из ~/.config/chromium/plugins, но универсальный вариант работает.

  48. Koss :

    Автор, у тебя опечатка:
    mv jdk1.7.0_04/ /usr/lib/jvm/ — твое
    mv jdk1.7.0_04 /usr/lib/jvm/ — так надо, а то кишки копирует и путь /usr/lib/jvm/$jdir/bin/javac уже не находит

  49. Alex :

    respect!
    неплохо бы еще добавить и jar
    update-alternatives —install /usr/bin/jar jar /usr/lib/jvm/$jdir/bin/jar 1

  50. Koss@, Alex@

    Спасибо, пофиксил.

  51. evGEN :

    http://forum.loadcore.ru/index.php?/topic/84-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-java-%D0%BD%D0%B0-debian-6/
    Вот ещё нашел способ,вроде бы всё робить. На Debian 6

  52. MooNDeaR :

    Спасибо огромное. Проверил на xubuntu 13.04, всё работает.

  53. Та не за чт

  54. epishan :

    evGEN,спс. быстрее и удобнее, проверил на бубунте 12.04

  55. 2 epishan
    Есть много работающих способов c пакетами, но они теперь противоречат лицензии Java. Из-за этого описан именно «базовый» способ установки.

  56. Денис :

    root@host:~# jdir=jdk1.7.0_04
    # здесь после равно нужно указать название каталога, которому мы делали mv

    а какому каталогу мы делали mv? home или usr чтот я совсем запутался

  57. Денис :

    Я распаковал в домашнюю паку, сделал mv в /usr/lib/jvm
    далее послe jdir= что только не писал, но все равно после команды root@host:~# update-alternatives —install /usr/bin/javac javac /usr/lib/jvm/$jdir/bin/javac 1 пишет альтернативный путь не существует.

  58. Денис :

    Я распаковал в домашнюю папку, сделал mv в /usr/lib/jvm
    далее послe jdir= что только не писал, но все равно после команды root@host:~# update-alternatives —install /usr/bin/javac javac /usr/lib/jvm/$jdir/bin/javac 1 пишет альтернативный путь не существует.

  59. jdir=${}
    Здесь должно быть название каталога, который распаковался из архива с джавой.

    В ls /usr/lib/jvm/ его должно быть видно.

  60. Smiler :

    А для NetBean’а этот вариант установки подойдёт? Он вроде как ищет яву в /usr/local/share Качал даже вариант явы вместе с нетбином, один хак не делает там ни каталога ни симлинка…. Оракл хренов.

  61. Smiler :

    Забыл уточнить: Кубунта 15.10, НетБин 8.1.

  62. inkvizitor68sl :

    Чего не знаю, того не знаю =)

Написать комментарий