diff options
Diffstat (limited to 'content/it')
| -rw-r--r-- | content/it/articles/manage-slackware-packages-2026/index.md | 122 |
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: |
