Monthly Archives: Agosto 2018

Come impostare il servizio NTP

Nota: questo è un obiettivo d’esame RHCSA 7 e un obiettivo d’esame RHCE 7.

Presentazione

NTP (Network Time Protocol) è un protocollo per mantenere sincronizzati i tempi dei server: uno o più server master forniscono tempo ai server client che possono fornire loro stessi del tempo ad altri server client (nozione di stratus).

Questo tutorial tratta della configurazione lato client, anche se la configurazione del server non è completamente diversa.

In RHEL 7 vengono utilizzati due pacchetti principali per impostare il lato client:

ntp: questo è il pacchetto classico, già esistente in RHEL 6, RHEL 5, ecc. Può essere usato sia come client sia come server NTP.
chrony: questa è una nuova soluzione più adatta per PC portatili o macchine con problemi di connessione di rete (la sincronizzazione temporale è più veloce). Viene utilizzato principalmente come client NTP. chrony è il pacchetto di default in RHEL 7 (un recente controllo di sicurezza ha mostrato che chrony è scritto e protetto abbastanza bene).

Attenzione: ntpd e chronyd non dovrebbero essere eseguiti allo stesso tempo. Scegli uno e solo uno di loro! Ci sono rapporti da parte dei candidati RHCE che notano che uno di loro è già intenzionalmente in esecuzione all’inizio dell’esame.

Prerequisiti

Prima di ogni altra cosa, è necessario assegnare il fuso orario corretto.
Per ottenere la configurazione corrente, digitare:

# timedatectl
Local time: Sat 2015-11-07 08:17:33 EST
Universal time: Sat 2015-11-07 13:17:33 UTC
RTC time: Sat 2015-11-07 13:17:33
Timezone: America/New_York (EST, -0500)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: no
Last DST change: DST ended at
Sun 2015-11-01 01:59:59 EDT
Sun 2015-11-01 01:00:00 EST
Next DST change: DST begins (the clock jumps one hour forward) at
Sun 2016-03-13 01:59:59 EST
Sun 2016-03-13 03:00:00 EDT

Per ottenere l’elenco di tutti i fusi orari disponibili, digitare:

# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
...
America/La_Paz
America/Lima
America/Los_Angeles
...
Asia/Seoul
Asia/Shanghai
Asia/Singapore
...
Pacific/Tongatapu
Pacific/Wake
Pacific/Wallis

Infine, per impostare un fuso orario specifico (qui America/Los_Angeles), digitare:

# timedatectl set-timezone America/Los_Angeles

Quindi, per verificare la tua nuova configurazione, digita:

# timedatectl
      Local time: Sat 2015-11-07 05:32:43 PST
  Universal time: Sat 2015-11-07 13:32:43 UTC
        RTC time: Sat 2015-11-07 13:32:43
        Timezone: America/Los_Angeles (PST, -0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: no
 Last DST change: DST ended at
                  Sun 2015-11-01 01:59:59 PDT
                  Sun 2015-11-01 01:00:00 PST
 Next DST change: DST begins (the clock jumps one hour forward) at
                  Sun 2016-03-13 01:59:59 PST
                  Sun 2016-03-13 03:00:00 PDT

Il pacchetto NTP

Installa il pacchetto NTP:

# yum install -y ntp

Attiva il servizio NTP all’avvio:

# systemctl enable ntpd

Avvia il servizio NTP:

# systemctl start ntpd

La configurazione NTP si trova nel file /etc/ntp.conf:

# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).

driftfile /var/lib/ntp/drift

# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default nomodify notrap nopeer noquery

# Permit all access over the loopback interface.  This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1 
restrict ::1

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

includefile /etc/ntp/crypto/pw

# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography. 
keys /etc/ntp/keys

Nota: per scopi di configurazione di base, solo le direttive del server possono richiedere una modifica per puntare a un gruppo diverso di server di riferimento ora rispetto ai valori predefiniti specificati.

Per ottenere alcune informazioni sul processo di sincronizzazione dell’ora, digitare:

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*y.ns.gin.ntt.ne 192.93.2.20      2 u   47   64  377   27.136    6.958  11.322
+ns1.univ-montp3 192.93.2.20      2 u   45   64  377   34.836   -0.009  11.463
+merlin.ensma.ne 193.204.114.232  2 u   48   64  377   34.586    4.443  11.370
+obsidian.ad-not 131.188.3.220    2 u   50   64  377   22.548    4.256  12.077

In alternativa, per ottenere un rapporto di base, digitare:

# ntpstat
synchronised to NTP server (129.250.35.251) at stratum 3
time correct to within 60 ms
polling server every 64 s

Per sincronizzare rapidamente un server, digitare:

# systemctl stop ntpd
# ntpdate pool.ntp.org
 5 Jul 10:36:58 ntpdate[2190]: adjust time server 95.81.173.74 offset -0.005354 sec
# systemctl start ntpd

Il pacchetto Chrony

In alternativa, puoi installare il nuovo servizio Chrony che è più veloce per sincronizzare gli orologi nei sistemi mobili e virtuali.

Installa il servizio Chrony:

# yum install -y chrony

Attiva il servizio Chrony all’avvio:

# systemctl enable chronyd

Avvia il servizio Chrony:

# systemctl start chronyd

La configurazione di Chrony si trova nel file /etc/chrony.conf:

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

# Ignore stratum in source selection.
stratumweight 0

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Enable kernel RTC synchronization.
rtcsync

# In first three updates step the system clock instead of slew
# if the adjustment is larger than 10 seconds.
makestep 10 3

# Listen for commands only on localhost.
bindcmdaddress 127.0.0.1
bindcmdaddress ::1

keyfile /etc/chrony.keys

# Specify the key used as password for chronyc.
commandkey 1

# Generate command key if missing.
generatecommandkey

# Disable logging of client accesses.
noclientlog

# Send a message to syslog if a clock adjustment is larger than 0.5 seconds.
logchange 0.5

logdir /var/log/chrony

Nota: per scopi di configurazione di base, solo le direttive del server possono richiedere una modifica per puntare a un gruppo diverso di server di riferimento ora rispetto ai valori predefiniti specificati.

Per ottenere informazioni sul riferimento temporale principale, digitare:

# chronyc tracking
Reference ID    : 94.23.44.157 (merzhin.deuza.net)
Stratum         : 3
Ref time (UTC)  : Thu Jul  3 22:26:27 2014
System time     : 0.000265665 seconds fast of NTP time
Last offset     : 0.000599796 seconds
RMS offset      : 3619.895751953 seconds
Frequency       : 0.070 ppm slow
Residual freq   : 0.012 ppm
Skew            : 0.164 ppm
Root delay      : 0.030609 seconds
Root dispersion : 0.005556 seconds
Update interval : 1026.9 seconds
Leap status     : Normal

Per ottenere informazioni equivalenti al comando ntpq, digitare:

# chronyc sources -v
210 Number of sources = 4

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||                                                /   xxxx = adjusted offset,
||         Log2(Polling interval) -.             |    yyyy = measured offset,
||                                  \            |    zzzz = estimated error.
||                                   |           |
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^+ merlin.ensma.fr               2   6    77    61   +295us[+1028us] +/-   69ms
^* lafkor.de                     2   6    77    61  -1371us[ -638us] +/-   65ms
^+ kimsuflol.iroqwa.org          3   6    77    61   -240us[ -240us] +/-   92ms
^+ merzhin.deuza.net             2   6    77    61    +52us[  +52us] +/-   48ms

# chronyc sourcestats -v
210 Number of sources = 4
                             .- Number of sample points in measurement set.
                            /    .- Number of residual runs with same sign.
                           |    /    .- Length of measurement set (time).
                           |   |    /      .- Est. clock freq error (ppm).
                           |   |   |      /           .- Est. error in freq.
                           |   |   |     |           /         .- Est. offset.
                           |   |   |     |          |          |   On the -.
                           |   |   |     |          |          |   samples. \
                           |   |   |     |          |          |             |
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
merlin.ensma.fr             7   5   200      0.106      6.541   +381us   176us
lafkor.de                   7   4   199      0.143     10.145   -916us   290us
kimsuflol.iroqwa.org        7   7   200     -0.298      6.717    +69us   184us
merzhin.deuza.net           7   5   200      0.585     11.293   +675us   314us

Per sincronizzare rapidamente un server, digitare:

# ntpdate pool.ntp.org
 5 Jul 10:31:06 ntpdate[2135]: step time server 193.55.167.1 offset 121873.493146 sec

Nota: non è necessario interrompere il servizio Chrony per sincronizzare il server.

Configurare sistemi per l’avvio di macchine virtuali all’avvio del sistema

Nota: questo è un obiettivo d’esame RHCSA 7.

Per avviare una macchina virtuale chiamata vm.example.com all’avvio, digitare il seguente comando:

# virsh autostart vm.example.com

Per disabilitare questo stesso avvio all’avvio, digitare:

# virsh autostart vm.example.com --disable

Per ottenere l’elenco di tutte le macchine virtuali, digitare:

# virsh list --all

Installare sistemi Red Hat Enterprise Linux come guest virtuali

Nota: questo è un obiettivo d’esame RHCSA 7.

Presentazione

L’installazione di un sistema RHEL 7 come ospite virtuale richiede due passaggi:

creare un file Kickstart con tutti i parametri di configurazione (indirizzo ip, partizionamento del disco, ecc.),
eseguendo il comando per la creazione stessa.

Kickstart File

Per creare una VM chiamata postfix.example.com (qui con un indirizzo IP 192.168.1.10, un gateway in 192.168.1.1, un server DNS in 192.168.1.5, un server di repository in 192.168.1.5, Pass1234 come password e una dimensione totale del disco di 6GB), creare il file /var/www/html/conf/ks_postfix.cfg e incollare le seguenti righe:

keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
network --device=eth0 --bootproto=static --ip=192.168.1.10 --netmask=255.255.255.0 --gateway=192.168.1.1 --nameserver=192.168.1.5 --activate --ipv6=auto
network --hostname=postfix.example.com
rootpw Pass1234
timezone America/Los_Angeles --isUtc
bootloader --location=mbr --boot-drive=vda
clearpart --all --initlabel --drives=vda
ignoredisk --only-use=vda
part pv.9 --fstype="lvmpv" --ondisk=vda --size=5000
#part /boot/efi --fstype=efi --grow --maxsize=200 --size=20
part /boot --fstype="ext4" --ondisk=vda --size=300
volgroup rhel --pesize=4096 pv.9
logvol swap  --fstype="swap" --size=500 --name=swap --vgname=rhel
logvol /  --fstype="ext4" --size=3072 --name=root --vgname=rhel

%packages
@base
@core

%end
reboot

Nota: rimuovere il commento dalla riga che inizia con “part /boot/efi” nel caso di un sistema basato su EFI.

Comando di creazione

Esegui il seguente comando:

# /bin/virt-install \
--virt-type kvm \
--name=postfix.example.com \
--disk path=/var/lib/libvirt/images/postfix.example.com.img,size=6 \
--ram=1024 \
--vcpus=1 \
--os-variant=rhel7 \
--accelerate \
--graphics vnc \
-v -l http://192.168.1.5/repo/CentOS/7/os/x86_64/ \
--network bridge:br0 \
--extra-args="console=tty0 console=ttyS0,115200 ks=http://192.168.1.5/conf/ks_
postfix.cfg"

Nota 1: http nel comando precedente può essere sostituito con nfs, ftp, ecc.
Nota2: Se si riceve questo messaggio “ERROR internal error: process exited while connecting to monitor: qemu-kvm: -chardev pty,id=charserial0: Failed to create chardev“, seguire questo thread.
Sostituisci “devpts  /dev/pts  devpts  defaults  0  0” con “devpts  /dev/pts  devpts  gid=5,mode=620  0  0” nel file /etc/fstab dell’host KVM.
Nota3: Da RHEL 7.4, 1024MB di memoria non sono più sufficienti, utilizzare almeno 1064MB.

Utilizza la cronologia delle transazioni yum

Presentazione

Dalla versione 3.2.25 di yum (già disponibile in RHEL 6), è possibile utilizzare la cronologia delle transazioni(transaction history).
Per cominciare, tutte le operazioni di installazione o rimozione del pacchetto sono registrate nel rpmdb.

Per visualizzare la versione rpmdb, digitare:

# yum version
Loaded plugins: fastestmirror, langpacks
Installed: 7/x86_64                 539:c8c53419da0ae4cba61f019df443d3c10593a208
Group-Installed: yum                 14:d92850d928d628772a0a1d95c98e078545b0eea0
version

Le informazioni in grassetto rappresentano la versione rpmdb. Se due server hanno la stessa versione di rpmdb, sono strettamente identici dal punto di vista di yum.

Transaction history

Quindi, può essere interessante sapere quali operazioni sono state fatte in precedenza: è lo scopo principale della cronologia delle transazioni.

Per fare l’ultima operazione yum, digita:

# yum history info
Loaded plugins: fastestmirror, langpacks
Transaction ID : 12
Begin time     : Mon Nov 10 11:28:01 2014
Begin rpmdb    : 538:541464668d769a2bb7dbfc8337e305ab6db9fb47
End time       :            11:28:03 2014 (2 seconds)
End rpmdb      : 539:c8c53419da0ae4cba61f019df443d3c10593a208
User           : root 
Return-Code    : Success
Command Line   : install setools-console
Transaction performed with:
    Installed     rpm-4.11.1-16.el7.x86_64                        @anaconda
    Installed     yum-3.4.3-118.el7.centos.noarch                 @anaconda
    Installed     yum-plugin-fastestmirror-1.1.31-25.el7_0.noarch @updates
Packages Altered:
    Install setools-console-3.3.7-46.el7.x86_64 @base
history info

Qui, puoi vedere che il pacchetto setools-console è stato installato. È anche possibile vedere la versione rpmdb prima e dopo l’operazione, la data, il tempo impiegato dall’installazione e lo stato dell’operazione (successo/fallimento).

Per ottenere l’elenco di tutte le operazioni registrate da yum precedentemente, digitare:

# yum history list all
Loaded plugins: fastestmirror, langpacks
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    12 | root <root>              | 2014-11-10 11:28 | Install        |    1
    11 | root <root>              | 2014-11-01 06:22 | Install        |    5
    10 | root <root>              | 2014-11-01 06:21 | Install        |    7
     9 | root <root>              | 2014-11-01 06:04 | Install        |    7
     8 | root <root>              | 2014-11-01 06:00 | Install        |    5
     7 | root <root>              | 2014-10-29 17:12 | Install        |    2
     6 | root <root>              | 2014-10-29 16:02 | Install        |    9
     5 | root <root>              | 2014-10-29 15:39 | Install        |   37
     4 | root <root>              | 2014-10-27 08:58 | Update         |   14
     3 | root <root>              | 2014-10-16 10:01 | I, U           |   47
     2 | root <root>              | 2014-09-05 15:32 | I, U           |   49
     1 | System <unset>           | 2014-07-19 13:39 | Install        |  464
history list

Nota 1: la colonna Altered rappresenta il numero di pacchetti modificati.
Nota 2: se non si specifica l’opzione all, si ottengono le venti operazioni più recenti.
Nota3: il comando yum history legge il file /var/log/yum.log.

Per ottenere i dettagli di una di queste operazioni (qui l’operazione ha chiamato 9), digitare:

# yum history list 9
Loaded plugins: fastestmirror, langpacks
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     9 | install gcc              | 2014-11-01 06:04 | Install        |    7
history list

Per ottenere ulteriori dettagli su una delle operazioni (qui l’operazione chiamata 12), digitare:

# yum history info 12
Loaded plugins: fastestmirror, langpacks
Transaction ID : 12
Begin time     : Mon Nov 10 11:28:01 2014
Begin rpmdb    : 538:541464668d769a2bb7dbfc8337e305ab6db9fb47
End time       :            11:28:03 2014 (2 seconds)
End rpmdb      : 539:c8c53419da0ae4cba61f019df443d3c10593a208
User           : root 
Return-Code    : Success
Command Line   : install setools-console
Transaction performed with:
    Installed     rpm-4.11.1-16.el7.x86_64                        @anaconda
    Installed     yum-3.4.3-118.el7.centos.noarch                 @anaconda
    Installed     yum-plugin-fastestmirror-1.1.31-25.el7_0.noarch @updates
Packages Altered:
    Install setools-console-3.3.7-46.el7.x86_64 @base
history info

Per ottenere l’elenco di tutte le operazioni registrate da yum precedentemente organizzate per data, digitare:

# yum history summary
Loaded plugins: fastestmirror, langpacks
Login user                 | Time                | Action(s)        | Altered
-------------------------------------------------------------------------------
root <root>                | Last day            | E, I             |        3
root <root>                | Last 2 weeks        | Install          |       72
root <root>                | Last 3 months       | I, U             |      110
System <unset>             | Last 6 months       | Install          |      464
history summary

Nota: per ottenere l’elenco di tutte le installazioni dei pacchetti precedenti ordinati per data, digitare:
# rpm -qa –last

Per ottenere tutte le operazioni relative a un pacchetto specifico (qui il pacchetto kernel), digitare:

# yum elenco elenco kernel
Plugin caricati: speedmirror, langpacks
ID | Utente di accesso | Data e ora | Azione / i | Alterato
————————————————– —————————–
3 | root <root> | 2014-10-16 10:01 | I, U | 47
2 | root <root> | 2014-09-05 15:32 | I, U | 49
1 | Sistema <unset> | 2014-07-19 13:39 | Installa | 464
lista della storia

Per ottenere i dettagli delle operazioni riguardanti un pacchetto specifico (qui il pacchetto del kernel), digitare:

# yum history package-list kernel
Loaded plugins: fastestmirror, langpacks
ID     | Action(s)      | Package
-------------------------------------------------------------------------------
     3 | Install        | kernel-3.10.0-123.8.1.el7.x86_64
     2 | Install        | kernel-3.10.0-123.6.3.el7.x86_64
     1 | Install        | kernel-3.10.0-123.el7.x86_64
history package-list

Modifiche alla transaction history

Nell’espressione transaction history, è possibile trovare il termine della transaction (transazione). Ciò significa che è possibile annullare e ripetere ogni operazione precedentemente registrata, anche se sono stati coinvolti più pacchetti (è necessario fare attenzione ai pacchetti di glibc o selinux-policy che hanno dipendenze molto complicate).

Per annullare l’ultima operazione, digitare:

# yum history undo last
Loaded plugins: fastestmirror, langpacks
Undoing transaction 12, from Mon Nov 10 11:28:01 2014
    Install setools-console-3.3.7-46.el7.x86_64 @base
Resolving Dependencies
--> Running transaction check
---> Package setools-console.x86_64 0:3.3.7-46.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                Arch          Version                Repository    Size
================================================================================
Removing:
 setools-console        x86_64        3.3.7-46.el7           @base        1.1 M

Transaction Summary
================================================================================
Remove  1 Package

Installed size: 1.1 M
Is this ok [y/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Erasing    : setools-console-3.3.7-46.el7.x86_64                          1/1
  Verifying  : setools-console-3.3.7-46.el7.x86_64                          1/1

Removed:
  setools-console.x86_64 0:3.3.7-46.el7

Complete!

Per visualizzare la cronologia delle transazioni relativa al pacchetto setools-console, digitare:

# yum history list setools-console
Loaded plugins: fastestmirror, langpacks
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    13 | history undo last        | 2014-11-10 18:12 | Erase          |    1
    12 | install setools-console  | 2014-11-10 11:28 | Install        |    1
history list

Per reinstallare il pacchetto setools-console (l’operazione chiamata 12), digitare:

# yum history redo 12

Uso di rpm

Per mantenere una cronologia pulita, è necessario evitare l’uso del comando rpm il più possibile perché interrompe la cronologia delle transazioni.

Ad esempio, ecco una cronologia delle transazioni:

# yum history
Loaded plugins: fastestmirror, langpacks
ID     | Login user        | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     2 | root              | 2014-11-21 16:18 | I, U           |   85
     1 | System            | 2014-11-21 14:14 | Install        |  464
history list

Un nuovo pacchetto (qui zlib-devel) viene installato tramite il comando rpm:

# rpm -ivh zlib-devel-1.2.7-13.el7.x86_64.rpm

Successivamente, viene eseguito un aggiornamento globale del pacchetto:

# yum update
...
Warning: RPMDB altered outside of yum.
...

Ora, se chiediamo la cronologia delle transazioni, otteniamo:

# yum history
Loaded plugins: fastestmirror, langpacks
ID     | Login user        | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     3 | root              | 2014-11-25 11:15 | I, U           |   31  <
     2 | root              | 2014-11-21 16:18 | I, U           |   85 >
     1 | System            | 2014-11-21 14:14 | Install        |  464
history list

I segni < e > visualizzati mostrano che alcune informazioni sono andate perse (il pacchetto installato tramite il comando rpm non ha informazioni associate).

Non c’è modo di risolvere questo problema. L’unica opzione è cancellare la cronologia delle transazioni e nascondere tutte le precedenti operazioni yum. Per farlo, digita:

# yum history new

Per evitare questo problema, puoi digitare:

# yum install zlib-devel
or
# yum install /path/to/zlib-devel-1.2.7-13.el7.x86_64.rpm

Recupero delle transazioni

Se durante un aggiornamento il sistema si arresta al riavvio, digita:

# yum-complete-transaction

Questo comando cerca le transazioni yum incomplete od interrotte e tenta di completarle.

Fonte: Guida alla distribuzione di RHEL 6.