Per lavoro mi sono trovato nelle condizioni di creare una VM con Oracle Linux. L’obiettivo finale è avere Tomcat e DB Oracle installati che si parlano e che siano accessibili da fuori della VM.
In tutto questo, c’è un vincolo che si chiama Java 8, vediamo quindi step by step come creare la nostra VM. Andremo a installare quindi:
- Oracle Virtual Box
- Oracle Linux 8.2
- Java JRE 1.8
- Tomcat 8.5/9
Tabella dei contenuti
- Download dei software
- Configurazione e installazione Oracle Linux
- Installazione e configurazione Java
- Installazione e configurazione Tomcat
- Fonti e Link Utili
- Conclusioni
Download dei software
Download Oracle Linux 8.2
Nel momento in cui scrivo l’ultima versione di Oracle Linux disponibile al download è la 8.2. Occorre recarsi sul sito di Edelivery Oracle, fare il login e scaricare l’ultima versione disponibile. Io preferisco scaricare solo l’iso contentente i file di BOOT, vedremo in fase di installazione come dargli in pasto il repository base per scaricare in fase di installazione i pacchetti necessari.
Download e configurazione Oracle Virtual Box
Virtual Box è scaricabile gratuitamente sul virtualbox.org ed è disponibile per Mac, Windows e Linux. Se avete Ubuntu è dispinibile nei repository ufficiali:
sudo apt-get install virtualbox
- Oracle Linux 64bit;
- Disco allocato fisso capacità 20 GB (io preferisco aggiungere un secondo disco con le installazioni degli altri software);
- L’ideale è avere almeno 8gb di RAM per stare tranquilli ma il mio computer ne ha soli 8 in totale quindi decido di sacrificarne 4. A questo punto monto l’iso scaricata precedentemnte e sono pronto ad avviare la mia VM che farà boot da ISO.
Configurazione e installazione Oracle Linux
Instalalzione Oracle Linux
L’obiettivo e far si che venga installata OL8 con gli ultimi aggiornamenti direttamente dalla rete. Gli step che consiglio sono:
- Selezionare la lingua Italiana (e fate attenzione alla tastiera)
- Attivate la rete
- Inserite in istallation Source il seguente URL: http://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64 3a. Potete entrare nel dettaglio del repository qua
- Partizione del disco: generalmente io faccio cambio il punto di mount della /home/ su un diverso disco, in questo caso ho deciso di lasciare la configurazione di default, andrò eventualmente in un secondo momento a instalalre un secondo disco virtuale che utilizzerò per Oracle
- Occorre selezionare quale software installare, io ho selezionato quasi tutto (vedi gif di seguito)
- A questo punto premo su avanti, configuro la password di root, configuro l’utente principale e lo setto come amministratore.
Non mi resta altro da fare che aspettare la fine dell’installazione e riavviare quando finito.
Primi passi su Oracle Linux
Ora che l’installazione è ultimata al primo avvio si avvierà Oracle Linux senza GUI. La prima cosa da fare dopo il login è quello di aggiornare la nostra distro, non ci sarà tanto da aggiornare ma preferisco sempre assicurarmi di avere tutto aggiornato.
Installazione di GNOME
Ora occorre dare qualche comando per installare dei pacchetti aggiuntivi, ci affideremo a groupinstall.
- Con il seguente comando aggiorno e controllo cosa posso installare:
dnf grouplist
- Ora vado ad installare cosa mi interessa, questo quanto ho selezionato:
sudo dnf groupinstall "Sever con GUI"
- Una volta terminata l’installazione occorre far si che venga avviato gnome all’avvio, per farlo basta digitare:
systemctl set-default graphical.target
- Siccome c’è gdm e siccome voglio configurare il login automatico modifico il file /etc/gdm/custom.conf con nano:
ho integrato il file con questa configurazione:
sudo nano /etc/gdm/custom.conf
[daemon] AutomaticLoginEnable=True AutomaticLogin=username
- Abbiamo due opzioni ora, o si riavvia la VM o si avvia Gnome con il seguente comando:
systemctl isolate graphical.target
Integrazione con Virtual Box: Guest Additions
Per integrare il copia e incolla e il passaggio automatico tra sistema operativo e virtualbox è consigliato installare le Guest Additions. Per farlo, occorre sapre quale kernel stiamo utilizzando, basta lanciare da terminale il comando
uname -r
sudo dnf install kernel-uek-devel-$(uname -r)
sudo usermod -aG vboxsf $(whoami)
Installazione e configurazione Java
A me interessa Java 8, pertanto installerò questa versione. Occorre recarsi sul sito di Oracle selezionare la versione e se volete installare JRE o JDK, nel mio caso Java JRE SE 8u251, mi raccomando selezionate la versione RPM e a 64bit (Linux x64 RPM Package). A questo punto potete installare la JRE con doppio click o da terminale:
sudo rpm -i Scaricati/jre-8u251-linux-x64.rpm
java -version
Installazione e configurazione Apache Tomcat
La mia idea è quella di creare una directory tomcatwm sotto /appl in cui installare tomcat 9, il servizio girerà con utente tomcatwm e sarà possibile avviare il tomcat come servizio. Voglio inoltre che il mio utente abbia tutti i permessi per modificare i file di configurazione di proprietà tomcatwm.
sudo useradd tomcatwm
sudo mkdir -p /appl
sudo mkdir -p /appl/tomcatwm
sudo chown tomcatwm:tomcatwm /appl/tomcatwm
sudo usermod -aG tomcatwm $(whoami)
- Cambio utente e divento tomcatwm:
sudo -u tomcatwm /bin/bash -l
- Estraggo il contenuto del pacchetto che ho precedentemente scaricato:
tar xzf apache-tomcat-9.0.35.tar.gz
- Rendo eseguibili i file con estensione .sh:
chmod +x bin/*.sh
- Entro dentro la cartella bin e provo ad avviare il servizio:
cd bin ./startup.sh
- Controllo che il servizio giri correttamente aprendo firefox e digitando: http://127.0.0.1:8080 (N.B. 8080 è la porta di default).
- Stoppiamo il tomcat
./shutdown.sh
- Abilito l’utente per l’interfaccia grafica aggiungendo quanto segue all’interno dei dat “tomcat-users”:
<role rolename="admin"/> <role rolename="admin-gui"/> <role rolename="manager-gui"/> <user username="mioutente" password="miapassowrd" roles="admin,admin-gui,manager-gui"/>
Creazione del servizio Apache Tomcat
Ho deciso che il tomcat deve essere configurato come un servizio e deve essere attivo quando la VM viene avviata. Per fare questo, occorre creare un file sotto systemd per dichiarare il servizio e i comandi supportati.
- Creiamo e modifichiamo il file con il seguente comando:
sudo nano /etc/systemd/system/tomcatwm.service
- All’interno del file basta incollarci quanto riporto di seguito:
N.B. noterete che io il tomcat lo chiamo sempre tomcatwm, se avete scelto un path diverso e un utente diverso, modificate di conseguenza il vostro file di configurazione.
[Unit] Description=Apache Tomcat 9 Documentation=http://tomcat.apache.org/tomcat-9.0-doc/ After=network.target syslog.target [Service] User=tomcatwm Group=tomcatwm Type=oneshot ExecStart=/appl/tomcatwm/bin/startup.sh ExecStop=/appl/tomcatwm/bin/shutdown.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target
- Occorre ricaricare la lista dei servizi, per farlo digitiamo:
sudo systemctl daemon-reload
- Se provate a fare start del servizio vi accorgerete che non funziona, trovete questo bell’errore:
Se eseguite “journalcl -xe” avrete anche il dettaglio:
Job for tomcatwm.service failed because the control process exited with error code. See "systemctl status tomcatwm.service" and "journalctl -xe" for details.
Ma qual è il problema? Il problema è SELinux, ammetto di non essere entrato molto nel dettaglio ma in sostanza, avviare un servizio in una directory che non è la home dell’utente è contro le policy di SeLinux “enforcing”. Ma io sono permissivo, e voglio che lo sia anche SELinux, in fondo questa è una VM con accesso limitato e controllato verso l’esterno quindi modifico il seguente file da enforcing a permissive:tomcatwm.service: Failed to execute command: Permission denied systemd[1]: tomcatwm.service: Main process exited, code=exited, status=203 systemd[1]: tomcatwm.service: Failed with result exit-code. systemd[1]: Failed to start Apache Tomcat 9.
Riavvio la VM e…/etc/selinux/config
- Abilito il servizio, usando il comando enable mi assicuro che all’avvio della VM il servizio tomcatwm sia attivo:
sudo systemctl enable tomcatwm
Conclusioni
Per scrivere queste poche righe ho dovuto fare due VM, la prima per provare ed imparare, la seconda per gli screen e scrivere passo passo cosa stavo facendo. Ci sono sicuramente errori, imprecisioni e inesattezze ma il box dei commenti qui sotto serve anche per segnalarmi come migliorare il tutto.
Fonti e Link Utili
Di seguito riporto qualche link che ho usato per scrivere queste poche rige.