Strumenti Utente

Strumenti Sito


progetti:server-casa

Obiettivo

Guida alla realizzazione di un sistema informatico economico domestico basato su GNU/Linux

Introduzione

Nella vita quotidiana ci sono servizi informatici ormai divenuti indispensabili per qualsiasi famiglia quali internet inteso come Worl Wide Web, la posta elettronica, la disponibilità dei dati e la sicurezza domestica.Tutto ciò comporta dei costi che tuttavia possono essere anche contenuti, o perlomeno accettabili sia di materiali che di energia. Ma se ci pensiamo attentamente il costo più alto che dobbiamo sostenere per avere questi servizi è dato dal consegnare in mano a grandi multinazionali le informazioni della nostra vita privata. L'esempio più eclatante è la posta elettronica.
Chi tra di noi non ha almeno un account di posta Google o MSN o Yahoo o Libero??? Chi tra di noi non ha almeno un account Facebook, Twitter, Instagram ecc.??? Tutte le volte che scriviamo una mail o scriviamo commenti su qualche social network lasciamo tracce di noi, del nostro passaggio, delle nostre idee, dei nostri affari privati. E giustamente qualcuno potrà dire: “Vabbè che problema c'è???” Se le cose funzionano così lasciamo che sia!!! Certo nulla da ridire.
Io però ho scoperto che grazie all'aiuto di una grande comunità mondiale di persone appassionate di informatica è possibile ridurre anche se di poco i costi legati ad una moderna informatizzazione si ain termini di privacy sia in termini economici.
Quindi per giungere al termine di questa introduzione e presentare gli aspetti tecnici di questa guida comincio a elencare i principali elementi che si distinguono in: materiale hardware per l'alimentazione elettrica, materiale hardware per il sistema informatico, materiale software per il sistema informatico.

Componenti

Materiale hardware per l'alimentazione elettrica:
-Due pannelli fotovoltaici da 250Wp
-Un regolatore di carica mmp da 30A
-Una batteria da 100Ah
-Un alimentatore DC da 12V
-Un PicoUPS con batteria tampone
-Due relè, interruttori e cavetteria varia.
Materiale hardware per il sistema informatico:
-Due raspberry Pi 3 mod.B
-Due microSD (le più economiche)
-Due hdd SSD
-Un Modem Router SwitchADSL
-Un PC client per la programmazione e lo sviluppo.
Materiale software per il sistema informatico.
-Sistema operativo Fedora Linux Server per armh
-Sistema di ridondanza dei dischi (Drbd)
-Sistema per un cluster di failover (coroysnc pacemaker)
-Database per la raccolda dei dati (MariaDB)
-Server web (Apache)
-Server di Posta (Postfix Dovecot)
-Applicativi web (Postfixadmin Roundcubemail)
-Applicativo per videosorveglianza (Zoneminder)

Sistema informatico

La scelta del Raspberry PI come base per il sistema informatico è nata come sfida al consumo di energia elettrica e sopra tutto una nuova sfida all'utilizzo di un dispositivo moderno e innovativo che non conoscevo. Inoltre avevo il desiderio di realizzare un server sempre attivo h24 silenzioso e di dimensioni ridotte e ad un prezzo ancora più ridotto rispetto ad un server tradizionale!
Ma veniamo al punto di unione tra l'hardware e il software ovvero il sistema operativo. Dopo una lunga ricerca e lunghissime ore passate a fare test e verifiche la scelta è caduta su Fedora Server. Esiste un progetto specifico per l'architettura arm (https://arm.fedoraproject.org/) dal quale è possibile scaricare l'immagine raw da installare. Io vi metto a disposizione qui nel mio mirror quella che ho usato e scaricato a suo tempo dal sito di Fedoraproject.
Teniamo sempre presente che questa guida è valida fino al momento della stesura, da quella data in poi non è più detto che quello che ho scritto funzioni a causa degli innumerevoli cambiamenti del mondo opensource e freesoftware.
Per questo motivo metto a disposizione su questo sito tutto il software necessario per realizzare questa guida. Cioè se state leggendo questa pagina sicuramente avrete a disposizione il mio repo dal quale scaricare esattamente le cose che qui cito. Infatti la cosa più insopportabile delle guide online è il rimando a dei pacchetti o dei repository che poi nel frattempo sono cambiati. Qui troverete tutto per far funzionare quello che dico. Poi è chiaro che sperimentare e avere come riferimento i repo originali è la cosa più didattica.
Bene! ora cominciamo con le cose pratiche.

Preparazione supporti

Scheda MicroSD

La RaspberryPI effettua il boot dalla prima partizione di una SD card, necessariamente formattata con la FAT32(vfat). La partizione sarà montata su /boot/ e conterrà il kernel, il bootloader di secondo livello, ecc..
Per il nostro progetto sarà quindi sufficiente partizionare la schedina creando una semplice partizione primaria di 128M.
Ora ci troviamo davanti ad un qualsiasi PC dotato di apposito lettore per microSD e dopo aver inserito la card nel lettore apriamo il terminale e verifichiamo che sia stata correttamente riconosciuta, controlliamo con dmesg o con fdisk -l poi procediamo con il partizionamento: Nel mio caso la schedina veniva riconosciuta con /dev/sdb. (Come S.O. ho usato una Debian 8).

#fdisk /dev/sdb
Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): 

