Salta al contenuto principale

mkhint

attivo

Gestisce gli hint file di slackrepo: aggiorna versioni, ricalcola i checksum, segue i rilasci upstream.

mkhint è un singolo script Bash che elimina la noia di mantenere gli hint file di slackrepo. Un hint file sovrascrive i dettagli di build di un pacchetto SBo: quale versione compilare, da dove scaricare i sorgenti e i checksum con cui verificarli. Tenerli allineati a mano, su decine di pacchetti, è esattamente il tipo di lavoro ripetitivo che dovrebbe spettare a uno script.

Cosa fa

  • Aggiorna un hint -f package -v 2.0.1: porta la versione ovunque nel file, riscarica i sorgenti da DOWNLOAD / DOWNLOAD_x86_64 e ricalcola MD5SUM / MD5SUM_x86_64. Il file precedente viene salvato in .bak.
  • Crea un hint -n package: genera un nuovo hint dal .info corrispondente nel repository, rimuovendo i campi che slackrepo non vuole e impostando ARCH a x86_64. Senza .info, scrive uno scheletro vuoto.
  • Elenco -l: stampa ogni hint con il suo HintVer (versione nell’hint) accanto al SBOVer (versione nel .info del repository), evidenziando le righe in cui i due valori coincidono byte per byte, così individui gli hint ormai ridondanti rispetto all’upstream.
  • Revisione -R: scorre solo gli hint evidenziati, mostrando ciascuno affiancato al suo .info (git diff --no-index, con ripiego su diff -y) e chiedendo se tenere, cancellare o saltare.
  • Controllo -C [package...]: interroga nvchecker per l’ultima versione upstream di uno, alcuni o tutti gli hint; segnala cosa è obsoleto; aggiorna i pacchetti accettati con nvtake; e termina con un unico prompt slackrepo update per tutto ciò che è cambiato.
  • Manutenzione -d package / -c: cancella un hint e il suo backup, oppure rimuove tutti i .bak dalla directory degli hint in un colpo solo.

Riferimento dei comandi

text
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
mkhint - Manage hint files for slackrepo scripts

Usage:
  ./mkhint --version VERSION --hintfile FILE    Update existing hint file
  ./mkhint --version VERSION --new FILE         Create new hint file
  ./mkhint --new FILE                           Create new hint file (no version)
  ./mkhint --hintfile FILE                      Update hint, suggest latest version via nvchecker
  ./mkhint --check [FILE...]                     Check all (or named) hints for upstream updates
  ./mkhint --list                               List hint files
  ./mkhint --review                             Review hints matching SBo version, keep/delete each
  ./mkhint --clean                              Remove .bak files from HINT_DIR
  ./mkhint --no-dl --hintfile FILE              Update hint, skip downloads, add NODOWNLOAD=yes
  ./mkhint --no-dl --new FILE                   Create hint with NODOWNLOAD=yes
  ./mkhint --help                               Show this help

Options:
  --version, -v VERSION    New version string (required for --hintfile)
  --hintfile, -f FILE      Path to existing hint file (required with --version)
  --new, -n FILE           Create new hint file (required with --version or standalone)
  --list, -l               List all hint files in the default directory
  --review, -R             Review hints whose version matches the SBo .info; diff + keep/delete
  --clean, -c              Remove all .bak files from HINT_DIR
  --check, -C [FILE...]    Check hints for upstream updates via nvchecker, update interactively
  --delete, -d FILE        Delete a hint file (and .bak if present)
  --no-dl, -N              Skip downloads; add NODOWNLOAD=yes to hint file (use with -f or -n)
  --help, -h               Show this help message

Come funziona

mkhint è puro Bash con tre piccole dipendenze, ciascuna con un compito solo:

  • wget scarica gli archivi per calcolarne l’MD5,
  • nvchecker (e il suo compagno nvtake) segue le versioni upstream,
  • jq analizza l’output JSON di nvchecker.

Tutto il resto è shell. I percorsi del repository e della directory degli hint sono due variabili in cima allo script. Il file di bash-completion li rispecchia, così -f, -n, -d e -C completano i nomi dei pacchetti dalla directory giusta, e -v suggerisce persino la versione corrente letta direttamente dall’hint file indicato.

Le voci DOWNLOAD multiriga (un pacchetto con più URL sorgente) sono gestite con cura: il primo URL viene sempre riscaricato perché la versione è cambiata, mentre ogni URL di continuazione viene proposto in modo interattivo, così i sorgenti invariati conservano il checksum esistente invece di essere riscaricati inutilmente.

Perché esiste

Mantenere un overlay SBo personale significa un flusso costante di aggiornamenti di versione. Ogni volta la stessa danza: modificare la stringa di versione, scaricare il nuovo tarball, ricalcolare il checksum, sperare di non aver sbagliato una cifra. mkhint riduce quella danza a un comando, e il trio --check / --list / --review trasforma “quali dei miei hint sono ormai obsoleti o inutili?” da audit manuale a un’occhiata. È il tipo di strumento piccolo e affilato che Slackware incoraggia: niente demone, niente database, niente framework, solo uno script che fa bene un lavoro noioso.

Avvio rapido

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
sudo cp mkhint /usr/local/bin/mkhint
sudo cp mkhint.bash-completion /etc/bash-completion.d/mkhint

# aggiorna un hint esistente a una versione nota
mkhint -f mypackage -v 2.0.1

# crea un nuovo hint dal .info del repository
mkhint -n mypackage

# guarda cosa si è mosso a monte
mkhint --check

Modifica i percorsi REPO_DIR e HINT_DIR in cima allo script (e nel file di completion) per adattarli alla tua configurazione prima del primo utilizzo.

Spero ti sia utile. Se mantieni un tuo overlay slackrepo, mkhint potrebbe risparmiarti la stessa noia che risparmia a me. Patch e idee sono benvenute.

Sfoglia il sorgente