VmWare e UUID

Dopo aver installato un Ubuntu server in un ambiente gestito da VmWare ho verificato che il log produceva diversi errori…

prod multipathd[794]: sdb: failed to get sysfs uid: Invalid argument
prod multipathd[794]: sdb: failed to get sgio uid: No such file or directory
prod multipathd[794]: sda: add missing path
prod multipathd[794]: sda: failed to get udev uid: Invalid argument
prod multipathd[794]: sda: failed to get sysfs uid: Invalid argument
prod multipathd[794]: sda: failed to get sgio uid: No such file or directory
prod multipathd[794]: sdb: add missing path
prod multipathd[794]: sdb: failed to get udev uid: Invalid argument
prod multipathd[794]: sdb: failed to get sysfs uid: Invalid argument
prod multipathd[794]: sdb: failed to get sgio uid: No such file or director

cercando in rete ho trovato:

By default VMWare doesn’t provide information needed by udev to generate /dev/disk/by-id.
This can be done by setting the following:
Start the vSphere Client, and log in to a vCenter Server.
Select Virtual Machines and Templates and click the Virtual Machines tab.
Right-click the virtual machine for which you are enabling the disk UUID attribute, and select Power > Power Off.
The virtual machine powers off.
Right-click the virtual machine, and click Edit Settings.
Click the Options tab, and select the General entry in the settings column.
Click Configuration Parameters. The Configuration Parameters window appears.
Click Add Row.
In the Name column, enter disk.EnableUUID.
In the Value column, enter TRUE.
Click OK and click Save.
Power on the virtual machine.

Generatore di firewall per Linux / IpTables

Volendo implementare un firewall sul mio server casalingo, avevo pensato a diverse soluzioni, ufw, firewall-builder e tanti altri, ma nessuno mi faceva capire esattamente cosa e come fare.

L’unico era firewall-builder, ma non è aggiornato da moltissimo tempo, non è assolutamente user-friendly anche se possiede un interfaccia grafica.

Navigando su internet, molto tempo fa, ho trovato un sito che a fronte di semplici click, produceva un file ascii che poteva essere dato in pasto a linux utilizzando solo iptables: il sito per completezza è raggiungibile via http://easyfwgen.morizot.net/gen/

Ho preso il sorgente e dopo averlo modificato ho messo in linea il prodotto finale: al 90% fa quello che dovrebbe fare, ma vi prego di prestare attenzione, in quanto potrebbero esserci degli errori.

L’indirizzo al quale puntare il browser è

http://firewall.corsaro.biz

Speriamo che vi interessi come ha interessato me.

Aggiungere un .png ad un PDF

Avrò cercato ed utilizzato un numero esagerato di volte come porre una firma “digitale” ad un documento sotto Ubuntu, ma ogni volta lo dimentico !

Usando xournal gli step da seguire sono i seguenti:

  • Installare xournal
  • Eseguire xournal
  • Selezionare “Annota PDF” dal menu File e selezionare il file PDF da “firmare”.
  • Click l’icona “Imagine” nella toolbar (sembra la silhouette di una persona).
  • Click sul documento ed appare la finestra di selezione del file grafico da inserire.
  • Selezionare il file PNG che contiene la firma.
  • Ridimensionare e posizionarle il file grafico all’interno del PDF.
  • Selezionare “Esporta in PDF” dal menu di File.

Montare una immagine raw (img)

Con il diffondersi di Rasperry PI, Orange PI, Cubieboartd ed altri micro computerini, il mondo Linux è realmente impazzito e sforna continui aggiornamenti, ma (come mi è capitato oggi) ricompilando un kernel, avevo la necessità di vedere all’interno di un altro img come era stato realizzato l’output su di un led del trigger del carico della CPU.

Sotto Linux è particolarmente semplice (sapendolo …) e sono veramente due comandi: in sostanza bisogna dire al comando mount di partire da un certo punto… Ma da che punto ?

Per prima cosa con fdisk mi faccio dire la struttura dell’immagine:

$fdisk -l debian.img
Disk debian.img: 983 MiB, 1030750208 bytes, 2013184 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Dispositivo Avvio Start Fine Settori Size Id Tipo
debian.img1 2048 26623 24576 12M 83 Linux
debian.img2 26624 1967199 1940576 947,5M 83 Linux

Quindi si vedono due partizioni, entrambe formattate ext4. Per montare la prima bisognerà dire al comando mount di spostarsi di 2048 settori e per la seconda partizione l’offset sarà di 26624 settori!

sudo mount -t ext4 -o loop,offset=$((2048 * 512)) debian.img /mnt/disk

mount -t ext4 -o loop,offset=$((26624 * 512)) imgfile.img /mnt/disk1

Se si dovesse sbagliare l’offset, l’unico errore sarebbe un bel

mount : wrong fs type, bad option, band superblock on /dev/loop,
missing codepage or helper proggram, or other error
In some cases useful info is found in syslog – try
dmesg | tail or so

Da puntualizzare che 512 bytes non va bene per i CD o DVD che hanno il settore di 2352 bytes.

ESP8266

Da quando ho scoperto questo piccolo mostro, me ne sono innamorato… piccolo, potente, con la wifi integrata !! WOW

Solo un piccolo problema: pochi pin in/out, ma con un pezzo di codice è possibile aumentare i pochi pin :

// ******************** CHANGE PIN FUNCTION ********************
pinMode(1, FUNCTION_3); //GPIO 1 swap the pin to a GPIO.
pinMode(3, FUNCTION_3); //GPIO 3 swap the pin to a GPIO.
// ********************
pinMode(1, OUTPUT);
pinMode(3, OUTPUT);

Il codice può essere inserito all’interno di uno scketch di Aruino o all’interno del framework Sming.

Ed altri due pin per attivare o disattivare attuatori !!

Aggiornamento PostgreSQL

l’aggiornamento di PostgreSQL dalla versione 11 alla 12 (per esempio)può essere fatto con i soliti

sudo apt-get update
sudo apt-get install postgresql-12 postgresql-server-dev-12

installando il nuovo pacchetto e modificando i file

/etc/postgresql/11/main/postgresql.conf
/etc/postgresql/12/main/postgresql.conf

modificando le porte, ma i dati ?
Dopo aver stoppato il servizio con un

sudo systemctl stop postgresql.service

eseguire questo comando come utente postgres

sudo su postgres
/usr/lib/postgresql/12/bin/pg_upgrade \
  --old-datadir=/var/lib/postgresql/11/main \
  --new-datadir=/var/lib/postgresql/12/main \
  --old-bindir=/usr/lib/postgresql/11/bin \
  --new-bindir=/usr/lib/postgresql/12/bin \
  --old-options '-c config_file=/etc/postgresql/11/main/postgresql.conf' \
  --new-options '-c config_file=/etc/postgresql/12/main/postgresql.conf' \
  --check

una volta che tutto è a posto, possiamo eseguire la migrazione rieseguendo il comando di prima, ma SENZA il –check, cioè

/usr/lib/postgresql/12/bin/pg_upgrade \
  --old-datadir=/var/lib/postgresql/11/main \
  --new-datadir=/var/lib/postgresql/12/main \
  --old-bindir=/usr/lib/postgresql/11/bin \
  --new-bindir=/usr/lib/postgresql/12/bin \
  --old-options '-c config_file=/etc/postgresql/11/main/postgresql.conf' \
  --new-options '-c config_file=/etc/postgresql/12/main/postgresql.conf'

Avremo in questo modo fatto il dump del db, verificato la configurazioe ed importati i db della 11.

Ora si possono modificare i file di configurazione postgresql.conf e mettere le porte giuste.
Far ripartire il db con

sudo systemctl start postgresql.service

e verificare quale versione di postgresql è in esecuzione con questi comandi

sudo su postgres
psql -c “SELECT version();”
./analyze_new_cluster.sh
exit

infine fare un pò di pulizia

apt list –installed | grep postgresql
sudo apt-get remove postgresql-11 postgresql-server-dev-11
sudo rm -rf /etc/postgresql/11/
sudo su postgres
./delete_old_cluster.sh

Fatto !

Reinstallazione OCI

Dopo aver fatto l’aggiornamento ad Ubiuntu 20.04 lts, mi sono reso conto che non funzionava più la mia paginetta web che prendeva i dati dal db oracle.

Il problema, probabilmente, durante la fase di avanzamento della versione, qualcosa non è andata come doveva.

Prima un bel

pecl channel-update pecl.php.net

per aggiornare come riportato

WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update

poi con

pecl install oci8

ho iniziato la compilazione ed ho inserito

instantclient,/usr/lib/oracle/19.3/client64/lib/

quando mi ha chiesto il path delle librerie, ed alla fine

Build process completed successfully
Installing ‘/usr/lib/php/20190902/oci8.so’
install ok: channel://pecl.php.net/oci8-2.2.0
configuration option “php_ini” is not set to php.ini location
You should add “extension=oci8.so” to php.ini
# vi /etc/php/7.4/cli/php.ini
# vi /etc/php/7.4/apache2/php.ini
# systemctl restart apache2.service

e tutto è andato a posto.

do-release-upgrade e screen

Stavo facendo l’aggiornamento e la connessione cade: per fortuna screen era in esecuzione:

# screen -list
There is a screen on:

2184.ubuntu-release-upgrade-screen-window   (09/29/2020 02:38:06 PM)    (Detached)

1 Socket in /run/screen/S-root.

e con il magioco

# screen -d -r root/2184.ubuntu-release-upgrade-screen-window

tutto è stato recuperato!

Telegram e public ChatID

Avendo creato un piccolo bot con Telegram, avevo il bisogno di inviare su di un gruppo le elaborazioni dei consumi elettrici. Trovare la chatID “uno ad uno” è facile, mentre la chatID di un gruppo pubblico è più complicata.

In ogni caso:

  1. Aggiungere il BOT al gruppo
  2. ottenere gli aggiornamenti del BOT tramite:
    https://api.telegram.org/bot<YourBOTToken>/getUpdates
    per esempio
    https://api.telegram.org/bot123456789:pippopippopippopippo/getUpdates
  3. il campo”chat” riporta l’ID che ci interessa:
    {“update_id”:8393,”message”:{“message_id”:3,”from”:{“id”:7474,”first_name”:”AAA”},”chat”:{“id”:-999999,”title”:””},”date”:25497,”new_chat_participant”:{“id”:71,”first_name”:”NAME”,”username”:”YOUR_BOT_NAME”}}}
    se invece ottieni
    {“ok”:true,”result”:[]}
    devi provare ad inviare un comando anche errato (per esempio /test) sul canale del BOT per ottenere l’ID che DEVE essere NEGATIVO (con il segno – davanti) altrimenti la chat indicata non è di gruppo.

Verifica Freeradius

stavo installando un nuovo server FreeRadius e dovevo verificare il corretto funzionamento.

In teoria andrebbe bene anche il semplice

radtest userid password 127.0.0.1 10 testing123

Ma la configurazione del server impone anche l’uso di attributi per l’autenticazione, nel mio caso il Calling-Station-Id

Ho perso diverso tempo, poi ho trovato la soluzione:

echo "User-Name=userid,User-Password=password,Calling-Station-Id=statioid,Framed-Protocol=PPP " | radclient localhost:1812 auth testing123