Category Archives: Recensione

NixOS

Era la fine del 2005, quando dopo vari pellegrinaggi di distro in distro approdai ad Arch Linux.
Si trattava di una distribuzione relativamente giovane, sviluppata da un programmatore canadese di nome Judd Vinet, il cui primo rilascio ufficiale risale all’11 marzo 2002.
All’epoca si inspirava all’elegante semplicità di Slackware, Crux e dei BSD ed il suo motto era l’acronimo KISS: “Keep It Simple, Stupid”.

Aveva tutto quello che cercavo da una distribuzione Linux:
– AIF (Arch Installation Framework), installer testuale leggero ed intuitivo basato su menù ncurses come quelli di Debian, Slackware o FreeBSD
– pacman, un gestore di pacchetti che installa ed aggiorna software direttamente dalla rete (stile apt)
– boot rapidissimo stile Slackware-BSD
– rc.conf, un file di configurazione unico, come nei BSD con cui gestire tutto il sistema
– abs, l’equivalente dell’albero dei ports dei BSD con cui poter ricompilare e personalizzare il sistema

Verso la fine del 2007 Judd Vinet si ritira dal progetto che passa nelle mani del programmatore statunitense Aaron Griffin e pian piano, nel corso degli anni finisce per perdere tutte le sue caratteristiche originali:

Nel 2012 il passaggio a systemd deprecò l’utilizzo del file di configurazione rc.conf (rete, pacchetti, moduli del kernel).
Tale importante modifica rese inutilizzabile anche il vecchio installer, sarebbe stata necessaria una sua quasi completa riscrittura, cosa che ad oggi non è ancora avvenuta.

Infine, nel 2017, anche “abs” e tutto il sistema di sincronizzazione ed aggiornamento da sorgenti viene dismesso.

Per i nostalgici o per chi non ha idea di cosa stia parlando, questo è un esempio di rc.conf

Stufo e sdegnato per la deriva di questa ottima distribuzione ho cercato conforto altrove.
Il primo pensiero era ricaduto su Slackware, ma per quanto sia affezionato a questo dinosauro mi sono dovuto scontrare con la dura realtà dei fatti: conciliare il vetusto installer di Slack col mio desiderio di organizzare il sistema con partizioni gpt e subvolumi btrfs si è rivelata un’impresa sconcertante.

Scettico, ma spinto dalla curiosità e dalla noia dell’isolamento domestico da COVID-19 ho quindi deciso di dedicarmi allo studio di NixOS.
Si tratta di una distribuzione Linux completamente rivoluzionaria, basata sull’innovativo gestore di pacchetti Nix.

L’approccio di Nix è unico nel suo genere, permette di installare, aggiornare e rimuovere software senza che ci si debba preoccupare delle dipendenze. Il path d’installazione di ogni pacchetto corrisponde al suo hash così da permettere la contemporanea convivenza anche di più versioni dello stesso programma. Gli aggiornamenti sono “atomici”, non vengono scaricati interi pacchetti deb, rpm o tgz, ma solo i file necessari. È inoltre possibile tornare indietro alla configurazione precedente all’installazione di un dato software in maniera semplice ed automatica.

L’aspetto che più entusiasma di questa distribuzione è la possibilità di tornare a gestire in maniera centralizzata tutti gli aspetti attraverso un unico file di configurazione (/etc/nixos/configuration.nix). Diventa semplicissimo replicare un’installazione su più macchine, fare cache dei pacchetti, gestire installazioni su sistemi virtualizzati o creare un supporto d’installazione personalizzato.
Si ha la sensazione di trovarsi di fronte ad un vero e proprio sistema operativo più che ad un assembramento di software, lo scotto da pagare per sfruttare tale potenza è il dover familiarizzare col suo linguaggio. Su NixOS le cose NON si fanno come sugli altri sistemi Linux.

Howto

Acer Altos EasyStore

altos_acer_easystorePrima della diffusione di massa di Ubuntu era sufficiente usare Linux per rientrare nella categoria degli “smanettoni” di computer, oggi per definirsi tali c’è bisogno come minimo di avere in casa un serverino ARM 🙂

Raspberry Pi, OLinuXino, CubieBoard sono solo alcuni dei progetti basati su chip ARM Allwinner che da qualche anno infestano le nostre scrivanie.

Non appagato dall’OLinuXino installato tempo fa per il GOLEM, ho deciso di attrezzarmi anche a casa.

Pur trattandosi di un investimento contenuto, prima di spendere qualche decina di Euro per una scheda nuova, faccio visita alla mia seconda discarica di hardware dismesso preferita: lo scantinato dell’ufficio dove lavora mio padre.
Abbandonato in un angolo trovo un Acer Altos Easystore, un NAS di circa 7 o 8 anni fa che si accende e sembra in eccellenti condizioni, così decido di portarlo a casa per testarlo in maniera più approfondita.

È dotato di 4 hard disk hotswap SATA da 500 GB configurabili in RAID 5, processore ARM XScale-80219, il software è una versione embedded di Linux realizzata dalla FalconStor dove per fortuna è possibile abilitare SSH dall’interfaccia html https://…easystore-name-or-IP…/ssh_controlF.cgi (user: root; password: storage).

Mi piacerebbe compilare qualche nuovo programma per questo sistema, provo con Buildroot, i tentativi vanno a buon fine, ma gli eseguibili prodotti non girano. Dopo qualche ricerca scopro che esistono vari port per ARM, a quanto pare avevo tra le mani un ARM OABI a cui stavo tentando di propinare eseguibili EABI.

Ecco come Debian distingue i port per ARM
– ArmPort: primo port, usa il vecchio ed ora obsoleto ABI (OABI). Primo rilascio Debian 2.2 (Potato), ultimo Debian 5.0 (Lenny).
GNU Triplet: arm-linux-gnu

– ArmEabiPort: nuovo port, usa il nuovo ABI (EABI), supporta ARM v4t e superiori. Primo rilascio con Debian 5.0 (Lenny).
GNU Triplet: arm-linux-gnueabi

– ArmHardFloatPort: l’ultimo port a 32-bit, usa la versione hard-float del nuovo ABI (EABI), supporta ARM v7 e superiori. Primo rilascio con Debian 7.0 (Wheezy).
GNU Triplet: arm-linux-gnueabihf

– Arm64Port: ultimissimo port per ARMv8 a 64-bit. Sarà rilasciato con Debian 8.0 (Jessie).
GNU Triplet: aarch64-linux-gnu

Port non ufficiali
– Raspbian: usa la versione hard-float del nuovo ABI (EABI) come armhf, ma per ARM v6. Disponibile su Debian Wheezy e Jessie. Primariamente, ma non esclusivamente, sviluppata per il Raspberry Pi.
GNU Triplet: arm-linux-gnueabihf

– armeb: port Big-endian OABI per linksys NSLU2 e simili, adesso abbandonato.

Provo a compilare rsync su una vecchia versione di buildroot supportante la modalità OABI e funziona!
Per fare prima, per altri programmi, spacchetto direttamente file deb attinti dai repositori ARM di Debian Lenny (facendo attenzione a portarmi dietro anche le eventuali librerie).
Ottengo un sistema discretamente funzionante, ma non riesco però a farci funzionare un server DLNA. Piuttosto che rinunciare a collegare il NAS al lettore DVD decido di spulciare la rete alla ricerca di qualche firmware customizzato per questo trabiccolo.

Dopo qualche GIORNO di ricerca scopro che l’Acer Altos Easystore, come il LaCie 301161U, risultano essere cloni dell’Intel SS4000-E, piattaforma supportata da Debian!

Altri NAS supportati, basati su scheda madre Intel EM7210 e CPU Intel 80219, sono:
Newisys NA-1400, Thecus N2100, GLAN Tank.

Sul WIKI la guida all’installazione.

Router-NAS

seagate_goflex

NBle modifiche che suggerisco potrebbero invalidare la garanzia del prodotto, non mi ritengo responsabile per eventuali danni al vostro hardware, se non sapete cosa state facendo non fatelo!

Questo post nasce in risposta a varie richieste di chiarimento che ho ricevuto in merito a come si possa modificare un router per fargli scaricare in automatico gli aggiornamenti di Arch Linux (o di altre distro).

Scelta dell’hardware

Ai suoi tempi la mia scelta cade sul Netgear DGN2200 per i seguenti motivi:

  • il prezzo contenuto: 49.9 €
  • presenza di una porta USB per la condivisione dei dati con uno storage esterno
  • possibilità di utilizzare un firmware personalizzato: Modfs

Ingredienti

  • un router Netgear DGN2200
  • un hard disk esterno (potrebbe andar bene anche una penna usb da diversi GB)
  • il firmware modificato,
  • l’immagine col modfs
  • binari di rsync + librerie per piattaforma mips

Per prima cosa flashare il router col nuovo firmware. Si tratta di un firmare quasi identico all’originale se non per il fatto che permette di caricare ed avviare il filesystem contenuto nella modfs. Per poter funzionare la modfs deve essere decompressa in una partizione FAT32 del disco collegato via USB al router, il nome dell’immagine non potrà essere modificato altrimenti non verrà caricata.

Ho optato per un HD da 320 GB, con una partizione sda1 FAT32 da qualche GB contenente la modfs e poco altro ed il resto del disco (sda2) formattato in ext3 così da non avere problemi né con i permessi, né con i file di dimensioni > 4 GB.

Col vostro browser preferito aprite l’interfaccia web di configurazione del router:
http://ip_router:8081

Nel mio caso http://192.168.0.1:8081, inserite user e password (di default: admin/admin). Andate su Services ed attivate cron ed sshd.

Per completare l’opera c’è bisogno di installare rsync sul router e di farlo partire in automatico ogni notte per sincronizzare i pacchetti dell’HD USB con quelli di un repository ufficiale di Arch (ovviamente tale giochetto può essere fatto con qualsiasi mirror che supporti rsync: Ubuntu, Debian, Slackware o perfino FreeBSD, NetBSD o OpenBSD).

L’architettura del router è mips, facilmente individuabile loggandovi con ssh e dando il comando # uname -a
Linux (none) 2.6.21.5 #2 Sun Apr 3 10:30:24 CEST 2011 mips unknown

Problema: dove rimediare rsync compilato per piattaforma mips?

Soluzione 1: scaricare buildroot e compilarne uno per conto nostro
Soluzione 2: cercare in rete se qualcuno si è già smazzato al posto nostro e distribuisce qualcosa che può fare al caso nostro.

Nel pieno spirito dell’opensource e data la mia proverbiale pigrizia ho deciso di approfittare del lavoro di qualcun altro. Nello specifico ho optato per sfruttare i pacchetti dei repositori dell’openwrt per adattarli alle mie esigenze.
Per chi fosse interessato metto a disposizione il pacchetto che ho fatto io: rsync, per installarlo basta copiarlo (es. da ssh usando wget) nella directory /tmp/mod/modfs del router e decomprimerlo.

La partizione FAT32 è automaticamente messa in share dal router e montata in /tmp/mnt/usb0/part1, ora bisogna montare manualmente anche l’altra partizione (sda2) all’interno del filesystem condiviso es.: /tmp/mnt/usb0/part1/pub.

Script
Aggiornare i repository di Arch  comporta l’impiego di vari parametri non particolarmente intuitivi da passare a rsync, per semplificarmi la vita mi sono creato quest script che scarica tutto quello che mi serve in /tmp/mnt/usb0/part1/pub/Backup/archlinux/

crond
Aggiungiamo lo script al cron-job così che possa essere eseguito ogni giorno ad una certa ora (es. alle 3:30):

/tmp/mod/modfs/packages/DGN2200/cron/scripts/cron_entry -s rsync "30 03 * * * /tmp/mnt/usb0/part1/pub/Backup/archlinux/mirror.sh"

/tmp/mod/modfs/packages/DGN2200/cron/scripts/update

(Per eliminare un processo da cron va invece usato quest’altro comando:
/tmp/mod/modfs/packages/DGN2200/cron/scripts/cron_entry -u rsync)

Condivisione
Per non interferire con i processi di sistema ho deciso di non sfruttare il server ftp dello share, ma di usare un nuovo processo con l’httpd di busybox.
httpd -p 81 -h /tmp/mnt/usb0/part1/pub/Backup/archlinux/ -c /tmp/mod/modfs/etc/httpd.conf
(Ho dovuto metterlo in ascolto sulla porta 81, perché l’80 è già occupata dal demone che gestisce l’interfaccia di configurazione del router)

Automatismo di boot
Per non dover montare a mano la partizione ext3 e far partire l’httpd sulla porta 81 ogni volta che devo riavviare il router, ho aggiunto allo script di sistema /tmp/mod/modfs/boot.sh
le seguenti righe:
mount /dev/sda2 /tmp/mnt/usb0/part1/pub
httpd -p 81 -h /tmp/mnt/usb0/part1/pub/Backup/archlinux/ -c /tmp/mod/modfs/etc/httpd.conf

Client
Per poter usare il repository locale dai PC di casa con Arch bisogna modificare il file /etc/pacman.d/mirrorlist
E come prima riga aggiungere
Server = http://192.168.0.1:81/$repo/$arch
(Dove 192.168.0.1 è l’IP del router e /$repo/$arch corrispondono al path dove risiedono i pacchetti)

Se usate Debian/Ubuntu dovrete invece modificare appropriatamente il file /etc/apt/sources.list

P.S.
In teoria la mia ADSL è un’Alice 7 MB, in pratica la portante arriva 1,5 MB a cui corrisponde una velocità massima in download di circa 155 Kb/sec.
Il mirror completo dei repository di Arch sono circa 25 GB per la i686 + altri 25 per la x86_64, quindi un totale di circa 50 GB se non volete rinunciare ad utilizzare un sistema a 64bit sui processori che lo supportano.
La prima volta che ho fatto la sincronizzazione per scaricare i 50 GB ho impiegato 3 giorni interi!
Adesso rsync si avvia in automatico ogni notte alle 3:30 ed in più di due anni non mi è mai capitato di trovarlo ancora in esecuzione la mattina alle 7.
Avere l’ADSL intasata dalle 3 alle 5 di mattina non crea alcun disturbo, mentre fare aggiornamenti di centinaia di MB in pochi secondi non ha prezzo 🙂
Guardate, ad esempio, la differenza di tempo che impiego nello scaricare un pacchetto da 26 MB come wine.

Repository esterno:
wine-1.3.33-1-x86_64            26.5M  152.2K/s 00:02:55

Mirror interno:
wine-1.3.33-1-x86_64            26.5M    4.8M/s 00:00:05

Ogni 25 MB risparmio circa 3 minuti. Non di rado capita un aggiornamento di KDE, GNOME o LibreOffice che può anche superare i 400 MB. Con la mia connessione ci metterei 40-50 minuti a PC, che moltiplicato x i 4 PC che ho, fanno 3 ore e mezzo! Col serverino casalingo impiego circa 1 minuto a PC e anche in quel breve lasso di tempo l’ADSL non subisce rallentamenti perché i pacchetti sono scaricati dalla LAN.
Cosa non ci tocca fare per rimediare all’inefficienza della Telecom…

Samsung ML-2165W

Samsung printer

Lunedì mattina mi è arrivata questa stampante e visto che ne sono rimasto piacevolmente sorpreso ho deciso di condividere con voi le mie impressioni.
Come al solito cercherò di essere il più sintetico possibile.

PRO

  1. Prezzo contenuto per una stampante laser wifi monocromatica: circa 60 €
  2. 100% compatibile con Linux (ha un driver che funziona alla perfezione, niente a che vedere con quell’accrocchio del CAPT della mia vecchia Canon)
  3. Tramite l’applicazione Samsung Mobile Print è possibile stampare direttamente dagli smartphone

 

CONTRO

  1. Attivare e configurare la rete wireless da Linux è un procedimento laborioso che si articola nei seguenti passaggi:

 

  • Scaricare l’archivio Printer Settings Utility dal sito della Samsung, scompattarlo ed avviare l’eseguibile wirelesssetup
    $ wget http://downloadcenter.samsung.com/content/DR/201110/20111019151150392/PSU_1.01.tar.gz
    $ tar xzf PSU_1.01.tar.gz
    $ cd cdroot/Linux/wirelesssetup
    $ bin/wirelesssetup /dev/usb/lp0
  • Controllare che siano presenti tutte le librerie necessarie al suo funzionamento (necessita delle QT3) e nel caso installarle.
    $ ldd bin/wirelesssetup  | grep 'not found'