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

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: