Come eseguire le operazioni preliminari in un server CentOS 7

Che si tratti di una macchina virtuale o di una macchina fisica, ogni volta che mi capita di installare un nuovo server, terminata l'installazione dal DVD o dall'immagine ISO, mi ritrovo sempre di fronte allo stesso problema: preparare l'ambiente di base per poter successivamente lavorare su un server CenttOS 7 in modo agevole e senza interruzioni per via della mancanza di questo o quel package.

Ho cercato e trovato un modo semplice per ovviare a questo, predisponendo un task che mi permettesse di fare tutte le attività preliminari per portare il sistema ad un livello operativo tale che mi permettesse di focalizzarmi sull'obbiettivo finale. Eliminando così tutte quelle distrazioni che qua e là interrompono le attività e distolgono l'attenzione.

Ne è venuta fuori una procedura di installazione semplice ed efficace, che ho deciso di condividere in questo post, affinché sia di aiuto a tutti coloro che, come me, preferiscono avere sempre a portata di mano la cassetta degli attrezzi da dove prendere lo strumento giusto senza perdere tempo a cercarlo e senza neanche distogliere lo sguardo da ciò che si sta facendo.

Il Contesto generale

Questa breve guida è riferita alla installazione di un server CentOS 7, ma può essere utile, con qualche ovvia differenza, anche per un server Debian (e suoi derivati). Questo soltanto perché mi trovo più spesso a contatto con sistemi basati su CentOS, quindi non voglio assolutamente qui entrare nella discussione di quale sia il server o il sistema operativo migliore.

Ciò che credo sia importante per lo scopo di questo post, è mettere in fila tutte le operazioni preliminari che ci renderanno il lavoro più semplice.

Anche se non credo sia necessario, va qui ricordato che tutte le operazioni descritte qui di seguito sono eseguite dalla console di sistema, o da remoto tramite una connessione ssh. Altrettanto ovvio che tutti i comandi dovranno essere eseguiti con i privilegi di root, a meno che non sia specificato diversamente.

Questi gli argomenti trattati in questo articolo:

Definisco un mio 'prompt' personalizzato

Il prompt linux per il terminale non è solo il segnale che si può lanciare un comando; dovrebbe anche essere uno strumento utile a fornire quante più informazioni utili possibili a colpo d'occhio.

Quindi, faccio in modo che in quel piccolo brandello di testo, ci siano condensate le seguenti informazioni:

  1. Il login name: ossia lo username che ho utilizzato per il login;
  2. Il nome dell'host sul quale mi trovo: utilissimo se ho molte connessioni contemporanee dal mio client su diverse macchine.;
  3. La directory corrente: per capire "al-volo" in quale cartella mi trovo;
  4. Il numero di sequenza del prossimo comando;
  5. Il Colore del testo del prompt stesso: utilizzando colori diversi per distinguere l'account di root dagli altri account non privilegiati.

Definisco quindi il mio prompt con il comando export PS1='\[\e[31;1m\]\u@\[\e[31;1m\]\h:\W[\#]# \[\e[0m\]'.

# export PS1='\[\e[31;1m\]\u@\[\e[31;1m\]\h:\W[\#]# \[\e[0m\]'
root@centauro:~[7]#

Ovviamente lo aggiungo al file ~/.bashrc in modo che venga impostato automaticamente ad ogni nuovo login.

Assegno il nome host (Hostname)

Con le recenti distribuzioni Linux assegnare un nome host (hostname) al sistema è la cosa più semplice che si possa immaginare. Il comando hostnamectl è un eccellente tool per fare tutte le operazioni che servono sul nome host.

Invocato senza argomenti, ritorna molte utili informazioni sul sistema:

# hostnamectl
Static hostname: centauro
Icon name: computer-vm
Chassis: vm
Machine ID: b0adf2474c9302448393d03cf097f985
Boot ID: 007b4148734b404ca9821b307661318d
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-957.12.2.el7.x86_64
Architecture: x86-64

Questo comando può modificare alcuni parametri di setup "profondi" del sistema, ma per lo scopo di questo articolo, prenderò solo in considerazione la possibilità di cambiare il nome host del mio server.

Per cambiare/assegnare un nome al host utilizzare il comando hostnamectl set-hostname [NOMEHOST], dove "NOMEHOST è il nome che voglio assegnare al mio server, che deve rispettare le specifiche che puoi trovare a questo link (in inglese), oppure sfogliando le man pages: man 7 hostname (sempre in inglese).

Disabilito il Desktop Manager

Quando si lavora con i server, solitamente è cosa buona e giusta evitare di utilizzare il linux desktop manager; anzi, dovrebbe essere del tutto disattivato, se non addirittuta rimosso. Questo, non tanto per convinzioni da 'purista' o da fondamentalista Unix, quanto per il fatto che il Desktop manager (che sia Gnome, Mate, LXCE, o qualsiasi altro) di fatto rubano consistenti risorse di sistema. 

Quindi, per prima cosa, disabilito il desktop manager con il comando systemctl set-default multi-user.target, in modo che al prossimo avvio del sistema esso non verrà avviato.

# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.

Se poi per qualsiasi motivo avrò bisogno di riattivarlo, non mi resterà altro da fare che lanciare il comando systemctl set-default graphical.target.

# systemctl set-default graphical.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/graphical.target.

Ed avrò ripristinato all'occorrenza il Desktop Manager, al prossimo avvio del sistema.

 

Imposto il Repository dei pacchetti da CD/DVD (opzionale)

Non sempre inserire il DVD nella macchina significa poterlo utilizzare subito; specialmente se è stata eseguite una installazione minimale del sistema operativo. Perciò, vale la pena preparare il sistema affinché montare un CD-ROM o un DVD sia una di quelle operazioni che non porti via neanche il tempo necessario a pensare a come fare.

Passo 1 - Preparo il mount point in una directory 'storicamente' nota: /mnt/cdrom.

# mkdir /mnt/cdrom

Passo 2 - Aggiungo la seguente riga nel file : /etc/fstab.

/dev/sr0 /mnt/cdrom udf,iso9660 noauto,utf8 0 0

Ed il gioco è fatto.

Da questo momento in poi, posso montare il CD/DVD con il semplice comando: mount /mnt/cdrom,  oppure  : mount /dev/sr0.

# mount /mnt/cdrom
mount: /dev/sr0 is write-protected, mounting read-only

Che è proprio ciò che volevo ottenere.

Impostazioni preliminari di 'yum'

Che cosa è yum? Ebbene; yum, come recita la man page (comando: man yum) è il Yellowdog Updater Modified, in altre parole, è il gestore dei pacchetti della distribuzione GNU Linux CentOS. Lo strumento con il quale si possono installare, rimuovere ed aggiornare tutti i pacchetti software di questa distribuzione Linux.

Visto e considerato che ho già predisposto tutto il necessario per montare il CD/DVD, ora posso predisporre 'yum' a considerare questo come uno dei tanti repository di pacchetti.

Il punto è che ho un server appena installato, e magari posso avere ancora problemi nella configurazione di rete che non mi consente in questo momento di accedere ad internet. Quindi voglio che sia possibile poter installare fin da subito qualche utile pacchetto prima di procedere alla configurazione della rete.

Per istruire yum a considerare il CD/DVD come repository del software devo modificare il file /etc/yum.repos.d/CentOS-Media.repo, in modo che il suo contenuto sia simile a quello mostrato qui sotto.

baseurl=file:///mnt/cdrom/
     file:///media/CentOS/
     file:///media/cdrom/
     file:///media/cdrecorder/

Notare che ho evidenziato in rosso la parte che ho aggiunto io al file originale. Infatti CentOS assume che il CD/DVD sia automaticamente montato in almeno una delle directory standard del sistema; cosa che non possiamo dare per scontata, se abbiamo fatto, come già accennato, una installazione "minimale" del sistema.

Per poter sfruttare qualche utile funzionalità aggiuntiva di yum, a questo punto conviene installare subito il pacchetto software appropriato: yum-utils, con il seguente comando:

 yum --disablerepo=\* --enablerepo=c7-media install -y yum-utils 

Il quale installa il pacchetto yum-utils dal CD/DVD; in quanto, all'interno del comando c'è la direttiva che disabilita tutti i repository abilitando esclusivamente quello che fa riferimento al CD/DVD.

... E questo è il sintetico risultato, alquanto corposo in orgine, che si ottiene lanciando questo comando:

# yum --disablerepo=\* --enablerepo=c7-media install -y yum-utils
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* c7-media:
Resolving Dependencies

[Truncated output, too long...]

Transaction Summary
============================================================================================================================================
Install 1 Package (+2 Dependent packages)

Total download size: 607 k
Installed size: 2.8 M
Downloading packages:
--------------------------------------------------------------------------------------------------------------------------------------------
Total 3.5 MB/s | 607 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : python-chardet-2.2.1-1.el7_1.noarch 1/3
Installing : python-kitchen-1.1.1-5.el7.noarch 2/3
Installing : yum-utils-1.1.31-34.el7.noarch 3/3
Verifying : python-kitchen-1.1.1-5.el7.noarch 1/3
Verifying : yum-utils-1.1.31-34.el7.noarch 2/3
Verifying : python-chardet-2.2.1-1.el7_1.noarch 3/3

Installed:
yum-utils.noarch 0:1.1.31-34.el7

Dependency Installed:
python-chardet.noarch 0:2.2.1-1.el7_1 python-kitchen.noarch 0:1.1.1-5.el7

Complete!

 

L'installazione di yum-utils,  rende finalmente disponibile alcune utility di yum come ad esempio il comando yum-config-manager, tramite il quale è possibile fare operazioni più complesse ed estese sui repository.

A tale proposito, utilizzeremo subito questo comando, proprio per abilitare il repository locale (quello relativo al CD/DVD), disabilitando temporaneamente tutti gli altri (quelli che risiedono in internet).

Ma prima di tutto vediamo quanti e quali repository sono al momento disponibili:

# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tugraz.at
* c7-media:
repo id repo name status
base/7/x86_64 CentOS-7 - Base 10,019
c7-media CentOS-7 - Media 3,723
repolist: 13,742

Bene! Sembra proprio che per il momento gli unici repository abilitati siano base e c7-media.

Per iniziare, disabilito tutti i repository con il comando yum-config-manager --disable \*.

# yum-config-manager --disable \*
Loaded plugins: fastestmirror
=========================================================== repo: C7.0.1406-base ===========================================================
[C7.0.1406-base]
async = True
bandwidth = 0
base_persistdir = /var/lib/yum/repos/x86_64/7
baseurl = http://vault.centos.org/7.0.1406/os/x86_64/
cache = 0
cachedir = /var/cache/yum/x86_64/7/C7.0.1406-base
check_config_file_age = True
compare_providers_priority = 80
cost = 1000
deltarpm_metadata_percentage = 100
deltarpm_percentage =
enabled = False
enablegroups = True
exclude =
failovermethod = priority
ftp_disable_epsv = False
gpgcadir = /var/lib/yum/repos/x86_64/7/C7.0.1406-base/gpgcadir
gpgcakey =
gpgcheck = True
gpgdir = /var/lib/yum/repos/x86_64/7/C7.0.1406-base/gpgdir
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
hdrdir = /var/cache/yum/x86_64/7/C7.0.1406-base/headers
http_caching = all
includepkgs =
ip_resolve =
keepalive = True
keepcache = False
mddownloadpolicy = sqlite
mdpolicy = group:small
mediaid =
metadata_expire = 21600
metadata_expire_filter = read-only:present
metalink =
minrate = 0
mirrorlist =
mirrorlist_expire = 86400
name = CentOS-7.0.1406 - Base
old_base_cache_dir =
password =
persistdir = /var/lib/yum/repos/x86_64/7/C7.0.1406-base
pkgdir = /var/cache/yum/x86_64/7/C7.0.1406-base/packages
proxy = False
proxy_dict =
proxy_password =
proxy_username =
repo_gpgcheck = False
retries = 10
skip_if_unavailable = False
ssl_check_cert_permissions = True
sslcacert =
sslclientcert =
sslclientkey =
sslverify = True
throttle = 0
timeout = 30.0
ui_id = C7.0.1406-base/x86_64
ui_repoid_vars = releasever,
   basearch
username =
..... [Listato omesso poiché molto lungo]...


... Ed abilito unicamente il repository c7-media con il comando yum-config-manager --enable c7-media.

# yum-config-manager --enable c7-media
Loaded plugins: fastestmirror
============================================================== repo: c7-media ==============================================================
[c7-media]
async = True
bandwidth = 0
base_persistdir = /var/lib/yum/repos/x86_64/7
baseurl = file:///mnt/cdrom/,
   file:///media/CentOS/,
   file:///media/cdrom/,
   file:///media/cdrecorder/
cache = 0
cachedir = /var/cache/yum/x86_64/7/c7-media
check_config_file_age = True
compare_providers_priority = 80
cost = 1000
deltarpm_metadata_percentage = 100
deltarpm_percentage =
enabled = 1
enablegroups = True
exclude =
failovermethod = priority
ftp_disable_epsv = False
gpgcadir = /var/lib/yum/repos/x86_64/7/c7-media/gpgcadir
gpgcakey =
gpgcheck = True
gpgdir = /var/lib/yum/repos/x86_64/7/c7-media/gpgdir
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
hdrdir = /var/cache/yum/x86_64/7/c7-media/headers
http_caching = all
includepkgs =
ip_resolve =
keepalive = True
keepcache = False
mddownloadpolicy = sqlite
mdpolicy = group:small
mediaid =
metadata_expire = 21600
metadata_expire_filter = read-only:present
metalink =
minrate = 0
mirrorlist =
mirrorlist_expire = 86400
name = CentOS-7 - Media
old_base_cache_dir =
password =
persistdir = /var/lib/yum/repos/x86_64/7/c7-media
pkgdir = /var/cache/yum/x86_64/7/c7-media/packages
proxy = False
proxy_dict =
proxy_password =
proxy_username =
repo_gpgcheck = False
retries = 10
skip_if_unavailable = False
ssl_check_cert_permissions = True
sslcacert =
sslclientcert =
sslclientkey =
sslverify = True
throttle = 0
timeout = 30.0
ui_id = c7-media
ui_repoid_vars = releasever,
   basearch
username =

Devo però ricordare che, quando avrò terminato, devo ripristinare i repository necessari; almeno quello del repository base per permettere gli aggiornamenti di sicurezza.

Considerazione su 'yum' per server senza accesso ad internet

Vale qui la pena di considerare alcuni aspetti che ruotano intorno all'aggiornamento del software installato nel sistema.

Il più delle volte ci si trova a lavorare con server che possono raggiungere i vari repository che si trovano in internet (dove effettivamente risiedono gli ultimi aggiornamenti software più recenti).

Tuttavia, a me personalmente capita spesso anche di dover lavorare con sistemi che, una volta installati, non possono più accedere ad internet per motivi di sicurezza. Questi sistemi sono condannati a restare isolati nella propria intranet per tutta la loro esistenza.

Ciò comporta che gli aggiornamenti possono essere fatti esclusivamente tramite CD/DVD.

È proprio per questo motivo che disabilito tutti i repository, lasciano esclusivamente quello relativo al CD/DVD così che possono essere aggiornati tramite questo device.

Abilito le funzionalità grafiche da terminale

Anche se ho appena disabilitato il Desktop Manager, questo non vuole assolutamente significare che non potrei aver bisogno in futuro di utilizzare da remoto qualche applicazione con funzionalità grafiche sul server, sia con un client GNU Linux che con un client Windows.

Abilitando infatti questa funzionalità sul server, mi permetterà in futuro di utilizzare qualsiasi applicazione grafica sul server, come ad esempio xclock oppure, perché no, Mozilla Firefox o addirittura Gimp.

Come fare, è molto semplice; è sufficiente installare i pacchetti appropriati con il comando:

# yum install -y xorg-x11-server-Xorg xorg-x11-xauth xorg-x11-apps

Del quale questo è l'output completo

# yum install -y xorg-x11-server-Xorg xorg-x11-xauth xorg-x11-apps
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.prometeus.net
* epel: www.mirrorservice.org
Resolving Dependencies
--> Running transaction check

[Truncated output, too long...]

------------------------------------------------------------------------------------------------------------------------------
Total 1.5 MB/s | 7.5 MB 00:00:05
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : libXau-1.0.8-2.1.el7.x86_64 1/40
Installing : libxcb-1.13-1.el7.x86_64 2/40
Installing : libfontenc-1.1.3-3.el7.x86_64 3/40
Installing : libxshmfence-1.2-1.el7.x86_64 4/40

# ..... [Listato omesso poiché molto lungo]...

Installed:
xorg-x11-apps.x86_64 0:7.7-7.el7 xorg-x11-server-Xorg.x86_64 0:1.20.1-3.el7 xorg-x11-xauth.x86_64 1:1.0.9-1.el7

>Dependency Installed:
dejavu-fonts-common.noarch 0:2.33-6.el7 dejavu-sans-fonts.noarch 0:2.33-6.el7
fontconfig.x86_64 0:2.13.0-4.3.el7 fontpackages-filesystem.noarch 0:1.44-8.el7
libICE.x86_64 0:1.0.9-9.el7 libSM.x86_64 0:1.2.2-2.el7
libX11.x86_64 0:1.6.5-2.el7 libX11-common.noarch 0:1.6.5-2.el7
libXau.x86_64 0:1.0.8-2.1.el7 libXaw.x86_64 0:1.0.13-4.el7
libXcursor.x86_64 0:1.1.15-1.el7 libXdamage.x86_64 0:1.1.4-4.1.el7
libXdmcp.x86_64 0:1.1.2-6.el7 libXext.x86_64 0:1.3.3-3.el7
libXfixes.x86_64 0:5.0.3-1.el7 libXfont2.x86_64 0:2.0.3-1.el7
libXft.x86_64 0:2.3.2-2.el7 libXmu.x86_64 0:1.1.2-2.el7
libXpm.x86_64 0:3.5.12-1.el7 libXrender.x86_64 0:0.9.10-1.el7
libXt.x86_64 0:1.1.5-3.el7 libXxf86vm.x86_64 0:1.1.4-1.el7
libepoxy.x86_64 0:1.5.2-1.el7 libfontenc.x86_64 0:1.1.3-3.el7
libglvnd.x86_64 1:1.0.1-0.8.git5baa1e5.el7 libglvnd-glx.x86_64 1:1.0.1-0.8.git5baa1e5.el7
libwayland-server.x86_64 0:1.15.0-1.el7 libxcb.x86_64 0:1.13-1.el7
libxkbfile.x86_64 0:1.0.9-3.el7 libxshmfence.x86_64 0:1.2-1.el7
mesa-libGL.x86_64 0:18.0.5-3.el7 mesa-libgbm.x86_64 0:18.0.5-3.el7
mesa-libglapi.x86_64 0:18.0.5-3.el7 pixman.x86_64 0:0.34.0-1.el7
xkeyboard-config.noarch 0:2.24-1.el7 xorg-x11-server-common.x86_64 0:1.20.1-3.el7
xorg-x11-xkb-utils.x86_64 0:7.7-14.el7

Complete!
#

Da notare il gran numero di pacchetti dipendenti che vengono installati; tra i quali, oltre alle opportune librerie, anche alcuni fonts e Keyboard Mapping.

Con riguardo ai pacchetti installati, da sottolineare che è stato installato il pacchetto xorg-x11-xauth il quale è deputato al controllo delle autorizzazioni dell'utente nella connessione con il X Server.

Aggiungo qualche pacchetto di uso comune

Prima di poter proseguire, installo alcuni pacchetti che mi saranno utili per poter procedere ai passi successivi.

Nella fattispecie, aggiuncerò i seguenti pacchetti, dal repository CD/DVD, utilizzando il solito comando yum.

  • bash-completion
  • net-tools
  • yum-utils
  • vim-enhanced
  • nmap

Questo è più o meno l'esito del comando sul mio terminale:

# yum install -y bash-completion net-tools yum-utils vim-enhanced nmap wget curl net-snmp
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.prometeus.net
 * c7-media:
c7-media                                                                                                             | 3.6 kB  00:00:00     
Package 1:bash-completion-2.1-6.el7.noarch already installed and latest version
Package net-tools-2.0-0.24.20131004git.el7.x86_64 already installed and latest version
Package curl-7.29.0-51.el7.x86_64 already installed and latest version
Resolving Dependencies

[Truncated output, too long...]

Transaction Summary
============================================================================================================================================
Install  4 Packages (+36 Dependent packages)
Upgrade  1 Package

Total download size: 25 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/41): gpm-libs-1.20.7-5.el7.x86_64.rpm                                                                             |  32 kB  00:00:01     
(2/41): libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm                                                                    | 247 kB  00:00:01     
(3/41): net-snmp-libs-5.7.2-37.el7.x86_64.rpm                                                                        | 749 kB  00:00:00     
(4/41): lm_sensors-libs-3.4.0-6.20160601gitf9185e5.el7.x86_64.rpm                                                    |  42 kB  00:00:01     
(5/41): net-snmp-5.7.2-37.el7.x86_64.rpm                                                                             | 331 kB  00:00:01     
(6/41): nmap-ncat-6.40-16.el7.x86_64.rpm                                                                             | 206 kB  00:00:00     
(7/41): perl-Data-Dumper-2.145-3.el7.x86_64.rpm                                                                      |  47 kB  00:00:00   
 
# ..... [Listato omesso poiché molto lungo]...

(39/41): yum-utils-1.1.31-50.el7.noarch.rpm                                                                          | 121 kB  00:00:00     
(40/41): perl-5.16.3-293.el7.x86_64.rpm                                                                              | 8.0 MB  00:00:06     
(41/41): vim-common-7.4.160-5.el7.x86_64.rpm                                                                         | 5.9 MB  00:00:04     
--------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                       2.4 MB/s |  25 MB  00:00:10     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : lm_sensors-libs-3.4.0-6.20160601gitf9185e5.el7.x86_64                                                                   1/42
  Installing : 1:net-snmp-libs-5.7.2-37.el7.x86_64                                                                                     2/42
  Installing : 1:perl-parent-0.225-244.el7.noarch                                                                                      3/42
  Installing : perl-HTTP-Tiny-0.033-3.el7.noarch                                                                                       4/42
  Installing : perl-podlators-2.5.1-3.el7.noarch                                                                                       5/42
  Installing : perl-Pod-Perldoc-3.20-4.el7.noarch                                                                                      6/42
  Installing : 1:perl-Pod-Escapes-1.04-293.el7.noarch                                                                                  7/42

# ..... [Listato omesso poiché molto lungo]...

Installed:
  net-snmp.x86_64 1:5.7.2-37.el7      nmap.x86_64 2:6.40-16.el7      vim-enhanced.x86_64 2:7.4.160-5.el7      wget.x86_64 0:1.14-18.el7     

Dependency Installed:
  gpm-libs.x86_64 0:1.20.7-5.el7                                             libxml2-python.x86_64 0:2.9.1-6.el7_2.3                        
  lm_sensors-libs.x86_64 0:3.4.0-6.20160601gitf9185e5.el7                    net-snmp-agent-libs.x86_64 1:5.7.2-37.el7                      
  net-snmp-libs.x86_64 1:5.7.2-37.el7                                        nmap-ncat.x86_64 2:6.40-16.el7                                 
  perl.x86_64 4:5.16.3-293.el7                                               perl-Carp.noarch 0:1.26-244.el7                                
  perl-Data-Dumper.x86_64 0:2.145-3.el7                                      perl-Encode.x86_64 0:2.51-7.el7                                
  perl-Exporter.noarch 0:5.68-3.el7                                          perl-File-Path.noarch 0:2.09-2.el7                             
  perl-File-Temp.noarch 0:0.23.01-3.el7                                      perl-Filter.x86_64 0:1.49-3.el7                                
  perl-Getopt-Long.noarch 0:2.40-3.el7                                       perl-HTTP-Tiny.noarch 0:0.033-3.el7                            
  perl-PathTools.x86_64 0:3.40-5.el7                                         perl-Pod-Escapes.noarch 1:1.04-293.el7                         
  perl-Pod-Perldoc.noarch 0:3.20-4.el7                                       perl-Pod-Simple.noarch 1:3.28-4.el7                            
  perl-Pod-Usage.noarch 0:1.63-3.el7                                         perl-Scalar-List-Utils.x86_64 0:1.27-248.el7                   
  perl-Socket.x86_64 0:2.010-4.el7                                           perl-Storable.x86_64 0:2.45-3.el7                              
  perl-Text-ParseWords.noarch 0:3.29-4.el7                                   perl-Time-HiRes.x86_64 4:1.9725-3.el7                          
  perl-Time-Local.noarch 0:1.2300-2.el7                                      perl-constant.noarch 0:1.27-2.el7                              
  perl-libs.x86_64 4:5.16.3-293.el7                                          perl-macros.x86_64 4:5.16.3-293.el7                            
  perl-parent.noarch 1:0.225-244.el7                                         perl-podlators.noarch 0:2.5.1-3.el7                            
  perl-threads.x86_64 0:1.87-4.el7                                           perl-threads-shared.x86_64 0:1.43-6.el7                        
  vim-common.x86_64 2:7.4.160-5.el7                                          vim-filesystem.x86_64 2:7.4.160-5.el7                          

Updated:
  yum-utils.noarch 0:1.1.31-50.el7                                                                                                          

Complete!

A questo punto credo di avere tutto il materiale di base necessario.

Macchina Virtuale ?

Se sto installando il mio sistema operativo come Macchina Virtuale (VM) all'interno di un qualsiasi Hypervisor, che si tratti di VmWare™, Virtualbox o meglio ancora di Proxmox, allora avrò bisogno di un agent che permetta alla mia VM di poter essere gestita dal Hypervisor.

Ma gli Hypervisor, non sono mica tutti uguali! Quindi anche gli agent per le VM saranno diversi a seconda dei casi.

Ho voluto qui considerare solo alcuni dei casi di Hypervisor che mi è capitato di approfondire più di altri, e che comunque i pacchetti software relativi agli agent siano già disponibili all'interno della ISO dei sistemi operativi CentOS e Debian.

  • Hypervisor basati su tecnologia VMware™ (ESXi, Workstation, playes, ecc.)
  • Hypervisor basati su tecnologia Qemu (KVM, Libvirt, Proxmox VE, ecc.)

Hypervisor VMware™

Se la mia Macchina Virtuale è un Guest di un Hypervisor VMware™, allora all'interno della mia VM installo il pacchetto open-vm-tools;

# yum install -y open-vm-tools

... poi abilito ed avvio manualmente il servizio

# systemctl enable vmtoolsd
# systemctl restart vmtoolsd

Hypervisor Qemu

Se la mia Macchina Virtuale è un Guest di un Hypervisor Qemu allora all'interno della mia VM installo il pacchetto qemu-guest-agent;

# yum install -y qemu-guest-agent

... poi abilito ed avvio manualmente il servizio

# systemctl enable qemu-guest-agent
# systemctl restart qemu-guest-agent

Altre tenologie di Hypervisor

Nel caso di Hypervisor diversi da quelli elencati qui sopra, devo necessariamente fare affidamento alla documentazione fornita dai vari costruttori sui rispettivi siti.

Se tutto è andato secondo i piani, ora dovrebbe essere possibile gestire shutdown ed altre operazioni di macchina dal Hypervisor.

Anche se in alcuni casi potrebbe essere necessario fare uno shutdown della VM ed un Power-On dalla GUI del Hypervisor, personalmente suggerirei, almeno in questa fase, di avviare 'a mano' (come mostrato nei comandi più sopra) solamente il servizio interessato; poi magari faccio un riavvio definitivo della VM quando avrò completato tutte le operazioni preliminari.

A questo punto, magicamente, dovrebbe essere possibile gestire la mia VM dalla GUI del Hyervisor, oltre, ovviamente a poter  ottenere alcune cruciali informazioni sullo stato, mentre la VM è in esecuzione.

Configuro la rete

Ci sono vari modi per configurare la rete,nel modo desiderato, di un server CentOS 7; dipende principalmente da cosa si vuole ottenere, ma anche dai gisti personali:

  • Configurazione con NetworkManager;
  • Configurazione manuale.

Configurazione con NetworkManager

Il sistema preferito da molti per configurare la connessione di rete è sicuramente il setup che si può fare tramite le app del Desktop Manager. Ma abbiamo già detto che non avremo nessun aiuto dal Desktop Manager, semplicemente perché non è installato. Quindi?

Ebbene, un sistema Linux, anche se "minimale", contiene almeno gli strumenti minimi indispensabili per le operazioni di base e tra questi c'è sicuramente NetworkManager, e quindi il tool nmcli che permette di agire sulla configurazione tramite la command line.

NetworkManager è un tool che può fare più o mento tutto con le connessioni di rete; sia che si tratti di connessioni ethernet, che WiFi, che VPN. Ma a me al momento interessa solo configurare la mia connessione Ethernet in modo che possa connettere il mio server almeno alla rete Intranet.

Per interagire con NetworkManager è disponibile una interfaccia a linea di comando nmcli, tramite la quale si può fare qualsiasi cosa con le connessioni di rete.

Voglio innanzi tutto sapere se è in esecuzione con il comando systemctl status NetworkManager.

# systemctl status NetworkManager
● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since lun 2019-06-10 20:37:50 CEST; 1min 23s ago
Docs: man:NetworkManager(8)
Main PID: 4524 (NetworkManager)
CGroup: /system.slice/NetworkManager.service
├─4524 /usr/sbin/NetworkManager --no-daemon
└─4543 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eth0.pid -lf /var/lib/NetworkManager/dhclien...

giu 10 20:37:56 centauro NetworkManager[4524]: [1560191876.2586] device (eth0): state change: ip-config -> ip-check (reaso...ssume')
giu 10 20:37:56 centauro NetworkManager[4524]: [1560191876.2604] device (eth0): state change: ip-check -> secondaries (rea...ssume')
giu 10 20:37:56 centauro NetworkManager[4524]: [1560191876.2609] device (eth0): state change: secondaries -> activated (re...ssume')
giu 10 20:37:56 centauro NetworkManager[4524]: [1560191876.2615] manager: NetworkManager state is now CONNECTED_LOCAL
giu 10 20:37:56 centauro dhclient[4543]: bound to 192.168.0.241 -- renewal in 2927 seconds.
giu 10 20:37:56 centauro NetworkManager[4524]: [1560191876.2974] manager: NetworkManager state is now CONNECTED_SITE
giu 10 20:37:56 centauro NetworkManager[4524]: [1560191876.2977] policy: set 'eth0' (eth0) as default for IPv4 routing and DNS
giu 10 20:37:56 centauro NetworkManager[4524]: [1560191876.3136] device (eth0): Activation: successful, device activated.
giu 10 20:37:56 centauro NetworkManager[4524]: [1560191876.3151] manager: NetworkManager state is now CONNECTED_GLOBAL
giu 10 20:37:56 centauro NetworkManager[4524]: [1560191876.3163] manager: startup complete
Hint: Some lines were ellipsized, use -l to show in full.

OK, questa è la conferma che è già in esecuzione!

Ovviamente, se così non fosse, utilizzo un paio di comandi per attivarlo subito:

# systemctl start NetworkManager

... E fare in modo che si avii ad ogni Boot del sistema.

# systemctl enable NetworkManager
Created symlink from /etc/systemd/system/dbus-org.freedesktop.NetworkManager.service to /usr/lib/systemd/system/NetworkManager.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/NetworkManager.service to /usr/lib/systemd/system/NetworkManager.service.
Created symlink from /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service to /usr/lib/systemd/system/NetworkManager-dispatcher.service.
Created symlink from /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service to /usr/lib/systemd/system/NetworkManager-wait-online.service.

Fin qui, tutto semplice.

Ora bisogna configurare la connessione Ethernet. Uso il comando ifconfig per vedere (installato con il pacchetto net-tools) per vedere lo stato attuale:

# ifconfig
eth0: flags=4163<up,broadcast,running,multicast> mtu 1500
inet 192.168.0.241 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::6093:33ff:fe22:c151 prefixlen 64 scopeid 0x20
ether 62:93:33:22:c1:51 txqueuelen 1000 (Ethernet)
RX packets 37353 bytes 36903755 (35.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16687 bytes 1504809 (1.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<up,loopback,running> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Da questo ho la conferma che durante l'installazione del sistema è stata utilizzata l'interfaccia ethernet eth0, e che questa è configurata con in modo di acquisire un indirizzo IP della rete da un server DHCP.

Questo può anche essere determinato facilmente con il comando : grep -i BOOTPROTO /etc/sysconfig/network-scripts/ifcfg-eth0.

# grep BOOTPROTO /etc/sysconfig/network-scripts/ifcfg-eth0 
BOOTPROTO="dhcp"

Oppure utilizzo il comando: nmcli nmcli connection show eth0, che mi ritorna tutto (ma proprio tutti) i parametri dell'interfaccia, oltre ad altre preziose informazioni sull'utilizzo.

Devo ora impostare alcuni valori delle mia interfaccia di rete eth0:

  • La connessione automatica alla rete
  • Un indirizzo IP statico, alla connessione ethernet;
  • L'indirizzo del DNS per la risoluzione di nomi;
  • La rotta predefinita (default route).

Per fare questo, utilizzo i seguenti comandi nmcli:

# nmcli connection modify eth0 connection.autoconnect yes
# nmcli connection modify eth0 ipv4.addresses 192.168.0.242
# nmcli connection modify eth0 ipv4.dns "192.168.0.253 8.8.8.8 8.8.4.4"

Infine attivo i parametri appena definiti per il profilo di questa connessione:

# nmcli con down eth0 ; nmcli con up eth0
Connection 'eth0' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

 

Configurazione Manuale della rete

Per gli amanti della command line e del editing manuale di file di configurazione, ai quali appartengo, la cosa è se possibile anche più semplice e chiara.

Il tutto si traduce in pochi semplici passaggi

  • Disabilitazione del NetworkManager, che potrebbe interferire con le nostre operazioni
  • Impostazione del file di configurazione dell'interfaccia ethernet
  • Riavvio del networking del sistema

Passo 1 - NetworkManager

Il NetworkManager va disabilitato all'avvio e fermato, prima di editare qualsiasi file di configurazione. Essendo esso in esecuzione ed agendo esso stesso sul file che dovremo modificare, ciò potrebbe causare un po' di confusione oltre che risultati imprefedibili.

Per fermare e disabilitare il processo NetworkManager utilizzo i due semplici comandi riportati qui sotto

# systemctl stop NetworkManager
# systemctl disable NetworkManager

 

Passo 2 - File di configurazione

Preparo il file di configurazione dell'interfaccia ethernet editando il file /etc/sysconfig/network-scripts/ifcfg-eth0 come segue:

TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="192.168.1.33"
PREFIX="24"
GATEWAY="192.168.1.254"
DNS1=192.168.1.253
DNS2=8.8.8.
DOMAIN="example.com"

Ovviamente va tenuto conto del nome dell'interfaccia ethernet, che nel caso dell'esempio è eth0, e dei vari indirizzi IP che dipendono strettamente dall'ambiente in cui si sta operando.

 

Passo 3 - Riavvio (stop/start) del network del sistema

Per applicare le modifiche appena fatte, riavviare il networking del sistema come segue:

# systemctl stop network.service
# systemctl stop network.service

... Et voilà

A questo punto la rete dovrebbe essere, come per incanto, up and running esattamente come volevamo.

Notare che le specifiche di DNS e del Domain Name (nome del dominio) sono già incluse nel file di configurazione, quindi non sarà necessario procedere con la configurazione del file /etc/resolv.conf.

Aggiungo repository 'Epel'

Oserei definirlo "Quel magico repository di cui non si può fare a meno".

EPEL (Extra Packages for Enterprise Linux) è un repository open source gratuito, alimentato dalla comunità e gestito e mantenuto dal Team di Fedora che fornisce pacchetti software di qualità per le distribuzioni Linux basate su RHEL (Red Hat Enterprise Linux), CentOS e Scientific Linux. Il progetto Epel non fa parte di RHEL/CentOS ma è espressamente pensato per fornire un gran numero di pacchetti software per queste distribuzioni.

Aggiungere il repository Epel di fatto si riduce alla installazione un pacchetto software come quasiasi altro; soltanto che, non facendo parte della distribuzione CentOS appena installata, dovremo prima scaricarlo dalla rete internet con il comando wget.

# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
--2019-06-10 18:47:34-- http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
Resolving dl.fedoraproject.org (dl.fedoraproject.org)... 209.132.181.23, 209.132.181.24, 209.132.181.25
Connecting to dl.fedoraproject.org (dl.fedoraproject.org)|209.132.181.23|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15080 (15K) [application/x-rpm]
Saving to: ‘epel-release-latest-7.noarch.rpm’

100%[==================================================================================================>] 15,080 82.6KB/s in 0.2s

2019-06-10 18:47:40 (82.6 KB/s) - ‘epel-release-latest-7.noarch.rpm’ saved [15080/15080]

Ora posso installare il repository con yum come un qualsiasi pacchetto software

# yum localinstall -y epel-release-latest-7.noarch.rpm 
Loaded plugins: fastestmirror
Examining epel-release-latest-7.noarch.rpm: epel-release-7-11.noarch
Marking epel-release-latest-7.noarch.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-11 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================================
Package Arch Version Repository Size
============================================================================================================================================
Installing:
epel-release noarch 7-11 /epel-release-latest-7.noarch 24 k

Transaction Summary
============================================================================================================================================
Install 1 Package

Total size: 24 k
Installed size: 24 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : epel-release-7-11.noarch 1/1
Verifying : epel-release-7-11.noarch 1/1

Installed:
epel-release.noarch 0:7-11

Complete!

 

Notare che ho utilizzato l'argomento localinstall, poiché sto installando direttamente da un file rpm locale.

Preparo qualche utilissimo 'alias' per i comandi semplificati

Per semplificare alcuni comandi, normalmente utilizzo degli alias della bash (l'interprete dei comandi predefinito di Linux). Questo perché alcuni comandi possono essere complessi ed avere un discreto numero di argomenti non sempre facili da ricordare.

Gli alias possono essere definiti 'on-the-fly' (al volo) nel proprio ambiente con il comando alias. Tuttavia questo è un modo poco efficace, in quanto vengono perduti alla disconnessione dalla bashad ed a ogni nuovo login dovremo ridefinirli.

Un efficace modo per avere i miei alias sempre disponibili consiste nel trascriverli nel file ~/.bashrc, ossia, nel file che viene eseguito ad ogni nuovo login.

Alcuni degli alias che amo portare sempre con me ed averli a portata di mano in qualsiasi momento, sono quelli riportati qui sotto ed aggiunti a quelli già esistenti nel file ~/.bashrc.

# Additional useful aliases by dpm in ~/.bashrc
alias ll='ls -o --color=never'
alias mv='mv -i'
alias cp='cp -i'
alias rm='rm -i'
alias less='less -Sr'
alias scp='scp -p'
alias ssh='ssh -2 -C'
alias yum='yum --disablerepo=\* --enablerepo=c7-media'
alias lesscon='less -S /var/log/messages'
alias tailcon='tail -f /var/log/messages'
alias tailjournal='journalctl -f'
alias tailsql='tail -f /var/log/mariadb/mariadb.log'
alias tailsys='journalctl -f'
alias dmesg='dmesg -wH -T'
alias vi=vim

Per aggiungere li alias descritti qui sopra, utilizzare l'editor di testi preferito: vi, nano, o qualsiasi altro editor di testi che non inserisca caratteri di formattazione all'interno del file.

Tutto fatto!

Avrai notato che fin'ora noon abbiamo fatto nessun riavvio (reboot) della macchia? Questo è potere di Linux! Fare tutto o quasi senza dover necessariamente passare da innumerevoli reboot (hai presente Windows?)

Tuttavia, ora che il lavoro è completato e ci troviamo su una macchina non ancora in servizio, fare un riavvio completo del sistema non guasterebbe; anche per verificare che non abbiamo commesso qualche errore o qualche svista.

Quindi a questo punto, faccio un bel (si fa per dire) riavvio con:

# shutdown -r now

... E sono pronto a passare al livello successivo.

Conclusioni

Il sistema è ora pronto per la fase successiva: ossia per installare tutti i servizi che questo server dovrà erogare.

Può sembrare banale, ma portare un server al questo livello è assai utile; soprattutto se questa procedura viene ripetuta in modo molto simile per tutti i server che si installano. In questo modo posso essere sicuro che un server che ho installato io avrà sempre tutto il necessario a portata di mano.

Mi auguro che questo post sia stato utile per coloro che, come me, si ritrovano a dover installare ed attivare molti server: poter disporre di un buon punto di partenza collaudato può essere un bun inizio.

E si sa: "Chi ben comincia è già a metà dell'opera".

Lascia un commento

Tutti i commenti dovranno essere verificati ed approvati dal webmaster, prima di essere pubblicati

 

Quote of the Day

Il Caos è ovunque.

John Barrow

Chi è online

Abbiamo 285 visitatori e nessun utente online

Newsletter

Per essere sempre aggiornato sulle ultime novità del sito.
Go to top