PageSourceSearch

https://penguins-eggs.net/assets/js/3ea7f961.0e5bece7.js

js penguins-eggs.net collected 2026-10-03 23:13:30 UTC 15,784 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkpenguins_blog=globalThis.webpackChunkpenguins_blog||[]).push([[3471],{72428(e,i,n){n.r(i),n.d(i,{default:()=>l,metadata:()=>a});var a=n(53451),o=n(11684),t=n(10506),r=n(70548);const s={authorsImageUrls:[void 0]};function c(e){const i={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.A,{}),"\n",(0,o.jsx)(i.p,{children:"Era da molto tempo che Sebastien, un mio amico canadese, mi sollecitava di lavorare con i containers."}),"\n",(0,o.jsx)(i.p,{children:"Per qualche anno mi sono chiesto che significato potesse avere, in qualche modo mi ero creato eggs che mi replicava quasi con la stessa semplicit\xe0 sistemi completi, perch\xe8 usare dei container?"}),"\n",(0,o.jsxs)(i.p,{children:["Il mio lavoro, \xe8 molto ristretto, contrariamente a quanto si pu\xf2 supporre non conosco Linux come le mie tasche, o meglio, forse si! Dato che ogni tanto perdo qualcosa... Ma bando alle chiacchiere, studiare un argomento nuovo e complesso senza sapere manco dove si va a parare, mantenento contemporaneamente penguins-eggs - con tutti i problemi di aggiornamento che  comporta - era abbastanza lontano dalle mie intenzioni e sono fuggito a lungo.\nPoi, giusto una settimana fa mi scrive nel gruppo tale ",(0,o.jsx)(i.code,{children:"gnuhub"})," chiedendomi come creare il pacchetto Debian di eggs. Uno domanda piuttosto semplice, la risposta \xe8 semplcemente: ",(0,o.jsx)(i.code,{children:"pnpm deb"})," e ti aspetti che sia stata formulata da un utente comune, un beginner/advanced. Cos\xec dopo avergli risposto, il giorno dopo gli chiedo: come \xe8 andata, sei riuscito?"]}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{src:n(57193).A+"",width:"2560",height:"1440"})}),"\n",(0,o.jsx)(i.p,{children:'Ecco, da questo "incontro" sta nascendo una nuova generazione di penguins-eggs, capace di produrre una ISO Arch da un sistema Debian o Ubuntu. Per il futuro sar\xe0 possibile anche il cosidetto "viceversa" ovvero creare da  Arch o Ubuntu, una ISO Debian o altro tra le distro che saranno supportate.'}),"\n",(0,o.jsx)(i.h2,{id:"che-cosa-sto-creando",children:"Che cosa sto creando?"}),"\n",(0,o.jsx)(i.p,{children:"Sto usando podman, non lo conoscevo affatto, \xe8 una alternativa opensource a Docker creata da RedHat ed usata in molti progetti main stream. La cosa che me lo ha fatto scegliere \xe8 podman viene usato anche per i container delle CI su github."}),"\n",(0,o.jsxs)(i.p,{children:['In buona sostanza, o sulla macchina locale o attraverso le azioni di github, viene creato un container a partire da una immagine minima della distribuzione da "ri-creare", viene quindi installato penguins-eggs e le dipendenze necessarie, poi un set minimo di pacchetti. A questo punto, lanciando ',(0,o.jsx)(i.code,{children:"eggs"})," all'interno del container, di ottiene una immagine ISO che prescinde totalmente dal sistema installato!"]}),"\n",(0,o.jsx)(i.h2,{id:"si-va-bene-ma-a-che-serve",children:"Si va bene, ma a che serve?"}),"\n",(0,o.jsx)(i.p,{children:"Serve a molto, ancora non lo scopro appieno ma nemmeno ne vedo i limiti: al momento mi permette di avere delle CI su github che costruiscono sia i pacchetti che le ISO ad ogni commit oppure a richiesta e tracciano gli eventuali errori."}),"\n",(0,o.jsxs)(i.p,{children:["Provate a consultare questo ",(0,o.jsx)(i.a,{href:"https://github.com/pieroproietti/penguins-eggs/actions",children:"link"})," e divertitevi a vedere come una immagine venga creata e rimasterizzata in background con penguins-eggs."]}),"\n",(0,o.jsx)(i.p,{children:"Questo, naturalmente, \xe8 anche un ottimo sistema di debug."}),"\n",(0,o.jsxs)(i.p,{children:["Ringrazio molto ",(0,o.jsx)(i.a,{href:"https://github.com/gnuhub",children:"gnuhub"})," al secolo Wang Stallman, per avermi indicato la strada."]}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{src:n(53472).A+"",width:"2560",height:"1440"})}),"\n",(0,o.jsx)(i.h2,{id:"semplificazione",children:"Semplificazione"}),"\n",(0,o.jsx)(i.p,{children:"Il processo creato da Wang su github, prevede l'uso di due c
1ontainer: il primo un container Ubuntu per creare la CI ed un secondo che carica la distribuzione di cui creare l'immagine ISO."}),"\n",(0,o.jsxs)(i.p,{children:["Inizialmente gli script specificavano sia la creazione del container Ubuntu, sia quella dei vari container delle distribuzioni. Ora ho appena riorganizzato il codice creando uno script ",(0,o.jsx)(i.code,{children:"10000-ubuntu-container-base.sh"})," che non fa altro che configurare il container Ubuntu, rendendolo capace di reperire le immagini necessarie, che poi uso nei vari container di test."]}),"\n",(0,o.jsx)(i.p,{children:"Cos\xec abbiamo, nella root del progetto:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsx)(i.li,{children:(0,o.jsx)(i.code,{children:"10000-ubuntu-container-base.sh"})}),"\n",(0,o.jsx)(i.li,{children:(0,o.jsx)(i.code,{children:"10000-ubuntu-vm-test.sh"})}),"\n",(0,o.jsx)(i.li,{children:(0,o.jsx)(i.code,{children:"10002-ubuntu-container-test.sh"})}),"\n",(0,o.jsx)(i.li,{children:(0,o.jsx)(i.code,{children:"10003-debian-container-test.sh"})}),"\n",(0,o.jsx)(i.li,{children:(0,o.jsx)(i.code,{children:"..."})}),"\n"]}),"\n",(0,o.jsxs)(i.p,{children:["]",(0,o.jsx)(i.code,{children:"10000-ubuntu-container-base.sh"}),"](",(0,o.jsx)(i.a,{href:"https://github.com/pieroproietti/penguins-eggs/blob/master/10000-ubuntu-container-base.sh",children:"https://github.com/pieroproietti/penguins-eggs/blob/master/10000-ubuntu-container-base.sh"}),") non viene mai lanciato da solo, ma viene chiamato con ",(0,o.jsx)(i.code,{children:"source"})," dai vari script. Ad asempio:"]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{children:"#!/usr/bin/env bash\n\nset -x\nsource ./10000-ubuntu-container-base.sh\n\ncd $CMD_PATH\nwhich podman \npodman --version\ndf -h\n\npodman run \\\n        --hostname minimal \\\n        --privileged \\\n        --cap-add all \\\n        --ulimit nofile=32000:32000 \\\n        --pull=always \\\n        -v $PWD/mychroot/ci:/ci \\\n        -v /dev:/dev \\\n        debian:12.9 \\\n        /ci/run-on-debian.sh\n\ndf -h\ndate\n"})}),"\n",(0,o.jsx)(i.p,{children:"Questo costituisce una semplificazione notevole."}),"\n",(0,o.jsx)(i.h2,{id:"la-vendemmia",children:"La vendemmia"}),"\n",(0,o.jsx)(i.p,{children:"Terminata la configurazione delle CI in maniera soddisfacente, \xe8 tempo di aspettare che l'uva maturi per la vendemmia."}),"\n",(0,o.jsx)(i.p,{children:"Personalmente, avendone avuto  diretta esperienza, l'ho sempre reputata una attivit\xe0 estremamente faticosa ma d'altra parte quando giunge \xe8 l'ora del raccolto e, dall'antichit\xe0 in poi \xe8 considerata una festa."}),"\n",(0,o.jsx)(i.p,{children:'Occorre capire come "vendemmiare" ovvero come tirare fuori da queste CI o da altre, i pacchetti, le tarballs e le ISO create!'}),"\n",(0,o.jsx)(i.p,{children:"Non ne ho idea, c'\xe8 qualche esperto che pu\xf2 consigliarmi?"}),"\n",(0,o.jsx)(i.h3,{id:"preparativi",children:"Preparativi"}),"\n",(0,o.jsx)(i.p,{children:"Prima di vendemmiare bisogna preparare i recipienti per raccogliere il vino, ovvero sistemare le botti. Non mi dilungo sull'argomento."}),"\n",(0,o.jsxs)(i.p,{children:["Fortunatamente un grande aiuto, ancora una volta, \xe8 venuto dal buon Wang Stallman - esperto vignaiuolo cinese - che mi ha modificato gli script per la raccolta dei cosidetti ",(0,o.jsx)(i.code,{children:"artifact"}),"."]}),"\n",(0,o.jsx)(i.p,{children:"Sono riuscito, quindi ad esportare le prime ISO ed i primi tarballs, ma occorre ancora pefezionare. Inoltre con questo, sono stati aggiunti gli script per Fedora, Openmamba, OpenSuse e Rocky Linux."}),"\n",(0,o.jsx)(i.p,{children:"Sono partito da Rocky, pi\xf9 facile data la quasi sovrapposizione con Almalinux. Via, via affronteremo gli altri,ma ci vuole tempo."}),"\n",(0,o.jsx)(i.p,{children:"Rocky mi ha richiesto comunque qualche ora - e sto imparando cose nuove - vedremo gli altri."}),"\n",(0,o.jsx)(i.p,{children:"Passato lo scoglio di Rocky, ho affrontato Fedora, poi Openmamba, quindi Opensuse."}),"\n",(0,o.jsx)(i.p,{children:"Per\xf2 su Openmamba ed Opensuse mi sono arenato, \xe8 roba da fare al mattino, a mente fresca."}),"\n",(0,o.jsxs)(i.p,{children:["Sono cos\xec passato a riordinare le CI, a dare un nome decente agli ",(0,o.jsx)(i.co
1de,{children:"artifact"})," e, con l'occasione ho  ridenominato tutti gli scripts per fare posto ai due container ",(0,o.jsx)(i.code,{children:"build-packages-debs"}),"  e ",(0,o.jsx)(i.code,{children:"build-packages-arch"}),", ma ne parliamo prossimamente."]}),"\n",(0,o.jsxs)(i.p,{children:["Il giorno dopo, il buon ",(0,o.jsx)(i.code,{children:"gnuhub"}),' mi ha fatto "notare" di non stravolgere il suo campo: le CI. Ed ha anche ragione, cos\xec mi sono confinato nella mia ',(0,o.jsx)(i.code,{children:"/pods"})," dove ho posto tutto il necessario per lo sviluppo in locale e, limitarmi ad usare come host il solo Debian."]}),"\n",(0,o.jsx)(i.p,{children:"Sono passati altri due gierni, ieri finalmente Debian, Devuan ed Ubuntu hanno deciso di funzionare correttamente,\ncome ci si aspetterebbe."}),"\n",(0,o.jsx)(i.p,{children:"A questo punto, per\xf2 ho pensato di riscrivere il processo di installazione di penguins-eggs da utilizzare. Le tarballs sono utili, sono compatibili praticamente con tutte le distribuzioni sia lato host che container, ma finora ho sempre rilasciato penguins-eggs come pacchetto della distro dove mi \xe8 stato possibile."}),"\n",(0,o.jsx)(i.p,{children:"Dal mio punto di vista, pubblicare una Distro non aggiornabile, non \xe8 una buone idea."}),"\n",(0,o.jsx)(i.h2,{id:"riscrittura-di-penguins-eggs-install",children:"Riscrittura di penguins-eggs-install"}),"\n",(0,o.jsxs)(i.p,{children:["Cos\xec ho rivisto l'ex ",(0,o.jsx)(i.code,{children:"penguins-eggs-tarballs-install.sh"})," e l'ho trasformato in un pi\xf9 generico ",(0,o.jsx)(i.code,{children:"penguins-eggs-install.sh"}),"."]}),"\n",(0,o.jsx)(i.p,{children:"Naturalmente per creare i pacchetti DEB devo essere per forza su Debian/Devuan o Ubuntu, ma direi soprattuto su Debian visto che i pacchetti generati da Ubuntu 24.04 non sarebbero compatibili con quest'ultima."}),"\n",(0,o.jsx)(i.p,{children:"Dopo ancora un po' di lavoro, sono riuscito a ricreare da host Debian, le ISO minimal di Debian, Devuan ed Ubunti, praticamente perfette ad eccezione del fatto - me ne sono accorto successivamente - che non si avviano con UEFI."}),"\n",(0,o.jsx)(i.p,{children:"Ho provato a riprendere in mano Arch, per usarlo come host."}),"\n",(0,o.jsx)(i.p,{children:"Sembra funzionare, ho fatto la ISO di Debian ma quest'ultima, pur con lo stesso codice e container va in kernel panic."}),"\n",(0,o.jsx)(i.h2,{id:"conclusioni",children:"Conclusioni"}),"\n",(0,o.jsx)(i.p,{children:"Prendendo in esame le distribuzioni supportate da penguins-eggs: almalinux, arch, debian, devuan, fedora, openmamba, opensuse, rocky ed ubuntu."}),"\n",(0,o.jsx)(i.p,{children:"La combinazione delle differenti distribuzioni usabili come host \xe8, quindi, pari a nove."}),"\n",(0,o.jsx)(i.p,{children:"Le stesse, naturalmente sono usabili come container per creare la ISO live."}),"\n",(0,o.jsx)(i.p,{children:"Il problema \xe8 che nove, moltiplicato nove fa ottantuno."}),"\n",(0,o.jsx)(i.p,{children:"Meglio lasciar perdere, magari usare i container solo per i test sulla CI di github."}),"\n",(0,o.jsxs)(i.p,{children:["Sono sfiduciato per dirla tutta, sicuramente mi passer\xe0 ma per oggi ho voluto mettere uno stop a questo capitolo pubblicando la versione ",(0,o.jsx)(i.a,{href:"https://github.com/pieroproietti/penguins-eggs/blob/master/CHANGELOG.md#penguins-eggs-1010",children:"10.1.0-1"}),"."]}),"\n",(0,o.jsxs)(i.p,{children:["Se volete vedere i risultati dei test, consultate le ",(0,o.jsx)(i.a,{href:"https://github.com/pieroproietti/penguins-eggs/actions",children:"Actions"})," sulla ",(0,o.jsx)(i.a,{href:"https://github.com/pieroproietti/penguins-eggs",children:"repo"}),"."]}),"\n",(0,o.jsx)(i.p,{children:"Chi vivr\xe0 vedr\xe0!"}),"\n",(0,o.jsx)(i.h2,{id:"ringraziamenti",children:"Ringraziamenti"}),"\n",(0,o.jsxs)(i.p,{children:["Un ringraziamento doveroso a ",(0,o.jsx)(i.a,{href:"https://github.com/pieroproietti/penguins-eggs",children:"gnuhub"})," che mi ha letteralmente inoltrato a, e mi ha aperto ad un mondo: quello dei container, che non conoscevo affatto."]})]})}function l(e={}){const{wrapper:i}={...(0,t.R)(),...e.components};return i?(0,o.jsx)(i,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}n.d(i,["assets",0,s,"contentTitle",0,void 0,"frontMatter",0,{authors:"pieroproietti",slug:"containers",title:"containers",lang:"it",comments:!0,enableComments:!0},"toc",0,[{value:"Che cosa sto creando?",id:"che-cosa-sto-creando",level:2},{value:"Si va bene, ma a che serve?",id:"si-va-bene-ma-a-che-serve",level:2},{value:"Semplificazione",id:"semplificazione",level:2},{value:"La vendemmia",id:"la-vendemmia",level:2},{value:"Preparativi",id:"preparativi",level:3},{value:"Riscrittura di penguins-eggs-install",id:"riscrittura-di-penguins-eggs-install",level:2},{value:"Conclusioni",id:"conclusioni",level:2},{value:"Ringraziamenti",id:"ringraziamenti",level:2}]])},70548(e,i,n){n.d(i,{A:()=>r});var a=n(12888),o=n(47387),t=n(11684);function r(){const{pathname:e}=(0,o.zy)(),i=[{label:"Deutsch",code:"de"},{label:"English",code:"en"},{label:"Espa\xf1ol",code:"es"},{label:"Fran\xe7ais",code:"fr"},{label:"Italiano",code:"it"},{label:"Polska",code:"pl"},{label:"Portuguese",code:"pt"},{label:"\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438",code:"bg"},{label:"\u0420\u0443\u0441\u0441\u043a\u0438\u0439",code:"ru"},{label:"\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430",code:"uk"},{label:"\u3084\u307e\u3068",code:"ja"},{label:"\u4e2d\u56fd",code:"zh"},{label:"\u0641\u0627\u0631si",code:"fa"}];return(0,t.jsx)("div",{style:{marginBottom:"1.5rem",lineHeight:"1.8"},children:i.map((n,o)=>{const r=`https://penguins--eggs-net.translate.goog${e}?_x_tr_sl=auto&_x_tr_tl=${n.code}&_x_tr_hl=${n.code}&_x_tr_pto=wapp`;return(0,t.jsxs)(a.Fragment,{children:[(0,t.jsx)("a",{href:r,style:{fontSize:"0.9rem",fontWeight:"500"},rel:"nofollow",children:n.label}),o<i.length-1&&(0,t.jsx)("span",{children:"\xa0 \u2022 \xa0"})]},n.code)})})}},53472(e,i,n){const a=n.p+"assets/images/github-ci-e1207fd46c367792c98045c4baae7dfc.png";
1n.d(i,["A",0,a])},57193(e,i,n){const a=n.p+"assets/images/gnuhub-b1cf4a44ab158ffe4efa0326cf85a5f4.png";n.d(i,["A",0,a])},10506(e,i,n){n.d(i,{R:()=>r,x:()=>s});var a=n(12888);const o={},t=a.createContext(o);function r(e){const i=a.useContext(t);return a.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function s(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),a.createElement(t.Provider,{value:i},e.children)}},53451(e){e.exports=JSON.parse('{"permalink":"/blog/containers","source":"@site/blog/2025-03-26-containers.md","title":"containers","description":"Era da molto tempo che Sebastien, un mio amico canadese, mi sollecitava di lavorare con i containers.","date":"2025-03-26T00:00:00.000Z","tags":[],"readingTime":6.64,"hasTruncateMarker":false,"authors":[{"name":"Piero Proietti","title":"penguins-eggs author","url":"https://github.com/pieroproietti","imageURL":"https://avatars.githubusercontent.com/u/958613?s=400&u=32ba40e6e416005540d2eb92a5d45f78470a4bd2&v=4","key":"pieroproietti","page":null}],"frontMatter":{"authors":"pieroproietti","slug":"containers","title":"containers","lang":"it","comments":true,"enableComments":true},"unlisted":false,"prevItem":{"title":"review","permalink":"/blog/review"},"nextItem":{"title":"status","permalink":"/blog/status"}}')}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.