Obiettivo di Minimizzazione Fedora
Proposta Seconda Fase
Responsabile obiettivo: Adam Samalik (asamalik)
Il problema
Sebbene Fedora sia ben adatta per workstation e server fisici/virtuali tradizionali, viene spesso trascurata per casi d’uso che vanno oltre le installazioni tradizionali.
Alcuni tipi moderni di deployment — come IoT e container — sono piuttosto sensibili alle dimensioni. Per l’IoT si tratta solitamente di connessioni dati lente (per aggiornamenti/gestione) e per il cloud e i container si tratta della scala massiccia.
Un esempio specifico è Systemd — pur essendo molto utile (tutti amano Systemd) ed essendo sempre presente sui sistemi fisici, è raramente necessario nei container. Quindi non era un problema per i pacchetti richiedere Systemd solo per systemd-sysusers per creare utenti. Tuttavia, nei container, ciò significa un aumento significativo delle dimensioni.
Oltre a ciò, fondamentalmente tutti i tipi di deployment beneficiano di una dimensione ridotta, poiché esiste una relazione diretta tra l’impronta dell’installazione, la superficie di attacco e le CVE pertinenti.
Visione
Migliaia di contributori individuali e aziendali collaborano nella comunità Fedora per esplorare nuovi problemi e costruire un sistema operativo moderno e in rapida evoluzione con un ricco ecosistema che consenta loro di sperimentare sulla modernizzazione della loro infrastruttura.
Missione
Aiutare gli sviluppatori open source, gli amministratori di sistema e i manutentori di distribuzioni Linux a concentrarsi su ciò che è rilevante per loro.
Risultati
Fedora è una piattaforma popolare perché il suo ecosistema è sia all’avanguardia che ben ottimizzato per i deployment moderni come IoT e container. Ciò spinge molte persone a utilizzare Fedora piuttosto che costruire e assemblare i propri artefatti direttamente dai progetti upstream. E questo allevia la pressione sugli sviluppatori open source causata dagli utenti che altrimenti chiederebbero che i loro specifici problemi di sicurezza e di altro tipo vengano risolti rapidamente.
Quindi:
-
Gli sviluppatori open source possono concentrarsi sullo sviluppo delle funzionalità
-
Gli amministratori di sistema possono facilmente utilizzare componenti precompilati che ricevono anche aggiornamenti regolari
-
I contributori di Fedora (aziende e individui) possono collaborare all’interno della comunità Fedora nell’esplorare e sviluppare soluzioni open source ai problemi del futuro
Prodotti
Casi d’uso specifici sono definiti in Fedora. La comunità si concentra quindi su tali casi d’uso con sviluppo e manutenzione, ottimizzazione (come la minimizzazione) e test (come CI e gating). Questi casi d’uso possono essere prioritizzati in modo trasparente per le risorse dell’infrastruttura in base agli interessi della comunità.
Feedback Pipeline monitora attivamente ogni caso d’uso e registra le dimensioni e le dipendenze necessarie per eseguirlo. Lo storico dei dati viene conservato e mostrato per vedere i cambiamenti nel tempo. E per mantenere le cose piccole nel tempo, Feedback Pipeline rileva anche automaticamente gli aumenti di dimensione e potenzialmente apre automaticamente bug su Bugzilla per tracciare/risolvere/giustificare tali aumenti in modo trasparente.
Un focus attivo sulla minimizzazione significa che i nostri manutentori producono contenuti ottimizzati per le dimensioni con lo stesso o minore sforzo. Strumenti, servizi e dati li aiutano a prendere facilmente la decisione giusta sulle dipendenze e a mantenere le cose più piccole nel tempo.
Azioni
Identificare casi d’uso rilevanti e consentire alla comunità (cioè non solo al Team di Minimizzazione) di definire i propri. Pensiamo a un caso d’uso come un insieme di pacchetti installati in un contesto specifico, con uno scopo specifico — come Container Server HTTP Apache. Definire casi d’uso almeno per:
-
httpd
-
nginx
-
MariaDB
-
PostgreSQL
-
Fedora IoT
-
Python 3
Inoltre, considerare l’analisi di casi d’uso nativi per container, come:
-
GO per app container
-
Rust per app container
-
Quarkus
Raccogliere casi d’uso specifici parlando con le persone agli eventi tecnologici, sui forum Internet e in qualsiasi altra sede idonea.
Estendere i servizi di monitoraggio (Feedback Pipeline) che:
-
Visualizzano le dipendenze e la dimensione totale per ogni caso d’uso
-
Monitorano le variazioni di dimensione nel tempo
-
Rilevano automaticamente grandi variazioni di dimensione
-
Notificano i manutentori riguardo aumenti di dimensione imprevisti
Oltre alle funzionalità, dobbiamo anche:
-
scrivere test per semplificare significativamente la contribuzione
-
eseguire ottimizzazioni delle prestazioni affinché il servizio scali bene
-
esplorare l’uso di CI e Rawhide Gating
Essere in grado di vedere cosa sta succedendo è un prerequisito per implementare qualsiasi cambiamento. Vedere tutte le opportunità rilevanti ci aiuta a concentrarci su quelle che hanno il maggiore impatto, e un tracciamento trasparente ci aiuta a dimostrare l’utilità del nostro lavoro e a concentrarci ulteriormente sulle attività più impattanti.
Minimizzare la dimensione di installazione dei casi d’uso ottimizzando le dipendenze RPM, le funzionalità, l’architettura software e altri fattori. In particolare, cercare:
-
Dipendenze RPM non necessarie (anche se probabilmente non ce ne saranno molte)
-
Implementazioni multiple della stessa funzionalità richieste da vari pacchetti — cercare di far loro usare la stessa
-
Requisiti specifici del contesto — come richiedere Systemd sui deployment tradizionali che va bene vs. richiederlo nei container che comporta aumenti significativi di dimensione. Sfruttare le dipendenze deboli in questi casi (ciò potrebbe richiedere modifiche al codice).
-
Dipendenze da elementi grandi utilizzando solo una frazione della funzionalità — come richiedere l’intero stack Perl per eseguire un singolo script — tale script può essere riscritto in Python, che è quasi ovunque principalmente a causa di DNF
Interagire con gli sviluppatori upstream riguardo a cambiamenti più grandi nel packaging e nell’architettura. Un esempio è Systemd e la suddivisione del pacchetto systemd-sysuser.
Implementare modifiche ai processi e alle policy che riflettano cambiamenti più grandi e generali. Ancora una volta, un buon esempio è l’uso di Systemd nei container, o il problema generale della creazione di utenti nei container.
Fornire guida alla comunità Fedora sotto forma di post di blog, video e interventi a conferenze. Anche se potremmo avere linee guida e policy in vigore, diffondere la voce è sempre importante.
Risorse e Input
Risorse cloud per prototipare i servizi. Non modificheremo l’infrastruttura Fedora esistente in alcun modo prima che qualsiasi cosa sviluppiamo si dimostri utile e valga la pena della fatica della stabilizzazione e del passaggio in produzione.
Al momento non sono necessarie risorse esistenti di Fedora Infra o Release Engineering. Tuttavia, potremmo aver bisogno di aiuto per configurare (o ottenere accesso a) le risorse cloud.
È decisamente necessario il supporto attivo dei nostri manutentori, dell’FPC e degli altri membri della comunità. Ovviamente non è qualcosa che possiamo "richiedere", ma è comunque un input necessario.
Principi Guida
Utilità prima della dimensione: C’è un equilibrio tra utilità e dimensione. Teniamo conto di ciò e non implementeremo cambiamenti drastici che impedirebbero ai nostri utenti di usare Fedora. Tuttavia, nulla ci impedisce di produrre artefatti aggiuntivi molto specifici e minimali.
Usando RPM: Stiamo facendo questo con RPM. Non stiamo ottenendo la minimizzazione eliminando file dopo l’installazione. Questo potrebbe essere ovvio, ma vale comunque la pena menzionarlo.
Risultati della Prima Fase
Vedi la pagina di stato per informazioni dettagliate e aggiornamenti settimanali storici. Riepilogo di seguito.
Migliore comprensione — Sì, ora abbiamo una comprensione molto migliore del problema e un’idea migliore e più specifica sui prossimi passi.
Feedback Pipeline — Un servizio che monitora i casi d’uso per dimensione e dipendenze. Include varie viste in tabelle e grafici interattivi delle dipendenze.
Systemd e container — Abbiamo approfondito il problema di Systemd vs. container, specialmente per i pacchetti che lo richiedono solo per creare utenti nei container usando systemd-sysuser. Stiamo lavorando con l’upstream per separare il pacchetto. Abbiamo pensato, ma non ancora proposto, una policy più ampia su questo.
Riflessioni sulla policy:
-
A - Se systemd è necessario solo per avviare i servizi, un pacchetto dovrebbe solo "Raccomandare" (Recommend) systemd. Ciò consentirà ai container di installare il pacchetto senza systemd.
-
B - Se un programma sta usando solo una libreria di systemd, richiedere solo systemd-libs. Esempio: libusb
-
C - Se un pacchetto vuole usare systemd-sysusers per creare utenti/gruppi, richiedere solo systemd-sysusers. (NOTA: Questo sottopacchetto non è ancora implementato)
initial-setup — Se un’immagine viene costruita senza utenti, deve esserci un modo per aggiungere un utente all’avvio. initial-setup fa un buon lavoro in questo, ma a scapito delle dimensioni. Tira dentro anaconda-tui e anaconda-core. Questi due pacchetti poi iniziano a tirare dentro molti altri pacchetti, piuttosto grandi. Questo vale per le immagini IoT, così come per altre. Attualmente non abbiamo una raccomandazione, ma ci stiamo lavorando.
Usare pcre2 invece di pcre — Lo sforzo di minimizzazione sta cercando di ridurre le cose a un solo pcre, e questo è pcre2.
Polkit e mozjs60 — Spieghiamo questo con una terribile analogia! Polkit è questa persona adorabile (0.5M) che suona il campanello e dice che laverà le finestre di casa tua. Dopo che sei d’accordo, tira fuori il suo elefante (mozjs60 30M) e lo usa per spruzzare acqua sulle tue finestre. Polkit tira dentro mozjs60, che è un pacchetto piuttosto grande. Quindi, stiamo cercando di risolvere anche questo.
Want to help? Learn how to contribute to Fedora Docs ›