summaryrefslogtreecommitdiffstats
path: root/content/it
diff options
context:
space:
mode:
Diffstat (limited to 'content/it')
-rw-r--r--content/it/articles/manage-slackware-packages-2026/index.md122
1 files changed, 122 insertions, 0 deletions
diff --git a/content/it/articles/manage-slackware-packages-2026/index.md b/content/it/articles/manage-slackware-packages-2026/index.md
new file mode 100644
index 0000000..0ab15c8
--- /dev/null
+++ b/content/it/articles/manage-slackware-packages-2026/index.md
@@ -0,0 +1,122 @@
++++
+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: