Lo stack LAMP con Homebrew

Nella rubrica Tips&Tricks del Numero 195 (mese di copertina Gennaio/Febbraio 2020) è stato riportato un gestore di pacchetti tipicamente (ma non esclusivamente) utilizzato dagli utenti del Mac OS X: il riferimento è a Homebrew. Dopo un primo fork di nome LinuxBrew per GNU/Linux, i sorgenti dei due programmi sono stati “fusi” per originare un solo pacchetto che nel seguito chiameremo Homebrew, naturalmente disponibile anche per GNU/Linux e nella rivista ne è stata riportata la modalità di installazione facendo uso di un “utente fittizio”.

Breve parentesi: si vuole qui ricordare che in GNU/Linux un utente può essere completo, nel senso di avere a disposizione una home dedicata e una password per il login richiesto dal display manager al termine della fase di avvio (boot).
In alcuni casi (ad esempio database, web server quindi, in generale, per specifici servizi sul sistema) sono richiesti utenti “fittizi”, ovvero utenti che non hanno una home dedicata e il cui username non appaia al termine del boot sul display manager.
La soluzione riportata nella rivista crea un utente visualizzabile all’atto del login. Se trattasi di prova temporanea di Homebrew e se non crea alcun problema è possibile mantenere questa soluzione almeno per tutto il tempo delle prove. Viceversa è sufficiente crearsi un utente senza login ma con home utente dedicata, quest’ultima condizione obbligatoria poiché Homebrew si aspetta un determinato percorso per l’installazione dei pacchetti. La soluzione che possiamo adottare vede l’utilizzo del comando:

useradd -m linuxbrew -s /bin/nologin

laddove l’opzione -m crea la home per l’utente di nome linuxbrew e l’opzione -s con il parametro riportato non permette il login (man useradd per approfondimenti sul comando useradd).

Poiché l’obiettivo sarà installare – con l’utente già esistente nella distribuzione in uso, utente che qui chiameremo genericamente nome_utente – i pacchetti Homebrew in /home/linuxbrew, ecco che dovremo cambiare i permessi per far si che l’utente nome_utente possa avere i permessi di scrittura in /home/linuxbrew e questo verrà fatto utilizzando il comando:

chown -R nome_utente:nome_utente /home/linuxbrew

impartire man chown per approfondimenti sul comando. A questo punto abbiamo l’utente nome_utente con il pieno accesso in /home/linuxbrew. Quando l’utente fittizio linuxbrew con tutta la sua home non ci occorreranno più possiamo sempre rimuoverlo con il comando:

 userdel -r linuxbrew

Creato l’utente si può passare all’installazione di Homebrew. Dopo questa lunga premessa, e come riportato nella rivista, osserviamo che tra le varie “formule” a disposizione di Homebrew c’è la possibilità di installare un intero stack LAMP e allora perché non testare Homebrew avendo come riferimento tale target?

Installazione e configurazione del web server Apache

Nulla di complicato, l’installazione può ottenersi con:

brew install httpd

Nella figura che segue sono visibili  in verde le dipendenze richieste e la loro installazione in automatico.

Installazione del Web Server Apache

Al termine dell’installazione l’output mostrerà un messaggio del tipo:

DocumentRoot is /home/linuxbrew/.linuxbrew/var/www

The default ports have been set in /home/linuxbrew/.linuxbrew/etc/httpd/httpd.conf to 8080 and in
/home/linuxbrew/.linuxbrew/etc/httpd/extra/httpd-ssl.conf to 8443 so that httpd can run without sudo.

Warning: httpd provides a launchd plist which can only be used on macOS!
You can manually execute the service instead with: apachectl start

a ricordare:

  1. La document root del Web Server Apache in Homebrew nel percorso indicato;
  2. La porta di default non è l’80 ma la 8080 al fine di evitare conflitti con eventuali server Web già installati nella distribuzione;
  3. È  possibile lanciare/avviare il server Web Apache appena installato in Homebrew utilizzando il comando apachectl start.

