Archivi categoria: Open Source

Inerente a software a codice aperto (open source)

Linux Day 2022 a Torino

Il 22 ottobre 2022 sono stato al Linux Day di Torino, dove ho tenuto un intervento su come vengono memorizzati i dati (file, directory, device, raid, LVM). Non ho avuto modo di seguire molti altri interventi perché è stata un’occasione per rivedere di persona alcune persone che bene o male gravitano attorno al mondo Linux e all’open source in genere.

Lascio qui la presentazione in formato PDF; qui la presentazione HTML.

Opzioni di barman per il ripristino di un database PostgreSQL

La documentazione di barman non è sempre semplice da consultare, quindi aggioungo qui alcune note relative al comando di ripristino.

Creazione del file system per il ripristino, su macchina nomehost, aggiornato con tutti i WAL: barman recover --remote-ssh-command 'ssh postgres@nomehost' nome-master backup-id /path/destinazione/su/nomehost

Creazione del file system per il ripristino, su macchina nomehost, che verrà aggiornato con tutti i WAL scaricati all’avvio di postgres. Il comando per scaricare i WAL dal server barman è nel file recovery.conf: barman recover --remote-ssh-command 'ssh postgres@nomehost' --get-wal nome-master backup-id /path/destinazione/su/nomehost

Creazione del file system per il ripristino, su macchina nomehost, che verrà configurato come standby (che rimarrà sempre in recovery, attendendo sempre nuovi WAL). Il comando per la configurazione è nel file recovery.conf: barman recover --remote-ssh-command 'ssh postgres@nomehost' --standby-mode nome-master backup-id /path/destinazione/su/nomehost

Creazione del file system per il ripristino, su macchina nomehost, che verrà configurato come standby e messo in attesa per potervvi accedere. Il comando per la configurazione è nel file configurato come standby. Il comando per la configurazione è nel file recovery.conf: barman recover --remote-ssh-command 'ssh postgres@nomehost' --standby-mode --target-action pause nome-master backup-id /path/destinazione/su/nomehost

Creazione del file system per il ripristino, su macchina nomehost, aggiornato con tutti i WAL fino a data e orario specifico. La directory barman_wal conterrà i WAL necessari, il file recovery.conf i comandi necessari per il PITR: barman recover --remote-ssh-command 'ssh postgres@nomehost' --target-time '2022-06-15 16:58' nome-master backup-id /path/destinazione/su/nomehost

Per fare poi ripartire il database in modalità standby, nel caso che la versione di postgresql sia 12 o superiore, il file recovery.conf non viene usato e, anzi, blocca l’avvio di postgresql. I comandi vanni presi da quel file e integrati nel file postgresql.conf principale (dettagli qui).

Altra cosa importante: per fare ripartire postgresql (12 o superiore) in modalità recovery deve esistere il file chiamato standby.signal. In caso negativo, il cluster non partirà in maniera recovery, ma si aprirà normalmente alle connessioni in lettura e scrittura.

Appunti su come creare una CA e un certificato server con il KeyTool di Java

Queste sono note veloci da sistemare, ma possono già aiutare eventualmente altri, quindi le pubblico qui. Per semplicità la password dei keystore e delle chiavi è sempre la stessa, ma in alcuni casi deve essere veramente la stessa, ad esempio quando si deve usare il keystore generato in un connettore di Apache Tomcat.

Le cose importanti da notare sono: il certificato della CA deve avere il BasicConstraint che indica che è una CA. Non si tratta di un vincolo tecnico, ma i browser potrebbero poi non accettarlo come affidabile. Il certificato del server deve avere il KeyUsage corretto, altrimenti anche lui potrebbe essere scartato. Il comando per la generazione del certificato iniziale del server avrà quindi varie -ext .... per aggiungere le estensioni, che dovranno essere ricopiate identiche nel punto dell’emissione del certificato per il server da parte della CA.

  • Creazione di chiave privata e certificato radice per l’autorità, valido 7350 giorni (circa 20 anni). Questo viene messo nel keystore predefinito di java, nella home dell’utente, in un file chiamato .keystore e protetto da una password relativamente semplice. Il comando è: keytool -alias root -dname "CN=RootCA, OU=La mia unità organizzativa, O=La mia società, L=La mia località, ST=La mia provincia, C=IT" -genkeypair -storetype PKCS12 -storepass fs35623_WE -keypass fs35623_WE -keyalg RSA -keysize 4096 -validity 7350 -ext BasicConstraints=ca:true,PathLen:2 -ext KeyUsage=digitalSignature,keyEncipherment,keyCertSign -ext ExtendedKeyUsage=serverAuth,clientAuth
  • Creazione di chiave privata e certificato radice per il server, valido 7350 giorni (circa 20 anni). Questo viene messo nel keystore chiamato server.pfx e protetto da una password relativamente semplice. Il comando è: keytool -alias server -dname "cn=server.example.com, OU=La mia unità organizzativa, O=La mia società, L=La mia località, ST=La mia provincia, C=IT" -genkeypair -storetype PKCS12 -storepass fs35623_WE -keystore server.pfx -keypass fs35623_WE -keyalg RSA -keysize 4096 -validity 7300 -ext SAN=DNS:server.example.com -ext ExtendedKeyUsage=serverAuth -ext KeyUsage=digitalSignature,keyEncipherment
  • Copia temporanea del certificato della CA dal keystore predefinito di java a quello nel quale c’è il certificato del server. Il comando è: keytool -export -alias root -storetype PKCS12 -storepass fs35623_WE | keytool -import -alias root -storetype PKCS12 -keystore server.pfx -storepass fs35623_WE -noprompt -trustcacerts
  • Generazione della richiesta di firma del serve del certificato, che viene poi passata al comando per l’emissione del certificato da parte della CA, che viene poi passato al keystore origiario per essere memorizzato. Il comando è: keytool -alias server -certreq -storetype PKCS12 -storepass fs35623_WE -keyalg RSA -keystore server.pfx | keytool -alias root -gencert -storetype PKCS12 -storepass fs35623_WE -keyalg RSA -ext SAN=DNS:server.example.com -ext ExtendedKeyUsage=serverAuth -ext KeyUsage=digitalSignature,keyEncipherment -validity 7300 | keytool -alias server -importcert -storetype PKCS12 -storepass fs35623_WE -keyalg RSA -keystore server.pfx -noprompt -trustcacerts
  • Rimozione del certificato della CA dal keystore del server. Il comando è: keytool -delete -alias root -storetype PKCS12 -keystore server.pfx -storepass fs35623_WE
  • Esportazione del certificato della CA in un file, da importare nei sistemi che dovranno considerarlo affidabile. Il comando è: keytool -export -alias root -storetype PKCS12 -storepass fs35623_WE -rfc > root.pem

Configurazione dei computer per tutticonnessi

Dall’inizio della diffusione del Corona virus e della conseguente maggiore adozione della didattica digitale integrata, ho partecipato all’associazione tutticonnessi che raccoglie, aggiusta, aggiorna e distribuisce strumenti per seguire le lezioni a distanza.

Provo qui a descrivere il procedimento completo per l’aggiornamento di computer portatili che arrivano con vecchie versioni di Windows. Il sistema operativo Windows viene mantenuto solo se ha la licenza in regola, altrimenti in teoria si passerebbe a quello Linux, ma nella realtà non sono stati trovati computer senza licenza in regola. A proposito della licenza ricordo che questa è a volte legata all’hardware (e viene chiamata OEM), mentre altre è stata comprata a parte. In entrambi i casi la licenza viene ceduta con l’hardware dall’azienda che fa la donazione a tutticonnessi.

La prima cosa da fare è capire di che computer si tratta, quindi vanno controllati marca, modello, CPU, memoria RAM, chiave di attivazione di Windows, versione del BIOS e versione di Windows. Per alcune di queste informazione riporto alcuni comandi che vanno eseguito dal prompt di Windows eseguito come amministratore:

  • Numero di serie: wmic bios get SerialNumber
  • Versione del BIOS: wmic bios get SMBIOSBIOSVersion
  • Chiave di Windows: wmic path softwarelicensingservice get OA3xOriginalProductKey

La chiave di Windows a volte si trova stampata su un’etichetta presente sul retro del portatile o nel vano della batteria. Più di recente si è diffusa quella digitale, riconoscibile da un adesivo viola quadrato con l’emblema di Windows, anchìesso spesso sul retro del portatile.

Per l’aggiornamento vanno prima tolti tutti i programmi che non ci interessano. Spesso i computer che riceviamo sono di aziende che li riformattano prima di consegnarli, ma capita che questa riformattazione sia fatta con qualche immagine di Windows già preconfezionata dell’azienda stessa. A volte quindi ci sono applicazioni e configurazioni particolari. L’elenco del software già installato è quello presente nel pannello di controllo.

Installazione di browser. Vengono installati sia Google Chrome che Mozilla Firefox. Con entrambi ci si collega a duckduckgo e si installa l’estensione che viene subito proposta, cosicché le ricerche verranno fatte su un motore di ricerca meno invasivo di quello predefinito. Il browser predefinito viene impostato come Firefox. Con Chrome, dopo aver installato dukduckgo, va fatta una prima ricerca durante la quale il browser propone di ripristinare il motore di ricerca Google, ma ovviamente si deve dire di no.

Pubblicità e altri accessi ad Internet. Windows presenta a schermo vari annunci, inoltre fa ricerche su Internet, spesso non richieste, come quando si apre il menu «Start», cioè quello principale di Windows, e si comincia a scrivere l’inizio del comando, vengono mostrati i risultati della ricerca tra i menu e di una ricerca ulteriore su Internet, magari per proporre un programma non ancora installato. Un altra occasione è quella della schermata di blocco, che ogni tanto contiene informazioni aggiuntive e annunci.

  • Per eliminare la ricerca del menu «Start» bisogna agire su 3 policy di gruppo. Partire dall’editor delle policy di gruppo (gpedit.msc) e selezionare: Criteri Computer Locale > Configurazione Computer > Modelli amministrativi > Componenti di Windows > Certa. Qui abilitare i tre criteri «Non consentire le ricerche Web», «Non cercare nel Web o visualizzare risultati Web per la ricerca» e «Non cercare nel Web o visualizzare risultati Web per la ricerca con connessioni a consumo».
  • Per le pubblicità nella schermata di blocco, usare Impostazioni> Personalizzazione > Schermata di blocco e impostare lo sfondo su «Immagine». Inoltre disattivare «Visualizza informazioni, suggerimenti e altro da Windows e Cortana nella schermata di blocco».
  • Per togliere quelle dal menu «Start» andare in Impostazioni > Personalizzazione > Start e cambiare in «Mostra occasionalmente suggerimenti in Start» e impostarlo su «Disattivato».
  • Per toglierle dalla barra delle applicazioni, andare su Impostazioni > Sistema > Notifiche e azioni e disattivare l’opzione «Ottieni suggerimenti durante l’uso di Windows».
  • Per ultimo, gli annunci ai nuovi utenti: aprire Impostazioni > Sistema > Notifiche e disattivare «Mostra l’esperienza di benvenuto di Windows quando eseguo l’accesso per evidenziare le novità»; oppure «Mostra configurazione e personalizzazione di Windows dopo gli aggiornamenti e occasionalmente quando eseguo l’accesso per segnalare le novità e i suggerimenti».

Riduzione del menu Start. Il menu di Windows 10 contiene, oltre ai programmi che vengono mostrai a sinistra, delle aree chiamate «Produttività», «Esplora» e altre, che vengono mostrate sulla destra. Per toglierle, posizionarsi sulla doppia linea sulla destra del nome dell’area, una alla volta, e col menu contestuale scegliere «Rimuovi gruppo da Start».

Pulizia disco. Una volta completati gli aggiornamenti all’ultima versione di Windows 10, attualmente è la 21H2, si deve avviare il programma di pulizia del disco, come amministratore. Dopo aver scelto il disco, normalmente è C:, da pulire, si dovranno attendere alcuni minuti mentre viene fatto l’elenco delle cose che si possono cancellare e la valutazione dello spazio che si libererebbe. Vanno selezionati, in questo elenco, anche le voci più corpose: «File di ottimizzazione recapito», «Installazioni di Windows precedenti». Questa cancellazione libera dai 20 ai 35Gb, che non sono pochi!

Installazione programmi. Oltre ai due browser Firefox e Chrome, vanno installati l’ultima versione di LibreOffice (con la guida in italiano), Microsoft Teams, SumatraPDF (o Adobe Reader).

Avvio automatico. All’acceso a Windows vengono avviati automaticamente alcuni programmi. Non sono tutti necessari, soprattutto se il computer è vecchiotto e non ha tante risorse. Per disattivare quelli in eccesso, avviare «Gestione attività» dal menu contestuale sulla barra di Windows, selezionare «Più dettagli» nella parte bassa della finestra e poi «Avvio» nella parte alta. Disabilitare: Cortana, Microsoft OneDrive.

Deframmentazione. Dopo aver liberato decine di gigabyte è utile ottimizzare il file system. Avviare l’utility di deframmentazione disco, selezionare il disco di sistema C: e premere il bottone «Analizza», prima, e dopo «Ottimizza». Armarsi di tanta pazienza e aspettare il termine dell’attività.

Analisi di problemi su squid

Quando c’è un problema con squid, io non so mai che pesci pigliare. Per evitare di fare sempre le stesse ricerche e trovare le stesse risposte, nonché per delineare una modalità di indagine, aggiornerò questo articolo ad ogni nuova occasione.

squid impiega parecchio tempo per avviarsi, ma a volte, se si fanno solo modifiche alla configurazione, si può evitare di riavviarlo mandando il segnale per la rilettura del file di configurazione.

# systemctl restart squid # riavvio completo
# squid -k reconfigure # rilegge la configurazione

Access log

Il principale file di log è quello che mostra tutte le richieste che ha ricevuto e la risposta che ha dato. Il file è /var/log/squid/access.log e contiene righe fatte così:

1611652062.938 1 192.168.215.45 TCP_DENIED/403 4044 CONNECT cdn-gl.imrworldwide.com:443 - HIER_NONE/- text/html
1611652065.142 63192 192.168.215.45 TCP_TUNNEL/200 1671 CONNECT outlook.office365.com:443 - HIER_DIRECT/40.101.137.66 -

Il primo numero è una marca temporale non formattata. Per sapere veramente a che ora si riferisca si può usare il comando date così

# date --date @1611652073.326
mar 26 gen 2021, 10.07.53, CET

il secondo numero è il tempo, in millisecondi, impiegato da squid per rispondere al client dopo aver svolto l’operazione

il terzo campo è l’IP del client

il quarto campo è l’esito. Gli esiti maggiormente diffusi sono:

  • TCP_DENIED/403, indica che la richiesta è stata rifiutata con codice HTTP 403
  • TCP_TUNNEL/200, indica che la richiesta di apertura di un tunnel è stata accetta con codice HTTP 200
  • TAG_NONE/503, indica un errore interno di quid, ad esempio che non riesce a risolvere il nome con il DNS

il quinto campo è il metodo HTTP richiesto dal client: GET, POST, HEAD, CONNECT

il sesto campo è la coppia nome host e porta da contattare.

Cache log

Questo secondo file di log è /var/log/squid/cache.log e contiene informazioni aggiuntive. Ci sono le informazioni di debug che vengono scritte in base alla direttiva debug_options. Normalmente contiene solo le segnalazioni di problemi. Per avere un po’ più di informazioni, aggiungere:

debug_options ALL,2

al file di configurazione /etc/squid/squid.conf e farlo rileggere a squid. Ci si possono trovare informazioni come questa:

2021/01/26 09:43:04.511 kid1| 85,2| client_side_request.cc(744) clientAccessCheckDone: The request CONNECT mail.google.com:443 is ALLOWED; last ACL checked: localnet
 2021/01/26 09:43:04.511 kid1| 85,2| client_side_request.cc(720) clientAccessCheck2: No adapted_http_access configuration. default: ALLOW
 2021/01/26 09:43:04.511 kid1| 85,2| client_side_request.cc(744) clientAccessCheckDone: The request CONNECT mail.google.com:443 is ALLOWED; last ACL checked: localnet
 2021/01/26 09:43:04.511 kid1| 44,2| peer_select.cc(258) peerSelectDnsPaths: Find IP destination for: mail.google.com:443' via mail.google.com
 2021/01/26 09:43:04.511 kid1| 44,2| peer_select.cc(280) peerSelectDnsPaths: Failed to select source for 'mail.google.com:443'
 2021/01/26 09:43:04.511 kid1| 44,2| peer_select.cc(281) peerSelectDnsPaths:   always_direct = DENIED
 2021/01/26 09:43:04.511 kid1| 44,2| peer_select.cc(282) peerSelectDnsPaths:    never_direct = DENIED
 2021/01/26 09:43:04.511 kid1| 44,2| peer_select.cc(295) peerSelectDnsPaths:        timedout = 0
 2021/01/26 09:43:04.511 kid1| 4,2| errorpage.cc(1261) BuildContent: No existing error page language negotiated for ERR_DNS_FAIL. Using default error file.

che indicano una richiesta di apertura di un tunnel verso mail.google.com che viene inizialmente accettata tramite le ACL, ma poi rifiutata per un problema del DNS usato da squid.