You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

11 KiB

Guida Completa: Creare un Pacchetto RPM per ComfyUI Launcher

Questa guida ti mostrerà come creare un pacchetto RPM per l'applicazione ComfyUI Launcher, una moderna interfaccia GTK4 per lanciare ComfyUI con supporto per ambienti conda.

Indice

  1. Prerequisiti
  2. Struttura del Progetto
  3. Preparazione dell'Ambiente RPM
  4. Creazione del File SPEC
  5. Processo di Build Automatizzato
  6. Build Manuale Step-by-Step
  7. Verifica e Test
  8. Installazione e Distribuzione
  9. Troubleshooting
  10. Best Practices

Prerequisiti

Distribuzione Linux Supportate

  • Fedora (38+)
  • CentOS Stream (8+)
  • RHEL (8+)
  • openSUSE (Leap 15.4+)
  • AlmaLinux/Rocky Linux (8+)

Pacchetti Necessari

Su Fedora/CentOS Stream/RHEL:

# Fedora
sudo dnf install rpm-build rpm-devel rpmlint rpmdevtools python3-devel \
                 python3-setuptools desktop-file-utils libappstream-glib \
                 gcc make python3-pip

# CentOS/RHEL (con EPEL)
sudo yum install epel-release
sudo yum install rpm-build rpm-devel rpmlint rpmdevtools python3-devel \
                 python3-setuptools desktop-file-utils libappstream-glib \
                 gcc make python3-pip

Su openSUSE:

sudo zypper install rpm-build rpmlint python3-devel python3-setuptools \
                    desktop-file-utils libappstream-glib-devel gcc make \
                    python3-pip

Dipendenze Runtime

  • Python 3.9+
  • GTK4 (4.6+)
  • libadwaita (1.0+)
  • PyGObject (3.42+)
  • conda (per la gestione ambienti)

Struttura del Progetto

Il progetto ComfyUI Launcher ha la seguente struttura:

gtk-app/
├── main.py                    # Applicazione principale
├── style.css                  # Stili GTK4
├── pyproject.toml             # Configurazione progetto Python
├── requirements.txt           # Dipendenze Python
├── LICENSE                    # Licenza MIT
├── README.md                  # Documentazione italiana
├── README_EN.md               # Documentazione inglese
├── CHANGELOG.md               # Cronologia cambiamenti
├── config.example.json        # Configurazione esempio
├── install.sh                 # Script di installazione
├── comfyui-launcher.spec      # File SPEC per RPM
└── build-rpm.sh              # Script automatizzato per build RPM

Preparazione dell'Ambiente RPM

1. Setup Directory RPM

Crea la struttura di directory standard per RPM:

# Crea la struttura RPM
rpmdev-setuptree

# Verifica la struttura creata
tree ~/rpmbuild/

La struttura creata sarà:

~/rpmbuild/
├── BUILD        # Directory di build temporanea
├── RPMS         # RPM binari finali
├── SOURCES      # Codice sorgente e patch
├── SPECS        # File SPEC
└── SRPMS        # RPM sorgente

2. Verifica Macros RPM

Controlla le macro RPM disponibili:

# Macro Python
rpm --eval %{python3}
rpm --eval %{python3_sitelib}
rpm --eval %{python3_sitearch}

# Macro directory standard
rpm --eval %{_bindir}
rpm --eval %{_datadir}
rpm --eval %{_docdir}

Creazione del File SPEC

Il file SPEC (comfyui-launcher.spec) è già stato creato con la seguente struttura:

Sezione Preamble

Name:           comfyui-launcher
Version:        1.0.0
Release:        1%{?dist}
Summary:        A modern GTK4 launcher for ComfyUI with conda environment support

License:        MIT
URL:            https://github.com/your-username/comfyui-launcher
Source0:        %{name}-%{version}.tar.gz

BuildArch:      noarch
BuildRequires:  python3-devel
BuildRequires:  python3-setuptools
# ... altre dipendenze

Sezioni Principali

  • %description: Descrizione dettagliata dell'applicazione
  • %prep: Preparazione del codice sorgente
  • %build: Processo di build
  • %install: Installazione nell'ambiente di build
  • %files: Lista dei file inclusi nel pacchetto
  • %changelog: Cronologia delle modifiche

Processo di Build Automatizzato

Utilizzo dello Script Automatizzato

Lo script build-rpm.sh automatizza tutto il processo:

# Esegui lo script di build
./build-rpm.sh

Lo script eseguirà automaticamente:

  1. Verifica prerequisiti: Controlla che tutti i pacchetti necessari siano installati
  2. Setup ambiente: Configura la struttura RPM
  3. Creazione archivio: Crea l'archivio sorgente tar.gz
  4. Validazione SPEC: Verifica il file SPEC con rpmlint
  5. Build SRPM: Crea il pacchetto sorgente
  6. Build RPM: Crea il pacchetto binario
  7. Verifica finale: Testa il pacchetto creato

Output dello Script

Lo script produrrà output colorato per ogni fase:

  • 🔵 [INFO]: Informazioni generali
  • 🟢 [SUCCESS]: Operazioni completate con successo
  • 🟡 [WARNING]: Avvisi non critici
  • 🔴 [ERROR]: Errori che bloccano il processo

Build Manuale Step-by-Step

Se preferisci eseguire il processo manualmente:

1. Preparazione Archivio Sorgente

# Crea directory temporanea
TEMP_DIR=$(mktemp -d)
PROJECT_NAME="comfyui-launcher-1.0.0"

# Copia file progetto
mkdir -p "$TEMP_DIR/$PROJECT_NAME"
cp main.py style.css LICENSE README*.md CHANGELOG.md \
   pyproject.toml requirements.txt config.example.json \
   "$TEMP_DIR/$PROJECT_NAME/"

# Crea archivio
cd "$TEMP_DIR"
tar -czf ~/rpmbuild/SOURCES/comfyui-launcher-1.0.0.tar.gz "$PROJECT_NAME"

# Pulisci
rm -rf "$TEMP_DIR"

2. Copia File SPEC

cp comfyui-launcher.spec ~/rpmbuild/SPECS/

3. Verifica File SPEC

cd ~/rpmbuild/SPECS
rpmlint comfyui-launcher.spec

4. Build SRPM

rpmbuild -bs comfyui-launcher.spec

5. Build RPM Binario

rpmbuild -bb comfyui-launcher.spec

Verifica e Test

1. Verifica con rpmlint

# Verifica SRPM
rpmlint ~/rpmbuild/SRPMS/comfyui-launcher-*.src.rpm

# Verifica RPM binario
rpmlint ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm

2. Ispezione Contenuto Pacchetto

# Lista file nel pacchetto
rpm -qlp ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm

# Informazioni pacchetto
rpm -qip ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm

# Dipendenze
rpm -qRp ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm

3. Test Installazione

# Test installazione (dry-run)
rpm -ivh --test ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm

# Installazione reale
sudo rpm -ivh ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm

# Oppure con DNF (raccomandato)
sudo dnf install ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm

Installazione e Distribuzione

Installazione Locale

# Metodo 1: DNF (gestisce dipendenze automaticamente)
sudo dnf install ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm

# Metodo 2: RPM diretto
sudo rpm -ivh ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm

Verifica Installazione

# Verifica pacchetto installato
rpm -qi comfyui-launcher

# Verifica file installati
rpm -ql comfyui-launcher

# Test esecuzione
comfyui-launcher --help

Distribuzione

Repository Locale

# Crea repository locale
mkdir -p ~/rpm-repo
cp ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm ~/rpm-repo/
createrepo ~/rpm-repo

# Aggiungi repository
sudo tee /etc/yum.repos.d/local-comfyui.repo << EOF
[local-comfyui]
name=Local ComfyUI Launcher Repository
baseurl=file://$HOME/rpm-repo
enabled=1
gpgcheck=0
EOF

Distribuzione Web

# Carica su server web
scp ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm user@server:/var/www/html/rpms/

# Su server
createrepo /var/www/html/rpms/

Troubleshooting

Problemi Comuni

1. Errore "BuildRequires not found"

# Soluzione: Installa dipendenze mancanti
sudo dnf install python3-devel python3-setuptools desktop-file-utils

2. Errore "File not found" durante %install

Verifica che tutti i file referenziati nel file SPEC esistano:

# Controlla file presenti nell'archivio
tar -tzf ~/rpmbuild/SOURCES/comfyui-launcher-1.0.0.tar.gz

3. Warning rpmlint su desktop file

# Valida manualmente desktop file
desktop-file-validate /path/to/comfyui-launcher.desktop

4. Errori di dipendenze GTK4

# Fedora
sudo dnf install gtk4-devel libadwaita-devel

# CentOS/RHEL (potrebbe richiedere repository aggiuntivi)
sudo dnf install gtk4-devel libadwaita-devel

Debug Build Fallito

# Controlla log build dettagliato
rpmbuild -bb --verbose comfyui-launcher.spec

# Controlla directory BUILD per errori
ls -la ~/rpmbuild/BUILD/

# Mantieni directory BUILD per debug
rpmbuild -bb --short-circuit comfyui-launcher.spec

Best Practices

1. Versionamento

  • Usa Semantic Versioning (MAJOR.MINOR.PATCH)
  • Incrementa Release per modifiche al packaging
  • Reset Release a 1 per nuove Version

2. Dipendenze

# Specifica versioni minime
Requires: python3 >= 3.9
Requires: gtk4 >= 4.6

# Usa suggests per dipendenze opzionali
Suggests: python3-psutil

3. File di Configurazione

# Proteggi file di configurazione
%config(noreplace) %{_sysconfdir}/%{name}/config.json

4. Documentazione

# Includi documentazione completa
%doc README.md README_EN.md CHANGELOG.md
%license LICENSE

5. Script Pre/Post Installazione

%post
# Aggiorna cache icone
touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :

%postun
if [ $1 -eq 0 ] ; then
    touch --no-create %{_datadir}/icons/hicolor &>/dev/null
    gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
fi

6. Testing

  • Testa sempre su un sistema pulito
  • Verifica installazione/disinstallazione
  • Controlla che l'applicazione si avvii correttamente
  • Testa su diverse distribuzioni RPM

7. Sicurezza

# Non eseguire come root durante build
%if "%{_build_vendor}" == "redhat"
%global _hardened_build 1
%endif

Conclusione

Hai ora una guida completa per creare pacchetti RPM per ComfyUI Launcher. Il processo automatizzato tramite build-rpm.sh semplifica notevolmente la creazione, mentre la guida manuale ti permette di comprendere ogni passaggio.

File Creati

Al termine del processo avrai:

  • SRPM: ~/rpmbuild/SRPMS/comfyui-launcher-1.0.0-1.*.src.rpm
  • RPM Binario: ~/rpmbuild/RPMS/noarch/comfyui-launcher-1.0.0-1.*.noarch.rpm

Prossimi Passi

  1. Test su Diverse Distribuzioni: Testa il pacchetto su Fedora, CentOS, RHEL
  2. Automazione CI/CD: Integra il build in pipeline automatizzate
  3. Repository Ufficiali: Considera la submission a repository ufficiali (EPEL, RPM Fusion)
  4. Signature: Implementa la firma GPG per i pacchetti
  5. Copr: Pubblica su Fedora Copr per distribuzione automatica

Risorse Aggiuntive


Happy RPM Building! 🚀