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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
+++
title = "mkhint"
tagline = "Gestisce gli hint file di slackrepo: aggiorna versioni, ricalcola i checksum, segue i rilasci upstream."
status = "active"
repo_url = "https://git.danix.xyz/mkhintfile"
tags = ["bash", "slackware", "slackrepo", "packaging"]
[menus.main]
name = "hintfiles helper"
parent = "slackware"
weight = 10
+++
**mkhint** è un singolo script Bash che elimina la noia di mantenere gli
*hint file* di [slackrepo](https://idlemoor.github.io/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](https://github.com/lilydjwg/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
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
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.
{{< actions use="repo" url="https://git.danix.xyz/mkhintfile/" desc="Sfoglia il sorgente" caption="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." >}}
|