Compare commits

..

35 Commits

Author SHA1 Message Date
Pierre Schmitz
61cc1f3504 prepare release 2011-04-11 18:27:44 +02:00
Pierre Schmitz
7037948b65 Add simple function to sign packages
Set SIGNPKG to y in makepkg.conf to enable signing.
2011-04-11 18:26:11 +02:00
Pierre Schmitz
0e6780f2c8 prepare release 2011-04-09 23:04:59 +02:00
Pierre Schmitz
45c8269441 archrelease: be more verbose 2011-04-09 13:41:14 +02:00
Pierre Schmitz
7e3013b2ae Fix rsync call; quotes wont work here 2011-04-08 12:24:25 +02:00
Dan McGee
c16e7c25c9 commitpkg: upload signatures if available
Signed-off-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-04-02 00:26:33 +02:00
Dan McGee
c955ecf35d commitpkg: upload all files at the same time
Batch them up using a bash array and then pass them all to a single
invocation of rsync.

Signed-off-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-04-02 00:26:33 +02:00
Dan McGee
160e936bba commitpkg: add '-y' to rsyncopts
This allows uploads to possibly be smaller if a similar file exists
nearby without the same name. Unlikely in most cases, but we might as
well take advantage if they do exist:

Signed-off-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-04-02 00:26:33 +02:00
Dan McGee
69f9e64aa3 commitpkg: move all rsync opts to rsyncopts var
Signed-off-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-04-02 00:26:33 +02:00
Dan McGee
71efb148df commitpkg: make repo/server selection more modular
This gets rid of the ever-expanding conditional we had before and
replaces it with two case statements.

The first handles the command name. If it ends with 'pkg', we treat the
entire first part of the reponame, unless of course 'commitpkg' was
called directly. This allows one to add new symlinks such as
'gnome-unstablepkg'.

The second handles the server. Well-known repositories are listed and
passed to the appropriate server. All unusual repos are assumed to live
on gerolde and sent that direction.

Signed-off-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-04-02 00:26:33 +02:00
Dan McGee
48ccc1c7fb Unify comment style
Signed-off-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-04-02 00:26:33 +02:00
Pierre Schmitz
563ffa7be8 prepare release 2011-03-28 14:59:00 +02:00
Rémy Oudompheng
f01097f22c Don't prefix package name with './' if package is in $PKGDEST
Commit ad593b8b61 introduces
a problem when $PKGDEST is set and the package to transfer
has an absolute pathname. In this case there is no need
to add anything to have rsync work properly.

Signed-off-by: Rémy Oudompheng <remy@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-03-28 14:57:22 +02:00
Pierre Schmitz
ad593b8b61 prepare release 2011-03-26 14:34:07 +01:00
Allan McRae
e23c94675e Be less generic with package extension
Arch only uses .gz and .xz packages so look for .pkg.tar.?z.  This
prevents matching potential detached signature files.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-03-26 13:03:32 +01:00
Pierre Schmitz
96a11523e5 Update default makepkg.conf and pacman.conf to match the ones from pacman 3.5 2011-03-26 12:42:21 +01:00
Pierre Schmitz
bdde6e5a35 Merge branch 'master', remote-tracking branch 'heftig/master' 2011-03-26 09:58:28 +01:00
Ray Rashif
38f85d654a support optdepends
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-03-26 09:39:37 +01:00
Lukas Fleischer
2ed8ef1185 makechrootpkg: Copy package logs with split packages (fixes FS#23239).
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-03-26 09:38:28 +01:00
Lukas Fleischer
aa06caf31c Abort properly if source files are not under version control (FS#23122).
Remove superfluous subshell code from version control checks in
commitpkg, making it exit properly if source files are not under version
control. Also, improve correctness of sed(1) commands and use fgrep(1)
instead of grep(1) where appropriate.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-03-26 09:37:03 +01:00
Dave Reisner
08a68bb4a0 commitpkg: prefix package filenames with ./
This is a hint to rsync that the file is a path and not a remote module
in the case of a package with an epoch in the version.

Signed-off-by: Dave Reisner <d@falconindy.com>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-03-23 20:46:00 +01:00
Florian Pritz
3bc5f6b5c9 add epoch support
Signed-off-by: Florian Pritz <bluewind@server-speed.net>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-03-23 19:03:10 +01:00
Jan Steffens
2fa8fdec47 Make default copydir user-dependent
Eases usage when chroots are shared between multiple users.
2011-03-22 19:47:48 +01:00
Jan Steffens
0af05a48ab Use Btrfs snapshots for chroot copies, when available
This is much faster than using Rsync to clone.

Rsync stays available when the chroots are not on a Btrfs.
2011-03-22 19:47:48 +01:00
Jan Steffens
174ff59dba Add flock-based locking to chroots
This prevents accidents when chroots are shared between multiple users.
2011-03-22 19:47:32 +01:00
Jan Steffens
5434d3991c Remove sudo from archbuild
Archbuild should be called via sudo.
2011-03-18 12:04:26 +01:00
Jan Steffens
36dc5d8792 Stop the PACKAGER= and MAKEFLAGS= from piling on
Repeatedly reusing the same chroot kept adding lines to makepkg.conf.
2011-03-18 12:04:26 +01:00
Jan Steffens
96f22cfede Use the multilib-devel group 2011-03-18 12:04:26 +01:00
Lukas Fleischer
8b9733661d Use variables in Makefile instead of hardcoding stuff in every target.
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-03-18 12:04:23 +01:00
Lukas Fleischer
dbdb237519 Add ".PHONY" target to Makefile.
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-03-18 12:03:38 +01:00
Lukas Fleischer
2ff5c45d14 makechrootpkg: Copy package logs with split packages (fixes FS#23239).
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-03-18 11:28:45 +01:00
Lukas Fleischer
80168e7e1c Abort properly if source files are not under version control (FS#23122).
Remove superfluous subshell code from version control checks in
commitpkg, making it exit properly if source files are not under version
control. Also, improve correctness of sed(1) commands and use fgrep(1)
instead of grep(1) where appropriate.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-03-18 11:28:45 +01:00
Jan Steffens
f72297a639 Use readlink -e to canonicalize chrootdir 2011-03-14 02:31:26 +01:00
Jan Steffens
ba7cc139c4 Fix spelling 2011-03-14 02:31:26 +01:00
Jan Steffens
3491ea5d79 Syntax cleanup
No functional change.
2011-03-14 02:31:20 +01:00
14 changed files with 275 additions and 172 deletions

146
Makefile
View File

@@ -1,90 +1,74 @@
V=0.9.17 V=0.9.21
BINPROGS = \
checkpkg \
commitpkg \
archco \
communityco \
archrelease \
archrm \
archbuild \
lddd \
finddeps \
rebuildpkgs
SBINPROGS = \
mkarchroot \
makechrootpkg
CONFIGFILES = \
makepkg-i686.conf \
makepkg-x86_64.conf \
pacman-extra.conf \
pacman-testing.conf \
pacman-staging.conf \
pacman-multilib.conf \
pacman-multilib-testing.conf
COMMITPKG_LINKS = \
extrapkg \
corepkg \
testingpkg \
stagingpkg \
communitypkg \
community-testingpkg \
community-stagingpkg \
multilibpkg \
multilib-testingpkg
ARCHBUILD_LINKS = \
extra-i686-build \
extra-x86_64-build \
testing-i686-build \
testing-x86_64-build \
staging-i686-build \
staging-x86_64-build \
multilib-build \
multilib-testing-build
all: all:
install: install:
# commitpkg/checkpkg and friends install -dm0755 $(DESTDIR)/usr/bin
install -d -m755 $(DESTDIR)/usr/bin install -dm0755 $(DESTDIR)/usr/sbin
install -m 755 checkpkg $(DESTDIR)/usr/bin install -dm0755 $(DESTDIR)/usr/share/devtools
install -m 755 commitpkg $(DESTDIR)/usr/bin install -m0755 ${BINPROGS} $(DESTDIR)/usr/bin
ln -sf commitpkg $(DESTDIR)/usr/bin/extrapkg install -m0755 ${SBINPROGS} $(DESTDIR)/usr/sbin
ln -sf commitpkg $(DESTDIR)/usr/bin/corepkg install -m0644 ${CONFIGFILES} $(DESTDIR)/usr/share/devtools
ln -sf commitpkg $(DESTDIR)/usr/bin/testingpkg for l in ${COMMITPKG_LINKS}; do ln -sf commitpkg $(DESTDIR)/usr/bin/$$l; done
ln -sf commitpkg $(DESTDIR)/usr/bin/stagingpkg for l in ${ARCHBUILD_LINKS}; do ln -sf archbuild $(DESTDIR)/usr/bin/$$l; done
ln -sf commitpkg $(DESTDIR)/usr/bin/communitypkg
ln -sf commitpkg $(DESTDIR)/usr/bin/community-testingpkg
ln -sf commitpkg $(DESTDIR)/usr/bin/community-stagingpkg
ln -sf commitpkg $(DESTDIR)/usr/bin/multilibpkg
ln -sf commitpkg $(DESTDIR)/usr/bin/multilib-testingpkg
# arch{co,release,rm}
install -m 755 archco $(DESTDIR)/usr/bin
install -m 755 communityco $(DESTDIR)/usr/bin
install -m 755 archrelease $(DESTDIR)/usr/bin
install -m 755 archrm $(DESTDIR)/usr/bin
# new chroot tools, only usable by root
install -d -m 755 $(DESTDIR)/usr/sbin
install -m 755 mkarchroot $(DESTDIR)/usr/sbin
install -m 755 makechrootpkg $(DESTDIR)/usr/sbin
install -m 755 archbuild $(DESTDIR)/usr/bin
ln -sf archbuild $(DESTDIR)/usr/bin/extra-i686-build
ln -sf archbuild $(DESTDIR)/usr/bin/extra-x86_64-build
ln -sf archbuild $(DESTDIR)/usr/bin/testing-i686-build
ln -sf archbuild $(DESTDIR)/usr/bin/testing-x86_64-build
ln -sf archbuild $(DESTDIR)/usr/bin/staging-i686-build
ln -sf archbuild $(DESTDIR)/usr/bin/staging-x86_64-build
ln -sf archbuild $(DESTDIR)/usr/bin/multilib-build
ln -sf archbuild $(DESTDIR)/usr/bin/multilib-testing-build
# Additional packaging helper scripts
install -m 755 lddd $(DESTDIR)/usr/bin
install -m 755 finddeps $(DESTDIR)/usr/bin
install -m 755 rebuildpkgs $(DESTDIR)/usr/bin
# install default config
install -d -m755 $(DESTDIR)/usr/share/devtools
install -m 644 makepkg-i686.conf $(DESTDIR)/usr/share/devtools
install -m 644 makepkg-x86_64.conf $(DESTDIR)/usr/share/devtools
install -m 644 pacman-extra.conf $(DESTDIR)/usr/share/devtools
install -m 644 pacman-testing.conf $(DESTDIR)/usr/share/devtools
install -m 644 pacman-staging.conf $(DESTDIR)/usr/share/devtools
install -m 644 pacman-multilib.conf $(DESTDIR)/usr/share/devtools
install -m 644 pacman-multilib-testing.conf $(DESTDIR)/usr/share/devtools
uninstall: uninstall:
# remove all files we installed for f in ${BINPROGS}; do rm -f $(DESTDIR)/usr/bin/$$f; done
rm $(DESTDIR)/usr/bin/checkpkg for f in ${SBINPROGS}; do rm -f $(DESTDIR)/usr/sbin/$$f; done
rm $(DESTDIR)/usr/bin/commitpkg for f in ${CONFIGFILES}; do rm -f $(DESTDIR)/usr/share/devtools/$$f; done
rm $(DESTDIR)/usr/bin/extrapkg for l in ${COMMITPKG_LINKS}; do rm -f $(DESTDIR)/usr/bin/$$l; done
rm $(DESTDIR)/usr/bin/corepkg for l in ${ARCHBUILD_LINKS}; do rm -f $(DESTDIR)/usr/bin/$$l; done
rm $(DESTDIR)/usr/bin/testingpkg
rm $(DESTDIR)/usr/bin/stagingpkg
rm $(DESTDIR)/usr/bin/communitypkg
rm $(DESTDIR)/usr/bin/community-testingpkg
rm $(DESTDIR)/usr/bin/community-stagingpkg
rm $(DESTDIR)/usr/bin/multilibpkg
rm $(DESTDIR)/usr/bin/multilib-testingpkg
rm $(DESTDIR)/usr/sbin/mkarchroot
rm $(DESTDIR)/usr/sbin/makechrootpkg
rm $(DESTDIR)/usr/bin/extra-i686-build
rm $(DESTDIR)/usr/bin/extra-x86_64-build
rm $(DESTDIR)/usr/bin/testing-i686-build
rm $(DESTDIR)/usr/bin/testing-x86_64-build
rm $(DESTDIR)/usr/bin/staging-i686-build
rm $(DESTDIR)/usr/bin/staging-x86_64-build
rm $(DESTDIR)/usr/bin/multilib-build
rm $(DESTDIR)/usr/bin/multilib-testing-build
rm $(DESTDIR)/usr/bin/lddd
rm $(DESTDIR)/usr/bin/finddeps
rm $(DESTDIR)/usr/bin/archco
rm $(DESTDIR)/usr/bin/archrelease
rm $(DESTDIR)/usr/bin/archrm
rm $(DESTDIR)/usr/bin/communityco
rm $(DESTDIR)/usr/bin/rebuildpkgs
rm $(DESTDIR)/usr/share/devtools/makepkg-i686.conf
rm $(DESTDIR)/usr/share/devtools/makepkg-x86_64.conf
rm $(DESTDIR)/usr/share/devtools/pacman-extra.conf
rm $(DESTDIR)/usr/share/devtools/pacman-testing.conf
rm $(DESTDIR)/usr/share/devtools/pacman-staging.conf
rm $(DESTDIR)/usr/share/devtools/pacman-multilib.conf
rm $(DESTDIR)/usr/share/devtools/pacman-multilib-testing.conf
dist: dist:
git archive --format=tar --prefix=devtools-$(V)/ $(V) | gzip -9 > devtools-$(V).tar.gz git archive --format=tar --prefix=devtools-$(V)/ $(V) | gzip -9 > devtools-$(V).tar.gz
upload:
scp devtools-$(V).tar.gz gerolde.archlinux.org:/srv/ftp/other/devtools/
.PHONY: all install uninstall dist upload

View File

@@ -4,9 +4,9 @@ base_packages='base base-devel sudo'
cmd="$(basename "${0%-build}")" cmd="$(basename "${0%-build}")"
if [ "${cmd%-*}" == 'multilib' ]; then if [ "${cmd%-*}" == 'multilib' ]; then
repo="${cmd}" repo="${cmd}"
arch='x86_64' arch='x86_64'
base_packages+=' gcc-multilib libtool-multilib' base_packages+=' multilib-devel'
else else
repo=${cmd%-*} repo=${cmd%-*}
arch=${cmd##*-} arch=${cmd##*-}
@@ -29,20 +29,39 @@ while getopts 'cr:' arg; do
esac esac
done done
if [ "$EUID" != '0' ]; then
echo 'This script must be run as root.'
exit 1
fi
if ${clean_first} || [ ! -d "${chroots}/${repo}-${arch}" ]; then if ${clean_first} || [ ! -d "${chroots}/${repo}-${arch}" ]; then
echo "Creating chroot for [${repo}] (${arch})..." echo "Creating chroot for [${repo}] (${arch})..."
sudo rm -rf ${chroots}/${repo}-${arch}
sudo mkdir -p ${chroots}/${repo}-${arch} for copy in ${chroots}/${repo}-${arch}/*; do
setarch ${arch} sudo mkarchroot \ [[ -d $copy ]] || continue
echo "Deleting chroot copy '$(basename "${copy}")'..."
# Lock the copy
exec 9>${copy}.lock
flock 9
{ type -P btrfs && btrfs subvolume delete ${copy}; } &>/dev/null
rm -rf ${copy}
done
exec 9>&-
rm -rf ${chroots}/${repo}-${arch}
mkdir -p ${chroots}/${repo}-${arch}
setarch ${arch} mkarchroot \
-C /usr/share/devtools/pacman-${repo}.conf \ -C /usr/share/devtools/pacman-${repo}.conf \
-M /usr/share/devtools/makepkg-${arch}.conf \ -M /usr/share/devtools/makepkg-${arch}.conf \
${chroots}/${repo}-${arch}/root \ ${chroots}/${repo}-${arch}/root \
${base_packages} ${base_packages}
else else
setarch ${arch} sudo mkarchroot \ setarch ${arch} mkarchroot \
-u \ -u \
${chroots}/${repo}-${arch}/root ${chroots}/${repo}-${arch}/root
fi fi
echo "Building in chroot for [${repo}] (${arch})..." echo "Building in chroot for [${repo}] (${arch})..."
setarch ${arch} sudo makechrootpkg -c -r ${chroots}/${repo}-${arch} setarch ${arch} makechrootpkg -c -r ${chroots}/${repo}-${arch}

View File

@@ -23,7 +23,7 @@ if [ ! -z "$(svn status -q)" ]; then
abort 'archrelease: You have not committed your changes yet!' abort 'archrelease: You have not committed your changes yet!'
fi fi
echo -n 'releasing package...' echo -n "releasing package to ${1}..."
pushd .. >/dev/null pushd .. >/dev/null
if [ -d "repos/${1}" ]; then if [ -d "repos/${1}" ]; then
svn rm --force -q "repos/${1}" svn rm --force -q "repos/${1}"

118
commitpkg
View File

@@ -17,6 +17,19 @@ getpkgfile() {
echo ${1} echo ${1}
} }
##
# usage : get_full_version( $epoch, $pkgver, $pkgrel )
# return : full version spec, including epoch (if necessary), pkgver, pkgrel
##
get_full_version() {
if [[ $1 -eq 0 ]]; then
# zero epoch case, don't include it in version
echo $2-$3
else
echo $1:$2-$3
fi
}
# Source makepkg.conf; fail if it is not found # Source makepkg.conf; fail if it is not found
if [ -r '/etc/makepkg.conf' ]; then if [ -r '/etc/makepkg.conf' ]; then
source '/etc/makepkg.conf' source '/etc/makepkg.conf'
@@ -38,62 +51,55 @@ fi
. PKGBUILD . PKGBUILD
pkgbase=${pkgbase:-$pkgname} pkgbase=${pkgbase:-$pkgname}
# set up repo-specific opts depending on how we were called case "$cmd" in
server='gerolde.archlinux.org' commitpkg)
if [ "$cmd" == 'extrapkg' ]; then if [ $# -eq 0 ]; then
repo='extra' abort 'usage: commitpkg <reponame> [-l limit] [commit message]'
elif [ "$cmd" == 'corepkg' ]; then fi
repo='core' repo="$1"
elif [ "$cmd" == 'testingpkg' ]; then shift
repo='testing' ;;
elif [ "$cmd" == 'stagingpkg' ]; then *pkg)
repo='staging' repo="${cmd%pkg}"
elif [ "$cmd" == 'communitypkg' ]; then ;;
repo='community' *)
server='aur.archlinux.org'
elif [ "$cmd" == 'community-testingpkg' ]; then
repo='community-testing'
server='aur.archlinux.org'
elif [ "$cmd" == 'community-stagingpkg' ]; then
repo='community-staging'
server='aur.archlinux.org'
elif [ "$cmd" == 'multilibpkg' ]; then
repo='multilib'
server='aur.archlinux.org'
elif [ "$cmd" == 'multilib-testingpkg' ]; then
repo='multilib-testing'
server='aur.archlinux.org'
else
if [ $# -eq 0 ]; then
abort 'usage: commitpkg <reponame> [-l limit] [commit message]' abort 'usage: commitpkg <reponame> [-l limit] [commit message]'
fi ;;
repo="$1" esac
shift
fi case "$repo" in
core|extra|testing|staging)
server='gerolde.archlinux.org' ;;
community*|multilib*)
server='aur.archlinux.org' ;;
*)
server='gerolde.archlinux.org'
echo "Non-standard repository $repo in use, defaulting to server $server" ;;
esac
# check if all local source files are under version control # check if all local source files are under version control
(for s in ${source[@]}; do for s in ${source[@]}; do
echo $s | grep -vq '://' && \ echo $s | grep -Fvq '://' && \
svn status $s | grep -q '?' && \ svn status $s | grep -q '^\?' && \
abort "$s is not under version control" abort "$s is not under version control"
done) || true done
# check if changelog and install files are under version control # check if changelog and install files are under version control
(for i in 'changelog' 'install'; do for i in 'changelog' 'install'; do
filelist=$(sed -n "s/^[[:space:]]*$i=//p" PKGBUILD) filelist=$(sed -n "s/^[[:space:]]*$i=//p" PKGBUILD)
for file in $filelist; do for file in $filelist; do
# evaluate any bash variables used # evaluate any bash variables used
eval file=${file} eval file=${file}
if svn status ${file} | grep -q '?'; then if svn status ${file} | grep -q '^\?'; then
abort "${file} is not under version control" abort "${file} is not under version control"
fi fi
done done
done) || true done
# see if any limit options were passed, we'll send them to rsync # see if any limit options were passed, we'll send them to rsync
unset rsyncopts rsyncopts='-e ssh -p --chmod=ug=rw,o=r -c -h -L --progress --partial -y'
if [ "$1" = '-l' ]; then if [ "$1" = '-l' ]; then
rsyncopts="--bwlimit=$2" rsyncopts="$rsyncopts --bwlimit=$2"
shift 2 shift 2
fi fi
@@ -106,24 +112,44 @@ else
fi fi
echo 'done' echo 'done'
declare -a uploads
for _arch in ${arch[@]}; do for _arch in ${arch[@]}; do
for _pkgname in ${pkgname[@]}; do for _pkgname in ${pkgname[@]}; do
pkgfile=$(getpkgfile "$_pkgname-$pkgver-$pkgrel-${_arch}".pkg.tar.* 2>/dev/null) fullver=$(get_full_version ${epoch:-0} $pkgver $pkgrel)
pkgdestfile=$(getpkgfile "$PKGDEST/$_pkgname-$pkgver-$pkgrel-${_arch}".pkg.tar.* 2>/dev/null) pkgfile=$(getpkgfile "$_pkgname-$fullver-${_arch}".pkg.tar.?z 2>/dev/null)
pkgdestfile=$(getpkgfile "$PKGDEST/$_pkgname-$fullver-${_arch}".pkg.tar.?z 2>/dev/null)
if [ ! -f "$pkgfile" -a -f "$pkgdestfile" ]; then if [ -f "$pkgfile" ]; then
pkgfile="./$pkgfile"
elif [ -f "$pkgdestfile" ]; then
pkgfile="$pkgdestfile" pkgfile="$pkgdestfile"
elif [ ! -f "$pkgfile" ]; then else
echo "skipping ${_arch}" echo "skipping ${_arch}"
continue 2 continue 2
fi fi
uploads+=("$pkgfile")
echo -n 'uploading ' if [[ $SIGNPKG == 'y' ]]; then
rsync -p --chmod 'ug=rw,o=r' -c -h -L --progress $rsyncopts --partial "${pkgfile}" -e ssh "$server:staging/$repo/${pkgfile##*/}" || abort echo "Signing package ${pkgfile}..."
gpg --detach-sign --use-agent -u "${PACKAGER}" "${pkgfile}" || abort
fi
sigfile="${pkgfile}.sig"
if [ -f "${sigfile}" ]; then
uploads+=("$sigfile")
elif [[ $SIGNPKG == 'y' ]]; then
abort "Signature ${pkgfile}.sig was not found"
fi
done done
archrelease $repo-${_arch} || abort archrelease $repo-${_arch} || abort
done done
if [[ ${#uploads[*]} -gt 0 ]]; then
echo 'uploading all package and signature files'
rsync $rsyncopts "${uploads[@]}" "$server:staging/$repo/" || abort
fi
if [ "${arch[*]}" == 'any' ]; then if [ "${arch[*]}" == 'any' ]; then
if [ -d ../repos/$repo-i686 -a -d ../repos/$repo-x86_64 ]; then if [ -d ../repos/$repo-i686 -a -d ../repos/$repo-x86_64 ]; then
pushd ../repos/ >/dev/null pushd ../repos/ >/dev/null

View File

@@ -21,19 +21,26 @@ for d in $(find . -type d); do
unset pkgname depends makedepends unset pkgname depends makedepends
. PKGBUILD . PKGBUILD
for dep in "${depends[@]}"; do for dep in "${depends[@]}"; do
# lose the version comaparator, if any # lose the version comparator, if any
depname=${dep%%[<>=]*} depname=${dep%%[<>=]*}
if [ "$depname" = "$match" ]; then if [ "$depname" = "$match" ]; then
echo "$d (depends)" echo "$d (depends)"
fi fi
done done
for dep in "${makedepends[@]}"; do for dep in "${makedepends[@]}"; do
# lose the version comaparator, if any # lose the version comparator, if any
depname=${dep%%[<>=]*} depname=${dep%%[<>=]*}
if [ "$depname" = "$match" ]; then if [ "$depname" = "$match" ]; then
echo "$d (makedepends)" echo "$d (makedepends)"
fi fi
done done
for dep in "${optdepends[@]/:*}"; do
# lose the version comaparator, if any
depname=${dep%%[<>=]*}
if [ "$depname" = "$match" ]; then
echo "$d (optdepends)"
fi
done
fi fi
cd $tld cd $tld
done done

View File

@@ -12,7 +12,6 @@ FORCE='n'
RUN='' RUN=''
MAKEPKG_ARGS='-s --noconfirm' MAKEPKG_ARGS='-s --noconfirm'
REPACK='' REPACK=''
COPY='copy'
WORKDIR=$PWD WORKDIR=$PWD
update_first='0' update_first='0'
@@ -24,6 +23,10 @@ chrootdir=''
APPNAME=$(basename "${0}") APPNAME=$(basename "${0}")
default_copy=$USER
[[ -n $SUDO_USER ]] && default_copy=$SUDO_USER
[[ -z $default_copy || $default_copy = root ]] && default_copy=copy
usage() { usage() {
echo "usage ${APPNAME} [options] -r <chrootdir> [--] [makepkg args]" echo "usage ${APPNAME} [options] -r <chrootdir> [--] [makepkg args]"
echo ' Run this script in a PKGBUILD dir to build a package inside a' echo ' Run this script in a PKGBUILD dir to build a package inside a'
@@ -50,7 +53,8 @@ usage() {
echo '-r <dir> The chroot dir to use' echo '-r <dir> The chroot dir to use'
echo '-I <pkg> Install a package into the working copy of the chroot' echo '-I <pkg> Install a package into the working copy of the chroot'
echo '-l <copy> The directory to use as the working copy of the chroot' echo '-l <copy> The directory to use as the working copy of the chroot'
echo ' Useful for maintain multiple copies Default: copy' echo ' Useful for maintaining multiple copies.'
echo " Default: $default_copy"
exit 1 exit 1
} }
@@ -62,14 +66,16 @@ while getopts 'hcudr:I:l:' arg; do
d) add_to_db=1 ;; d) add_to_db=1 ;;
r) chrootdir="$OPTARG" ;; r) chrootdir="$OPTARG" ;;
I) install_pkg="$OPTARG" ;; I) install_pkg="$OPTARG" ;;
l) COPY="$OPTARG" ;; l) copy="$OPTARG" ;;
*) MAKEPKG_ARGS="$MAKEPKG_ARGS -$arg $OPTARG" ;; *) MAKEPKG_ARGS="$MAKEPKG_ARGS -$arg $OPTARG" ;;
esac esac
done done
#Get rid of trailing / in chrootdir # Canonicalize chrootdir, getting rid of trailing /
[ "$chrootdir" != "/" ] && chrootdir=$(echo $chrootdir | sed 's#/$##') chrootdir=$(readlink -e "$chrootdir")
copydir="$chrootdir/$COPY"
[[ -z $copy ]] && copy=$default_copy
copydir="$chrootdir/$copy"
# Pass all arguments after -- right to makepkg # Pass all arguments after -- right to makepkg
MAKEPKG_ARGS="$MAKEPKG_ARGS ${*:$OPTIND}" MAKEPKG_ARGS="$MAKEPKG_ARGS ${*:$OPTIND}"
@@ -104,11 +110,44 @@ if [ ! -d "$chrootdir/root" ]; then
fi fi
umask 0022 umask 0022
# Lock the chroot we want to use. We'll keep this lock until we exit.
# Note this is the same FD number as in mkarchroot
exec 9>"$copydir.lock"
if ! flock -n 9; then
echo -n "locking chroot copy '$copy'..."
flock 9
echo "done"
fi
if [ ! -d "$copydir" -o "$clean_first" -eq "1" ]; then if [ ! -d "$copydir" -o "$clean_first" -eq "1" ]; then
# Get a read lock on the root chroot to make
# sure we don't clone a half-updated chroot
exec 8>"$chrootdir/root.lock"
if ! flock -sn 8; then
echo -n "locking clean chroot..."
flock -s 8
echo "done"
fi
echo -n 'creating clean working copy...' echo -n 'creating clean working copy...'
mkdir -p "$copydir" use_rsync=false
rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir" if type -P btrfs >/dev/null; then
[ -d $copydir ] && btrfs subvolume delete "$copydir" &>/dev/null
btrfs subvolume snapshot "$chrootdir/root" "$copydir" &>/dev/null || use_rsync=true
else
use_rsync=true
fi
if $use_rsync; then
mkdir -p "$copydir"
rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir"
fi
echo 'done' echo 'done'
# Drop the read lock again
exec 8>&-
fi fi
if [ -n "$install_pkg" ]; then if [ -n "$install_pkg" ]; then
@@ -117,7 +156,7 @@ if [ -n "$install_pkg" ]; then
mkarchroot -r "pacman -U /$pkgname" "$copydir" mkarchroot -r "pacman -U /$pkgname" "$copydir"
ret=$? ret=$?
rm "$copydir/$pkgname" rm "$copydir/$pkgname"
#exit early, we've done all we need to # Exit early, we've done all we need to
exit $ret exit $ret
fi fi
@@ -128,11 +167,11 @@ fi
[ -d "$copydir/build" ] || mkdir "$copydir/build" [ -d "$copydir/build" ] || mkdir "$copydir/build"
if [ "$REPACK" != "1" ]; then if [ "$REPACK" != "1" ]; then
#Remove anything in there UNLESS -R (repack) was passed to makepkg # Remove anything in there UNLESS -R (repack) was passed to makepkg
rm -rf "$copydir/build/"* rm -rf "$copydir/build/"*
fi fi
# read .makpekg.conf even if called via sudo # Read .makepkg.conf even if called via sudo
if [ -n "${SUDO_USER}" ]; then if [ -n "${SUDO_USER}" ]; then
makepkg_conf="/$(eval echo ~${SUDO_USER})/.makepkg.conf" makepkg_conf="/$(eval echo ~${SUDO_USER})/.makepkg.conf"
else else
@@ -160,9 +199,15 @@ if ! grep 'SRCDEST="/srcdest"' "$copydir/etc/makepkg.conf" >/dev/null 2>&1; then
echo 'SRCDEST="/srcdest"' >> "$copydir/etc/makepkg.conf" echo 'SRCDEST="/srcdest"' >> "$copydir/etc/makepkg.conf"
fi fi
[ -z "${MAKEFLAGS}" ] && eval $(grep '^MAKEFLAGS=' /etc/makepkg.conf) [ -z "${MAKEFLAGS}" ] && eval $(grep '^MAKEFLAGS=' /etc/makepkg.conf)
[ -n "${MAKEFLAGS}" ] && echo "MAKEFLAGS='${MAKEFLAGS}'" >> "$copydir/etc/makepkg.conf" if [ -n "${MAKEFLAGS}" ]; then
sed -i '/^MAKEFLAGS=/d' "$copydir/etc/makepkg.conf"
echo "MAKEFLAGS='${MAKEFLAGS}'" >> "$copydir/etc/makepkg.conf"
fi
[ -z "${PACKAGER}" ] && eval $(grep '^PACKAGER=' /etc/makepkg.conf) [ -z "${PACKAGER}" ] && eval $(grep '^PACKAGER=' /etc/makepkg.conf)
[ -n "${PACKAGER}" ] && echo "PACKAGER='${PACKAGER}'" >> "$copydir/etc/makepkg.conf" if [ -n "${PACKAGER}" ]; then
sed -i '/^PACKAGER=/d' "$copydir/etc/makepkg.conf"
echo "PACKAGER='${PACKAGER}'" >> "$copydir/etc/makepkg.conf"
fi
# Set target CARCH as it might be used within the PKGBUILD to select correct sources # Set target CARCH as it might be used within the PKGBUILD to select correct sources
eval $(grep '^CARCH=' "$copydir/etc/makepkg.conf") eval $(grep '^CARCH=' "$copydir/etc/makepkg.conf")
@@ -232,7 +277,7 @@ if mkarchroot -r "/chrootbuild" "$copydir"; then
fi fi
done done
for l in "${copydir}"/build/{namcap,*-{build,package}}.log; do for l in "${copydir}"/build/{namcap,*-{build,package,package_*}}.log; do
[ -f "$l" ] && mv "$l" "${WORKDIR}" [ -f "$l" ] && mv "$l" "${WORKDIR}"
done done
else else

View File

@@ -39,15 +39,16 @@ LDFLAGS="-Wl,--hash-style=gnu -Wl,--as-needed"
# BUILD ENVIRONMENT # BUILD ENVIRONMENT
######################################################################### #########################################################################
# #
# Defaults: BUILDENV=(fakeroot !distcc color !ccache) # Defaults: BUILDENV=(fakeroot !distcc color !ccache check)
# A negated environment option will do the opposite of the comments below. # A negated environment option will do the opposite of the comments below.
# #
#-- fakeroot: Allow building packages as a non-root user #-- fakeroot: Allow building packages as a non-root user
#-- distcc: Use the Distributed C/C++/ObjC compiler #-- distcc: Use the Distributed C/C++/ObjC compiler
#-- color: Colorize output messages #-- color: Colorize output messages
#-- ccache: Use ccache to cache compilation #-- ccache: Use ccache to cache compilation
#-- check: Run the check() function if present in the PKGBUILD
# #
BUILDENV=(fakeroot !distcc color !ccache) BUILDENV=(fakeroot !distcc color !ccache check)
# #
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition, #-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster. #-- specify a space-delimited list of hosts running in the DistCC cluster.
@@ -61,7 +62,7 @@ BUILDENV=(fakeroot !distcc color !ccache)
# Default: OPTIONS=(strip docs libtool emptydirs zipman purge) # Default: OPTIONS=(strip docs libtool emptydirs zipman purge)
# A negated option will do the opposite of the comments below. # A negated option will do the opposite of the comments below.
# #
#-- strip: Strip symbols from binaries/libraries in STRIP_DIRS #-- strip: Strip symbols from binaries/libraries
#-- docs: Save doc directories specified by DOC_DIRS #-- docs: Save doc directories specified by DOC_DIRS
#-- libtool: Leave libtool (.la) files in packages #-- libtool: Leave libtool (.la) files in packages
#-- emptydirs: Leave empty directories in packages #-- emptydirs: Leave empty directories in packages
@@ -82,8 +83,6 @@ STRIP_STATIC="--strip-debug"
MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info}) MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
#-- Doc directories to remove (if !docs is specified) #-- Doc directories to remove (if !docs is specified)
DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc}) DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
#-- Directories to be searched for the strip option (if strip is specified)
STRIP_DIRS=(bin lib sbin usr/{bin,lib,sbin,local/{bin,lib,sbin}} opt/*/{bin,lib,sbin})
#-- Files to be removed from all packages (if purge is specified) #-- Files to be removed from all packages (if purge is specified)
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod) PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)

View File

@@ -39,15 +39,16 @@ LDFLAGS="-Wl,--hash-style=gnu -Wl,--as-needed"
# BUILD ENVIRONMENT # BUILD ENVIRONMENT
######################################################################### #########################################################################
# #
# Defaults: BUILDENV=(fakeroot !distcc color !ccache) # Defaults: BUILDENV=(fakeroot !distcc color !ccache check)
# A negated environment option will do the opposite of the comments below. # A negated environment option will do the opposite of the comments below.
# #
#-- fakeroot: Allow building packages as a non-root user #-- fakeroot: Allow building packages as a non-root user
#-- distcc: Use the Distributed C/C++/ObjC compiler #-- distcc: Use the Distributed C/C++/ObjC compiler
#-- color: Colorize output messages #-- color: Colorize output messages
#-- ccache: Use ccache to cache compilation #-- ccache: Use ccache to cache compilation
#-- check: Run the check() function if present in the PKGBUILD
# #
BUILDENV=(fakeroot !distcc color !ccache) BUILDENV=(fakeroot !distcc color !ccache check)
# #
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition, #-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster. #-- specify a space-delimited list of hosts running in the DistCC cluster.
@@ -61,7 +62,7 @@ BUILDENV=(fakeroot !distcc color !ccache)
# Default: OPTIONS=(strip docs libtool emptydirs zipman purge) # Default: OPTIONS=(strip docs libtool emptydirs zipman purge)
# A negated option will do the opposite of the comments below. # A negated option will do the opposite of the comments below.
# #
#-- strip: Strip symbols from binaries/libraries in STRIP_DIRS #-- strip: Strip symbols from binaries/libraries
#-- docs: Save doc directories specified by DOC_DIRS #-- docs: Save doc directories specified by DOC_DIRS
#-- libtool: Leave libtool (.la) files in packages #-- libtool: Leave libtool (.la) files in packages
#-- emptydirs: Leave empty directories in packages #-- emptydirs: Leave empty directories in packages
@@ -82,8 +83,6 @@ STRIP_STATIC="--strip-debug"
MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info}) MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
#-- Doc directories to remove (if !docs is specified) #-- Doc directories to remove (if !docs is specified)
DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc}) DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
#-- Directories to be searched for the strip option (if strip is specified)
STRIP_DIRS=(bin lib sbin usr/{bin,lib,sbin,local/{bin,lib,sbin}} opt/*/{bin,lib,sbin})
#-- Files to be removed from all packages (if purge is specified) #-- Files to be removed from all packages (if purge is specified)
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod) PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)

View File

@@ -26,7 +26,7 @@ usage() {
echo ' -C <file> Location of a pacman config file' echo ' -C <file> Location of a pacman config file'
echo ' -M <file> Location of a makepkg config file' echo ' -M <file> Location of a makepkg config file'
echo ' -n Do not copy config files into the chroot' echo ' -n Do not copy config files into the chroot'
echo " -c <dir> Set pacman cache. Default: /var/cache/pacman/pkg" echo ' -c <dir> Set pacman cache. Default: /var/cache/pacman/pkg'
echo ' -h This message' echo ' -h This message'
exit $1 exit $1
} }
@@ -68,7 +68,7 @@ shift 1
if [ -z "$cache_dir" ]; then if [ -z "$cache_dir" ]; then
cache_conf=${working_dir}/etc/pacman.conf cache_conf=${working_dir}/etc/pacman.conf
[ ! -f $cache_conf ] && cache_conf=${pac_conf:-/etc/pacman.conf} [ ! -f $cache_conf ] && cache_conf=${pac_conf:-/etc/pacman.conf}
cache_dir=$((grep -m 1 '^CacheDir' $cache_conf || echo 'CacheDir = /var/cache/pacman/pkg') | sed 's/CacheDir\s*=\s*//') cache_dir=$( (grep -m 1 '^CacheDir' $cache_conf || echo 'CacheDir = /var/cache/pacman/pkg') | sed 's/CacheDir\s*=\s*//')
unset cache_conf unset cache_conf
fi fi
@@ -82,8 +82,7 @@ if echo "${host_mirror}" | grep -q 'file://'; then
host_mirror_path=$(echo "${host_mirror}" | sed -E 's#file://(/.*)/\$repo/os/\$arch#\1#g') host_mirror_path=$(echo "${host_mirror}" | sed -E 's#file://(/.*)/\$repo/os/\$arch#\1#g')
fi fi
# {{{ functions # {{{ functions
chroot_mount() { chroot_mount() {
[ -e "${working_dir}/sys" ] || mkdir "${working_dir}/sys" [ -e "${working_dir}/sys" ] || mkdir "${working_dir}/sys"
mount -t sysfs sysfs "${working_dir}/sys" mount -t sysfs sysfs "${working_dir}/sys"
@@ -142,6 +141,20 @@ chroot_umount () {
umount "${working_dir}/${cache_dir}" umount "${working_dir}/${cache_dir}"
[ -n "${host_mirror_path}" ] && umount "${working_dir}/${host_mirror_path}" [ -n "${host_mirror_path}" ] && umount "${working_dir}/${host_mirror_path}"
} }
chroot_lock () {
# Only reopen the FD if it wasn't handed to us
if [ "$(readlink -f /dev/fd/9)" != "${working_dir}.lock" ]; then
exec 9>"${working_dir}.lock"
fi
# Lock the chroot. Take note of the FD number.
if ! flock -n 9; then
echo -n "locking chroot..."
flock 9
echo "done"
fi
}
# }}} # }}}
umask 0022 umask 0022
@@ -154,22 +167,28 @@ if [ "$RUN" != "" ]; then
exit 1 exit 1
fi fi
chroot_lock
chroot_mount chroot_mount
copy_hostconf copy_hostconf
eval chroot "${working_dir}" ${RUN} eval chroot "${working_dir}" ${RUN}
# }}} # }}}
else else
# {{{ build chroot # {{{ build chroot
if [ -e "${working_dir}" -a "${FORCE}" = "n" ]; then if [ -e "${working_dir}" -a "${FORCE}" = "n" ]; then
echo "error: working dir '${working_dir}' already exists - try using -f" echo "error: working dir '${working_dir}' already exists - try using -f"
exit 1 exit 1
fi fi
if { type -P btrfs && btrfs subvolume create "${working_dir}"; } &>/dev/null; then
chmod 0755 "${working_dir}"
fi
mkdir -p "${working_dir}/var/lib/pacman/sync" mkdir -p "${working_dir}/var/lib/pacman/sync"
mkdir -p "${working_dir}/etc/" mkdir -p "${working_dir}/etc/"
chroot_lock
chroot_mount chroot_mount
pacargs="--noconfirm --root=${working_dir} --cachedir=${cache_dir}" pacargs="--noconfirm --root=${working_dir} --cachedir=${cache_dir}"

View File

@@ -17,7 +17,7 @@ HoldPkg = pacman glibc
# If upgrades are available for these packages they will be asked for first # If upgrades are available for these packages they will be asked for first
SyncFirst = pacman SyncFirst = pacman
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#XferCommand = /usr/bin/curl -C - %u > %o #XferCommand = /usr/bin/curl -C - -f %u > %o
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
Architecture = auto Architecture = auto
@@ -33,6 +33,7 @@ Architecture = auto
#ShowSize #ShowSize
#UseDelta #UseDelta
#TotalDownload #TotalDownload
#CheckSpace
# #
# REPOSITORIES # REPOSITORIES

View File

@@ -17,7 +17,7 @@ HoldPkg = pacman glibc
# If upgrades are available for these packages they will be asked for first # If upgrades are available for these packages they will be asked for first
SyncFirst = pacman SyncFirst = pacman
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#XferCommand = /usr/bin/curl -C - %u > %o #XferCommand = /usr/bin/curl -C - -f %u > %o
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
Architecture = auto Architecture = auto
@@ -33,6 +33,7 @@ Architecture = auto
#ShowSize #ShowSize
#UseDelta #UseDelta
#TotalDownload #TotalDownload
#CheckSpace
# #
# REPOSITORIES # REPOSITORIES

View File

@@ -17,7 +17,7 @@ HoldPkg = pacman glibc
# If upgrades are available for these packages they will be asked for first # If upgrades are available for these packages they will be asked for first
SyncFirst = pacman SyncFirst = pacman
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#XferCommand = /usr/bin/curl -C - %u > %o #XferCommand = /usr/bin/curl -C - -f %u > %o
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
Architecture = auto Architecture = auto
@@ -33,6 +33,7 @@ Architecture = auto
#ShowSize #ShowSize
#UseDelta #UseDelta
#TotalDownload #TotalDownload
#CheckSpace
# #
# REPOSITORIES # REPOSITORIES

View File

@@ -17,7 +17,7 @@ HoldPkg = pacman glibc
# If upgrades are available for these packages they will be asked for first # If upgrades are available for these packages they will be asked for first
SyncFirst = pacman SyncFirst = pacman
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#XferCommand = /usr/bin/curl -C - %u > %o #XferCommand = /usr/bin/curl -C - -f %u > %o
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
Architecture = auto Architecture = auto
@@ -33,6 +33,7 @@ Architecture = auto
#ShowSize #ShowSize
#UseDelta #UseDelta
#TotalDownload #TotalDownload
#CheckSpace
# #
# REPOSITORIES # REPOSITORIES

View File

@@ -17,7 +17,7 @@ HoldPkg = pacman glibc
# If upgrades are available for these packages they will be asked for first # If upgrades are available for these packages they will be asked for first
SyncFirst = pacman SyncFirst = pacman
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#XferCommand = /usr/bin/curl -C - %u > %o #XferCommand = /usr/bin/curl -C - -f %u > %o
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
Architecture = auto Architecture = auto
@@ -33,6 +33,7 @@ Architecture = auto
#ShowSize #ShowSize
#UseDelta #UseDelta
#TotalDownload #TotalDownload
#CheckSpace
# #
# REPOSITORIES # REPOSITORIES