<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>~&#x2F;magostinelli - linux</title>
      <link>https://www.agostinelli.eu</link>
      <description>La casa delle mie passioni</description>
      <generator>Zola</generator>
      <language>it</language>
      <atom:link href="https://www.agostinelli.eu/tags/linux/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Wed, 01 Apr 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Email in self hosting</title>
          <pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/email-in-self-hosting/</link>
          <guid>https://www.agostinelli.eu/blog/email-in-self-hosting/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/email-in-self-hosting/">&lt;p&gt;Oggi voglio andare un po&#x27; controcorrente: in un mondo pieno di provider email gratuiti e a pagamento, a pochi viene in mente di gestire il proprio server. Eppure, se ci pensiamo bene, la casella email è probabilmente il posto dove transitano più informazioni sensibili su di noi — abbonamenti, estratti conto, comunicazioni private, recupero password. Chiunque abbia accesso a quella casella sa praticamente tutto di voi.&lt;&#x2F;p&gt;
&lt;p&gt;Ecco perché ritengo che il &lt;strong&gt;self hosting&lt;&#x2F;strong&gt; valga la pena anche per l&#x27;&lt;strong&gt;email&lt;&#x2F;strong&gt;: solo così avremo il pieno controllo sulla nostra corrispondenza, senza che nessun terzo possa leggere, analizzare o vendere i nostri dati. Oggi le VPS costano pochissimo, e mettere in piedi un server email non è né complicato né costoso — e avremo spazio praticamente illimitato.&lt;&#x2F;p&gt;
&lt;p&gt;Vediamo come fare.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;prerequisiti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#prerequisiti&quot; aria-label=&quot;Anchor link for: prerequisiti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Prerequisiti&lt;&#x2F;h2&gt;
&lt;p&gt;Prima di iniziare, è bene avere chiari alcuni punti:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Una &lt;strong&gt;VPS&lt;&#x2F;strong&gt; con un IP statico (la scelta del provider è vostra). Evitate IP già presenti in blacklist — potete verificarlo su siti come &lt;a href=&quot;https:&#x2F;&#x2F;mxtoolbox.com&#x2F;blacklists.aspx&quot;&gt;MXToolbox&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Un &lt;strong&gt;dominio&lt;&#x2F;strong&gt; di vostra proprietà, su cui poter configurare i record DNS.&lt;&#x2F;li&gt;
&lt;li&gt;Conoscenza base di Linux e Docker.&lt;&#x2F;li&gt;
&lt;li&gt;La &lt;strong&gt;porta 25&lt;&#x2F;strong&gt; (SMTP) non deve essere bloccata dal provider — purtroppo alcuni la chiudono di default. Verificatelo prima di scegliere la VPS.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;perche-una-vps-e-non-un-server-casalingo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche-una-vps-e-non-un-server-casalingo&quot; aria-label=&quot;Anchor link for: perche-una-vps-e-non-un-server-casalingo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché una VPS e non un server casalingo?&lt;&#x2F;h3&gt;
&lt;p&gt;Potrebbe venirvi in mente di ospitare il server direttamente a casa, magari su un vecchio PC o un Raspberry Pi. È una soluzione che funziona per molti servizi, ma per l&#x27;&lt;strong&gt;email è sconsigliata&lt;&#x2F;strong&gt;, per un motivo preciso: gli indirizzi &lt;strong&gt;IP&lt;&#x2F;strong&gt; assegnati dalle &lt;strong&gt;connessioni domestiche&lt;&#x2F;strong&gt; (fibra, ADSL) sono catalogati come tali nei database dei principali provider. Gmail, Outlook e gli altri riconoscono immediatamente che l&#x27;email proviene da un IP residenziale e la &lt;strong&gt;classificano come spam&lt;&#x2F;strong&gt; — o la rifiutano direttamente — indipendentemente da quanto abbiate configurato bene &lt;em&gt;SPF, DKIM e DMARC&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Una VPS, invece, ha un IP di tipo &quot;datacenter&quot;, che i provider trattano in modo completamente diverso. È questo il motivo per cui, in questo contesto, la VPS non è solo una comodità ma una vera e propria necessità.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2026&#x2F;flusso-email-server.svg&quot; alt=&quot;Schema del flusso email&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;due-approcci-possibili&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#due-approcci-possibili&quot; aria-label=&quot;Anchor link for: due-approcci-possibili&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Due approcci possibili&lt;&#x2F;h2&gt;
&lt;p&gt;Per costruire un server email completo servono più componenti che lavorano insieme: un MTA (Mail Transfer Agent) per inviare e ricevere email, un server IMAP per accedervi, un filtro antispam, e opzionalmente una webmail. Si può procedere in due modi.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;setup-manuale-componente-per-componente&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#setup-manuale-componente-per-componente&quot; aria-label=&quot;Anchor link for: setup-manuale-componente-per-componente&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Setup manuale (componente per componente)&lt;&#x2F;h3&gt;
&lt;p&gt;Per chi vuole il controllo totale, i software da mettere insieme sono:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Postfix&lt;&#x2F;strong&gt; (o Exim): MTA, si occupa di inviare e ricevere le email&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Dovecot&lt;&#x2F;strong&gt;: server IMAP&#x2F;POP3, permette ai client di accedere alle caselle&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;SpamAssassin&lt;&#x2F;strong&gt; (o rspamd): filtro antispam&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Roundcube&lt;&#x2F;strong&gt; (o SnappyMail): interfaccia webmail&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Questo approccio offre massima flessibilità, ma richiede di configurare e integrare ogni pezzo manualmente — e di tenerlo aggiornato nel tempo.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;software-all-in-one-l-alternativa-pratica&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#software-all-in-one-l-alternativa-pratica&quot; aria-label=&quot;Anchor link for: software-all-in-one-l-alternativa-pratica&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Software all-in-one (l&#x27;alternativa pratica)&lt;&#x2F;h3&gt;
&lt;p&gt;Se preferite partire velocemente e con meno grattacapi, esistono soluzioni che impacchettano tutto in un unico sistema, gestendo anche aggiornamenti e backup:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mailu&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Mailcow&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Stalwart&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Io uso &lt;strong&gt;Mailu&lt;&#x2F;strong&gt; e lo approfondiremo nel dettaglio. Gli altri meritano comunque una menzione.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;mailu&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#mailu&quot; aria-label=&quot;Anchor link for: mailu&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Mailu&lt;&#x2F;h2&gt;
&lt;p&gt;Mailu è un server di posta completo, basato su container Docker: ogni componente (SMTP, IMAP, antispam, webmail, admin) gira nel proprio container, ma l&#x27;integrazione è già pronta e non richiede configurazione manuale tra i vari pezzi.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2026&#x2F;Mailu-Login-Interface.png&quot; alt=&quot;Mailu login&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;installazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione&quot; aria-label=&quot;Anchor link for: installazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione&lt;&#x2F;h3&gt;
&lt;p&gt;La documentazione ufficiale è ottima e guida passo passo:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mailu.io&#x2F;2024.06&#x2F;setup.html&quot;&gt;https:&#x2F;&#x2F;mailu.io&#x2F;2024.06&#x2F;setup.html&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;La prima parte copre la configurazione di Docker sul sistema; poi si passa alla creazione del file di configurazione.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;configurazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazione&quot; aria-label=&quot;Anchor link for: configurazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazione&lt;&#x2F;h3&gt;
&lt;p&gt;Tutto ruota attorno a un file &lt;code&gt;.env&lt;&#x2F;code&gt;. Il modo più comodo per crearlo è usare il wizard web ufficiale:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;setup.mailu.io&#x2F;2024.06&#x2F;&quot;&gt;https:&#x2F;&#x2F;setup.mailu.io&#x2F;2024.06&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Si inseriscono le proprie preferenze e il sito genera il &lt;strong&gt;file di testo pronto all&#x27;uso&lt;&#x2F;strong&gt; — che si potrà sempre modificare in seguito con un editor. Queste sono le impostazioni &quot;globali&quot; di sistema.&lt;&#x2F;p&gt;
&lt;p&gt;Per la gestione operativa (domini, caselle, alias, inoltri, quote), si usa invece il &lt;strong&gt;pannello web&lt;&#x2F;strong&gt; integrato, il cui link è presente nella webmail, accedendo con le credenziali di amministratore.&lt;&#x2F;p&gt;
&lt;p&gt;Per ulteriori dettagli sulla configurazione e personalizzazione del software, vi invito a consultare la &lt;a href=&quot;https:&#x2F;&#x2F;mailu.io&#x2F;2024.06&#x2F;webadministration.html&quot;&gt;documentazione ufficiale&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2026&#x2F;mailu-main-page.png&quot; alt=&quot;Mailu config&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dns-il-passaggio-piu-importante&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#dns-il-passaggio-piu-importante&quot; aria-label=&quot;Anchor link for: dns-il-passaggio-piu-importante&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
DNS: il passaggio più importante&lt;&#x2F;h3&gt;
&lt;p&gt;Una parte fondamentale — che spesso viene sottovalutata — è la &lt;strong&gt;configurazione DNS&lt;&#x2F;strong&gt;. Per evitare che le email inviate finiscano nello spam dei destinatari, è necessario configurare correttamente:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SPF&lt;&#x2F;strong&gt;: specifica quali server sono autorizzati a inviare email per il vostro dominio&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;DKIM&lt;&#x2F;strong&gt;: firma digitale per autenticare le email&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;DMARC&lt;&#x2F;strong&gt;: policy su cosa fare con le email che non superano SPF o DKIM&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Mailu vi guida nella configurazione di tutti e tre direttamente dal pannello admin — seguite quelle indicazioni con attenzione.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;mailcow&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#mailcow&quot; aria-label=&quot;Anchor link for: mailcow&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Mailcow&lt;&#x2F;h2&gt;
&lt;p&gt;Molto simile a Mailu come approccio: è un insieme di container Docker con una interfaccia web per gestire il tutto. Ha una community molto attiva e un&#x27;interfaccia particolarmente curata. Vale la pena valutarlo se Mailu non vi convince.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mailcow.email&quot;&gt;https:&#x2F;&#x2F;mailcow.email&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2026&#x2F;mailcow-admin-dashboard.png&quot; alt=&quot;Mailcow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;stalwart&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#stalwart&quot; aria-label=&quot;Anchor link for: stalwart&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Stalwart&lt;&#x2F;h2&gt;
&lt;p&gt;Stalwart merita una menzione speciale: è un progetto relativamente recente che racchiude &lt;strong&gt;tutte le funzionalità in un singolo eseguibile&lt;&#x2F;strong&gt;, scritto in &lt;strong&gt;Rust&lt;&#x2F;strong&gt;. Supporta già IMAP, SMTP, JMAP e sta aggiungendo funzionalità come CalDAV e CardDAV. È ancora in fase di maturazione, ma la direzione è molto promettente.&lt;&#x2F;p&gt;
&lt;p&gt;Tenetelo d&#x27;occhio: potrebbe diventare la soluzione di riferimento nei prossimi anni.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;stalw.art&quot;&gt;https:&#x2F;&#x2F;stalw.art&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2026&#x2F;stalwart-screencast-setup.gif&quot; alt=&quot;Stalwart setup&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;conclusioni&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#conclusioni&quot; aria-label=&quot;Anchor link for: conclusioni&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Conclusioni&lt;&#x2F;h2&gt;
&lt;p&gt;Questo articolo non ha l&#x27;ambizione di essere una guida esaustiva, ma piuttosto un punto di partenza per chi vuole &lt;strong&gt;riprendere il controllo delle proprie email&lt;&#x2F;strong&gt;. I siti ufficiali di Mailu, Mailcow e Stalwart sono documentati molto bene — non ha senso riscrivere qui quello che trovate là.&lt;&#x2F;p&gt;
&lt;p&gt;Quello che spero di avervi trasmesso è la curiosità di provarci. Il setup è alla portata di chiunque abbia un minimo di dimestichezza con Linux e Docker, e la soddisfazione di avere la propria casella email — su un server proprio, senza intermediari — vale lo sforzo.&lt;&#x2F;p&gt;
&lt;p&gt;Se avete domande specifiche o suggerimenti, usate i commenti qui sotto, a presto!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Forgejo Runner</title>
          <pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/forgejo-runner/</link>
          <guid>https://www.agostinelli.eu/blog/forgejo-runner/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/forgejo-runner/">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2025&#x2F;forgejo-logo.png&quot; alt=&quot;Forgejo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;che-cos-e-forgejo-runner&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#che-cos-e-forgejo-runner&quot; aria-label=&quot;Anchor link for: che-cos-e-forgejo-runner&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Che cos&#x27;è Forgejo Runner&lt;&#x2F;h2&gt;
&lt;p&gt;Se usi #forgejo e desideri automatizzare i processi di sviluppo, &lt;strong&gt;Forgejo Runner&lt;&#x2F;strong&gt; è uno strumento che non puoi perderti.&lt;&#x2F;p&gt;
&lt;p&gt;Se, invece, non sai cos&#x27;è #forgejo, clicca sulla parola e leggi l&#x27;articolo che avevo pubblicato qui sul blog.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definizione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#definizione&quot; aria-label=&quot;Anchor link for: definizione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Definizione&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo Runner è un sistema di automazione che &lt;strong&gt;esegue compiti&lt;&#x2F;strong&gt; in background quando &lt;strong&gt;accadono determinati eventi&lt;&#x2F;strong&gt; nel tuo repository. In altre parole, ti permette di automatizzare il flusso di lavoro del tuo progetto senza intervento manuale.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;come-funziona&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-funziona&quot; aria-label=&quot;Anchor link for: come-funziona&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come funziona&lt;&#x2F;h2&gt;
&lt;p&gt;Quando effettui un push, apri una pull request, o altro ancora, Forgejo Runner può automaticamente:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Eseguire test del codice&lt;&#x2F;li&gt;
&lt;li&gt;Compilare il progetto&lt;&#x2F;li&gt;
&lt;li&gt;Distribuire l&#x27;applicazione&lt;&#x2F;li&gt;
&lt;li&gt;Generare documentazione&lt;&#x2F;li&gt;
&lt;li&gt;Eseguire controlli di qualità&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Il tutto accade in automatico dietro le quinte, senza che tu debba fare nulla.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;perche-e-utile&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche-e-utile&quot; aria-label=&quot;Anchor link for: perche-e-utile&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché è utile&lt;&#x2F;h2&gt;
&lt;p&gt;Immagina di dover controllare manualmente che il tuo codice non abbia errori ogni volta che lo carichi. Sarebbe noioso, vero? Forgejo Runner elimina questo problema. Puoi definire una volta le regole che desideri applicare, e il sistema le seguirà automaticamente per ogni nuovo commit.&lt;&#x2F;p&gt;
&lt;p&gt;Questo significa codice più pulito, meno errori e molto meno lavoro manuale.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;un-esempio-pratico&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#un-esempio-pratico&quot; aria-label=&quot;Anchor link for: un-esempio-pratico&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Un esempio pratico&lt;&#x2F;h2&gt;
&lt;p&gt;Vogliamo che che ogni volta che qualcuno contribuisce al progetto, il codice venga testato automaticamente. Con Forgejo Runner, puoi impostare una regola che dice: &quot;Quando ricevi un nuovo push, esegui i test&quot;. Se i test falliscono, riceverai una notifica. Se passano, tutto procede normalmente.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;forgejo-runner-e-docker&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#forgejo-runner-e-docker&quot; aria-label=&quot;Anchor link for: forgejo-runner-e-docker&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Forgejo Runner e Docker&lt;&#x2F;h2&gt;
&lt;p&gt;Una delle migliori pratiche è eseguire i compiti dentro &lt;strong&gt;container Docker&lt;&#x2F;strong&gt;. Questo è diventato, ormai, lo standard di fatto nel settore.&lt;&#x2F;p&gt;
&lt;p&gt;Utilizzare Docker con Forgejo Runner offre numerosi vantaggi: isolamento completo tra i vari compiti (un test non interferisce con un altro), ambienti di esecuzione riproducibili e coerenti, e la certezza che il codice funzionerà allo stesso modo sia sulla tua macchina che sui server di produzione.&lt;&#x2F;p&gt;
&lt;p&gt;In pratica, invece di &lt;em&gt;eseguire i compiti direttamente sul sistema operativo host&lt;&#x2F;em&gt;, Forgejo Runner li avvia all&#x27;interno di container Docker preconfigurati. Questo significa che puoi definire esattamente quali dipendenze, librerie e versioni delle applicazioni servono per i tuoi test o per la compilazione, senza doverti preoccupare di conflitti con altre configurazioni.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pratica&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#pratica&quot; aria-label=&quot;Anchor link for: pratica&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Pratica&lt;&#x2F;h2&gt;
&lt;p&gt;Premesso quanto detto sopra, eseguire il nostro workflow in un container docker ci permette di avere un alto livello di sicurezza, sopratutto in un server condiviso.
Per rendere semplice l&#x27;esecuzione, ho pensato di realizzare un file &lt;strong&gt;docker compose&lt;&#x2F;strong&gt; (e un &lt;em&gt;.env&lt;&#x2F;em&gt;) con tutto il necessario: registrazione, aggiornamento automatico e avvio automatico.
Trovate il codice di questo mini progetto qui (ovviemente sempre ospitato su forgejo): https:&#x2F;&#x2F;forgejo.it&#x2F;magostinelli&#x2F;forgejo-runner-docker&lt;&#x2F;p&gt;
&lt;h3 id=&quot;configurazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazione&quot; aria-label=&quot;Anchor link for: configurazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazione&lt;&#x2F;h3&gt;
&lt;p&gt;Per prima cosa assicuratevi che la vostra istanza di forgejo abbia le action abilitate (altrimenti non vedrete la voce del menù).
Per poter aggiungere un runner al vostro workflow, sarà necessario generare un token.
Andate su &lt;em&gt;Forgejo Admin Panel → Runner (o Runners)&lt;&#x2F;em&gt;
(in alternativa potete aggiungere il runner al singolo progetto git)&lt;&#x2F;p&gt;
&lt;p&gt;Seguite le istruzioni presenti nel link sopra, compilando le varibili (file .env) con i vostri parametri, e lanciate (&lt;em&gt;docker compose up&lt;&#x2F;em&gt;) il vostro container.
Se tutto ha funzionato, vedrete il runner attivo nella schermata web di forgejo.&lt;&#x2F;p&gt;
&lt;p&gt;Adesso passiamo ad utilizzarlo.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;utilizzo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#utilizzo&quot; aria-label=&quot;Anchor link for: utilizzo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Utilizzo&lt;&#x2F;h3&gt;
&lt;p&gt;Vedi documentazione al link: https:&#x2F;&#x2F;forgejo.org&#x2F;docs&#x2F;latest&#x2F;user&#x2F;actions&#x2F;overview&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;Crea il file &lt;em&gt;forgejo&#x2F;workflows&#x2F;test.yml&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;esempio-di-workflow&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#esempio-di-workflow&quot; aria-label=&quot;Anchor link for: esempio-di-workflow&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Esempio di workflow&lt;&#x2F;h4&gt;
&lt;p&gt;forgejo&#x2F;workflows&#x2F;test.yml&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yml&quot; class=&quot;language-yml z-code&quot;&gt;&lt;code class=&quot;language-yml&quot; data-lang=&quot;yml&quot;&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;Test Workflow&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;run-name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;Eseguito da ${{ forgejo.actor }}&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-constant z-language z-boolean z-yaml&quot;&gt;on&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-flow-sequence z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-sequence z-begin z-yaml&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-in z-yaml&quot;&gt;push&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-sequence z-end z-yaml&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;jobs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;test-job&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; Qui specifichi su quale runner deve girare il job
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; Deve corrispondere a una delle etichette in RUNNER_LABELS
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;runs-on&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;docker&lt;&#x2F;span&gt; 
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;steps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;      &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;Stampa un messaggio&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;        &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;run&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;echo &amp;quot;Ciao mondo! Questo job sta girando sul mio runner Docker.&amp;quot;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;      &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;Mostra informazioni sul sistema&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;        &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;run&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-flow z-block-scalar z-literal z-yaml&quot;&gt;|&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-block z-yaml&quot;&gt;          echo &amp;quot;Utente corrente: $(whoami)&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-block z-yaml&quot;&gt;          echo &amp;quot;Directory corrente: $(pwd)&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-block z-yaml&quot;&gt;          uname -a
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;conclusione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#conclusione&quot; aria-label=&quot;Anchor link for: conclusione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Conclusione&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo Runner è essenzialmente un assistente che automatizza i compiti ripetitivi nel tuo flusso di lavoro di sviluppo. È perfetto se desideri risparmiare tempo, ridurre errori umani e mantenere la qualità del tuo codice consistente nel tempo.&lt;&#x2F;p&gt;
&lt;p&gt;Se stai già usando Forgejo, integrarvi Forgejo Runner (preferibilmente con Docker) potrebbe aiutarti ad incrementare la produttività grazie alle automazioni.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Forgejo con Docker: Git self-hosted senza fronzoli</title>
          <pubDate>Fri, 11 Jul 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/forgejo-con-docker-git-self-hosted-senza-fronzoli/</link>
          <guid>https://www.agostinelli.eu/blog/forgejo-con-docker-git-self-hosted-senza-fronzoli/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/forgejo-con-docker-git-self-hosted-senza-fronzoli/">&lt;p&gt;Da tempo utilizzo Git per gestire i miei progetti personali, sia software che di configurazione. Per anni mi sono affidato al pc di qualcunaltro (es: Gitlab o GitHub), ma la dipendenza da un servizio centralizzato, per quanto comodo, inizia a starmi stretta. Così ho cercato una soluzione più allineata alla mia filosofia: &lt;strong&gt;Forgejo&lt;&#x2F;strong&gt;, un fork comunitario di Gitea, leggero e facilmente self-hostabile.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2025&#x2F;forgejo-logo.png&quot; alt=&quot;Forgejo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;perche-forgejo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche-forgejo&quot; aria-label=&quot;Anchor link for: perche-forgejo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché Forgejo&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo nasce da una comunità che punta alla trasparenza e all’autonomia, senza il rischio che un progetto venga assorbito o piegato a logiche commerciali. La compatibilità con Gitea è totale, e i requisiti minimi lo rendono perfetto per VPS o server casalinghi.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;veniamo-subito-al-dunque-e-facciamolo-partire-cosi-potremo-provarlo-con-mano&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#veniamo-subito-al-dunque-e-facciamolo-partire-cosi-potremo-provarlo-con-mano&quot; aria-label=&quot;Anchor link for: veniamo-subito-al-dunque-e-facciamolo-partire-cosi-potremo-provarlo-con-mano&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Veniamo subito al dunque e facciamolo partire, cosi potremo provarlo con mano!&lt;&#x2F;h2&gt;
&lt;h2 id=&quot;setup-con-docker&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#setup-con-docker&quot; aria-label=&quot;Anchor link for: setup-con-docker&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Setup con Docker&lt;&#x2F;h2&gt;
&lt;p&gt;Ci affidiamo a Docker Compose, cosi con un solo file di configurazione abbiamo tutto il necessario.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker-compose-yaml&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#docker-compose-yaml&quot; aria-label=&quot;Anchor link for: docker-compose-yaml&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
docker-compose.yaml&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;services:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;  &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;forgejo:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;image:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; codeberg.org&#x2F;forgejo&#x2F;forgejo:latest&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;container_name:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; forgejo&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;restart:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; always&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;environment:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; USER_UID=1000&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; USER_GID=1000&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;volumes:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; .&#x2F;data:&#x2F;data&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &#x2F;etc&#x2F;timezone:&#x2F;etc&#x2F;timezone:ro&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &#x2F;etc&#x2F;localtime:&#x2F;etc&#x2F;localtime:ro&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; .&#x2F;robots.txt:&#x2F;data&#x2F;gitea&#x2F;public&#x2F;robots.txt:ro&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;expose:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;3000&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;networks:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; forgejo_net&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;networks:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;  &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;forgejo_net:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;driver:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; bridge&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;reverse-proxy&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#reverse-proxy&quot; aria-label=&quot;Anchor link for: reverse-proxy&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Reverse Proxy&lt;&#x2F;h3&gt;
&lt;p&gt;E&#x27; possibile usare il web server che preferiamo, come ad esempio traefik, caddy, apache o nginx, in questo articolo vedremo un esempio con quest&#x27;ultimo.&lt;&#x2F;p&gt;
&lt;p&gt;Qui una configurazione base con https (via Let&#x27;s Encrypt, gestito esternamente):&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;etc&#x2F;nginx&#x2F;sites-available&#x2F;forgejo.conf
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;server {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    listen 80;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    server_name git.miodominio.it;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    return 301 https:&#x2F;&#x2F;$host$request_uri;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;server {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    listen 443 ssl;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    server_name git.miodominio.it;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    ssl_certificate &#x2F;etc&#x2F;letsencrypt&#x2F;live&#x2F;git.miodominio.it&#x2F;fullchain.pem;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    ssl_certificate_key &#x2F;etc&#x2F;letsencrypt&#x2F;live&#x2F;git.miodominio.it&#x2F;privkey.pem;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    location &#x2F; {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_pass http:&#x2F;&#x2F;localhost:3000;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_set_header Host $host;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_set_header X-Real-IP $remote_addr;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_set_header X-Forwarded-Proto $scheme;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    }
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Dopo aver creato il file, attivare con:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;ln&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;s&lt;&#x2F;span&gt; &#x2F;etc&#x2F;nginx&#x2F;sites-available&#x2F;forgejo.conf &#x2F;etc&#x2F;nginx&#x2F;sites-enabled&#x2F;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-and z-shell&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;systemctl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; reload nginx&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;backup-automatico&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#backup-automatico&quot; aria-label=&quot;Anchor link for: backup-automatico&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Backup automatico&lt;&#x2F;h2&gt;
&lt;p&gt;Il backup rappresenta un step fondamentale del nostro setup, conviene implementarne subito uno all&#x27;avvio del servizio, cosi non ce ne dimenticvheremo e terremo i nostri dati al sicuro. Ricordiamoci che qui salveremo il risultato di diverse ore di programmazione, studio e prove!&lt;&#x2F;p&gt;
&lt;p&gt;I nostri dati si trovano nel volume data di cui sopra, quindi sarà sufficiente salvare il docker file e la directory data.
Io consiglio di usare #borg ma potete usare il softwsre che preferite, trovo particolarmente utile aggiungere questa nuova directory alle procedure di salvataggio che sicuremante avrete già per tutto il resto.
(se non le avete potete anche smettere di leggere questo blog, tornate quando ne avrete implementata una).&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;configurazioni-iniziali&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazioni-iniziali&quot; aria-label=&quot;Anchor link for: configurazioni-iniziali&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazioni iniziali&lt;&#x2F;h2&gt;
&lt;p&gt;A questo punto, dopo l&#x27;installazione, non ci resta che accedere via web al nostro software e fare le prime configurazioni.
È possibile creare utenti, organizzazioni, concedere permessi e creare tutti i repository che si desiderano.&lt;&#x2F;p&gt;
&lt;p&gt;Ciascun progetto può essere impostato ad accesso &lt;em&gt;privatp&lt;&#x2F;em&gt; o &lt;em&gt;pubblico&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;In questo modo sarà semplicissimo collaborare in più persone allo stesso progetto, tenendo traccia delle varie modifiche.&lt;&#x2F;p&gt;
&lt;p&gt;Infine è anche possibile importare direttamente altri repository git.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;runner-e-action&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#runner-e-action&quot; aria-label=&quot;Anchor link for: runner-e-action&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Runner e Action&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo, essendo un fork di Gitea, supporta un sistema di &lt;em&gt;CI&#x2F;CD&lt;&#x2F;em&gt; integrato chiamato Actions, simile a GitHub Actions, e permette di eseguire job di build o deploy tramite runner personalizzati.&lt;&#x2F;p&gt;
&lt;p&gt;Io stesso ne faccio uso, è uno dei motivi per cui mi sto trovando benissimo con forgejo! Ho varie configurazione a seconda del progetto ospitato, ma essenzialmente queste si occupano di effettuare il &quot;deploy&quot; del codice, cioé copiano a destinazione (server di sviluppo o di produzione a seconda dei casi), il codice modificato, cosi che sia pronto all&#x27;uso.
In questo modo, grazie alla history di git, sarà sempre possibile tornare indietro, nonché tenere traccia delle modifiche nel tempo.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;come-funziona&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-funziona&quot; aria-label=&quot;Anchor link for: come-funziona&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come funziona&lt;&#x2F;h3&gt;
&lt;p&gt;Le Actions sono definite da file YAML nei repository (.forgejo&#x2F;workflows&#x2F;), e possono contenere job con step eseguiti su runner registrati.&lt;&#x2F;p&gt;
&lt;p&gt;I runner sono agent installati su macchine (stessa VPS o remote), che si collegano al server Forgejo e attendono job da eseguire.&lt;&#x2F;p&gt;
&lt;p&gt;Una volta definita la condizione scatenante (es: commit su ramo main, rilascio di una nuova versione, ecc) partirà il worksflow che abbiamo definito, con la possibilità di verificarne lo stato di esecuzione in tempo reale. Infine è anche possibile andare a vedere i log delle esecuzione precedenti.&lt;&#x2F;p&gt;
&lt;p&gt;All&#x27;interno di una action si possono usare #secret e #variabili, in modo da poter riusare il codice della action e allo stesso tempo mantenere al sicuro le credenziali.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;setup-runner-base&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#setup-runner-base&quot; aria-label=&quot;Anchor link for: setup-runner-base&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Setup runner base&lt;&#x2F;h3&gt;
&lt;p&gt;Vediamo come creare un nuovo runner, passo passo:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-shell&quot;&gt;export&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-assignment z-shell&quot;&gt;RUNNER_VERSION&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-shell&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-shell&quot;&gt;&lt;span class=&quot;z-meta z-group z-expansion z-command z-parens z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-shell&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;curl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;X&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;GET&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; https:&#x2F;&#x2F;data.forgejo.org&#x2F;api&#x2F;v1&#x2F;repos&#x2F;forgejo&#x2F;runner&#x2F;releases&#x2F;latest&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-pipe z-shell&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;jq&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; .name&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;r&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-pipe z-shell&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;cut&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;c&lt;&#x2F;span&gt; 2-&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-shell&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;wget&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;O&lt;&#x2F;span&gt; forgejo-runner https:&#x2F;&#x2F;code.forgejo.org&#x2F;forgejo&#x2F;runner&#x2F;releases&#x2F;download&#x2F;v&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-begin z-shell&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;RUNNER_VERSION&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-end z-shell&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&#x2F;forgejo-runner-&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-begin z-shell&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;RUNNER_VERSION&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-end z-shell&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;-linux-amd64&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;chmod&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; +x forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; mv forgejo-runner &#x2F;usr&#x2F;local&#x2F;bin&#x2F;forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; useradd&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;m&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;s&lt;&#x2F;span&gt; &#x2F;bin&#x2F;bash forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; usermod&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;aG&lt;&#x2F;span&gt; docker forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Rechiamoci sull&#x27;interfaccia web di Forgejo:
&lt;em&gt;Forgejo &amp;gt; Repository &amp;gt; Settings &amp;gt; Actions &amp;gt; Runners &amp;gt; &quot;Generate new token&quot;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;i&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;u&lt;&#x2F;span&gt; forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;forgejo-runner&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; register&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;avvio-automatico-del-runner&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#avvio-automatico-del-runner&quot; aria-label=&quot;Anchor link for: avvio-automatico-del-runner&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Avvio automatico del runner&lt;&#x2F;h4&gt;
&lt;p&gt;Io ho usato uno script systemd per l&#x27;avvio automatico, ve lo riporto di seguito&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; echo &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;[Unit]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;Description=Forgejo Act Runner
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;After=network.target docker.service
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;Requires=docker.service
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;[Service]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;User=forgejo-runner
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;Group=forgejo-runner
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;ExecStart=&#x2F;usr&#x2F;local&#x2F;bin&#x2F;forgejo-runner daemon
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;Restart=always
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;WorkingDirectory=&#x2F;home&#x2F;forgejo-runner
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;[Install]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;WantedBy=multi-user.target&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-redirection z-shell&quot;&gt;&amp;gt;&lt;&#x2F;span&gt; &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;forgejo-runner.service&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; systemctl daemon-reload&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; systemctl enable forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; systemctl start forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;systemctl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; status forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;vantaggi-in-breve&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#vantaggi-in-breve&quot; aria-label=&quot;Anchor link for: vantaggi-in-breve&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Vantaggi in breve&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Repository del proprio codice, diviso come si preferisce: singoli progetti, organizzazioni, ecc.&lt;&#x2F;li&gt;
&lt;li&gt;Possibilità di creare utenti per collaboratori&#x2F;amici con controllo sugli accessi&#x2F;permessi.&lt;&#x2F;li&gt;
&lt;li&gt;Automatizzo test, build, deploy senza dipendere da servizi esterni.&lt;&#x2F;li&gt;
&lt;li&gt;Nessuna dipendenza da fornitori terzi e nessun limite di spazio, esecuzioni, personalizzazioni.&lt;&#x2F;li&gt;
&lt;li&gt;Versionamento del codice, e nel caso di ci&#x2F;cd garanzia di riproducibilità&lt;&#x2F;li&gt;
&lt;li&gt;Pocchissime risorse necessarie lato server&lt;&#x2F;li&gt;
&lt;li&gt;Vuoi mettere quanto è figo avere il proprio servizio di versionamento?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;uso-quotidiano&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#uso-quotidiano&quot; aria-label=&quot;Anchor link for: uso-quotidiano&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Uso quotidiano&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo supporta #git via #ssh, Web UI e #webhooks. Ho configurato alcuni repository con CI locale usando le Actions e i runner integrati. L’interfaccia è leggera e pulita, senza funzionalità inutili.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusioni&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#conclusioni&quot; aria-label=&quot;Anchor link for: conclusioni&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Conclusioni&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo è una soluzione Git solida, coerente con un approccio decentralizzato. Semplice da gestire, veloce da installare, e adatta anche per chi – come me – preferisce sapere dove stanno i propri dati. Per ora lo utilizzo solo per progetti personali, ma potrei iniziare a usarlo anche per collaborazioni future.&lt;&#x2F;p&gt;
&lt;p&gt;Non vi resta che provarlo, fatemi sapere le vostre impressioni con un commento nel #fediverso su questo articolo.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Upgrade Home Server </title>
          <pubDate>Mon, 09 Dec 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/upgrade-home-server/</link>
          <guid>https://www.agostinelli.eu/blog/upgrade-home-server/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/upgrade-home-server/">&lt;p&gt;Alla fine ho ceduto, ho acquistato un &lt;strong&gt;mini pc&lt;&#x2F;strong&gt; usato di qualche anno fa.
Come molti si voi sapranno, da anni il pc sempre acceso di casa mia è un raspberry pi 4, dove gira la domotica di casa (#homeassistant) e qualche altro (piccolo) servizio.&lt;&#x2F;p&gt;
&lt;p&gt;Da tempo ero arrivato un po&#x27; al limite, perché ho un sacco di sensori e vorrei conservare un po&#x27; di storico (comodo ad esempio per analizzare consumi), ho quindi iniziato a guardarmi intorno.&lt;&#x2F;p&gt;
&lt;p&gt;Per primo ho pensato al pi 5, a cui però vanno aggiunti alimentatore, case, memorie, e quindi il prezzo quasi raddoppia. Da lì sono passato a guardare cosa offriva il mercato dell&#x27;usato, ed eccomi giunto a questa riflessione che condivido con voi.&lt;&#x2F;p&gt;
&lt;p&gt;Innanzi tutto i minipc, grazie ai nuovi dischi &lt;strong&gt;nvme&lt;&#x2F;strong&gt; sono sia &lt;strong&gt;compatti&lt;&#x2F;strong&gt;, ma anche &lt;strong&gt;silenziosi&lt;&#x2F;strong&gt;, e poi finalmente da qualche anno a questa parte, non si guarda solo all&#x27;evoluzione in termini di prestazioni, ma anche all&#x27; &lt;strong&gt;efficienza energetica&lt;&#x2F;strong&gt;.
Anche l&#x27;ormai affermata architettura &lt;strong&gt;x86&lt;&#x2F;strong&gt; è stata costretta a correre ai ripari nei confronti di &lt;strong&gt;arm&lt;&#x2F;strong&gt;, molto più efficiente sotto questo punto di vista.&lt;&#x2F;p&gt;
&lt;p&gt;Altra cosa da considerare è che negli ultimi 4-5 anni non c&#x27;è stata chissà quale &lt;strong&gt;rivoluzione sull&#x27;hardware&lt;&#x2F;strong&gt; e quindi un pc di qualche anno fa è più che sufficiente per i miei scopi (e quelli di molti) .
Il sistema operativo #GnuLinux è molto &lt;strong&gt;efficiente&lt;&#x2F;strong&gt; nel &quot;ridare&quot; vita a vecchi pc, è in pratica un matrimonio perfetto!&lt;&#x2F;p&gt;
&lt;p&gt;In rete (ebay, subito, amazon) si trovano molti di questi pc ricondizionati, in quanto spesso sono usati, o meglio noleggiati, da aziende per pc ad uso ufficio.&lt;&#x2F;p&gt;
&lt;p&gt;Ovviamente questi mini pc hanno un tdp (= consumo) più alto di un raspberry pi, ma anche molta più potenza di calcolo!
Potete addirittura metterci sopra #proxmox e vari server virtuali, a patto di avere memoria ram a sufficienza.
Io penso che opterò per #debian su cui userò un po&#x27; di software nativi (pacchetti ufficiali) e un po&#x27; di immagini #docker alla bisogna.&lt;&#x2F;p&gt;
&lt;p&gt;Il modello che ho scelto (&lt;strong&gt;Lenovo m900 tiny&lt;&#x2F;strong&gt;) è dotato di processore Intel Core i5 6500T, dove la T finale, appunto, strizza l&#x27;occhio ai bassi consumi.&lt;&#x2F;p&gt;
&lt;p&gt;Il pc è anche dotato di varie uscite video e può anche essere montato dietro ad uno schermo, ma io lo userò in modalità #headless, cioè senza monitor collegato.&lt;&#x2F;p&gt;
&lt;p&gt;L&#x27;interno hardware del dispositivo è tale e quale ad un portatile, stesso processore, stessa scheda madre, ecc ecc.
Ritengo che per uso ufficio e casa è perfetto, basta collegare un monitor (o una tv), tastiera, mouse e via.
Per questi usi, va più che bene (con linux), ed è poco rumoroso.&lt;&#x2F;p&gt;
&lt;p&gt;Quindi, per concludere, adesso aspetto che mi arrivi e dopo ci vorrà qualche giorno (non vi nascondo che mi fa un po&#x27; fatica) per trasferire tutto quello che avevo sul vecchio sul nuovo!&lt;&#x2F;p&gt;
&lt;p&gt;Spero di avervi fornito qualche spunto di riflessione interessante, soprattutto riguardo al &lt;strong&gt;riciclo&lt;&#x2F;strong&gt; dell&#x27;hardware, e voi ci avete mai fatto un pensierino?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Terminale nel 2025? Ha ancora senso?</title>
          <pubDate>Sat, 19 Oct 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/terminale-nel-2025-ha-ancora-senso/</link>
          <guid>https://www.agostinelli.eu/blog/terminale-nel-2025-ha-ancora-senso/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/terminale-nel-2025-ha-ancora-senso/">&lt;p&gt;Beh, chi mi conosce saprà già che la mia risposta è decisamente si!&lt;&#x2F;p&gt;
&lt;p&gt;Non c&#x27;è giorno in cui non lo utilizzi.
Molte operazioni sono molto &lt;strong&gt;più veloci&lt;&#x2F;strong&gt; se fatte da terminale, come ad esempio quelle che si possono effettuare su molti file in un colpo solo!
Bisogna ammettere che, iniziando da zero, la strada è in salita, c&#x27;è molto da imparare, ma una volta acquisita una certa padronanza, velocizzerete moltissimo il vostro flusso di lavoro e non solo ci sono delle operazioni che si possono effettuare solo in questo modo.. Pensate, ad esempio, alla modifica solo di alcuni file in mezzo a migliaia, oppure spostare solo quelli che rispettano alcuni criteri.&lt;&#x2F;p&gt;
&lt;p&gt;Nel mio caso terminale è sinonimo di #bash, la shell più usata in ambito #linux.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;Bash-Functions.jpg&quot; alt=&quot;Bash&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;esempi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#esempi&quot; aria-label=&quot;Anchor link for: esempi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Esempi&lt;&#x2F;h2&gt;
&lt;p&gt;Quelli che seguono sono alcuni esempi dei &lt;strong&gt;miei utilizzi più comuni&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;resize-massivo-di-immagini&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#resize-massivo-di-immagini&quot; aria-label=&quot;Anchor link for: resize-massivo-di-immagini&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Resize massivo di immagini&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;find&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &#x2F;home&#x2F;yunohost.app&#x2F;nextcloud&#x2F;data&#x2F;__groupfolders&#x2F;3&#x2F;prove&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;type&lt;&#x2F;span&gt; f&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;iname&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;*.jpg&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;exec&lt;&#x2F;span&gt; mogrify&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;define&lt;&#x2F;span&gt; preserve-timestamp=true&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;verbose&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;resize&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;2048x2048&amp;gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;quality&lt;&#x2F;span&gt; 90 &lt;span class=&quot;z-meta z-group z-expansion z-brace z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-brace z-begin z-shell&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-brace z-end z-shell&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-character z-escape z-shell&quot;&gt;\;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;resize-massivo-di-video&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#resize-massivo-di-video&quot; aria-label=&quot;Anchor link for: resize-massivo-di-video&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Resize massivo di video&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;mencoder&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; panettone.mov&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;vf&lt;&#x2F;span&gt; rotate=1&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;oac&lt;&#x2F;span&gt; pcm&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;ovc&lt;&#x2F;span&gt; lavc&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;lavcopts&lt;&#x2F;span&gt; ffmpeg&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;i&lt;&#x2F;span&gt; input.file&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;c&lt;&#x2F;span&gt;:v mpeg4&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;q&lt;&#x2F;span&gt;:v 5&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;tag&lt;&#x2F;span&gt;:v DIVX&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;vf&lt;&#x2F;span&gt; scale=w=720:h=576:force_original_aspect_ratio=decrease&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;c&lt;&#x2F;span&gt;:a libmp3lame&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;q&lt;&#x2F;span&gt;:a 3&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;ac&lt;&#x2F;span&gt; 2&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;ar&lt;&#x2F;span&gt; 44100 output.avi&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;trovare-tutti-i-link-simbolici-rotti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#trovare-tutti-i-link-simbolici-rotti&quot; aria-label=&quot;Anchor link for: trovare-tutti-i-link-simbolici-rotti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Trovare tutti i link simbolici &quot;rotti&quot;&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;find&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &#x2F;opt&#x2F;mypath&#x2F;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;xtype&lt;&#x2F;span&gt; l&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;rinomina-di-massa-file&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#rinomina-di-massa-file&quot; aria-label=&quot;Anchor link for: rinomina-di-massa-file&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Rinomina di massa file&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-for z-shell&quot;&gt;for&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-for z-shell&quot;&gt; i &lt;span class=&quot;z-keyword z-control z-in z-shell&quot;&gt;in&lt;&#x2F;span&gt; File&lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt;.txt&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-do z-shell&quot;&gt;do&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-assignment z-shell&quot;&gt;j&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-shell&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-meta z-group z-expansion z-command z-backticks z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-shell&quot;&gt;`&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-support z-function z-echo z-shell&quot;&gt;echo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-pipe z-shell&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-string z-quoted z-single z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;s&#x2F;questo&#x2F;quello&#x2F;g&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-shell&quot;&gt;`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;mv&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;j&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-end z-shell&quot;&gt;done&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;ottimizzazione-file-pdf&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#ottimizzazione-file-pdf&quot; aria-label=&quot;Anchor link for: ottimizzazione-file-pdf&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Ottimizzazione file pdf&lt;&#x2F;h3&gt;
&lt;p&gt;Se vogliamo ridurre le dimensioni di alcuni file pdf in un certo path, rinunciando alla qualità delle immmagini.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-for z-shell&quot;&gt;for&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-for z-shell&quot;&gt; file &lt;span class=&quot;z-keyword z-control z-in z-shell&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-expansion z-command z-parens z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-shell&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; suffisso_&lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt;.pdf&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-shell&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-do z-shell&quot;&gt;do&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;gs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;sOutputFile&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-option z-shell&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-begin z-shell&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;resize_file&lt;span class=&quot;z-keyword z-operator z-expansion z-shell&quot;&gt;%%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;.&lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-end z-shell&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;.pdf&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;sDEVICE&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-option z-shell&quot;&gt;=&lt;&#x2F;span&gt;pdfwrite&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;dBATCH&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;dNOPAUSE&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;dDownsampleColorImages&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-option z-shell&quot;&gt;=&lt;&#x2F;span&gt;true&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;dDownsampleGrayImages&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-option z-shell&quot;&gt;=&lt;&#x2F;span&gt;true &lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;file&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-end z-shell&quot;&gt;done&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;sincronizzazione-di-file-e-directory&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#sincronizzazione-di-file-e-directory&quot; aria-label=&quot;Anchor link for: sincronizzazione-di-file-e-directory&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
sincronizzazione di file e directory&lt;&#x2F;h3&gt;
&lt;p&gt;Questo comando si può usare sia tra due directory dello stesso computer, sia nel caso uno dei due sia remoto, l&#x27;enorme vantaggio sta nella seconda volta in cui viene lanciato, solo le differenze tra il primo e il secondo saranno trasferite, ottimizzando, quindi, i tempi del trasferimento. (saranno riportati anche i permessi dei singoli file)&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;rsync&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;auvx&lt;&#x2F;span&gt; &#x2F;orgine&#x2F; &#x2F;destinazione&#x2F;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;conversioni-di-formato-audio-video-ma-non-solo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#conversioni-di-formato-audio-video-ma-non-solo&quot; aria-label=&quot;Anchor link for: conversioni-di-formato-audio-video-ma-non-solo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Conversioni di formato (audio, video, ma non solo)&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;flac-diversi-metodi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#flac-diversi-metodi&quot; aria-label=&quot;Anchor link for: flac-diversi-metodi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Flac (diversi metodi)&lt;&#x2F;h4&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sox&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; track_01.wav track_01.flac&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-for z-shell&quot;&gt;for&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-for z-shell&quot;&gt; myfile &lt;span class=&quot;z-keyword z-control z-in z-shell&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-expansion z-command z-parens z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-shell&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt;.wav&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-shell&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-do z-shell&quot;&gt;do&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;flac&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; --&lt;&#x2F;span&gt;verify&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; --&lt;&#x2F;span&gt;replay-gain&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; --&lt;&#x2F;span&gt;best&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; --&lt;&#x2F;span&gt;delete-input-file&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;myfile&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-end z-shell&quot;&gt;done&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;ffmpeg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;i&lt;&#x2F;span&gt; in.wav&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;af&lt;&#x2F;span&gt; aformat=s16:44100 out.flac&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;ssh&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#ssh&quot; aria-label=&quot;Anchor link for: ssh&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Ssh&lt;&#x2F;h2&gt;
&lt;p&gt;Spesso la shell (= riga di comando) va a braccetto con il software ssh, che permette di collegarsi su un sistema remoto.
Grazie alla combinazione dei due, è possibile amministrare server remoti (cioé diversi dal pc che stiamo usando) o headless, cioé privi dell&#x27;interfaccia grafica (che consuma solo risorse aggiuntive), come il famoso #raspberrypi.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;curl&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#curl&quot; aria-label=&quot;Anchor link for: curl&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
curl&lt;&#x2F;h2&gt;
&lt;p&gt;Come non citare &lt;a href=&quot;https:&#x2F;&#x2F;curl.se&quot;&gt;curl&lt;&#x2F;a&gt; il coltellino svizzero della riga di comando, specializzando in richieste remote via http e trasferimento di file.
Su questo strumento (#curl) farò un articolo apposito, perché è uno strumento molto potente, in continuo sviluppo e con numerosi casi d&#x27;uso.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vim&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#vim&quot; aria-label=&quot;Anchor link for: vim&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Vim&lt;&#x2F;h2&gt;
&lt;p&gt;E&#x27; il mio editor per eccellenza, quando uso il terminale uso lui per editare i file di testo (e non solo).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installazione-pacchetti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione-pacchetti&quot; aria-label=&quot;Anchor link for: installazione-pacchetti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione pacchetti&lt;&#x2F;h2&gt;
&lt;p&gt;Tutte le varie distribuzioni linux hanno degli appositi software (rigorosamente da riga di comando) per installare i pacchetti e le loro dipendenze, alcuni esempi:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;apt (Debian&#x2F;Ubuntu)&lt;&#x2F;li&gt;
&lt;li&gt;dnf (Fedora, redhat)&lt;&#x2F;li&gt;
&lt;li&gt;pacman (Arclinux)&lt;&#x2F;li&gt;
&lt;li&gt;apk (Alpine)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;ansible&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#ansible&quot; aria-label=&quot;Anchor link for: ansible&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Ansible&lt;&#x2F;h2&gt;
&lt;p&gt;Oltre a bash, di cui sopra abbiamo ampiamente parlato, #ansible merita una mensione d&#x27;onore (è probabile che in futuro farò un articolo dedicato a questo strumento).
Ansible è un tool (open source) di automazione, con cui effettuare il provisioning, la gestione della configurazione, il deploy delle applicazioni e moltissimi altri processi IT, in modo semplice, organizzato e automatizzato.
Il suo utilizzo è libero, e in rete è possibile trovare migliaia di playbook (script), condivisi da altri utenti che permettono di automatizzare i compiti più disparati.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;software-di-backup&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#software-di-backup&quot; aria-label=&quot;Anchor link for: software-di-backup&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Software di Backup&lt;&#x2F;h2&gt;
&lt;p&gt;Da sempre Linux (ma non solo) offre molti software per gestire il backup da riga di comando.
Alcuni esempi&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;borg&lt;&#x2F;li&gt;
&lt;li&gt;duplicity&lt;&#x2F;li&gt;
&lt;li&gt;restic&lt;&#x2F;li&gt;
&lt;li&gt;rsync&lt;&#x2F;li&gt;
&lt;li&gt;rclone&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;powershell&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#powershell&quot; aria-label=&quot;Anchor link for: powershell&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Powershell&lt;&#x2F;h2&gt;
&lt;p&gt;Infine una piccola digressione&#x2F;informazione, anche Microsoft è stata costretta ad ammettere la &lt;strong&gt;superiorità della riga di comando&lt;&#x2F;strong&gt;, infatti dopo anni in cui ha puntato esclusivamente a rendere le interfacce sempre più accattivanti, da qualche anno fornisce insieme ai suoi sistemi operativi la #powershell.
Con questo software, di fatto, non ha voluto rimanere indietro rispetto al competitor #linux. In pratica è un ammissione circa il fatto che alcune cose si fanno meglio e più velocemente con la riga di comando!
Nel corso del tempo sono nate estenzioni per questa shell, e ormai è possibile effettuare moltissime operazioni, purtroppo ha una propria sintassi, quindi sarà necessario studiare un po&#x27;.&lt;&#x2F;p&gt;
&lt;p&gt;Per motivi spazio e tempi di lettura l&#x27;articolo finisce qui, ma ci sarebbe materiale a sufficienza per scrivere libri su libri o riempire di articoli giornalieri un blog.
Spero di avervi un po&#x27; incuriosito a provare, e con che i miei &lt;em&gt;appunti&lt;&#x2F;em&gt; su qualche comando che uso vi siano di aiuto.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Writefreely: il blog della semplicità</title>
          <pubDate>Sun, 15 Sep 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/writefreely-il-blog-della-semplicita/</link>
          <guid>https://www.agostinelli.eu/blog/writefreely-il-blog-della-semplicita/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/writefreely-il-blog-della-semplicita/">&lt;p&gt;Questo #blog è realizzato con il software #writefreely, la più semplice piattaforma per scrivere contenuti permanenti sul web.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;writefreely_logo.png&quot; alt=&quot;Writefreely Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;caratteristiche&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#caratteristiche&quot; aria-label=&quot;Anchor link for: caratteristiche&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Caratteristiche&lt;&#x2F;h2&gt;
&lt;p&gt;Si tratta di un software minimalista con cui creare un Blog, o anche un&#x27;intera comunità di più blog.&lt;&#x2F;p&gt;
&lt;p&gt;Tra le funzionalità, abbiamo l&#x27;&lt;strong&gt;autosaving&lt;&#x2F;strong&gt;, un editor lineare, senza distrazioni, con il supporto di #markup language.
Quella che può sembrare una limitazione, invece è un vantaggio: ci si concentra sul contenuto, e non sull&#x27;apparenza.&lt;&#x2F;p&gt;
&lt;p&gt;Ci sono sia il supporto per il feed rss che la federazione con il #fediverso.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;writefreely_updates.png&quot; alt=&quot;Rss Fediverso&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;federazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#federazione&quot; aria-label=&quot;Anchor link for: federazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Federazione&lt;&#x2F;h2&gt;
&lt;p&gt;I vostri post saranno federati con il fediverso, per cui, ad esempio, chiunque abbiamo un account su #mastodon potrà seguire il vostro blog.
Se non sapete cos&#x27;è il #fediverso, potete approfondire qui: https:&#x2F;&#x2F;fediverso.it&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installazione-e-configurazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione-e-configurazione&quot; aria-label=&quot;Anchor link for: installazione-e-configurazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione e configurazione&lt;&#x2F;h2&gt;
&lt;p&gt;Software leggerissimo, occupa pochissime risorse ed è un solo semplice eseguibile, con l&#x27;unico requisito di un database #mysql, che \e dove saranno salvati i contenuti.&lt;&#x2F;p&gt;
&lt;p&gt;Se volete cimentarvi nell&#x27;installazione e configurazione, seguita la guida ufficiale, davvero molto semplice, ma esaustiva:
https:&#x2F;&#x2F;writefreely.org&#x2F;start&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gestione-immagini&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#gestione-immagini&quot; aria-label=&quot;Anchor link for: gestione-immagini&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Gestione Immagini&lt;&#x2F;h2&gt;
&lt;p&gt;Dopo averlo provato, l&#x27;unica cose di cui sentivo la mancanza era una gestione delle #immagini, ma ho risolto in maniera molto semplice e utile, vi lascio all&#x27;articolo che avevo scritto a tal proposito (basterà cliccare sul tag #immagini).&lt;&#x2F;p&gt;
&lt;p&gt;##Personalizzazione
E&#x27; possibile configurarlo per gestire più blog o uno soltanto (il sito sui cui vi trovato è in modalità mono).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;writefreely_publicity.png&quot; alt=&quot;Pubblicazione post&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ciascun blog, può essere configurato i 3 modalità:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pubblico&lt;&#x2F;strong&gt;: tutti leggono i vostri articoli.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Privato&lt;&#x2F;strong&gt;: accessibile solo agli utenti registrati&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Protetto da password&lt;&#x2F;strong&gt;: unica per tutti per poter leggere&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Riguardo al punto 1, starà poi a voi decidere se renderlo &lt;strong&gt;indicizzabile dai motori di ricerca&lt;&#x2F;strong&gt; oppure no, semplicemente configurando il file #robots.txt&lt;&#x2F;p&gt;
&lt;p&gt;Esistono 3 &lt;strong&gt;modalità di visualizzazione&lt;&#x2F;strong&gt; dei post:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Blog&lt;&#x2F;strong&gt;: vengono mostrate le data degli articoli che saranno visualizzati dal più recente.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Novel&lt;&#x2F;strong&gt;: nessuna data degli articoli, ordinamento dal primo post in poi&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Notebook&lt;&#x2F;strong&gt;: nessuna data degli articoli, ordinamento dal post più recente.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;writefreely_display_post.png&quot; alt=&quot;Display post&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Infine è disponibile un campo per la firma da personalizzare, questo &lt;em&gt;&quot;pezzetto&quot;&lt;&#x2F;em&gt; di testo, o codice, sarà presente in calce a tutti gli articoli.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;css&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#css&quot; aria-label=&quot;Anchor link for: css&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Css&lt;&#x2F;h3&gt;
&lt;p&gt;Le uniche &lt;strong&gt;personalizzazioni grafiche&lt;&#x2F;strong&gt; realizzabili sono tramite il #css, è possibile trovare in rete dei temi giù pronti da cui partire, tramite i quali personalizzare colori, stili, dimensioni e distanze della pagina, in pieno spirito minimalista.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusioni&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#conclusioni&quot; aria-label=&quot;Anchor link for: conclusioni&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Conclusioni&lt;&#x2F;h2&gt;
&lt;p&gt;Personalmente trovo sia davvero piacevole aprire la schermata di nuovo articolo e trovare un schermo pulito, vuoto, in cui concentrarsi sulla scrittura e quindi sul contenuto, &lt;em&gt;less is more&lt;&#x2F;em&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;Ho scelto questo software perché non avevo bisogno di fare chissà quale cose strabilianti, ma appunto la necessità era quella di scrivere qualcosa utile per gli altri, ma anche per me (scrivere mi rilassa).&lt;&#x2F;p&gt;
&lt;p&gt;Costa aspettate a provarlo? Per chi non si vuol sbattere (o non ha dove farlo) nell&#x27;installazione, consiglio questo sito dove potete aprire il vostro blog writefreely: https:&#x2F;&#x2F;noblogo.org&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Retropie</title>
          <pubDate>Fri, 03 May 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/retropie/</link>
          <guid>https://www.agostinelli.eu/blog/retropie/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/retropie/">&lt;p&gt;RetroPie è un software gratuito che è possibile installare su Raspberry Pi, Odroid e sistemi x86 e permette di emulare i videogiochi del passato!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;RetroPie-Logo.svg.png&quot; alt=&quot;Retropie logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Si basa su retroarch, che è un frontend per vari emulatori, uno dei suoi punti di forza è la possibilità di avere una configurazione unificata per tutte le piattaforme.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;RetroArch&#x2F;Libretro&lt;&#x2F;em&gt; è un progetto di frontend e backend che si propone di creare un proprio ecosistema software che giri come codice dinamico.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;1004000479.png&quot; alt=&quot;cadillac&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;1889398773.jpg&quot; alt=&quot;mortal kombat&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;360801805.jpg&quot; alt=&quot;street fighter&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;guida-brevissima&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#guida-brevissima&quot; aria-label=&quot;Anchor link for: guida-brevissima&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Guida brevissima&lt;&#x2F;h2&gt;
&lt;p&gt;Perché una guida brevissima? Il web è pieno di guide per installare retropie, non ha senso scriverne un&#x27;altra, quindi, fate una ricerca: &lt;a href=&quot;https:&#x2F;&#x2F;librey.devol.it&#x2F;search.php?q=installare+retropie&amp;amp;p=0&amp;amp;t=0&quot;&gt;installare retropie&lt;&#x2F;a&gt;.
In breve: si scarica immagine della scheda SE, con un software come balena etcher (o dd) la si scrive sulla scheda, si copiano i giochi in nostro possesso, e, infine, si inserisce e via!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;come-si-gioca&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-si-gioca&quot; aria-label=&quot;Anchor link for: come-si-gioca&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come si gioca&lt;&#x2F;h2&gt;
&lt;p&gt;E&#x27; possibile collegare joypad usb o bluetooth, o usare una tastiera (magari meccanica) per navigare tra i menù e giocare.
Date un&#x27;occhiata ai joypad della &lt;a href=&quot;https:&#x2F;&#x2F;www.8bitdo.com&quot;&gt;8bitdo&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Essendo un sistema estremamente portatile, è l&#x27;ideale da portare ad una cena tra amici e trascorrere la serata a ricordare i giochi che hanno caratterizzato la nostra adolescenza! Sarà sufficiente trovare un tv dotato di porta HDMI, una presa di alimentazione e il divertimento è assicurato.&lt;&#x2F;p&gt;
&lt;p&gt;Se emulate giochi &lt;em&gt;&quot;pesanti&quot;&lt;&#x2F;em&gt; potrebbe essere necessario montare una ventola e dei buoi dissipatori sul vostro raspberry.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;raspberry-pi-retropie.jpg&quot; alt=&quot;Raspberry e Retropie&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;configurazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazione&quot; aria-label=&quot;Anchor link for: configurazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazione&lt;&#x2F;h2&gt;
&lt;p&gt;Le personalizzazioni alla configurazione e il caricamento di nuovi file può essere effettuato in due modi:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Collegando direttamente la scheda sd ad un altro computer&lt;&#x2F;li&gt;
&lt;li&gt;Configurare il sistema per collegarsi alla rete (wifi, ethernet), in modo da poter accedere alle cartelle condivise (già configurate di default).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Il secondo metodo è molto utile anche per applicare aggiornamenti o per fare lo &lt;em&gt;scraping&lt;&#x2F;em&gt; delle copertine.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;emulationstation&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#emulationstation&quot; aria-label=&quot;Anchor link for: emulationstation&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
EmulationStation&lt;&#x2F;h3&gt;
&lt;p&gt;Si tratta del frontend (menù) che ci accoglie dopo aver acceso il sistema. Da qui si fanno partire i vari giochi (e programmi), è altamente personalizzabile, sia come temi che come immagini.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;retroarch&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#retroarch&quot; aria-label=&quot;Anchor link for: retroarch&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Retroarch&lt;&#x2F;h3&gt;
&lt;p&gt;Trattandosi di un unico frontend per i vari emulatori, è possibile accedere al menu e cambiare le configurazioni (es mappatura tasti) per il singolo gioco o come globali e quindi per tutti i giochi che andremo a provare successivamente&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;retroarch_logo.png&quot; alt=&quot;Retroarch&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sistemi-emulati&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#sistemi-emulati&quot; aria-label=&quot;Anchor link for: sistemi-emulati&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Sistemi emulati&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;3do&lt;&#x2F;li&gt;
&lt;li&gt;Amiga&lt;&#x2F;li&gt;
&lt;li&gt;Amstrad CPC&lt;&#x2F;li&gt;
&lt;li&gt;Apple II&lt;&#x2F;li&gt;
&lt;li&gt;Atari 2600&lt;&#x2F;li&gt;
&lt;li&gt;Atari 5200&lt;&#x2F;li&gt;
&lt;li&gt;Arari 7800&lt;&#x2F;li&gt;
&lt;li&gt;Atari Jaguar&lt;&#x2F;li&gt;
&lt;li&gt;Atari Lynx&lt;&#x2F;li&gt;
&lt;li&gt;Atari ST, STE, TT, Falcon&lt;&#x2F;li&gt;
&lt;li&gt;Coco&lt;&#x2F;li&gt;
&lt;li&gt;Colevovision&lt;&#x2F;li&gt;
&lt;li&gt;Commodore 64, Vic-20&lt;&#x2F;li&gt;
&lt;li&gt;Daphne&lt;&#x2F;li&gt;
&lt;li&gt;Dragon 32&lt;&#x2F;li&gt;
&lt;li&gt;Dreamcast&lt;&#x2F;li&gt;
&lt;li&gt;FinalBurn Neo&lt;&#x2F;li&gt;
&lt;li&gt;Famicon Disk System&lt;&#x2F;li&gt;
&lt;li&gt;GameCube&lt;&#x2F;li&gt;
&lt;li&gt;Game &amp;amp; Watch&lt;&#x2F;li&gt;
&lt;li&gt;Game Gear&lt;&#x2F;li&gt;
&lt;li&gt;Game Boy&lt;&#x2F;li&gt;
&lt;li&gt;Game Boy Color&lt;&#x2F;li&gt;
&lt;li&gt;Game Boy Advance&lt;&#x2F;li&gt;
&lt;li&gt;Intellivision&lt;&#x2F;li&gt;
&lt;li&gt;Macintosh&lt;&#x2F;li&gt;
&lt;li&gt;MAME&lt;&#x2F;li&gt;
&lt;li&gt;Master System&lt;&#x2F;li&gt;
&lt;li&gt;Mega-Cd&#x2F;Sega Cd&lt;&#x2F;li&gt;
&lt;li&gt;Megadrive &#x2F; Genesis&lt;&#x2F;li&gt;
&lt;li&gt;MESS&lt;&#x2F;li&gt;
&lt;li&gt;MSX&lt;&#x2F;li&gt;
&lt;li&gt;Neo Geo&lt;&#x2F;li&gt;
&lt;li&gt;Neo Geo Pocket&lt;&#x2F;li&gt;
&lt;li&gt;Neo Geo Pocket Color&lt;&#x2F;li&gt;
&lt;li&gt;Nintendo 64&lt;&#x2F;li&gt;
&lt;li&gt;Nintendo DS&lt;&#x2F;li&gt;
&lt;li&gt;Nintendo Entertainment System&lt;&#x2F;li&gt;
&lt;li&gt;Oriuc&#x2F;Armos&lt;&#x2F;li&gt;
&lt;li&gt;PC&lt;&#x2F;li&gt;
&lt;li&gt;PC-8800&lt;&#x2F;li&gt;
&lt;li&gt;PC-9800&lt;&#x2F;li&gt;
&lt;li&gt;PC Engine&lt;&#x2F;li&gt;
&lt;li&gt;PC Engine 2&lt;&#x2F;li&gt;
&lt;li&gt;Playstation 1&lt;&#x2F;li&gt;
&lt;li&gt;Playstation 2&lt;&#x2F;li&gt;
&lt;li&gt;Pokemon Mini&lt;&#x2F;li&gt;
&lt;li&gt;PSP&lt;&#x2F;li&gt;
&lt;li&gt;ResidualVM&lt;&#x2F;li&gt;
&lt;li&gt;SAM Coupé&lt;&#x2F;li&gt;
&lt;li&gt;Saturn&lt;&#x2F;li&gt;
&lt;li&gt;ScummVM&lt;&#x2F;li&gt;
&lt;li&gt;Sega 32x&lt;&#x2F;li&gt;
&lt;li&gt;Sega SG-1000&lt;&#x2F;li&gt;
&lt;li&gt;Sharp X1&lt;&#x2F;li&gt;
&lt;li&gt;Sharp X68000&lt;&#x2F;li&gt;
&lt;li&gt;Super Nintendo Entertainment System&lt;&#x2F;li&gt;
&lt;li&gt;TI-99&lt;&#x2F;li&gt;
&lt;li&gt;TRS-80&lt;&#x2F;li&gt;
&lt;li&gt;Vectrex&lt;&#x2F;li&gt;
&lt;li&gt;Videopac&lt;&#x2F;li&gt;
&lt;li&gt;Virtual Boy&lt;&#x2F;li&gt;
&lt;li&gt;Wii&lt;&#x2F;li&gt;
&lt;li&gt;WonderSwan&lt;&#x2F;li&gt;
&lt;li&gt;WonderSwan Color&lt;&#x2F;li&gt;
&lt;li&gt;ZX-81&lt;&#x2F;li&gt;
&lt;li&gt;ZX Spectrum&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;rom-e-licenze-disclaimer&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#rom-e-licenze-disclaimer&quot; aria-label=&quot;Anchor link for: rom-e-licenze-disclaimer&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Rom e licenze (disclaimer)&lt;&#x2F;h2&gt;
&lt;p&gt;Attenzione al fatto che molte delle rom anche ancora il copyright in vigore, per cui è necessario possedere una copia acquistata dei giochi che andrete a caricare sul vostro sistema.
Usare copie pirata dei giochi è un reato&lt;&#x2F;p&gt;
&lt;h2 id=&quot;approfondimenti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#approfondimenti&quot; aria-label=&quot;Anchor link for: approfondimenti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Approfondimenti&lt;&#x2F;h2&gt;
&lt;p&gt;Se ne volete sapere ancora di più vi lascio qualche sito:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;retropie.org.uk (sito ufficiale)&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.retropie.it (sito italiano non ufficiale)&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;t.me&#x2F;retropie_it (gruppo telegram in italiano)&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;mastodon.uno&#x2F;tags&#x2F;retropie (mastodon)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;per-veri-nerd&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#per-veri-nerd&quot; aria-label=&quot;Anchor link for: per-veri-nerd&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Per veri nerd&lt;&#x2F;h2&gt;
&lt;p&gt;Se ho incuriosito, lo avete provato, vi siete divertiti il passo successivo è quello di costruire un cabinet personalizzato!&lt;&#x2F;p&gt;
&lt;p&gt;Vi lascio a qualche immagine presa in giro sul web, giusto per farvi un&#x27;idea.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;5li7ikzmf1w11.jpg&quot; alt=&quot;cabinet1&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;pi-inside.jpg&quot; alt=&quot;cabinet2&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;Final.jpg&quot; alt=&quot;cabinet3&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;maxresdefault.jpg&quot; alt=&quot;cabinet4&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nes-case&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#nes-case&quot; aria-label=&quot;Anchor link for: nes-case&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Nes Case&lt;&#x2F;h3&gt;
&lt;p&gt;Io ho questo come case per il raspberry che uso con retropie. Il disco ssd si trova in quella che era la cartuccia del videogioco!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nespi4_case.jpg&quot; alt=&quot;nespi4&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nespi4_case_2.webp&quot; alt=&quot;nespi42&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Nextcloud</title>
          <pubDate>Fri, 23 Feb 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/nextcloud/</link>
          <guid>https://www.agostinelli.eu/blog/nextcloud/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/nextcloud/">&lt;p&gt;&lt;em&gt;Nota Introduttiva: questo articolo sarà solo un&#x27;introduzione, seguiranno approfondimenti sui singoli componenti.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cos-e-nextcloud&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e-nextcloud&quot; aria-label=&quot;Anchor link for: cos-e-nextcloud&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è nextcloud&lt;&#x2F;h2&gt;
&lt;p&gt;Software open source che permette di realizzare  un servizio Cloud personale per i propri dati.  Ambiente collaborativo e può anche essere federato con altre installazioni.
È possibile installarlo su un proprio dispositivo o usare quello messo a disposizione da alcune aziende o associazioni.
L&#x27;architettura è modulare, questo ci permette di attivare solo le funzionalità che ci servono e se ne possono aggiungere di nuove (via via che gli sviluppatori le rilasciano). C&#x27;è un plugin per ogni esigenza!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;Nextcloud_Logo.svg.png&quot; alt=&quot;Nextcloud Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;caratteristiche&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#caratteristiche&quot; aria-label=&quot;Anchor link for: caratteristiche&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Caratteristiche&lt;&#x2F;h2&gt;
&lt;p&gt;Il suo punto di forza è la &lt;strong&gt;condivisione&lt;&#x2F;strong&gt; e la &lt;strong&gt;sincronizzazione&lt;&#x2F;strong&gt; dei file, che può avvenire tramite semplice browser web o utilizzando l&#x27;applicazione disponibile per tutti i sistemi operativi. Possiamo considerarlo un&#x27;alternativa a Dropbox, Google drive o onedrive.
Ci sono anche numerosi &lt;strong&gt;servizi aggiuntivi&lt;&#x2F;strong&gt;, che coprono diverse esigenze, come ad esenpio:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;calendario&lt;&#x2F;li&gt;
&lt;li&gt;contatti&lt;&#x2F;li&gt;
&lt;li&gt;webmail&lt;&#x2F;li&gt;
&lt;li&gt;attività (task)&lt;&#x2F;li&gt;
&lt;li&gt;note (markup language)&lt;&#x2F;li&gt;
&lt;li&gt;chat interna&lt;&#x2F;li&gt;
&lt;li&gt;suite per l&#x27;ufficio (via web, basata su libreoffice)&lt;&#x2F;li&gt;
&lt;li&gt;galleria immagini&lt;&#x2F;li&gt;
&lt;li&gt;ebook reader&lt;&#x2F;li&gt;
&lt;li&gt;password manager&lt;&#x2F;li&gt;
&lt;li&gt;gestione bookmark (con possibilità di sync con plugin per il browser)&lt;&#x2F;li&gt;
&lt;li&gt;podcast&lt;&#x2F;li&gt;
&lt;li&gt;libro di ricette&lt;&#x2F;li&gt;
&lt;li&gt;ricerca&lt;&#x2F;li&gt;
&lt;li&gt;forms&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Questi servizi possono essere usati via web, o con i vari client, con il vantaggio di avere tutto &lt;strong&gt;sincronizzato tra più dispositivi&lt;&#x2F;strong&gt;.
Nextcloud diventa così il proprio hub personale dove ci sono tutti i propri dati e le proprie attività.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_dashboard.png&quot; alt=&quot;Nextcloud Dashboard&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vantaggi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#vantaggi&quot; aria-label=&quot;Anchor link for: vantaggi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Vantaggi&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;self hosting: possiamo installarlo su un nostro pc o su una #vps in modo che i &lt;strong&gt;nostri dati&lt;&#x2F;strong&gt; siano sempre sotto il nostro controllo.&lt;&#x2F;li&gt;
&lt;li&gt;nel caso si voglia affidarsi al lavoro di altri, possiamo scegliere il provider che vogliamo e cambiarlo in qualsiasi momento (esportando i dati)&lt;&#x2F;li&gt;
&lt;li&gt;tra utenti dello stesso server (o federati) è possibile collaborare&lt;&#x2F;li&gt;
&lt;li&gt;condivisione di file (e immagini) avendo sempre tutto sotto controllo, vedi paragrafo dedicato sotto.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;ricerca globale&lt;&#x2F;strong&gt;: usando la casella di ricerca, questa verrà effettuata ovunque: file, note, contatti, calendario, ecc. ecc.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_passwordmanager.webp&quot; alt=&quot;Nextcloud Dashboard&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;backup&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#backup&quot; aria-label=&quot;Anchor link for: backup&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Backup&lt;&#x2F;h2&gt;
&lt;p&gt;Come abbiamo visto nextcloud è la nostra casa personale di tutti i dati e attività, diventa quindi fondentale prevedere un sistema di backup affidabile, a cui far ricorso in caso di problemi.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cosa-salvare&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cosa-salvare&quot; aria-label=&quot;Anchor link for: cosa-salvare&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cosa salvare&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;Database: dipende da quello che avete scelto, ma solitamente si tratta di &lt;em&gt;Mysql&lt;&#x2F;em&gt; (o &lt;em&gt;MariaDB&lt;&#x2F;em&gt;). Le procedure di salvataggio sono quelle consuete (&lt;em&gt;mysqldump&lt;&#x2F;em&gt;), che potete trovare in rete o in questo blog (in futuro).&lt;&#x2F;li&gt;
&lt;li&gt;File: salvataggio della directory nextcloud ospitata dal webserver, che contiene sia il software che i nostri dati&lt;&#x2F;li&gt;
&lt;li&gt;Se non siamo gli unici utilizzatori dell&#x27;istanza, è consigliabile impostare l&#x27;istanza in &lt;strong&gt;modalità manutenzione&lt;&#x2F;strong&gt; durante le operazioni di salvataggio, in modo da avere la consistenza dei dati.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Vi consiglio di usare un sistema come #borg, il quale può essere usato in modalità &lt;strong&gt;incrementale&lt;&#x2F;strong&gt; così vi garantisce di poter recuperare sempre una certa versione dei vostri documenti e ha il vantaggio che, dopo la prima esecuzione, i backup successivi trasferiranno solo le nuove modifiche sul backup, saranno così molto veloci e occuperanno solo lo spazio strettamente necessario!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;condivisione-di-file&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#condivisione-di-file&quot; aria-label=&quot;Anchor link for: condivisione-di-file&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Condivisione di file&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;cartelle (e file) in sola lettura per utenti anonimi anche protetti da password&lt;&#x2F;li&gt;
&lt;li&gt;possibilità di poter ricevere file da altri (upload)&lt;&#x2F;li&gt;
&lt;li&gt;galleria foto&lt;&#x2F;li&gt;
&lt;li&gt;cartelle collaborative con altri utenti del server (o istanze federate)&lt;&#x2F;li&gt;
&lt;li&gt;supporto nativo a #webdav&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;applicazione desktop&lt;&#x2F;strong&gt; per sincronizzazione automatica dei file.&lt;&#x2F;li&gt;
&lt;li&gt;supporto al versionamento&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;calendario-e-contatti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#calendario-e-contatti&quot; aria-label=&quot;Anchor link for: calendario-e-contatti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Calendario e contatti&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;configurando un app come #davx5 vi permette di sincronizzare contatti e calendario del vostro smartphone&lt;&#x2F;li&gt;
&lt;li&gt;È possibile sincronizzare anche i client desktop, sfruttando i protocolli standard #caldav e #carddav&lt;&#x2F;li&gt;
&lt;li&gt;import e export da e verso altri sistemi&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;app-mobile&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#app-mobile&quot; aria-label=&quot;Anchor link for: app-mobile&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
App mobile&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;accesso a tutti i propri file in mobilità&lt;&#x2F;li&gt;
&lt;li&gt;auto upload delle foto scattate&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;task&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#task&quot; aria-label=&quot;Anchor link for: task&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Task&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;gestione categorie&lt;&#x2F;li&gt;
&lt;li&gt;sotto task&lt;&#x2F;li&gt;
&lt;li&gt;date di inizio e scadenza&lt;&#x2F;li&gt;
&lt;li&gt;percentuale avanzamento&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;note&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#note&quot; aria-label=&quot;Anchor link for: note&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Note&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;accesso web&lt;&#x2F;li&gt;
&lt;li&gt;markup language&lt;&#x2F;li&gt;
&lt;li&gt;categorie&lt;&#x2F;li&gt;
&lt;li&gt;app mobile&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;nota-personale&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#nota-personale&quot; aria-label=&quot;Anchor link for: nota-personale&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Nota personale&lt;&#x2F;h3&gt;
&lt;p&gt;Io sto usando tantissimo le note, per segnarmi di tutto: appunti, comandi, persino le bozze che scrivo per il blog. Trovo che sia la vera killer application, ritrovo sempre tutto e l&#x27;impaginazione è semplice e funzionale.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_notes.png&quot; alt=&quot;Nextcloud Note&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_postit.jpeg&quot; alt=&quot;Nextcloud PostIt&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;suite-ufficio&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#suite-ufficio&quot; aria-label=&quot;Anchor link for: suite-ufficio&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Suite ufficio&lt;&#x2F;h2&gt;
&lt;p&gt;E&#x27; possibile &lt;strong&gt;editare i documenti&lt;&#x2F;strong&gt; office anche via interfaccia web:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Software basato sul diffuso libreoffice&lt;&#x2F;li&gt;
&lt;li&gt;Editing collaborativo real time (è necessario installare &lt;strong&gt;Collabora office&lt;&#x2F;strong&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;utenti-di-mastodon-uno&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#utenti-di-mastodon-uno&quot; aria-label=&quot;Anchor link for: utenti-di-mastodon-uno&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Utenti di mastodon.uno&lt;&#x2F;h2&gt;
&lt;p&gt;Se vi ho incuriosito e volete provare ad usarlo, vi segnalo che gli utenti di mastodon.uno posso richiedere un account da qui:
https:&#x2F;&#x2F;cloud.mastodon.uno&#x2F;apps&#x2F;forms&#x2F;s&#x2F;YSCoCC37D9omTN8iXSKkQqz9
(sul server sono già preinstallati diversi software aggiuntivi)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_photos.webp&quot; alt=&quot;Nextcloud Photos&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_cookbook.jpg&quot; alt=&quot;Nextcloud Cookbook&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Come bloccare la pubblicità sullo smartphone </title>
          <pubDate>Sat, 10 Feb 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/come-bloccare-la-pubblicita-sullo-smartphone/</link>
          <guid>https://www.agostinelli.eu/blog/come-bloccare-la-pubblicita-sullo-smartphone/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/come-bloccare-la-pubblicita-sullo-smartphone/">&lt;p&gt;&lt;strong&gt;Aggiornamento 14&#x2F;02&#x2F;2024&lt;&#x2F;strong&gt;: aggiungo in fondo all&#x27;articolo le modifiche necessarie per la parte server.&lt;&#x2F;p&gt;
&lt;p&gt;Questo metodo lo utilizzo ormai da svariati mesi e &lt;strong&gt;funziona benissimo&lt;&#x2F;strong&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;Premetto subito che non è una semplice soluzione adatta per tutti, poiché richiede un server #wireguard e un&#x27;installazione di #pihole.
Però se avete un amico che ha già configurato tutto per se, sarà molto semplice farlo usare anche a voi! E&#x27; complessa la configurazione server, mentre la &lt;strong&gt;parte client è semplicissima&lt;&#x2F;strong&gt;: scaricare un&#x27;app e scansionare un qr code.&lt;&#x2F;p&gt;
&lt;p&gt;Abbiamo visto la configurazione di entrambi su questo blog (cliccate sui due hashtag per le leggere le guide).&lt;&#x2F;p&gt;
&lt;p&gt;Con questo metodo non solo bloccherete le pubblicità invasive sul browser, ma &lt;strong&gt;su tutte le app&lt;&#x2F;strong&gt;!
Inoltre oltre al blocco pubblicità avrete anche il &lt;strong&gt;blocco dei siti malevoli&lt;&#x2F;strong&gt; (in base alle liste che avete deciso di aggiungere a pihole).&lt;&#x2F;p&gt;
&lt;p&gt;Il trucco è usare la vpn per fare in modo che lo smartphone navighi nello stessa modalità che avviene da casa, cioè protetto da pihole!&lt;&#x2F;p&gt;
&lt;p&gt;Abbiamo due diverse modalità di uso per la vpn:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;usarla solo per la risoluzione dns&lt;&#x2F;li&gt;
&lt;li&gt;usarla per tutto il traffico&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;L&#x27;una non esclude l&#x27;altra, cioè possiamo fare due profili diversi e passare da uno all&#x27;altro in base alle necessità (ad esempio se ci connettiamo un WiFi pubblico non protetto, conviene usare la seconda opzione).
La prima soluzione ha il vantaggio di consumare pochissima banda per il server, solo lo stretto necessario per le risoluzioni dns.&lt;&#x2F;p&gt;
&lt;p&gt;Esempio di configurazione solo dns:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Interface]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PrivateKey = chiave_priv_client1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Address = 192.168.20.2&#x2F;24
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Dns = ip_vpn_privato_server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Peer]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PublicKey = chiave_pub_server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;AllowedIPs = ip_vpn_privato_server&#x2F;32
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Endpoint = hostname_pubblico_server:porta
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Esempio di configurazione traffico completo:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Interface]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PrivateKey = chiave_priv_client1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Address = 192.168.20.2&#x2F;24
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Dns = ip_vpn_privato_server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Peer]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PublicKey = chiave_pub_server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;AllowedIPs  = 0.0.0.0&#x2F;0, ::&#x2F;0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Endpoint = hostname_pubblico_server:porta
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Vi consiglio di usare questo client per wireguard &lt;strong&gt;wg-tunnel&lt;&#x2F;strong&gt;, perché ha una funzionalità fondamentale per il nostro scopo: è in grado di &lt;strong&gt;attivare automaticamente la vpn&lt;&#x2F;strong&gt; quando ci disconnettiamo dalla nostra wifi (è possibile scegliere più reti fidate).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wg-tunnel_logo.png&quot; alt=&quot;Wg tunnel Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wg-tunnel_screen1.png&quot; alt=&quot;Wg tunnel Screen 1&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wg-tunnel_screen2.png&quot; alt=&quot;Wg tunnel Screen 2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Non ho provato questa soluzione su iPhone, ma presumo che possa funzionare anche lì.&lt;&#x2F;p&gt;
&lt;p&gt;Infine vi consiglio anche un&#x27;ottimo client #android per gestire pihole: Pi-hole Droid.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aggiornamento-14-12-2024&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#aggiornamento-14-12-2024&quot; aria-label=&quot;Anchor link for: aggiornamento-14-12-2024&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Aggiornamento 14&#x2F;12&#x2F;2024&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;modifiche-configurazione-server&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#modifiche-configurazione-server&quot; aria-label=&quot;Anchor link for: modifiche-configurazione-server&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Modifiche configurazione server&lt;&#x2F;h3&gt;
&lt;p&gt;Affinchè il server sia in grado di ruotare i pacchetti ricevuti dalla VPN è necessaria qualche configurazione in più, dei comandi &lt;em&gt;&quot;standard&quot;&lt;&#x2F;em&gt; #iptables per gli addetti ai lavori.
(su iptables trovate  ampia documentazione on line)
Ma veniamo al dunque&lt;&#x2F;p&gt;
&lt;p&gt;Esempio di righe in aggiunta alla parte server:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;...
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -A FORWARD -i %i -j ACCEPT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -A FORWARD -o %i -j ACCEPT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;# DNS - sostituire 192.168.1.x con ip del proprio pihole
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -I FORWARD -i %i -p udp -m udp -d 192.168.1.x&#x2F;32 --dport 53 -j ACCEPT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -I FORWARD -i %i -p tcp -m tcp -d 192.168.1.x&#x2F;32 --dport 53 -j ACCEPT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;# Blocco rete locale per tutti (nell&amp;#39;esempio è con subnet 192.168.1.0)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -I FORWARD -i %i -d 192.168.1.0&#x2F;24 -j REJECT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;# Apertura rete locale ad un singolo ip
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -I FORWARD -i %i -s 172.16.2.2&#x2F;32 -d 192.168.1.0&#x2F;24 -j ACCEPT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostDown = iptables -D FORWARD -i %i -j ACCEPT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostDown = iptables -D FORWARD -o %i -j ACCEPT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;...
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
      </item>
      <item>
          <title>Wireguard - VPN per tutti</title>
          <pubDate>Sun, 28 Jan 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/wireguard-vpn-per-tutti/</link>
          <guid>https://www.agostinelli.eu/blog/wireguard-vpn-per-tutti/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/wireguard-vpn-per-tutti/">&lt;h2 id=&quot;definizione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#definizione&quot; aria-label=&quot;Anchor link for: definizione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Definizione&lt;&#x2F;h2&gt;
&lt;p&gt;WireGuard è un programma &lt;strong&gt;open source&lt;&#x2F;strong&gt; che implementa una connessione &lt;strong&gt;VPN&lt;&#x2F;strong&gt; per creare connessioni sicure punto-punto&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;Logo_of_WireGuard.svg&quot; alt=&quot;Wireguard Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-cosa-serve&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#a-cosa-serve&quot; aria-label=&quot;Anchor link for: a-cosa-serve&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
A cosa serve?&lt;&#x2F;h2&gt;
&lt;p&gt;Sicuramente avrete già sentito parlare di vpn, qualora ne siate a digiuno provo a scriverlo brevemente. Attivando questa connessione tra due dispositivi, collegati entrambi alla rete internet, permette loro, in modo &lt;strong&gt;sixuro&lt;&#x2F;strong&gt;,  di comunicare tra di loro.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vantaggi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#vantaggi&quot; aria-label=&quot;Anchor link for: vantaggi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Vantaggi&lt;&#x2F;h2&gt;
&lt;p&gt;Wireguard si distingue da altri programmi simili per la sua leggerezza, occupa pochissime risorse, e per le prestazioni.
Se lo provate, con una buona connessione da ambo i lati, vi sembrerà davvero di essere in rete locale.
La connessione tra i due punti è cifrata e quindi sicura.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;perche-usarlo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche-usarlo&quot; aria-label=&quot;Anchor link for: perche-usarlo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché usarlo&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Collegarsi alla propria rete domestica da fuori casa (senza esporre pubblicamente i servizi, ma solo la porta della vpn)&lt;&#x2F;li&gt;
&lt;li&gt;Amministrare &#x2F; gestire dispositivi di: amici &#x2F; parenti &#x2F; clienti&lt;&#x2F;li&gt;
&lt;li&gt;Condividere risorse locali solo con chi si vuole&lt;&#x2F;li&gt;
&lt;li&gt;Anonimato (navigare sul web come se fisicamente si ci trovasse nella rete del server vpn)&lt;&#x2F;li&gt;
&lt;li&gt;Sicurezza: se si è connessi ad una rete pubblica il nostro traffico sarà comunque cifrato&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;blocco pubblicità su smartphone&lt;&#x2F;strong&gt; se usato in accoppiata a #pihole (seguirà articolo dedicato)&lt;&#x2F;li&gt;
&lt;li&gt;Supporto dello &lt;strong&gt;split tunnel&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;caratteristiche&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#caratteristiche&quot; aria-label=&quot;Anchor link for: caratteristiche&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Caratteristiche&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Si basa su protocollo udp, e non tcp per avere prestazioni migliori&lt;&#x2F;li&gt;
&lt;li&gt;Disponibile per svariati sistemi operativi&lt;&#x2F;li&gt;
&lt;li&gt;Funziona su tutti i dispositivi mobili&lt;&#x2F;li&gt;
&lt;li&gt;Risorse richieste quasi nulle, funziona benissimo su vecchi pc o su #raspberrypi&lt;&#x2F;li&gt;
&lt;li&gt;Configurazione facile con un &lt;strong&gt;file unico&lt;&#x2F;strong&gt; (portatile)&lt;&#x2F;li&gt;
&lt;li&gt;Configurazione tramite &lt;strong&gt;qr code&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Possibilità di avere più &lt;strong&gt;vpn attive contemporaneamente&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wireguard-roadwarrior-splittunnel.png&quot; alt=&quot;Wireguard Connections&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;creare-una-nuova-connessione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#creare-una-nuova-connessione&quot; aria-label=&quot;Anchor link for: creare-una-nuova-connessione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Creare una nuova connessione&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Installare il software&lt;&#x2F;li&gt;
&lt;li&gt;Scgliere una porta udp dedicata&lt;&#x2F;li&gt;
&lt;li&gt;Abllitare il forwarding della porta sul nostro router&lt;&#x2F;li&gt;
&lt;li&gt;Scelta di una subnet (dedicata)&lt;&#x2F;li&gt;
&lt;li&gt;Abilitare il forwarding dei pacchetti ip&lt;&#x2F;li&gt;
&lt;li&gt;Creare la configurazione&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;configurazione-manuale-da-riga-di-comando&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazione-manuale-da-riga-di-comando&quot; aria-label=&quot;Anchor link for: configurazione-manuale-da-riga-di-comando&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazione manuale (da riga di comando)&lt;&#x2F;h3&gt;
&lt;p&gt;Di seguito vari comandi, divisi per argomento, che permettono di attivare la nostra prima vpn.
La preshared key &lt;strong&gt;non è obbligatoria&lt;&#x2F;strong&gt; ma se la si usa si renderà la connessione ancora piuù sicura.
Negli esempi sottostanti abbiamo scelto 92.168.20.0&#x2F;24 come subnet per la nostra vpn.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;installazione-debian&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione-debian&quot; aria-label=&quot;Anchor link for: installazione-debian&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione (debian)&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo apt update
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo apt install wireguard
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo vi &#x2F;etc&#x2F;sysctl.conf
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;	net.ipv4.ip_forward=1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo sysctl -p
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;generazione-chiavi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#generazione-chiavi&quot; aria-label=&quot;Anchor link for: generazione-chiavi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Generazione chiavi&lt;&#x2F;h3&gt;
&lt;p&gt;Le chiavi generate vanno sia per una configurazione come server che come client&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;umask 077
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;wg genkey &amp;gt; privatekey
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;wg pubkey &amp;lt; privatekey &amp;gt; publickey
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;wg genpsk &amp;gt; preshared.keys
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;esempio-di-file-conf-del-server&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#esempio-di-file-conf-del-server&quot; aria-label=&quot;Anchor link for: esempio-di-file-conf-del-server&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Esempio di file conf del server&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;etc&#x2F;wireguard&#x2F;wg0.conf
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Interface]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PrivateKey = chiave_privata_server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Address = 192.168.20.1&#x2F;24
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;ListenPort = 52001
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;SaveConfig = true
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Peer]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PublicKey = chiave_pub_client_1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;AllowedIPs = 192.168.20.2&#x2F;32
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;esempio-di-file-conf-del-client&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#esempio-di-file-conf-del-client&quot; aria-label=&quot;Anchor link for: esempio-di-file-conf-del-client&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Esempio di file conf del client&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Interface]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PrivateKey = chiave_priv_client1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Address = 192.168.20.2&#x2F;24
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Peer]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PublicKey = chiave_pub_server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;AllowedIPs = 0.0.0.0&#x2F;0, ::&#x2F;0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Endpoint = hostname_pubblico_server:52001
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;comandi-per-la-connessione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#comandi-per-la-connessione&quot; aria-label=&quot;Anchor link for: comandi-per-la-connessione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Comandi per la connessione&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo wg-quick up wg1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo wg-quick down wg1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo wh show
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;avvio-automatico-con-systemd&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#avvio-automatico-con-systemd&quot; aria-label=&quot;Anchor link for: avvio-automatico-con-systemd&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Avvio automatico con systemd&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo systemctl enable wg-quick@wg0.service
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo systemctl start wg-quick@wg0.service
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo systemctl status wg-quick@wg0.service
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;generare-qr-code&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#generare-qr-code&quot; aria-label=&quot;Anchor link for: generare-qr-code&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Generare Qr code&lt;&#x2F;h4&gt;
&lt;p&gt;Installare il software qrencode&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;qrencode -t ansiutf8 &amp;lt; &#x2F;etc&#x2F;wireguard&#x2F;clients&#x2F;client1.conf
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wireguard_show.jpg&quot; alt=&quot;Wireguard Command Line&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aggiunta-nuovi-client&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#aggiunta-nuovi-client&quot; aria-label=&quot;Anchor link for: aggiunta-nuovi-client&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Aggiunta nuovi client&lt;&#x2F;h2&gt;
&lt;p&gt;Per aggiungere un nuovo client, conviene spengere la vpn del server (wg down), aggiungere le nuove righe al file di configurazione, e riattivare la connessione (wg up)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;configurazione-guidata&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazione-guidata&quot; aria-label=&quot;Anchor link for: configurazione-guidata&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazione guidata&lt;&#x2F;h3&gt;
&lt;p&gt;Vedi i due frontend web  suggeriti sotto per la parte server.
Per la configurazione come client è sufficiente importare il file conf generato o in alternativa il qr code.
Per la connessione è sufficiente utilizzare un client;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Su linux è possibile usare li strumenti integrati nel desktop in uso attraverso NetworkManager (kde, gnome, ecc)&lt;&#x2F;li&gt;
&lt;li&gt;Su windows è sufficiente scaricare il client dal sito ufficiale (https:&#x2F;&#x2F;www.wireguard.com)&lt;&#x2F;li&gt;
&lt;li&gt;Android Play store: https:&#x2F;&#x2F;play.google.com&#x2F;store&#x2F;apps&#x2F;details?id=com.wireguard.android&lt;&#x2F;li&gt;
&lt;li&gt;Apple store: https:&#x2F;&#x2F;apps.apple.com&#x2F;it&#x2F;app&#x2F;wireguard&#x2F;id1441195209&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;programmi-accessori-frontend&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#programmi-accessori-frontend&quot; aria-label=&quot;Anchor link for: programmi-accessori-frontend&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Programmi accessori (frontend)&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;ngoduykhanh&#x2F;wireguard-ui&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;wg-easy&#x2F;wg-easy&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;subspacecloud&#x2F;subspace&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.wireguardconfig.com&#x2F;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;funzioni-avanzate&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#funzioni-avanzate&quot; aria-label=&quot;Anchor link for: funzioni-avanzate&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Funzioni avanzate&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;dns&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#dns&quot; aria-label=&quot;Anchor link for: dns&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Dns&lt;&#x2F;h3&gt;
&lt;p&gt;Nella configurazione del client è anche possibile indicare quale server dns utilizzare&lt;&#x2F;p&gt;
&lt;h3 id=&quot;firewall-per-i-client&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#firewall-per-i-client&quot; aria-label=&quot;Anchor link for: firewall-per-i-client&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Firewall per i client&lt;&#x2F;h3&gt;
&lt;p&gt;Nalle configurazione server è possibile aggiungere più righe di PostUp con &lt;strong&gt;iptables&lt;&#x2F;strong&gt;, e quindi configurare il firewall con assoluta personalizzazione: è possibile, quindi, limitare la risorse da accedere a specifici indirizzi&lt;&#x2F;p&gt;
&lt;h3 id=&quot;limitare-la-banda&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#limitare-la-banda&quot; aria-label=&quot;Anchor link for: limitare-la-banda&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Limitare la banda&lt;&#x2F;h3&gt;
&lt;p&gt;Sempre grazie ai comandi postup è possibile anche limitare, qualora si voglia, la banda passante per i client (sia in upload che ion download), ad esempio:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = tc qdisc add dev wg0 ingress; tc filter add dev wg1 protocol ip ingress prio 2 u32 match ip dst 0.0.0.0&#x2F;0 action police
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;rate 10mbit burst 10mbit; tc filter add dev wg0 protocol ip ingress prio 2 u32 match ip src 0.0.0.0&#x2F;0 action police rate 10mbit burst 10mbit
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = tc qdisc add dev wg0 parent root handle 1: hfsc default 1; tc class add dev wg0 parent 1: classid 1:1 hfsc sc rate 10mbit ul rate 10mbit
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wireguard_network.png&quot; alt=&quot;Wireguard Network&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Matrix</title>
          <pubDate>Mon, 08 Jan 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/matrix/</link>
          <guid>https://www.agostinelli.eu/blog/matrix/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/matrix/">&lt;h2 id=&quot;cos-e&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e&quot; aria-label=&quot;Anchor link for: cos-e&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è?&lt;&#x2F;h2&gt;
&lt;p&gt;Protocollo &lt;strong&gt;aperto&lt;&#x2F;strong&gt; e &lt;strong&gt;decentralizzato&lt;&#x2F;strong&gt; per la &lt;strong&gt;messaggistica&lt;&#x2F;strong&gt;.
I suoi punti di forza sono, a mio avviso, la &lt;strong&gt;crittografia&lt;&#x2F;strong&gt; (e2ee), il fatto che essendo decenrrallizato ci sono più server che comunicano tra loro e quindi si può, non solo, scegliere il server che si vuole, ma anche installarne uno proprio con cui comunicare con gli altri.&lt;&#x2F;p&gt;
&lt;p&gt;Su matrix troverete molte stanze tematiche, questo è un altro dei suoi punti di forza, molti progetti opensource hanno la propria stanza tramite la quale parlare direttamente con gli sviluppatori.
Cercando di semplificare, potremmo definirlo come il sostituto di #irc.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;matrix_logo.png&quot; alt=&quot;Matrix Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;server-pubblici&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#server-pubblici&quot; aria-label=&quot;Anchor link for: server-pubblici&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Server pubblici&lt;&#x2F;h2&gt;
&lt;p&gt;Trovate qui la lista:
https:&#x2F;&#x2F;servers.joinmatrix.org&#x2F;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sellf-hosting&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#sellf-hosting&quot; aria-label=&quot;Anchor link for: sellf-hosting&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Sellf hosting&lt;&#x2F;h2&gt;
&lt;p&gt;È possibile installare e configurare un proprio server, così sarete voi stessi a deciderne le &lt;strong&gt;regole&lt;&#x2F;strong&gt;, ma soprattutto potete affiancarci vari bridge e bot (vedremo in seguito cosa sono).
In un prossimo articolo vedremo nel dettaglio un esempio concreto di installazione e configurazione.
Personalmente, in uno dei setup che ho seguito ho utilizzato &lt;strong&gt;docker&lt;&#x2F;strong&gt;, sia per il il server matrix, ma anche per tutti gli altri componenti aggiuntivi (che vedrete di seguito).
Per il momento vi lascio una semplice lista di software che potete utilizzare.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;server-software&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#server-software&quot; aria-label=&quot;Anchor link for: server-software&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Server software&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;synapse (stabile, supporta tutte le funzioni, ma è un po&#x27; pesante)&lt;&#x2F;li&gt;
&lt;li&gt;dendrite (scritto in go, rappresenta la nuova generazione di server, molto più leggero come risorse, supporta il 99% delle funzioni matrix, ma non è ancora stabile)&lt;&#x2F;li&gt;
&lt;li&gt;conduit (leggerissimo, ottimo per uso personale, non supporta a pieno tutte le funzioni di matrix)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;bridge&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#bridge&quot; aria-label=&quot;Anchor link for: bridge&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Bridge&lt;&#x2F;h2&gt;
&lt;p&gt;Grazie ai bridge potete usare Matrix per dialogare con le altre app di messaggistica, come dice il nome stesso questi faranno da &lt;em&gt;ponte&lt;&#x2F;em&gt; tra le varie App.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Facebook messenger&lt;&#x2F;li&gt;
&lt;li&gt;Telegram&lt;&#x2F;li&gt;
&lt;li&gt;WhatsApp&lt;&#x2F;li&gt;
&lt;li&gt;Irc&lt;&#x2F;li&gt;
&lt;li&gt;signal&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Trovate &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;ecosystem&#x2F;bridge&quot;&gt;qui&lt;&#x2F;a&gt; un elenco molto più esaustivo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bot&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#bot&quot; aria-label=&quot;Anchor link for: bot&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Bot&lt;&#x2F;h2&gt;
&lt;p&gt;Esistono anche molti bot già pronti all&#x27;uso, ma anche delle basi da cui partire per poter scrivere il proprio.
Qui ne trovate alcuni:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.org&#x2F;ecosystem&#x2F;integrations&#x2F;&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;topics&#x2F;matrix-bot&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;client&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#client&quot; aria-label=&quot;Anchor link for: client&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Client&lt;&#x2F;h2&gt;
&lt;p&gt;Essendo matrix un protocollo aperto, esistono vari client che possono essere utilizzati.
Sono disponibili per tutti i sistemi operativi, ma anche per Android e iPhone.
Molti dei client che seguono sono disponibili anche in modalità web, compatibile con tutti i browser:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Element (il client più usato, pesante, ma ricco di funzionalità)&lt;&#x2F;li&gt;
&lt;li&gt;Cinny (client web molto pratico e leggero)&lt;&#x2F;li&gt;
&lt;li&gt;Fluffy (client mobile molto leggero)&lt;&#x2F;li&gt;
&lt;li&gt;Elementx (client di nuova generazione, ancora in beta, ma che promette di essere leggerissimo)&lt;&#x2F;li&gt;
&lt;li&gt;SchildiChat (un fork di element, con in più alcune ottimizzazioni, specialmente in ambito mobile)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;element_screen.png&quot; alt=&quot;Element&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;cinny_screen.png&quot; alt=&quot;Cinny&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;fluffy_screen.png&quot; alt=&quot;Fluffy&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;schildi_screen.png&quot; alt=&quot;Schildichat&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;stanze-consigliate&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#stanze-consigliate&quot; aria-label=&quot;Anchor link for: stanze-consigliate&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Stanze consigliate&lt;&#x2F;h2&gt;
&lt;p&gt;L&#x27; elenco sarebbe lunghissimo, e ciascuno segue quelle relative ai propri interessi, ne indico alcune, giusto per farci un giro se chi legge questo articolo deciderà di iscriversi.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#lealternativegruppo:matrix.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#mozilla-italia:mozilla.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#mastodon:mozilla.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#pixelfed:matrix.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#Debian-Italia:matrix.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#vaultwarden:matrix.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#Raspberryita:matrix.org&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Poi ci sono ovviamente tutte le stanze dedicate ai software sopra menzionati (sia client che server), in cui, ad esempio, potete aiuto in caso di problemi.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Home Assistant rsync backup</title>
          <pubDate>Mon, 18 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/home-assistant-rsync-backup/</link>
          <guid>https://www.agostinelli.eu/blog/home-assistant-rsync-backup/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/home-assistant-rsync-backup/">&lt;p&gt;Ho scritto un plugin per home assistant!
Ma ce n&#x27;era davvero bisogno? Purtroppo si, perchè avevo una particolare necessità che sotto vi spiego.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contesto&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#contesto&quot; aria-label=&quot;Anchor link for: contesto&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Contesto&lt;&#x2F;h2&gt;
&lt;p&gt;A casa ho un NAS che tengo quasi sempre spento, e che accendono alla bisogna. Quando lo accendo, ci sono delle procedure&#x2F;software installati che partono e aggiornarnano i dati.
Avevo, quindi, la necessità di trovare una soluzione simile anche con #homeassistant. Ho provato vari plugin esistenti, ma nessuno faceva al caso mio.
Dato che implementare questo tipo di plugin sulla carta sembrava molto semplice, ho deciso, quasi per gioco, di scriverne uno.&lt;&#x2F;p&gt;
&lt;p&gt;Lo trovate qui: https:&#x2F;&#x2F;github.com&#x2F;magostinelli&#x2F;hassio-addons-rsync-key&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cosa-fa&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cosa-fa&quot; aria-label=&quot;Anchor link for: cosa-fa&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cosa fa?&lt;&#x2F;h3&gt;
&lt;p&gt;Sincronizza i backup locali con quelli remoti via ssh con scambio chiave (senza password).
Al primo avvio del componente aggiuntivo viene mostrata la chiave (pubblica) creata, tale chiave dovrà essere abilitata per l&#x27;accesso sul nas al percorso in cui vogliamo depositare la copia dei nostri backup.&lt;&#x2F;p&gt;
&lt;p&gt;Il plugin ha alcune opzioni di configurazione:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;home_rsync_conf.jpg&quot; alt=&quot;schermata di configurazione&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;E nella schermata dei log è possibile monitorare la sua ultima esecuzione.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;home_rsync_log.jpg&quot; alt=&quot;schermata di configurazione&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;come-lo-uso&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-lo-uso&quot; aria-label=&quot;Anchor link for: come-lo-uso&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come lo uso?&lt;&#x2F;h3&gt;
&lt;p&gt;Ho creato un automazione che fa partire questo componente aggiuntivo 1 minuto dopo aver rilevato che il mio nas è stato acceso.
Una volta che il componente avrà eseguito il suo lavoro si &lt;strong&gt;spengerà automaticamente&lt;&#x2F;strong&gt;, così il &lt;strong&gt;consumo&lt;&#x2F;strong&gt; di risorse è davvero &lt;strong&gt;inesistente&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;#homeassistant #hass #rsync #linux #backup #nas&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>moOde audio</title>
          <pubDate>Sat, 16 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/moode-audio/</link>
          <guid>https://www.agostinelli.eu/blog/moode-audio/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/moode-audio/">&lt;h2 id=&quot;cos-e&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e&quot; aria-label=&quot;Anchor link for: cos-e&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è?&lt;&#x2F;h2&gt;
&lt;p&gt;Uno streamer audio da installare su #raspberrypi (o su altri SBC).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-cosa-serve&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#a-cosa-serve&quot; aria-label=&quot;Anchor link for: a-cosa-serve&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
A cosa serve?&lt;&#x2F;h2&gt;
&lt;p&gt;Riproduzione audio di alta qualità dalla propria libreria personale (nas, disco usb). o dai servizi streaming più disparati.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cosa-puo-fare&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cosa-puo-fare&quot; aria-label=&quot;Anchor link for: cosa-puo-fare&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cosa può fare&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Può riprodurre tutti i più diffusi (e non) formati audio come ad esempio: flac, mp3, ape, wav, ogg, ecc.&lt;&#x2F;li&gt;
&lt;li&gt;Organizzare la propria libreria musicale (riprodurre per generi, artisti, tag, anno, ecc.)&lt;&#x2F;li&gt;
&lt;li&gt;Riprodurre da servizi streaming quali Quobuz, Tidal o Spotify&lt;&#x2F;li&gt;
&lt;li&gt;Supporto alle Web radio&lt;&#x2F;li&gt;
&lt;li&gt;Supporto Upnp&lt;&#x2F;li&gt;
&lt;li&gt;Supporto di dac esterni usb o tramite HAT&lt;&#x2F;li&gt;
&lt;li&gt;Airplay&lt;&#x2F;li&gt;
&lt;li&gt;Riproduzione via bluetooth
-Aggiornamento con un click&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;supporto-dac&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#supporto-dac&quot; aria-label=&quot;Anchor link for: supporto-dac&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Supporto dac&lt;&#x2F;h2&gt;
&lt;p&gt;Il supporto per i dac è davvero molto esteso, potete consultare il &lt;a href=&quot;https:&#x2F;&#x2F;moodeaudio.org&#x2F;forum&#x2F;&quot;&gt;forum ufficiale&lt;&#x2F;a&gt; se volete leggere l&#x27;esperienza di altri utenti, ma sono sicuro che difficilmente avrete problemi di compatibilità.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installazione-di-moode&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione-di-moode&quot; aria-label=&quot;Anchor link for: installazione-di-moode&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione di moode&lt;&#x2F;h2&gt;
&lt;p&gt;Non credo sia necessaria una guida, la procedura è sempre la stessa di quando si installa qualcosa sul raspberry, sarà sufficiente procurarsi una scheda sd, l&#x27;immagine di moOde e scrivere quest&#x27;ultima sulla scheda.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;uso-con-qobuz&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#uso-con-qobuz&quot; aria-label=&quot;Anchor link for: uso-con-qobuz&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Uso con Qobuz&lt;&#x2F;h2&gt;
&lt;p&gt;In quanto possessore di abbonamento #Qobuz, uso moOde anche con questo servizio, di seguito alcuni brevi istruzioni per usarlo nella maniera, a mio avviso, migliore.
Il dispositivo mobile servirà solo come &lt;em&gt;telecomando&lt;&#x2F;em&gt;, una volta aggiunti alla coda i brani, la riproduzione proseguirà &lt;strong&gt;anche se il dispositivo si disconnette&lt;&#x2F;strong&gt; e quindi non avremo alcun impatto sulla batteria per fare transcodifiche.&lt;&#x2F;p&gt;
&lt;p&gt;Sarà necessario avere sul proprio smartphone (o tablet) l&#x27;applicazione
&lt;strong&gt;BubbleUPnP&lt;&#x2F;strong&gt; (costa pochi euro).
Impostare la configurazione come da schermate che seguono:
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;BubbleUPnP_1.jpg&quot; alt=&quot;Bubble settings1&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;BubbleUPnP_2.jpg&quot; alt=&quot;Bubble settings2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Nelle impostazioni di moOde sarà necessario attivare Open Home, come da schermata seguente.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;moode_1.jpg&quot; alt=&quot;moOde settings1&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;moode_2.jpg&quot; alt=&quot;moOde settings2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Infine adesso aprendo BubbleUPnP, potete scegliere il vostro dispositivo moOde (icona select renderer), e nel menu troverete qobuz, a cui vi loggherete con le credenziali in vostro possesso.&lt;&#x2F;p&gt;
&lt;p&gt;Che altro aggiungere? Io lo uso con soddisfazione da anni ormai, se avete delle domande sono a vostra disposizione!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Pi-hole</title>
          <pubDate>Sun, 10 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/pi-hole/</link>
          <guid>https://www.agostinelli.eu/blog/pi-hole/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/pi-hole/">&lt;p&gt;Fa parte dei software indispensabili: vi consiglio di installarlo sul vostro #raspberrypi, sul vostro #NAS o su &lt;strong&gt;qualsiasi dispositivo&lt;&#x2F;strong&gt; (su base #linux) che terrete sempre acceso.
Il mio consiglio va in direzione del raspberry, viste i consumi e dimensioni ridotte, ma ciascuno rimane libero di fare le proprie scelte.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;Pi-hole_vector_logo.svg&quot; alt=&quot;Pi-hole Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cos-e&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e&quot; aria-label=&quot;Anchor link for: cos-e&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è&lt;&#x2F;h2&gt;
&lt;p&gt;Pi-hole è un&#x27;applicazione **Linux ** pensata per bloccare la pubblicità e il tracciamento degli utenti su Internet a livello di rete locale.  Pi-hole agisce come un DNS sinkhole[ e, opzionalmente, come un server DHCP.
Fonte: https:&#x2F;&#x2F;it.wikipedia.org&#x2F;wiki&#x2F;Pi-hole&lt;&#x2F;p&gt;
&lt;h2 id=&quot;come-funziona&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-funziona&quot; aria-label=&quot;Anchor link for: come-funziona&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come funziona&lt;&#x2F;h2&gt;
&lt;p&gt;Si affianca al vostro router per la connettività Internet ed è in grado di bloccare  le pubblicità e i traccianti per  tutti i dispositivi di casa. Può funzionare come server #DHCP (in questo caso dovrete disattivare quello presente sul vostro router), oppure può affiancarlo (nelle impostaziooni dhcp del router dovrete indicare là indirizzo ip di pi-hole come server dns per i client).
Una volta fatta questa configurazione non dovrete fare niente sui vostri dispositivi, che siano computer, telefoni o smarttv, facile no?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;M0AWS-PiHole-Management-interface-768x612&quot; alt=&quot;Pi-hole Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione&quot; aria-label=&quot;Anchor link for: installazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;standalone&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#standalone&quot; aria-label=&quot;Anchor link for: standalone&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Standalone&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;curl -sSL https:&#x2F;&#x2F;install.pi-hole.net | bash&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;prerequisiti-e-sistemi-supportati&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#prerequisiti-e-sistemi-supportati&quot; aria-label=&quot;Anchor link for: prerequisiti-e-sistemi-supportati&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Prerequisiti e sistemi supportati&lt;&#x2F;h4&gt;
&lt;p&gt;Consultate la pagina ufficiale qui: https:&#x2F;&#x2F;docs.pi-hole.net&#x2F;main&#x2F;prerequisites&#x2F;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#docker&quot; aria-label=&quot;Anchor link for: docker&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Docker&lt;&#x2F;h3&gt;
&lt;p&gt;Consiglio di usare docker-compose, di seguito una configurazione di base che potete personalizzare a voswtro piacimento
version: &quot;3&quot;&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;version: &amp;quot;3&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;services:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  pihole:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    container_name: pihole
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    image: pihole&#x2F;pihole:latest
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    # For DHCP it is recommended to remove these ports and instead add: network_mode: &amp;quot;host&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    ports:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;quot;53:53&#x2F;tcp&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;quot;53:53&#x2F;udp&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;quot;67:67&#x2F;udp&amp;quot; # Only required if you are using Pi-hole as your DHCP server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;quot;80:80&#x2F;tcp&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    environment:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      TZ: &amp;#39;Europe&#x2F;Rome&amp;#39;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      # WEBPASSWORD: &amp;#39;set a secure password here or it will be random&amp;#39;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    # Volumes store your data between container upgrades
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    volumes:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;#39;.&#x2F;etc-pihole:&#x2F;etc&#x2F;pihole&amp;#39;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;#39;.&#x2F;etc-dnsmasq.d:&#x2F;etc&#x2F;dnsmasq.d&amp;#39;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    #   https:&#x2F;&#x2F;github.com&#x2F;pi-hole&#x2F;docker-pi-hole#note-on-capabilities
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    cap_add:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - NET_ADMIN # Required if you are using Pi-hole as your DHCP server, else not needed
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    restart: unless-stopped 
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;personalizzazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#personalizzazione&quot; aria-label=&quot;Anchor link for: personalizzazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Personalizzazione&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;aggiunta-di-liste-di-blocco&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#aggiunta-di-liste-di-blocco&quot; aria-label=&quot;Anchor link for: aggiunta-di-liste-di-blocco&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Aggiunta di liste di blocco&lt;&#x2F;h3&gt;
&lt;p&gt;Le liste si configurano dall&#x27;interfaccia web alla voce AdList, eccone alcune che potete aggiungere:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.github.developerdan.com&#x2F;hosts&#x2F;lists&#x2F;ads-and-tracking-extended.txt&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;s3.amazonaws.com&#x2F;lists.disconnect.me&#x2F;simple_tracking.txt&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;s3.amazonaws.com&#x2F;lists.disconnect.me&#x2F;simple_ad.txt&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;StevenBlack&#x2F;hosts&#x2F;master&#x2F;hosts&lt;&#x2F;li&gt;
&lt;li&gt;http:&#x2F;&#x2F;sysctl.org&#x2F;cameleon&#x2F;hosts&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;L&#x27; elenco non è certo esaustivo, esistono sicuramente altre liste, le potrete trovare con una semplice ricerca sul web.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;pihole-dashboard-1024x640.webp&quot; alt=&quot;Pi-hole Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;utilizzo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#utilizzo&quot; aria-label=&quot;Anchor link for: utilizzo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Utilizzo&lt;&#x2F;h2&gt;
&lt;p&gt;Una volta che avete configurato la porta dell&#x27;&lt;strong&gt;interfaccia web&lt;&#x2F;strong&gt;, collegatevi a quest&#x27;ultima, e gestirete tutto da li.
Dal menu, in Tools -&amp;gt; Update Gravity potete &lt;strong&gt;aggiornare le liste&lt;&#x2F;strong&gt; d ei blocchi (come quelle indicate sopra).
Attraverso la voce disable blocking potete intemrrompere temporaneamente (o meno) il blocco.
Da query log vedrete tutte le varie &lt;strong&gt;richieste&lt;&#x2F;strong&gt; e se i siti richiesti sono bloccati o meno, da qui potete anche aggiungerli manualmente alla &lt;strong&gt;whitelist&lt;&#x2F;strong&gt;, come nel caso venga bloccato un sito che a voi serve.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;consiglio-importante&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#consiglio-importante&quot; aria-label=&quot;Anchor link for: consiglio-importante&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Consiglio importante&lt;&#x2F;h3&gt;
&lt;p&gt;Una volta installato funzionerà tutto in automatico e senza che ci sia bisogno di particolari interventi, proprio per questo vi consiglio di avere solo questa &lt;strong&gt;unica e semplice accortezza&lt;&#x2F;strong&gt;: Ricordatevi che lo avete installato, e nel caso abbiate qualche sito mal funzionante, tenete presente che potrebbe essere per questo che qualcosa non vi funziona!&lt;&#x2F;p&gt;
&lt;p&gt;A me personalmente è successo qualche volta, ma sono prontamente intervenuto (whitelist o disabilitazione temporanea) e ho risolto velocemente e facilmente.
I &lt;strong&gt;malfunzionamenti dipendono&lt;&#x2F;strong&gt; sempre &lt;strong&gt;dal tipo&lt;&#x2F;strong&gt; e numero di &lt;strong&gt;liste&lt;&#x2F;strong&gt; che inserite.
Alcuni esempi di malfunzionamenti che mi sono capitati:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;app amazon&lt;&#x2F;li&gt;
&lt;li&gt;rai play sulla tv&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;dns-consigliati&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#dns-consigliati&quot; aria-label=&quot;Anchor link for: dns-consigliati&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
DNS Consigliati&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.dns0.eu&#x2F;it&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.opendns.com&#x2F;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;companion-app&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#companion-app&quot; aria-label=&quot;Anchor link for: companion-app&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Companion app&lt;&#x2F;h2&gt;
&lt;p&gt;Per la sua gestione da pc non avrete problemi, basterà usare la sua comodissima interfaccia web (la porta dipende dal tipo di installazione&#x2F;configurazione che avete effettuato).
Per Il vostro tablet&#x2F;smartphone vi consiglio queste applicazioni:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;play.google.com&#x2F;store&#x2F;apps&#x2F;details?id=com.tien.piholeconnect&quot;&gt;Pi-hole Connect&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;f-droid.org&#x2F;it&#x2F;packages&#x2F;friimaind.piholedroid&#x2F;&quot;&gt;Pi-hole Droid&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;play.google.com&#x2F;store&#x2F;apps&#x2F;details?id=com.jgeek00.droid_hole&quot;&gt;DroidHole&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Se volete curiosare, questo è il sito ufficiale: https:&#x2F;&#x2F;pi-hole.net&#x2F;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Home Assistant</title>
          <pubDate>Fri, 08 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/home-assistant/</link>
          <guid>https://www.agostinelli.eu/blog/home-assistant/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/home-assistant/">&lt;p&gt;Quello che segue sarà il primo di una serie di articoli che troverete sul blog. Questo è quello introduttivo diciamo. Iniziamo!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cos-e-a-che-serve&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e-a-che-serve&quot; aria-label=&quot;Anchor link for: cos-e-a-che-serve&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è? A che serve?&lt;&#x2F;h2&gt;
&lt;p&gt;È un software per la &lt;strong&gt;domotica&lt;&#x2F;strong&gt; (personale). &lt;strong&gt;Ma c&#x27;è ne&#x27;era bisogno?&lt;&#x2F;strong&gt; Decisamente si!
Vedremo, nelle puntate successive, quante cose è in grado di fare!
Come descrizione generale possiamo dire che è un Hub tramite il quale comandare tutti i nostri dispostivi domotici, non solo da un unico punto di controllo, ma è possibile creare delle automazioni usando tutti gli altri nostri dispositivi.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;homeassistant.png&quot; alt=&quot;homeassistant logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;perche&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche&quot; aria-label=&quot;Anchor link for: perche&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché&lt;&#x2F;h2&gt;
&lt;p&gt;Se dovessi scegliere alcuni dei suoi punti di forza per convincerli a provarlo direi:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Indipendenza&lt;&#x2F;strong&gt; (il vostro impianto domotico funzionerà anche senza internet, e anche se i vari provider chiudessero i loro servizi)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Leggero&lt;&#x2F;strong&gt;: funziona (alla grande) su un piccolo SBC come #raspberrypi&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Espandibile&lt;&#x2F;strong&gt;: impossibile elencare tutte le integrazioni e plugin supportati&lt;&#x2F;li&gt;
&lt;li&gt;In &lt;strong&gt;continuo sviluppo&lt;&#x2F;strong&gt;: ogni mese escono nuove funzionalità, e i bug fixing escono con una frequenza anche maggiore.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Supporto&lt;&#x2F;strong&gt;: c&#x27;è una vastissima comunità di utilizzatori&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Facilità d&#x27;uso&lt;&#x2F;strong&gt;: la configurazione avviene tramite una semplice interfaccia web&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;App mobile&lt;&#x2F;strong&gt;: esiste sia per Android che per iPhone ed è fatta benissimo&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Backup&lt;&#x2F;strong&gt;: ha una procedura di salvataggio configurazioni automatizzata, se la salviamo altrove (lo vedremo) saremo in grado di ripristinare la configurazione con un click.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Multiutente&lt;&#x2F;strong&gt;: potete creare un account per tutta la famiglia&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Open source&lt;&#x2F;strong&gt;: distribuito con licenza apache 2.0&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;e-ora&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#e-ora&quot; aria-label=&quot;Anchor link for: e-ora&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
E ora?&lt;&#x2F;h2&gt;
&lt;p&gt;Continua a seguire gli articoli di questa serie, ne vedremo delle belle!&lt;&#x2F;p&gt;
&lt;p&gt;Clicca qui per vedere gli altri approfondimenti: #nextcloud #domotica&lt;&#x2F;p&gt;
&lt;p&gt;Vi lascio qualche immagine di esempio prese dal web.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;536249767.png&quot; alt=&quot;homeassistant1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;556378040.jpg&quot; alt=&quot;homeassistant2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;home-assistant-energy-management-dashboard.png&quot; alt=&quot;homeassistant3&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
    </channel>
</rss>
