Scoperto qual'e' l'errore di apt-build
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 <debian-gcc@lists.debian.org>
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}) {
Reply to: