summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile3
-rw-r--r--arch-nspawn.in28
-rw-r--r--archbuild.in32
-rw-r--r--makechrootpkg.in11
-rw-r--r--pacman-staging-i686.conf99
-rw-r--r--pacman-staging-with-build-support-i686.conf102
6 files changed, 261 insertions, 14 deletions
diff --git a/Makefile b/Makefile
index 753400f..9561aa9 100644
--- a/Makefile
+++ b/Makefile
@@ -24,6 +24,8 @@ CONFIGFILES = \
pacman-extra.conf \
pacman-testing.conf \
pacman-staging.conf \
+ pacman-staging-i686.conf \
+ pacman-staging-with-build-support-i686.conf \
pacman-multilib.conf \
pacman-multilib-testing.conf \
pacman-multilib-staging.conf \
@@ -50,6 +52,7 @@ ARCHBUILD_LINKS = \
testing-i686-build \
testing-x86_64-build \
staging-i686-build \
+ staging-with-build-support-i686-build \
staging-x86_64-build \
multilib-build \
multilib-testing-build \
diff --git a/arch-nspawn.in b/arch-nspawn.in
index 0cdaf6b..8009534 100644
--- a/arch-nspawn.in
+++ b/arch-nspawn.in
@@ -58,9 +58,28 @@ else
cache_dirs=("$cache_dir")
fi
+if [[ -n $makepkg_conf ]]; then
+ eval "$(grep '^CARCH=' "$makepkg_conf")"
+else
+ eval "$(grep '^CARCH=' "$working_dir/etc/makepkg.conf")"
+fi
+
+if [[ "$CARCH" = 'i'*'86' ]]; then
+ host_mirror="$(
+ sed -n '
+ /^\s*Server\s*=/{
+ s/^.*=\s*//
+ s/\s*\(#.*\)\?$//
+ p
+ q
+ }' \
+ '/etc/pacman.d/mirrorlist32'
+ )"
+else
# shellcheck disable=2016
-host_mirror=$(pacman --cachedir /doesnt/exist -Sddp extra/devtools 2>/dev/null | sed -r 's#(.*/)extra/os/.*#\1$repo/os/$arch#')
+ host_mirror=$(pacman --cachedir /doesnt/exist -Sddp extra/devtools 2>/dev/null | sed -r 's#(.*/)extra/os/.*#\1$repo/os/$arch#;s#(.*/)[^/]+/extra/[^/]+#\1$arch/$repo#')
# shellcheck disable=2016
+fi
[[ $host_mirror == *file://* ]] && host_mirror_path=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g')
# {{{ functions
@@ -80,7 +99,9 @@ build_mount_args() {
copy_hostconf () {
cp -a /etc/pacman.d/gnupg "$working_dir/etc/pacman.d"
- echo "Server = $host_mirror" >"$working_dir/etc/pacman.d/mirrorlist"
+ echo "Server = $host_mirror" | \
+ tee "$working_dir/etc/pacman.d/mirrorlist" > \
+ "$working_dir/etc/pacman.d/mirrorlist32"
[[ -n $pac_conf ]] && cp "$pac_conf" "$working_dir/etc/pacman.conf"
[[ -n $makepkg_conf ]] && cp "$makepkg_conf" "$working_dir/etc/makepkg.conf"
@@ -92,6 +113,7 @@ copy_hostconf () {
done
sed -r "s|^#?\\s*CacheDir.+|CacheDir = $(echo -n "${cache_dirs[@]}")|g" -i "$working_dir/etc/pacman.conf"
+ sed -i '/^Architecture = /s| auto$| '"$CARCH|" "$working_dir/etc/pacman.conf"
}
# }}}
@@ -107,8 +129,6 @@ fi
build_mount_args
copy_hostconf
-eval "$(grep '^CARCH=' "$working_dir/etc/makepkg.conf")"
-
[[ -z $nosetarch ]] || unset CARCH
exec ${CARCH:+setarch "$CARCH"} systemd-nspawn -q \
diff --git a/archbuild.in b/archbuild.in
index 8339aef..7e1a964 100644
--- a/archbuild.in
+++ b/archbuild.in
@@ -11,11 +11,17 @@ cmd="${0##*/}"
if [[ "${cmd%%-*}" == 'multilib' ]]; then
repo="${cmd%-build}"
arch='x86_64'
+ arch_ext=''
base_packages+=(multilib-devel)
else
tag="${cmd%-build}"
repo=${tag%-*}
arch=${tag##*-}
+ if [ "${arch}" = 'x86_64' ]; then
+ arch_ext=''
+ else
+ arch_ext="-${arch}"
+ fi
fi
chroots='/var/lib/archbuild'
clean_first=false
@@ -41,6 +47,14 @@ done
check_root
+if [ "${arch}" = "x86_64" ]; then
+ cache_dir=''
+else
+ mkdir -p '/var/cache/archbuild32'
+ cache_dir='-c/var/cache/archbuild32'
+ makechrootpkg_args+=('-d/var/cache/archbuild32:/var/cache/pacman/pkg')
+fi
+
# Pass all arguments after -- right to makepkg
makechrootpkg_args+=("${@:$OPTIND}")
@@ -55,23 +69,35 @@ if ${clean_first} || [[ ! -d "${chroots}/${repo}-${arch}" ]]; then
subvolume_delete_recursive "${copy}"
rm -rf --one-file-system "${copy}"
+ if [ -d "${copy}" ]; then
+ find "${copy}" \
+ -xdev -mindepth 1 -type d \
+ -exec 'mountpoint' '-q' '{}' ';' \
+ -exec 'umount' '-l' '{}' ';'
+ rm -rf --one-file-system "${copy}"
+ mountpoint -q "${copy}" && \
+ umount -l "${copy}" && \
+ rmdir "${copy}"
+ fi
done
lock_close 9
rm -rf --one-file-system "${chroots}/${repo}-${arch}"
mkdir -p "${chroots}/${repo}-${arch}"
setarch "${arch}" mkarchroot \
- -C "@pkgdatadir@/pacman-${repo}.conf" \
+ -C "@pkgdatadir@/pacman-${repo}${arch_ext}.conf" \
-M "@pkgdatadir@/makepkg-${arch}.conf" \
+ ${cache_dir} \
"${chroots}/${repo}-${arch}/root" \
"${base_packages[@]}" || abort
else
lock 9 "${chroots}/${repo}-${arch}/root.lock" "Locking clean chroot"
arch-nspawn \
- -C "@pkgdatadir@/pacman-${repo}.conf" \
+ -C "@pkgdatadir@/pacman-${repo}${arch_ext}.conf" \
-M "@pkgdatadir@/makepkg-${arch}.conf" \
+ ${cache_dir} \
"${chroots}/${repo}-${arch}/root" \
- pacman -Syu --noconfirm || abort
+ pacman --arch ${arch} -Syu --noconfirm || abort
fi
msg "Building in chroot for [%s] (%s)..." "${repo}" "${arch}"
diff --git a/makechrootpkg.in b/makechrootpkg.in
index ef3f2ec..71e527d 100644
--- a/makechrootpkg.in
+++ b/makechrootpkg.in
@@ -209,6 +209,7 @@ prepare_chroot() {
[[ -r $USER_HOME/$x ]] || continue
$install -m 644 "$USER_HOME/$x" "$copydir/build/$x"
done
+ echo 'keyserver-options auto-key-retrieve' >> "$copydir/build/.gnupg/gpg.conf"
sed -e '/^MAKEFLAGS=/d' -e '/^PACKAGER=/d' -i "$copydir/etc/makepkg.conf"
for x in BUILDDIR=/build PKGDEST=/pkgdest SRCPKGDEST=/srcpkgdest SRCDEST=/srcdest LOGDEST=/logdest \
@@ -266,17 +267,13 @@ download_sources() {
local copydir=$1
local makepkg_user=$2
- local builddir
- builddir="$(mktemp -d)"
- chmod 1777 "$builddir"
+ setup_workdir
+ chown "$makepkg_user" "$WORKDIR"
# Ensure sources are downloaded
- sudo -u "$makepkg_user" env SRCDEST="$SRCDEST" BUILDDIR="$builddir" \
+ sudo -u "$makepkg_user" env SRCDEST="$SRCDEST" BUILDDIR="$WORKDIR" \
makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o ||
die "Could not download sources."
-
- # Clean up garbage from verifysource
- rm -rf "$builddir"
}
# Usage: move_products $copydir $owner
diff --git a/pacman-staging-i686.conf b/pacman-staging-i686.conf
new file mode 100644
index 0000000..540c5f7
--- /dev/null
+++ b/pacman-staging-i686.conf
@@ -0,0 +1,99 @@
+#
+# /etc/pacman.conf
+#
+# See the pacman.conf(5) manpage for option and repository directives
+
+#
+# GENERAL OPTIONS
+#
+[options]
+# The following paths are commented out with their default values listed.
+# If you wish to use different paths, uncomment and update the paths.
+#RootDir = /
+#DBPath = /var/lib/pacman/
+#CacheDir = /var/cache/pacman/pkg/
+#LogFile = /var/log/pacman.log
+#GPGDir = /etc/pacman.d/gnupg/
+#HookDir = /etc/pacman.d/hooks/
+HoldPkg = pacman glibc
+#XferCommand = /usr/bin/curl -C - -f %u > %o
+#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
+#CleanMethod = KeepInstalled
+#UseDelta = 0.7
+Architecture = auto
+
+# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
+#IgnorePkg =
+#IgnoreGroup =
+
+#NoUpgrade =
+#NoExtract =
+
+# Misc options
+#UseSyslog
+#Color
+#TotalDownload
+# We cannot check disk space from within a chroot environment
+#CheckSpace
+#VerbosePkgLists
+
+# By default, pacman accepts packages signed by keys that its local keyring
+# trusts (see pacman-key and its man page), as well as unsigned packages.
+SigLevel = Required DatabaseOptional
+LocalFileSigLevel = Optional
+#RemoteFileSigLevel = Required
+
+# NOTE: You must run `pacman-key --init` before first using pacman; the local
+# keyring can then be populated with the keys of all official Arch Linux
+# packagers with `pacman-key --populate archlinux`.
+
+#
+# REPOSITORIES
+# - can be defined here or included from another file
+# - pacman will search repositories in the order defined here
+# - local/custom mirrors can be added here or in separate files
+# - repositories listed first will take precedence when packages
+# have identical names, regardless of version number
+# - URLs will have $repo replaced by the name of the current repo
+# - URLs will have $arch replaced by the name of the architecture
+#
+# Repository entries are of the format:
+# [repo-name]
+# Server = ServerName
+# Include = IncludePath
+#
+# The header [repo-name] is crucial - it must be present and
+# uncommented to enable the repo.
+#
+
+# The testing repositories are disabled by default. To enable, uncomment the
+# repo name header and Include lines. You can add preferred servers immediately
+# after the header, and they will be used before the default mirrors.
+
+[staging]
+Include = /etc/pacman.d/mirrorlist32
+
+[testing]
+Include = /etc/pacman.d/mirrorlist32
+
+[core]
+Include = /etc/pacman.d/mirrorlist32
+
+[extra]
+Include = /etc/pacman.d/mirrorlist32
+
+[community-staging]
+Include = /etc/pacman.d/mirrorlist32
+
+[community-testing]
+Include = /etc/pacman.d/mirrorlist32
+
+[community]
+Include = /etc/pacman.d/mirrorlist32
+
+# An example of a custom package repository. See the pacman manpage for
+# tips on creating your own repositories.
+#[custom]
+#SigLevel = Optional TrustAll
+#Server = file:///home/custompkgs
+
diff --git a/pacman-staging-with-build-support-i686.conf b/pacman-staging-with-build-support-i686.conf
new file mode 100644
index 0000000..e6baf03
--- /dev/null
+++ b/pacman-staging-with-build-support-i686.conf
@@ -0,0 +1,102 @@
+#
+# /etc/pacman.conf
+#
+# See the pacman.conf(5) manpage for option and repository directives
+
+#
+# GENERAL OPTIONS
+#
+[options]
+# The following paths are commented out with their default values listed.
+# If you wish to use different paths, uncomment and update the paths.
+#RootDir = /
+#DBPath = /var/lib/pacman/
+#CacheDir = /var/cache/pacman/pkg/
+#LogFile = /var/log/pacman.log
+#GPGDir = /etc/pacman.d/gnupg/
+#HookDir = /etc/pacman.d/hooks/
+HoldPkg = pacman glibc
+#XferCommand = /usr/bin/curl -C - -f %u > %o
+#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
+#CleanMethod = KeepInstalled
+#UseDelta = 0.7
+Architecture = auto
+
+# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
+#IgnorePkg =
+#IgnoreGroup =
+
+#NoUpgrade =
+#NoExtract =
+
+# Misc options
+#UseSyslog
+#Color
+#TotalDownload
+# We cannot check disk space from within a chroot environment
+#CheckSpace
+#VerbosePkgLists
+
+# By default, pacman accepts packages signed by keys that its local keyring
+# trusts (see pacman-key and its man page), as well as unsigned packages.
+SigLevel = Required DatabaseOptional
+LocalFileSigLevel = Optional
+#RemoteFileSigLevel = Required
+
+# NOTE: You must run `pacman-key --init` before first using pacman; the local
+# keyring can then be populated with the keys of all official Arch Linux
+# packagers with `pacman-key --populate archlinux`.
+
+#
+# REPOSITORIES
+# - can be defined here or included from another file
+# - pacman will search repositories in the order defined here
+# - local/custom mirrors can be added here or in separate files
+# - repositories listed first will take precedence when packages
+# have identical names, regardless of version number
+# - URLs will have $repo replaced by the name of the current repo
+# - URLs will have $arch replaced by the name of the architecture
+#
+# Repository entries are of the format:
+# [repo-name]
+# Server = ServerName
+# Include = IncludePath
+#
+# The header [repo-name] is crucial - it must be present and
+# uncommented to enable the repo.
+#
+
+# The testing repositories are disabled by default. To enable, uncomment the
+# repo name header and Include lines. You can add preferred servers immediately
+# after the header, and they will be used before the default mirrors.
+
+[build-support]
+Include = /etc/pacman.d/mirrorlist32
+
+[staging]
+Include = /etc/pacman.d/mirrorlist32
+
+[testing]
+Include = /etc/pacman.d/mirrorlist32
+
+[core]
+Include = /etc/pacman.d/mirrorlist32
+
+[extra]
+Include = /etc/pacman.d/mirrorlist32
+
+[community-staging]
+Include = /etc/pacman.d/mirrorlist32
+
+[community-testing]
+Include = /etc/pacman.d/mirrorlist32
+
+[community]
+Include = /etc/pacman.d/mirrorlist32
+
+# An example of a custom package repository. See the pacman manpage for
+# tips on creating your own repositories.
+#[custom]
+#SigLevel = Optional TrustAll
+#Server = file:///home/custompkgs
+