Make-jpkg: Pacchettizziamo Java: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(re-debianized)
mNessun oggetto della modifica
 
(30 versioni intermedie di 9 utenti non mostrate)
Riga 1: Riga 1:
==Introduzione==
{{Non-free|Un'alternativa completamente open è OpenJDK presente nei [[repository]] ufficiali}}
{{Versioni compatibili|Squeeze|Wheezy|Jessie}}
__TOC__


Qualche volta ci troviamo nella situazione di dover aggiornare una macchina con una connessione internet lenta o inesistente...
== Introduzione ==
Alcune volte viene suggerito [[Debmirror: creiamo un mirror Debian | Debmirror]] (soluzione che reputo sovradimensionata e dispendiosa), altre viene suggerito il download del primo DVD o dei primi 2-3 CD di Sarge (ma per quanto riguarda sid, non esiste niente del genere)...
Per vari motivi può essere necessario installare la versione proprietaria di Java su una macchina Debian, tipicamente quando le varie versioni libere non si dimostrano adeguate. Sicuramente tutti gli utenti avranno notato che non c'è, nel [[repository]] ufficiale, un pacchetto contenente j2se o j2dk ufficiali della Oracle ma sono invece presenti i compilatori alternativi, come gcj, kaffe, kjc, javacc.<br/>
Cos� ho pensato di organizzare qualche appunto che avevo su apt-zip, un comodo tool che ci viene in aiuto proprio in questi casi!
Però, se volessimo avere il compilatore e/o l'interprete 'originale' della Oracle? Come possiamo fare?
Vedremo come utilizzarlo su computer connessi ad internet con una connessione lenta...


==Installazione==
Il primo modo che salta agli occhi è di installarlo in <code>/opt</code> e poi sistemare il [[path|$PATH]], ma la soluzione, giustamente, non piace a tutti, in quanto 'sporca' il sistema e, cosa che crea parecchi problemi, genera dei problemi con le dipendenze dei pacchetti, visto che molti dei pacchetti che richiedono Java per funzionare non lo trovano installato.


L'installazione � semplicissima:
In questo HowTo vedremo come pacchettizzare Java, usando direttamente il binario di installazione disponibile sul sito della Oracle!<br/>
<pre>
I comandi e il percorso dei file sono mostrati per installare un pacchetto a 32 bit, i passi per installare Java a 64 bit sono analoghi.
# apt-get install apt-zip
</pre>
 
 
==Configurazione==
 
Il file di configurazione � '''/etc/apt/apt-zip.conf''' e contiene alcuni valori di defalut utilizzati dai due comandi di apt-zip.
Ecco quello di default:
<pre>
# Configuration file for apt-zip.
# This is a /bin/sh code snippet.
 
# METHOD is taken from /usr/share/apt-zip/.
METHOD=wget
 
# MEDIUM should be defined in /etc/fstab with option `noauto'.
MEDIUM=/ZIP
 
# OPTIONS is a comma-separated list of options.
# Possible options include: tar[=posixtarprogram], gnutar[=gnutarprogram],
# solaristar[=solaristarprogram], restart
# Examples:
# OPTIONS=tar=gtar
# OPTIONS=solaristar,restart
# OPTIONS="gnutar, restart=1"
# Recommended for a Solaris download host when possible:
# OPTIONS=solaristar,gnutar=gtar,restart
OPTIONS=
 
# DEFAULT_APTGETACTION is the action taken by apt-get when neither
# the --aptgetaction nor the --packages options are given.
# Possible actions include: dselect-upgrade(default), upgrade and dist-upgrade
DEFAULT_APTGETACTION=dselect-upgrade
 
# The regexp applied to filter (with grep) the files to download.
# Examples:
# GREP=^http\|^ftp
# GREP="-v ^cdrom\|^file"
GREP="^http\|^ftp"
</pre>
 
 
Le direttive che ci interessano sono due:
'''MEDIUM''' e '''DEFAULT_APTGETACTION'''
 
'''MEDIUM''' indica il path della periferica removibile che verr� utilizzata (io l'ho modificata in /mnt/pen, il mountpoint della mia pennina usb);<br/>
'''DEFAULT_APTGETACTION''' l'azione di default da apt-get (a meno che non sia indicata una lista di pacchetti od un'altra azione), quella di default esegue un aggiornamento tramite dselect.
 
Normalmente solo '''MEDIUM''' viene modificato, in quanto le opzioni di default sono pi� che corrette per qualsiasi utilizzo.
 
==Preparazione del Sistema==
 
Ora, prima di passare all'analisi del programma ed al suo utilizzo, prepariamo il sistema per usare apt-zip.
Normalmente � necessario un disco removibile (penna usb, disco usb, uno ZIP o altro) ma � possibile, con alcuni accorgimenti, esportare i due file creati da apt-zip tramite un floppy od una mail, e poi creare in un'altra sede un cd od un dvd con i pacchetti scaricati.
 
===Supporto Removibile===
Nel caso si disponga di un supporto removibile � consigliato modificare il file /etc/fstab aggiungendo la seguente riga (riferita al dispositivo):
<pre>
mountpoint device filesystem options 0 0
</pre>
 
per esempio (nel caso di una penna usb)
<pre>
/dev/sda1 /mnt/pen vfat rw,users,umask=000,quiet 0 0
</pre>
 
 
per le opzioni ed i filesystem disponibili, invito a leggere la documentazione visualizzata dal comando
<pre>
$ man mount
</pre>
 
Inoltre, se non presente nel sistema, � necessario creare la directory indicata nel mountpoint (nell'esempio precedente /mnt/pen ).
 
===In una directory locale===
Nessuna preparazione richiesta.
 
 
==Sintassi ed Opzioni==
 
Apt-zip � composto da due eseguibili:
'''apt-zip-list''' e '''apt-zip-inst'''
 
; apt-zip-list : ha il compito di generare uno script (ed un file contenente le opzioni per l'installazione dei pacchetti che verranno scaricati) per il download dei pacchetti da una qualsiasi macchina Linux (con un trucchetto � possibile eseguire il download anche da macchine con un sistema operativo diverso, purch� con wget installato).<br/>
; apt-zip-inst : ha il compito di installare i file scaricati (vedremo in seguito come).
 
La sintassi � la seguente:
<pre>
apt-zip-list [--help] [--version] [--medium=mountpoint]
            [--aptgetaction=action] [--packages=package[,package...]]
            [--fix-broken] [--skip-mount] [--method=method] [--options=opt[,opt...]]
            [ --accept=accept[,accept...]] [ --reject=reject[,reject...]]
 
apt-zip-inst [--help] [--version] [--medium=mountpoint] [--aptgetaction=action]
            [--packages=package[,package...]] [--fix-broken] [--skip-mount]
</pre>
 
Dove le opzioni hanno il seguente significato:
 
'''In comune'''<br/>
; --help, -h : Mostra un piccolo help<br/>
; --medium, -m : Indica un mountpoint differente da quello indicato nel file di configurazione<br/>
; --aptgetaction, -a : Indica una azione da far compiere ad apt-get, le scelte possibili sono: dselect-upgrade, upgrade e dist-upgrade;
Se non viene passata l'opzione --packages, viene eseguita l'azione di default (se non modificata con questa opzione)<br/>
; --packages, -p : Indica una lista (separata da virgola) dei pacchetti da installare<br/>
; --fix-broken, -f : Esegue apt-get con l'opzione --fix-broken (man apt-get)<br/>
; --skip-mount : Non esegue il mount e l'umount della periferica (utile se non si vuole utilizzare una periferica removibile)<br/>
 
'''Solo per apt-get-list'''<br/>
; --accept , -A / --reject , -R : Lista separata da virgola dei protocolli utilizzari per il download (default http e ftp)<br/>
 
==Utilizzo==
 
Tratteremo allo stesso modo sia il caso in cui venga utilizzato un supporto removibile, sia quello in cui venga usata una directory del filesystem...
 
Prima di lanciare apt-zip dobbiamo decidere cosa fare:
# aggiornare il sistema
## usare dselect
## fare un upgrade
## fare un dist-upgrade
# installare dei pacchetti mancanti
 
 
===Aggiornare il sistema===
forse � la pratica pi� diffusa...abbiamo a disposizione tre opzioni:
 
====dselect-upgrade====
eseguendo
<pre>
# dselect
</pre>
 
e lanciando l'aggiornamento, verranno scaricati gli archivi con le liste dei pacchetti aggiornati, che verranno processati da dselect... inoltre si potranno anche selezionare i pacchetti che si vorrebbero installare (in pratica si usa normalmente il tool dselect, avendo cura di non selezionare l'opzione di installare i pacchetti, ma uscendo dal programma)...
Una volta fatto, � sufficiente lanciare il seguente comando per creare i due script necessari per scaricare, da un altro computer, i pacchetti:
<pre>
# apt-zip-list --aptgetaction=dselect-upgrade --medium=/mnt/point
</pre>
 
dove '''/mnt/point''' rappresenta il punto di mount del dispositivo; se si tratta di una directory normale, invece, il comando sar�
<pre>
# apt-zip-list --aptgetaction=dselect-upgrade --skip-mount --medium=/mnt/point
</pre>
 
 
====upgrade====
verr� generata la lista dei pacchetti da scaricare per eseguire un
<pre>
# apt-get upgrade
</pre>
 
il comando per fare questo �
<pre>
# apt-zip-list --aptgetaction=upgrade --medium=/mnt/point
</pre>
nel caso di un supporto removibile, o
<pre>
# apt-zip-list --aptgetaction=upgrade --skip-mount --medium=/mnt/point
</pre>
 
nel caso di una directory del filesystem...
 
====dist-upgrade====
in questo caso, verr� generata la lista dei pacchetti da scaricare per completare il comando
<pre>
# apt-get dist-upgrade
</pre>
 
il comando per fare questo �
<pre>
# apt-zip-list --aptgetaction=dist-upgrade --medium/mnt/point
</pre>
nel caso di un supporto removibile, o
<pre>
# apt-zip-list --aptgetaction=dist-upgrade --skip-mount --medium=/mnt/point
</pre>
nel caso di una directory del filesystem...
 
 
===Installare i pacchetti mancanti===
in questo caso, � possibile creare la lista di pacchetti necessari per l'installazione di un programma/pacchetto e per soddisfare le sue dipendenze...
il comando �
<pre>
# apt-zip-list --packages=pacchetto,pacchetto1,pacchetto2 --medium=/mnt/point
</pre>
nel caso di un supporto removibile, o
<pre>
# apt-zip-list --packages=pacchetto,pacchetto1,pacchetto2 --skip-mount --medium=/mnt/point
</pre>
nel caso di una directory del filesystem...
dove pacchetto,pacchetto1,pacchetto2 � la lista dei pacchetti da installare, separati da una virgola...
 
Come potete vedere, l'utilizzo � veramente semplice ed intuitivo...
 
 
==Gli Script==
 
Dopo l'esecuzione dei comandi illustrati precedentemente, verranno generati due script:
 
'''apt-zip.options''' contenente le opzioni passate ad apt-zip-list, che verranno utilizzate da apt-zip-inst per installare correttamente i pacchetti scaricati
 
'''fetch-script-wget-nomemacchina'''
che si occuper� di scaricare i pacchetti, di controllarne l'md5 (cos� da evitare i problemi derivanti da una possibile (remotamente) corruzione dei file)
 
In parole povere, sar� semplice, sulla macchina da cui si possono scaricare i pacchetti, lanciare il secondo script:
<pre>
$ ./fetch-script-wget-nomemacchina
</pre>
 
cos� verranno scaricati i pacchetti contenuti nella lista...
 
Se non si dispone di una shell dove eseguire lo script (se la macchina � windows, per esempio, anche se una visitina a [1] sarebbe indicata), � possibile scaricare ugualmente i pacchetti...
� sufficiente, infatti, lanciare questo comando:
<pre>
$ cat fetch-script-wget-maxer | egrep "://" | cut -d " " -f 1 > lista.txt
</pre>
 
per ottenere una lista 'normale' di file, utilizzabile da wget o da un normale programma per il download di file dalla rete...
Se si usa wget (Disponibile anche per windows [2]) � sufficiente un
<pre>
$ wget -i lista.txt
</pre>
 
 
{{Box|Nota Bene:|i file scaricati, per procedere con l'installazione, devono essere nella stessa directory che contiene il file apt-zip.options}}
 
==Installazione dei pacchetti==


Una volta terminato, � possibile installare i pacchetti con il comando
== Cosa ci occorre ==
Provvediamo a installare i [[pacchetto|pacchetti]] <code>java-package</code> e <code>fakeroot</code>. Con [[privilegi di amministrazione]] è sufficiente:
<pre>
<pre>
# apt-zip-int --medium=/mnt/point
# apt-get install java-package fakeroot
</pre>
</pre>


(ricordo che la direttiva '''--medium''' pu� essere omessa se presente nel file di configurazione di apt-zip)
E poi scarichiamo il JDK (file '''tar.gz''', NON rpm) dal [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html sito ufficiale].
aggiungendo, eventualmente, '''--skip-mount''' se si tratta di una directory locale...


==Nessuna Connessione ad Internet==
Una volta terminato il download, saremo pronti per proseguire.
In questa sezione vedremo come poter usare apt-zip in casi di totale assenza di connessione ad Internet. Premetto che la cosa � abbastanza macchinosa, e richiede due accessi al computer provvisto di connessione.


===L'idea===
== Creazione del Pacchetto ==
L'idea �, fondamentalmente, semplice: ''inganneremo'' apt creando sulla nostra macchina un mirror dei repository da cui vorremmo attingere i pacchetti. Il mirror, per�, sar� parziale/fasullo, in quanto conterr� solo i file relativi ai pacchetti contenuti nel repository. Sar� necessario utilizzare Apache, in quanto apt-zip non inserisce nella lista i pacchetti non raggiungibili tramite una connessione (ad esempio quelli su disco..).


===Configurazione di Apache===
Bene, siamo pronti a creare il pacchetto!!!<br/>
� sufficiente installare apache:
Posizioniamoci nella directory dove sono stati scaricati i binari di Java e, da utente normale, diamo il seguente comando:
<pre>
<pre>
# apt-get install apache
$ make-jpkg jdk-8u45-linux-i586.tar.gz
</pre>
</pre>
Per una guida pi� approfondita a riguardo, consiglio la lettura di: [[LAMP: Linux, Apache, MySQL e PHP]].
(o il nome del pacchetto scaricato, in questo caso ho pacchettizzato il JDK 8 update 45)
 
al comando '''make-jpkg''' è possibile passare i seguenti parametri:<br/>
La configurazione di default di Apache utilizza come directory principale di lavoro '''/var/www/''', che verr� usata anche da noi per creare i nostri repository ''fittizzi''!
; --full-name <name> : Nome del Maintainer<br/>
 
; --email <email> : Email del Maintainer<br/>
Apache si ''muove'' come l'utente '''www-data''', quindi dovremo sempre preoccuparci di rendere i dati accessibili a questo utente, in modo da non ricevere errori di tipo ''403'', indicanti una mancanza di permessi.
; --changes : Indica che il processo deve creare un file .changes<br/>
 
; --revision : Aggiunge una revisione Debian<br/>
===La struttura delle Directory===
; --source : Crea un pacchetto sorgente anziché binario<br/>
Prendiamo come esempio il repository '''Nerim''', contenente software come mplayer, w32codecs, ... molto utili per la visualizzazione di filmati.
; --help : Visualizza un piccolo help contenente i comandi qui illustrati<br/>
; --version : Stampa a video la versione


Prima di tutto, rechiamoci sul sito ufficiale del repository (http://debian.video.free.fr/), cos� da vedere come � strutturato.
{{box|Nota|Le versioni stable e testing di java-package non supportano necessariamente tutte le versioni di java più recenti.}}


Prendiamo in analisi i repository per Sarge:
Una volta terminato il processo di generazione del pacchetto, lo installiamo con [[gdebi]], che provvederà anche a installare tutte le dipendenze mancanti tramite [[APT]]:
<pre>
<pre>
deb http://ftp.nerim.net/debian-marillat/ sarge main
# gdebi oracle-java8-jdk_8u45_i386.deb
</pre>
</pre>
come descritto nella guida [[I repository ed il loro utilizzo]], in questo caso i file che descrivono il contenuto del repository si trovano in '''http://ftp.nerim.net/debian-marillat/dists/sarge/main/''', in particolare nella sottodirectory '''binary-i386'''.
Procediamo, quindi, a ricreare una struttura simile in '''/var/www/''':
<pre>
# mkdir /var/www/marillat
# chown user:www-data $_
# chmod g+s $_
$ cd /var/www/marillat
$ mkdir -p dists/sarge/main/binary-i386/
$ cd $_
</pre>
in questo caso, '''user''' rappresenta l'utente che normalmente utilizziamo, mentre '''$_''' ci permette di riutilizzare il parametro utilizzato nel comando precedente, facendoci risparmiare qualche carattere ([[Bash  tips]] per maggiori informazioni).


La struttura � stata creata, non ci resta che recuperare i file contenuti in quella directory: ''Packages.gz'' e ''Release''.
Ovviamente sostituendo '''oracle-java8-jdk_8u55_i386.deb''' con il nome del pacchetto appena creato!


Una volta scaricati, copiamoli nella directory creata:
{{Box | Installare <code>gdebi</code> | È sufficiente almeno:
<pre>
<pre>
$ cp Packages.gz Releasee /var/www/marillat/dists/sarge/main/binary-i386/
# apt-get install gdebi-core
</pre>
</pre>


 
In alternativa, è possibile utilizzare [[dpkg]] e poi sistemare le dipendenze mancanti:
===Modifica di sources.list===
Siamo pronti a modificare il file '''/etc/apt/sources.list''' in modo da utilizzare il repository appena creato.
Nel nostro caso di esempio, quindi, la riga da aggiungere sar� la seguente:
<pre>
<pre>
deb http://localhost/arillat/ sarge main
# dpkg -i oracle-java8-jdk_8u45_i386.deb
# apt-get install -f
</pre>
</pre>
ma è sconsigliato, perché la risoluzione delle dipendenze mancanti avviene solo successivamente all'installazione del pacchetto, di conseguenza il sistema potrebbe rimanere in uno stato incoerente in presenza di dipendenze impossibili da soddisfare.}}


Una volta terminata la modifica, aggiorniamo il database dei pacchetti disponibili con un
Ora non ci resta che sistemare una ultima cosa: '''alternatives'''. Date il comando:
<pre>
<pre>
# apt-get update
# update-alternatives --config java
</pre>
</pre>
(uguale procedimento anche per javac, javadoc ed eventualmente altri eseguibili Java) e selezionate 'quale Java' utilizzare!


===Creazione della lista di pacchetti===
Ritornando al nostro ragionamento, se tutto funziona come previsto, la richiesta di installazione di un pacchetto dovrebbe ovviamente fallire (perch non presente realmente nel repository), per dovrebbe avere una corrispondenza con l'url reale del pacchetto...


Un esempio vale pi� di mille parole: proviamo ad installare il pacchetto '''w32codecs''':
<!-- PARTE COMMENTATA: directory /usr/lib/jvm/jdk-8-oracle-i586/jre/plugin/i386 non esistente nella versione (per Jessie) provata
<pre>
# apt-get install w32codecs
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  w32codecs
0 upgraded, 1 newly installed, 0 to remove and 313 not upgraded.
Need to get 13.2MB of archives.
After unpacking 31.9MB of additional disk space will be used.
Err http://localhost sarge/main w32codecs 1:20050412-0.0
  404 Not Found
Failed to fetch http://localhost/marillat/pool/main/w/w32codecs/w32codecs_20050412-0.0_i386.deb  404 Not Found
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
</pre>
come si pu� vedere, il pacchetto non viene trovato... se sostituiamo a '''localhost/marillat''' '''ftp.nerim.net/debian-marillat''' e proviamo a scaricare il pacchetto da una macchina connessa alla rete, vedremo che effettivamente l'url � corretto.


A questo punto � banare l'utilizzo di ''apt-zip-list'' per la generazione della lista di pacchetti da installare. Procediamo con il nostro esempio, e chiediamo ad apt-zip di creare lo script per scaricare il pacchetto '''w32codecs''':
== Plugin per browser ==
<pre>
$ apt-zip-list --packages=w32codecs --skip-mount --medium=/path/della/directory/
</pre>


=== Mozilla e derivati (IceWeasel) ===


===Conversione dello script===
Di norma, terminate le precedenti operazioni, java dovrebbe comparire automaticamente nella lista dei plugin disponibili, tuttavia se così non fosse
Lo script che abbiamo ottenuto, per�, contiene dei riferimenti al mirror ''fittizzio'', che devono essere convertiti in url corrette, riferite alla posizione reale del repository.
gli utenti possono usare il comando che segue:
 
Per velocizzare questa conversione, ci faremo aiutare da '''sed''':
<pre>
<pre>
$ sed  -e 's/localhost\/marillat/ftp.nerim.net\/debian-marillat/' \
# ln -s /usr/lib/jvm/jdk-8-oracle-i586/jre/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/mozilla/plugins/
    fetch-script-wget-knio > fetch-script-wget-knio-url
</pre>
</pre>
oppure, se non si desidera eseguire il download dell'intero JDK, seguire questa guida: [[Oracle Java plugin]]
-->


il file '''fetch-script-wget-knio-url''' permetter� di scaricare correttamente i pacchetti.
== Problemi noti ==
 
Come già accennato può accadere, soprattuto con la versione stabile di <code>java-package</code>, che non sia possibile installare le ultime versioni di java. Quando questo succede tipicamente il comando <code>make-jpkg</code> termina senza richiedere alcun input all'utente e stampando a video poche righe, tra cui la seguente: ''No matching plugin was found''.
==Conclusione==
In tal caso può essere utile installare una versione più recente di <code>java-package</code>, per esempio quella di Sid, avendo cura di utilizzare opportunamente il [[Repository & pinning | pinning]].


L'utilizzo di questa utility � veramente semplice, soprattutto rispetto alle innumerevoli comodit� che offre...
== Conclusioni ==
Personalmente uso apt-zip con un Hard Disk da 10Gb come supporto removibile, dove sono presenti delle directory per ogni computer che necessita di aggiornamenti/installazioni, cos� da avere tutto abbastanza separato ed ordinato...
Con questi pochi e semplici passaggi, abbiamo installato Java senza sporcare il sistema, e risolvendo il problema delle dipendenze!


Buon Java a tutti!!!


==Bookmarks==
== Link utili ==
[[Oracle Java plugin]]<br />
https://wiki.debian.org/<br/>
http://www.oracle.com/technetwork/java/javase/downloads


[1] Bash & Windows - http://home.wanadoo.nl/fvu/Projects/Bash/Web/bash.htm<br/>
[2] WGET for Windows - http://www.interlog.com/~tcharron/wgetwin.html


{{Autori
|Autore=[[User:MaXeR|MaXeR]]
|Verificata_da=
:[[Utente:S3v|S3v]] 09:49, 4 ago 2013 (CEST)
:[[Utente:Wtf|Wtf]] 17:47, 9 mag 2014 (CEST)
:[[Utente:HAL 9000|HAL 9000]] 12:56, 6 giu 2015 (CEST)
|Numero_revisori=3
}}


---- [[User:MaXeR|MaXeR]]
[[Categoria:Java]][[Categoria:Creare e modificare pacchetti]]

Versione attuale delle 22:47, 19 giu 2016

Lock.png ATTENZIONE: questa guida tratta software a sorgente chiuso e potenzialmente non conforme alle Debian Free Software Guidelines.
Un'alternativa completamente open è OpenJDK presente nei repository ufficiali


Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"
Debian 7 "wheezy"
Debian 8 "jessie"

Introduzione

Per vari motivi può essere necessario installare la versione proprietaria di Java su una macchina Debian, tipicamente quando le varie versioni libere non si dimostrano adeguate. Sicuramente tutti gli utenti avranno notato che non c'è, nel repository ufficiale, un pacchetto contenente j2se o j2dk ufficiali della Oracle ma sono invece presenti i compilatori alternativi, come gcj, kaffe, kjc, javacc.
Però, se volessimo avere il compilatore e/o l'interprete 'originale' della Oracle? Come possiamo fare?

Il primo modo che salta agli occhi è di installarlo in /opt e poi sistemare il $PATH, ma la soluzione, giustamente, non piace a tutti, in quanto 'sporca' il sistema e, cosa che crea parecchi problemi, genera dei problemi con le dipendenze dei pacchetti, visto che molti dei pacchetti che richiedono Java per funzionare non lo trovano installato.

In questo HowTo vedremo come pacchettizzare Java, usando direttamente il binario di installazione disponibile sul sito della Oracle!
I comandi e il percorso dei file sono mostrati per installare un pacchetto a 32 bit, i passi per installare Java a 64 bit sono analoghi.

Cosa ci occorre

Provvediamo a installare i pacchetti java-package e fakeroot. Con privilegi di amministrazione è sufficiente:

# apt-get install java-package fakeroot

E poi scarichiamo il JDK (file tar.gz, NON rpm) dal sito ufficiale.

Una volta terminato il download, saremo pronti per proseguire.

Creazione del Pacchetto

Bene, siamo pronti a creare il pacchetto!!!
Posizioniamoci nella directory dove sono stati scaricati i binari di Java e, da utente normale, diamo il seguente comando:

$ make-jpkg jdk-8u45-linux-i586.tar.gz

(o il nome del pacchetto scaricato, in questo caso ho pacchettizzato il JDK 8 update 45) al comando make-jpkg è possibile passare i seguenti parametri:

--full-name <name>
Nome del Maintainer
--email <email>
Email del Maintainer
--changes
Indica che il processo deve creare un file .changes
--revision
Aggiunge una revisione Debian
--source
Crea un pacchetto sorgente anziché binario
--help
Visualizza un piccolo help contenente i comandi qui illustrati
--version
Stampa a video la versione
Info.png Nota
Le versioni stable e testing di java-package non supportano necessariamente tutte le versioni di java più recenti.


Una volta terminato il processo di generazione del pacchetto, lo installiamo con gdebi, che provvederà anche a installare tutte le dipendenze mancanti tramite APT:

# gdebi oracle-java8-jdk_8u45_i386.deb

Ovviamente sostituendo oracle-java8-jdk_8u55_i386.deb con il nome del pacchetto appena creato!

Info.png Installare gdebi
È sufficiente almeno:
# apt-get install gdebi-core

In alternativa, è possibile utilizzare dpkg e poi sistemare le dipendenze mancanti:

# dpkg -i oracle-java8-jdk_8u45_i386.deb
# apt-get install -f

ma è sconsigliato, perché la risoluzione delle dipendenze mancanti avviene solo successivamente all'installazione del pacchetto, di conseguenza il sistema potrebbe rimanere in uno stato incoerente in presenza di dipendenze impossibili da soddisfare.


Ora non ci resta che sistemare una ultima cosa: alternatives. Date il comando:

# update-alternatives --config java

(uguale procedimento anche per javac, javadoc ed eventualmente altri eseguibili Java) e selezionate 'quale Java' utilizzare!


Problemi noti

Come già accennato può accadere, soprattuto con la versione stabile di java-package, che non sia possibile installare le ultime versioni di java. Quando questo succede tipicamente il comando make-jpkg termina senza richiedere alcun input all'utente e stampando a video poche righe, tra cui la seguente: No matching plugin was found. In tal caso può essere utile installare una versione più recente di java-package, per esempio quella di Sid, avendo cura di utilizzare opportunamente il pinning.

Conclusioni

Con questi pochi e semplici passaggi, abbiamo installato Java senza sporcare il sistema, e risolvendo il problema delle dipendenze!

Buon Java a tutti!!!

Link utili

Oracle Java plugin
https://wiki.debian.org/
http://www.oracle.com/technetwork/java/javase/downloads




Guida scritta da: MaXeR Swirl-auth80.png Debianized 80%
Estesa da:
Verificata da:
S3v 09:49, 4 ago 2013 (CEST)
Wtf 17:47, 9 mag 2014 (CEST)
HAL 9000 12:56, 6 giu 2015 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized