Ve lo racconterò.

Elena, oggi compi un mese e tua sorella ti canta le canzoncine quando tu fai i tuoi versetti. Ogni tanto mi dice che sei una sorella buona. Io sorrido.

Sei nata in un momento stranissimo della storia di questo pianeta. I tuoi zii, i tuoi cugini, i tuoi nonni, ti hanno vista solamente in videochiamate che li privano del magnifico odore che fai. Siamo tutti interconnessi e iper-distanti.

Siamo presi mentalmente da altro, anche se io all’altro cerco di pensare il meno possibile. Credo che l’ultima volta che abbiamo acceso la TV fosse Dicembre (ma non mi lamento di pagare il canone, tranquilli) e non abbiamo intenzione di farlo ora. Ci teniamo informati e ho la netta convinzione che l’informazione via internet sia decisamente più precisa, specialmente in questo periodo in cui i tuttologi sbocciano a primavera. Bisogna saper selezionare le fonti ovviamente.

Lavoro tanto, paradossalmente questo smart working mi ha privato di un limite: il momento in cui esci dall’ufficio e dimentichi progetti e impegni. Per il resto ero già abituato a lavorare in mobilità, così a parte il mega-monitor dell’ufficio non mi manca nulla.

Il lavoro in questi giorni è molto più fluido, per certi versi più bello. Le pause sono diverse: tè coi biscotti, passeggiata in giardino per respirare un po’ d’aria e due tiri con la palla con Giorgia. Vuoi mettere rispetto ad un caffè bruciato davanti ad una macchinetta?

Casa-lavoro-famiglia è un tutt’uno che si mescola continuamente. Mi è capitato di interrompere una conference call con alcuni colleghi perché «scusate, si è svegliata mia figlia». Giorgia ama i risvegli lenti, gli abbracci in poltrona nella sua stanza e a me sembra un privilegio poterle concedere quella coccola.

E’ uno stato di grazia e uno stato d’ansia, tutto insieme. Abbiamo cibo per i prossimi mesi e viaggiare non mi manca (faccio un lavoro in cui i viaggi non mancano e ho spesso il terrore di una vita in cui la routine non viene più spezzata da trasferte). L’orso che è in me però si sta godendo questo momento nonostante là fuori il mondo vada a rotoli.

A proposito, Giorgia ha capito che là fuori tante persone hanno la febbre e per questo non andiamo al parco giochi o a mangiare un gelato (Giorgia ama il gelato al lampone). Un po’ invidio la vostra età e un po’ capisco perché da piccoli ci veniva detto di non aver fretta di crescere: il mondo è più semplice e le cose brutte si affrontano solo quando arrivano.

Grazie, ad entrambe.

Emanuele

A porte chiuse.

Avevo già vissuto un compleanno in solitaria. Era il giorno dei miei trent’anni ed ero in Cina per lavoro. Festeggiai facendo un giro di Hangzhou, una tranquillissima città costruita intorno ad un lago. Fu una bella giornata nonostante a farmi compagnia – un po’ per via del fuso orario e un po’ per via delle difficoltà di connessione – ci fossero solo due auricolari e qualche playlist scaricata localmente sul cellulare.

Sette anni dopo, un compleanno stranissimo in famiglia, circondato dalle mie donne e dal loro affetto ma senza grandi schiamazzi, senza amici, senza bottiglie da stappare.

Elena è arrivata al mondo in un momento che finirà nei libri di storia. Ho la sensazione che questa crisi umanitaria sia solo l’alba di una rivoluzione sociale non indifferente che – se mi permettete un desiderio soffiando due candeline – mi auguro possa diventare quanto prima una pagina da leggere per non dimenticare.

We are the champions, my friends
And we’ll keep on fighting, till the end.

Emanuele

Stella stellina.

Da alcune settimane Giorgia ama ascoltare e cantare questa canzoncina. Io mi sto abituando all’idea di dover imparare – inevitabilmente – canzoni che ormai facevano parte di un capitolo distante del mio percorso.

Alle 9 e 05 del 27 Febbraio una nuova stellina si è aggiunta per davvero alla nostra famiglia e così questa canzone mi è tornata immediatamente alla mente.

In un periodo in cui il mondo sembra confuso e incupito, questa vita nuova è musica e luce nelle nostre giornate.

Benvenuta Elena e grazie.

Emanuele

Come Amazon sa così tanto di te

«Tutti abbiamo bisogno di spazi privati dove non siamo osservati» dice il venture capitalist Roger McNamee, che conobbe Bezos a metà degli anni 90 durante una vendita del leader di Amazon ad un fondo della Silicon Valley.

«Un posto in cui possiamo essere noi stessi nel modo più sincero senza paura di essere visti o spiati».

«E‘ nella strategia di business di Amazon con Alexa, ma anche con i videocitofoni Ring, trasformare questi santuari e convertirli in spazi pubblici».

La gente pensa: “Hey, rinuncio ad un po’ di dati personali per un servizio che mi piace davvero”.

«C’è stato un tempo in cui questo è stato vero. Ma cosa sta accadendo adesso è molto più invasivo e manipolativo».

Estratto da un bel report della BBC inglese «Why Amazon knows so much about you» che racconta come Amazon si è trasformata dall’essere un negozio di libri ad avere informazioni sulle nostre vite.

Emanuele

Amazon registra ogni digitazione.

Amazon appears to be tracking every tap on Kindle. I just got my data back and there are 90K rows of this pic.twitter.com/wVCSXCTVwv

Adrianne Jeffries (@adrjeffries) January 28, 2020

Le domande che mi pongo sono:

È necessario registrare questi dati? Qualora fossero utili al funzionamento dell’applicazione, non è possibile mantenere queste registrazioni sul dispositivo invece di conservarle online? Se invece fossero usate per tenere sincronizzati più device, è realmente necessario conservarle a lungo termine piuttosto che eliminarle dopo che la sincronizzazione è avvenuta?

Amazon certamente fa analisi del tempo di lettura, dell’interesse verso determinate pagine (e determinate frasi/keyword), del tempo speso sul Kindle per cercare informazioni e così via.

Perché ogni dispositivo elettronico che prendiamo in mano, ormai, deve analizzare il nostro comportamento?

Sono videocamere piazzate su di noi.

La tecnologia può fare a meno di questo continuo tracking, è esclusivamente l’ingordigia del capitalismo a richiedere lo sviluppo di questi sistemi. Certi servizi possono essere offerti senza trasformarci in prodotti ma queste grandi aziende cercano continuamente di convincerci che la raccolta dati sia necessaria e inevitabile.

La sicurezza e la privacy non dovrebbero essere un privilegio disponibile solo ad una élite tecnicamente preparata.

Emanuele

Installare Nextcloud con nginx, PHP7.4 e MySQL8.

Amo avere il controllo dei miei strumenti e anche il mio cloud non fa eccezione. Il plugin fornito da FreeNAS (provatelo, non tornerete mai più indietro) era perfetto ma limitante.

Ecco dunque come installare manualmente Nextcloud su PHP7.4 e MySQL8.

1. Su FreeNAS creiamo una jail con iocage e una volta entrati aggiorniamo i suoi repository

pkg update && pkg upgrade

Installiamo i pacchetti necessari al funzionamento di nextcloud

pkg install php74-mysqli-7.4.0 php74-ctype-7.4.0 php74-curl-7.4.0 php74-dom-7.4.0 php74-gd-7.4.0 php74-iconv-7.4.0 php74-json-7.4.0 php74-iconv-7.4.0 php74-mbstring-7.4.0 php74-openssl-7.4.0 php74-posix-7.4.0 php74-session-7.4.0 php74-simplexml-7.4.0 php74-xmlreader-7.4.0 php74-xmlwriter-7.4.0 php74-zip-7.4.0 php74-zlib-7.4.0 php74-pdo_mysql-7.4.0 php74-fileinfo-7.4.0 php74-bz2-7.4.0 php74-intl-7.4.0 php74-imap-7.4.0 php74-pecl-imagick-im7-3.4.4 php74-xml-7.4.0 php74-filter-7.4.0 php74-readline-7.4.0 php74-pdo-7.4.0 php74-pecl-APCu

Installiamo MySQL8

pkg install mysql80-server-8.0.17

Installiamo il webserver (e qualche utility)

pkg install nginx nano sudo

Mettiamo tutto in auto-start nella jail

sysrc -f /etc/rc.conf nginx_enable="YES"
sysrc -f /etc/rc.conf mysql_enable="YES"
sysrc -f /etc/rc.conf php_fpm_enable="YES"

2. Configuriamo i local PATH per PHP modificando il file www.conf

nano /usr/local/etc/php-fpm.d/www.conf

Rimuoviamo il commento a

env[PATH] = /usr/local/bin:/usr/bin:/bin

3. Avviamo il server SQL e avviamo la procedura di messa in sicurezza di base

service mysql-server start
mysql_secure_installation

Qui verrà richiesto il livello di sicurezza e la password per l’utente root e una serie di domande alle quali potrete rispondere sempre YES 😉

Creiamo un utente nel db di nextcloud modificando prima la modalità di autenticazione (MySQL8 introduce una nuova modalità non ancora supportata da nextcloud)

nano /usr/local/etc/mysql/my.cnf
default_authentication_plugin=mysql_native_password (da inserire dentro sezione mysqld)

Effettuiamo il login sul server MySQL con l’utente di root creato al punto 7

mysql -u root -p
Password:
create database nextcloud; 
create user 'dbadmin'@'localhost' identified by '<password-per-utente-dbadmin>';
grant all privileges on nextcloud.* to 'dbadmin'@'localhost';
flush privileges;
quit;

4. Richiediamo un nuovo certificato per far girare il web server su HTTPS:

mkdir /usr/local/etc/ssl/openssl
cd /usr/local/etc/ssl/openssl
openssl req -new > cert.csr

Completata la procedura effettuiamo qualche rename

openssl rsa -in privkey.pem -out key.pem
openssl x509 -in cert.csr -out cert.pem -req -signkey key.pem -days 1825
cat key.pem>>cert.pem
openssl dhparam 2048 -out dhparam.pem

Modifichiamo nginx.conf in modo da utilizzare https

touch /usr/local/etc/nextcloud_ssl.conf
nano /usr/local/etc/nginx/nextcloud_ssl.conf

E inseriamo la configurazione del server in SSL:

server {
   listen 443 ssl http2;
   server_name nextcloud.local;
   ssl_certificate /usr/local/etc/ssl/openssl/cert.pem;
   ssl_certificate_key /usr/local/etc/ssl/openssl/key.pem;
   ssl_prefer_server_ciphers on;
   ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DHE+AES128:!ADH:!AECDH:!MD5;
   ssl_dhparam /usr/local/etc/ssl/openssl/dhparam.pem;
   add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
   #ssl_ciphers         HIGH:!aNULL:!MD5;
 # Path to the root of your installation
   root /usr/local/www/nextcloud/;
 # set max upload size
   client_max_body_size 10G;
   fastcgi_buffers 64 4K;
 # Disable gzip to avoid the removal of the ETag header
   gzip off;
 rewrite ^/caldav(.)$ /remote.php/caldav$1 redirect;   rewrite ^/carddav(.)$ /remote.php/carddav$1 redirect;
   rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
 index index.php;
   error_page 403 /core/templates/403.php;
   error_page 404 /core/templates/404.php;
 location = /robots.txt {
 allow all;
 log_not_found off;
 access_log off;
 }
 location ~ ^/(?:.htaccess|data|config|db_structure.xml|README){
 deny all;
 }
 location / {
 The following 2 rules are only needed with webfinger
 rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
 rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
 rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
 rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
 rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
 try_files $uri $uri/ =404;
 }
 location ~ .php(?:$|/) {
 fastcgi_split_path_info ^(.+.php)(/.+)$;
 include fastcgi_params;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param PATH_INFO $fastcgi_path_info;
 fastcgi_pass unix:/var/run/nextcloud-php-fpm.sock;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_intercept_errors on;
 }
 Adding the cache control header for js and css files
 Make sure it is BELOW the location ~ .php(?:$|/) { block
 location ~* .(?:css|js)$ {
 add_header Cache-Control "public, max-age=7200";
 Add headers to serve security related headers
 add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
 add_header X-Content-Type-Options nosniff;
 add_header X-Frame-Options "SAMEORIGIN";
 add_header X-XSS-Protection "1; mode=block";
 add_header X-Robots-Tag none;
 Optional: Don't log access to assets
 access_log off;
 }
 Optional: Don't log access to other assets
 location ~* .(?:jpg|jpeg|gif|bmp|ico|png|swf)$ {
 access_log off;
 }
 }

Ricordiamoci di fare un include di nextcloud_ssl.conf dentro nginx.conf

nano /usr/local/etc/nginx/nginx.conf
include /usr/local/etc/nginx/nextcloud_ssl.conf; (da scrivere in fondo dentro al file)

5. Configuriamo la cache PHP

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
# Modify opcache settings in php.ini according to Nextcloud documentation (remove comment and set recommended value)
# https://docs.nextcloud.com/server/15/admin_manual/configuration_server/server_tuning.html#enable-php-opcache
sed -i '' 's/.opcache.enable_cli=./opcache.enable_cli=1/' /usr/local/etc/php.ini
sed -i '' 's/.opcache.opcache.file_cache=./opcache.opcache.file_cache=\/tmp\/.opcache\//' /usr/local/etc/php.ini
sed -i '' 's/.opcache.interned_strings_buffer=./opcache.interned_strings_buffer=8/' /usr/local/etc/php.ini
sed -i '' 's/.opcache.max_accelerated_files=./opcache.max_accelerated_files=10000/' /usr/local/etc/php.ini
sed -i '' 's/.opcache.memory_consumption=./opcache.memory_consumption=128/' /usr/local/etc/php.ini
sed -i '' 's/.opcache.save_comments=./opcache.save_comments=1/' /usr/local/etc/php.ini
sed -i '' 's/.opcache.revalidate_freq=./opcache.revalidate_freq=1/' /usr/local/etc/php.ini
# recommended value of 512MB for php memory limit (avoid warning when running occ)
sed -i '' 's/.memory_limit./memory_limit=512M/' /usr/local/etc/php.ini

6. Scarichiamo, estraiamo e modifichiamo i permessi per nextcloud

cd
fetch nextcloud-17.0.2.tar.bz2 https://download.nextcloud.com/server/releases/nextcloud-17.0.1.tar.bz2
tar -jxf nextcloud-17.0.2.tar.bz2
cp -rf nextcloud /usr/local/www/nextcloud
chown -R www:www /usr/local/www/nextcloud/

7. Installiamo nextcloud specificando il dataset nel quale registrare i dati del software e la cartella di destinazione dei file degli utenti

sudo -u www php /usr/local/www/nextcloud/occ  maintenance:install --database "mysql" --database-name "nextcloud"  --database-user "dbadmin" --database-pass "<passsword-utente-dbadmin>" --admin-user "NextCloud_Admin" --admin-pass "<password-utente-NextCloud_Admin>" --data-dir "/mnt/nextcloud"

Nel mio caso, il dataset accessibile alla jail da FreeNAS è stato montato dentro /mnt/nextcloud.

8. Modifichiamo il file di configurazione di NextCloud esplicitando l’indirizzo e l’eventuale DNS al quale verrà contattato

nano /usr/local/www/nextcloud/config/config.php
 e modificare l'array in questo modo:
 array (
   0 => 'localhost',
   1 => '192.168.0.100',
   2 => 'nextcloud.local',
 ),

9. Diamo il via ai servizi e, tramite browser, godiamoci il nostro nuovo cloud pronto ad esser riempito.

service nginx start
service php-fpm start

That’s all folks.

Emanuele

Ridere.

E’ il contesto giusto per farlo?
Sono dell’umore giusto per ridere?
Chi ho di fronte merita una mia risata?
Chi è intorno è pronto ad accoglierla?

Un adulto che decide di ridere compila in pochi istanti una check-list. Tutto deve essere positivo affinché la risata non sia trattenuta, ridimensionata o inghiottita.

I bambini ridono senza troppi perché. Giorgia mi sta mostrando l’innocenza spensierata e ad ogni risata priva di preconcetti io – dentro me – la ringrazio per il grande dono.

Emanuele