[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Perl und sitar



Hallo Janto,

* Janto schrieb:

> Hallo Waldemar,
> 
> * Waldemar Brodkorb <520052027732-0001@t-online.de> [05-08-01 18:55]:
> 
> > habe endlich Zeit gefunden an dem sitar.pl zu basteln.
> 
> Heisst das, dass Du es jetzt doch alleine machen moechtest?

Nö, ich habe nur mal angefangen.
 
> > Wie bekomme ich am besten mit Perl eine Liste aller installierten
> > Pakete in der Form hin:
> > Paketname::Version::Größe::Kurzbeschreibung
> > 
> > Etwas adäquates zu:
> > rpm -qa --queryformat '%{NAME}::%{VERSION}::%{SIZE}::%{SUMMARY}'
> > 
> > Mit dpkg scheint es nicht zu gehen.
> 
> Aber mit dpkg-awk:
> 
> dpkg-awk "Status:.* installed$" -- Package Version installed-size Description
> 
> > Irgendwie die Datei /var/lib/dpkg/status parsen und dann 
> > die Info in ein Array bekommen, wie geht das?
> 
> Ich hatte ein aehnliches Problem und da ich dpkg-awk erst seid 2
> Stunden kenne, habe ich das folgendermaßen gemacht:
> 
> (Angepasst fuer Dein Problem)
> 
> ----8<----
> use Fcntl;
> 
> sysopen (STATUS, "/var/lib/dpkg/status", O_RDONLY) || die "can't open '/var/lib/dpkg/status'";
> 
> $pos[0]=0; # erste Position = 0 (Dateianfang)
> while (<STATUS>) { $pos[$#pos+1] = tell if /^$/; }
> 
> for ($i=0;$i<$#pos;$i++) {
>    # alles von $pos bis zur naechsten Leerzeile in $package[i]
>    # schreiben
>    seek (STATUS, $pos[$i], seek_set) || die "can't seek!";
>    while (<STATUS>) { last if /^$/; $package[$i] .= $_; }
> }
> close STATUS;
> 
> # zweite for Schleife weils dann deutlich schneller geht.
> for ($i=0;$i<$#package;$i++) {
> 
>    # Paket installier oder nicht?
>    if ($package[$i] =~ /^Status:.* installed$/im) {
>         
>         # alles ausser Version, Discr. etc. löschen
>         $package[$i] =~ s/(^Package:.*$)(\n.*)*(^Installed-Size:.*$)(\n.*)*(^Version:.*$)(\n.*)*(^Description:.*(\n.*)*$)/$1\n$3\n$5\n$7/im;
>         print "$package[$i]\n";
> #   }else{
> #       splice @package, $i, 1;
>    }
> }
> #print @package;
> ----8<----
> 
> Wenn Du weißt, warum das split im Else-Zweig nicht funktioniert,
> kannst Du es korrigieren und dann hast Du ein Array dessen Elemente
> Name, Version, Size und Discr. fuer jeweils ein Paket enthalten.
> Jetzt wird das nur ausgegeben und das Array enthaelt auch Pakete die
> nicht installiert sind.
> 
> Fuer sitar ist das IMO besser als dpg-awk.

Ja, denke ich auch.

> Aber warum willst eigentlich nur die vier Felder haben? Depends, Section,
> Priority und Status sind doch auch interessant.


Hast sicher recht, ich wollte halt in der ersten Phase 
die Informationen die von einer SuSE ermittelt werden auch von
Debian ermitteln, wobei bei dem Paketinformationen bei Debian 
sicherlich mehr wichtig ist.

Das angepasste sitar.pl schicke ich dir gleich.

-- 
bye

Waldemar

-- 
-----------------------------------------------------------
Um sich aus der Liste auszutragen schicken Sie bitte eine
E-Mail an debian-user-de-request@lehmanns.de die im Subject
"unsubscribe <deine_email_adresse>" enthaelt.
Bei Problemen bitte eine Mail an: Jan.Otto@Lehmanns.de
-----------------------------------------------------------

868 eingetragene Mitglieder in dieser Liste.


Reply to: