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