Come Configurare SQLWorkbench per PostgreSQL

SQLWorkbench è un SQL query tool free particolarmente efficace che supporta un ampio numero di DBMS. Scritto in Java è in grado di interfacciarsi con qualsiasi database per il quale sia disponibile un JDBC driver.  Essendo in java SQLWorkbench potrebbe essere eseguito in qualsiasi Sistema Operativo che disponga di JRE ( Java Runtime Environment).  L’ultima versione stabile è la Build 123 del settembre 2017.  Tra i database supportati e testati non poteva mancare PostgreSQL. Di seguito i passi per “installare” e configurare SQLWorkbench per PostgreSQL.

Per poter utilizzare SQLWorkbench è necessario java JRE. Possiamo controllare la versione java disponibile con java -version

# java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-1~deb9u1-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

per installare Oracle JRE  manualmente su macchina linux si può fare riferimento  al post   Oracle Java Runtime 8 installazione manuale – versione 8.121 – Debian 8.xx 64 bit

Configurare e Installare SQLWorkbench per PostgreSQL

SQLWorkbench non necessita di una vera installazione è sufficiente scaricare il pacchetto generico per tutti i S.O e decomprimere lanciare lo script  sqlworkbench.sh.
Il pacchetto è disponibile alla pagina

http://www.sql-workbench.net/downloads.html

Per poter interagine con postgresql serve inoltre lo specifico driver JDBC scaricabile all’indirizzo che andra opportunamente configurato in SQL workbench.

https://jdbc.postgresql.org/download.html

Operando con il terminale

scegliamo la directory opt per l’applicazione quindi

su 
mkdir /opt/sqlworkbench
cd /opt/sqlworkbench

scarichiamo il pacchetto con l’ultima versione stable di SQLWorkBench 123 e l’ultima versione  del driver JDBC 42.2.1

wget http://www.sql-workbench.net/Workbench-Build123.zip

wget https://jdbc.postgresql.org/download/postgresql-42.2.1.jar

 

Decomprimiamo il pacchetto con

unzip Workbench-Build123.zip

Rendiamo eseguibile per tutti gli users lo script di avvio workbench.sh

chmod a+x sqlworkbench.sh 

exit

Volendo si può creare un link simbolico nel desktop con

ln -s /opt/sqlworkbench/sqlworkbench.sh sqlworkbench

avviamo

La finestra in primo piano che viene presentata e quella per creare un profilo di connessione.

Per connettersi a postgresql è necessario a questo punto configurare il driver.

  • Click sul pulsante Manage Drivers
  • In primo piano ci sarà  una nuova finestra Manage drivers

  • Selezionare postgreSQL dall’ elenco di destra con i DBMS supportati
  • Click sul pulsante cartella in alto a sinistra e selezionare il file driver JDBC per postgres scaricato che apparirà nella Library e premere OK.
  • a questo  punto è possibile completare la il profilo di connessione

Si dovrà inserire:

  • nome per la connessione
  • nell URL:  host porta e database
  • username e password

SQLworkbench in azione grazie alla funzione  WbGrepData
viene ricercata la presenza della stringa Zeus in qualsiasi campo (field) di tutte le tabelle del database. 7 le tabelle riscontrate.

Database Compatibili con SQLworkbench

 

 

Risorse:

 

Annunci

Anonimizzare gli indirizzi ip gtag.js e analytics.js rendere anonimi gli indirizzi ip google Analytics

Aggiornamento Maggio 2018: Con l’Anonimizzazione degli indirizzi ip i cookie di analytics ( _ga, _gid _gat )  diventano difatto dei cookie tecnici e quindi non soggetti all’accettazione esplicita. Quindi per questi non è necessario il blocco preventivo dei 3 cookie analytics .

gtag.js è il nuovo snippet usato da Google Analytics per il servizio di statistiche web.
Gtag.js non sarebbe tanto una nuova libreria analytics in quanto è basato sempre sull’ engine v8 della libreria analytics.js. Piuttosto nasce dalla volonta di mettere a disposizione un unico script centralizzato in grado di inviare a tutti gli strumenti Google non solo Analytics ma anche di Marketing come ad esempio AdWords.

Il nuovo snippet  è del tipo

< script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXXXXX-Y"></script >
< script >
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'UA-XXXXXXXX-Y');
</ script >

Rendere anonimi gli indirizzi ip con gtag.js

Per questioni inerenti la privacy policy  risulta opportuno talvolta procedere all’anonimizzazione dell’ indirizzo ip che viene inviato a  Google Analytics .

come indicato in  IP anonymization with gtag.js

Per ottenere questo risultato per tutti gli eventi e quindi per tutte le pagine si può cambiare  la riga dello snippet con il ‘config’ della proprietà ‘UA-XXXXXXXX-X’ impostando il valore del parametro anonymze_ip a true:

nella riga con il config della proprietà

gtag('config', 'UA-XXXXXXXX-Y');

va cambiata aggiungendo il parametro  anonymize e impostandolo al valore true

gtag('config', 'UA-XXXXXXXX-Y', { 'anonymize_ip': true });

E’ bene precisare che l’indirizzo ip degli user non è comunque accessibile all’interno di Google Analytics indipendentemete dall’attivazione dell’anonimizzazione.

L’anomizzazione degli ip non va confusa con gli ID in esplorazione utenti  gli ID non consentono di indentificare il numero IP  dello user.

Da Google Analytics non sarebbe possibile verificare che gli IP siano stati anonimizzati.

Se si desidera visualizzare l’indirizzo ip in Goolge Analytics si deve utliizzare lo snippet per inviare il valore del numero ip

in analytics.js si può usare

 ga('send', 'pageview', {
      'dimension1':  ‘INDIRIZZO_IP’
    });

quindi si deve creare un Rapporto personalizzato

Rendere anonimi gli indirizzi ip in analytics.js

Se si utilizza lo snippet precedente analytics.js

< script >
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-XXXXXXXX-Y', 'auto');

  ga('send', 'pageview'););
</ script >

si possono rendere anonimi gli indirizzi aggiungendo la riga ( libreria analytics.js)

ga('set', 'anonymizeIp', true);

per l’ invio di pagina ( libreria ga,js)

ga('send', 'pageview',{ 'anonymizeIp': true });

Spiegazioni in Google Anonimizzazione IP in analytics

Rendere Anonimi  gli indirizzi ip in Google Tag Manager

Se si utilizza Google Tag Manager per alimentare analytics il  mascheramento /anonimizzazione degli indirizzi ip si può conseguire direttamente,  agendo sulla  finestra Tag Configuration senza intervenire sullo snippet. Infatti Google Tag Manager  (GTM ) mette a disposizione un campo specifico denominato anonymizeIp per ottenere l’anonimizzazione.

L’immagine allegata evidenzia i settaggi da utilizzare per ottenere l’anonimizzazione degli indirizzi ip con il tag di tipo Universal Analytics.

Aperta la finestra Tag Configuration dell’ Universal Analytics  Tag si deve cliccare su:

  • Altre impostazioni / More setting
  • Aggiungi Campo/ ADD FIELD in  Campi da impostare/Fields to Set

Quindi selezionare il nome campo anonymizeIp e impostare il valore a true.

GTM - Anonymize Universal Analytics

AnonymizeIp in Google tag Manager

Per quanto riguarda l’implementazione di analytics in Google Tag Manager.  I passi evidenziati per Universal Analytics si applicano anche al Tag type Classic Google Analytics.

 

Cos’è e come opera il Global Site Tag (gtag.js)

come anticipato il Global Site Tag ha l’obiettivo di gestire in modo unificato con un solo snippet l’invio dei dati ai tools google. Citando google “gtag.js è una libreria di tag web per i prodotti Google di misurazione dei siti, monitoraggio delle conversioni e remarketing che consente di esercitare un maggiore controllo e, al contempo, agevolare l’implementazione. Con gtag.js puoi sfruttare le integrazioni e funzionalità dinamiche più recenti non appena diventano disponibili.”

Se ad esempio si intendono inviare i dati oltre ad analytics anche ad AdWords sarà sufficiente aggiungere oltre alla riga con il ‘config’ della proprietà analytics una riga con il config della proprieta AdWords.

...
gtag('config', 'UA-XXXXXXXX-Y');
gtag('config', 'AW-XXXXXXXX-Y');
...

 

Risorse:

 

Monitor Philips Brilliance BDM4350UC/00 addio al dual monitor

Dopo tre mesi di utilizzo il Monitor Philips  Brilliance BDM4350UC/00 continua a comportarsi decisamente sopratutto considerato il prezzo di acquisto inferiore ai 500 Euro. Si tratta di un Display LCD Ultra HD 4K ( 3840x2160px a 60Hz)  da 43′ (42.5″/108cm diagonale).

Angolo di visione e colori nitidi grazie al tecnologia LED IPS.  Audio accettabile grazie alla presenza di  2 altoparlanti da 7 Watt.

Moteplicità di funzioni multiview. Picture-by-Picture (PbP) per visualizzare più sistemi in un unico schermo e Picture in PIcture( PiP).

Il 43′ Philips è dotato di un comodo Hub USB 3.0 con presa per la ricarica rapida.

Dotazione completa di connettori  2 HDMI-MHL,  2 DisplayPort 1, 1 VGA e  connessioni audio.

Il menu OSD del display si controlla con un joystick posto sul retro in basso a destra. Il joystick non mi risulta sempre comodissimo forse solo perchè necessita di un po’ più  di pratica.  I consumi in modalità ECO sono complessivamente contenuti 45watt/ora. A proposito di consumi apprezzabile l’interuttore 0 Watt a sinistra del joystick.

Questo monitor ha praticamente sostituito il sistema dual monitor linux che utilizzavo. Lo spazio a disposizione in termini di pixel  è decisamente aumentato. Del resto ogni workspace xfce visualizza 4 schemi HD (1920×1080 px). Conseguentemente abbandonato il windows manager Awesome a favore del desktop manger XFCE.


Screenshot sistema dual monitor con windows manager awesome v3.4.14 (White Christmas) il mio ex “desktop environment” di default
philips_awesome

Sistema single monitor 4K

 

Le connessioni a disposizione:

  • 2 HDMI-MHL   (6) preferibili
  • 2 DIsplay Port
  • 1 VGA
  • Audio in e presa cuffie

HUB Usb 3.0 con 4 connettori  la 2° presa da sinistra (9) consente la ricarica veloce del cellulare.

Connettori

Tabella con le specifiche

 

 

 

 

 

 

Risorse:

 

 

Snappy sistema per la gestione di pacchetti e di distribuzione del software

Snappy è un sistema di gestione dei pacchetti e di distribuzione del software originariamente realizzato da Canonical per la versione di Ubuntu per smartphone  è ora adottata anche da un crescente numero di distribuzioni linux.
Si caratterizza per essere un sistema di distribuzione del software che vuole essere indipendente dal tipo  distribuzione linux.  Infatti consente di installare l’applicazione con tutte le librerie di cui  ha bisogno senza appoggiarsi necessariamente alla versione più recente della distribuzione installata.  Si tratta di un approccio non tradizionale nel mondo linux. I gestori apt e yum richiedono pacchetti specificamente adattati per utilizzare le librerie presenti in una specifica versione del sistema operativo.

Snappy utilizza pacchetti  detti “snaps” e snapd è il tool per il loro utilizzo. Uno snap  utilizza un processo che risulta isolato dagli altri processi. Se da un lato si evitano così i  conflitti di dipendenza tra le applicazioni dall’altro si potranno avere, in snaps diversi, più copie  delle stesse librerie e/o programmi e le dimensioni dei pacchetti risulteranno in media decisamente più grandi.

Canonical ha dichiarato il supporto per le distribuznioni linux principali  Debian, Arch Linux, CentOS, Fedora, Gentto LInux, OpenWrt  e Suse.

Per poter utilizzare questo gestore dei pacchetti in debian 9  installare snappy  con

apt install snapd

per installare un pacchetto come remmina non disponibile nei repository ufficiali di debian 9  si usa il comando

snap install remmina
$ snap install remmina
2017-09-26T00:36:47+02:00 INFO snap "core" has bad plugs or slots: core-support-plug (unknown interface)
remmina 1.2.30 from 'remmina' installed

Primo utilizzo di snap verranno scaricati due blocchi core di  circa 87 MB  e remmina 73 MB

Elenco dei comandi disponibili

$ snap --help
.....
  abort       Abort a pending change
  ack         Adds an assertion to the system
  alias       Sets up a manual alias
  aliases     Lists aliases in the system
  buy         Buys a snap
  changes     List system changes
  connect     Connects a plug to a slot
  disable     Disables a snap in the system
  disconnect  Disconnects a plug from a slot
  download    Downloads the given snap
  enable      Enables a snap in the system
  find        Finds packages to install (aliases: search)
  get         Prints configuration options
  help        Help
  info        Show detailed information about a snap
  install     Installs a snap to the system
  interface   Lists snap interfaces
  interfaces  Lists interfaces in the system
  known       Shows known assertions of the provided type
  list        List installed snaps
  login       Authenticates on snapd and the store
  logout      Log out of the store
  logs        Retrieve logs of services
  pack        Pack the given target dir as a snap
  prefer      Prefer aliases from a snap and disable conflicts
  refresh     Refreshes a snap in the system
  remove      Removes a snap from the system
  restart     Restart services
  revert      Reverts the given snap to the previous state
  run         Run the given snap command
  services    Query the status of services
  set         Changes configuration options
  start       Start services
  stop        Stop services
  switch      Switches snap to a different channel
  tasks       List a change's tasks (aliases: change)
  try         Tests a snap in the system
  unalias     Unalias a manual alias or an entire snap
  version     Shows version details
  wait        Wait for configuration.
  watch       Watch a change in progress
  whoami      Prints the email the user is logged in with

Gestori di pacchetti alternativi :

 

Risorse:

 

 

 

 

 

W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-3.fw for module r8169 – debian 9

Tra le caratteristiche peculiari di Debian è l’utilizzo del software libero. Il sofware  incluso nel repository main infatti deve essere conforme alle specifiche DFSG (Debian Free Software Guidelines).  Questo  ha comportato che a partire dalla versione Squeeze  ( Debian 6 ) il firmware non libero ( in genere non aderente alla DFSG )  è stato eliminato dal kernel  e disponibile in pacchetti specifici.  Che sarà cura dell’utente finale installare.

Da questo consegue che gli utenti debian si devono familiarizzare con il messaggio

Possible missing firmware /lib/firmware/....

nello specifico,  in debian 9 Stretch:

W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-3.fw for module r8169 -

Nell’esempio si viene informati  della possibile mancanza del firmware per la scheda di rete realtek.  Il firmware evidenziato come mancante è presente nel pacchetto firmware-realtek repository non-free.

In generale per individuare le periferiche presenti nel sistema per le quali  potrebbe mancare il firmware specifico si posso utilizzare i seguenti comandi

#   dmesg | grep -Ei "firmware|fw"
# dmesg | grep -Ei "firmware|fw"
[   0.977624] GHES: APEI firmware first mode is enabled by APEI bit and WHEA _OSC.
[  10.724849] r8169 0000:07:00.0: firmware: failed to load rtl_nic/rtl8168e-3.fw (-2)
[   10.724916] r8169 0000:07:00.0: Direct firmware load for rtl_nic/rtl8168e-3.fw failed with error -2
[   10.724921] r8169 0000:07:00.0 enp7s0: unable to load firmware patch rtl_nic/rtl8168e-3.fw (-2)
[ 1191.273802] usb 2-1.2: firmware: direct-loading firmware dvb-usb-af9035-02.fw
[ 1191.273811] usb 2-1.2: dvb_usb_v2: downloading firmware from file 'dvb-usb-af9035-02.fw'
[ 1191.580393] dvb_usb_af9035 2-1.2:1.0: firmware version=11.5.9.0
[ 1191.616259] af9033 3-0038: firmware version: LINK 11.5.9.0 - OFDM 5.17.9.1

oppure

# update-initramfs -u -k all
# update-initramfs -u -k all

update-initramfs: Generating /boot/initrd.img-4.9.0-6-amd64
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8107e-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8107e-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168h-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168h-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168g-3.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168g-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8106e-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8106e-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8411-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8411-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8402-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168f-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168f-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8105e-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-3.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-3.fw for module r8169
...

Talvolta potrebbe essere utile controllare il contenuto della cartella firmware-missing  in cui sono presenti  informazioni sul firmware mancante

# ls /run/udev/firmware-missing/

Per ricercare il pacchetto con il firmware in debian 9 si devono dapprima inserire i repository contrib e non-free in /etc/apt/sources.list

# vi /etc/apt/sources.list
o
# nano/etc/apt/sources.list

la riga

deb http://ftp.it.debian.org/debian/ stretch main

diventerà

deb http://ftp.it.debian.org/debian/ stretch main contrib non-free

Si può aggiungere la riga con  i nuovi repository direttamente da terminale con

# echo "deb http://ftp.it.debian.org/debian/ stretch contrib non-free" | tee -a /etc/apt/sources.list

Adesso il pacchetto con il firmware può essere cercato con il comando

apt search

nel caso dell’esempio serve il firmware rtl8168e-3.fw  quindi dopo l’update per l’aggiunta dei nuovi repository cercheremo

# apt update && apt search rtl8168e-3.fw
Sorting... Done
Full Text Search... Done
firmware-realtek/stable,now 20161130-3 all [installed]
  Binary firmware for Realtek wired/wifi/BT adapters

quindi per installare il pacchetto al solito

# apt install firmware-realtek

per verificare

# update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-4.9.0-6-amd64
update-initramfs: Generating /boot/initrd.img-4.9.0-3-amd64

 

Risorse:

 

 

 

Installare VirtualBox in Debian 9 “Stretch”

Il software di virtualizzazione multipiattaforma di Oracle Virtualbox 5.1.xx non è presente  nel repository ufficale di Debian 9.  Può essere installato però ricorrendo al repository  backports sezione contrib. Per abilitare backport :

su

echo "# backports" >> /etc/apt/sources.list
echo "deb http://ftp.debian.org/debian stretch-backports contrib" >> /etc/apt/sources.list

quindi procedere con l’update dei pacchetti con il solito

apt update

installare virtualbox con il seguente comando:

apt install -t stretch-backports virtualbox 

o anche più semplicemente

apt install virtualbox

VirtualBox 5.1

 

Per installare VirtualBox si può utilizzare anche il repository specifico di Oracle

Per aggiungere il repository:

echo "# Oracle Virtualbox repository " >> /etc/apt/sources.list
echo "deb http://download.virtualbox.org/virtualbox/debian stretch contrib" >> /etc/apt/sources.list

Aggiungere Oracle Virtualbox public key con

wget https://www.virtualbox.org/download/oracle_vbox_2016.asc
apt-key add oracle_vbox_2016.asc

per installare

apt-get update
apt-get install virtualbox-5.1

 

Risorse:

 

 

Systemd come controllare che un servizio sia in esecuzione in linux

Oramai praticamente tutte le nuove release delle distribuzioni Linux hanno abbandonando il denome init ( SystemV init o SysV init  ) per passare al demone systemd come controllore dei servizi e del sistema.

Uno dei principali vantaggi di systemd è la capacità di avviare i processi in parallelo (aggressive parallelization capabilities). Con init infatti i processi vengono avviati in modo seriale e un task può essere avviato solo quando il precedente si è concluso correttamente.  Come per avviene per init systemd è il primo processo che sia avvia ed è il padre di tutti i processi nati dopo successivamente, tipicamente ha assegnato pid=1.

A differenza di SysV init,  systemd init è responsabile del mount point, della crittografia, di syslog, etc  superando così le funzionalità di un init system di base. La gran parte delle azioni di systemd si svolge agendo su risorse denominate  “units”. Le units sono definite da files noti come unit files. Il tipo di unit files è in genere riconoscibile a partire dall’estensione del file. Conseguentemente lo unit file di un servizio avrà l’estensione .service: il servizio di dbase postgresql  avrà come target uno unit files del tipo postgresql.service.

Il comando utilizzato per controllare systemd è systemctl.

Conseguentemente la situazione abbastanza frequente di verificare che un servizio o demone  (service o daemon)  sia in esecuzione ad esempio: apache ,mysqld, postrgresql, samba, ssh, nfs, rsync, cron, syslogd, etc. in un sistema Linux con systemd init sarà diversa da quella con SysV init.

Controllare che un servizio sia attivo: comparazione tra SysV init e systemd init

SysV init

per controllare che il servizio postgresql sia in esecuzione con SysV init utilizziamo il comando

service nome-del-servizio status
per postgresql
service postgresql status

ubuntu  12

$ service postgresql status
9.1/main (port 5432): online

per dettagli sul controllo dello stato di un servizio in SysV init fare riferimento al post:

Come controllare che un servizio (service) sia in esecuzione in linux  

Systemd init

per controllare che un servizio con systemd  sia in esecuzione è necessario conoscere lo unit file di riferimento e utilizzare il comando systemctl

systemctl status nome-unit-file.estensione
per postgresql 
systemctl status postgresql@9.6-main.service

debian 9

# systemctl status postgresql@9.6-main.service
 postgresql@9.6-main.service - PostgreSQL Cluster 9.6-main
   Loaded: loaded (/lib/systemd/system/postgresql@.service; disabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-04-28 16:23:29 CEST; 4min 36s ago
  Process: 19786 ExecStop=/usr/bin/pg_ctlcluster --skip-systemctl-redirect -m fast 9.6-main stop (code=exited, status=0/SUCCESS)
  Process: 19792 ExecStart=postgresql@9.6-main --skip-systemctl-redirect 9.6-main start (code=exited, status=0/SUCCESS)
 Main PID: 19799 (postgres)
    Tasks: 6 (limit: 4915)
   CGroup: /system.slice/system-postgresql.slice/postgresql@9.6-main.service
           ├─19799 /usr/lib/postgresql/9.6/bin/postgres -D /var/lib/postgresql/9.6/main -c config_file=/etc/postgresql/9.6/main/postgresql.conf
           ├─19801 postgres: 9.6/main: checkpointer process   
           ├─19802 postgres: 9.6/main: writer process   
           ├─19803 postgres: 9.6/main: wal writer process   
           ├─19804 postgres: 9.6/main: autovacuum launcher process   
           └─19805 postgres: 9.6/main: stats collector process   

Apr 28 16:23:27 deb9 systemd[1]: Starting PostgreSQL Cluster 9.6-main...
Apr 28 16:23:29 deb9 systemd[1]: Started PostgreSQL Cluster 9.6-main.

come si può osservare l’outup è decisamente più articolato di sysV.

Unit file 

Per visualizzare il contenuto dello unit file responsabile dell’avvio del servizio postgresql si può utilizzare il comando: systemctl cat nome-unit

systemctl cat postgresql@9.6-main.service

# /lib/systemd/system/postgresql@.service
# systemd service template for PostgreSQL clusters. The actual instances will
# be called "postgresql@version-cluster", e.g. "postgresql@9.3-main". The
# variable %i expands to "version-cluster", %I expands to "version/cluster".
# (%I breaks for cluster names containing dashes.)

[Unit]
Description=PostgreSQL Cluster %i
ConditionPathExists=/etc/postgresql/%I/postgresql.conf
PartOf=postgresql.service
ReloadPropagatedFrom=postgresql.service
Before=postgresql.service

[Service]
Type=forking
# @: use "postgresql@%i" as process name
ExecStart=@/usr/bin/pg_ctlcluster postgresql@%i --skip-systemctl-redirect %i start
ExecStop=/usr/bin/pg_ctlcluster --skip-systemctl-redirect -m fast %i stop
ExecReload=/usr/bin/pg_ctlcluster --skip-systemctl-redirect %i reload
PIDFile=/var/run/postgresql/%i.pid
SyslogIdentifier=postgresql@%i
# prevent OOM killer from choosing the postmaster (individual backends will
# reset the score to 0)
OOMScoreAdjust=-900
# restarting automatically will prevent "pg_ctlcluster ... stop" from working,
# so we disable it here. Also, the postmaster will restart by itself on most
# problems anyway, so it is questionable if one wants to enable external
# automatic restarts.
#Restart=on-failure
# (This should make pg_ctlcluster stop work, but doesn't:)
#RestartPreventExitStatus=SIGINT SIGTERM

[Install]
WantedBy=multi-user.target

Visualizzare le dipendenze di una unit

In systemd init è possibile visualizzare anche tutte le dipendenze di un servizio quale postgresql con il comando systemctl list-dependecies postgresql@96-main.service.

systemctl cat systemctl list-dependencies  postgresql@9.6-main.service
postgresql@9.6-main.service
 ├─system-postgresql.slice
 └─sysinit.target
●   ├─apparmor.service
   ├─dev-hugepages.mount
   ├─dev-mqueue.mount
●   ├─keyboard-setup.service
   ├─kmod-static-nodes.service
   ├─lvm2-lvmetad.socket
   ├─lvm2-lvmpolld.socket
   ├─lvm2-monitor.service
   ├─proc-sys-fs-binfmt_misc.automount
   ├─sys-fs-fuse-connections.mount
●   ├─sys-kernel-config.mount
   ├─sys-kernel-debug.mount
   ├─systemd-ask-password-console.path
●   ├─systemd-binfmt.service
●   ├─systemd-hwdb-update.service
   ├─systemd-journal-flush.service
   ├─systemd-journald.service
●   ├─systemd-machine-id-commit.service
   ├─systemd-modules-load.service
   ├─systemd-random-seed.service
   ├─systemd-sysctl.service
   ├─systemd-timesyncd.service
   ├─systemd-tmpfiles-setup-dev.service
   ├─systemd-tmpfiles-setup.service
   ├─systemd-udev-trigger.service
   ├─systemd-udevd.service
   ├─systemd-update-utmp.service
   ├─cryptsetup.target
   ├─local-fs.target
   │ ├─-.mount
   │ ├─media-ArchivioR.mount
   │ ├─media-Home_Dati.mount
●   │ ├─systemd-fsck-root.service
   │ └─systemd-remount-fs.service
   └─swap.target
     └─dev-sda15.swap

Verificare lo stato di tutti i servizi in systemd init – linux

SysV init

Per verificare lo stato di tutti i servizi presenti un sistema sysV init basta usare l’opzione –status-all

$ service --status-all

In pratica –status-all consente di vedere  i servizi installati.

systemd 

Come già affermato systemd gestisce un numero più elevato di funzionalità rispetto a sysV quindi la visualizzazione di tutte le unit diventa una schermata piuttosto estesa.

In questo caso conviene filtrare le units chiedendo di visualizzare sono le unit di tipo servizio. Per visualizzare tutte le units che systemd può gestire si usa il comando

# systemctl list-units

per restringere il campo a quelle di tipo service aggiungere l’opzione –type=service 

# systemctl list-units --type=service
systemctl list-units --type=service
  UNIT                                                                                      LOAD   ACTIVE SUB     DESCRIPTION                                                                  
  alsa-restore.service                                                                      loaded active exited  Save/Restore Sound Card State                                                
  avahi-daemon.service                                                                      loaded active running Avahi mDNS/DNS-SD Stack                                                      
  binfmt-support.service                                                                    loaded active exited  Enable support for additional executable binary formats                      
  colord.service                                                                            loaded active running Manage, Install and Generate Color Profiles                                  
  console-setup.service                                                                     loaded active exited  Set console font and keymap                                                  
  cron.service                                                                              loaded active running Regular background program processing daemon                                 
  cups-browsed.service                                                                      loaded active running Make remote CUPS printers available locally                                  
  cups.service                                                                              loaded active running CUPS Scheduler                                                               
  dbus.service                                                                              loaded active running D-Bus System Message Bus                                                     
  ebtables.service                                                                          loaded 
...                                                               loaded active exited  Set the console keyboard layout                                              
  kmod-static-nodes.service                                                                 loaded active exited  Create list of required static device nodes for the current kernel           
  libvirt-guests.service                                                                    loaded active exited  Suspend/Resume Running libvirt Guests                                        
  libvirtd.service                                                                          loaded active running Virtualization daemon                                                        
  lightdm.service                                                                           loaded active running Light Display Manager                                                        
...                                                                     loaded active exited  Raise                                                            
● nginx.service                                                                             loaded failed failed  A high performance web server and a reverse proxy server                     
  polkit.service                                                                            loaded active running Authorization Manager                                                        
  postgresql.service                                                                        loaded active exited  PostgreSQL RDBMS                                                             
  postgresql@9.6-main.service                                                               loaded active running PostgreSQL Cluster 9.6-main                                                  
  rpcbind.service
.....
LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

runlevel e System state

SysV init runlevel

In SysV init il modo più semplice per visualizzare i servizi attivi in un dato runlevel è digitare un comando del tipo:

sudo ls -l /etc/rc(num-run-level).d/

systemd init System state ( runlevel )

In systemd il concetto di runlevel è sostituito dal concetto di System State o punto di sincronizzazione.  Per definire un determinato System State vengono utilizzati degli unit file particolari con estensione .target.  Uno unit.target garantirà di avere disponibile tutti gli units che definiscono uno specifico System State senza doversi preoccupare dei singoli elementi. Se si utilizza lo unit sound.target questo starà ad indicare che servizi per l’audio sono pronti all’audio.

In systemd i System State sono più numerosi dei runlevel quelli comparabili con i runlevel possono essere elencati con il comando:

systemctl list-units --type=target
systemctl list-units --type=target
UNIT                       LOAD   ACTIVE SUB    DESCRIPTION              
basic.target               loaded active active Basic System             
cryptsetup.target          loaded active active Encrypted Volumes        
getty.target               loaded active active Login Prompts            
graphical.target           loaded active active Graphical Interface      
local-fs-pre.target        loaded active active Local File Systems (Pre) 
local-fs.target            loaded active active Local File Systems       
multi-user.target          loaded active active Multi-User System        
network-online.target      loaded active active Network is Online        
network-pre.target         loaded active active Network (Pre)            
network.target             loaded active active Network                  
paths.target               loaded active active Paths                    
remote-fs-pre.target       loaded active active Remote File Systems (Pre)
remote-fs.target           loaded active active Remote File Systems      
rpcbind.target             loaded active active RPC Port Mapper          
slices.target              loaded active active Slices                   
sockets.target             loaded active active Sockets                  
sound.target               loaded active active Sound Card               
swap.target                loaded active active Swap                     
sysinit.target             loaded active active System Initialization    
time-sync.target           loaded active active System Time Synchronized 
timers.target              loaded active active Timers                   
virt-guest-shutdown.target loaded active active Libvirt guests shutdown  

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

22 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

Benchè il concetto di System State conseguito con gli unit.target sia decisamente più flessibile del concetto di runlevel è possibile evidenziare alcuni target che sono in relazione proprio i principali runlevel di SysV. A questo proposito si può precisare  sono diponibili anche unit  dal nome evocativo: 

systemctl list-units-files --type=target
UNIT FILE                  STATE              
...
runlevel0.target           disabled
runlevel1.target           disabled
runlevel2.target           static  
runlevel3.target           static  
runlevel4.target           static  
runlevel5.target           static  
runlevel6.target           disabled            
...
59 unit files listed.

Elencare i servizi abilitati in Systemctl

Per elencare tutti i servizi abilitati,  enabled,  si può far ricorso al solito greo

systemctl list-unit-files | grep enabled

es:

# systemctl list-unit-files | grep enabled
acpid.path                                                             enabled  
cups.path                                                              enabled  
apache2.service                                                        enabled  
atd.service                                                            enabled  
autovt@.service                                                        enabled  
avahi-daemon.service                                                   enabled  
clamav-freshclam.service                                               enabled  
console-setup.service                                                  enabled  
cron.service                                                           enabled         
...
...

per elencare i servizi in esecuzioni utilizzare il filtro running

systemctl  | grep running

es:

# systemctl | grep running
  proc-sys-fs-binfmt_misc.automount              loaded active running   Arbitrary Executable File Formats File System Automount Point                              
  acpid.path                                     loaded active running   ACPI Events Check                                                                          
  cups.path                                      loaded active running   CUPS Scheduler                                                                             
  init.scope                                     loaded active running   System and Service Manager                                                                 
  session-877.scope                              loaded active running   Session 877 of user maurizio        
...      
...

Comparazione tra runlevel e target ( System state) :

  • Run level 3 è emulato dal target multi-user.target;
  • Run level 5 è emulato da target graphycal.target;
  • runlevel3.target  è un link simbolico a multi-user.target;
  • runlevel5.target è un link simbolico a graphycal.target.

Comparazione tra alcuni comandi SysV init (service)  e systemd init (systemctl)

systemctl start sshd.service service sshd start start
systemctl status sshd.service service sshd status status
systemctl stop sshd.service service sshd stop stop
systemctl reload sshd.service service sshd reload reload
ls /lib/systemd/system/*.service /etc/systemd/system/*.service ls /etc/rc.d/init.d/ lista tutti i servizi avviabili
systemctl enabled sshd.service service sshd enabled attivare un servizio al prossimo boot

Avviare e abilitare un servizio al prossimo boot

Per avviare un servizio come il webserver apache2 e come abilitarlo al riavvio al successvio boot

systemctl start apache2 

systemctl enable apache2

Risorse: