Browse Source
- Created README_RPM_SECTION.md to document RPM packaging process. - Added RPM_BUILD_GUIDE.md for detailed instructions on creating RPM packages. - Introduced build-rpm.sh script for automated RPM package creation. - Implemented build-deb.sh script for creating DEB packages. - Enhanced project structure to support both RPM and DEB packaging. - Included necessary files and configurations for both packaging formats.master 0.1
6 changed files with 1999 additions and 0 deletions
@ -0,0 +1,520 @@
|
||||
# Guida alla Creazione di Pacchetti DEB per ComfyUI Launcher |
||||
|
||||
## Indice |
||||
|
||||
1. [Introduzione](#introduzione) |
||||
2. [Prerequisiti](#prerequisiti) |
||||
3. [Concetti Fondamentali](#concetti-fondamentali) |
||||
4. [Struttura del Packaging Debian](#struttura-del-packaging-debian) |
||||
5. [File Essenziali](#file-essenziali) |
||||
6. [Processo di Build Automatizzato](#processo-di-build-automatizzato) |
||||
7. [Processo di Build Manuale](#processo-di-build-manuale) |
||||
8. [Verifica e Testing](#verifica-e-testing) |
||||
9. [Installazione e Distribuzione](#installazione-e-distribuzione) |
||||
10. [Troubleshooting](#troubleshooting) |
||||
11. [Best Practices](#best-practices) |
||||
12. [Risorse Aggiuntive](#risorse-aggiuntive) |
||||
|
||||
## Introduzione |
||||
|
||||
Questa guida spiega come creare pacchetti DEB per distribuzioni basate su Debian/Ubuntu. Un pacchetto DEB è un formato di archivio software utilizzato dal sistema di gestione pacchetti `dpkg` e dai suoi frontend come `apt`. |
||||
|
||||
### Vantaggi dei Pacchetti DEB |
||||
|
||||
- **Gestione dipendenze**: Risoluzione automatica delle dipendenze |
||||
- **Integrazione sistema**: Perfetta integrazione con il desktop environment |
||||
- **Facilità installazione**: Installazione con un doppio click o comando singolo |
||||
- **Aggiornamenti**: Aggiornamenti gestiti dal sistema |
||||
- **Rimozione pulita**: Disinstallazione completa senza residui |
||||
|
||||
## Prerequisiti |
||||
|
||||
### Pacchetti Sistema Richiesti |
||||
|
||||
```bash |
||||
# Installa i pacchetti necessari per il packaging |
||||
sudo apt-get update |
||||
sudo apt-get install \ |
||||
build-essential \ |
||||
devscripts \ |
||||
debhelper \ |
||||
dh-python \ |
||||
python3-dev \ |
||||
python3-setuptools \ |
||||
python3-pip \ |
||||
python3-wheel \ |
||||
lintian \ |
||||
fakeroot \ |
||||
dh-make |
||||
``` |
||||
|
||||
### Conoscenze Prerequisite |
||||
|
||||
- Conoscenza base della linea di comando Linux |
||||
- Comprensione dei sistemi di packaging Debian |
||||
- Familiarità con i Makefile (opzionale) |
||||
- Conoscenza di base di Python (per questo progetto specifico) |
||||
|
||||
## Concetti Fondamentali |
||||
|
||||
### Tipi di Pacchetti |
||||
|
||||
1. **Source Package**: Contiene il codice sorgente e i metadati |
||||
2. **Binary Package**: Contiene i file compilati pronti per l'installazione |
||||
|
||||
### Componenti Principali |
||||
|
||||
- **Upstream Tarball**: L'archivio sorgente originale (`*.orig.tar.gz`) |
||||
- **Debian Directory**: Contiene tutti i file di packaging (`debian/`) |
||||
- **Control Files**: Definiscono metadati e dipendenze |
||||
|
||||
### Naming Convention |
||||
|
||||
- Source package: `nome-pacchetto_versione.orig.tar.gz` |
||||
- Binary package: `nome-pacchetto_versione-revisione_architettura.deb` |
||||
|
||||
Esempio: |
||||
- `comfyui-launcher_1.0.0.orig.tar.gz` (sorgente) |
||||
- `comfyui-launcher_1.0.0-1_all.deb` (binario) |
||||
|
||||
## Struttura del Packaging Debian |
||||
|
||||
### Directory Structure |
||||
|
||||
``` |
||||
comfyui-launcher-1.0.0/ |
||||
├── main.py # File sorgente principale |
||||
├── style.css # File di stile |
||||
├── LICENSE # Licenza |
||||
├── README.md # Documentazione |
||||
├── pyproject.toml # Configurazione Python |
||||
└── debian/ # Directory di packaging |
||||
├── changelog # Log delle modifiche |
||||
├── control # Metadati e dipendenze |
||||
├── copyright # Informazioni copyright |
||||
├── rules # Script di build |
||||
├── compat # Livello compatibilità debhelper |
||||
├── install # File da installare |
||||
├── dirs # Directory da creare |
||||
├── *.desktop # File desktop |
||||
├── docs # Documentazione da includere |
||||
├── watch # Monitoraggio upstream |
||||
└── source/ |
||||
└── format # Formato source package |
||||
``` |
||||
|
||||
## File Essenziali |
||||
|
||||
### 1. debian/changelog |
||||
|
||||
Registra le modifiche al pacchetto: |
||||
|
||||
```bash |
||||
comfyui-launcher (1.0.0-1) unstable; urgency=medium |
||||
|
||||
* Initial release. |
||||
* Modern GTK4 launcher for ComfyUI with conda environment support |
||||
|
||||
-- Maintainer Name <email@example.com> Mon, 29 Sep 2025 17:00:00 +0200 |
||||
``` |
||||
|
||||
**Formato**: Molto rigido, rispetta esattamente la sintassi. |
||||
|
||||
### 2. debian/control |
||||
|
||||
Definisce metadati e dipendenze: |
||||
|
||||
```bash |
||||
Source: comfyui-launcher |
||||
Section: graphics |
||||
Priority: optional |
||||
Maintainer: ComfyUI Launcher Team <your-email@example.com> |
||||
Build-Depends: debhelper-compat (= 13), |
||||
dh-python, |
||||
python3-all, |
||||
python3-setuptools |
||||
Standards-Version: 4.6.2 |
||||
Homepage: https://github.com/your-username/comfyui-launcher |
||||
|
||||
Package: comfyui-launcher |
||||
Architecture: all |
||||
Depends: ${python3:Depends}, |
||||
${misc:Depends}, |
||||
python3-gi, |
||||
gir1.2-gtk-4.0, |
||||
gir1.2-adw-1 |
||||
Description: Modern GTK4 launcher for ComfyUI |
||||
Detailed description here... |
||||
``` |
||||
|
||||
**Campi importanti**: |
||||
- `Build-Depends`: Pacchetti necessari per compilare |
||||
- `Depends`: Pacchetti necessari per l'esecuzione |
||||
- `Architecture`: `all` (indipendente) o `any` (dipendente) |
||||
|
||||
### 3. debian/copyright |
||||
|
||||
Informazioni legali: |
||||
|
||||
```bash |
||||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ |
||||
Upstream-Name: comfyui-launcher |
||||
Source: https://github.com/your-username/comfyui-launcher |
||||
|
||||
Files: * |
||||
Copyright: 2025 ComfyUI Launcher Team |
||||
License: MIT |
||||
|
||||
License: MIT |
||||
[Testo completo della licenza MIT] |
||||
``` |
||||
|
||||
### 4. debian/rules |
||||
|
||||
Script di build (Makefile): |
||||
|
||||
```bash |
||||
#!/usr/bin/make -f |
||||
|
||||
%: |
||||
dh $@ --with python3 --buildsystem=pybuild |
||||
|
||||
override_dh_auto_install: |
||||
dh_auto_install |
||||
install -Dm755 main.py debian/comfyui-launcher/usr/bin/comfyui-launcher |
||||
``` |
||||
|
||||
**Nota**: Usa TAB per l'indentazione, non spazi! |
||||
|
||||
### 5. debian/source/format |
||||
|
||||
Specifica il formato del source package: |
||||
|
||||
```bash |
||||
3.0 (quilt) |
||||
``` |
||||
|
||||
## Processo di Build Automatizzato |
||||
|
||||
### Utilizzo dello Script |
||||
|
||||
```bash |
||||
# Rendi eseguibile lo script |
||||
chmod +x build-deb.sh |
||||
|
||||
# Esegui il build |
||||
./build-deb.sh |
||||
``` |
||||
|
||||
### Cosa fa lo Script |
||||
|
||||
1. **Verifica Prerequisites**: Controlla pacchetti installati |
||||
2. **Preparazione Environment**: Crea working directory in `/tmp/deb-build` |
||||
3. **Creazione Upstream Tarball**: Pacchetto sorgente originale |
||||
4. **Struttura Debian**: Crea tutti i file `debian/` |
||||
5. **Build Package**: Esegue `debuild` |
||||
6. **Verifica**: Testa con `lintian` |
||||
7. **Installazione Opzionale**: Propone installazione |
||||
|
||||
### Output dello Script |
||||
|
||||
```bash |
||||
[INFO] === Script di creazione pacchetto DEB per ComfyUI Launcher === |
||||
[SUCCESS] Tutti i prerequisiti sono soddisfatti |
||||
[SUCCESS] Ambiente preparato in /tmp/deb-build/comfyui-launcher-1.0.0 |
||||
[SUCCESS] Struttura debian/ creata |
||||
[SUCCESS] Pacchetto DEB costruito con successo |
||||
[SUCCESS] Pacchetto DEB verificato: ./comfyui-launcher_1.0.0-1_all.deb |
||||
``` |
||||
|
||||
## Processo di Build Manuale |
||||
|
||||
### Step 1: Preparazione Upstream Tarball |
||||
|
||||
```bash |
||||
# Crea il tarball originale |
||||
cd /tmp |
||||
mkdir deb-build && cd deb-build |
||||
|
||||
# Copia e pacchetta i sorgenti |
||||
cp -r /path/to/source comfyui-launcher-1.0.0 |
||||
tar -czf comfyui-launcher_1.0.0.orig.tar.gz comfyui-launcher-1.0.0/ |
||||
cd comfyui-launcher-1.0.0 |
||||
``` |
||||
|
||||
### Step 2: Inizializzazione con dh_make |
||||
|
||||
```bash |
||||
# Inizializza la struttura debian (opzionale) |
||||
dh_make -s -p comfyui-launcher_1.0.0 |
||||
|
||||
# Oppure crea manualmente la directory |
||||
mkdir debian |
||||
``` |
||||
|
||||
### Step 3: Creazione File Debian |
||||
|
||||
Crea manualmente tutti i file nella directory `debian/` come mostrato nella sezione precedente. |
||||
|
||||
### Step 4: Build del Pacchetto |
||||
|
||||
```bash |
||||
# Build senza firma (per sviluppo) |
||||
debuild -us -uc |
||||
|
||||
# Oppure con dpkg-buildpackage |
||||
dpkg-buildpackage -us -uc -b |
||||
``` |
||||
|
||||
### Step 5: Verifica |
||||
|
||||
```bash |
||||
# Controlla il pacchetto con lintian |
||||
lintian ../comfyui-launcher_*.deb |
||||
|
||||
# Verifica contenuto |
||||
dpkg-deb --info ../comfyui-launcher_*.deb |
||||
dpkg-deb --contents ../comfyui-launcher_*.deb |
||||
``` |
||||
|
||||
## Verifica e Testing |
||||
|
||||
### Controlli Automatici |
||||
|
||||
```bash |
||||
# Lintian - controlla conformità policy Debian |
||||
lintian package.deb |
||||
|
||||
# Verifica dipendenze |
||||
dpkg-deb --info package.deb |
||||
|
||||
# Lista file |
||||
dpkg-deb --contents package.deb |
||||
``` |
||||
|
||||
### Testing Installazione |
||||
|
||||
```bash |
||||
# Test installazione in ambiente pulito |
||||
sudo dpkg -i comfyui-launcher_*.deb |
||||
|
||||
# Verifica dipendenze mancanti |
||||
sudo apt-get install -f |
||||
|
||||
# Test funzionalità |
||||
comfyui-launcher --help |
||||
|
||||
# Test rimozione |
||||
sudo apt-get remove comfyui-launcher |
||||
``` |
||||
|
||||
### Testing con Containers |
||||
|
||||
```bash |
||||
# Test in container Docker |
||||
docker run -it ubuntu:latest |
||||
# Installa pacchetto e testa |
||||
``` |
||||
|
||||
## Installazione e Distribuzione |
||||
|
||||
### Installazione Locale |
||||
|
||||
```bash |
||||
# Metodo preferito (risolve dipendenze) |
||||
sudo apt install ./comfyui-launcher_1.0.0-1_all.deb |
||||
|
||||
# Metodo alternativo |
||||
sudo dpkg -i comfyui-launcher_1.0.0-1_all.deb |
||||
sudo apt-get install -f # risolve dipendenze |
||||
``` |
||||
|
||||
### Distribuzione |
||||
|
||||
#### 1. Repository Personale |
||||
|
||||
Crea un repository APT personale: |
||||
|
||||
```bash |
||||
# Installa reprepro |
||||
sudo apt install reprepro |
||||
|
||||
# Configura repository |
||||
mkdir -p ~/myrepo/conf |
||||
cat > ~/myrepo/conf/distributions << EOF |
||||
Codename: focal |
||||
Components: main |
||||
Architectures: all amd64 |
||||
EOF |
||||
|
||||
# Aggiungi pacchetto |
||||
reprepro -b ~/myrepo includedeb focal comfyui-launcher_*.deb |
||||
``` |
||||
|
||||
#### 2. PPA (Personal Package Archive) |
||||
|
||||
Per Ubuntu, puoi creare un PPA su Launchpad: |
||||
|
||||
1. Registrati su [Launchpad](https://launchpad.net) |
||||
2. Crea un PPA |
||||
3. Carica il source package firmato |
||||
|
||||
#### 3. GitHub Releases |
||||
|
||||
```bash |
||||
# Carica il .deb file come release asset |
||||
gh release create v1.0.0 comfyui-launcher_*.deb |
||||
``` |
||||
|
||||
## Troubleshooting |
||||
|
||||
### Errori Comuni |
||||
|
||||
#### Build Failures |
||||
|
||||
**Errore**: `dh_auto_install failed` |
||||
```bash |
||||
# Soluzione: Verifica debian/rules e override_dh_auto_install |
||||
``` |
||||
|
||||
**Errore**: `missing build dependencies` |
||||
```bash |
||||
# Installa dipendenze mancanti |
||||
sudo apt-get build-dep . |
||||
``` |
||||
|
||||
#### Lintian Warnings |
||||
|
||||
**Warning**: `binary-without-manpage` |
||||
```bash |
||||
# Aggiungi manpage o ignora per applicazioni GUI |
||||
``` |
||||
|
||||
**Error**: `copyright-file-missing` |
||||
```bash |
||||
# Verifica che debian/copyright esista e sia corretto |
||||
``` |
||||
|
||||
#### Dependency Issues |
||||
|
||||
**Errore**: `dependency not found` |
||||
```bash |
||||
# Verifica nomi pacchetti con |
||||
apt-cache search package-name |
||||
``` |
||||
|
||||
### Debug del Build |
||||
|
||||
```bash |
||||
# Build verbose |
||||
debuild -us -uc -- --verbose |
||||
|
||||
# Solo specifici step |
||||
dh binary --no-act # mostra cosa verrebbe eseguito |
||||
``` |
||||
|
||||
### Testing in Ambiente Pulito |
||||
|
||||
```bash |
||||
# Usa pbuilder per build in ambiente pulito |
||||
sudo pbuilder create |
||||
sudo pbuilder build package.dsc |
||||
``` |
||||
|
||||
## Best Practices |
||||
|
||||
### Naming e Versioning |
||||
|
||||
- **Nome pacchetto**: lowercase, dash-separated |
||||
- **Versioning**: `upstream-version-debian-revision` |
||||
- **Incrementa debian revision** per bugfix senza cambio upstream |
||||
|
||||
### Dependencies |
||||
|
||||
- **Build-Depends**: Solo quello strettamente necessario |
||||
- **Depends**: Usa `${misc:Depends}` e `${shlibs:Depends}` |
||||
- **Recommends**: Per feature opzionali |
||||
- **Suggests**: Per integrazioni facoltative |
||||
|
||||
### File Organization |
||||
|
||||
- **Separa logica**: Un task per file debian |
||||
- **Documenta**: Commenta scelte non ovvie in debian/README.source |
||||
- **Testa**: Sempre testare installazione/rimozione |
||||
|
||||
### Security |
||||
|
||||
- **Firme**: Firma sempre i pacchetti per distribuzione |
||||
- **Permissions**: File eseguibili solo dove necessario |
||||
- **Paths**: Usa percorsi standard FHS |
||||
|
||||
### Performance |
||||
|
||||
- **Architecture**: Usa `all` se possibile per ridurre build time |
||||
- **Parallel Build**: Abilita build paralleli con `dh --parallel` |
||||
|
||||
## Risorse Aggiuntive |
||||
|
||||
### Documentazione Ufficiale |
||||
|
||||
- [Debian New Maintainer's Guide](https://www.debian.org/doc/manuals/maint-guide/) |
||||
- [Debian Policy Manual](https://www.debian.org/doc/debian-policy/) |
||||
- [Ubuntu Packaging Guide](https://packaging.ubuntu.com/) |
||||
|
||||
### Strumenti Utili |
||||
|
||||
- **debhelper**: Sistema di build moderno |
||||
- **dh-make**: Template generator |
||||
- **lintian**: Policy checker |
||||
- **piuparts**: Installation/removal tester |
||||
- **pbuilder**: Clean build environment |
||||
|
||||
### Community |
||||
|
||||
- **IRC**: `#debian-mentors` su OFTC |
||||
- **Forum**: [Debian Forums](https://forums.debian.net/) |
||||
- **Mailing List**: debian-mentors@lists.debian.org |
||||
|
||||
### Reference Files |
||||
|
||||
Per questo progetto specifico, i file di esempio sono disponibili in: |
||||
- `build-deb.sh`: Script automatizzato |
||||
- `debian/`: Directory con tutti i file template |
||||
|
||||
## Appendice: Comandi Rapidi |
||||
|
||||
### Build Rapido |
||||
|
||||
```bash |
||||
# Build completo |
||||
./build-deb.sh |
||||
|
||||
# Solo build (senza setup) |
||||
debuild -us -uc |
||||
``` |
||||
|
||||
### Verifica Rapida |
||||
|
||||
```bash |
||||
# Check policy compliance |
||||
lintian package.deb |
||||
|
||||
# Test installation |
||||
sudo apt install ./package.deb |
||||
``` |
||||
|
||||
### Cleanup |
||||
|
||||
```bash |
||||
# Pulisci build artifacts |
||||
debian/rules clean |
||||
|
||||
# Reset working directory |
||||
git clean -fdx # se in repo git |
||||
``` |
||||
|
||||
--- |
||||
|
||||
**Autore**: ComfyUI Launcher Team |
||||
**Data**: 29 Settembre 2025 |
||||
**Versione Guida**: 1.0.0 |
||||
@ -0,0 +1,110 @@
|
||||
# Aggiornamento README per includere informazioni RPM |
||||
|
||||
## Packaging RPM |
||||
|
||||
### Creazione Pacchetto RPM |
||||
|
||||
ComfyUI Launcher può essere facilmente pacchettizzato come RPM per distribuzione su Fedora, CentOS, RHEL e altre distribuzioni basate su RPM. |
||||
|
||||
#### Prerequisiti per Build RPM |
||||
|
||||
```bash |
||||
# Fedora |
||||
sudo dnf install rpm-build rpm-devel rpmlint rpmdevtools python3-devel \ |
||||
python3-setuptools desktop-file-utils libappstream-glib |
||||
|
||||
# CentOS/RHEL |
||||
sudo yum install epel-release |
||||
sudo yum install rpm-build rpm-devel rpmlint rpmdevtools python3-devel \ |
||||
python3-setuptools desktop-file-utils libappstream-glib |
||||
``` |
||||
|
||||
#### Build Automatizzato |
||||
|
||||
Usa lo script automatizzato per creare il pacchetto RPM: |
||||
|
||||
```bash |
||||
# Rendi eseguibile lo script |
||||
chmod +x build-rpm.sh |
||||
|
||||
# Esegui la build |
||||
./build-rpm.sh |
||||
``` |
||||
|
||||
Lo script eseguirà automaticamente: |
||||
- Verifica prerequisiti |
||||
- Setup ambiente RPM |
||||
- Creazione archivio sorgente |
||||
- Build pacchetto SRPM e RPM |
||||
- Verifica finale del pacchetto |
||||
|
||||
#### Build Manuale |
||||
|
||||
Per un controllo maggiore del processo: |
||||
|
||||
```bash |
||||
# Setup ambiente RPM |
||||
rpmdev-setuptree |
||||
|
||||
# Copia file spec |
||||
cp comfyui-launcher.spec ~/rpmbuild/SPECS/ |
||||
|
||||
# Crea archivio sorgente |
||||
tar -czf ~/rpmbuild/SOURCES/comfyui-launcher-1.0.0.tar.gz \ |
||||
--transform 's,^,comfyui-launcher-1.0.0/,' \ |
||||
main.py style.css LICENSE README*.md CHANGELOG.md \ |
||||
pyproject.toml requirements.txt config.example.json |
||||
|
||||
# Build RPM |
||||
cd ~/rpmbuild/SPECS |
||||
rpmbuild -ba comfyui-launcher.spec |
||||
``` |
||||
|
||||
#### Installazione RPM |
||||
|
||||
```bash |
||||
# Installazione con gestione dipendenze |
||||
sudo dnf install ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm |
||||
|
||||
# Oppure installazione diretta |
||||
sudo rpm -ivh ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm |
||||
``` |
||||
|
||||
#### Verifica Pacchetto |
||||
|
||||
```bash |
||||
# Verifica con rpmlint |
||||
rpmlint ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm |
||||
|
||||
# Informazioni pacchetto |
||||
rpm -qip ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm |
||||
|
||||
# Lista file installati |
||||
rpm -qlp ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm |
||||
``` |
||||
|
||||
### File di Packaging Inclusi |
||||
|
||||
- `comfyui-launcher.spec` - File specifica RPM |
||||
- `build-rpm.sh` - Script automatizzato per build |
||||
- `RPM_BUILD_GUIDE.md` - Guida dettagliata per build RPM |
||||
|
||||
### Distribuzione |
||||
|
||||
Il pacchetto RPM risultante include: |
||||
- Eseguibile principale (`/usr/bin/comfyui-launcher`) |
||||
- File desktop per menu applicazioni |
||||
- Icona applicazione |
||||
- Documentazione e file di esempio |
||||
- Configurazione stili CSS |
||||
|
||||
### Repository |
||||
|
||||
Per distribuzioni automatiche, considera l'utilizzo di: |
||||
- [Fedora Copr](https://copr.fedorainfracloud.org/) per distribuzione automatica |
||||
- Repository locali per installazioni interne |
||||
- [EPEL](https://fedoraproject.org/wiki/EPEL) per CentOS/RHEL |
||||
|
||||
--- |
||||
|
||||
Per la guida completa al packaging RPM, consulta [RPM_BUILD_GUIDE.md](RPM_BUILD_GUIDE.md). |
||||
@ -0,0 +1,458 @@
|
||||
# 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](#prerequisiti) |
||||
2. [Struttura del Progetto](#struttura-del-progetto) |
||||
3. [Preparazione dell'Ambiente RPM](#preparazione-dellambiente-rpm) |
||||
4. [Creazione del File SPEC](#creazione-del-file-spec) |
||||
5. [Processo di Build Automatizzato](#processo-di-build-automatizzato) |
||||
6. [Build Manuale Step-by-Step](#build-manuale-step-by-step) |
||||
7. [Verifica e Test](#verifica-e-test) |
||||
8. [Installazione e Distribuzione](#installazione-e-distribuzione) |
||||
9. [Troubleshooting](#troubleshooting) |
||||
10. [Best Practices](#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: |
||||
```bash |
||||
# 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: |
||||
```bash |
||||
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: |
||||
|
||||
```bash |
||||
# 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: |
||||
|
||||
```bash |
||||
# 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 |
||||
```spec |
||||
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: |
||||
|
||||
```bash |
||||
# 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 |
||||
|
||||
```bash |
||||
# 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 |
||||
|
||||
```bash |
||||
cp comfyui-launcher.spec ~/rpmbuild/SPECS/ |
||||
``` |
||||
|
||||
### 3. Verifica File SPEC |
||||
|
||||
```bash |
||||
cd ~/rpmbuild/SPECS |
||||
rpmlint comfyui-launcher.spec |
||||
``` |
||||
|
||||
### 4. Build SRPM |
||||
|
||||
```bash |
||||
rpmbuild -bs comfyui-launcher.spec |
||||
``` |
||||
|
||||
### 5. Build RPM Binario |
||||
|
||||
```bash |
||||
rpmbuild -bb comfyui-launcher.spec |
||||
``` |
||||
|
||||
## Verifica e Test |
||||
|
||||
### 1. Verifica con rpmlint |
||||
|
||||
```bash |
||||
# Verifica SRPM |
||||
rpmlint ~/rpmbuild/SRPMS/comfyui-launcher-*.src.rpm |
||||
|
||||
# Verifica RPM binario |
||||
rpmlint ~/rpmbuild/RPMS/noarch/comfyui-launcher-*.rpm |
||||
``` |
||||
|
||||
### 2. Ispezione Contenuto Pacchetto |
||||
|
||||
```bash |
||||
# 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 |
||||
|
||||
```bash |
||||
# 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 |
||||
|
||||
```bash |
||||
# 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 |
||||
|
||||
```bash |
||||
# Verifica pacchetto installato |
||||
rpm -qi comfyui-launcher |
||||
|
||||
# Verifica file installati |
||||
rpm -ql comfyui-launcher |
||||
|
||||
# Test esecuzione |
||||
comfyui-launcher --help |
||||
``` |
||||
|
||||
### Distribuzione |
||||
|
||||
#### Repository Locale |
||||
|
||||
```bash |
||||
# 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 |
||||
|
||||
```bash |
||||
# 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" |
||||
|
||||
```bash |
||||
# 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: |
||||
```bash |
||||
# Controlla file presenti nell'archivio |
||||
tar -tzf ~/rpmbuild/SOURCES/comfyui-launcher-1.0.0.tar.gz |
||||
``` |
||||
|
||||
#### 3. Warning rpmlint su desktop file |
||||
|
||||
```bash |
||||
# Valida manualmente desktop file |
||||
desktop-file-validate /path/to/comfyui-launcher.desktop |
||||
``` |
||||
|
||||
#### 4. Errori di dipendenze GTK4 |
||||
|
||||
```bash |
||||
# Fedora |
||||
sudo dnf install gtk4-devel libadwaita-devel |
||||
|
||||
# CentOS/RHEL (potrebbe richiedere repository aggiuntivi) |
||||
sudo dnf install gtk4-devel libadwaita-devel |
||||
``` |
||||
|
||||
### Debug Build Fallito |
||||
|
||||
```bash |
||||
# 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](https://semver.org/) (MAJOR.MINOR.PATCH) |
||||
- Incrementa `Release` per modifiche al packaging |
||||
- Reset `Release` a 1 per nuove `Version` |
||||
|
||||
### 2. Dipendenze |
||||
|
||||
```spec |
||||
# Specifica versioni minime |
||||
Requires: python3 >= 3.9 |
||||
Requires: gtk4 >= 4.6 |
||||
|
||||
# Usa suggests per dipendenze opzionali |
||||
Suggests: python3-psutil |
||||
``` |
||||
|
||||
### 3. File di Configurazione |
||||
|
||||
```spec |
||||
# Proteggi file di configurazione |
||||
%config(noreplace) %{_sysconfdir}/%{name}/config.json |
||||
``` |
||||
|
||||
### 4. Documentazione |
||||
|
||||
```spec |
||||
# Includi documentazione completa |
||||
%doc README.md README_EN.md CHANGELOG.md |
||||
%license LICENSE |
||||
``` |
||||
|
||||
### 5. Script Pre/Post Installazione |
||||
|
||||
```spec |
||||
%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 |
||||
|
||||
```spec |
||||
# 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](https://copr.fedorainfracloud.org/) per distribuzione automatica |
||||
|
||||
### Risorse Aggiuntive |
||||
|
||||
- [Fedora Packaging Guidelines](https://docs.fedoraproject.org/en-US/packaging-guidelines/) |
||||
- [RPM Packaging Guide](https://rpm-packaging-guide.github.io/) |
||||
- [Python Packaging Guidelines](https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/) |
||||
- [Desktop Application Guidelines](https://docs.fedoraproject.org/en-US/packaging-guidelines/#_desktop_applications) |
||||
|
||||
--- |
||||
|
||||
**Happy RPM Building! 🚀** |
||||
@ -0,0 +1,479 @@
|
||||
#!/bin/bash |
||||
# Script per creare il pacchetto DEB di ComfyUI Launcher |
||||
|
||||
set -e |
||||
|
||||
# Colori per output |
||||
RED='\033[0;31m' |
||||
GREEN='\033[0;32m' |
||||
YELLOW='\033[1;33m' |
||||
BLUE='\033[0;34m' |
||||
NC='\033[0m' # No Color |
||||
|
||||
# Funzione per stampare messaggi colorati |
||||
print_message() { |
||||
echo -e "${BLUE}[INFO]${NC} $1" |
||||
} |
||||
|
||||
print_success() { |
||||
echo -e "${GREEN}[SUCCESS]${NC} $1" |
||||
} |
||||
|
||||
print_warning() { |
||||
echo -e "${YELLOW}[WARNING]${NC} $1" |
||||
} |
||||
|
||||
print_error() { |
||||
echo -e "${RED}[ERROR]${NC} $1" |
||||
} |
||||
|
||||
# Verifica prerequisiti |
||||
check_prerequisites() { |
||||
print_message "Verifica prerequisiti per la creazione del pacchetto DEB..." |
||||
|
||||
# Lista dei pacchetti necessari |
||||
local packages=( |
||||
"build-essential" |
||||
"devscripts" |
||||
"debhelper" |
||||
"dh-python" |
||||
"python3-dev" |
||||
"python3-setuptools" |
||||
"python3-pip" |
||||
"lintian" |
||||
) |
||||
|
||||
local missing_packages=() |
||||
|
||||
for package in "${packages[@]}"; do |
||||
if ! dpkg -l "$package" &>/dev/null; then |
||||
missing_packages+=("$package") |
||||
fi |
||||
done |
||||
|
||||
if [ ${#missing_packages[@]} -gt 0 ]; then |
||||
print_error "I seguenti pacchetti sono mancanti:" |
||||
printf '%s\n' "${missing_packages[@]}" |
||||
print_message "Installa i pacchetti mancanti con:" |
||||
echo "sudo apt-get install ${missing_packages[*]}" |
||||
exit 1 |
||||
fi |
||||
|
||||
print_success "Tutti i prerequisiti sono soddisfatti" |
||||
} |
||||
|
||||
# Prepara l'ambiente per il packaging |
||||
prepare_environment() { |
||||
print_message "Preparazione dell'ambiente per il packaging DEB..." |
||||
|
||||
local project_name="comfyui-launcher" |
||||
local version="1.0.0" |
||||
local upstream_version="1.0.0" |
||||
local debian_version="1" |
||||
|
||||
# Nomi dei file |
||||
local orig_tarball="${project_name}_${upstream_version}.orig.tar.gz" |
||||
local package_dir="${project_name}-${upstream_version}" |
||||
|
||||
# Pulizia ambiente precedente |
||||
rm -rf "/tmp/deb-build" |
||||
mkdir -p "/tmp/deb-build" |
||||
cd "/tmp/deb-build" |
||||
|
||||
# Crea l'archivio originale (upstream tarball) |
||||
print_message "Creazione del tarball upstream..." |
||||
|
||||
local temp_dir=$(mktemp -d) |
||||
local upstream_dir="$temp_dir/$package_dir" |
||||
|
||||
# Copia i file del progetto |
||||
mkdir -p "$upstream_dir" |
||||
|
||||
# File principali |
||||
cp /home/enne2/Development/gtk-app/main.py "$upstream_dir/" |
||||
cp /home/enne2/Development/gtk-app/style.css "$upstream_dir/" |
||||
cp /home/enne2/Development/gtk-app/LICENSE "$upstream_dir/" |
||||
cp /home/enne2/Development/gtk-app/README.md "$upstream_dir/" |
||||
cp /home/enne2/Development/gtk-app/README_EN.md "$upstream_dir/" |
||||
cp /home/enne2/Development/gtk-app/CHANGELOG.md "$upstream_dir/" |
||||
cp /home/enne2/Development/gtk-app/pyproject.toml "$upstream_dir/" |
||||
cp /home/enne2/Development/gtk-app/requirements.txt "$upstream_dir/" |
||||
cp /home/enne2/Development/gtk-app/config.example.json "$upstream_dir/" |
||||
|
||||
# Crea il tarball originale |
||||
(cd "$temp_dir" && tar -czf "/tmp/deb-build/$orig_tarball" "$package_dir") |
||||
|
||||
# Estrai per lavorarci |
||||
tar -xzf "$orig_tarball" |
||||
cd "$package_dir" |
||||
|
||||
# Pulisci temp |
||||
rm -rf "$temp_dir" |
||||
|
||||
print_success "Ambiente preparato in /tmp/deb-build/$package_dir" |
||||
} |
||||
|
||||
# Crea la struttura debian/ |
||||
create_debian_structure() { |
||||
print_message "Creazione della struttura debian/..." |
||||
|
||||
mkdir -p debian/source |
||||
|
||||
# Crea tutti i file debian necessari |
||||
create_debian_changelog |
||||
create_debian_control |
||||
create_debian_copyright |
||||
create_debian_rules |
||||
create_debian_compat |
||||
create_debian_install |
||||
create_debian_dirs |
||||
create_debian_desktop |
||||
create_debian_source_format |
||||
create_debian_watch |
||||
create_debian_docs |
||||
|
||||
print_success "Struttura debian/ creata" |
||||
} |
||||
|
||||
# Crea debian/changelog |
||||
create_debian_changelog() { |
||||
cat > debian/changelog << 'EOF' |
||||
comfyui-launcher (1.0.0-1) unstable; urgency=medium |
||||
|
||||
* Initial release. |
||||
* Modern GTK4 launcher for ComfyUI with conda environment support |
||||
* Features: |
||||
- Automatic conda environment detection |
||||
- Real-time ComfyUI process monitoring |
||||
- Modern GTK4/libadwaita interface |
||||
- Configuration management |
||||
- Installation automation |
||||
|
||||
-- ComfyUI Launcher Team <your-email@example.com> Mon, 29 Sep 2025 17:00:00 +0200 |
||||
EOF |
||||
} |
||||
|
||||
# Crea debian/control |
||||
create_debian_control() { |
||||
cat > debian/control << 'EOF' |
||||
Source: comfyui-launcher |
||||
Section: graphics |
||||
Priority: optional |
||||
Maintainer: ComfyUI Launcher Team <your-email@example.com> |
||||
Build-Depends: debhelper-compat (= 13), |
||||
dh-python, |
||||
python3-all, |
||||
python3-setuptools, |
||||
python3-dev, |
||||
python3-pip, |
||||
python3-wheel |
||||
Standards-Version: 4.6.2 |
||||
Homepage: https://github.com/your-username/comfyui-launcher |
||||
Vcs-Git: https://github.com/your-username/comfyui-launcher.git |
||||
Vcs-Browser: https://github.com/your-username/comfyui-launcher |
||||
Rules-Requires-Root: no |
||||
|
||||
Package: comfyui-launcher |
||||
Architecture: all |
||||
Depends: ${python3:Depends}, |
||||
${misc:Depends}, |
||||
python3-gi, |
||||
python3-gi-cairo, |
||||
gir1.2-gtk-4.0, |
||||
gir1.2-adw-1, |
||||
libgtk-4-1, |
||||
libadwaita-1-0, |
||||
conda | miniconda3 |
||||
Recommends: python3-psutil |
||||
Suggests: git |
||||
Description: Modern GTK4 launcher for ComfyUI with conda environment support |
||||
ComfyUI Launcher is a modern GTK4 application that provides an easy-to-use |
||||
interface for launching ComfyUI with conda environment support. |
||||
. |
||||
Features: |
||||
* Automatic conda environment detection |
||||
* Real-time ComfyUI process monitoring |
||||
* Modern GTK4/libadwaita interface |
||||
* Configuration management |
||||
* Installation automation |
||||
. |
||||
The launcher simplifies the process of running ComfyUI by automatically |
||||
detecting available conda environments and providing a user-friendly |
||||
interface for launching and monitoring ComfyUI instances. |
||||
EOF |
||||
} |
||||
|
||||
# Crea debian/copyright |
||||
create_debian_copyright() { |
||||
cat > debian/copyright << 'EOF' |
||||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ |
||||
Upstream-Name: comfyui-launcher |
||||
Source: https://github.com/your-username/comfyui-launcher |
||||
|
||||
Files: * |
||||
Copyright: 2025 ComfyUI Launcher Team <your-email@example.com> |
||||
License: MIT |
||||
|
||||
Files: debian/* |
||||
Copyright: 2025 ComfyUI Launcher Team <your-email@example.com> |
||||
License: MIT |
||||
|
||||
License: MIT |
||||
Permission is hereby granted, free of charge, to any person obtaining a |
||||
copy of this software and associated documentation files (the "Software"), |
||||
to deal in the Software without restriction, including without limitation |
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||
and/or sell copies of the Software, and to permit persons to whom the |
||||
Software is furnished to do so, subject to the following conditions: |
||||
. |
||||
The above copyright notice and this permission notice shall be included |
||||
in all copies or substantial portions of the Software. |
||||
. |
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||||
EOF |
||||
} |
||||
|
||||
# Crea debian/rules |
||||
create_debian_rules() { |
||||
cat > debian/rules << 'EOF' |
||||
#!/usr/bin/make -f |
||||
|
||||
export DH_VERBOSE=1 |
||||
export PYBUILD_NAME=comfyui-launcher |
||||
|
||||
%: |
||||
dh $@ --with python3 --buildsystem=pybuild |
||||
|
||||
override_dh_auto_install: |
||||
dh_auto_install |
||||
# Installa l'eseguibile principale |
||||
install -Dm755 main.py debian/comfyui-launcher/usr/bin/comfyui-launcher |
||||
# Installa i file di supporto |
||||
install -Dm644 style.css debian/comfyui-launcher/usr/share/comfyui-launcher/style.css |
||||
install -Dm644 config.example.json debian/comfyui-launcher/usr/share/comfyui-launcher/config.example.json |
||||
|
||||
override_dh_installdesktop: |
||||
dh_installdesktop |
||||
# Valida il file desktop |
||||
desktop-file-validate debian/comfyui-launcher/usr/share/applications/comfyui-launcher.desktop |
||||
|
||||
override_dh_auto_test: |
||||
# Salta i test per ora |
||||
EOF |
||||
chmod +x debian/rules |
||||
} |
||||
|
||||
# Crea debian/compat (compatibilità con versioni precedenti) |
||||
create_debian_compat() { |
||||
echo "13" > debian/compat |
||||
} |
||||
|
||||
# Crea debian/install |
||||
create_debian_install() { |
||||
cat > debian/install << 'EOF' |
||||
README.md usr/share/doc/comfyui-launcher/ |
||||
README_EN.md usr/share/doc/comfyui-launcher/ |
||||
CHANGELOG.md usr/share/doc/comfyui-launcher/ |
||||
EOF |
||||
} |
||||
|
||||
# Crea debian/dirs |
||||
create_debian_dirs() { |
||||
cat > debian/dirs << 'EOF' |
||||
usr/bin |
||||
usr/share/applications |
||||
usr/share/comfyui-launcher |
||||
usr/share/doc/comfyui-launcher |
||||
usr/share/icons/hicolor/scalable/apps |
||||
EOF |
||||
} |
||||
|
||||
# Crea il file desktop |
||||
create_debian_desktop() { |
||||
mkdir -p debian/ |
||||
cat > debian/comfyui-launcher.desktop << 'EOF' |
||||
[Desktop Entry] |
||||
Name=ComfyUI Launcher |
||||
Comment=Modern GTK4 launcher for ComfyUI with conda environment support |
||||
Comment[it]=Launcher GTK4 moderno per ComfyUI con supporto per ambienti conda |
||||
Exec=comfyui-launcher |
||||
Icon=comfyui-launcher |
||||
Terminal=false |
||||
Type=Application |
||||
Categories=Graphics;Photography; |
||||
Keywords=ComfyUI;AI;MachineLearning;ImageGeneration;StableDiffusion; |
||||
MimeType=image/png;image/jpeg; |
||||
StartupNotify=true |
||||
EOF |
||||
} |
||||
|
||||
# Crea debian/source/format |
||||
create_debian_source_format() { |
||||
echo "3.0 (quilt)" > debian/source/format |
||||
} |
||||
|
||||
# Crea debian/watch (per monitorare nuove versioni upstream) |
||||
create_debian_watch() { |
||||
cat > debian/watch << 'EOF' |
||||
version=4 |
||||
opts="uversionmangle=s/-/./g" \ |
||||
https://github.com/your-username/comfyui-launcher/tags \ |
||||
.*/v?(\d\S*)\.tar\.gz |
||||
EOF |
||||
} |
||||
|
||||
# Crea debian/docs |
||||
create_debian_docs() { |
||||
cat > debian/docs << 'EOF' |
||||
README.md |
||||
README_EN.md |
||||
CHANGELOG.md |
||||
EOF |
||||
} |
||||
|
||||
# Crea l'icona SVG |
||||
create_icon() { |
||||
print_message "Creazione dell'icona SVG..." |
||||
|
||||
mkdir -p debian/ |
||||
cat > debian/comfyui-launcher.svg << 'EOF' |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> |
||||
<defs> |
||||
<linearGradient id="gradient" x1="0%" y1="0%" x2="100%" y2="100%"> |
||||
<stop offset="0%" style="stop-color:#3584e4;stop-opacity:1" /> |
||||
<stop offset="100%" style="stop-color:#1c71d8;stop-opacity:1" /> |
||||
</linearGradient> |
||||
</defs> |
||||
|
||||
<!-- Sfondo principale --> |
||||
<rect width="128" height="128" rx="16" ry="16" fill="url(#gradient)"/> |
||||
|
||||
<!-- Icona ComfyUI stylizzata --> |
||||
<g transform="translate(16,16)"> |
||||
<!-- Elemento centrale --> |
||||
<circle cx="48" cy="48" r="32" fill="#ffffff" opacity="0.9"/> |
||||
<circle cx="48" cy="48" r="24" fill="url(#gradient)"/> |
||||
|
||||
<!-- Nodi connessi --> |
||||
<circle cx="16" cy="24" r="8" fill="#ffffff" opacity="0.8"/> |
||||
<circle cx="80" cy="24" r="8" fill="#ffffff" opacity="0.8"/> |
||||
<circle cx="16" cy="72" r="8" fill="#ffffff" opacity="0.8"/> |
||||
<circle cx="80" cy="72" r="8" fill="#ffffff" opacity="0.8"/> |
||||
|
||||
<!-- Connessioni --> |
||||
<line x1="24" y1="24" x2="40" y2="40" stroke="#ffffff" stroke-width="3" opacity="0.7"/> |
||||
<line x1="72" y1="24" x2="56" y2="40" stroke="#ffffff" stroke-width="3" opacity="0.7"/> |
||||
<line x1="24" y1="72" x2="40" y2="56" stroke="#ffffff" stroke-width="3" opacity="0.7"/> |
||||
<line x1="72" y1="72" x2="56" y2="56" stroke="#ffffff" stroke-width="3" opacity="0.7"/> |
||||
</g> |
||||
</svg> |
||||
EOF |
||||
} |
||||
|
||||
# Costruzione del pacchetto |
||||
build_package() { |
||||
print_message "Costruzione del pacchetto DEB..." |
||||
|
||||
# Verifica dei file debian prima del build |
||||
print_message "Verifica dei file debian con lintian..." |
||||
if command -v lintian &> /dev/null; then |
||||
lintian --check debian/control || print_warning "Alcuni warning in debian/control" |
||||
fi |
||||
|
||||
# Build del pacchetto |
||||
print_message "Avvio del build con debuild..." |
||||
|
||||
if debuild -us -uc -b; then |
||||
print_success "Pacchetto DEB costruito con successo" |
||||
else |
||||
print_error "Errore nella costruzione del pacchetto DEB" |
||||
exit 1 |
||||
fi |
||||
} |
||||
|
||||
# Verifica del pacchetto |
||||
verify_package() { |
||||
print_message "Verifica del pacchetto finale..." |
||||
|
||||
cd /tmp/deb-build |
||||
|
||||
local deb_file=$(find . -name "comfyui-launcher_*.deb" -type f | head -1) |
||||
|
||||
if [ -n "$deb_file" ]; then |
||||
print_message "Verifica con lintian..." |
||||
lintian "$deb_file" || print_warning "Alcuni warning trovati, ma il pacchetto è utilizzabile" |
||||
|
||||
print_message "Informazioni sul pacchetto:" |
||||
dpkg-deb --info "$deb_file" |
||||
|
||||
print_message "Lista dei file nel pacchetto:" |
||||
dpkg-deb --contents "$deb_file" |
||||
|
||||
print_success "Pacchetto DEB verificato: $deb_file" |
||||
|
||||
# Copia il pacchetto nella directory originale |
||||
cp "$deb_file" /home/enne2/Development/gtk-app/ |
||||
print_success "Pacchetto copiato in: /home/enne2/Development/gtk-app/$(basename "$deb_file")" |
||||
else |
||||
print_error "Pacchetto DEB non trovato" |
||||
exit 1 |
||||
fi |
||||
} |
||||
|
||||
# Funzione di installazione del pacchetto |
||||
install_package() { |
||||
local deb_file=$(find /home/enne2/Development/gtk-app -name "comfyui-launcher_*.deb" -type f | head -1) |
||||
|
||||
if [ -n "$deb_file" ]; then |
||||
print_message "Per installare il pacchetto, esegui:" |
||||
echo "sudo dpkg -i '$deb_file'" |
||||
echo "sudo apt-get install -f # per risolvere eventuali dipendenze" |
||||
echo "oppure:" |
||||
echo "sudo apt install '$deb_file'" |
||||
|
||||
read -p "Vuoi installare il pacchetto ora? (y/n): " -n 1 -r |
||||
echo |
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then |
||||
if sudo apt install "$deb_file"; then |
||||
print_success "Pacchetto installato con successo" |
||||
else |
||||
print_warning "Installazione fallita, prova con:" |
||||
echo "sudo dpkg -i '$deb_file'" |
||||
echo "sudo apt-get install -f" |
||||
fi |
||||
fi |
||||
fi |
||||
} |
||||
|
||||
# Funzione principale |
||||
main() { |
||||
print_message "=== Script di creazione pacchetto DEB per ComfyUI Launcher ===" |
||||
print_message "Questo script creerà un pacchetto DEB per ComfyUI Launcher" |
||||
echo |
||||
|
||||
# Esegui tutti i passi |
||||
check_prerequisites |
||||
prepare_environment |
||||
create_debian_structure |
||||
create_icon |
||||
build_package |
||||
verify_package |
||||
|
||||
echo |
||||
print_success "=== Pacchetto DEB creato con successo! ===" |
||||
echo |
||||
|
||||
install_package |
||||
} |
||||
|
||||
# Esegui lo script |
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then |
||||
main "$@" |
||||
fi |
||||
@ -0,0 +1,253 @@
|
||||
#!/bin/bash |
||||
# Script per creare il pacchetto RPM di ComfyUI Launcher |
||||
|
||||
set -e |
||||
|
||||
# Colori per output |
||||
RED='\033[0;31m' |
||||
GREEN='\033[0;32m' |
||||
YELLOW='\033[1;33m' |
||||
BLUE='\033[0;34m' |
||||
NC='\033[0m' # No Color |
||||
|
||||
# Funzione per stampare messaggi colorati |
||||
print_message() { |
||||
echo -e "${BLUE}[INFO]${NC} $1" |
||||
} |
||||
|
||||
print_success() { |
||||
echo -e "${GREEN}[SUCCESS]${NC} $1" |
||||
} |
||||
|
||||
print_warning() { |
||||
echo -e "${YELLOW}[WARNING]${NC} $1" |
||||
} |
||||
|
||||
print_error() { |
||||
echo -e "${RED}[ERROR]${NC} $1" |
||||
} |
||||
|
||||
# Verifica prerequisiti |
||||
check_prerequisites() { |
||||
print_message "Verifica prerequisiti per la creazione del pacchetto RPM..." |
||||
|
||||
# Lista dei pacchetti necessari |
||||
local packages=( |
||||
"rpm-build" |
||||
"rpm-devel" |
||||
"rpmlint" |
||||
"rpmdevtools" |
||||
"python3-devel" |
||||
"python3-setuptools" |
||||
"desktop-file-utils" |
||||
"libappstream-glib" |
||||
) |
||||
|
||||
local missing_packages=() |
||||
|
||||
for package in "${packages[@]}"; do |
||||
if ! rpm -q "$package" &>/dev/null; then |
||||
missing_packages+=("$package") |
||||
fi |
||||
done |
||||
|
||||
if [ ${#missing_packages[@]} -gt 0 ]; then |
||||
print_error "I seguenti pacchetti sono mancanti:" |
||||
printf '%s\n' "${missing_packages[@]}" |
||||
print_message "Installa i pacchetti mancanti con:" |
||||
|
||||
# Rileva la distribuzione |
||||
if command -v dnf &> /dev/null; then |
||||
echo "sudo dnf install ${missing_packages[*]}" |
||||
elif command -v yum &> /dev/null; then |
||||
echo "sudo yum install ${missing_packages[*]}" |
||||
else |
||||
echo "sudo <package-manager> install ${missing_packages[*]}" |
||||
fi |
||||
exit 1 |
||||
fi |
||||
|
||||
print_success "Tutti i prerequisiti sono soddisfatti" |
||||
} |
||||
|
||||
# Setup dell'ambiente RPM |
||||
setup_rpm_environment() { |
||||
print_message "Setup dell'ambiente RPM..." |
||||
|
||||
# Crea la struttura di directory RPM |
||||
rpmdev-setuptree |
||||
|
||||
print_success "Ambiente RPM configurato in ~/rpmbuild/" |
||||
} |
||||
|
||||
# Crea l'archivio sorgente |
||||
create_source_archive() { |
||||
print_message "Creazione dell'archivio sorgente..." |
||||
|
||||
local project_name="comfyui-launcher" |
||||
local version="1.0.0" |
||||
local archive_name="${project_name}-${version}" |
||||
|
||||
# Crea directory temporanea |
||||
local temp_dir=$(mktemp -d) |
||||
local project_dir="$temp_dir/$archive_name" |
||||
|
||||
# Copia i file del progetto |
||||
mkdir -p "$project_dir" |
||||
|
||||
# File principali |
||||
cp main.py "$project_dir/" |
||||
cp style.css "$project_dir/" |
||||
cp LICENSE "$project_dir/" |
||||
cp README.md "$project_dir/" |
||||
cp README_EN.md "$project_dir/" |
||||
cp CHANGELOG.md "$project_dir/" |
||||
cp pyproject.toml "$project_dir/" |
||||
cp requirements.txt "$project_dir/" |
||||
cp config.example.json "$project_dir/" |
||||
|
||||
# Escludi file non necessari per l'RPM |
||||
# (non copiamo .git, .venv, ecc.) |
||||
|
||||
# Crea l'archivio tar.gz |
||||
local archive_path="$HOME/rpmbuild/SOURCES/${archive_name}.tar.gz" |
||||
|
||||
(cd "$temp_dir" && tar -czf "$archive_path" "$archive_name") |
||||
|
||||
# Pulisci |
||||
rm -rf "$temp_dir" |
||||
|
||||
print_success "Archivio sorgente creato: $archive_path" |
||||
} |
||||
|
||||
# Copia il file spec |
||||
copy_spec_file() { |
||||
print_message "Copia del file spec..." |
||||
|
||||
cp comfyui-launcher.spec "$HOME/rpmbuild/SPECS/" |
||||
|
||||
print_success "File spec copiato in ~/rpmbuild/SPECS/" |
||||
} |
||||
|
||||
# Verifica del file spec |
||||
check_spec_file() { |
||||
print_message "Verifica del file spec con rpmlint..." |
||||
|
||||
cd "$HOME/rpmbuild/SPECS" |
||||
|
||||
if rpmlint comfyui-launcher.spec; then |
||||
print_success "File spec valido" |
||||
else |
||||
print_warning "Il file spec ha alcuni warning, ma procediamo comunque" |
||||
fi |
||||
} |
||||
|
||||
# Costruzione del pacchetto sorgente (SRPM) |
||||
build_source_rpm() { |
||||
print_message "Costruzione del pacchetto sorgente (SRPM)..." |
||||
|
||||
cd "$HOME/rpmbuild/SPECS" |
||||
|
||||
if rpmbuild -bs comfyui-launcher.spec; then |
||||
print_success "SRPM creato con successo" |
||||
ls -la "$HOME/rpmbuild/SRPMS/"comfyui-launcher-*.src.rpm |
||||
else |
||||
print_error "Errore nella creazione dell'SRPM" |
||||
exit 1 |
||||
fi |
||||
} |
||||
|
||||
# Costruzione del pacchetto binario (RPM) |
||||
build_binary_rpm() { |
||||
print_message "Costruzione del pacchetto binario (RPM)..." |
||||
|
||||
cd "$HOME/rpmbuild/SPECS" |
||||
|
||||
if rpmbuild -bb comfyui-launcher.spec; then |
||||
print_success "RPM creato con successo" |
||||
ls -la "$HOME/rpmbuild/RPMS/"*/comfyui-launcher-*.rpm |
||||
else |
||||
print_error "Errore nella creazione dell'RPM" |
||||
exit 1 |
||||
fi |
||||
} |
||||
|
||||
# Verifica del pacchetto finale |
||||
verify_package() { |
||||
print_message "Verifica del pacchetto finale..." |
||||
|
||||
local rpm_file=$(find "$HOME/rpmbuild/RPMS" -name "comfyui-launcher-*.rpm" -type f | head -1) |
||||
|
||||
if [ -n "$rpm_file" ]; then |
||||
print_message "Verifica con rpmlint..." |
||||
rpmlint "$rpm_file" || print_warning "Alcuni warning trovati, ma il pacchetto è utilizzabile" |
||||
|
||||
print_message "Informazioni sul pacchetto:" |
||||
rpm -qip "$rpm_file" |
||||
|
||||
print_message "Lista dei file nel pacchetto:" |
||||
rpm -qlp "$rpm_file" |
||||
|
||||
print_success "Pacchetto RPM verificato: $rpm_file" |
||||
else |
||||
print_error "Pacchetto RPM non trovato" |
||||
exit 1 |
||||
fi |
||||
} |
||||
|
||||
# Funzione di installazione del pacchetto |
||||
install_package() { |
||||
local rpm_file=$(find "$HOME/rpmbuild/RPMS" -name "comfyui-launcher-*.rpm" -type f | head -1) |
||||
|
||||
if [ -n "$rpm_file" ]; then |
||||
print_message "Per installare il pacchetto, esegui:" |
||||
echo "sudo rpm -ivh '$rpm_file'" |
||||
echo "oppure:" |
||||
echo "sudo dnf install '$rpm_file'" |
||||
|
||||
read -p "Vuoi installare il pacchetto ora? (y/n): " -n 1 -r |
||||
echo |
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then |
||||
if command -v dnf &> /dev/null; then |
||||
sudo dnf install "$rpm_file" |
||||
else |
||||
sudo rpm -ivh "$rpm_file" |
||||
fi |
||||
print_success "Pacchetto installato con successo" |
||||
fi |
||||
fi |
||||
} |
||||
|
||||
# Funzione principale |
||||
main() { |
||||
print_message "=== Script di creazione pacchetto RPM per ComfyUI Launcher ===" |
||||
print_message "Questo script creerà un pacchetto RPM per ComfyUI Launcher" |
||||
echo |
||||
|
||||
# Esegui tutti i passi |
||||
check_prerequisites |
||||
setup_rpm_environment |
||||
create_source_archive |
||||
copy_spec_file |
||||
check_spec_file |
||||
build_source_rpm |
||||
build_binary_rpm |
||||
verify_package |
||||
|
||||
echo |
||||
print_success "=== Pacchetto RPM creato con successo! ===" |
||||
echo |
||||
|
||||
# Mostra il riepilogo |
||||
print_message "File creati:" |
||||
echo " - SRPM: $(ls $HOME/rpmbuild/SRPMS/comfyui-launcher-*.src.rpm 2>/dev/null || echo 'Non trovato')" |
||||
echo " - RPM: $(ls $HOME/rpmbuild/RPMS/*/comfyui-launcher-*.rpm 2>/dev/null || echo 'Non trovato')" |
||||
echo |
||||
|
||||
install_package |
||||
} |
||||
|
||||
# Esegui lo script |
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then |
||||
main "$@" |
||||
fi |
||||
Loading…
Reference in new issue