Ho dato un'occhiata ad apt-build per capire come mai non riesce a compilare alcuni pacchetti ed ho scoperto dov'� l'errore; non � dovuto a nomi di pacchetti con dentro simboli strani come si era discusso un bel po' di thread fa.

Premetto che � un po' lunghetta, ma serve per spiegare dove sono gli errori e cosa ho fatto ... perch� non ho la certezza che le mie scelte siano sempre giuste e quindi volevo sentire i vostri pareri.

Ho guardato cosa faceva in due casi:
1) apt-build install --reinstall gcc
2) apt-build install --reinstall libc6

in pratica alla linea 270 esegue nei due casi queste istruzioni:
1) apt-get --print-uris --yes --reinstall source gcc-defaults=4:3.3.4-2
2) apt-get --print-uris --yes --reinstall source glibc=2.3.2.ds1-18

solo che il primo genera un errore, mentre il secondo riesce.

Dal man di apt-get per l'opzione source
***
A specific source version can be  retrieved  by  postfixing  the
source  name with an equals and then the version to fetch, simi-
lar to the mechanism used for the package  files.  This  enables
exact matching of the source package name and version, implicit-
ly enabling the APT::Get::Only-Source option.
***

se per� si esegue il comando
# apt-get --print-uris --yes --reinstall source gcc-defaults
tutto funziona correttamente senza errori

guardando meglio si vede che in realt� al posto di 4:3.3.4-2 ci vorrebbe 1.17, infatti funziona il comando
# apt-get --print-uris --yes --reinstall source gcc-defaults=1.17


Quindi l'errore � dovuto alla versione usata non corretta.

Alla riga 241 esegue questa istruzione:
# apt-cache show gcc
[...]
Package: gcc
Priority: standard
Section: devel
Installed-Size: 28
Maintainer: Debian GCC maintainers <[email protected]>
Architecture: i386
Source: gcc-defaults (1.17)
Version: 4:3.3.4-2
Provides: c-compiler
[...]

e da questo risultato preleva:
1) il nome del pacchetto dopo la stringa "Source:"
2) la versione dopo la stringa "Version:"

e quindi sbaglia clamorosamente.

Penso che il problema sia dovuto al fatto che gcc � un metapacchetto e la versione reale � contenuta nelle parentesi sulla linea "Source:"

Ho allora dato un'occhiata a tutti i bug di apt-build e ne ho trovato uno che in pratica riporta il "nostro" errore: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=216135

Per� qui � data una soluzione che � parziale (perch� l'errore � in due punti: (A) quando deve scaricarsi il pacchetto e (B) quando poi lo deve compilare) che probabilmente funziona solo per il punto (B).

Io sono riuscito a modificare apt-build in modo che funzioni, per� non so se � tutto corretto.

In pratica nel punto (A) ho visto che per vedere la versione usava due metodi:
1) apt-cache show <- che come abbiamo visto ogni tanto ha delle informazioni errate
2) apt-get --print-uris <- che spero dia sempre le informazioni corrette


e poi confrontava le due per capire quale usare.

In pratica ho commentato la 1) ed ho preso i risultati solo dalla 2). Da quello che posso capire (sperare?) dovrebbe andare sempre bene cos� come ho fatto.

Per il punto (B) c'� un problema simile: ricerca nuovamente di prendersi la versione del pacchetto (che in realt� l'ha gi� presa la punto 1) usando una modalit� simile e purtroppo fallisce ancora.
In questo punto ho assegnato la versione presa nel punto (A) se nel punto (B) non riesce a determinarla.


C'� qualcuno che mi possa indicare se le modifiche sono corrette?

Dopo le modifiche io ho provato a fare:
# apt-build install --reinstall gcc
e sembra aver funzionato

Ciao
Davide

PS: allego il diff, nel quale � contenuto nel punto (A) una parte di codice che avevo aggiunto ed ora � commentata per cercare di prendere i dati corretti da apt-cache show (per� poi ho preferito non usare nulla perch� mi sembra la soluzione migliore)

PS/2: io uso Sarge e quindi ho la versione 0.9.10 ... per chi usa unstable (ho visto che c'� la versione 0.9.12) le modifiche da fare sono veramente poche: commentare nel punto (A) ed inserirne una nel punto (B)

--
Linux User: 302090: http://counter.li.org
Prodotti consigliati:
Sistema operativo: Debian: http://www.it.debian.org
Strumenti per l'ufficio: OpenOffice.org: http://it.openoffice.org
Database: PostgreSQL: http://www.postgres.org
Browser: FireFox: http://texturizer.net/firefox
Client di posta: Thunderbird: http://texturizer.net/thunderbird
Enciclopedia: wikipedia: http://it.wikipedia.org
--
Non autorizzo la memorizzazione del mio indirizzo di posta a chi usa
outlook: non voglio essere invaso da spam



--
Email.it, the professional e-mail, gratis per te: http://www.email.it/f

Sponsor:
Metti il turbo alla tua casella di posta: 100 MB per inviare e ricevere tutto 
quello che vuoi. Clicca qui
Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid24&d-12
--- /usr/bin/apt-build  2004-11-01 23:09:34.000000000 +0100
+++ /tmp/test   2004-12-19 15:44:42.000000000 +0100
@@ -236,11 +236,25 @@
        # And we retrieve the same information from apt-cache.
        # (XXX this info from 'apt-cache show' is from old source, I dont know 
why.
        # Since the test is made, I just added a print() if versions are not 
equal)
-       my $new; # set to 1 if versions from here and above are not the same.
+       my $new = 0; # set to 1 if versions from here and above are not the 
same.
        my $oldver = $srcver;
-       read_apt_list("apt-cache show $pkg |", "^Version:",
-               sub { if (/^Version: (.+)$/ && !$new) { $srcver = $1; $new = 1 
} });
-       $new = 0 if $srcver eq $oldver;
+        
+#      read_apt_list("apt-cache show $pkg |", "^Source:",
+#              sub { if (/^Source: (.+)$/ && !$new) { $srcver = $1; $new = 1 } 
});
+
+#print $srcver;
+#        $srcver =~ s/^.*\(//;
+#      $srcver =~ s/\).*$//;
+
+#print "Source ver: $srcver";
+#print $new;
+#      read_apt_list("apt-cache show $pkg |", "^Version:",
+#              sub { if (/^Version: (.+)$/ && !$new) { $srcver = $1; $new = 1 
} });
+
+        $new = 0 if $srcver eq $oldver;
+
+#print $srcver;
+#print $oldver;
 
        print STDERR "-----> Downloading $pkg source ($srcpkg $srcver) <-----";
        print STDERR "Taking version $srcver over $oldver\n" if $new;
@@ -256,7 +270,7 @@
        my ($control, @packages, $srcpkg, $srcver, $upverchdir);
 
        print STDERR "-----> Building $pkg <-----";
-
+       
        chdir $conf{build_dir};
 
        read_apt_list("apt-get --print-uris @apt_args source $pkg |", "^'",
@@ -265,7 +279,6 @@
                        ($srcpkg, $srcver) = ($n, $v)
                });
 
-
        read_apt_list(
                "apt-get --print-uris @apt_args source 
$srcpkg=".$upver.$maintver." |",
                "^'", sub {
@@ -277,8 +290,10 @@
                        ($srcpkg, $upverchdir) = ($n, $v);
                });
 
+       $upverchdir = $srcver if( !$upverchdir );
+       
        chdir "$srcpkg-$upverchdir";
-
+       
        # Add an entry in changelog 
        system "debchange --append 'Built by apt-build'";
        for (@{$conf->patch}) {

Rispondere a