Ma se provassimo a questo punto a lanciare il Web Server con il comando indicato (punto 3) otterremo un laconico:

AH00543: httpd: bad user name _www

Per correggere il problema apriamo, con un editor, il file httpd.conf presente in /home/linuxbrew/.linuxbrew/etc/httpd/, troviamo le righe:

User _www
Group _www

e cambiamole in:

User nobody
Group nobody

Salviamo il file così modificato e, senza chiudere l’editor, riproviamo a lanciare il Web Server Apache di nuovo con apachectl start. Se si dovesse ricevere – molto probabile – il warning:

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

è sufficiente trovare la riga:

#ServerName www.example.com:8080

nel file httpd.conf e subito in basso aggiungere una riga del tipo:

ServerName host.mioserverlocal.com

laddove host.mioserverlocal.com è riportato solo a titolo di esempio. Salvato il file così modificato rilanciando il Web Server con apachectl restart; il warning non dovrebbe più presentarsi. Ora puntando il browser all’indirizzo:

http://localhost:8080/

si dovrà vedere la classica schermata di Apache “It Works” (immagine in basso).

Il primo passo è andato a buon fine!

In più con l’ausilio del comando ps aux | grep httpd potremo visualizzare i processi attivi del server Web Apache sopra avviato (come da figura in basso).

Processi generati da Apache

Installazione di phpMyAdmin

A questo punto dobbiamo procedere con l’installazione del resto dello stack LAMP. Continuiamo con phpMyAdmin poiché come dipendenza si “tirerà dietro” PHP. Per procedere all’installazione è sufficiente impartire il comando brew install phpmyadmin. L’applicativo inizierà a scaricare e compilare (se necessario, altrimenti scaricherà le versioni “bottle“) tutto l’occorrente (immagine in basso).

Installazione di phpMyAdmin

Durante la fase di installazione – così come è avvenuto per Apache – nello scorrere dell’output verranno forniti alcuni suggerimenti nonché le righe necessarie da aggiungere al file httpd.conf per abilitare PHP in Apache.

Anche in questo caso, naturalmente, l’installazione avverrà nel percorso di destinazione /home/linuxbrew/.linuxbrew nel quale vi saranno le analoghe cartelle del filesystem GNU/Linux (/bin, /etc, /lib ecc), pertanto il vero filesystem della distribuzione non verrà toccato e nemmeno potrebbe esserlo visto che i comandi vengono impartiti da utente “normale”!

Come anticipato, al termine dell’installazione di phpMyAdmin ci verrà ricordato di abilitare PHP in Apache e per farlo apriamo il file httpd.conf e aggiungiamo, nella sezione Dynamic Shared Object (DSO) Support, la riga:

LoadModule php7_module /home/linuxbrew/.linuxbrew/opt/php/lib/httpd/modules/libphp7.so

Inoltre aggiungiamo, ad esempio alla fine del file, anche le righe

<FilesMatch \.php$>
 SetHandler application/x-httpd-php
</FilesMatch>

e infine verifichiamo se la riga DirectoryIndex includa index.php, nel qual caso la aggiungiamo. In buona sostanza la riga dovrà apparire nel modo che segue:

DirectoryIndex index.php index.html

Salviamo il file così modificato quindi riavviamo Apache con apachectl restart. Ci verrà ricordato che i file di configurazione php.ini e php-fpm.ini, qualora volessimo operare delle modifiche/personalizzazioni, li potremo trovare nel percorso /home/linuxbrew/.linuxbrew/etc/php/7.4/.

Test PHP

Un file PHP necessita di un Web Server per poter essere interpretato secondo lo schema di principio riportato in basso.

Schema di principio

Per tale motivo, prima di procedere con la parte rimanente dello stack LAMP, è opportuno testare che tutto funzioni correttamente. Per farlo creiamo un file PHP di test contenente la sola riga:

<?php phpinfo(); ?>

e salviamolo con il nome test.php in /home/linuxbrew/.linuxbrew/var/www/. La funzione phpinfo() invia in output un certo numero di informazioni sulla configurazione di PHP. Infatti, se tutto funziona regolarmente, richiamando la pagina dal browser con l’indirizzo

http://localhost:8080/test.php

si dovrebbe vedere la schermata visibile in basso.

PHP: pagina di test

Ora tocca al database

Appurato che PHP venga correttamente interpretato il passo successivo vede l’installazione del database. Faremo riferimento a MySQL, ma seguendo la medesima procedura è possibile installare il fork MariaDB. Utilizziamo il comando brew install mysql per l’installazione (output immagine in basso).

Installazione di MySQL

Durante la fase di installazione ci verrà ricordato che:

  1. L’installazione di MySQL avviene senza l’impostazione di una password di root;
  2. Di default MySQL è configurato solo per ricevere connessioni in localhost;
  3. Per le impostazioni iniziali – compresa la password di root – occorre impartire il comando mysql_secure_installation;
  4. per lanciare il server MySQL utilizzare il comando mysql.server start (figura in basso);
  5. Infine per accedere da root senza aver impostato una password utilizzare il comando mysql -u root.

Avvio e login – root – in MySQL

Ai punti sopra riportati come promemoria e visualizzati durante la fase di installazione, occorre aggiungere che per semplificare la procedura è opportuno impostare una password di root per MySQL. In sostanza – come riportato nel punto 3) – impartire il comando mysql_secure_installation e seguire la procedura guidata (immagine in basso) impostando così una password per l’utente root.

Procedura guidata del comando mysql_secure_installation

NOTA: una volta impostata la password di root l’accesso potrà avvenire utilizzando il comando mysql -u USERNAME -pPASSWORD nel quale va ricordato che tra l’opzione -p e la password non deve esserci alcuno spazio, e.g. mysql -u utente_mysql -pmia_password.

Configurazione phpMyAdmin

Facciamo un passo indietro. Durante l’installazione di phpMyAdmin, e di preciso al termine di essa, ci è stato ricordato che per poter abilitare il sistema di amministrazione dei database in Apache occorre aggiungere le seguenti righe al file httpd.conf:

 Alias /phpmyadmin /home/linuxbrew/.linuxbrew/share/phpmyadmin
  <Directory /home/linuxbrew/.linuxbrew/share/phpmyadmin/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
   <IfModule mod_authz_core.c>
        Require all granted
   </IfModule>
   <IfModule !mod_authz_core.c>
        Order allow,deny
        Allow from all
    </IfModule>
  </Directory>

Effettuata l’aggiunta occorre riavviare Apache con apachectl restart. Assicuriamoci che il server MySQL sia attivo quindi puntiamo il browser all’indirizzo:

http://localhost:8080/phpmyadmin

per avere la schermata di accesso di phpMyAdmin.

Schermata di login di phpMyAdmin

A questo punto l’accesso vede le credenziali inserite per il database: in sostanza se si è operato con il comando mysql_secure_installation impostando la password di root, allora inseriremo root nel rigo Nome utente e la password impostata per l’utente root di MySQL nel rigo Password per accedere al pannello di gestione di phpMyAdmin (figura in basso).

Pannello di controllo di phpMyAdmin

NOTA: Di default phpMyAdmin è impostato per non accettare solo il nome utente. Diciamo questo perché in alcune installazioni (ma non è questo il caso!) è possibile accedere – per la prima volta – in phpMyAdmin semplicemente scrivendo root come utente e lasciando vuoto il rigo Password. Per tale motivo è opportuno impostare almeno la password dell’utente root utilizzando il comando mysql_secure_installation così come riportato in precedenza.

A questo punto abbiamo un completo stack LAMP da utilizzare come meglio crediamo, e.g. per accogliere installazioni di CMS come WordPress e Joomla o altro ancora.

Potrebbero interessarti anche...