<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SMsoft &#8211; informatica e dintorni</title>
	<atom:link href="https://blog.smsoft.it/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.smsoft.it</link>
	<description>consigli settimanali su MacOS, GNU/Linux ed Open Source</description>
	<lastBuildDate>Sat, 26 Sep 2026 05:57:26 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=63715</generator>
	<item>
		<title>Flutter: l&#8217;applicazione nel device non si avvia se non collegato al cavo</title>
		<link>https://blog.smsoft.it/2026/06/30/flutter-lapplicazione-nel-device-non-si-avvia-se-non-collegato-al-cavo/</link>
					<comments>https://blog.smsoft.it/2026/06/30/flutter-lapplicazione-nel-device-non-si-avvia-se-non-collegato-al-cavo/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 30 Jun 2026 08:30:00 +0000</pubDate>
				<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Flutter]]></category>
		<category><![CDATA[iPhone]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=7083</guid>

					<description><![CDATA[Se dopo aver collegato l&#8217;iPhone con il cavo e digitato: per testare l&#8217;applicazione, scollegando il cavo l&#8217;appl&#8217;icazione non riparte e viene mostrato il messaggio: approfitto per ricordarvi che Flutter in debug costruisce un &#8220;app sandbox&#8221; che comunica costantemente via USB/network con l&#8217;host per: Da iOS 14 in poi, per questioni di sicurezza, Apple blocca l&#8217;apertura di queste ... <a title="Flutter: l&#8217;applicazione nel device non si avvia se non collegato al cavo" class="read-more" href="https://blog.smsoft.it/2026/06/30/flutter-lapplicazione-nel-device-non-si-avvia-se-non-collegato-al-cavo/" aria-label="Per saperne di più su Flutter: l&#8217;applicazione nel device non si avvia se non collegato al cavo">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Se dopo aver collegato l&#8217;iPhone con il cavo e digitato:</p>



<pre class="wp-block-code"><code>flutter run -d 00007046-004082773524571B</code></pre>



<p class="wp-block-paragraph">per testare l&#8217;applicazione, scollegando il cavo l&#8217;appl&#8217;icazione non riparte e viene mostrato il messaggio:</p>



<pre class="wp-block-code"><code>In iOS 14+, debug mode Flutter apps can only be launched from Flutter tooling, IDEs with Flutter plugins or from Xcode.
Alternatively, build in profile or release modes to enable launching from the home screen.
</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">approfitto per ricordarvi che Flutter in debug costruisce un &#8220;app sandbox&#8221; che comunica costantemente via USB/network con l&#8217;host per:</p>



<ul class="wp-block-list">
<li>Hot reload / hot restart</li>



<li>DevTools (debugger, performance, logging)</li>



<li>Dart VM service</li>
</ul>



<p class="wp-block-paragraph">Da<strong> iOS 14</strong> in poi, per questioni di sicurezza, Apple <strong>blocca</strong> l&#8217;apertura di queste app dalla home se non sono state avviate dal tooling (<strong>Flutter/Xcode</strong>). Non è un bug: è una limitazione voluta.</p>



<h2 class="wp-block-heading">Soluzione: installa in&nbsp;<strong>release</strong>&nbsp;o&nbsp;<strong>profile</strong>&nbsp;mode</h2>



<p class="wp-block-paragraph">Queste due modalità compilano AOT (codice macchina nativo ARM) e non richiedono connessione all&#8217;host. Funzionano a cavo scollegato.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Passaggi da fare:</h2>



<h3 class="wp-block-heading">1. Verifica prerequisiti sull&#8217;iPhone (solo 1a volta)</h3>



<ul class="wp-block-list">
<li><strong>Sblocca iPhone</strong> e tienilo sullo schermo home durante l&#8217;installazione.</li>



<li><strong>Developer Mode ON</strong>: <code>Impostazioni → Privacy e sicurezza → Modalità sviluppatore → ON</code> (riavvio richiesto).</li>



<li><strong>Fiducia computer</strong>: quando compare il popup <code>"Fiducia di questo computer?"</code> su iPhone → tocca <strong>Fiducia</strong> e inserisci il codice.</li>
</ul>



<h3 class="wp-block-heading">2. Controlla che Flutter veda il device</h3>



<pre class="wp-block-code"><code>flutter devices</code></pre>



<p class="wp-block-paragraph">Dovresti vedere <strong><code>iPhone di XXXX (mobile)</code></strong> in elenco (non simulator). Se non lo vede:</p>



<pre class="wp-block-code"><code>brew install libimobiledevice ideviceinstaller ios-deploy</code></pre>



<h3 class="wp-block-heading">3. Installa in RELEASE mode (scelta consigliata per usarlo senza cavo)</h3>



<pre class="wp-block-code"><code>flutter run --release -d </code></pre>



<p class="wp-block-paragraph">oppure con il nome:</p>



<pre class="wp-block-code"><code>flutter run --release -d "iPhone di XXXX"</code></pre>



<p class="wp-block-paragraph">⚠️&nbsp;<strong>Se ti chiede la password del keychain / permessi di accesso a Xcode</strong>: rispondi&nbsp;<strong>Consenti sempre</strong>&nbsp;(il sandbox dell&#8217;IDE spesso inghiotte questi dialoghi, per questo dal terminale esterno è più sicuro).</p>



<h3 class="wp-block-heading">4. Alternative se <code>flutter run</code> fallisce per il signing</h3>



<p class="wp-block-paragraph">Se incontri errori di&nbsp;<strong>code signing / provisioning profile</strong>:</p>



<pre class="wp-block-code"><code>1. Apri Xcode → Apri progetto: ios/Runner.xcworkspace
2. Seleziona target Runner → Tab "Signing &amp; Capabilities"
3. Team: seleziona il tuo account Apple Developer (anche free va bene)
4. Bundle Identifier: metti qualcosa di unico (es. com.tuonome.xxxxx)</code></pre>



<p class="wp-block-paragraph">Poi ridai:</p>



<pre class="wp-block-code"><code>flutter run --release -d "iPhone di XXXX"</code></pre>



<h3 class="wp-block-heading">5. Modalità Profile (utile se vuoi anche performance monitor, ma sempre standalone)</h3>



<p class="wp-block-paragraph">Se vuoi anche misurare performance:</p>



<p class="wp-block-paragraph">BashRun</p>



<pre class="wp-block-code"><code>flutter run --profile -d "iPhone di XXXX"</code></pre>



<h3 class="wp-block-heading">6. Verifica cavo scollegato</h3>



<p class="wp-block-paragraph">Quando il terminale stampa:</p>



<pre class="wp-block-code"><code>💪  Running with sound null safety
🔥  To hot restart changes while running, press "r" or "R".</code></pre>



<p class="wp-block-paragraph">L&#8217;app è installata e avviata. Adesso puoi:</p>



<ol class="wp-block-list">
<li>Premere <code>q</code> nel terminale per chiudere il processo Flutter (non disinstalla niente).</li>



<li><strong>Staccare il cavo USB</strong>.</li>



<li>Aprire l&#8217;app dgtv direttamente dalla home di iOS: ✅ <strong>funzionerà</strong>.</li>
</ol>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2026/06/30/flutter-lapplicazione-nel-device-non-si-avvia-se-non-collegato-al-cavo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Debian: Come aggiornare da Debian 10 a Debian 13</title>
		<link>https://blog.smsoft.it/2026/06/23/debian-come-aggiornare-da-debian-10-a-debian-13/</link>
					<comments>https://blog.smsoft.it/2026/06/23/debian-come-aggiornare-da-debian-10-a-debian-13/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 23 Jun 2026 08:30:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[upgrade]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=7078</guid>

					<description><![CDATA[Ho preso in gestione alcune macchine Debian non più aggiornate da anni; mi sono accorto che erano rimaste ferme a Debian 10 ed era arrivato il momento di aggiornarle. Non si può saltare dalla 10 alla 13 direttamente Debian non supporta l&#8217;aggiornamento diretto da una release vecchia a una recente saltando le versioni intermedie. Ogni ... <a title="Debian: Come aggiornare da Debian 10 a Debian 13" class="read-more" href="https://blog.smsoft.it/2026/06/23/debian-come-aggiornare-da-debian-10-a-debian-13/" aria-label="Per saperne di più su Debian: Come aggiornare da Debian 10 a Debian 13">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ho preso in gestione alcune macchine Debian non più aggiornate da anni; mi sono accorto che erano rimaste ferme a Debian 10 ed era arrivato il momento di aggiornarle.</p>



<h2 class="wp-block-heading">Non si può saltare dalla 10 alla 13 direttamente</h2>



<p class="wp-block-paragraph">Debian non supporta l&#8217;aggiornamento diretto da una release vecchia a una recente saltando le versioni intermedie. Ogni salto di release ha la sua procedura documentata, i suoi repository e — soprattutto — le sue trappole. Il percorso corretto da <strong>Debian 10 (Buster)</strong> a <strong>Debian 13 (Trixie)</strong> passa quindi per tutte le tappe intermedie:</p>



<pre class="wp-block-code"><code>Buster → Bullseye → Bookworm → Trixie</code></pre>



<p class="wp-block-paragraph">Tre upgrade a catena, sì, ma nessuno di questi è complicato se si segue l&#8217;ordine giusto. In questa guida riporto la procedura completa che ho applicato, compresa la gestione dei repository archiviati e delle chiavi GPG legacy.</p>



<h2 class="wp-block-heading">Prima di partire: le precauzioni (non saltatele)</h2>



<p class="wp-block-paragraph">Qualunque sia la tappa, alcune regole valgono sempre:</p>



<ul class="wp-block-list">
<li><strong>Backup completo</strong> prima di ogni salto: al minimo <code>/etc</code>, <code>/home</code>, l&#8217;elenco dei pacchetti (<code>dpkg --get-selections > pacchetti.txt</code>) e, se possibile, uno snapshot o un&#8217;immagine della macchina.</li>



<li><strong>Spazio su disco</strong>: verificatelo con <code>df -h</code>, con attenzione a <code>/boot</code> che si riempie facilmente con vecchi kernel.</li>



<li><strong>Repository di terze parti</strong>: i file in <code>/etc/apt/sources.list.d/</code> (GitLab, Docker, NodeSource, PostgreSQL&#8230;) sono la causa numero uno di upgrade falliti. Commentateli prima di ogni salto e riattivateli solo dopo aver verificato la compatibilità con la release di destinazione.</li>



<li><strong>Console, non SSH cieco</strong>: se operate da remoto, usate <code>screen</code> o <code>tmux</code>, così una connessione caduta non vi lascia a metà di un <code>dpkg --configure -a</code>.</li>



<li><strong>Una tappa alla volta</strong>: riavviate, verificate, solo poi passate alla successiva.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Tappa 1 — Da Buster a Bullseye (Debian 10 → 11)</h2>



<h3 class="wp-block-heading">Il problema: entrambe le release sono archiviate</h3>



<p class="wp-block-paragraph">Debian 10 e Debian 11 non sono più nei repository ufficiali: sono finite su <code>archive.debian.org</code>. I primi comandi quindi puntano lì.</p>



<h3 class="wp-block-heading">Passaggio 1 — Portare Buster al massimo aggiornamento possibile</h3>



<pre class="wp-block-code"><code>apt update &amp;&amp; apt upgrade
apt full-upgrade</code></pre>



<h3 class="wp-block-heading">Passaggio 2 — Aggiornare le sorgenti di Buster verso l&#8217;archivio</h3>



<p class="wp-block-paragraph">Sostituire il contenuto di <code>/etc/apt/sources.list</code> con:</p>



<pre class="wp-block-code"><code>deb http://archive.debian.org/debian buster main contrib non-free
deb http://archive.debian.org/debian-security buster/updates main contrib non-free</code></pre>



<p class="wp-block-paragraph">Poi:</p>



<pre class="wp-block-code"><code>apt update
apt full-upgrade</code></pre>



<h3 class="wp-block-heading">Passaggio 3 — Impostare le sorgenti di Bullseye</h3>



<p class="wp-block-paragraph">Sovrascrivere <code>/etc/apt/sources.list</code> con:</p>



<pre class="wp-block-code"><code>deb http://archive.debian.org/debian bullseye main contrib non-free</code></pre>



<p class="wp-block-paragraph">Nota importante: non esiste una riga di sicurezza separata. Gli aggiornamenti di sicurezza di Bullseye (il cui LTS è terminato nell&#8217;agosto 2024) non sono più pubblicati — l&#8217;archivio contiene l&#8217;ultimo stato disponibile. <strong>Questa tappa è quella da fare per primo e più in fretta possibile</strong>: Bullseye archiviato non riceve più nulla.</p>



<p class="wp-block-paragraph">Siccome i file <code>Release</code> archiviati hanno scadenze (<code>Valid-Until</code>) ormai passate, disattiviamo il controllo creando <code>/etc/apt/apt.conf.d/99no-check-valid-until</code> con:</p>



<pre class="wp-block-code"><code>Acquire::Check-Valid-Until "false";</code></pre>



<h3 class="wp-block-heading">Passaggio 4 — L&#8217;upgrade vero e proprio</h3>



<pre class="wp-block-code"><code>apt update
apt upgrade --without-new-pkgs
apt full-upgrade</code></pre>



<p class="wp-block-paragraph">Durante il processo APT chiederà come gestire i file di configurazione modificati a mano: di regola conviene <strong class="">tenere la versione attuale</strong> e verificare dopo le differenze.</p>



<h3 class="wp-block-heading">Passaggio 5 — Pulizia e riavvio</h3>



<pre class="wp-block-code"><code>apt --purge autoremove
reboot</code></pre>



<p class="wp-block-paragraph">Verifica:</p>



<pre class="wp-block-code"><code>cat /etc/debian_version   # deve dire 11.x</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Tappa 2 — Da Bullseye a Bookworm (Debian 11 → 12)</h2>



<p class="wp-block-paragraph">Da qui in poi le cose migliorano: <strong>Bookworm è ancora supportato</strong>, quindi si torna ai mirror ufficiali.</p>



<h3 class="wp-block-heading">Passaggio 1 — Aggiornare Bullseye</h3>



<pre class="wp-block-code"><code>apt update
apt full-upgrade</code></pre>



<h3 class="wp-block-heading">Passaggio 2 — Nuove sorgenti</h3>



<p class="wp-block-paragraph">Sovrascrivere <code>/etc/apt/sources.list</code> con:</p>



<pre class="wp-block-code"><code>deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb http://deb.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware</code></pre>



<p class="wp-block-paragraph">Due accorgimenti:</p>



<ul class="wp-block-list">
<li><strong>Rimuovere il file di scorciatoia creato nella tappa precedente</strong>: <code>rm /etc/apt/apt.conf.d/99no-check-valid-until</code> — con i repository attivi vogliamo che il controllo di validità sia attivo.</li>



<li><strong><code>non-free-firmware</code></strong> è una componente introdotta con Bookworm: aggiungetela se usate firmware (schede Wi-Fi, GPU, ecc.).</li>
</ul>



<h3 class="wp-block-heading">Passaggio 3 — Upgrade</h3>



<pre class="wp-block-code"><code>apt update
apt upgrade --without-new-pkgs
apt full-upgrade
apt --purge autoremove
reboot</code></pre>



<p class="wp-block-paragraph">Verifica: <code>/etc/debian_version</code> deve dire <code>12.x</code>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Tappa 3 — Da Bookworm a Trixie (Debian 12 → 13)</h2>



<p class="wp-block-paragraph">Procedura identica alla precedente, con sorgenti:</p>



<pre class="wp-block-code"><code>deb http://deb.debian.org/debian trixie main contrib non-free non-free-firmware
deb http://deb.debian.org/debian trixie-updates main contrib non-free non-free-firmware
deb http://deb.debian.org/debian-security trixie-security main contrib non-free non-free-firmware</code></pre>



<p class="wp-block-paragraph">E poi:</p>



<pre class="wp-block-code"><code>apt update
apt upgrade --without-new-pkgs
apt full-upgrade
apt --purge autoremove
reboot</code></pre>



<p class="wp-block-paragraph">Trixie porta novità visibili come <strong>APT 3</strong> (output più compatto e colorato) e versioni molto più recenti di Python, PHP e GCC: se sul server girano applicazioni con dipendenze specifiche, consultate le <a target="_blank" href="https://www.debian.org/releases/trixie/release-notes" rel="noopener">note di rilascio ufficiali</a> prima del salto.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2026/06/23/debian-come-aggiornare-da-debian-10-a-debian-13/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>gitlab: collation version mismatch</title>
		<link>https://blog.smsoft.it/2026/06/16/gitlab-collation-version-mismatch/</link>
					<comments>https://blog.smsoft.it/2026/06/16/gitlab-collation-version-mismatch/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 16 Jun 2026 08:30:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[gitlab]]></category>
		<category><![CDATA[postgreSQL]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=7075</guid>

					<description><![CDATA[Se a seguito di un aggiornamento di gitlab viene mostrato il seguente WARNING: Significa che è necessario ricostruire gli indici del database postgreSQL. Vediamo in sequenza la procedura da fare: Effettua prima un backup di sicurezza: Fermiamo gitlab: Avviamo solo postgreSQL: Accediamo ora a postgreSQL per eseguire le query che ci interessano: E qui digitiamo: ... <a title="gitlab: collation version mismatch" class="read-more" href="https://blog.smsoft.it/2026/06/16/gitlab-collation-version-mismatch/" aria-label="Per saperne di più su gitlab: collation version mismatch">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Se a seguito di un aggiornamento di gitlab viene mostrato il seguente WARNING:</p>



<pre class="wp-block-code"><code>WARNING: database "gitlabhq_production" has a collation version mismatch<br>DETAIL: The database was created using collation version 2.36, but the operating system provides version 2.41.<br>HINT: Rebuild all objects in this database that use the default collation and run ALTER DATABASE gitlabhq_production REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.</code></pre>



<p class="wp-block-paragraph">Significa che è necessario ricostruire gli indici del database postgreSQL. Vediamo in sequenza la procedura da fare:</p>



<p class="wp-block-paragraph">Effettua prima un backup di sicurezza:</p>



<pre class="wp-block-code"><code>gitlab-backup create</code></pre>



<p class="wp-block-paragraph">Fermiamo gitlab:</p>



<pre class="wp-block-code"><code>gitlab-ctl stop</code></pre>



<p class="wp-block-paragraph">Avviamo solo postgreSQL:</p>



<pre class="wp-block-code"><code>gitlab-ctl start postgresql</code></pre>



<p class="wp-block-paragraph">Accediamo ora a postgreSQL per eseguire le query che ci interessano:</p>



<pre class="wp-block-code"><code>gitlab-psql -d gitlabhq_production</code></pre>



<p class="wp-block-paragraph">E qui digitiamo:</p>



<pre class="wp-block-code"><code>SET statement_timeout = 0; REINDEX DATABASE gitlabhq_production;</code></pre>



<p class="wp-block-paragraph">A seguire:</p>



<pre class="wp-block-code"><code>ALTER DATABASE gitlabhq_production REFRESH COLLATION VERSION;</code></pre>



<p class="wp-block-paragraph">Ed infine usciamo con:</p>



<pre class="wp-block-code"><code>\q</code></pre>



<p class="wp-block-paragraph">Riavviamo ora gitlab:</p>



<pre class="wp-block-code"><code>gitlab-ctl start</code></pre>



<p class="wp-block-paragraph">Verifichiamo che tutti i servizi siano UP:</p>



<pre class="wp-block-code"><code>gitlab-ctl status</code></pre>



<p class="wp-block-paragraph">e ricontrolliamo che non ci siano più messaggi di warning:</p>



<pre class="wp-block-code"><code>gitlab-rake gitlab:env:info</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2026/06/16/gitlab-collation-version-mismatch/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MacOS: Archivi RAR da CLI</title>
		<link>https://blog.smsoft.it/2026/06/09/macos-archivi-rar-da-cli/</link>
					<comments>https://blog.smsoft.it/2026/06/09/macos-archivi-rar-da-cli/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 09 Jun 2026 08:30:00 +0000</pubDate>
				<category><![CDATA[MacOS]]></category>
		<category><![CDATA[rar]]></category>
		<category><![CDATA[unar]]></category>
		<category><![CDATA[unrar]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=7065</guid>

					<description><![CDATA[Tramite brew è possibile installare svariati pacchetti di utilità. L&#8217;utility unrar però non funziona più perché la firma è scaduta. Si può in alternativa usare unar, procediamo in questo modo: enjoy!]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Tramite brew è possibile installare svariati pacchetti di utilità. L&#8217;utility unrar però non funziona più perché la firma è scaduta.</p>



<p class="wp-block-paragraph">Si può in alternativa usare unar, procediamo in questo modo:</p>



<pre class="wp-block-code"><code>brew uninstall unrar
brew install unar

unar archivio.rar</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2026/06/09/macos-archivi-rar-da-cli/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Firefox: quale scheda sta usando più RAM?</title>
		<link>https://blog.smsoft.it/2026/06/02/firefox-quale-scheda-sta-usando-piu-ram/</link>
					<comments>https://blog.smsoft.it/2026/06/02/firefox-quale-scheda-sta-usando-piu-ram/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 02 Jun 2026 08:30:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[ram]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=7062</guid>

					<description><![CDATA[Ho l&#8217;abitudine di tenere aperte molte schede su firefox, però a lungo andare possono arrivare ad utilizzare una grande quantità di RAM. Ho visto infatti da &#8220;Monitoraggio attività&#8221; di MacOS che c&#8217;erano delle schede che richiedevano oltre 3GB di RAM, ma quali sono? Basta aprire una nuova scheda di Firefox e digitare nella barra degli ... <a title="Firefox: quale scheda sta usando più RAM?" class="read-more" href="https://blog.smsoft.it/2026/06/02/firefox-quale-scheda-sta-usando-piu-ram/" aria-label="Per saperne di più su Firefox: quale scheda sta usando più RAM?">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ho l&#8217;abitudine di tenere aperte molte schede su firefox, però a lungo andare possono arrivare ad utilizzare una grande quantità di RAM. Ho visto infatti da &#8220;Monitoraggio attività&#8221; di MacOS che c&#8217;erano delle schede che richiedevano oltre 3GB di RAM, ma quali sono?</p>



<p class="wp-block-paragraph">Basta aprire una nuova scheda di Firefox e digitare nella barra degli indirizzi:</p>



<pre class="wp-block-code"><code>about:processes</code></pre>



<p class="wp-block-paragraph">Questo mostrerà un elenco di tutte le finestre con il titolo e la RAM usata e, oltretutto, la possibilità di scaricare direttamente la scheda per liberare RAM.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2026/06/02/firefox-quale-scheda-sta-usando-piu-ram/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installare una differente versione di python con UV: il gestore di pacchetti che sta conquistando gli sviluppatori</title>
		<link>https://blog.smsoft.it/2026/05/26/uv-installare-una-differente-versione-di-python/</link>
					<comments>https://blog.smsoft.it/2026/05/26/uv-installare-una-differente-versione-di-python/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 26 May 2026 08:30:00 +0000</pubDate>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[uv]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=7056</guid>

					<description><![CDATA[Negli ultimi mesi UV è diventato uno degli strumenti più interessanti dell&#8217;ecosistema Python. Sviluppato in Rust, nasce con l&#8217;obiettivo di sostituire gran parte degli strumenti tradizionali come pip, virtualenv e pip-tools, offrendo prestazioni decisamente superiori e un&#8217;esperienza d&#8217;uso più semplice. Uno dei principali punti di forza di UV è la velocità: l&#8217;installazione delle dipendenze e ... <a title="Installare una differente versione di python con UV: il gestore di pacchetti che sta conquistando gli sviluppatori" class="read-more" href="https://blog.smsoft.it/2026/05/26/uv-installare-una-differente-versione-di-python/" aria-label="Per saperne di più su Installare una differente versione di python con UV: il gestore di pacchetti che sta conquistando gli sviluppatori">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Negli ultimi mesi <strong>UV</strong> è diventato uno degli strumenti più interessanti dell&#8217;ecosistema Python. Sviluppato in Rust, nasce con l&#8217;obiettivo di sostituire gran parte degli strumenti tradizionali come <code>pip</code>, <code>virtualenv</code> e <code>pip-tools</code>, offrendo prestazioni decisamente superiori e un&#8217;esperienza d&#8217;uso più semplice.</p>



<p class="wp-block-paragraph">Uno dei principali punti di forza di UV è la <strong>velocità</strong>: l&#8217;installazione delle dipendenze e la creazione degli ambienti virtuali richiedono spesso solo pochi secondi, anche per progetti di grandi dimensioni. Questo è possibile grazie all&#8217;implementazione in Rust e a un sistema di caching molto efficiente.</p>



<p class="wp-block-paragraph">Oltre alla rapidità, UV mette a disposizione un unico comando per gestire l&#8217;intero ciclo di vita di un progetto Python: creazione dell&#8217;ambiente virtuale, installazione delle librerie, sincronizzazione delle dipendenze e gestione del file di lock. Il risultato è un workflow più ordinato e facilmente riproducibile sia in sviluppo sia in produzione.</p>



<p class="wp-block-paragraph">L&#8217;adozione di UV è in costante crescita anche grazie alla sua compatibilità con gli standard moderni dell&#8217;ecosistema Python, come il file <code>pyproject.toml</code>. Questo permette di integrarlo facilmente in progetti esistenti senza dover modificare radicalmente la struttura del codice.</p>



<p class="wp-block-paragraph">Per chi sviluppa applicazioni Python, prova nuove librerie o gestisce pipeline di Continuous Integration, UV rappresenta oggi una valida alternativa agli strumenti tradizionali, capace di ridurre i tempi di lavoro e semplificare la gestione delle dipendenze.</p>



<p class="wp-block-paragraph">Per installare UV possiamo digitare:</p>



<pre class="wp-block-code"><code>curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env</code></pre>



<p class="wp-block-paragraph">Per installare l&#8217;ultima versione di python digitiamo:</p>



<pre class="wp-block-code"><code>uv python install</code></pre>



<p class="wp-block-paragraph">una versione specifica di python, ad esempio la 3.13, digitiamo:</p>



<pre class="wp-block-code"><code>uv venv --python 3.13</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">A questo punto, per integrarlo in un progetto esistente possiamo digitare:</p>



<pre class="wp-block-code"><code>uv init
uv add -r requirements.txt
uv run main.py</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2026/05/26/uv-installare-una-differente-versione-di-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker compose: come passare il proxy nel Dockerfile</title>
		<link>https://blog.smsoft.it/2026/05/19/docker-compose-come-passare-il-proxy-nel-dockerfile/</link>
					<comments>https://blog.smsoft.it/2026/05/19/docker-compose-come-passare-il-proxy-nel-dockerfile/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 19 May 2026 08:30:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[docker compose]]></category>
		<category><![CDATA[Dockerfile]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=7042</guid>

					<description><![CDATA[Per per utilizzare un proxy all&#8217;interno della procedura di build prevista nel Dockerfile impostato dal compose.yaml è necessario effettuare sia una modifica al compose.yaml che al Dockerfile. Nel mio esempio il proxy è attivo sulla macchina host, pertanto lo si può &#8220;puntare&#8221; con il nome host.docker.internal avendo l&#8217;accortezza di aggiungere, come vedremo in avanti, nel ... <a title="Docker compose: come passare il proxy nel Dockerfile" class="read-more" href="https://blog.smsoft.it/2026/05/19/docker-compose-come-passare-il-proxy-nel-dockerfile/" aria-label="Per saperne di più su Docker compose: come passare il proxy nel Dockerfile">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Per per utilizzare un proxy all&#8217;interno della procedura di build prevista nel <strong>Dockerfile</strong> impostato dal <strong>compose.yaml </strong>è necessario effettuare sia una modifica al compose.yaml che al Dockerfile. </p>



<p class="wp-block-paragraph">Nel mio esempio il proxy è attivo sulla macchina <strong>host</strong>, pertanto lo si può &#8220;puntare&#8221; con il nome <strong>host.docker.internal</strong> avendo l&#8217;accortezza di aggiungere, come vedremo in avanti, nel file <strong>compose.yaml</strong>:</p>



<pre class="wp-block-code"><code>      extra_hosts:
        - "host.docker.internal:host-gateway"</code></pre>



<p class="wp-block-paragraph">Ipotizziamo che il <strong>Dockerfile</strong> contenga qualcosa di questo tipo:</p>



<pre class="wp-block-code"><code># Stage 1: Dipendenze
FROM node:20-alpine AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app</code></pre>



<p class="wp-block-paragraph">dobbiamo aggiungere le necessarie variabili facendolo diventare:</p>



<pre class="wp-block-code"><code># Stage 1: Dipendenze
FROM node:20-alpine AS deps
ARG HTTP_PROXY
ARG HTTPS_PROXY
ARG NO_PROXY

ENV HTTP_PROXY=${HTTP_PROXY}
ENV HTTPS_PROXY=${HTTPS_PROXY}
ENV NO_PROXY=${NO_PROXY}
ENV http_proxy=${HTTP_PROXY}
ENV https_proxy=${HTTPS_PROXY}
ENV no_proxy=${NO_PROXY}

RUN apk add --no-cache libc6-compat
WORKDIR /app</code></pre>



<p class="wp-block-paragraph">Importante: Se l&#8217;applicativo cerca la variabile proxy in altro modo, ad esempio pip lanciato nel docker file, bisognerà dichiarare il proxy anche li in modo specifico, es:</p>



<pre class="wp-block-code"><code>COPY requirements.txt .
RUN python -m pip config --user set global.proxy $HTTP_PROXY
RUN pip install --no-cache-dir -r requirements.txt</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">ora passiamo a modificare il <strong>compose.yaml</strong> che da:</p>



<pre class="wp-block-code"><code>services:
  app:
    image: gest:latest
    build:
      context: .
      dockerfile: Dockerfile
      args:
        BUILD_GIT_SHA: ${BUILD_GIT_SHA:-unknown}
        BUILD_DATE: ${BUILD_DATE:-unknown}
    container_name: app-club
    restart: unless-stopped</code></pre>



<p class="wp-block-paragraph">dovrà diventare:</p>



<pre class="wp-block-code"><code>services:
  app:
    image: gest:latest
    build:
      context: .
      dockerfile: Dockerfile
      args:
        BUILD_GIT_SHA: ${BUILD_GIT_SHA:-unknown}
        BUILD_DATE: ${BUILD_DATE:-unknown}
        HTTP_PROXY: http://host.docker.internal:8888
        HTTPS_PROXY: http://host.docker.internal:8888
        NO_PROXY: 127.0.0.1,localhost
      extra_hosts:
        - "host.docker.internal:host-gateway"
    container_name: app-club
    restart: unless-stopped
    extra_hosts:
      - "host.docker.internal:host-gateway"</code></pre>



<p class="wp-block-paragraph"><strong>Nota</strong>: il TAG <strong>extra_hosts</strong> è ripetuto due volte, perché uno viene passato come ARG e l&#8217;altro viene usato dalla machcina docker.</p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2026/05/19/docker-compose-come-passare-il-proxy-nel-dockerfile/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Debian 13: Installare GitLab Runner</title>
		<link>https://blog.smsoft.it/2026/05/12/debian-13-installare-gitlab-runner/</link>
					<comments>https://blog.smsoft.it/2026/05/12/debian-13-installare-gitlab-runner/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 12 May 2026 08:30:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[gitlab]]></category>
		<category><![CDATA[gitlab runner]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=7038</guid>

					<description><![CDATA[GitLab runner consente di avviare runner che possono Per l&#8217;isntallazione bastano pochi comandi: Poi accediamo all&#8217;interfaccia web di GitLab, andiamo nel progetto che ci interessa, poi &#8220;Settings&#8221; e &#8220;CI/CD&#8220;. Qui apriamo la sezione &#8220;Runners&#8221; e clicchiamo sul pulsante &#8220;Create project runner&#8220;. La procedura mostrerà un comando da scrivere nel terminale per agganciare il runner del ... <a title="Debian 13: Installare GitLab Runner" class="read-more" href="https://blog.smsoft.it/2026/05/12/debian-13-installare-gitlab-runner/" aria-label="Per saperne di più su Debian 13: Installare GitLab Runner">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">GitLab runner consente di avviare runner che possono</p>



<p class="wp-block-paragraph">Per l&#8217;isntallazione bastano pochi comandi:</p>



<pre class="wp-block-code"><code>curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | bash
apt-get install -y gitlab-runner
</code></pre>



<p class="wp-block-paragraph">Poi accediamo all&#8217;interfaccia web di <strong>GitLab</strong>, andiamo nel progetto che ci interessa, poi &#8220;<strong>Settings</strong>&#8221; e &#8220;<strong>CI/CD</strong>&#8220;. Qui apriamo la sezione &#8220;<strong>Runners</strong>&#8221; e clicchiamo sul pulsante &#8220;<strong>Create project runner</strong>&#8220;. La procedura mostrerà un comando da scrivere nel terminale per agganciare il runner del progetto, in particolare c&#8217;è una chiave che serve per abilitare il runner. Recuperiamo la chiave e poi digitiamo:</p>



<pre class="wp-block-code"><code>sudo gitlab-runner register \
  --non-interactive \
  --url "SITE_URL" \
  --token "RUNNER_TOKEN" \
  --executor "docker" \
  --docker-image alpine:latest \
  --docker-pull-policy "if-not-present" \
  --description "docker-runner"</code></pre>



<p class="wp-block-paragraph">sostituendo <strong>SITE_URL</strong> con l&#8217;url del sito dove avete installato <strong>GitLab</strong> e <strong>RUNNER_TOKEN</strong> con il token recuperato nella procedura &#8220;<strong>Create project runner</strong>&#8221; avviata prima.</p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2026/05/12/debian-13-installare-gitlab-runner/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Debian 13: Installare docker e docker compose</title>
		<link>https://blog.smsoft.it/2026/05/05/debian-13-installare-docker-e-docker-compose/</link>
					<comments>https://blog.smsoft.it/2026/05/05/debian-13-installare-docker-e-docker-compose/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 05 May 2026 08:30:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[docker-compose]]></category>
		<category><![CDATA[portainer.io]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=7034</guid>

					<description><![CDATA[Vediamo come procedere all&#8217;installazione veloce di docker e docker compose su debian 13 Trixie ma funziona anche con Debian 12 e Debian 11. Partiamo con docker: Rimuoviamo eventuali pacchetti installati prima: Installiamo la chiave GPG Aggiungiamo il repository ad APT: Effettuiamo l&#8217;installazione vera e propria dell&#8217;ultima versione disponibile: Nota: per installare una versione specifica, al ... <a title="Debian 13: Installare docker e docker compose" class="read-more" href="https://blog.smsoft.it/2026/05/05/debian-13-installare-docker-e-docker-compose/" aria-label="Per saperne di più su Debian 13: Installare docker e docker compose">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Vediamo come procedere all&#8217;installazione veloce di <strong>docker</strong> e <strong>docker compose</strong> su <strong>debian 13 Trixie</strong> ma funziona anche con Debian 12 e Debian 11. </p>



<p class="wp-block-paragraph">Partiamo con <strong>docker</strong>:</p>



<pre class="wp-block-code"><code>apt-get update
apt-get install apt-transport-https ca-certificates curl gnupg lsb-release</code></pre>



<p class="wp-block-paragraph">Rimuoviamo eventuali pacchetti installati prima:</p>



<pre class="wp-block-code"><code>apt remove $(dpkg --get-selections docker.io docker-compose docker-doc podman-docker containerd runc | cut -f1)</code></pre>



<p class="wp-block-paragraph">Installiamo la chiave GPG</p>



<pre class="wp-block-code"><code>curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc</code></pre>



<p class="wp-block-paragraph">Aggiungiamo il repository ad APT:</p>



<pre class="wp-block-code"><code>tee /etc/apt/sources.list.d/docker.sources &lt;&lt;EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release &amp;&amp; echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF</code></pre>



<p class="wp-block-paragraph">Effettuiamo l&#8217;installazione vera e propria dell&#8217;ultima versione disponibile:</p>



<pre class="wp-block-code"><code>apt-get update
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</code></pre>



<p class="wp-block-paragraph"><strong>Nota</strong>: per installare una <strong>versione</strong> specifica, <strong>al posto dell&#8217;ultimo</strong> comando, facciamo:</p>



<pre class="wp-block-code"><code>apt list --all-versions docker-ce

VERSION_STRING=5:29.6.1-1~debian.12~bookworm
apt install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin</code></pre>



<p class="wp-block-paragraph">Ora verifichiamo se tutto è andato a buon fine:</p>



<pre class="wp-block-code"><code>systemctl status docker
systemctl start docker</code></pre>



<p class="wp-block-paragraph">e proviamo ad avviare un&#8217;immagine di esempio</p>



<pre class="wp-block-code"><code>docker run hello-world</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Nota</strong>: per disinstallare docker:</p>



<pre class="wp-block-code"><code>apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
rm -rf /var/lib/docker
rm -rf /var/lib/containerd</code></pre>



<p class="wp-block-paragraph">e rimuoviamo anche il riferimento al repository ed alla firma:</p>



<pre class="wp-block-code"><code>rm /etc/apt/sources.list.d/docker.sources
rm /etc/apt/keyrings/docker.asc</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Infine, se vi interessa un sistema visuale per la gestione delle istanze docker, posso consigliarvi <a rel="noreferrer noopener" href="https://www.portainer.io/" target="_blank">portainer</a> che potete recuperare da <a rel="noreferrer noopener" href="https://github.com/portainer/portainer" target="_blank">github</a>. Per l&#8217;installazione di default:</p>



<pre class="wp-block-code"><code>docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest</code></pre>



<p class="wp-block-paragraph">Nota: se la macchina in questione è dietro un proxy, potreste ricevere il seguente errore:</p>



<pre class="wp-block-code"><code>docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).</code></pre>



<p class="wp-block-paragraph">Questo sicuramente è legato al fatto che docker non riesce ad utilizzare il proxy. Su Debian consiglio quanto segue:</p>



<pre class="wp-block-code"><code>mkdir /etc/systemd/system/docker.service.d</code></pre>



<p class="wp-block-paragraph">editare il file <strong>/etc/systemd/system/docker.service.d/http-proxy.conf</strong> ed inserire i parametri del proxy, es:</p>



<pre class="wp-block-code"><code>&#91;Service]
Environment="HTTP_PROXY=http://proxyHost:proxyPort"
Environment="HTTPS_PROXY=http://proxyHost:proxyPort"
Environment="NO_PROXY=localhost,127.0.0.1"</code></pre>



<p class="wp-block-paragraph">Ricaricare l&#8217;unità di systemd:</p>



<pre class="wp-block-code"><code>systemctl daemon-reload</code></pre>



<p class="wp-block-paragraph">Verificare che le impostazioni siano state correttamente lette:</p>



<pre class="wp-block-code"><code>systemctl show --property Environment docker</code></pre>



<p class="wp-block-paragraph">riavviare il servizio docker, eseguire entrambe i comandi:</p>



<pre class="wp-block-code"><code>systemctl restart docker
<meta http-equiv="content-type" content="text/html; charset=utf-8">service docker restart</code></pre>



<p class="wp-block-paragraph">E poi ripetere l&#8217;installazione di portainer, passando anche qui il proxy:</p>



<pre class="wp-block-code"><code>docker run -d -p 8000:8000 -p 9443:9443 -e "HTTPS_PROXY=http://proxyHost:proxyPort" --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest</code></pre>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><em><strong>Voglio ricordare che è possibile passare il proxy su docker in altri due modi:</strong></em></h2>



<p class="wp-block-paragraph">Inserire nel file <strong><code>/etc/default/docker</code></strong> le informazioni del proxy, come segue:</p>



<pre class="wp-block-code"><code>export http_proxy='http://proxyHost:proxyPort'
export https_proxy='http://proxyHost:proxyPort'
export no_proxy=localhost,127.0.0.1</code></pre>



<p class="wp-block-paragraph">oppure creare il file <strong><code>~/.docker/config.json</code></strong> ed inserire quanto segue:</p>



<pre class="wp-block-code"><code>{
"proxies": {
      "defaults": {
        "httpProxy":"http://proxyHost:proxyPort",
        "httpsProxy":"http://proxyHost:proxyPort",
        "noProxy":"localhost,127.0.0.1"
      }
    }
}</code></pre>



<p class="wp-block-paragraph">In ogni caso, ricordatevi di riavviare il servizio con:</p>



<pre class="wp-block-code"><code>service docker restart</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Per verificare le impostazioni passate alle macchine guest, basterà eseguire questo comando:</p>



<pre class="wp-block-code"><code>docker container run --rm busybox env</code></pre>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2026/05/05/debian-13-installare-docker-e-docker-compose/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installare pi su MacOS e configurare la connessione con ollama locale/remoto</title>
		<link>https://blog.smsoft.it/2026/04/28/installare-pi-su-macos-e-configurare-la-connessione-con-ollama-locale-remoto/</link>
					<comments>https://blog.smsoft.it/2026/04/28/installare-pi-su-macos-e-configurare-la-connessione-con-ollama-locale-remoto/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 28 Apr 2026 08:30:00 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[ollama]]></category>
		<category><![CDATA[pi.dev]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=7022</guid>

					<description><![CDATA[Abbiamo parlato recentemente di PI (pi.dev) oggi vediamo come installarlo e collegarli ad OLLAMA locale o remoto. Per quanto riguarda l&#8217;installazione basterà digitare nel terminale: Consiglio successivamente di installare il plugin : A questo punto possiamo accedere a pi (scrivendo pi nel terminale) e poi avviando la configurazione del plugin: Verrà mostrato una maschera di ... <a title="Installare pi su MacOS e configurare la connessione con ollama locale/remoto" class="read-more" href="https://blog.smsoft.it/2026/04/28/installare-pi-su-macos-e-configurare-la-connessione-con-ollama-locale-remoto/" aria-label="Per saperne di più su Installare pi su MacOS e configurare la connessione con ollama locale/remoto">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Abbiamo parlato recentemente di PI (<a href="https://pi.dev" target="_blank" rel="noreferrer noopener">pi.dev</a>) oggi vediamo come installarlo e collegarli ad OLLAMA locale o remoto.</p>



<p class="wp-block-paragraph">Per quanto riguarda l&#8217;installazione basterà digitare nel terminale:</p>



<pre class="wp-block-code"><code>curl -fsSL https://pi.dev/install.sh | sh</code></pre>



<p class="wp-block-paragraph">Consiglio successivamente di installare il <a href="https://pi.dev/packages" target="_blank" rel="noreferrer noopener">plugin</a> :</p>



<pre class="wp-block-code"><code>pi install npm:pi-setup-custom-providers</code></pre>



<p class="wp-block-paragraph">A questo punto possiamo accedere a pi (scrivendo pi nel terminale) e poi avviando la configurazione del plugin:</p>



<pre class="wp-block-code"><code>pi
/setup-custom-providers</code></pre>



<p class="wp-block-paragraph">Verrà mostrato una maschera di scelta in cui selezioniamo &#8220;A<strong>dd new provider</strong>&#8220;, poi &#8220;<strong>From preset</strong>&#8220;, poi &#8220;<strong>ollama</strong>&#8221; e completeremo con l&#8217;inserimenti del parametri richiesti.</p>



<p class="wp-block-paragraph">Per scegliere il modello da usare di default bastaerà digitare nell&#8217;interfaccia di <strong>pi</strong>:</p>



<pre class="wp-block-code"><code>/models</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2026/04/28/installare-pi-su-macos-e-configurare-la-connessione-con-ollama-locale-remoto/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
