From 2c1ed4889d421b96887fffe2a4945a26bdc21733 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Thu, 6 Jan 2022 01:59:59 +0100 Subject: pacman: hardcode the architecture in pacman.conf to avoid breaking systems Without that fix, when creating a chroot with the following commands on Parabola x86_64, the resulting chroot is 64bit: # mkdir rootfs # pacstrap -C /usr/share/pacman/defaults/pacman.conf.i686 ./rootfs/ # file rootfs/usr/bin/pacman rootfs/usr/bin/pacman: ELF 64-bit LSB pie executable, x86-64, [...] In addition, if we run Parabola i686 on an x86_64 computer with linux-libre-64, and that we try to install packages (after pacman -Sy), some packages will refuse to be installed because they have dependencies on 64bit libraries packages while we have 32bit ones instead: # pacman -S e2fsprogs resolving dependencies... looking for conflicting packages... error: failed to prepare transaction (could not satisfy dependencies) :: installing e2fsprogs (1.46.5-1) breaks dependency 'libss.so=2-32' required by krb5 :: installing e2fsprogs (1.46.5-1) breaks dependency 'libcom_err.so=2-32' required by krb5 but packages without such dependencies (like xterm or coreutils) can be installed without warnings and we end up with non-working packages: # pacman -S xterm [the installation proceeds] # file /usr/bin/xterm /usr/bin/xterm: ELF 64-bit LSB pie executable, x86-64, [...] # xterm bash: /usr/bin/xterm: No such file or directory So it's a good idea to hardcode the architecture by default. The Arch Linux 32 installer uses auto to auto-detect the CPU currently in use to select matching repositories. But in Parabola, for x86 32bit we only have one i686 repository and no pentium4 or i586. In addition, all the Parabola installers don't depend on auto (the multi architecture installer has two complete Parabola systems, one for i686 and one for x86_64, so it doesn't need auto). Signed-off-by: Denis 'GNUtoo' Carikli --- libre/pacman/PKGBUILD | 2 +- libre/pacman/pacman.conf.i686 | 2 +- libre/pacman/pacman.conf.x86_64 | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libre/pacman/PKGBUILD b/libre/pacman/PKGBUILD index cf8f31434..3f75c987b 100644 --- a/libre/pacman/PKGBUILD +++ b/libre/pacman/PKGBUILD @@ -10,7 +10,7 @@ pkgname=pacman pkgver=6.0.0 pkgrel=3 -pkgrel+=.parabola1 +pkgrel+=.parabola2 pkgdesc="A library-based package manager with dependency support" arch=('x86_64') arch+=('i686' 'armv7h') diff --git a/libre/pacman/pacman.conf.i686 b/libre/pacman/pacman.conf.i686 index bf9a8f6da..46c0dc077 100644 --- a/libre/pacman/pacman.conf.i686 +++ b/libre/pacman/pacman.conf.i686 @@ -19,7 +19,7 @@ HoldPkg = pacman glibc #XferCommand = /usr/bin/curl -L -C - -f -o %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #CleanMethod = KeepInstalled -Architecture = auto +Architecture = i686 # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup #IgnorePkg = diff --git a/libre/pacman/pacman.conf.x86_64 b/libre/pacman/pacman.conf.x86_64 index 035d88bf6..9ac6985ff 100644 --- a/libre/pacman/pacman.conf.x86_64 +++ b/libre/pacman/pacman.conf.x86_64 @@ -19,7 +19,7 @@ HoldPkg = pacman glibc #XferCommand = /usr/bin/curl -L -C - -f -o %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #CleanMethod = KeepInstalled -Architecture = auto +Architecture = x86_64 # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup #IgnorePkg = -- cgit v1.2.3