Ein kleiner apticron-Patch

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
TRex
Moderator
Beiträge: 8086
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Ein kleiner apticron-Patch

Beitrag von TRex » 07.09.2023 18:37:19

Hi,

ich hab das mal 2017 geschrieben und n Jahr später auch mal upstream vorgeschlagen, aber keine Antwort jenseits von "ACK, cool, mal anschauen" mehr bekommen - vermutlich, weils gerade eher sperrig und eher prototypisch umgesetzt ist. Dennoch find ich die Idee immer noch gut und dokumentierenswürdig - aber ich fänds noch cooler, das in lesbarer Form ins eigentliche Script zu integrieren: das Problem damit ist nämlich, dass ich ein Python-Script in die sonst bash-only Implementierung gebracht hab.

Fangen wir mit der Ausgabe an:

Im Original ist die Ausgabe Paket, Version. Siehe auch https://www.thomas-krenn.com/de/wiki/E- ... t_apticron

Damit konnte ich nicht viel anfangen - ich konnte das delta nicht sehen (bei stable nix wert, aber ich nutze testing...) und nachdem ich das hatte, fiel es mir schwer, das schnell einzuordnen, also kam die erste Spalte dazu, welche die Art der Änderung beschreiben soll (Epoch, Major, minor, patch, Debian-revision, debian-patch. Nicht alles hält sich daran - da gibts dann eben nix.

Code: Alles auswählen

The following packages are currently pending an upgrade:

______  bsd-mailx                              8.1.2-0.20160123cvs-4            ->  8.1.2-0.20180807cvs-1
___p__  bsdutils                               1:2.32-0.4                       ->  1:2.32.1-0.1
__mpDd  cmake                                  3.11.2-1+b1                      ->  3.12.1-1
__mp__  cmake-data                             3.11.2-1                         ->  3.12.1-1
___p__  fdisk                                  2.32-0.4                         ->  2.32.1-0.1
____D_  fonts-opensymbol                       2:102.10+LibO6.1.0~rc2-3         ->  2:102.10+LibO6.1.0-1
__mp__  gimp                                   2.8.22-1                         ->  2.10.2-1
__mp__  gimp-data                              2.8.22-1                         ->  2.10.2-1
______  gtk2-engines-qtcurve                   1.8.18+git20160320-3d8622c-5+b3  ->  1.8.18+git20160320-3d8622c-5+b4
___p__  libblkid1                              2.32-0.4                         ->  2.32.1-0.1
___p__  libblkid1:i386                         2.32-0.4                         ->  2.32.1-0.1
E_mpDd  libexiv2-14                            (none)                           ->  0.25-4
___p__  libfdisk1                              2.32-0.4                         ->  2.32.1-0.1
E_mpDd  libgegl-0.4-0                          (none)                           ->  0.4.6-1
E_mpDd  libgegl-common                         (none)                           ->  0.4.6-1
E_mpDd  libgexiv2-2                            (none)                           ->  0.10.8-1
__mp__  libgimp2.0                             2.8.22-1                         ->  2.10.2-1
____D_  libgpod4                               0.8.3-11                         ->  0.8.3-12
EMmpDd  libheif1                               (none)                           ->  1.3.2-1
____D_  libllvm6.0                             1:6.0.1-2                        ->  1:6.0.1-3
____D_  libllvm6.0:i386                        1:6.0.1-2                        ->  1:6.0.1-3
___p__  libmariadbclient18                     1:10.1.34-1                      ->  1:10.1.35-1
In /usr/sbin/apticron gibts ne Stelle, an der apt-cache policy Paketname und Version ausspuckt - da hab ich angesetzt.

Code: Alles auswählen

  PKGPATH="/${DIRCACHE}/archives/"
  for PKG in $PKGNAMES ; do
    VER=`LC_ALL=C /usr/bin/apt-cache policy $PKG |\
         /bin/grep Candidate: | /usr/bin/cut -f 4 -d \ `
    VERFILE=`echo "$VER" | /bin/sed -e "s/:/%3a/g"`
                if ls ${PKGPATH}${PKG}_${VERFILE}_*.deb >& /dev/null ; then
      DEBS="$DEBS ${PKGPATH}${PKG}_${VERFILE}_*.deb"
    fi
    echo -e "\t"$PKG $VER
  done
Und das hab ich dann aufgebohrt, wobei ich jetzt auf die Schnelle nicht nachvollziehen kann, wieso ich da zweimal drüberloope:

Code: Alles auswählen

  PKGPATH="/${DIRCACHE}/archives/"
  for PKG in $PKGNAMES ; do
    VER=`LC_ALL=C /usr/bin/apt-cache policy $PKG |\
         /bin/grep Candidate: | /usr/bin/cut -f 4 -d \ `
    CUR_VER=`LC_ALL=C /usr/bin/apt-cache policy $PKG |\
         /bin/grep Installed: | /usr/bin/cut -f 4 -d \ `
    echo "${CUR_VER} ${VER} ${PKG}"
  done) | tee /tmp/apticron_versions.txt | /usr/local/bin/parse_debian_versions.py | column -t

  for PKG in $PKGNAMES ; do 
    VER=`LC_ALL=C /usr/bin/apt-cache policy $PKG |\
         /bin/grep Candidate: | /usr/bin/cut -f 4 -d \ `
    VERFILE=`echo "$VER" | /bin/sed -e "s/:/%3a/g"`
                if ls ${PKGPATH}${PKG}_${VERFILE}_*.deb >& /dev/null ; then
      DEBS="$DEBS ${PKGPATH}${PKG}_${VERFILE}_*.deb"
    fi
  done
Und hier das python-Script: NoPaste-Eintrag41956

Ob man das gut zu awk oder so portiert bekommt? Debianapticron hat nicht gerade viele Abhängigkeiten - deswegen ist python da eher uncool.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Antworten