first with full handle over rpm
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
This commit is contained in:
parent
7948368573
commit
274ea454dd
50 changed files with 4309 additions and 0 deletions
228
README.md
Normal file
228
README.md
Normal file
|
|
@ -0,0 +1,228 @@
|
|||
# ClonePack
|
||||
|
||||
ClonePack est un système de clonage et de gel d'artefacts. Il permet de synchroniser des dépôts externes, de les figer à un instant donné, et de les exposer localement via un miroir HTTP.
|
||||
|
||||
## Types d'artefacts supportés
|
||||
|
||||
- Enterprise Linux (RPM/YUM/DNF)
|
||||
- Debian (APT) — *à venir*
|
||||
- Docker images — *à venir*
|
||||
- Binaires — *à venir*
|
||||
|
||||
## Fonctionnalités
|
||||
|
||||
- Clonage de dépôts externes avec vérification SHA256
|
||||
- Scan régulier des sources pour détecter les nouveaux paquets
|
||||
- Validation manuelle ou automatique des mises à jour
|
||||
- Snapshots métadonnées avec diff et rollback
|
||||
- Proxy miroir HTTP (consommable directement par `yum`/`apt`)
|
||||
|
||||
---
|
||||
|
||||
## Compilation
|
||||
|
||||
**Prérequis** : Go 1.25+
|
||||
|
||||
```bash
|
||||
make build # compile → bin/clonepack
|
||||
make run # compile + démarre le serveur
|
||||
make test # lance les tests
|
||||
make vet # analyse statique
|
||||
make clean # supprime bin/
|
||||
```
|
||||
|
||||
Le binaire est généré dans `bin/clonepack`.
|
||||
|
||||
---
|
||||
|
||||
## Configuration
|
||||
|
||||
ClonePack se configure via fichier YAML ou variables d'environnement (préfixe `CLONEPACK_`).
|
||||
|
||||
**Fichier de config (optionnel) :**
|
||||
```yaml
|
||||
server:
|
||||
host: 0.0.0.0
|
||||
port: 8080
|
||||
|
||||
db:
|
||||
path: ./clonepack.db
|
||||
|
||||
data_dir: ./data
|
||||
|
||||
sync:
|
||||
interval: 1h
|
||||
```
|
||||
|
||||
**Variables d'environnement :**
|
||||
```bash
|
||||
CLONEPACK_SERVER_PORT=9090
|
||||
CLONEPACK_DB_PATH=/var/lib/clonepack/clonepack.db
|
||||
CLONEPACK_DATA_DIR=/var/lib/clonepack/data
|
||||
CLONEPACK_SYNC_INTERVAL=30m
|
||||
```
|
||||
|
||||
**Démarrer le serveur :**
|
||||
```bash
|
||||
./bin/clonepack serve
|
||||
./bin/clonepack serve --config /etc/clonepack/config.yaml
|
||||
```
|
||||
|
||||
Par défaut le serveur écoute sur `http://0.0.0.0:8080`.
|
||||
|
||||
---
|
||||
|
||||
## CLI
|
||||
|
||||
Toutes les commandes CLI appellent l'API REST. L'URL du serveur se configure avec `--api-url` (défaut : `http://localhost:8080`).
|
||||
|
||||
### Dépôts
|
||||
|
||||
```bash
|
||||
# Créer un dépôt RPM (sync auto)
|
||||
./bin/clonepack repo create \
|
||||
--name rocky9-baseos \
|
||||
--type rpm \
|
||||
--source-url https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os
|
||||
|
||||
# Créer avec validation manuelle
|
||||
./bin/clonepack repo create \
|
||||
--name rocky9-baseos \
|
||||
--type rpm \
|
||||
--source-url https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os \
|
||||
--sync-mode manual
|
||||
|
||||
# Lister les dépôts
|
||||
./bin/clonepack repo list
|
||||
|
||||
# Détail d'un dépôt
|
||||
./bin/clonepack repo get 1
|
||||
|
||||
# Supprimer un dépôt
|
||||
./bin/clonepack repo delete 1
|
||||
```
|
||||
|
||||
### Clonage
|
||||
|
||||
```bash
|
||||
# Lancer le clonage complet d'un dépôt (télécharge tous les paquets)
|
||||
./bin/clonepack repo clone 1
|
||||
```
|
||||
|
||||
Le clonage est asynchrone : la commande affiche la progression du job jusqu'à completion.
|
||||
|
||||
### Synchronisation
|
||||
|
||||
```bash
|
||||
# Déclencher un scan pour détecter les nouveaux paquets
|
||||
./bin/clonepack repo sync 1
|
||||
|
||||
# Lister les paquets en attente de validation (mode manual)
|
||||
./bin/clonepack repo sync-list 1
|
||||
|
||||
# Approuver des paquets spécifiques (téléchargement en arrière-plan)
|
||||
./bin/clonepack repo sync-approve 1 42 43 44
|
||||
|
||||
# Approuver tous les paquets en attente
|
||||
./bin/clonepack repo sync-approve 1 --all
|
||||
|
||||
# Rejeter des paquets (ils réapparaîtront au prochain scan)
|
||||
./bin/clonepack repo sync-reject 1 42
|
||||
```
|
||||
|
||||
Le scheduler tourne automatiquement selon l'intervalle configuré (`sync.interval`). En mode `auto`, les nouveaux paquets sont téléchargés directement. En mode `manual`, ils s'accumulent dans la liste d'attente.
|
||||
|
||||
### Blocklist
|
||||
|
||||
Les paquets bloqués n'apparaissent plus jamais dans la liste pending, quelle que soit leur version.
|
||||
|
||||
```bash
|
||||
# Bloquer définitivement un paquet (par ID de la liste pending)
|
||||
# → bloque la version exacte ET toutes les futures versions du même paquet
|
||||
./bin/clonepack repo sync-block 1 42 43
|
||||
|
||||
# Voir les paquets bloqués
|
||||
./bin/clonepack repo sync-blocklist 1
|
||||
|
||||
# Débloquer (par ID de la liste blocked)
|
||||
./bin/clonepack repo sync-unblock 1 1 2
|
||||
```
|
||||
|
||||
### Snapshots
|
||||
|
||||
```bash
|
||||
# Créer un snapshot manuellement
|
||||
./bin/clonepack repo snapshot create 1
|
||||
./bin/clonepack repo snapshot create 1 --label "avant-mise-a-jour"
|
||||
|
||||
# Lister les snapshots d'un dépôt
|
||||
./bin/clonepack repo snapshot list 1
|
||||
|
||||
# Détail d'un snapshot (métadonnées + liste des paquets)
|
||||
./bin/clonepack repo snapshot show 1 3
|
||||
|
||||
# Comparer deux snapshots
|
||||
./bin/clonepack repo snapshot diff 1 2 3
|
||||
|
||||
# Rollback vers un snapshot (supprime les paquets intrus, re-télécharge les manquants)
|
||||
./bin/clonepack repo snapshot rollback 1 2
|
||||
|
||||
# Supprimer un snapshot
|
||||
./bin/clonepack repo snapshot delete 1 3
|
||||
```
|
||||
|
||||
Un snapshot automatique est créé après chaque `sync-approve`.
|
||||
|
||||
---
|
||||
|
||||
## Proxy miroir
|
||||
|
||||
ClonePack expose chaque dépôt cloné comme un miroir HTTP à l'adresse :
|
||||
|
||||
```
|
||||
http://<host>:<port>/mirror/<repo_id>/
|
||||
```
|
||||
|
||||
**Configuration YUM/DNF** (`/etc/yum.repos.d/clonepack.repo`) :
|
||||
```ini
|
||||
[rocky9-baseos]
|
||||
name=Rocky Linux 9 BaseOS via ClonePack
|
||||
baseurl=http://clonepack:8080/mirror/1
|
||||
enabled=1
|
||||
gpgcheck=0
|
||||
```
|
||||
|
||||
**Configuration APT** (`/etc/apt/sources.list.d/clonepack.list`) :
|
||||
```
|
||||
deb [trusted=yes] http://clonepack:8080/mirror/2 bookworm main
|
||||
```
|
||||
|
||||
Le proxy sert uniquement ce qui a été cloné localement (mode local-only). Si un fichier est absent, le serveur retourne 404.
|
||||
|
||||
---
|
||||
|
||||
## API REST
|
||||
|
||||
| Méthode | Route | Action |
|
||||
|---------|-------|--------|
|
||||
| `GET` | `/health` | Santé du serveur |
|
||||
| `POST` | `/api/v1/repos` | Créer un dépôt |
|
||||
| `GET` | `/api/v1/repos` | Lister les dépôts |
|
||||
| `GET` | `/api/v1/repos/{id}` | Détail d'un dépôt |
|
||||
| `DELETE` | `/api/v1/repos/{id}` | Supprimer un dépôt |
|
||||
| `POST` | `/api/v1/repos/{id}/clone` | Démarrer le clonage |
|
||||
| `GET` | `/api/v1/repos/{id}/clone/status` | Statut du clonage |
|
||||
| `POST` | `/api/v1/repos/{id}/sync/trigger` | Déclencher un scan |
|
||||
| `GET` | `/api/v1/repos/{id}/sync/pending` | Paquets en attente |
|
||||
| `POST` | `/api/v1/repos/{id}/sync/approve` | Approuver des paquets |
|
||||
| `POST` | `/api/v1/repos/{id}/sync/reject` | Rejeter des paquets |
|
||||
| `POST` | `/api/v1/repos/{id}/sync/block` | Bloquer définitivement des paquets |
|
||||
| `POST` | `/api/v1/repos/{id}/sync/unblock` | Débloquer des paquets |
|
||||
| `GET` | `/api/v1/repos/{id}/sync/blocked` | Lister les paquets bloqués |
|
||||
| `POST` | `/api/v1/repos/{id}/snapshots` | Créer un snapshot |
|
||||
| `GET` | `/api/v1/repos/{id}/snapshots` | Lister les snapshots |
|
||||
| `GET` | `/api/v1/repos/{id}/snapshots/{snap_id}` | Détail d'un snapshot |
|
||||
| `DELETE` | `/api/v1/repos/{id}/snapshots/{snap_id}` | Supprimer un snapshot |
|
||||
| `GET` | `/api/v1/repos/{id}/snapshots/diff?from=X&to=Y` | Diff deux snapshots |
|
||||
| `POST` | `/api/v1/repos/{id}/snapshots/{snap_id}/rollback` | Rollback |
|
||||
| `GET` | `/mirror/{id}/*` | Proxy miroir HTTP |
|
||||
Loading…
Add table
Add a link
Reference in a new issue