Fare le configurazioni preliminari di un nuovo server CentOS-7 appena installato è uno di quei passaggi che servono a gettare basi solide per un server che probabilmente è destinato a funzionare per qualche anno. Eseguire la configurazione preliminare significa poter fare una manutenzione regolare senza problemi.
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 CentOS-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 configurazioni 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 configurazione 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
- I Passi da seguire
- Definisco un mio 'prompt' personalizzato
- Assegno il nome host (Hostname)
- Disabilito il Desktop Manager di CentOS-7
- Imposto il Repository dei pacchetti CentOS-7 da CD/DVD (opzionale)
- Impostazioni preliminari di 'yum' per CentOS-7
- Abilito le funzionalità grafiche di CentOS-7 da terminale
- Aggiungo qualche pacchetto CentOS-7 di uso comune
- Configuro la rete
- Configurazione Manuale della rete
- Aggiungo repository 'Epel' ed altri pacchetti
- Sincronizzo data ed orario con ntp
- Preparo qualche utilissimo 'alias' per i comandi semplificati
- Conclusioni
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-7, 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.
I Passi da seguire
Entriamo subito nel vivo dell’argomento e cerchiamo di mettere in fila tute le cose da fare.
Definisco un mio ‘prompt’ personalizzato
Il prompt della shell di linux (tipicamente una bash)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:
- Il login name: ossia lo username che ho utilizzato per il login;
- Il nome host sul quale mi trovo: utilissimo se ho molte connessioni contemporanee dal mio client su diverse macchine.;
- La directory corrente: per capire “al-volo” in quale cartella mi trovo;
- Il numero di sequenza del prossimo comando;
- 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]'
Successivamente aggiungerò questa stessa riga al file ~/.bashrc
dell’utente root, oppure nel file ~/.bash_profile
degli utenti non-root, 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.
# hostnamectl
Il quale, invocato senza argomenti, ritorna molte utili informazioni sul sistema; come mostrato qui sotto:
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 di CentOS-7
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 addirittura 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 di CentOS-7 (in modo che al prossimo avvio del sistema esso non verrà avviato automaticamente) con il comando:
# systemctl set-default multi-user.target
di cui, questo è il risultato del comando:
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
del quale, qui sotto è mostrato il risultato:
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 CentOS-7 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 ro,noauto,utf8 0 0
Ed il gioco è fatto.
Da questo momento in poi, posso montare il CD/DVD di CentOS-7 con il semplice comando:
# mount /mnt/cdrom
… oppure, in alternativa (che poi è la stessa cosa):
# mount /dev/sr0
che produce questo risultato:
mount: /dev/sr0 is write-protected, mounting read-only
Che è proprio ciò che volevo ottenere.
Impostazioni preliminari di ‘yum’ per CentOS-7
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-7. 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.
file:///mnt/cdrom/ file:///media/CentOS/ file:///media/cdrom/ file:///media/cdrecorder/
Notare che ho evidenziato in grassetto 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 origine, che si ottiene lanciando questo comando:
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!CentOS-7
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
che è mostrato qui sotto:
# 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
Per iniziare, disabilito tutti i repository con il comando:
Bene! Sembra proprio che per il momento gli unici repository CentOS-7 abilitati siano base
e c7-media
.
Per iniziare, disabilito tutti i repository con il comando:
# yum-config-manager --disable \*
di cui, questo è il risultato:
# 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]...
Quindi, abilito unicamente il repository c7-media di CentOS-7 con il comando:
# yum-config-manager --enable c7-media
… E questo è il risultato
# 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
e updates
per permettere almeno 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 di CentOS-7 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 CentOS-7 di uso comune
Prima di poter proseguire, installo alcuni pacchetti che mi saranno utili per poter procedere ai passi successivi.
Nella fattispecie, aggiungerò i seguenti pacchetti, dal repository CD/DVD, utilizzando il solito comando yum
.
- bash-completion
- net-tools
- yum-utils
- vim-enhanced
- nmap
- wget
- curl
- net-snmp
Eseguo quindi:
# yum install -y bash-completion net-tools yum-utils vim-enhanced nmap wget curl net-snmp
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 … [Listato omesso poiché molto lungo]… (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 … [Listato omesso poiché molto lungo]… Installed: 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.
Il mio CentOS-7 è una 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.)
L’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
Successivamente, abilito e riavvio il servizio
# systemctl enable vmtoolsd # systemctl restart vmtoolsd
L’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 gusti personali:
- Configurazione con NetworkManager;
- Configurazione manuale.
La 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 per la configurazione delle connessioni di rete.
Voglio innanzi tutto sapere se è in esecuzione con il comando systemctl status NetworkManager
.
# systemctl enable 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 # systemctl enable NetworkManager
… E questo è il risultato
# 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
(installato con il pacchetto net-tools
) per vedere lo stato attuale delle interfacce Ethernet:
# 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 seguente comando:
# 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, con questi comandi:
# nmcli con down eth0 # nmcli con up eth0
E questo è il risultato del comando:
# 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 imprevedibili.
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’ ed altri pacchetti
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 qualsiasi altro; soltanto che, non facendo parte della distribuzione CentOS-7 appena installata, dovremo prima scaricarlo dalla rete internet con il comando wget
, con la seguente sintassi:
# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
… E questo è il risultato:
# 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 con il seguente comando yum localinstall -y epel-release-latest-7.noarch.rpm
.
… E questo è il risultato del comando:
# 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.
Installo pacchetti utili al sysadmin
Ora che Epel è stato installato e sono disponibili numerosi utili pacchetti software aggiuntivi, procedo con l’installazione di quei pacchetti di grande utilità per il Sysadmin, soprattutto quando è necessario indagare a fondo nel sistema.
Per fare ciò, lancio semplicemente il comando yum install seguito dall’elenco dei pacchetti a installare:
# yum install telnet vim vim-enhanced nano iftop iotop atop htop dstat \ xauth lnav bind-utils mailx zip unzip xz sshfs ntp ntpdate
In questo caso non ti mostro l’output del mio terminale perché mi sembra superfluo, non essendoci nulla di interessante e soprattutto perché è molto simile a quelli già mostrati in precedenza.
Sincronizzo data ed orario con ntp
Ora che anche il pacchetto ntp è stato finalmente installato, posso sincronizzare l’orologio ed il calendario del mio sistema CentOS-7 con un server ntp esterno affidabile.
Gli aspetti che riguardano la sincronizzazione dell’orologio del sistema sono molto di importanza cruciale, giacché ciò ha impatto non solo sulla data ed ora dei files, ma anche e spoprattutto su tutte quelle operazioni che fanno necessariamente riferimento all’orario di sistema.
Moltissime funzioni di sistema si affidano alla correttezza dell’orario impostato nell’orologio interno del sistema operativo, come ad esempio cron
, at
, e tutte quelle operazioni innescate automaticamente dal sistema operativo che hanno una cadenza temporale.
Non ultimo i log di sistema riportano data ed ora degli eventi; se l’orario del sistema è disallineato ciò può provocare non pochi grattacapi.
Ho notato che alcuni Sysadmin tendono a sottovalutare gli aspetti legati alla sincronizzazione dell’orario di sistema; ciò può rivelarsi un problema nella diagnosi di errori o malfunzionamenti.
In questo post, non mi dilungherò troppo sull’argomento in quanto ne abbiamo già parlato in un precedente articolo dedicato appunto a come sincronizzare l’orario di un Server CentOS-7 con ntp, nel quale sono riportati tutti i dettagli.
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 bash ad 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
.
# vi ~/.bashrc
… E questo è ciò che vado ad aggiungere al file:
# 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 tailsecure='tail -f /var/log/secure' alias tailjournal='journalctl -f' alias tailsql='tail -f /var/log/mariadb/mariadb.log' alias tailhttpe='tail -20f /var/log/httpd/error_log' alias tailhttpa='tail -20f /var/log/httpd/access_log' alias tailmail='tail -f /var/log/maillog' alias tailsys='journalctl -f' alias dmesg='dmesg -wH -T' alias vi=vim alias gvi=gvim alias showmount='mount | column -t'
Ovviamente quello appena mostrato è solo un esempio; potrai aggiungere tutti gli alias che preferisci, per semplificare l’uso di comandi complessi.
Per aggiungere gli 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 che si sta editando.
Notare che alcuni degli alias appena impostati potrebbero non sortire alcun effetto o generare errori. Ad esempio l’alias tailsql
è riferito al log file di marialdb-server
, oppure tailhttpe
e tailhttpea
che si riferiscono rispettivamente al file error e access di apache, che non sono ancora stati installati; essi comunque mi potranno tornare utili in futuro, in quanto già predisposti all’occorrenza.
Tutto fatto!
Avrai notato che fin’ora non abbiamo fatto nessun riavvio (reboot) della macchia? Questo è il 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 produzione, fare un riavvio completo del sistema non guasterebbe; anche per verificare che non è stato 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 mio sistema CentOS-7 è 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“.
Disclaimer
Questa pagina potrebbe contenere link di affiliazione. Gli acquisti o gli ordini che effettuerai tramite tali link possono generare commissioni che ci aiutano a sostenere questo sito web.