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}) {

