Dato che faccio uso di multilib, come tanti altri, i pacchetti da tenere aggiornati spesso raddoppiano.
Eric aggiorna il suo trunk delle multilib, ma solitamente aggiorno a mano in quanto preferisco mantenere aggiornato il sistema con i miei tempi. E sinceramente avere multilib non sincronizzate col pacchetto a 64-bit è un inutile rischio che non sono disposto a correre.
A questo si aggiunge che faccio uso di pacchetti presi dal repository di ponce (che non è una persona buona come Eric e quindi non prepara le multilib ) e dal suo SBo-git, e che alcuni pacchetti ufficiali non sono disponibili come multilib.
Niente di trascendentale, alla fine. Una botta di convertpkg-compat32 e si risolve immediatamente.
Tuttavia, in tutto questo c'è un problema: io mi dimentico che pacchetti ho in multilib, e tenere traccia a mano degli aggiornamenti mi costa troppa fatica. Anche dare un find o un ls è troppo. La pigrizia vince su tutto; non a caso uso Slackware.
Perciò ho deciso di realizzare uno script veloce veloce che faccia il lavoro al posto mio. Non è niente di ottimizzato e probabilmente ci saranno modi più eleganti per implementare il tutto, ma sinceramente non mi importa. Fa parte di una mia collezione di script sporchi che ho fatto con il solo scopo di automatizzare compiti noiosi e che metto in ~/.local/libexec (sì, lo so che libexec serve ad altro).
Lo script si chiama check_multilib.sh ed è scritto in dialetto ZSH in quanto Bash ha il fastidioso problema che non supporta le Parameter Expansion annidate.
Nelle varie prove che ho fatto non ho riscontrato bug, però se doveste trovarne qualcuno scrivete pure.
Codice: Seleziona tutto
#!/bin/zsh
multilibs=($(find /var/log/packages -name \*compat32))
echo "The following multilib packages need your attention:\n"
for lib32 in ${multilibs[@]}; do
pkg64=${${lib32//compat32}/--/-}
pkgnam=${lib32/-compat32*}
# Check if the 64-bit package is installed and if the
# multilib needs to be upgraded
[[ ! -e $pkg64 ]] && {
matches=($(ls ${pkgnam}* | egrep -v "${pkgnam}([a-zA-Z0-9]|-[a-z])"))
if [[ ${#matches} -eq 1 ]]; then
# A good practice would be having both multilib and 64-bit packages
# provided from the same repository.
if [[ "${${matches##*-}/[0-9]}" != "${${${lib32##*-}/compat32}/[0-9]}" ]]; then
type="[mismatch]"
else
type="[upgrade]"
fi
else
type="[orphan]"
fi
echo "$type\t${lib32##*/}"
}
done