visual studio code_0

In questi giorni è scoppiato un caso diplomatico con conseguenza apocalittiche: in un aggiornamento di sistema è stato aggiunto a Raspberry Pi OS il repository contenente il noto software Microsoft Visual Studio Code, inutile dire che è stato detto di tutto.

Il caso

Un bel giorno, sicuramente dopo lunghe e travagliate trattative fra la fondazione Raspberry e Microsoft (che come potete notare non è stata da noi rinominata M$, Miciosoft, Microzozz o similari) è stato deciso di rendere installabile l’IDE opensource Visual Studio Code. In Raspberry Pi OS le modifiche ai file di configurazioni avvengono tramite il pacchetto di sistema raspberrypi-sys-mods che via postinstall (uno script lanciato in fase di configurazione del pacchetto) ha aggiunto un file in /etc/apt/sources.list.d contenente la chiamata al repository e la chiave gpg (nella cartella specifica), senza però installare nessun pacchetto.
Il tutto è successo alla luce del sole segnalando durante le normali procedure di aggiornamento “Adding vscode repository” (nel mio sistema ha trovato il repository già presente ed è andato avanti segnalando solo quello che stava cercando di fare).

Perché Microsoft Visual Studio Code

La spiegazione “ufficiale” della fondazione (nel forum ufficiale rispondono così più ingegneri e moderatori) è legata al nuovo Raspberry PICO e al fatto che Vscode, oltre ad essere un ottimo IDE leggero, ha/avrà dei moduli specifici per sviluppare sulla piattaforma. Effettivamente gli IDE disponibili al momento sono funzionali ma limitati e geneticamente brutti.
Ho scoperto in questi giorni che Visual Studio Code (vscode per gli amici) non è basato su Visual Studio come credevo ma sull’ottimo editor open source Atom (non disponibile per arm). E’ open source anche se ha alcune parti closed, relative alla comunicazioni di errori e statistiche alla casa madre (cosa comune nei software di terze parti, vedi Ubuntu). Sia la comunicazione di errori che le statistiche sono bloccabili via impostazioni.

La questione poteva essere gestita meglio?

Ogni cosa potrebbe essere gestita meglio ma qui sì, poteva essere gestita assai meglio:

  • poteva essere richiesto un consenso tramite input (sembra il manutentore del pacchetto ci stia lavorando)
  • poteva essere fatto tutto all’interno dell’utile utility “Software consigliato” ( immagino già cosa potrebbe succedere se selezionando Visual Studio Code nei software consigliati si aggiungesse il repository e la chiave)
  • la Fondazione ha peccato di comunicazione: non è stato fatto un comunicato ufficiale (né prima né dopo), il changelog del pacchetto è stato pubblicato giorni dopo e quando si è alzato il polverone nessun rappresentante ha proferito verbo (secondo me che uscirà un articolo su The MagPi Magazine).

E’ un Gonblotto

E’ inutile dire che è successo un grandissimo casino.
I blog dei presunti esperti hanno iniziato a sparare teorie complottistiche e guide improbabili mentre altri blog (anche molto più seri), invece di stemperare i toni, hanno gettato benzina sul fuoco sparando frasi tipo: “il blogger Giuseppi ha scoperto che nel suo sistema è stato installato un repository nascosto”.
Sul forum ufficiale della fondazione Raspberry poi, per i motivi già citati, i moderatori si sono fatti trovare impreparati (ammettendo anche di non saperne niente fino a quel momento) ed è saltato il banco: sono volati post cancellati, thread chiusi, offese, ban, ecc. In poco tempo è passata l’idea che la fondazione censura i propri clienti e addirittura più di un utente ha minacciato di passare alle vie legali.
Un moderatore eroe all’affermazione “il repository è stato aggiunto senza il consenso dell’amministratore” ha risposto:

Se esegui un comando tramite sudo, non sei tu – il proprietario / amministratore – a concedere a quel comando il permesso di fare quello che vuole?

Inutile dire che ne ha zittiti una decina.
Vediamo alcune reazioni.

Reddit l’utente fortsix_2

Secondo molte testate è stato il primo ad aver scoperto il fattaccio (bella forza bastava saper leggere, mica ha decompilato il sorgente).
Si parte subito bene, ecco uno stralcio dell’intervento (tradotto da Google Translate):

Ufficialmente è perché supportano l’IDE di Microsoft (!), Ma lo otterrai anche se lo hai installato da un’immagine leggera e usi il tuo Pi headless senza una GUI. Ciò significa che ogni volta che esegui “apt update” sul tuo Pi stai inviando un ping a un server Microsoft.

Prima di tutto il nostro ci fa notare che il repository viene aggiunto a tutte le versioni di Raspberry PI OS, cosa stranissima visto che la base è identica per tutte le versioni e cambiano solo i pacchetti installati di default (bastano infatti pochissimi metapacchetti per passare da lite a full). Per prova ho aggiornato la mia SD di Retropie (derivata da Raspberry PI OS) e durante l’upgrade spunta la famosa frase “Adding vscode repository”.
La parte sul ping è quella che preoccupa molta gente: “Microsoft mi traccia”. Come se ogni giorno non usassimo uno SmartPhone, un motore di ricerca, più eshop per i nostri acquisti e non frequentassimo i social network.
Si prosegue dando un’altra spiegazione neanche troppo campata in aria ma valida per ogni repository esterno aggiunto alla macchina (che sia un backport, un repository per Libreoffice o altro):

Installano anche la chiave GPG di Microsoft utilizzata per firmare i pacchetti da quel repository. Ciò può potenzialmente portare a uno scenario in cui un aggiornamento estrae una dipendenza dal repository di Microsoft e quel pacchetto sarebbe automaticamente considerato attendibile dal sistema.

Ovviamente non si è posto il problema che è più facile che questo venga fatto su un repository non aggiunto di default alla distribuzione, qui lo farebbero in faccia a tutta la community.
Sono fioccati i commenti all’intervento vi lascio il divertimento di leggerli.

Gli espertoni stranieri e italiani

Qui si arriva all’apoteosi del peggio finendo con uno spassoso tutorial.

Ecco uno stralcio (sempre tradotto con translate e aggiustato un tantino) del “Perché avere un repository Microsoft è una cattiva notizia” del nostro sito straniero (presente sul sito italiano praticamente tradotta):

Sembra che la fondazione RPi raccomandi ufficialmente MS IDE, e quindi questo sia stato incluso in Raspberry Pi OS. Dovrebbero mantenerlo nell’immagine della GUI per i bambini o per chiunque desideri imparare Python e altre cose usando VS Code. La maggior parte dei fanatici di Linux e degli utenti esperti usa RPi come server git o adblocker e così via come server headless. C’è sempre un problema di fiducia quando il repository di software indesiderato è configurato e le chiavi gpg vengono installate segretamente, che è il problema principale . Quali altri problemi possono incontrare gli utenti Linux:

Usando il repository MS forzato sul mio RPi 2, MS controlla il software che installo. Ad esempio, quando eseguo “apt install app”, otterrò un’app distribuita e modificata da MS. Forse non faranno nulla di male, ma non voglio avere niente a che fare con loro.
Gli utenti Linux hardcore come me (o chiunque lavori in infosec / IT) non si fideranno mai di Microsoft o del sistema operativo Raspberry Pi per installare segretamente un tale repository.
Microsoft può raccogliere ulteriori informazioni sugli utenti RPi e Linux poiché molti cercano di ridurre la loro impronta digitale come il tuo indirizzo IP e creare un profilo su di te.
Ogni comando apt-get update fa ping al repository MS.
Se tu o qualsiasi membro della famiglia avete effettuato l’accesso all’ecosistema MS come Github, Bing, Office / Live, potrebbero identificarvi e rintracciarvi quando utilizzate lo stesso IP pubblico condiviso a casa.
Se ti va bene, smetti di leggere e torna alla tua vita. Non c’è niente di sbagliato in questo. Ma se non sei d’accordo con un tale cambiamento. Ecco alcune opzioni per te.

Il nostro amico si da delle arie definendo chi vuole programmare con Raspberry un bambino perché i fanatici Linux e gli utenti hardcore usano robe serie. Ovviamente gli utenti hardcore non sono in grado di capire da quale repository viene scaricato un pacchetto.
Ma andiamo avanti. La cosa più divertente è che il tutorial proposto è per tutti i siti lo stesso (non ho capito da chi è partito) ed è FAVOLOSO (va detto come lo direbbe il personaggio di un anime a caso e ovviamente battendo le mani). Pronti per attivare la modalità Terrapiatta?

visual studio code_1
xbill aveva ragione?

Ecco come si blocca un repository quando la terra è piatta (non riporterò i comandi perché mi fanno senso):

  • Blocchiamo allegramente il sito packages.microsoft.com: per evitare che di notte xbill (immagine sopra) venga a modificare il nostro computer. Nessun processo (che sia browser, script, virus, troyan, e chi più ne ha più ne metta) potrà più arrivare all’IP associato alla URL ma solo a 0.0.0.0. Mi sembra una cosa utilissima.
  • Impediamo che apt possa aggiornare il pacchetto incriminato cioè raspberrypi-sys-mods: mi sembra un’ottima soluzione visto che si tratta di una pacchetto di sistema che ha la funzione di modificare file di configurazione. Ovviamente da nessuna parte viene detto come tornare indietro (gli italiani commentano tutti i comandi meno quello, probabilmente non sanno neanche a che serve)
  • Cancelliamo la chiave gpg: la cosa di per se può essere utile ma il bello viene dopo
  • Creiamo un file vuoto con lo stesso nome di quello della chiave, nella stessa posizione, e ovviamente evitiamo che possa essere modificato: se la chiave viene cancellata e il pacchetto raspberrypi-sys-mods viene bloccato chi può rimetterla? Xbill?

I tutorial stranieri finiscono qui, quindi da questo momento in poi il nostro apt update diventerà una bella sequela di errori non potendo accedere al sito e non potendo leggere la chiave (il file è vuoto). Il nostro sito italiano va avanti aggiungendo l’unico comando sensato (cancella il file .list) ma ovviamente lo riporta errato (il comando remove non esiste).
Ho fatto notare al sito italiano l’inutilità del tutorial (in modo educato e comprensivo) e ovviamente il mio commento (piuttosto lungo) è stato moderato.

Come si blocca davvero un repository

Indipendentemente dal perché si voglia bloccare un repository le procedure sono due: la soft e la meno soft.
Usando entrambi i metodi lanciando il comando apt update il repository prescelto non verrà più richiamato.

Soft

La procedura soft permette di recuperare quando bloccato in pochissimi secondi. Editiamo il file contente gli estremi del repository anteponendo un commento. Nel caso del repository di vscode:

sudo nano /etc/apt/sources.list.d/vscode.list

Il file nello specifico contiene:

### THIS FILE IS AUTOMATICALLY CONFIGURED ###
# You may comment out this entry, but any other modifications may be lost.
deb [arch=amd64] http://packages.microsoft.com/repos/vscode stable main

Anteponendo e deb un # di commento, il repository è bloccato.

Meno soft

La meno soft consiste nel cancellare il file .list e se proprio si vuole abbondare la chiave gpg:

sudo rm -rf /etc/apt/sources.list.d/vscode.list
sudo rm -rf /etc/apt/trusted.gpg.d/microsoft.gpg

Conclusioni 1: Il livello dei blog

Da blogger amatoriale non posso che essere contrario con chi chiede una regolamentazione dei Blog , con tanto di iscrizione all’ordine dei giornalisti, ma quando succedono queste cose non so più cosa pensare.
Articoli copiati e mal tradotti, nessun tocco personale, comandi sparati a caso (in alcuni casi dei quali non si conosce il significato) senza spiegazione alcuna.
Negli ultimi tempi ho notato anche un bisogno compulsivo di scrivere almeno un post al giorno finendo quindi per recensire distribuzioni derivate da derivate di derivate (le proveranno tutte?) o fare articoli sul nuovo sfondo di Ubuntu (non scherzo). C’è una sorta di superiorità nella stesura dei tutorial (anche nei vari forum o gruppi facebook), vengono buttali li comandi senza spiegare a cosa servono, ovviamente tutti lanciati come superuser.
Fate quindi attenzione, informatevi richiamando sempre il manuale dei comandi (comando man o opzione –help) che vi propongono e/o controllando su Internet. Capirete quello che state facendo e ne uscirete migliori.

Conclusioni 2: E’ un complotto

Ricordatevi non correte intorno al bordo della terra altrimenti potreste cadere di sotto.

Aggiornamento

Poco prima della pubblicazione dell’articolo il mio pacchetto raspberry-sys-mods si è aggiornato alla versione 20210208, il changelog riporta:

Stop-gap measure to address one of the main concerns about 3rd party repos
– Prevent VS Code repo from potentially overriding system packages
– Only allow installation of known packages (code-*)

Traduzione:

Misura per affrontare le principali preoccupazioni relative ai repository di terze parti

– Impedisce al repository VS Code di sovrascrivere potenzialmente i pacchetti di sistema

– Consenti solo l’installazione di pacchetti noti (codice- *)

Quindi il furbone di cui sopra, che inibisce l’aggiornamento del pacchetto raspberrypi-sys-mods, si perde la soluzione legata alle sue paure.
Leggendo le proposte di aggiornamento sembra si allo studio (o forse in fase di rilascio) la richiesta di conferma.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *