Roman Kyrylych schrieb:
Solution #2:
1) Pacman 3.1 already has only one /etc/pacman.d/mirrorlist file for all repos with contents like: Server = ftp://ftp.archlinux.org/$repo/os/i686 and in pacman.conf there is: [core] Include=/etc/pacman.d/mirrorlist Pacman replaces '$repo' with 'core' automatically during a sync operation.
2) Add a similar support for $arch: Server = ftp://ftp.archlinux.org/$repo/os/$arch On i686 machine pacman should replace '$arch' with 'i686' and then with 'any'. This way we will have 3 different .db.tar.gz for ftp dir, including $repo/os/any/$repo.db.tar.gz And we there will be no symlinks in $repo/os/{i686,x86_64} dir.
3) For cross-distro usage it's better not to hardcode $arch=($CARCH 'any') but make it cofigurable (at least at build time).
4) Modify pacman's output so it produces a single progress meter for a repo, not 2 for each 'i686' and 'any' db file.
5) extract 'i686' and 'any' dbs to a single /var/lib/pacman/sync/$repo but then it should guess from which ftp dir to download package (taking -prefix into account again? or store arch info in db?)
I have another (similar) approach: Change Server = ftp://ftp.archlinux.org/$repo/os/i686 to Server = ftp://ftp.archlinux.org/$repo/os/ Place a $repo.db.tar.gz file in the os/ directory and for each package add additional information: - Available architectures for the package in the desc file - FILENAME, NAME, VERSION, CSIZE, MD5SUM field for each architecture in the desc file - Maybe add DEPENDS-$ARCH field in the depends file pacman knows by configuration (with a sane default), that it can use the i686 and any architectures. If it find the package for i686, it tries to download ftp://ftp.archlinux.org/$repo/os/i686/${filename-i686}. If not, it tries to find ftp://ftp.archlinux.org/$repo/os/any/${filename-any}. If neither architecture is found in the db, it knows the package doesn't exist for this architecture.