installare RHEL / centos 8 GRAFICO, COMPELTO con l.a.m.p. su virtualbox

Articolo scritto il 10 ottobre 2019,
ultima revisione di aggiornamento: 19 ottobre 2019

Screenshot delle VM installate per realizzare questo articolo.


RedHat Enterprise Linux 8:

CentOS 8:

Parto dal presupposto che abbiate già completato l’installazione RedHat Enterprise Linux 8 o CentOS 8 su una VM Virtualbox correttamente configurata.
I parametri della Virtual Machine che ho utilizzato io per le mie prove sono i seguenti:

Si può anche fare una VM di dimensioni inferiori, ma senza esagerare!! (Ad esempio, può bastare anche una VM con un solo processore, ma la RAM non abbassatela al di sotto degli 1.5Gb specie se dovete abilitare diversi servizi, oltre all’interfaccia grafica). Quando il programma di installazione “Anaconda” mi ha chiesto che tipo di uso ne volevo fare (anche per determinare quale gruppo di pacchetti di base installare) ho scelto “Server con Gui”.

Preparazione installazione Virtualbox guest addition.

Aprire il terminale ed eseguire l’installazione di questi pacchetti:

dnf install kernel-devel-$(uname -r) kernel-headers perl gcc make elfutils-libelf-devel

Per la compilazione delle guest addition, montare il cd virtuale e lanciare il comando ./VBoxLinuxAdditions.run ..

Al momento della scrittura del presente articolo, con Virtualbox 6.0.10, accade questo:

[root@centos8streamvm /run/media/gabo/VBox_GAs_6.0.10]# ./VBoxLinuxAdditions.run
 Verifying archive integrity… All good.
 Uncompressing VirtualBox 6.0.10 Guest Additions for Linux……..
 VirtualBox Guest Additions installer
 Copying additional installer modules …
 Installing additional modules …
 VirtualBox Guest Additions: Starting.
 VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel
 modules.  This may take a while.
 VirtualBox Guest Additions: To build modules for other installed kernels, run
 VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup 
 VirtualBox Guest Additions: or
 VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup all
 VirtualBox Guest Additions: Building the modules for kernel
 4.18.0-144.el8.x86_64.
 VirtualBox Guest Additions: Look at /var/log/vboxadd-setup.log to find out what
 went wrong
 ValueError: File context for /opt/VBoxGuestAdditions-6.0.10/other/mount.vboxsf already defined
 modprobe vboxguest failed
 The log file /var/log/vboxadd-setup.log may contain further information.

EDIT del 19/10/2019:
Pare che con la versione 6.0.14 di Virtualbox siano stati risolti i problemi di compilazione delle guest additions su Linux RedHat 8, e CentOS 8 Stream, per cui se avete installato questa versione di Virtualbox, basterà inserire “l’immagine del CD delle Guest Additions” dal menù della macchina virtuale e lasciare semplicemente procedere la compilazione, che dovrebbe andare avanti senza intoppi. In questo caso, dunque, potete saltare la presente sezione, ed andare subito alle “istruzioni per l’installazione di phpMyAdmin

Se si fa un cat del log, si ha

....
/tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.c: In function ‘VBoxGuest_RTR0MemUserIsValidAddr’:
 /tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.c:72:55: error: macro "access_ok" passed 3 arguments, but takes just 2
      bool fRc = access_ok(VERIFY_READ, (void *)R3Ptr, 1);
                                                        ^
 /tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.c:72:16: error: ‘access_ok’ undeclared (first use in this function)
      bool fRc = access_ok(VERIFY_READ, (void *)R3Ptr, 1);
                 ^~~~~
 /tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.c:72:16: note: each undeclared identifier is reported only once for each function it appears in
...

Se l’errore è “macro “access_ok” passed 3 arguments, but takes just 2″ … è perché nel Kernel Linux 5.0, Linus ha deciso di rimuovere il parametro ‘type’ dalla funzione access_ok. Voi direte “Ma ho la 4.18.0, mica la 5.0”. D’accordo, ma come di consueto RedHat è famosa per apportare backports di versioni future ad una versione di kernel con release inferiore. Per ovviare a questo inconveniente, dobbiamo fare quanto segue:

for i in $(grep -Rl "KERNEL_VERSION(5," | grep -v vfsmod.c); do sed -i "s/KERNEL_VERSION(5, 0, 0)/KERNEL_VERSION(4, 18, 0)/g" $i; done

Quindi ricompilare le vboxadd con il seguente comando:

/sbin/rcvboxadd quicksetup all

avrete ancora degli errori, riportati nel log, ma quanto meno il modulo del kernel è stato compilato ed inserito nella libreria dei moduli del kernel, ed è attivabile tramite il comando:

modprobe vboxguest

e vedrete immediatamente la videata grafica della macchina virtuale che assume le dimensioni della risoluzione fisica della finestra in cui gira, ed il mouse è interattivo tra l’ambiente guest e quello host (ciò significa che l’estensione guest addition, almeno per ciò che riguarda lo condivisione della memoria grafica con l’host, sta funzionando correttamente).
Se poi qualcuno fosse a conoscenza di una patch migliore, naturalmente, faccia sapere nei commenti.

Istruzioni Installazione phpMyAdmin

In questa parte riprendo i suggerimenti presi da questa fonte, ma semplificandola in passi più sintetici e veloci, e riassumendoli in un unico script che dovrebbe portare a compimento la maggior parte delle operazioni.

Io in genere quando installo server di test (macchine virtuali o fisiche che siano), non abilito né SElinux, ne il firewall, e quando installo server Linux in produzione, valuto di caso in caso (Se il server è già dietro un firewall o dietro DMZ, se è un server con accesso utenti a sistema oppure no, ecc.. ), e cerco di attivare meno servizi possibili pur mantenedo un buon grado di sicurezza: c’è già Systemd che stressa abbastanza con restrizioni di vario genere 😀

Tuttavia, per completezza d’informazione, in queste istruzioni definisco anche gli step che sono necessari per rendere phpmyadmin, installato con questo metodo, funzionante anche avendo firewall e SElinux attivi.

Ecco il mio script (vi consiglio di fare un copia+in un file, chiamandolo ad esempio “inst_phpmyadmin_rh8.sh” e poi dargli i permessi di eseguibilità con un “chmod +x inst_phpmyadmin_rh8.sh”) :

#!/bin/bash
function generate_blowfish()
{
   BLOWFISH=
   ncars="$1"
   for car in seq 1 $ncars
   do
     rnd=$((RANDOM % 62))
     if [ $rnd -lt 10 ]; then
         asc=$((48+$rnd))
     elif [ $rnd -gt 35 ]; then
         asc=$((97+$rnd-36))
     else
         asc=$((65+$rnd-10))
     fi
     bfchar=$(printf "\\$(printf %o $asc)")
     BLOWFISH="${BLOWFISH}${bfchar}"
   done
}
[ "$UID" -ne 0 ] && { echo "script must be run as root user"; exit; }

BLOWFISH=
generate_blowfish 36
dnf -y install httpd mariadb-server \
      php php-gd php-mysqlnd php-mbstring php-json
echo
echo "Waiting 2 secs…"
sleep 2

cd
mkdir -p Downloads
cd Downloads
export VER="4.9.0.1"
curl -o phpMyAdmin-${VER}-all-languages.tar.gz https://files.phpmyadmin.net/phpMyAdmin/${VER}/phpMyAdmin-${VER}-all-languages.tar.gz 
tar xvf phpMyAdmin-${VER}-all-languages.tar.gz
rm -f phpMyAdmin-${VER}-all-languages.tar.gz 
mv phpMyAdmin-${VER}-all-languages /usr/share/phpmyadmin
mkdir -p /var/lib/phpmyadmin/tmp
chown -R apache:apache /var/lib/phpmyadmin
mkdir /etc/phpmyadmin/
cp /usr/share/phpmyadmin/config.sample.inc.php  /usr/share/phpmyadmin/config.inc.php
echo
echo "Waiting 2 secs…"
sleep 2
# Ora metto il mio random blowfish dentro al file config e la variabile TempDir ..
# Prima cancello le eventuali linee con [TempDir] 
sed -i "/^.\$cfg\['TempDir'\].*$/d" /usr/share/phpmyadmin/config.inc.php
# Poi sostituisco il bowfish secret col mio..
 sed -i "s/\$cfg\['blowfish_secret'\].*$/\$cfg['blowfish_secret'] = '${BLOWFISH}';\n\$cfg['TempDir'] = '\/var\/lib\/phpmyadmin\/tmp';/" /usr/share/phpmyadmin/config.inc.php
# Ora creo il file di configurazione di phpmyadmin per Apache HTTP Server
cat << EOM > /etc/httpd/conf.d/phpmyadmin.conf
# Apache configuration for phpMyAdmin
Alias /phpMyAdmin /usr/share/phpmyadmin/
Alias /phpmyadmin /usr/share/phpmyadmin/

<Directory /usr/share/phpmyadmin/>
 AddDefaultCharset UTF-8
 <IfModule mod_authz_core.c>
   # Apache 2.4      
   Require all granted
   # Puoi restringere l'accesso a IP specifici aggiungendo una linea come la seguente
   #  Require ip 127.0.0.1 192.168.0.0/24 
 </IfModule>
 <IfModule !mod_authz_core.c>
   # Apache 2.2      
   Order Deny,Allow      
   Deny from All      
   Allow from 127.0.0.1      
   Allow from ::1
 </IfModule>
</Directory>
EOM 

echo "Controllo della configurazione di Apache"
apachectl configtest
echo
echo "Waiting 2 secs…"
sleep 2
echo
systemctl restart httpd
systemctl restart mariadb
echo "Abilito il sistema LAMP al boot"
systemctl enable httpd
systemctl enable mariadb
echo 
# Impostazioni per SELinux e Firewalld
semanage fcontext -a -t httpd_sys_content_t "/usr/share/phpmyadmin(/.*)?"
restorecon -Rv /usr/share/phpmyadmin
# (firewalld) Impostazioni per firewall
firewall-cmd --add-service={http,https} --permanent
firewall-cmd --reload
echo END
echo 
 

Riassumendo, i principali step svolti da questo script sono:

1 – Installazione dei pacchetti base necessari per far funzionare un sistema con PHP, MySQL e l’applicazione phpMyAdmin

2 – Download, tramite comando curl di phpMyAdmin ad una versione aggiornata. Al momento della scrittura del presente documento, ho scaricato la 4.9.0.1. È possibile, in presenza di nuove release, farne scaricare una nuova (modificando la variabile VER dello script alla versione desiderata), ma è sempre bene valutare la compatibilità tra la versione installata, e la release dei vari applicativi dell’ecosistema coinvolti (versione di php, di mariadb/mysql e di apache).

3 – installazione del pacchetto scaricato e spostamento nelle directory compatibilmente alla struttura del sistema, e creazione delle relative directory temporanee ad uso dell’applicazione.

4 – modifica della configurazione di apache httpd atta ad ospitare e a fare girare correttamente phpmyadmin da parte del web server.

5 – abilitazione in fase di avvio di sistema di tutti i servizi necessari perché phpMyAdmin sia subito fruibile.

6 – Impostazioni per SELinux per autorizzare phpMyAdmin ad essere raggiungibile e correttamente eseguito dal web server.

7 – Impostazioni per il firewall (firewalld) per aprire la/le porta/e di rete del web server per permetterne la raggiungibilità dall’esterno.

Al termine dello script, ricordarsi di Impostare una password di root a mysql (utente dba), in modo che possiate entrare in phpmyadmin con l’utente root e una password (di default, phpMyAdmin non permette di accedere senza password).
Per fare questo occorre fare la prima volta la procedura per la messa in sicurezza di mysql, e quindi eseguire:

  mysql_secure_installation 

A questo punto ci verrà chiesta la password iniziale dell’utente root (la prima volta sarà vuota), poi chiederà se impostare una password di root. Rispondere si, e ripetere la password due volte (questa sarà la password da utilizzare all’accesso di phpMyAdmin con utente ‘root’). Poi chiede se lasciare gli utenti anonimi, permettere l’accesso di root anche da remoto e se lasciare il database di test. Queste risposte sono a discrezione dell’utente.

Una volta fatta tutta la procedura, sarà possibile accedere al proprio browser:
Aprire url: http://[ServerIP|Hostname]/phpmyadmin

One thought on “installare RHEL / centos 8 GRAFICO, COMPELTO con l.a.m.p. su virtualbox”

Leave a Reply

Your email address will not be published.