Sources.list pour 64 et 32

Bonsoir,
une question me turlupine: de ce que j’ai pu voir, le sources.list pour une install 32 ou 64 b est identique.
Mais alors comment apt fait il pour charger les paquets compilés en 32 ou 64 b ? (voire pour une autre architecture)

Personne ne sait comment ça fonctionne ?
Je n’ai rien trouvé d’interessnt avec google.
Il semblerait qu’il y ai quelque part une variable ARCHITECTURE, mais je n’en sais pas plus

[quote=“piratebab”]Personne ne sait comment ça fonctionne ?
Je n’ai rien trouvé d’interessnt avec google.
Il semblerait qu’il y ai quelque part une variable ARCHITECTURE, mais je n’en sais pas plus[/quote]
Exact! Mais je ne retrouve pas non-plus. Quand j’étais sous blag et avais voulu updater avec les dépôts fedora 9, il y avait un paquet à installer qui gérait les dépendances et l’architecture; je pense que cela doit être pareil mais ne retrouve pas lequel sous debian.
Parce que une fois ici: http://ftp.fr.debian.org/debian/dists/lenny/main/, il faut bien que quelque chose décide!

Salut,

Il fait même plus fort que çà, puisque à l’install si vous lui proposez une version amd64 alors qu’il ne la supporte pas il vous le dit :smiley:

C’est de la magie ?

[quote=“piratebab”]Personne ne sait comment ça fonctionne ?
Je n’ai rien trouvé d’interessnt avec google.
Il semblerait qu’il y ai quelque part une variable ARCHITECTURE, mais je n’en sais pas plus[/quote]
C’est généré par des macros m4 durant la compilation de dpkg:

dpkg/m4/arch.m4:

# DPKG_ARCHITECTURE
# ------------------------
# Determine the Debian name for the target operating system,
# sets ARCHITECTURE.
AC_DEFUN([DPKG_ARCHITECTURE],
[DPKG_CPU_TYPE
DPKG_OS_TYPE
AC_MSG_CHECKING([dpkg architecture name])
_DPKG_ARCHITECTURE([DEB_HOST_ARCH], [dpkg_arch])
AC_MSG_RESULT([$dpkg_arch])
AC_DEFINE_UNQUOTED(ARCHITECTURE, "${dpkg_arch}",
	[Set this to the canonical dpkg architecture name.])
])# DPKG_ARCHITECTURE

Re,

Au stade de l’installation il n’y a pas encore de Linux dans la machine :smiley:

[quote=“ggoodluck47”]Re,

Au stade de l’installation il n’y a pas encore de Linux dans la machine :smiley:[/quote]

Au stade de l’installation y a un linux en ram, avec un rootfs. Si ce kernel a booté, c’est que l’architecture est supportée </captain_obvious>

Dans ce rootfs il y a udpkg, compilé aussi avec support de l’architecture.

Je vois pas où tu veux en venir :question:

Re,

Vous croyez pas plutôt que le bios sait :smiley:

non, le proc le sait, et donc le kernel (/proc).
Mais ce n’était pas ma question. Je parle une fois que tout est installé. Le sources.list est le même. Alors comment apt-get fait il pour prendre les bons paquets ?

T’as déjà testé les DVD multi-arch sur un amd64 :laughing: ? Il va me refuser de booter avec le kernel powerpc - pas le i386 ou amd64. C’est plus complexe que ça en a l’air :slightly_smiling:

[quote]
Mais ce n’était pas ma question. Je parle une fois que tout est installé. Le sources.list est le même. Alors comment apt-get fait il pour prendre les bons paquets ?[/quote]
Si tu veux savoir en détails:

apt-get source apt
cd apt-$(version)
grep -rin URI apt-pkg/

Mais en fait tu le sais déjà en lisant la sortie de apt-get update.

Il va d’abord lire le fichier Realease pour avoir un aperçu du dépot et savoir quoi télécharger, chaque architecture ayant ensuite son propre répertoire (binary-$(ARCHITECTURE)), avec son propre fichier “Release” il est facile de trouver un paquet dans une architecture donnée.

Ce fichier n’est pas obligatoire dans un dépot - mais ça permet d’avoir un format user-friendly (lenny main contrib…) dans le sources.list.

Ensuite il va récupérer les fichiers Packages (et Sources) gzippés ou non, les analyse et construit un index à partir de ces infos, ne gardant que les paquets installables sur l’architecture locale et ceux de l’architecture “all”. Le fichier Packages est lui obligatoire, et contient notamment les liens pour télécharger le bon paquet dans “pool”.

Si tu doutes, je te recommande d’aller voir /var/lib/apt/lists et /var/cache/apt/pkgcache.bin tu verras bien :wink:

Je détaille pas sur les dépots sales où le pool et le dist sont dans le même répertoire, et j’ai peut être oublié quelque chose :slightly_smiling:

Merci pour ces infos. J’i regardé un peu les sorces de apt, mais il y a pas mal de fichier.
Si j’ai bien compris ton explication, il y a quelque part une variable sur la machine qui indique l’architecture (c’est justement elle que je cherche), et ensuite apt se sert du contenu de cette variable pour piocher dans le bon dépôt.
Je suis toujours impressionné par le nombre d’architectures supportées par debian …

[quote=“piratebab”]Merci pour ces infos. J’i regardé un peu les sorces de apt, mais il y a pas mal de fichier.
Si j’ai bien compris ton explication, il y a quelque part une variable sur la machine qui indique l’architecture (c’est justement elle que je cherche), et [/quote]

C’est inscrit “en dur” dans la libapt-pkg fournie avec apt (/usr/lib/libapt-pkg-libc6.num_version) et modifiable via APT::Architecture dans /etc/apt/apt.conf.

Si tu la modifies, bien sûr après un apt-get update tes fichiers Packages locaux deviennent dans l’architecture demandée. En revanche je ne peux rien “installer” - les dépendances sont cassées :smt003 Et de toute façon même si je pouvais installer, j’irais pas loin je pense :laughing:

$ uname -m
i686

$ ls /var/lib/apt/lists/*binary*
/var/lib/apt/lists/ftp.fr.debian.org_debian_dists_lenny_contrib_binary-amd64_Packages
/var/lib/apt/lists/ftp.fr.debian.org_debian_dists_lenny_main_binary-amd64_Packages
/var/lib/apt/lists/ftp.fr.debian.org_debian_dists_lenny_non-free_binary-amd64_Packages
/var/lib/apt/lists/security.debian.org_dists_lenny_updates_contrib_binary-amd64_Packages
/var/lib/apt/lists/security.debian.org_dists_lenny_updates_main_binary-amd64_Packages
/var/lib/apt/lists/security.debian.org_dists_lenny_updates_non-free_binary-amd64_Packages
etc....

OK, c’est clair, apt connait l’architecture, et va chercher dans le bon répertoire des dépôts.
Sauf pour le kernel! Que je sois sur une install 32 ou 64, apt me propose les 2 kernels!

Ceci parce que ta machine supporterais l’un ou l’autre. Et donc il te laisse le choix :smiley:

[quote=“piratebab”]OK, c’est clair, apt connait l’architecture, et va chercher dans le bon répertoire des dépôts.
Sauf pour le kernel! Que je sois sur une install 32 ou 64, apt me propose les 2 kernels![/quote]
Oui, c’est pour pouvoir passer d’une architecture à une autre - c’est pas très connu, mais surtout pas conseillé, vu que c’est un sacré bricolage :smiley:

Remarques bien le nom du paquet - il est doublé:
pool/main/l/linux-2.6/linux-image-2.6.26-2-amd64_2.6.26-19_i386.deb

En anglais:
v13.gr/blog/?p=11