Installare Drupal su Fedora 18

In questo articolo spiegherò brevemente come installare il CMS Drupal in locale sul proprio sistema Fedora 18. Il primo sarà assicurarsi di avere installato tutti i pacchetti necessari. Poi si vedrà come configurare ed avviare httpd (apache) e il database mySQL (o PostgreSQL, a seconda delle esigenze). Infine alcune osservazioni sui permessi e sulle impostazioni di SELinux, peculiari di Fedora 18.

Installazione pacchetti

Ovviamente, per installare tutto, dipendenze comprese, la strada più semplice sarebbe quella di dare, come amministratore, il classico comando:

# yum install drupal7

Ma questo pone diversi limiti, ossia costringe ad operare da amministratore per ogni modifica ai file e, soprattutto, di avere una sola installazione in locale, pessima cosa per effettuare i test.

Io, invece, voglio installare Drupal nella mia Home, e in particolare nella cartella destinata ad ospitare i contenuti web degli utenti, ossia la "~/public_html".

Innanzitutto controlliamo di aver installato i seguenti pacchetti:

  • httpd
  • mysql
  • mysql-libs
  • mysql-server
  • php
  • php-cli
  • php-common
  • php-gd
  • php-mbstring
  • php-mcrypt php-xml
  • php-mysql
  • php-pdo
  • php-pear
  • php-pecl-apc
  • php-pecl-memcache
  • php-pecl-memcached
  • php-pecl-mongo
  • php-pgsql
  • php-sqlite
  • postgresql
  • postgresql-libs
  • postgresql-server

Ovviamente, è possibile installare solo i pacchetti che riguardano il database MySQL, oppure quelli che riguardano PostgreSQL, se si intende utilizzare solamente uno di questi due database. Inoltre, sostituendo MySQL con MariaDB, non dovrebbe cambiare assolutamente nulla (ma non ho controllato!).

Adesso, procuriamoci Drupal andando a scaricare il sorgente dal sito drupal.org. Al momento, l'ultima versione stabile è la 7.22:

$ cd ~/public_html
$ wget http://ftp.drupal.org/files/projects/drupal-7.22.tar.gz
$ tar -xvzf drupal-7.22.tar.gz
$ mv drupal-7.22 mysitename

Qui, sto dando per scontato che ~/public_html esista, abbia i permessi rwxr-xr-x, o almeno rwx--x--x, e i permessi SELinux (ls -Z) httpd_user_content_t.

$ mkdir ~/public_html
$ chmod 755 ~/public_html
$ chcon -R -t httpd_user_content_t ~/public_html

C'è però un altro problema: alcuni file dovrebbero essere scrivibili da apache (o comunque l'utente con cui gira il processo httpd). Si potrebbe pensare di dare i permessi di scrittura nella directory a tutti, ma è una pessima idea per ovvi motivi di sicurezza.

La migliore soluzione che ho trovato finora è la seguente:

$ cd ~/public_html/mysitename/sites/default
$ cp default.settings.php settings.php
$ chmod 664 settings.php
$ chmod 775 files
$ su
# chown :apache settings.php
# chown -R :apache files
# chcon -t public_content_rw_t files settings.php

In questo modo si rendono il file di configurazione e la directory scrivibili dall'utente apache (più precisamente dal gruppo), mantenendoli comunque di proprietà dell'utente. Si può procedere analogamente per altre eventuali directory in cui si desidera caricare dei file mediante il CMS stesso (anche se personalmente preferisco inserirceli manualmente, da linea di comando).

Configurazione di Apache

Assicurarsi che nel file di configurazione "/etc/httpd/conf/httpd.conf", siano presenti le linee:

...
Include conf.modules.d/*.conf
...
User apache
Group apache
...

e che ci sia un file /etc/httpd/conf.modules.d/??-php.conf che contenga la riga:

LoadModule php5_module modules/libphp5.so

Mentre nel file "/etc/httpd/conf.d/userdir.conf", tolti i commenti ed altre eventuali opzioni, ci sia qualcosa che assomigli il più possibile a questo:

<IfModule mod_userdir.c>
  UserDir public_html
</IfModule>
<Directory "/home/*/public_html">
  AllowOverride All
  Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
  Order allow,deny
  Allow from all
</Directory>

Infine, avviare (ed abilitare di default) il servizio Web:

# systemctl start httpd.service
# systemctl enable httpd.service

MySQL

Avvio il servizio, creo il database iniziale e aggiungo i permessi necessari per creare e modificare tabelle ad un utente 'user', il cui accesso ` consentito mediante la password 'password' (ovviamente da impostare secondo le proprie preferenze).
# systemctl start mysqld.service
# systemctl enable mysqld.service
# su - mysql
$ mysql_install_db --user=mysql
$ mysqladmin -u root password [your_password_here]
$ mysql -u root -p ...
> CREATE DATABASE mysitename;
> GRANT ALL ON mysitename.* TO user IDENTIFIED BY 'password';
> GRANT ALL ON mysitename.* TO 'user'@'localhost' \
  IDENTIFIED BY 'password';

PostgreSQL

Come ho già anticipato, questa sezione è in alternativa a MySQL, a meno che non decidiate, per effettuare dei test, di procedere con entrambi.

Nel file "/var/lib/pgsql/data/postgresql.conf", devono essere presenti le seguenti linee:

listen_addresses = 'localhost' port = 5432

Mentre nel file "/var/lib/pgsql/data/pg_hba.conf", ci dovrà essere qualcosa del tipo:

# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust

Per maggiori informazioni, consultare la documentazione.

Non resta, quindi, che abilitare ed avviare il servizio ed inizializzare il database:

# systemctl start postgresql.service
# systemctl enable postgresql.service
# postgresql-setup initdb

Da notare che se PostgreSQL non è stato installato dai repository di Fedora, ma dai repository di postgresql, il servizio potrebbe chiamarsi postgresql-9.2.service, o analogamente a seconda della versione, mentre i file di configurazione, potrebbero essere in un'altra posizione, tipicamente: "/var/lib/pgsql/9.2/data/postgresql.conf" e "/var/lib/pgsql/9.2/data/pg_hba.conf".

SELinux

Assicurarsi che i seguenti valori siano impostati a "on":
# getsebool -a
...
httpd_enable_homedirs --> on
...

In caso contrario:

# setsebool -P httpd_enable_homedirs=on

Drupal

Ancora una piccola modifica da fare al file .htaccess nella directory principale del CMS Drupal: modificare la riga "RewriteBase /" (di solito è commentata) in:

RewriteBase /~user/sitename

Dove ~user è un alias per /home/user/public_html (user sta per il vostro vero username) e sitename è la directory in cui è stato scompattato Drupal.

Infine, non rimane che andare col browser all'indirizzo http://localhost/~user/sitename ed accedere così al pannello di configurazione di Drupal. Seguite le istruzioni, indicando il database scelto e le corrette credenziali di accesso e tutto dovrebbe funzionare...


Aggiornamento: installare Drupal su Fedora 20

La gran parte del discorso rimane valida. Ci sono alcune modifiche importanti da fare. Nel file /etc/httpd/conf.d/userdir.conf, aggiungere, tra le righe di cui sopra, anche la riga:

Require all granted

Per SElinux, le variabili da modificare sono:

# setsebool -P httpd_enable_homedirs=on
# setsebool -P httpd_mod_auth_pam=on
# setsebool -P httpd_anon_write=on

Per MySQL, dopo aver avviato i servizi, lanciare da root:

# mysql_secure_installation

e configurare opportunamente il database!


  Contenuti soggetti a licenza d'uso Creative Commons Attribution - Non commercial - Share Alike 3.0 Unported. Questo sito non contiene informazioni aggiornate con cadenza periodica regolare, pertanto non può essere considerato una testata giornalistica, ai sensi dell'Art. 62/2001.