digitiamo p per visualizzare lo stato di partizionamento. Se dovessero esserci già altre partizioni, eliminiamole con il comando d e seguiamo le istruzioni. (per l'utilizzo approfondito di fdisk vi rimando alla documentazione ufficiale.
Dopo aver eliminato tutte le partizioni dovremmo avere una situazione tipo questa:

Disk /dev/sdb: 7,2 GiB, 7742685184 bytes, 15122432 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc1356df5

Command (m for help): 

Quindi premiamo “n” e seguiamo le istruzioni come di seguito per creare una partizione da 128M

Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.

invio

Partition number (1-4, default 1): 

invio

First sector (2048-15122431, default 2048): 

invio

Last sector, +sectors or +size{K,M,G,T,P} (2048-15122431, default 15122431): 

+128M invio

Created a new partition 1 of type 'Linux' and of size 128 MiB.

Command (m for help): 

Ok partizione creata ma questa è di tipo “linux” invece deve essere di tipo fat32 quindi digitiamo t e seguiamo le istruzioni come di seguito:

Selected partition 1
Hex code (type L to list all codes): 

b invio

If you have created or modified any DOS 6.x partitions, please see the fdisk documentation for additional information.
Changed type of partition 'Linux' to 'W95 FAT32'.

Command (m for help): 

ed in fine ridigitiamo “p” per visualizzare la situazione che dovrebbe essere tipo la seguente:

Disk /dev/sdb: 7,2 GiB, 7742685184 bytes, 15122432 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc1356df5

Device     Boot Start    End Sectors  Size Id Type
/dev/sdb1        2048 264191  262144  128M  b W95 FAT32
  
Command (m for help): 

Ora possiamo digitare “w” e scrivere definitivamente la partition table.

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Siamo pronti per formattare la partizione appena creata destinata ad ospitare quindi la directory /boot del nostro S.O.Linux

mkfs.vfat /dev/sdb1

mkfs.fat 3.0.27 (2014-11-12)

Prima di procedere dobbiamo ora tenere nota dell'UUID della nostra partizione, ci servirà più avanti.

blkid |grep sdb1

/dev/sdb1: SEC_TYPE="msdos" UUID="DB15-4A51" TYPE="vfat" PARTUUID="c1356df5-01"

Disco SSD

Bene, ora procediamo al partizionamento del nostro SSD identificandolo in modo simile a quanto fatto prima. Nel mio caso /dev/sdc

fdisk /dev/sdc

Anche qui se sono presenti partizioni le possiamo eliminare e creiamo subito una nuova partizione da 2 GB che sarà il nostro spazio di swap e la partizione per il S.O. da 5GB o da 10 in base allo spazio che vogliamo dedicare.
Non sto a ripetere tutti i passaggi per la creazione delle partizioni vedremo solo di seguito quale sarà la situazione finale del nostro SSD Ricordiamoci però che i tipi di partizione dovranno essere di swap per la prima e ext4 per la / root che ospita il S.O. pertanto dopo aver creato la prima partizione digitamo: t e 82 che identifica il tipo swap e dopo aver creato la seconda digitiamo t e 83. Infine w per rendere definitivi i cambiamenti. quindi avremo:

Disk /dev/sdc: 111,8 GiB, 120034123776 bytes, 234441648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6e9033d9

Device     Boot   Start      End  Sectors Size Id Type
/dev/sdc1          2048  4196351  4194304   2G 82 Linux swap / Solaris
/dev/sdc2       4196352 25167871 20971520  10G 83 Linux

Command (m for help): 

anche qui dobbiamo formattare le partizioni:

mkfs.ext4 /dev/sdc2

e

mkswap /dev/sdc1

quindi tenere nota degli UUID delle partizioni

blkid |grep sdc

/dev/sdc1: UUID="a1fdee3b-375d-4d34-81a7-6267603ccb49" TYPE="swap" PARTUUID="6e9033d9-01"
/dev/sdc2: UUID="d8f379fd-adf6-4402-9d2d-7dcaeacdc082" TYPE="ext4" PARTUUID="6e9033d9-02"

ora che abbiamo il posto in cui andare a sistemare il S.O. decomprimiamo l'immagine che abbiamo scaricato da [http://www.stefanostrozzi.it/mirror/Fedora-Server-armhfp-24-1.2-sda.raw.xz|qui]
decomprimere:

unxz Fedora-Server-armhfp-24-1.2-sda.raw.xz

creiamo una directory provvisoria che ci servirà per montare l'immagine

mkdir /tmp/img

carichiamola su un dispositivo temporaneo

losetup --partscan --find --show Fedora-Server-armhfp-24-1.2-sda.raw  
/dev/loop0

e ora montiamo solo la partizione nr3 che corrisponde alla / root sulla directory temporanea

mount -r /dev/loop0p3 /tmp/img/

creiamo un'altra directory che conterrà i file che andranno definitivamente sulle nuove partizioni

mkdir /tmp/rpi

quindi montiamo la seconda partizione del nostro disco SSD(quella formattata in ext4) su quest'ultima directory

mount /dev/sdc2 /tmp/rpi

quindi creiamo la directory boot che sarà montata con la micro contenente la partizione formattata in fat32

mkdir /tmp/rpi/boot

e allora montiamo stavolta la partizione della schedina su quest'ultima directory

mount /dev/sdb1 /tmp/rpi/boot/

se siamo pignoli e vogliamo verificare digitiamo df per vedere lo stato dei montaggi:

File system    1K-blocchi    Usati Disponib. Uso% Montato su
/dev/sda12      201454560 82534368 108663808  44% /
udev                10240        0     10240   0% /dev
tmpfs              787708     9372    778336   2% /run
tmpfs             1969268       68   1969200   1% /dev/shm
tmpfs                5120        4      5116   1% /run/lock
tmpfs             1969268        0   1969268   0% /sys/fs/cgroup
tmpfs              393856        4    393852   1% /run/user/115
tmpfs              393856       12    393844   1% /run/user/1000
/dev/loop0p3      2919444  1211308   1708136  42% /tmp/img
/dev/sdc2        10190136    23032   9626432   1% /tmp/rpi
/dev/sdb1          130798        0    130798   0% /tmp/rpi/boot

possiamo ora cominciare la copia dei file sui nuovi spazi

cp -rpv /tmp/img/* /tmp/rpi/

eseguiamo

sync

smontiamo la directory provvisoria

umount /tmp/img

e smontiamo l'immagine dal dispositivo temporaneo

losetup -d /dev/loop0

Ora è il momento di andare a modificare il file /etc/fstab che dovrà montare correttamente i dispositivi all'avvio ed è qui che abbiamo bisogno di recuperare gli UUID che abbiamo segnato prima

vi /tmp/rpi/etc/fstab

eliminiamo tutto quello che c'è e riscriviamolo come di seguito sostituendo oportunamente gli UUID

UUID=d8f379fd-adf6-4402-9d2d-7dcaeacdc082  / ext4    defaults,noatime 0 0
UUID=DB15-4A51  /\boot vfat    defaults,noatime 0 0
UUID=a1fdee3b-375d-4d34-81a7-6267603ccb49  swap swap    defaults,noatime 0 0

Ora dobbiamo installare il firmware che originariamente avevo scaricato con curl nel seguente modo:

curl -L -o raspberry-firmware.zip https://github.com/raspberrypi/firmware/archive/master.zip \\

Ma nel momento in cui scrivo la guida la situazione potrebbe già essere cambiata quindi per essere sicuri di poter arrivare in fondo alla guida scaricate [http://www.stefanostrozzi.it/mirror/raspberry-firmware.zip|qui] da mio mirror.

decomprimere

unzip raspberry-firmware.zip

trasferire i file sulla partizione di destinazione

cp -r firmware-master/boot/* /tmp/rpi/boot/
cp -r firmware-master/modules/* /tmp/rpi/lib/modules/

Andiamo a creare il seguente file inserendo i parametri per l'avvio del kernel specificando che il valore che identifica la directory root sarà /dev/sda2 perchè quando verrà avviato il sistema il disco SSD sarà riconosciuto come sda e non come nel nostro PC che è stato riconosciuto come sdc

vi /tmp/rpi/boot/cmdline.txt

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/sda2 rootfstype=ext4 elevator=deadline rootwait

Giusto per capire meglio nella riga che abbiamo inserito c'è come directory root /dev/sda2 anche se fino ad ora abbiamo parlato di sdc o altro. questo perchè sda sarà il primo e unico disco che il RPi vedrà caricato e sda2 la seconda partizione che abbiamo formattato come ext4 destinata ad ospitare appunto la / (root) e sda1 lo swap.

smontiamo il tutto

umount /tmp/rpi/boot/
umount /tmp/rpi/
sync

Ripetere tutte le operazioni dall'inizio anche per il secondo RPI

Avvio del sistema

Mettiamo la micro nel RPi, colleghiamo il disco esterno, colleghiamo il video alla porta hdmi (anche con cavo adatttatore hdmi-dvi) e alimentiamo.
Se tutto è andato bene apparirà la seguente schermata che ci guida alla prima configurazione.

Initial setup of Fedora 24 (Server Edition)
  
1) [x] Language settings            2) [!] Timezone settings
       (English (United States))           (Timezone is not set.)
3) [x] Network Configuration        4) [!] Root Password
       (Wired (eth0) connected)            (Password is not set.)
5) [!] User creation
       (No user will be created)
Please make your choice from above ['q' to quit | 'c' to continue | 'r' to refresh]:

La [x] sta ad indicare il valore settato e di default propone l'inglese, ma noi scegliamo l'italiano e il nostro timezone digitando '1' per entrare nel menù di configurazione della lingua

Please select language support to install:31

e poi ancora “1” per il sottotipo
procediamo allo stesso modo per le altre opzioni
Da specificare che al numero 3 quando dice che la rete è configurata si intende che è stato assegnato un indirizzo dal DHCP. L'indirizzo verrà svelato al momento del primo login.
infine premiamo “c”
La cosa carina di questa versione server è la “Admin Console” di gestione web (cockpit) che viene indicata al momento del primo login
Viene specificato nel seguente modo l'url a cui collegarsi:

Admin Console: https://xxx.xxx.xxx.xxx:9090/

In questa guida ho preferito collegarmi in modo tradizionale al RPI tramite ssh pertanto tutti i comandi si intendono eseguiti tramite terminale.

predisposizione sistema

Se non è stato fatto al primo avvio è necessario ora impostare a mano gli indirizzi IP. e l'hostname
prima di iniziare ad installare i software necessari modifichiamo il file hosts inserendo gli ip e i nomi dei nostri RPI

vi /etc/hosts
127.0.0.1       localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.1.61    nodo1
192.168.1.62    nodo2

Chiaramente gli ip indicati sono di esempio.

Disabilitiamo anche SElinux

vi /etc/selinux/config

SELINUX=disabled

Installazione software

Ho scelto per questo primo progetto di installare tutti i software dal repository base di fedora 24 senza gli update, quindi ho disabilitato a “0” il repo fedora-update.repo:

vi /etc/yum.repos.d/fedora-repo.update
[updates]
name=Fedora $releasever - $basearch - Updates
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/$basearch/
metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch
enabled=0
gpgcheck=1
metadata_expire=6h
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False

inoltre occorre anche scricare da [http://www.stefanostrozzi.it/mirror/zmrepo-24-1.fc24.noarch.rpm |qui] il repo di zoneminder:
e installarlo con

yum install zmrepo-24-1.fc24.noarch.rpm

questa installazione non fa altro che metter il file zmrepo-fedora.repo e zmrepo-fedora-testing.repo nella solita directory /etc/yum.repos.d

infine fare un ulteriore piccola modifica al file /etc/yum.repos.d/fedora.repo aggiungendo:

exclude=zoneminder*

nel blocco [fedora] che sostanzialmente dice di non installare con [fedora] i pacchetti che sono presenti nel repo [zmrepo]

Ma per proseguire con questa guida suggerisco di dimenticare quanto ho appena scritto e disabilitare tutti i repo originali fedora, fedora-update, zmrepo e di lasciare abilitato solo il mio repo contenente esclusivamente il software necessario per arrivare al termine di questo percorso.
Di seguito il mio file da scaricare e posizionare all'interno della directory /etc/yum.repos.d/:

fedora-str.repo
[Fedora-str]
name=Fedora-str
baseurl=http://stefanostrozzi.it/mirror/fedora-24-armhpf
enabled=1
gpgcheck=0

I prossimo comandi dnf presuppongono l'abilitazione del mio repo.

Riavviamo il sistema prima di procedere all'installazione del software

reboot

Apache, MariaDB

Iniziamo installando il server db mariadb, il server web apache il modulo ssl.

dnf install mariadb-server httpd mod_ssl

di seguito l'elenco dei pacchetti installati:

Ultima verifica della scadenza dei metadati: 0:25:21 fa il Mon Nov 14 17:31:28 2016.
Dipendenze risolte.
================================================================================
 Package                    Arch        Versione               Repository  Dim.
================================================================================
Installazione in corso:
 apr                        armv7hl     1.5.2-3.fc24           fedora      98 k
 apr-util                   armv7hl     1.5.4-3.fc24           fedora      89 k
 fedora-logos-httpd         noarch      22.0.0-3.fc24          fedora      34 k
 httpd                      armv7hl     2.4.18-2.fc24          fedora     1.2 M
 httpd-filesystem           noarch      2.4.18-2.fc24          fedora      25 k
 httpd-tools                armv7hl     2.4.18-2.fc24          fedora      89 k
 mariadb                    armv7hl     1:10.1.14-1.fc24       fedora     5.8 M
 mariadb-common             armv7hl     1:10.1.14-1.fc24       fedora      70 k
 mariadb-config             armv7hl     1:10.1.14-1.fc24       fedora      28 k
 mariadb-errmsg             armv7hl     1:10.1.14-1.fc24       fedora     202 k
 mariadb-libs               armv7hl     1:10.1.14-1.fc24       fedora     605 k
 mariadb-server             armv7hl     1:10.1.14-1.fc24       fedora      16 M
 mod_ssl                    armv7hl     1:2.4.18-2.fc24        fedora     100 k
 perl                       armv7hl     4:5.22.2-359.fc24      fedora     5.9 M
 perl-Carp                  noarch      1.38-2.fc24            fedora      28 k
 perl-DBD-MySQL             armv7hl     4.033-2.fc24           fedora     146 k
 perl-DBI                   armv7hl     1.634-3.fc24           fedora     721 k  
 perl-Data-Dumper           armv7hl     2.158-348.fc24         fedora      53 k
 perl-Encode                armv7hl     3:2.84-8.fc24          fedora     1.0 M
 perl-Errno                 armv7hl     1.23-359.fc24          fedora      62 k
 perl-Exporter              noarch      5.72-349.fc24          fedora      33 k
 perl-File-Path             noarch      2.12-2.fc24            fedora      34 k
 perl-File-Temp             noarch      0.23.04-347.fc24       fedora      61 k
 perl-Getopt-Long           noarch      2.48-2.fc24            fedora      61 k
 perl-HTTP-Tiny             noarch      0.056-4.fc24           fedora      53 k
 perl-IO                    armv7hl     1.35-359.fc24          fedora     127 k
 perl-MIME-Base64           armv7hl     3.15-349.fc24          fedora      29 k
 perl-Math-BigInt           noarch      1.9997.15-2.fc24       fedora     178 k
 perl-Math-Complex          noarch      1.59-359.fc24          fedora      94 k
 perl-PathTools             armv7hl     3.62-2.fc24            fedora      87 k
 perl-Pod-Escapes           noarch      1:1.07-349.fc24        fedora      20 k
 perl-Pod-Perldoc           noarch      3.25-349.fc24          fedora      85 k
 perl-Pod-Simple            noarch      1:3.32-3.fc24          fedora     211 k
 perl-Pod-Usage             noarch      4:1.69-1.fc24          fedora      33 k
 perl-Scalar-List-Utils     armv7hl     2:1.45-1.fc24          fedora      62 k
 perl-Socket                armv7hl     3:2.021-2.fc24         fedora      54 k 
 perl-Storable              armv7hl     1:2.53-347.fc24        fedora      77 k
 perl-Term-ANSIColor        noarch      4.03-347.fc24          fedora      45 k
 perl-Term-Cap              noarch      1.17-2.fc24            fedora      22 k
 perl-Text-ParseWords       noarch      3.30-347.fc24          fedora      17 k
 perl-Text-Tabs+Wrap        noarch      2013.0523-347.fc24     fedora      23 k
 perl-Time-Local            noarch      1.2300-347.fc24        fedora      29 k
 perl-Unicode-Normalize     armv7hl     1.25-2.fc24            fedora      68 k
 perl-constant              noarch      1.33-348.fc24          fedora      24 k
 perl-libs                  armv7hl     4:5.22.2-359.fc24      fedora     1.3 M
 perl-macros                armv7hl     4:5.22.2-359.fc24      fedora      58 k
 perl-parent                noarch      1:0.234-4.fc24         fedora      18 k
 perl-podlators             noarch      4.07-1.fc24            fedora     113 k
 perl-threads               armv7hl     1:2.02-3.fc24          fedora      56 k
 perl-threads-shared        armv7hl     1.48-347.fc24          fedora      42 k

Riepilogo della transazione
================================================================================
Installati  50 pacchett 

Dimensione totale dello scaricamento: 35 M
Dimensione installata: 149 M
Scaricamento dei pacchetti:
--------------------------------------------------------------------------------
Totale                                          124 kB/s |  35 MB     04:50     

Zoneminder

dnf install zoneminder
Ultima verifica della scadenza dei metadati: 0:00:15 fa il Mon Nov 14 18:17:05 2016.
Dipendenze risolte.
================================================================================
 Package                      Arch    Versione                     Repository
                                                                           Dim.
================================================================================
Installazione in corso:
 SDL                          armv7hl 1.2.15-21.fc24               fedora 189 k
 SDL_image                    armv7hl 1.2.12-14.fc24               fedora  44 k
 a52dec                       armv7hl 0.7.4-19.fc24                zmrepo  57 k
 aajohan-comfortaa-fonts      noarch  2.004-6.fc24                 fedora 151 k
 alsa-lib                     armv7hl 1.1.1-1.fc24                 fedora 359 k
 binutils                     armv7hl 2.26-18.fc24                 fedora 5.5 M
 cairo                        armv7hl 1.14.6-1.fc24                fedora 629 k
 cambozola                    noarch  0.936-2.fc24                 fedora 104 k
 cdparanoia-libs              armv7hl 10.2-21.fc24                 fedora  52 k
 clang                        armv7hl 3.8.0-1.fc24                 fedora 303 k
 clang-libs                   armv7hl 3.8.0-1.fc24                 fedora 7.0 M
 copy-jdk-configs             noarch  1.1-4.fc24                   fedora  18 k
 cpp                          armv7hl 6.1.1-2.fc24                 fedora 7.1 M
 faad2-libs                   armv7hl 1:2.7-6.fc24                 zmrepo 145 k
 ffmpeg                       armv7hl 3.0.4-1.fc24                 zmrepo 1.4 M
 ffmpeg-libs                  armv7hl 3.0.4-1.fc24                 zmrepo 5.1 M
 fftw-libs-double             armv7hl 3.3.4-7.fc24                 fedora 474 k
 flac-libs                    armv7hl 1.3.1-6.fc24                 fedora 168 k
 fontconfig                   armv7hl 2.11.94-6.fc24               fedora 227 k
 fontpackages-filesystem      noarch  1.44-17.fc24                 fedora  15 k
 freerdp-libs                 armv7hl 2:2.0.0-5.git.b02943a.fc24   fedora 797 k
 freetype                     armv7hl 2.6.3-2.fc24                 fedora 311 k
 fribidi                      armv7hl 0.19.7-2.fc24                fedora  69 k
 game-music-emu               armv7hl 0.6.0-8.fc24                 fedora 144 k
 gcc                          armv7hl 6.1.1-2.fc24                 fedora  15 M
 gcc-c++                      armv7hl 6.1.1-2.fc24                 fedora 8.5 M
 gd                           armv7hl 2.2.1-1.fc24                 fedora 121 k
 gdbm-devel                   armv7hl 1.11-7.fc24                  fedora  59 k
 giflib                       armv7hl 4.1.6-15.fc24                fedora  42 k
 glibc-devel                  armv7hl 2.23.1-7.fc24                fedora 934 k
 glibc-headers                armv7hl 2.23.1-7.fc24                fedora 483 k
 glibmm24                     armv7hl 2.48.1-1.fc24                fedora 451 k
 graphite2                    armv7hl 1.3.6-1.fc24                 fedora  97 k
 gsm                          armv7hl 1.0.13-14.fc24               fedora  34 k
 gstreamer1                   armv7hl 1.8.1-1.fc24                 fedora 1.1 M
 gstreamer1-plugins-base      armv7hl 1.8.1-1.fc24                 fedora 1.3 M
 harfbuzz                     armv7hl 1.2.7-1.fc24                 fedora 197 k
 hwloc-libs                   armv7hl 1.11.0-6.fc24                fedora 1.4 M
 isl                          armv7hl 0.14-5.fc24                  fedora 382 k
 iso-codes                    noarch  3.68-1.fc24                  fedora 3.0 M
 jack-audio-connection-kit    armv7hl 1.9.10-5.fc24                fedora 482 k
 java-1.8.0-openjdk           armv7hl 1:1.8.0.91-7.b14.fc24        fedora 200 k
 java-1.8.0-openjdk-headless  armv7hl 1:1.8.0.91-7.b14.fc24        fedora  29 M
 javapackages-tools           noarch  4.6.0-14.fc24                fedora 104 k
 jbigkit-libs                 armv7hl 2.1-5.fc24                   fedora  49 k
 kernel-headers               armv7hl 4.5.5-300.fc24               fedora 1.0 M
 lame-libs                    armv7hl 3.99.5-5.fc24                zmrepo 329 k
 libICE                       armv7hl 1.0.9-5.fc24                 fedora  64 k
 libSM                        armv7hl 1.2.2-4.fc24                 fedora  42 k
 libX11                       armv7hl 1.6.3-3.fc24                 fedora 550 k
 libX11-common                noarch  1.6.3-3.fc24                 fedora 164 k
 libXau                       armv7hl 1.0.8-6.fc24                 fedora  33 k
 libXcomposite                armv7hl 0.4.4-8.fc24                 fedora  27 k
 libXcursor                   armv7hl 1.1.14-6.fc24                fedora  31 k
 libXdamage                   armv7hl 1.1.4-8.fc24                 fedora  25 k
 libXext                      armv7hl 1.3.3-4.fc24                 fedora  38 k
 libXfixes                    armv7hl 5.0.2-2.fc24                 fedora  22 k
 libXfont                     armv7hl 1.5.1-4.fc24                 fedora 142 k
 libXft                       armv7hl 2.3.2-4.fc24                 fedora  57 k
 libXi                        armv7hl 1.7.6-2.fc24                 fedora  40 k
 libXinerama                  armv7hl 1.1.3-6.fc24                 fedora  18 k
 libXmu                       armv7hl 1.1.2-4.fc24                 fedora  68 k
 libXpm                       armv7hl 3.5.11-5.fc24                fedora  50 k
 libXrandr                    armv7hl 1.5.0-3.fc24                 fedora  28 k
 libXrender                   armv7hl 0.9.9-3.fc24                 fedora  28 k
 libXt                        armv7hl 1.1.5-3.fc24                 fedora 150 k
 libXtst                      armv7hl 1.2.2-6.fc24                 fedora  24 k
 libXv                        armv7hl 1.0.10-4.fc24                fedora  21 k
 libXxf86misc                 armv7hl 1.0.3-11.fc24                fedora  23 k
 libXxf86vm                   armv7hl 1.1.4-3.fc24                 fedora  22 k
 libasan                      armv7hl 6.1.1-2.fc24                 fedora 301 k
 libass                       armv7hl 0.13.1-2.fc24                fedora  87 k
 libasyncns                   armv7hl 0.8-10.fc24                  fedora  30 k
 libatomic                    armv7hl 6.1.1-2.fc24                 fedora  27 k
 libavc1394                   armv7hl 0.5.3-19.fc24                fedora  54 k
 libavdevice                  armv7hl 3.0.4-1.fc24                 zmrepo  81 k
 libbluray                    armv7hl 0.9.3-1.fc24                 fedora 136 k 
 libcddb                      armv7hl 1.3.2-19.fc24                fedora  70 k
 libcdio                      armv7hl 0.93-7.fc24                  fedora 231 k
 libcdio-paranoia             armv7hl 10.2+0.93+1-5.fc24           fedora  83 k
 libchromaprint               armv7hl 1.2-4.fc24                   fedora  47 k
 libconfig                    armv7hl 1.5-4.fc24                   fedora  60 k
 libcroco                     armv7hl 0.6.11-2.fc24                fedora  98 k
 libdatrie                    armv7hl 0.2.9-3.fc24                 fedora  28 k
 libdb-devel                  armv7hl 5.3.28-14.fc24               fedora  43 k 
 libdc1394                    armv7hl 2.2.2-5.fc24                 fedora 117 k
 libdca                       armv7hl 0.0.5-9.fc24                 zmrepo 104 k
 libdrm                       armv7hl 2.4.68-1.fc24                fedora 103 k
 libdvbpsi                    armv7hl 1.3.0-1.fc24                 zmrepo  93 k
 libdvdnav                    armv7hl 5.0.3-4.fc24                 fedora  55 k
 libdvdread                   armv7hl 5.0.3-2.fc24                 fedora  68 k
 libebml                      armv7hl 1.3.3-3.fc24                 fedora  72 k
 libffado                     armv7hl 2.2.1-8.fc24                 fedora 615 k
 libfontenc                   armv7hl 1.1.3-3.fc24                 fedora  34 k
 libgomp                      armv7hl 6.1.1-2.fc24                 fedora 176 k
 libiec61883                  armv7hl 1.2.0-14.fc24                fedora  40 k
 libjpeg-turbo                armv7hl 1.4.2-3.fc24                 fedora 124 k
 libkate                      armv7hl 0.4.1-7.fc24                 fedora  50 k
 libmad                       armv7hl 0.15.1b-17.fc24              zmrepo  79 k
 libmatroska                  armv7hl 1.4.4-2.fc24                 fedora 138 k
 libmcpp                      armv7hl 2.7.2-16.fc24                fedora  81 k
 libmodplug                   armv7hl 1:0.8.8.5-8.fc24             fedora 152 k
 libmpc                       armv7hl 1.0.2-5.fc24                 fedora  47 k
 libmpcdec                    armv7hl 1.2.6-16.fc24                fedora  33 k
 libmpeg2                     armv7hl 0.5.1-11.fc24                zmrepo  65 k
 libmtp                       armv7hl 1.1.10-2.fc24                fedora 158 k
 libogg                       armv7hl 2:1.3.2-5.fc24               fedora  27 k
 libraw1394                   armv7hl 2.1.0-7.fc24                 fedora  66 k
 librsvg2                     armv7hl 2.40.15-1.fc24               fedora 120 k
 libsamplerate                armv7hl 0.1.8-10.fc24                fedora 1.0 M
 libshout                     armv7hl 2.2.2-14.fc24                fedora  44 k
 libsigc++20                  armv7hl 2.8.0-1.fc24                 fedora  41 k
 libsndfile                   armv7hl 1.0.25-20.fc24               fedora 148 k
 libstdc++-devel              armv7hl 6.1.1-2.fc24                 fedora 1.8 M
 libthai                      armv7hl 0.1.24-1.fc24                fedora 193 k
 libtheora                    armv7hl 1:1.1.1-14.fc24              fedora 172 k
 libtiff                      armv7hl 4.0.6-2.fc24                 fedora 158 k
 libtiger                     armv7hl 0.3.4-11.fc24                fedora  38 k
 libubsan                     armv7hl 6.1.1-2.fc24                 fedora 117 k
 libupnp                      armv7hl 1.6.19-5.fc24                fedora  94 k
 libv4l                       armv7hl 1.10.0-2.fc24                fedora 168 k
 libva                        armv7hl 1.7.0-1.fc24                 fedora  77 k
 libvdpau                     armv7hl 1.1.1-3.fc24                 fedora  36 k
 libvisual                    armv7hl 1:0.4.0-20.fc24              fedora 130 k
 libvncserver                 armv7hl 0.9.10-5.fc24                fedora 240 k
 libvorbis                    armv7hl 1:1.3.4-6.fc24               fedora 174 k
 libvpx                       armv7hl 1.5.0-4.fc24                 fedora 457 k
 libwayland-client            armv7hl 1.10.0-1.fc24                fedora  29 k
 libwayland-server            armv7hl 1.10.0-1.fc24                fedora  33 k
 libwebp                      armv7hl 0.5.0-2.fc24                 fedora 184 k
 libwinpr                     armv7hl 2:2.0.0-5.git.b02943a.fc24   fedora 237 k
 libxcb                       armv7hl 1.11.1-2.fc24                fedora 178 k
 libxkbfile                   armv7hl 1.0.9-3.fc24                 fedora  80 k
 libxml++                     armv7hl 2.40.1-2.fc24                fedora  81 k
 libxshmfence                 armv7hl 1.2-3.fc24                   fedora  12 k
 live555                      armv7hl 2016.05.20-1.fc24            zmrepo 313 k
 lksctp-tools                 armv7hl 1.0.16-5.fc24                fedora  93 k
 llvm-libs                    armv7hl 3.8.0-1.fc24                 fedora 9.4 M
 lua-posix                    armv7hl 33.3.1-2.fc24                fedora 166 k
 lzo-minilzo                  armv7hl 2.08-8.fc24                  fedora  26 k
 mcpp                         armv7hl 2.7.2-16.fc24                fedora  30 k
 mesa-filesystem              armv7hl 11.2.1-1.20160501.fc24       fedora  39 k
 mesa-libEGL                  armv7hl 11.2.1-1.20160501.fc24       fedora  99 k
 mesa-libGL                   armv7hl 11.2.1-1.20160501.fc24       fedora 160 k
 mesa-libgbm                  armv7hl 11.2.1-1.20160501.fc24       fedora  56 k
 mesa-libglapi                armv7hl 11.2.1-1.20160501.fc24       fedora  69 k
 minizip                      armv7hl 1.2.8-10.fc24                fedora  37 k
 mod_perl                     armv7hl 2.0.9-3.fc24                 fedora 3.0 M
 mpfr                         armv7hl 3.1.4-1.fc24                 fedora 196 k
 ocl-icd                      armv7hl 2.2.8-3.git20151217.0122332.fc24
                                                                   fedora  45 k
 openal-soft                  armv7hl 1.17.2-2.fc24                fedora 312 k
 opencl-filesystem            noarch  1.0-4.fc24                   fedora 7.9 k
 opencv-core                  armv7hl 2.4.12.3-3.fc24              fedora 1.5 M
 openjpeg-libs                armv7hl 1.5.1-16.fc24                fedora  79 k
 opus                         armv7hl 1.1.2-2.fc24                 fedora 164 k
 orc                          armv7hl 0.4.25-1.fc24                fedora 150 k
 pango                        armv7hl 1.40.1-1.fc24                fedora 259 k
 perl-Algorithm-Diff          noarch  1.1903-4.fc24                fedora  51 k
 perl-AppConfig               noarch  1.71-4.fc24                  fedora  86 k
 perl-Archive-Tar             noarch  2.06-1.fc24                  fedora  76 k
 perl-Archive-Zip             noarch  1.57-1.fc24                  fedora 106 k
 perl-Astro-SunTime           noarch  0.01-1                       zmrepo 8.5 k
 perl-BSD-Resource            armv7hl 1.291.000-1.fc24             fedora  44 k
 perl-Business-ISBN           noarch  2.010-2.fc24                 fedora  34 k
 perl-Business-ISBN-Data      noarch  20140910.003-2.fc24          fedora  33 k
 perl-CGI                     noarch  4.28-2.fc24                  fedora 204 k
 perl-CPAN-Meta               noarch  2.150005-3.fc24              fedora 173 k
 perl-CPAN-Meta-Requirements  noarch  2.140-2.fc24                 fedora  36 k
 perl-CPAN-Meta-YAML          noarch  0.018-2.fc24                 fedora  32 k
 perl-Class-Load              noarch  0.23-2.fc24                  fedora  35 k
 perl-Class-Std               noarch  0.013-2.fc24                 fedora  53 k
 perl-Class-Std-Fast          noarch  0.0.8-2.fc24                 zmrepo  25 k
 perl-Compress-Raw-Bzip2      armv7hl 2.069-2.fc24                 fedora  36 k
 perl-Compress-Raw-Zlib       armv7hl 2.069-2.fc24                 fedora  62 k
 perl-Convert-BinHex          noarch  1.125-2.fc24                 fedora  48 k
 perl-Data-Dump               noarch  1.23-2.fc24                  fedora  36 k
 perl-Data-OptList            noarch  0.110-1.fc24                 fedora  30 k
 perl-Data-UUID               armv7hl 1.221-2.fc24                 fedora  28 k
 perl-Date-Manip              noarch  6.53-1.fc24                  fedora 1.1 M
 perl-Device-SerialPort       armv7hl 1.04-23.fc24                 fedora  68 k
 perl-Digest                  noarch  1.17-347.fc24                fedora  26 k
 perl-Digest-HMAC             noarch  1.03-12.fc24                 fedora  19 k
 perl-Digest-MD5              armv7hl 2.55-1.fc24                  fedora  35 k
 perl-Digest-SHA              armv7hl 1:5.95-348.fc24              fedora  62 k
 perl-Dist-CheckConflicts     noarch  0.11-6.fc24                  fedora  26 k
 perl-Email-Date-Format       noarch  1.005-4.fc24                 fedora  21 k
 perl-Encode-Locale           noarch  1.05-4.fc24                  fedora  20 k
 perl-ExtUtils-Command        noarch  7.10-4.fc24                  fedora  17 k
 perl-ExtUtils-Install        noarch  2.04-348.fc24                fedora  45 k
 perl-ExtUtils-MakeMaker      noarch  7.10-4.fc24                  fedora 279 k
 perl-ExtUtils-Manifest       noarch  1.70-347.fc24                fedora  36 k
 perl-ExtUtils-ParseXS        noarch  1:3.30-2.fc24                fedora  81 k
 perl-File-Listing            noarch  6.04-12.fc24                 fedora  17 k
 perl-GD                      armv7hl 2.56-7.fc24                  fedora 166 k
 perl-GD-Barcode              noarch  1.15-22.fc24                 fedora 683 k
 perl-HTML-Parser             armv7hl 3.72-2.fc24                  fedora 114 k
 perl-HTML-Tagset             noarch  3.20-25.fc24                 fedora  23 k
 perl-HTTP-Cookies            noarch  6.01-12.fc24                 fedora  29 k
 perl-HTTP-Date               noarch  6.02-13.fc24                 fedora  18 k
 perl-HTTP-Message            noarch  6.11-2.fc24                  fedora  88 k
 perl-HTTP-Negotiate          noarch  6.01-12.fc24                 fedora  21 k
 perl-IO-Compress             noarch  2.069-2.fc24                 fedora 255 k
 perl-IO-HTML                 noarch  1.001-5.fc24                 fedora  27 k
 perl-IO-Interface            armv7hl 1.09-4.fc24                  fedora  33 k
 perl-IO-Socket-IP            noarch  0.37-348.fc24                fedora  46 k
 perl-IO-Socket-Multicast     armv7hl 1.12-1.fc24                  zmrepo  26 k
 perl-IO-Socket-SSL           noarch  2.025-1.fc24                 fedora 254 k
 perl-IO-Zlib                 noarch  1:1.10-359.fc24              fedora  66 k
 perl-Image-Base              noarch  1.17-5.fc24                  fedora  26 k
 perl-Image-Info              noarch  1.38-4.fc24                  fedora  85 k
 perl-Image-Xbm               noarch  1.09-2.fc24                  fedora  22 k
 perl-Image-Xpm               noarch  1.12-4.fc24                  fedora  23 k
 perl-JSON-PP                 noarch  2.27400-1.fc24               fedora  59 k
 perl-LWP-MediaTypes          noarch  6.02-9.fc24                  fedora  28 k
 perl-LWP-Protocol-https      noarch  6.06-7.fc24                  fedora  16 k
 perl-Linux-Pid               armv7hl 0.04-27.fc24                 fedora  18 k
 perl-Locale-Maketext         noarch  1.26-348.fc24                fedora  95 k
 perl-Locale-Maketext-Simple  noarch  1:0.21-359.fc24              fedora  65 k
 perl-MIME-Lite               noarch  3.030-6.fc24                 fedora 100 k
 perl-MIME-Types              noarch  2.13-1.fc24                  fedora  69 k
 perl-MIME-tools              noarch  5.507-3.fc24                 fedora 247 k
 perl-MailTools               noarch  2.18-1.fc24                  fedora 107 k
 perl-Module-CoreList         noarch  1:5.20160520-1.fc24          fedora  75 k
 perl-Module-Implementation   noarch  0.09-6.fc24                  fedora  22 k
 perl-Module-Load             noarch  1:0.32-347.fc24              fedora  18 k
 perl-Module-Load-Conditional noarch  0.64-347.fc24                fedora  23 k
 perl-Module-Metadata         noarch  1.000027-4.fc24              fedora  40 k
 perl-Module-Runtime          noarch  0.014-7.fc24                 fedora  24 k
 perl-Mojolicious             noarch  6.46-1.fc24                  fedora 832 k
 perl-Mozilla-CA              noarch  20160104-2.fc24              fedora  14 k
 perl-NTLM                    noarch  1.09-12.fc24                 fedora  23 k
 perl-Net-HTTP                noarch  6.09-4.fc24                  fedora  32 k
 perl-Net-SMTP-SSL            noarch  1.03-2.fc24                  fedora  14 k
 perl-Net-SSLeay              armv7hl 1.74-1.fc24                  fedora 305 k
 perl-Package-Stash           noarch  0.37-4.fc24                  fedora  41 k
 perl-Package-Stash-XS        armv7hl 0.28-9.fc24                  fedora  35 k
 perl-Params-Check            noarch  1:0.38-347.fc24              fedora  22 k
 perl-Params-Util             armv7hl 1.07-15.fc24                 fedora  41 k
 perl-Parse-CPAN-Meta         noarch  1:1.4417-3.fc24              fedora  30 k
 perl-Pod-POM                 noarch  2.01-3.fc24                  fedora  97 k
 perl-SOAP-WSDL               noarch  3.003-1.fc24                 zmrepo 339 k
 perl-Sub-Install             noarch  0.928-7.fc24                 fedora  26 k
 perl-Sys-CPU                 armv7hl 0.61-8.fc24                  fedora  18 k
 perl-Sys-MemInfo             armv7hl 0.98-2.fc24                  fedora  26 k
 perl-Sys-Mmap                armv7hl 0.17-5.fc24                  fedora  34 k
 perl-Sys-Syslog              armv7hl 0.34-1.fc24                  fedora  47 k
 perl-Template-Toolkit        armv7hl 2.26-4.fc24                  fedora 1.3 M
 perl-TermReadKey             armv7hl 2.33-4.fc24                  fedora  38 k
 perl-Test-Harness            noarch  3.36-2.fc24                  fedora 276 k
 perl-Text-Diff               noarch  1.44-1.fc24                  fedora  44 k
 perl-Time-HiRes              armv7hl 1.9728-2.fc24                fedora  50 k
 perl-Time-ParseDate          noarch  2015.103-2.fc24              fedora  40 k
 perl-TimeDate                noarch  1:2.30-8.fc24                fedora  52 k
 perl-Try-Tiny                noarch  0.24-2.fc24                  fedora  41 k
 perl-URI                     noarch  1.71-2.fc24                  fedora 116 k
 perl-URI-Encode              noarch  1.0.1-2.fc24                 fedora  23 k
 perl-WWW-RobotRules          noarch  6.02-13.fc24                 fedora  22 k
 perl-X10                     noarch  0.03-1                       zmrepo  29 k
 perl-XML-LibXML              armv7hl 1:2.0124-1.fc24              fedora 342 k
 perl-XML-NamespaceSupport    noarch  1.11-18.fc24                 fedora  22 k
 perl-XML-Parser              armv7hl 2.44-4.fc24                  fedora 220 k
 perl-XML-SAX                 noarch  0.99-16.fc24                 fedora  64 k
 perl-XML-SAX-Base            noarch  1.08-15.fc24                 fedora  35 k
 perl-XML-Simple              noarch  2.22-2.fc24                  fedora  85 k
 perl-devel                   armv7hl 4:5.22.2-359.fc24            fedora 552 k
 perl-libnet                  noarch  3.08-2.fc24                  fedora 125 k
 perl-libwww-perl             noarch  6.15-2.fc24                  fedora 209 k
 perl-version                 armv7hl 5:0.99.16-1.fc24             fedora  94 k
 php                          armv7hl 5.6.22-1.fc24                fedora 2.3 M
 php-cli                      armv7hl 5.6.22-1.fc24                fedora 3.5 M
 php-common                   armv7hl 5.6.22-1.fc24                fedora 1.0 M
 php-gd                       armv7hl 5.6.22-1.fc24                fedora  91 k
 php-mysqlnd                  armv7hl 5.6.22-1.fc24                fedora 281 k
 php-pdo                      armv7hl 5.6.22-1.fc24                fedora 137 k
 php-pecl-jsonc               armv7hl 1.3.9-3.fc24                 fedora  54 k
 pocl                         armv7hl 0.13-4.fc24                  fedora 1.6 M
 protobuf-lite                armv7hl 2.6.1-4.fc24                 fedora  62 k
 pulseaudio-libs              armv7hl 8.0-6.fc24                   fedora 558 k
 python3-cssselect            noarch  0.9.1-9.fc24                 fedora  64 k
 python3-javapackages         noarch  4.6.0-14.fc24                fedora  89 k
 python3-lxml                 armv7hl 3.4.4-4.fc24                 fedora 839 k
 python3-pyparsing            noarch  2.1.3-1.fc24                 fedora 113 k
 schroedinger                 armv7hl 1.0.11-10.fc24               fedora 248 k
 soxr                         armv7hl 0.1.2-2.fc24                 fedora  65 k
 speex                        armv7hl 1.2-0.25.rc2.fc24            fedora  60 k
 speexdsp                     armv7hl 1.2-0.9.rc3.fc24             fedora 449 k
 systemtap-sdt-devel          armv7hl 3.0-2.fc24                   fedora  70 k
 t1lib                        armv7hl 5.1.2-18.fc24                fedora 153 k
 taglib                       armv7hl 1.11-1.fc24                  fedora 264 k
 ttmkfdir                     armv7hl 3.0.9-48.fc24                fedora  52 k
 twolame-libs                 armv7hl 0.3.13-4.fc24                zmrepo  51 k
 tzdata-java                  noarch  2016d-1.fc24                 fedora 181 k
 uthash-devel                 noarch  1.9.9-10.fc24                fedora  59 k
 vlc-core                     armv7hl 3.0.0-0.8.fc24               zmrepo 7.6 M
 x264-libs                    armv7hl 0.148-11.20160614gita5e06b9.fc24
                                                                   zmrepo 472 k
 x265-libs                    armv7hl 1.9-1.fc24                   zmrepo 301 k
 xcb-util-keysyms             armv7hl 0.4.0-3.fc24                 fedora  14 k
 xml-common                   noarch  0.6.3-44.fc24                fedora  31 k
 xorg-x11-font-utils          armv7hl 1:7.5-31.fc24                fedora  78 k
 xorg-x11-fonts-Type1         noarch  7.5-16.fc24                  fedora 522 k
 xorg-x11-server-utils        armv7hl 7.7-19.fc24                  fedora 184 k
 xvidcore                     armv7hl 1.3.4-2.fc24                 zmrepo 222 k
 zoneminder                   armv7hl 1.30.0-3.fc24                zmrepo 7.2 M
 zvbi                         armv7hl 0.2.35-1.fc24                fedora 371 k

Riepilogo della transazione
================================================================================
Installati  304 pacchetti

Dimensione totale dello scaricamento: 163 M
Dimensione installata: 519 M
Scaricamento dei pacchetti:
--------------------------------------------------------------------------------
Totale                                          227 kB/s | 163 MB     12:15     

DRBD

dnf install drbd

Ultima verifica della scadenza dei metadati: 3:44:21 fa il Mon Nov 14 18:17:05 2016.
Dipendenze risolte.
================================================================================
 Package            Arch            Versione               Repository      Dim.
================================================================================
Installazione in corso:
 drbd               armv7hl         8.9.6-2.fc24           fedora          20 k
 drbd-udev          armv7hl         8.9.6-2.fc24           fedora          11 k
 drbd-utils         armv7hl         8.9.6-2.fc24           fedora         491 k

Riepilogo della transazione
================================================================================
Installati  3 pacchetti

Dimensione totale dello scaricamento: 523 k
Dimensione installata: 1.3 M

Postfix, Dovecot

dnf install postfix postfix-mysql dovecot dovecot-mysql dovecot-pigeonhole cyrus-sasl cyrus-sasl-devel cyrus-sasl-md5 php-imap php-mbstring

Ultima verifica della scadenza dei metadati: 1 day, 1:17:29 fa il Wed Nov 30 15:46:05 2016.
Dipendenze risolte.
=========================================================================================================================
 Package                      Arch              Versione                                      Repository            Dim.
=========================================================================================================================
Installazione in corso:
 clucene-core                 armv7hl           2.3.3.4-24.20130812.e8e3d20git.fc24           Fedora-str           456 k
 cyrus-sasl                   armv7hl           2.1.26-26.2.fc24                              Fedora-str            88 k
 cyrus-sasl-devel             armv7hl           2.1.26-26.2.fc24                              Fedora-str           314 k
 cyrus-sasl-md5               armv7hl           2.1.26-26.2.fc24                              Fedora-str            58 k
 dovecot                      armv7hl           1:2.2.24-1.fc24                               Fedora-str           3.3 M
 dovecot-mysql                armv7hl           1:2.2.24-1.fc24                               Fedora-str            82 k
 dovecot-pigeonhole           armv7hl           1:2.2.24-1.fc24                               Fedora-str           365 k
 libc-client                  armv7hl           2007f-11.fc24                                 Fedora-str           532 k
 libicu                       armv7hl           56.1-4.fc24                                   Fedora-str           8.0 M
 php-imap                     armv7hl           5.6.22-1.fc24                                 Fedora-str            91 k
 php-mbstring                 armv7hl           5.6.22-1.fc24                                 Fedora-str           537 k
 postfix                      armv7hl           2:3.1.0-1.fc24                                Fedora-str           1.3 M
 postfix-mysql                armv7hl           2:3.1.0-1.fc24                                Fedora-str            47 k

Riepilogo della transazione
=========================================================================================================================
Installati  13 pacchetti

Dimensione totale dello scaricamento: 15 M
Dimensione installata: 50 M
Procedere [s/N]: 

Postfixadmin

portiamoci in /usar/share

cd /usr/share

Scarichiamo dal mio mirror postfixadmin:

wget http://www.stefanostrozzi.it/mirror/postfixadmin-3.0.tar.gz

decomprimere:

tar -xzvf postfixadmin-3.0.tar.gz

rinominiamo

mv postfixadmin-3.0 postfixadmin

Roundcubemail

Scarichiamo dal mio mirror roundcubemail:

wget  http://www.stefanostrozzi.it/mirror/roundcubemail-1.2.2-complete.tar.gz

decomprimere sempre in /usr/share:

tar -xzvf roundcubemail-1.2.2-complete.tar.gz

rinominare

mv roundcubemail-1.2.2 roundcubemail

Cluster

dnf install pcs

Ultima verifica della scadenza dei metadati: 0:00:01 fa il Thu Dec  1 18:33:35 2016.
Dipendenze risolte.
====================================================================================
 Package                   Arch      Versione                    Repository    Dim.
====================================================================================
Installazione in corso:
 corosync                  armv7hl   2.3.5-2.fc24                Fedora-str   192 k
 corosynclib               armv7hl   2.3.5-2.fc24                Fedora-str   114 k
 libibverbs                armv7hl   1.2.0-1.fc24                Fedora-str    56 k
 libqb                     armv7hl   1.0-1.fc24                  Fedora-str    93 k
 librdmacm                 armv7hl   1.0.21-1.fc24               Fedora-str    62 k
 libyaml                   armv7hl   0.1.6-8.fc24                Fedora-str    51 k
 net-snmp-libs             armv7hl   1:5.7.3-9.fc24              Fedora-str   754 k
 pacemaker                 armv7hl   1.1.14-2.5a6cdd1.git.fc24   Fedora-str   465 k
 pacemaker-cli             armv7hl   1.1.14-2.5a6cdd1.git.fc24   Fedora-str   227 k
 pacemaker-cluster-libs    armv7hl   1.1.14-2.5a6cdd1.git.fc24   Fedora-str    55 k
 pacemaker-libs            armv7hl   1.1.14-2.5a6cdd1.git.fc24   Fedora-str   488 k
 pcs                       armv7hl   0.9.150-1.fc24              Fedora-str   1.4 M
 python-clufter            armv7hl   0.56.2-1.fc24               Fedora-str   330 k
 resource-agents           armv7hl   3.9.7-4.fc24                Fedora-str   555 k
 ruby                      armv7hl   2.3.1-56.fc24               Fedora-str    77 k
 ruby-irb                  noarch    2.3.1-56.fc24               Fedora-str    95 k
 ruby-libs                 armv7hl   2.3.1-56.fc24               Fedora-str   2.7 M
 rubygem-backports         noarch    3.6.4-2.fc24                Fedora-str   121 k
 rubygem-bigdecimal        armv7hl   1.2.8-56.fc24               Fedora-str    85 k
 rubygem-did_you_mean      armv7hl   1.0.0-56.fc24               Fedora-str   219 k
 rubygem-eventmachine      armv7hl   1.0.8-2.fc24                Fedora-str   151 k
 rubygem-io-console        armv7hl   0.4.5-56.fc24               Fedora-str    58 k
 rubygem-json              armv7hl   1.8.3-102.fc24              Fedora-str    62 k
 rubygem-multi_json        noarch    1.10.1-3.fc24               Fedora-str    22 k
 rubygem-open4             noarch    1.3.4-3.fc24                Fedora-str    17 k
 rubygem-psych             armv7hl   2.0.17-56.fc24              Fedora-str    87 k
 rubygem-rack              noarch    1:1.6.4-1.fc24              Fedora-str    93 k
 rubygem-rack-protection   noarch    1.5.3-3.fc24                Fedora-str    19 k
 rubygem-rack-test         noarch    0.6.3-3.fc24                Fedora-str    19 k
 rubygem-rdoc              noarch    4.2.2-1.fc24                Fedora-str   449 k
 rubygem-sinatra           noarch    1:1.4.6-3.fc24              Fedora-str   136 k
 rubygem-tilt              noarch    2.0.1-2.fc24                Fedora-str    32 k
 rubygems                  noarch    2.5.1-56.fc24               Fedora-str   281 k
 rubypick                  noarch    1.1.1-5.fc24                Fedora-str    11 k

Riepilogo della transazione
====================================================================================
Installati  34 pacchetti

Dimensione totale dello scaricamento: 9.4 M
Dimensione installata: 30 M
Procedere [s/N]:  

SAMBA

aggiunte per samba:

pcs resource create fs_smb Filesystem device="/dev/drbd1" directory="/var/share" fstype="ext4"
pcs resource create r_smb systemd:smb
pcs resource create r_nmb systemd:nmb
pcs resource group add gr_smb fs_smb r_nmb r_smb

Configurazione Software

Ora dobbiamo svolgere alcune operazioni di base per la configurazione dei vari software.
Benchè abbia cercato di mantenere una certa linearità e distinzione tra un software e l'altro alla fine inevitabilmente le strade si incrociano e verranno ripresi e richiamati comandi che si riferiscono a altri software già presentati.

Apache, Mariadb

avviamo l'apache

systemctl start httpd.service

apriamo il firewall

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

avviamo mariadb

systemctl start mariadb.service

apriamo il firewall

firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload

rendiamo sicura l'installazione di mariadb

mysql_secure_installation

Impostiamo la password del “root” di MariaDB e confermiamo alle scelte proposte.

Zoneminder

Creiamo il database per zoneminder

mysql -u root -p < /usr/share/zoneminder/db/zm_create.sql

creiamo l'utente e i relativi diritti di accesso (se scegliamo una password e un utente diversi da quelli proposti ricordarseli per eventuali future modifiche).
Entrare nella consolle di mariadb:

mysql -u root -p 

lanciare il comando:

>grant all on zm.* to 'zmuser'@localhost identified by 'zmpass';

rendiamo subito effettivi i cambiamenti

mysqladmin -u root -p reload

oppure dalla console di mariadb:

>flush privileges;

zoneminder ci chiede anche di modificare il file php.ini inserendo il nostro “time zone”

vi /etc/php.ini

date.timezone = "Europe/Rome"

riavviare apache

systemctl restart httpd.service

avviare zoneminder

systemctl start zoneminder.zervice

verificare che tutto funzione collegandosi al proprio server RPI tramite browser e testare il funzionamento di zoneminder http://indirizzoserver/zm su entrambi i nodi

In particolare per attivare le visualizzazioni delle telecamere riporto un paio di esempi:

telecamera ip su rtsp:
Name: libero
Server: none
Source Type: Ffmpeg
Scheda source:
Source Path: rtsp://192.168.1.xxx:554/12
Remote Method:RTP/Unicast

telecamera ip su http:
Name:libero
Server:none
Source Type: remote
Scheda source:
Remote Protocol:http
Remote Method:regexp
Remote HostName: 192.168.xxx
Remote Host Port:80xx
Remote Host Path:/videostream.cgi?user=utente&pwd=password&resolution=6&rate=5

DRBD

Innanzi tutti modificare il file /etc/drbd.d/global_common.conf come segue:

global_common.conf
# DRBD is the result of over a decade of development by LINBIT.
# In case you need professional services for DRBD or have
# feature requests visit http://www.linbit.com
 
global {
        usage-count yes;
        # minor-count dialog-refresh disable-ip-verification
        # cmd-timeout-short 5; cmd-timeout-medium 121; cmd-timeout-long 600;
}
 
common {
        handlers {
                # These are EXAMPLE handlers only.
                # They may have severe implications,
                # like hard resetting the node under certain circumstances.
                # Be careful when chosing your poison.
 
                pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
                pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
                local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
                # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
                # split-brain "/usr/lib/drbd/notify-split-brain.sh root";
                # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
                # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
                # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
        }
 
        startup {
                wfc-timeout 60;
                degr-wfc-timeout 120;
                #outdated-wfc-timeout wait-after-sb
        }
 
        options {
                # cpu-mask on-no-data-accessible
        }
 
        disk {
                # size on-io-error fencing disk-barrier disk-flushes
                # disk-drain md-flushes resync-rate resync-after al-extents
                # c-plan-ahead c-delay-target c-fill-target c-max-rate
                # c-min-rate disk-timeout
        }
 
        net {
                # protocol timeout max-epoch-size max-buffers unplug-watermark
                # connect-int ping-int sndbuf-size rcvbuf-size ko-count
                allow-two-primaries;
                #cram-hmac-alg shared-secret
                after-sb-0pri discard-zero-changes;
                after-sb-1pri discard-secondary;
                after-sb-2pri disconnect;
                # always-asbp rr-conflict
                # ping-timeout data-integrity-alg tcp-cork on-congestion
                # congestion-fill congestion-extents csums-alg verify-alg
                # use-rle
        }
}

Ora Preparare le partizioni che dovranno accogliere i dati.
Avendo creato inizialmente un partizionamento di tipo MBR conviene ora creare su /dev/sda una partizione estesa e quindi creare le unità logiche che si desidera.
Per il mio progetto ho previsto un partizione da 10GB che dovrà ospitare il database “mariadb” e le caselle di posta.
La partizione sarà /dev/sda5 e diventerà tramite DRBD il device /dev/drbd0.
Creiamo allora il primo file risorsa:
I nomi nodo1 e nodo2 sono gli hostname dei nodi e devono essere gli stessi indicati nel file hosts.

vi /etc/drbd.d/r0.res
r0.res
resource r0 {
startup {
       become-primary-on both;
}
on nodo1 {
   device    /dev/drbd0;
   disk      /dev/sda5;
   address   192.168.1.61:7788;
   meta-disk internal;
}
 
on nodo2 {
   device    /dev/drbd0;
   disk      /dev/sda5;
   address   192.168.1.62:7788;
   meta-disk internal;
   }
}

Creiamo la seconda partizione /dev/sda6 da circa 60G e conterrà le risorse web, diventerà /dev/drbd1

r1.res
resource r1 {
startup {
       become-primary-on both;
}
on nodo1 {
   device    /dev/drbd1;
   disk      /dev/sda6;
   address   192.168.1.61:7789;
   meta-disk internal;
}
 
on nodo2 {
   device    /dev/drbd1;
   disk      /dev/sda6;
   address   192.168.1.62:7789;
   meta-disk internal;
   }
}

La terza partizione da creare è /dev/sda7 che diventerà il device /dev/drbd2 destinata ad ospitare lo spazio per le condivisioni interne gestite da samba.

r2.res
resource r2 {
startup {
       become-primary-on both;
}
on nodo1 {
   device    /dev/drbd2;
   disk      /dev/sda7;
   address   192.168.1.61:7790;
   meta-disk internal;
}
 
on nodo2 {
   device    /dev/drbd2;
   disk      /dev/sda7;
   address   192.168.1.62:7790;
   meta-disk internal;
   }
}

I file appena creati devono essere identici su entrambi i nodi.

Su ciascun nodo eseguire il seguente comando per creare lo spazio dei metadati.

drbdadm create-md r0
drbdadm create-md r1
drbdadm create-md r2

Disabilitiamo temporaneamente il servizio drbd all'avvio e riavviamo il nodo.

systemctl disable drbd.service
reboot

Prima di avviare drbd apriamo le porte del firewall su entrambi i nodi

firewall-cmd --add-port=7788/tcp --permanent
firewall-cmd --add-port=7789/tcp --permanent
firewall-cmd --add-port=7790/tcp --permanent
firewall-cmd --reload

NOTA BENE
Prima di avviare drbd però dobbiamo tornare ai vari file risorsa e commentare la sezione “become-primary-on both” solo per il primo avvio per consentire la sincronizzazione prodotta da overwrite data ecc…
poi una volta terminata la prima sincronizzazione possiamo togliere il commento.

Avviamo drbd

systemctl start drbd.service

Possiamo controllare lo stato dei device con

cat /proc/drbd

Se è tutto ok iniziamo a sincronizzare

drbdadm -- --overwrite-data-of-peer primary r0
drbdadm -- --overwrite-data-of-peer primary r1
drbdadm -- --overwrite-data-of-peer primary r2

L'operazione durerà il tempo necessario che varia in base alla dimensione delle partizioni, alle prestazioni dei dischi e della macchina.
Nel mentre abilitiamo il servizio drbd al boot:

systemctl enable drbd.service

e facciamo una modifica al file “/etc/systemd/system/multi-user.target.wants/drbd.service” che diventerà come segue:

drbd.service
[Unit]
Description=Distributed Replicated Block Device
After=systemd-modules-load.service network.target network-online.target
Wants=network-online.target
 
[Service]
Type=oneshot
RemainAfterExit=yes
# load config
ExecStart=/usr/sbin/drbdadm adjust all
# user interruptible version of wait-connect all
ExecStart=/usr/sbin/drbdadm wait-con-int
# become primary if configured
ExecStart=/usr/sbin/drbdadm sh-b-pri all
# disconnect and detach all resources
ExecStop=/usr/sbin/drbdadm down all
 
[Install]
WantedBy=multi-user.target

In sostanza gli abbiamo detto di avviare il servizio drbd solo dopo il target network-online e che lo stesso network-online è necessario per avviare drbd.
Al termine della sincronizzazione saremo pronti per utilizzare i nostri nuovi dispositivi drbd (/dev/drbd0, /dev/drbd1, /dev/drbd2).
Lo vedremo più avanti quando li formatteremo prima di darli in pasto al cluster.

Postfix + Postfixadmin

Inizia ora la fase più complicata ovvero la preparazione degli strumenti del mailserver.

creiamo il db per la gestione delle caselle di posta:

mysql -u root -p

CREATE DATABASE postfix;
CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'choose_Pfxadmin_password';
GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';
FLUSH PRIVILEGES;

Creare

mkdir /etc/postfixadmin

creare al suo interno il file (su entrambi i nodi)

vi /etc/postfixadmin/config.local.php

e inserire al suo interno quanto segue cos' come indicato nel file INSTALL.TXT (entrambi i nodi)

config.local.php
<?php
$CONF['database_type'] = 'mysqli';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'choose_Pfxadmin_password';
$CONF['database_name'] = 'postfix';
 
$CONF['configured'] = true;
 
 
$CONF['admin_email'] = 'postmaster@miodominio.org';
$CONF['page_size'] = '50';
$CONF['default_aliases'] = array (
    'MAILER-DAEMON' => 'postmaster@miodominio.org',
    'abuse' => 'postmaster@miodominio.org',
    'postmaster' => 'hostmaster@miodominio.org',
    'webmaster' => 'hostmaster@miodominio.org',
    'hostmaster' => 'root@miodominio.org',
    'root' => 'admin@miodominio.org'
);
 
 
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['transport'] = 'YES';
$CONF['transport_options'] = array (
    'dovecot',  // for virtual accounts
    'virtual',  // for virtual accounts
    'local',    // for system accounts
    'relay'     // for backup mx
);
$CONF['transport_default'] = 'dovecot';
$CONF['vacation'] = 'NO';
$CONF['vacation_control'] = 'NO';
$CONF['vacation_control_admin'] = 'NO';
$CONF['backup'] = 'YES';
$CONF['sendmail'] = 'YES';
$CONF['logging'] = 'YES';
$CONF['fetchmail'] = 'YES';
$CONF['fetchmail_extra_options'] = 'YES';
$CONF['footer_text'] = 'Return to mail.miodominio.org';
$CONF['footer_link'] = 'http://mail.miodominio.org';
$CONF['used_quotas'] = 'YES';
 
?>

modificando ovviamente il valore 'database_user' e 'database_password' in modo coerente con quanto scelto in precedenza

creare il seguente link simbolico (su entrambi i nodi)

ln -s /etc/postfixadmin/config.local.php /usr/share/postfixadmin

modificare i permessi solo per la seguente cartella (solo sul nodo attivo)

chown -R root:apache /usr/share/postfixadmin/templates_c

creiamo anche il seguente file che servirà per indicare ad apache dove trovare la directory riservata a postfixadmin (su entrambi i nodi)

vi /etc/httpd/conf.d/postfixadmin.conf
postfixadmin.conf
Alias /postfixadmin /usr/share/postfixadmin
 
<Directory /usr/share/postfixadmin/>
   AddDefaultCharset UTF-8
 
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
        Require all granted
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Allow from 127.0.0.1
     Allow from ::1
     Allow from 192.168.1.0/24
   </IfModule>
</Directory>

Prima di accedere alla configurazione di postfixadmin e per applicare le modifiche appena fatte è necessario riavviare il server web:

systemctl restart httpd.service

E poi accedere a: https://192.168.1.xxx/postfixadmin/setup.php
Se non avremo avuto messaggi di errore o notifiche da correggere, ci verrà proposto di inserire e confermare una “setup” password.
Essa ci permetterà di genere un hash che andrà copiato e inserito nel file /usr/share/config.inc.php

$CONF['setup_password'] = '4fd7a130b6899ca352b5a0bf74026687:e2c448969739f22be306831b505d042a5d55a2ac';

Subito dopo proseguire sul portale a reinserire la password provvisoria, la mail dell'amministratore di postfixadmin e una nuova password da confermare.
Verranno aggiornati i dati nel db e verrà proposto di accedere alla pagina di login dalla quale si potrà poi amministrare i dati e le caselle di posta del server mail.

Postfix

editare il file /etc/postfix/main.cf in modo tale da avere la seguente configurazione:

main.cf
myhostname = mail.miodominio.it
mydomain = miodominio.it
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = 127.0.0.1
unknown_local_recipient_reject_code = 550
mynetworks_style = host
#----------parte relativa i file mappa cf -------------------#
relay_domains = proxy:mysql:$config_directory/sql/relay_domains.cf
relay_recipient_maps = proxy:mysql:$config_directory/sql/relay_recipient_maps.cf
virtual_alias_maps = proxy:mysql:$config_directory/sql/virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:$config_directory/sql/virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:$config_directory/sql/virtual_mailbox_maps.cf
transport_maps = proxy:mysql:$config_directory/sql/transport_maps.cf
#----------- fine mappe -----------------------#
virtual_mailbox_base = /var/spool/mail
virtual_uid_maps = static:8
virtual_gid_maps = static:12
mailbox_size_limit = 0
message_size_limit = 0
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
smtpd_banner = $myhostname ESMTP $mail_name
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
dovecot_destination_recipient_limit = 1
#------------------------- parte relativa a SASL -------------------------
broken_sasl_auth_clients        = yes
smtpd_helo_required             = yes
smtpd_client_restrictions       = permit_sasl_authenticated
smtpd_sender_restrictions       = permit_sasl_authenticated
smtpd_sasl_auth_enable          = yes
smtpd_sasl_security_options     = noanonymous
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
smtpd_sasl_type                 = dovecot
smtpd_sasl_path                 = private/auth
#-------------------------- fine SASL --------------------------
#-------------------------- parte relativa TLS -------------------------
smtpd_use_tls                   = yes
smtpd_tls_auth_only             = yes
smtpd_tls_cert_file             = /etc/pki/tls/certs/localhost.crt
smtpd_tls_key_file              = /etc/pki/tls/private/localhost.key
smtpd_tls_mandatory_protocols   = !SSLv2,!SSLv3
smtpd_tls_received_header       = yes
smtpd_tls_loglevel              = 3
tls_random_source               = dev:/dev/urandom
# --------------------------- fine TLS --------------------------
# ------------------ parte relativa le restrizioni SMTPD (relay) ------------------
disable_vrfy_command            = yes
non_fqdn_reject_code            = 450
invalid_hostname_reject_code    = 450
maps_rbl_reject_code            = 450
unverified_sender_reject_code   = 550
smtpd_recipient_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        reject_unauth_destination
        permit
compatibility_level = 2

Fare una copia anche del file /etc/postfix/master.cf e sostituirlo con il seguente:

master.cf
smtp      inet  n       -       n       -       -       smtpd
smtps     inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache
dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=mail:mail argv=/usr/libexec/dovecot/deliver -d ${recipient}

Ora creare la directory /etc/postfix/sql nella qualle metteremo tutti i seguenti file delle mappe di collegamento a mariadb

mkdir /etc/postfix/sql
cd /etc/postfix/sql

e iniziamo a creare i vari file mappa:

vi /etc/postfix/sql/virtual_alias_maps.cf
virtual_alias_maps.cf
hosts           = localhost
dbname          = postfix
user            = postfix
password        = password inserita al momento della creazione del database postfix 
table           = alias
select_field    = goto
where_field     = address
additional_conditions = AND active = '1'
vi /etc/postfix/sql/virtual_domains_maps.cf
virtual_domains_maps.cf
hosts           = localhost
dbname          = postfix
user            = postfix
password        = password inserita al momento della creazione del database postfix 
table           = domain
select_field    = domain
where_field     = domain
additional_conditions = AND backupmx = '0' AND active = '1'
vi /etc/postfix/sql/virtual_mailbox_maps.cf
virtual_mailbox_maps.cf
hosts           = localhost
dbname          = postfix
user            = postfix
password        = password inserita al momento della creazione del database postfix 
table           = mailbox
select_field    = maildir
where_field     = username
additional_conditions = AND active = '1'
vi /etc/postfix/sql/virtual_mailbox_limit_maps.cf 
virtual_mailbox_limit_maps.cf
hosts           = localhost
dbname          = postfix
user            = postfix
password        = password inserita al momento della creazione del database postfix 
table           = mailbox
select_field    = quota
where_field     = username
additional_conditions = AND active = '1'
vi /etc/postfix/sql/relay_recipient_maps.cf
relay_recipient_maps.cf
hosts           = localhost
dbname          = postfix
user            = postfix
password        = password inserita al momento della creazione del database postfix 
table           = alias
select_field    = goto
where_field     = address
additional_conditions = AND active = '1'

Qui viene cercato nel database l'elenco dei domini ai quali è consentito il ralay ossia l'invio delle email.

vi /etc/postfix/sql/relay_domains.cf
relay_domains.cf
hosts           = localhost
dbname          = postfix
user            = postfix
password        = password inserita al momento della creazione del database postfix 
table           = domain
select_field    = domain
where_field     = domain
additional_conditions = AND backupmx = '1' AND active = '1'

Questa mappa viene usata da postfix nel momento in cui un dominio deve inviare della posta.
Qui viene indicato che tipo di trasporto dovrà usare un determinato dominio.

vi /etc/postfix/sql/transport_maps.cf
transport_maps.cf
hosts           = localhost
dbname          = postfix
user            = postfix
password        = password inserita al momento della creazione del database postfix 
table           = domain
select_field    = transport
where_field     = domain
additional_conditions = AND active = '1'

infine cambiamo i diritti alla cartella sql per renderla sicura in quanto al suo interno i file contengono delle password

chown root:postfix /etc/postfix/sql/ -R
chmod 0640 /etc/postfix/sql/*.cf
chmod 0750 /etc/postfix/sql/

Quindi possiamo scegliere se riscrivere tutti questi file anche sull'altro nodo o trasferirli con scp

scp /etc/postfix/main.cf nodo2:/etc/postfix/
scp /etc/postfix/master.cf nodo2:/etc/postfix/
scp /etc/postfix/sql/* nodo2:/etc/postfix/sql/

apriamo il firewall per postfix

firewall-cmd --add-service=smtp --permanent
firewall-cmd --add-service=smtps --permanent
firewall-cmd --reload

Facciamo un test di avvio del servizio postfix per essere sicuri che fino ad ora sia tutto ok.

systemctl start postfix.service

Se non ci sono messaggi di errore passiamo a dovecot.

Dovecot

Portiamoci nella cartella

cd /etc/dovecot

rinominiamo il file originale

cp /etc/dovecot/dovecot.conf /etc/dovecto/dovecot.conf.orig

rieditiamolo e lo riscriviamo come di seguito:

vi /etc/dovecto/dovecot.conf
dovecot.conf
protocols = imap
!include conf.d/*.conf
!include_try local.conf

Poi creiamo il seguente file:

vi /etc/dovecot/dovecot-sql.conf.ext
dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=passwordinseritaallaconfigurazionedipostfixadmin
default_pass_scheme = MD5
 
user_query = \
  SELECT CONCAT("/var/spool/mail/", domain) AS home, 8 AS uid, 12 AS gid, \
    'maildir:/var/spool/mail/%d/%n' AS mail, CONCAT("dirsize:storage=", quota) AS quota \
  FROM mailbox WHERE username = '%u' AND active = '1'
 
password_query = \
  SELECT username AS user, password, \
    CONCAT("/var/spool/mail/", domain) AS userdb_home, 8 AS userdb_uid, 12 AS userdb_gid \
  FROM mailbox WHERE username = '%u' AND active='1'
 
iterate_query = SELECT username AS user FROM mailbox WHERE active='1'

ora possiamo entrare nella sottodirectory conf.d

cd /etc/dovecot/conf.d

ed eseguiamo la rinomina e la riscrittura di tutti i seguenti file:

mv 10-auth.conf 10-auth.conf.orig
vi 10-auth.conf
10-auth.conf
auth_mechanisms = plain
!include auth-sql.conf.ext
mv 10-mail.conf 10-mail.conf.orig
vi 10-mail.conf
10-mail.conf
mail_location = maildir:/var/spool/mail/%d/%n
namespace inbox {
  inbox = yes
}
mail_privileged_group = mail
mail_access_groups = mail
mmap_disable = yes
first_valid_uid = 8
first_valid_gid = 12
mbox_write_locks = fcntl
mv 10-master.conf 10-master.conf.orig
vi 10-master.conf
10-master.conf
service imap-login {
  inet_listener imap {
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
  }
  inet_listener pop3s {
  }
}
service lmtp {
  unix_listener lmtp {
  }
}
service imap {
}
service pop3 {
}
service auth {
  unix_listener auth-userdb {
    mode = 0600
    user = mail
    group = mail
  }
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}
service auth-worker {
}
service dict {
  unix_listener dict {
  }
}
mv 10-ssl.conf 10-ssl.conf.orig
vi 10-ssl.conf
10-ssl.conf
ssl = yes
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
ssl_cipher_list = PROFILE=SYSTEM
mv 15-lda.conf 15-lda.conf.orig
vi 15-lda.conf
15-lda.conf
postmaster_address = postmaster@miodominio.it
hostname = mail.miodominio.it
protocol lda {
  mail_plugins = sieve
}
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
mv 20-managesieve.conf 20-managesieve.conf.orig
vi 20-managesieve.conf
20-managesieve.conf
protocols = $protocols sieve
protocol sieve {
}
mv 90-sieve.conf 90-sieve.conf.orig
vi 90-sieve.conf
90-sieve.conf
plugin {
  sieve = /var/spool/mail/%Ld/%Ln.sieve/.dovecot.sieve
  sieve_dir = /var/spool/mail/%Ld/%Ln.sieve/
  sieve_extensions = +notify +imapflags
}

Infine ricordiamoci di proteggere il seguente file in quanto contiene la password del db

chmod 0600 /etc/dovecot/dovecot-sql.conf.ext

apriamo il firewall per dovecot

firewall-cmd --add-service=imap --permanent
firewall-cmd --add-service=imaps --permanent
firewall-cmd --reload

Questi file devono essere identici su entrambi i nodi.
Avviamo dovecot

systemctl start dovecot.service

Ora sarebbe bello fare un po' di test con telnet o qualche client ma è troppo lungo da riportare qui quindi andiamo avanti con Roundcubemail

Roundcubemail-

Posizionarsi in /usr/share/

cd /usr/share
chown -R root:apache /​usr/​share/​roundcubemail
​
chmod 775 /​usr/​share/​roundcubemail/​temp
chmod 775 /​usr/​share/​roundcubemail/​logs
chmod 775 /​usr/​share/​roundcubemail/​config

creare il file /etc/httpd/conf.d/roundcubemail.conf

roundcubemail.conf
Alias /roundcubemail /usr/share/roundcubemail
 
<Directory /usr/share/roundcubemail/>
    <IfModule mod_authz_core.c>
        # Apache 2.4
Require all granted
  </IfModule>
   <IfModule !mod_authz_core.c>
       # Apache 2.2
        Order Deny,Allow
Allow from all
    </IfModule>
</Directory>
 
<Directory /usr/share/roundcubemail/installer/>
  <IfModule mod_authz_core.c>
      # Apache 2.4
      Require local
       Require all granted
   </IfModule>
   <IfModule !mod_authz_core.c>
        Order Deny,Allow
Allow from all
        Allow from 127.0.0.1
        Allow from ::1
    </IfModule>
</Directory>
 
<Directory /usr/share/roundcubemail/bin/>
    Order Allow,Deny
    Deny from all
</Directory>
<Directory /usr/share/roundcubemail/plugins/enigma/home/>
    Order Allow,Deny
    Deny from all
</Directory>

creare il database per roundcube

mysql -u root -p
CREATE DATABASE roundcubemail /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';

entrare nella directory /usr/share/roundcubemail

cd /usr/share/roundcubemail

eseguire

mysql -u root -p roundcubemail < SQL/mysql.initial.sql

Ricaricare l'apache in quanto è stato aggiunto il file roundcubemail.conf

systemctl restart httpd.service

poi vado all'installer
http://ipnodo/roundcubemail/installer

dovrebbe dare tutto verde tranne alcuni arancioni che non sono richiesti
In realtà per chissà quale motivo ci rimane da installare php-xml… quindi:

dnf install php-xml

nella seconda pagina
in smtp settings ho messo ssl://localhost (ma non va quindi ho messo localhost)
e spuntato use the current IMAP username and password for smtp autentication
in fondo cliccare su create config e dovrebbe apparire un messaggio che avvisa che il file di configurazione è stato posizionato all'interno di RCMAIL_CONFIG_DIR
cliccare su continue
si fanno i test e poi si va alla pagina di login di roundcube
http://ipnodo/roundcubemail
se è tutto ok si dovrebbe eliminare la directory installer.
Quindi tutta la parte relativa alle configurazioni di postfixadmin, postfix, dovecot e roundcubemail sono da ripetere sul secondo nodo stando attenti agli IP

Cluster

Su entrambi i nodi eseguire le seguenti 4 operazioni:

1-aprire il firewall

firewall-cmd --permanent --add-service=high-availability
firewall-cmd --reload

2-avviare il servizio pcsd

systemctl start pcsd.service

3-abilitarlo all'avvio

systemctl enable pcsd.service

4-dare una password all'utente riservato per il cluster

passwd hacluster

Da eseguire solo su uno dei due nodi:

1-Generare le chiavi di autenticazione per i nodi del cluster

pcs cluster auth stn1 stn2

2-Creare il cluster dandogli un nome:

pcs cluster setup --name clst stn1 stn2

Se tutto è andato bene avremo una serie di messagi come di seguito:

Destroying cluster on nodes: stn1, stn2...
stn2: Stopping Cluster (pacemaker)...
stn1: Stopping Cluster (pacemaker)...
stn2: Successfully destroyed cluster
stn1: Successfully destroyed cluster

Sending cluster config files to the nodes...
stn1: Succeeded
stn2: Succeeded

Synchronizing pcsd certificates on nodes rp1, rp2...
stn1: Success
stn2: Success

Restarting pcsd on the nodes in order to reload the certificates...
stn1: Success
stn2: Success

3-avviare il cluster:

pcs cluster start --all

QUesto comando avvia il servizio pacemaker su entrambi i nodi altrimenti si puo eseguire

systemctl start pacemaker.service

separatamente su ogni nodo.

Se è stato lanciato il pcs cluster start –all avremo come riusltato il seguente messaggio:

rp2: Starting Cluster...
rp1: Starting Cluster...

Verificare su entrambi i nodi la funzionalità del cluster con:

crm_mon

che avrà come esito qualcosa simile a questo:

Stack: corosync
Current DC: rp1 (version 1.1.14-2.5a6cdd1.git.fc24-5a6cdd1) - partition with quorum
Last updated: Fri Feb 10 08:30:28 2017          Last change: Fri Feb 10 08:28:14
 2017 by hacluster via crmd on stn1

2 nodes and 0 resources configured

Online: [ stn1 stn2 ]

Da qui in avanti si apre un mondo di scelte possibili.
Io inoltre ho lanciato i seguenti comandi SOLO DA UNO DEI DUE NODI:
disabilitare lo stonith:

pcs property set stonith-enabled=false

ignorare il quorum:

pcs property set no-quorum-policy=ignore

di default ogni risorsa rimane dove è stata lasciata l'ultima volta (credo):

pcs property set default-resource-stickiness=INFINITY

IP

Iniziamo a creare lanostra prima risorsa ovvero l'indirizzo ip

pcs resource create clstIP IPaddr2 ip=192.168.1.63 cidr_netmask=24

esito di crm_mon:

Stack: corosync
Current DC: rp1 (version 1.1.14-2.5a6cdd1.git.fc24-5a6cdd1) - partition with quorum
Last updated: Fri Feb 10 08:36:38 2017          Last change: Fri Feb 10 08:36:34
 2017 by root via cibadmin on rp1

2 nodes and 1 resource configured

Online: [ rp1 rp2 ]

clstIP  (ocf::heartbeat:IPaddr2):	Started rp1

File System

Dobbiamo ora preparare e attivare lo spazio in cui andremo a mettere i dati del sito web e della posta elettronica.
Abbiamo precedentemente creato il dispositivo /dev/drbd0 con la risorsa “r0.res” e reso primario su entrambi i nodi
Quindi è come se avessimo un normale HD a disposizione, e come tutti gli HD deve essere formattato prima di usarlo
Solo da uno dei due nodi:

mkfs.ext4 /dev/drbd0

esito:

mke2fs 1.42.13 (17-May-2015)
Discarding device blocks: done                            
Creating filesystem with 55460079 4k blocks and 13869056 inodes
Filesystem UUID: bad70a0f-8c24-4088-8a38-45ec0dca5272
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done  

Ora fermiamo e ci accertiamo che tutti i servizi da far gestire al cluster siano disabilitati al boot (SU ENTRAMBI I NODI)

systemctl stop zoneminder.service
systemctl stop httpd.service
systemctl stop dovecot.service
systemctl stop postfix.service
systemctl stop mariadb.service

systemctl disable mariadb.service
systemctl disable postfix.service
systemctl disable httpd.service
systemctl disable zoneminder.service

Lasciamo invece attivo al boot solo il servizio drbd e dovecot:

systemctl enable drbd.service
systemctl enable dovecot.service

Ora montiamo il dispositivo drbd su una directory provvisoria, in essa dovremo copiare la struttura dei file che dobbiamo avere ridondanti.

mount /dev/drbd0 /mnt

Ci portiamo nella directory di Mariadb (ha lo stesso nome di mysql)

cd /var/lib/mysql

Copiamo l'intero contenuto comprese le sottodirectory sull'unità appena montata

cp -R . /mnt/

Diamo la proprietà della directory all'utente del DB mysql:
chown -R mysql:mysql /mnt/ da:

  total 176196
drwxr-xr-x   8 root root     4096 Feb 10 14:19 .
dr-xr-xr-x. 18 root root     4096 Feb  7 19:59 ..
-rw-r-----   1 root root    16384 Feb 10 14:19 aria_log.00000001
-rw-r-----   1 root root       52 Feb 10 14:19 aria_log_control
-rw-r-----   1 root root 79691776 Feb 10 14:19 ibdata1
-rw-r-----   1 root root 50331648 Feb 10 14:19 ib_logfile0
-rw-r-----   1 root root 50331648 Feb 10 14:19 ib_logfile1
drwx------   2 root root    16384 Feb 10 08:43 lost+found
-rw-r-----   1 root root        0 Feb 10 14:19 multi-master.info
drwx------   2 root root     4096 Feb 10 14:19 mysql
-rw-r-----   1 root root       16 Feb 10 14:19 mysql_upgrade_info
drwx------   2 root root     4096 Feb 10 14:19 performance_schema
drwx------   2 root root     4096 Feb 10 14:19 postfix
drwx------   2 root root     4096 Feb 10 14:19 roundcubemail
drwx------   2 root root     4096 Feb 10 14:19 zm

a:
total 176196

drwxr-xr-x   8 mysql mysql     4096 Feb 10 14:19 .
dr-xr-xr-x. 18 root  root      4096 Feb  7 19:59 ..
-rw-r-----   1 mysql mysql    16384 Feb 10 14:19 aria_log.00000001
-rw-r-----   1 mysql mysql       52 Feb 10 14:19 aria_log_control
-rw-r-----   1 mysql mysql 79691776 Feb 10 14:19 ibdata1
-rw-r-----   1 mysql mysql 50331648 Feb 10 14:19 ib_logfile0
-rw-r-----   1 mysql mysql 50331648 Feb 10 14:19 ib_logfile1
drwx------   2 mysql mysql    16384 Feb 10 08:43 lost+found
-rw-r-----   1 mysql mysql        0 Feb 10 14:19 multi-master.info
drwx------   2 mysql mysql     4096 Feb 10 14:19 mysql
-rw-r-----   1 mysql mysql       16 Feb 10 14:19 mysql_upgrade_info
drwx------   2 mysql mysql     4096 Feb 10 14:19 performance_schema
drwx------   2 mysql mysql     4096 Feb 10 14:19 postfix
drwx------   2 mysql mysql     4096 Feb 10 14:19 roundcubemail
drwx------   2 mysql mysql     4096 Feb 10 14:19 zm

Smontiamo l'unità drbd

umount /mnt/

Ora creiamo la risorsa filesystem per il cluster (ad essa viene dato il nome fs_mmweb che sta ad indicare che è il filesystem nel quale saranno posizionati i dati MariaDb, Mail, e WEB

pcs resource create fs_mmweb Filesystem device="/dev/drbd0" directory="/var/lib/mysql" fstype="ext4"

N.B. di seguito un esempio per il caso in cui ci sia da specificare ulteriori parametri come rw,xattr…

pcs resource create fs_mmweb Filesystem device="/dev/drbd0" directory="/var/lib/mysql" fstype="ext4" options="rw,acl,user_xattr"
  

POssiamo controllare lo stato del cluster:

crm_mon
Stack: corosync
Current DC: rp2 (version 1.1.14-2.5a6cdd1.git.fc24-5a6cdd1) - partition with quorum
Last updated: Fri Feb 10 14:27:31 2017          Last change: Fri Feb 10 14:27:27
 2017 by root via cibadmin on rp2

2 nodes and 2 resources configured

Online: [ rp2 ]
OFFLINE: [ rp1 ]

clstIP  (ocf::heartbeat:IPaddr2):	Started rp2
fs_mmweb        (ocf::heartbeat:Filesystem):    Started rp2

MariaDB

Siamo pronti per creare la risorsa Mariadb che gestisce i database.

pcs resource create srv_maria ocf:heartbeat:mysql binary="/usr/bin/mysqld_safe" config="/etc/my.cnf" datadir="/var/lib/mysql" pid="/var/lib/mysql/mysql.pid" socket="/var/lib/mysql/mysql.sock" additional_parameters="--bind-address=0.0.0.0" op start timeout=60s op stop timeout="60s" op monitor interval=20s timeout=30s

Invece se dovessimo creare la stessa risorsa su un cluster debian bisogna cambiare alcuni percorsi:

pcs resource create srv_maria ocf:heartbeat:mysql binary="/usr/bin/mysqld_safe" config="/etc/mysql/my.cnf" datadir="/var/lib/mysql" pid="/var/lib/mysql/mysql.pid" socket="/var/run/mysqld/mysqld.sock" additional_parameters="--bind-address=0.0.0.0" op start timeout=60s op stop timeout="60s" op monitor interval=20s timeout=30s

si deve specificare che su debian se controlliamo l'avvio dei servizi con systemctl, questi non sembrano avviati perchè l'output del comando dice “inactive” in realtà il demone del servizio è stato avviato.\

crm_mon
Stack: corosync
Current DC: rp2 (version 1.1.14-2.5a6cdd1.git.fc24-5a6cdd1) - partition with quorum
Last updated: Fri Feb 10 14:32:10 2017          Last change: Fri Feb 10 14:32:05
 2017 by root via cibadmin on rp2

2 nodes and 3 resources configured

Online: [ rp2 ]
OFFLINE: [ rp1 ]

clstIP  (ocf::heartbeat:IPaddr2):	Started rp2
fs_mmweb        (ocf::heartbeat:Filesystem):    Started rp2
srv_maria	(ocf::heartbeat:mysql): Started rp2

Mail Server

Ora creiamo la directory che dovrà contenere le e-mail del mio server ovvero le mailbox virtuali.
Questa directory in realtà è già esistente ma noi dovremo montarla in un'altra posizione..

mkdir /var/lib/mysql/vmail

ci portiamo nella directory originaria impostata di default

cd /var/spool/mail

copiamo l'intero contenuto nella nuova directory

cp . -R /var/lib/mysql/vmail/

anche in questo caso cambiamo la proprietà della nuova directory:

chown -R mail:mail /var/lib/mysql/vmail/

vediamo la situazione della direcotry /var/spool/mail

total 12
drwxrwxr-x.  3 root mail 4096 Feb  8 21:52 .
drwxr-xr-x. 12 root root 4096 Feb  7 19:40 ..
-rw-rw----.  1 rpc  mail    0 Feb  7 17:36 rpc

e quella di /var/lib/mysql/vmail dopo la copia

total 12
drwxr-xr-x 3 root  root  4096 Feb 10 14:43 .
drwxr-xr-x 9 mysql mysql 4096 Feb 10 14:41 ..
-rw-r----- 1 root  root     0 Feb 10 14:43 rpc

e dopo il cambio di proprietà

total 12
drwxr-xr-x 3 mail  mail  4096 Feb 10 14:43 .
drwxr-xr-x 9 mysql mysql 4096 Feb 10 14:41 ..
-rw-r----- 1 mail  mail     0 Feb 10 14:43 rpc

ma non è sufficiente quindi:

chown rpc:mail /var/lib/mysql/vmail/rpc

ora rinominare la directory originaria su ENTRAMBI I NODI

mv /var/spool/mail /var/spool/mail.orig

e creare un link simbolico alla nuova dirctory(PER IL NODO CON IL FS MONTATO)

ln -s /var/lib/mysql/vmail/ /var/spool/mail

creare una directory fittizia su /var/lib/mysql (SUL NODO PASSIVO)

mkdir /var/lib/mysql/vmail

ora creare anche qui il link simbilico (SUL NODO PASSIVO)

ln -s /var/lib/mysql/vmail/ /var/spool/mail

verificare con

ls -la
total 48
drwxr-xr-x. 12 root   root   4096 Feb 10 14:53 .
drwxr-xr-x. 22 root   root   4096 Feb  9 21:02 ..
drwxr-x--x.  2 root   abrt   4096 May 25  2016 abrt
drwx------.  2 abrt   abrt   4096 May 25  2016 abrt-upload
drwxr-xr-x.  2 root   root   4096 Feb  7 17:36 anacron
drwx------.  3 daemon daemon 4096 Feb  7 17:37 at
drwx------.  2 root   root   4096 Feb  3  2016 cron
drwxr-xr-x.  2 root   root   4096 Feb  3  2016 lpd
lrwxrwxrwx   1 root   root     21 Feb 10 14:53 mail -> /var/lib/mysql/vmail/
drwxrwxr-x.  3 root   mail   4096 Feb  8 21:52 mail.orig
drwxr-xr-x.  2 root   root   4096 Feb  5  2016 plymouth
drwxr-xr-x. 16 root   root   4096 Feb  7 19:40 postfix
drwxr-xr-x.  2 apache apache 4096 Jul 29  2016 zoneminder-upload

In questo modo il nodo che gestirà la posta utilizzerà la directory di default che in realtà è un link alla nuova
Quindi creiamo in fine la nostra risorsa postfix che smisterà nel modo corretto la posta.

pcs resource create srv_postfix ocf:heartbeat:postfix op monitor timeout="20s" interval="60s"

Verifichiamo:

crm_mon
Stack: corosync
Current DC: rp2 (version 1.1.14-2.5a6cdd1.git.fc24-5a6cdd1) - partition with quorum
Last updated: Fri Feb 10 14:57:12 2017          Last change: Fri Feb 10 14:56:03
 2017 by root via cibadmin on rp2

2 nodes and 4 resources configured

Online: [ rp2 ]
OFFLINE: [ rp1 ]

clstIP  (ocf::heartbeat:IPaddr2):	Started rp2
fs_mmweb        (ocf::heartbeat:Filesystem):    Started rp2
srv_maria	(ocf::heartbeat:mysql): Started rp2
srv_postfix     (ocf::heartbeat:postfix):	Started rp2

Web Server

in modo analogo al mail server, dobbiamo cambiare la posizione alla directory di default per il web (/var/www) che normalmente ha questi diritti:

ls -la /var/www
total 16
drwxr-xr-x.  4 root root 4096 Feb  7 18:06 .
drwxr-xr-x. 22 root root 4096 Feb  9 21:02 ..
drwxr-xr-x.  2 root root 4096 Feb  4  2016 cgi-bin
drwxr-xr-x.  2 root root 4096 Feb  4  2016 html

Quindi (SU ENTRAMBI I NODI):

mkdir /var/lib/mysql/www

poi ci portiamo nella directory originale

cd /var/www

e copiamo tutto il contenuto

cp -R . /var/lib/mysql/www/

poi rinominiamo la directory originale (SU ENTRAMBI I NODI)

cd ..
mv /var/www/ /var/web.orig/ 

perchè dovrà far posto al nuovo link simbolico (SU ENTRAMBI I NODI)

ln -s /var/lib/mysql/www/ /var/www

Bene siamo quasi pronti per creare la risorsa web-server (SU ENTRAMBI I NODI)

vi /etc/httpd/conf.d/status.conf 
<Location /server-status>
   SetHandler server-status
   Order deny,allow
   Deny from all
   Allow from 127.0.0.1
</Location>

Ora si che creiamo il servizio per pacemaker

pcs resource create web_server ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://127.0.0.1/server-status" op monitor interval=20s

Controlliamo lo stato del cluster

crm_mon
Stack: corosync
Current DC: rp2 (version 1.1.14-2.5a6cdd1.git.fc24-5a6cdd1) - partition with quorum
Last updated: Fri Feb 10 15:13:20 2017          Last change: Fri Feb 10 15:13:14
 2017 by root via cibadmin on rp2

2 nodes and 5 resources configured 

Online: [ rp2 ]
OFFLINE: [ rp1 ]

clstIP  (ocf::heartbeat:IPaddr2):	Started rp2
fs_mmweb        (ocf::heartbeat:Filesystem):    Started rp2
srv_maria	(ocf::heartbeat:mysql): Started rp2
srv_postfix     (ocf::heartbeat:postfix):	Started rp2
web_server	(ocf::heartbeat:apache):        Started rp2

samba

pcs resource create nome_risorsa systemd:smb

ordine di avvio e gruppi

a questo punto ci sarebbe da valutare l'opportunità o meno di raggruppare le risorse in gruppi e stabilire l'ordine di avvio, in quanto il filesystem deve avviarsi prima dell' IP e di mysql.
in modo analogo mariadb deve avviarsi prima del server web e di zoneminder ecc..
Nel progetto originario avevo tutti i servizi e i filesystem su un unico cluster. quindi sulla stessa unità avevo dovuto creare più partizioni per differenziare i servizi. Infatti avevo anche samba e il web su un FS diverso dalle email. Potevo avviare solo il servizio di posta e non il web e avevo raggruppato in modo differente.
Ho pensato che come sempre possiamo creare un gruppo per i servizi DB e mail insieme il servizio web invece lasciarlo libero anche se poi è vincolato al FS e dovrà sempre e comunque avviarsi solo se è attivo l'altro gruppo.
iniziamo creando il gruppo mariamail

pcs resource group add gr_mariamail fs_mmweb srv_maria srv_postfix clstIP

controlliamo con il solito crm_mon

crm_mon
Stack: corosync
Current DC: rp2 (version 1.1.14-2.5a6cdd1.git.fc24-5a6cdd1) - partition with quorum
Last updated: Fri Feb 10 15:54:01 2017          Last change: Fri Feb 10 15:53:58 2017 by root via cib
admin on rp2

2 nodes and 5 resources configured

Online: [ rp2 ]
OFFLINE: [ rp1 ]

web_server	(ocf::heartbeat:apache):        Started rp2
 Resource Group: gr_mariamail
     fs_mmweb   (ocf::heartbeat:Filesystem):    Started rp2
     srv_maria  (ocf::heartbeat:mysql): Started rp2
     srv_postfix        (ocf::heartbeat:postfix):	Started rp2
     clstIP     (ocf::heartbeat:IPaddr2):	Started rp2

Ed in fine poniamo la condizione che il server apache parta dopo il gruppo gr_mariamail

pcs constraint order gr_mariamail then web_server

che darà un messaggio simile al seguente

Adding gr_mariamail web_server (kind: Mandatory) (Options: first-action=start then-action=start)

E oltre tutto che venga avviato sullo stesso nodo in cui si trova il gruppo gr_mariamail

Virtual Host

Ovvero la realizzazione di uno spazio dati riservato in base al nome di dominio.
Ad esempio i domini da me registrati sono i seguenti:
stefanostrozzi.it
risorsalibera.org
strsoft.eu
Il mio server deve ospirare tutti e tre i domini facendo in modo però che se scrivo nella barra dell'indirizzo del browser il nome del sito deve restituirmi una pagina differente per ciascuno.
Per fare questo si utilizzano i virtualhost.
Innanzi tutto creiamo una directory per ciascuno (ESEGUIRE SOLO SUL NODO CHE HA LE RISORSE WEB):

mkdir /var/www/risorsalibera.org
mkdir /var/www/strsoft.eu
mkdir /var/www/stefanostrozzi.it

per ora creo nelle prime due solo il file index.html con il nome del sito senza fare altro.(SUL NODO CON RISORSA WEB)
Poi metterò in /etc/httpd/conf.d/ il relativo file che possiamo vederequi di seguito (SU CIASCUN NODO)

vi /etc/httpd/conf.d/risorsalibera.conf
risorsalibera.conf
<VirtualHost *:80>
    DocumentRoot "/var/www/risorsalibera.org"
    ServerName www.risorsalibera.org
    ServerAlias risorsalibera.org
        <Directory /var/www/risorsalibera.org>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride none
                Order allow,deny
                allow from all
        </Directory>
 
    # Other directives here
</VirtualHost>

Creiamo il file index anche per il secondo vhost (SOLO SUL NODO ATTIVO)

vi /etc/httpd/conf.d/strsoft.conf

Creiamo il file di configurazione (SU ENTRAMBI I NODI)

strsoft.conf
<VirtualHost *:80>
    DocumentRoot "/var/www/risorsalibera.org"
    ServerName www.risorsalibera.org
    ServerAlias risorsalibera.org
        <Directory /var/www/risorsalibera.org>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride none
                Order allow,deny
                allow from all
        </Directory>
 
    # Other directives here
</VirtualHost>
progetti/server-casa.txt · Ultima modifica: 2023/04/17 14:25 (modifica esterna)