+++
title = "Gestire pacchetti in Slackware nel 2026"
date = "2026-05-04"
type = "tech"
image = "/uppies/2026/05/ascii-1920x1080.png"
excerpt = "Il mio workflow aggiornato per gestire i pacchetti in Slackware64 current"
tags = ["linux", "git"]
categories = ["Code", "DIY"]

+++

Ormai scrivo soltanto articoli su vari workflow che ho implementato e migliorato col tempo per gestire vari aspetti della mia giornata al pc :sunglasses:

Oggi tocca al workflow che seguo per gestire i miei pacchetti per Slackware. Il repository lo potete trovare in alto nel menu, oppure cliccando sul pulsante quì sotto:

{{< Actions url="https://packages.danix.xyz" desc="packages.danix.xyz" use="site" caption="Il mio repository di pacchetti per Slackware" >}}

## I miei repo

La maggior parte degli script che scrivo seguono gli standard di [slackbuilds.org](https://slackbuilds.org/guidelines/), tranne dove sia impossibile applicarli. Gestisco i repository degli slackbuild su github, dove mantengo:

- un repository di [pacchetti personali](https://github.com/danixland/my-slackbuilds) (pacchetti che non sono su SBo o che hanno flag di compilazione particolare, sorgenti da repository git, ecc...)
- un repository di [pacchetti incentrati sulla cybersecurity](https://github.com/danixland/Slackware-Pentesting-Suite), con alcuni pacchetti pubblicati da me o da altri su SBo, altri invece solo sul repo personale.

## Compilare i pacchetti

Per la compilazione dei pacchetti uso 2 VM distinte, una su cui gira **slackware64-current** e una su cui gira **slackware64 15.0**, entrambe mantenute aggiornate e con i repository di SBo, oltre ad un clone locale dei miei 2 repo, ovviamente.

La macchina virtuale con la slackware *-stable* la uso soltanto per testare la compilazione di quei pacchetti che decido di pubblicare su SBo, più che altro per verificare le dipendenze e che la compilazione vada a buon fine.

La macchina con la *-current*, invece è quella che utilizzo più spesso, in quanto è quella che genera i pacchetti che uso anche sul mio pc fisso; gli stessi pacchetti che poi pubblico su **packages**.

{{< callout type="warning" >}}
I pacchetti presenti nel [mio repository](https://packages.danix.xyz) sono tutti compilati per slackware64-current e non funzioneranno su slackware64-stable.
{{< /callout >}}

Per la compilazione dei pacchetti mi affido a [slackrepo](https://github.com/aclemons/slackrepo), un programma originariamente scritto da [David Spencer](https://github.com/idlemoor/) (aka idlemoor), e il cui sviluppo è stato ripreso recentemente da [Andrew Clemons](https://github.com/aclemons) (aka aclemons).
Grazie a slackrepo posso compilare in maniera pulita anche pacchetti complessi in quanto utilizza chroot per installare le dipendenze necessarie e una volta compilati i pacchetti tramite degli hook posso fargli eseguire altri script che mi generano i file del repository e caricano i file direttamente sul mio spazio web.

### Il repo per slackrepo

Slackrepo permette di gestire dei repository di slackbuilds come quello di SBo, o come quello per -current gestito da [Matteo Bernardini](https://github.com/Ponce/) (aka Ponce). Io in particolare clono il repo per current, ne creo un branch locale, ci inserisco i miei 2 repository come submodules e poi elimino i pacchetti che andrebbero in conflitto, faccio un rebase con le mie modifiche mantenendo tutto in locale e su questo repo modificato faccio operare slackrepo.

#### Il setup iniziale è questo:

```bash 
git clone https://github.com/Ponce/slackbuilds.git /var/lib/sbopkg/SBo-danix
cd /var/lib/sbopkg/SBo-danix
git checkout current
git checkout -b danix-current
```

Poi aggiungo i miei repo personali:

```bash
git remote add my-slackbuilds https://github.com/danixland/my-slackbuilds.git
git remote add my-pentesting https://github.com/danixland/Slackware-Pentesting-Suite.git
git subtree add --prefix=personal my-slackbuilds main --squash
git subtree add --prefix=pentesting my-pentesting main --squash
```

in modo da avere i miei repo come sotto-directory `personal/` e `pentesting/`.

#### Operazioni giornaliere

Ho un hook per slackrepo che fa ogni volta:

```bash
cd /var/lib/sbopkg/SBo-danix
git fetch origin
git rebase --rebase-merges -X theirs origin/current
```

l'opzione `--rebase-merges` si assicura che i miei files rimangano all'interno delle sottocartelle in cui li ho destinati, mentre `-X theirs` auto risolve eventuali conflitti nel file `.gitignore` in favore della mia versione così che il rebase non venga bloccato.

Se nel corso della giornata ho caricato delle modifiche su uno dei miei repository su github, mi basterà fare:

```bash
cd /var/lib/sbopkg/SBo-danix
git subtree pull --prefix=personal my-slackbuilds main --squash
```

per recuperare le modifiche nella mia VM.

### Gestione dei conflitti

siccome mantengo pacchetti nei miei repo personali, che sono presenti su SBo, devo evitare di avere duplicati così che slackrepo sappia sempre dove prendere i sorgenti per i pacchetti che devo compilare.

#### Version bump

Se un pacchetto va semplicemente aggiornato, mi basta creare un hintfile per slackrepo con la nuova versione, il nuovo link di download e il md5sum aggiornato e slackrepo compilerà il pacchetto con la mia versione, senza bisogno di aspettare che il maintainer aggiorni su SBo.

Un hintfile è basato sul file `.info` per quel pacchetto e ne sovrascrive le informazioni:

```sh
# /etc/slackrepo/SBo-danix/hintfiles/development/hugo/hugo.hint
VERSION="0.159.2"
DOWNLOAD_x86_64="https://github.com/gohugoio/hugo/releases/download/v0.159.2/hugo_extended_0.159.2_Linux-64bit.tar.gz"
MD5SUM_x86_64="a3e27d4b2049a710dbe7d7c1954a827e"
```

#### SlackBuild fix

Se invece ho bisogno di modificare più a fondo lo SlackBuild di un pacchetto, ne farò una copia nel mio repository personale, e rimuoverò la copia di SBo

```bash
cd /var/lib/sbopkg/SBo-danix
git rm -r category/pkgname
git commit -m "pkgname: shadow with fixed version from personal/"
```

senza bisogno di un push su git, lavoro su un branch locale personale. Quando da upstream Ponce aggiorna il pacchetto in questione, al rebase vedrò un conflitto, e potrò verificare se l'aggiornamento è stato inserito e rimuovere la mia versione personale in favore di quella di upstream.

```bash
git rm -r personal/pkgname
git commit -m "pkgname: drop local shadow, fix merged upstream"
git subtree push --prefix=personal my-slackbuilds main
```

Per quanto riguarda la gestione di base questo è tutto, nel prossimo articolo vedremo come gestire un repository di pacchetti locale e remoto usando alcuni shell script molto comodi.

A presto :wink:
