Compare commits

..

44 Commits

Author SHA1 Message Date
Pierre Schmitz
aea075d817 Change version to date 2011-11-01 21:36:33 +01:00
Pierre Schmitz
aaa68e49e8 Move common functions to a shared file
* common.sh is included on build time
* most functions are copied from makepkg
2011-11-01 15:33:08 +01:00
Florian Pritz
7c78599a61 add libdepends script
Signed-off-by: Florian Pritz <bluewind@xinu.at>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-10-31 22:57:12 +01:00
Pierre Schmitz
89950ccd70 Create signature for devtools source package 2011-10-31 14:04:35 +01:00
Pierre Schmitz
c238cfafa0 commitpkg: Require signatures for packages 2011-10-31 13:53:43 +01:00
Pierre Schmitz
0e58198f36 commitpkg: Check signature if available 2011-10-31 13:14:16 +01:00
Pierre Schmitz
e07d318c54 commitpkg: Skip signing if signature already exists 2011-10-31 12:53:50 +01:00
Pierre Schmitz
a06ac2451a makechrootpkg: Handle install and changelog file the same way as in commitpkg 2011-10-31 12:43:16 +01:00
Pierre Schmitz
fbdcf6e309 makechrootpkg: Do not export LANG
This is done by /etc/profile.d/locale.sh. By this we also ensure compatibility with systemd.
2011-10-31 12:02:46 +01:00
Pierre Schmitz
01f5cdf33d prepare release 2011-10-29 21:53:36 +02:00
Pierre Schmitz
e333a4da81 temporary workaround until pacman 4.0 moves to [core]
Pacman 3 refuses to work with the pacman 4 SigLevel config entry

Also related: https://bugs.archlinux.org/task/26555
2011-10-29 21:46:19 +02:00
Pierre Schmitz
86045b965e makechrootpkg: Make host pubring.gpg available to check signed sources 2011-10-29 20:37:28 +02:00
Lukas Fleischer
bea69043fb commitpkg: Sync changelog/install check with makepkg(8)
makepkg(8) currently uses a smarter method to extract all changelog and
install files from a PKGBUILD. Sync commitpkg to use the same code (with
small modifications). This also adds support for changelog/install files
that contain a whitespace.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-10-29 13:19:10 +02:00
Pierre Schmitz
521c4ceec3 makechrootpkg: Set the C locale system wide
makepkg sources /etc/profile before calling build(). This will change the
locale from C to en_US.UTF8.
2011-10-29 13:05:09 +02:00
Pierre Schmitz
3a684f667b prepare release 2011-10-14 10:18:56 +02:00
Pierre Schmitz
ae7b13646e Disable pacman's CheckSpace option as it fails within a chroot 2011-10-14 10:16:55 +02:00
Pierre Schmitz
6cf9332896 prepare release 2011-10-14 10:06:33 +02:00
Pierre Schmitz
f10d88e029 Call locale-gen with full path in chroot environment
Thanks to Peter Schuller for this hint
2011-10-14 09:55:28 +02:00
Pierre Schmitz
5c6c2d532e makechrootpkg: Avoid running namcap on non-package file like signatures
We only use .xz or .gz compression for pacakges so we can be more specific and avoid a match of e.g. *.pkg.tar.xz.sig etc.
2011-10-14 09:35:39 +02:00
Pierre Schmitz
b06b9f6010 Merge remote-tracking branch 'cryptocrack/for-pierre' 2011-10-14 09:33:07 +02:00
Pierre Schmitz
9715ddbe9d Apply pacman 4.0 changes to our copies of makepkg.conf and pacman.conf
Note: Signature checks are disabled for now until we provide a keyring package.
2011-10-14 09:09:46 +02:00
Lukas Fleischer
a0c6bf4556 Honor TMPDIR environment variable
Replace all mktemp(1) invocations that hardcode "/tmp" with `mktemp
--tmpdir` and change templates accordingly.

Note that "--tmpdir" is GNU-ish which is okay given that we currently
support Arch Linux only anyway.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-13 11:10:09 +02:00
Lukas Fleischer
dcb80e7b5c finddeps: Unset optdepends
The optdepends array should be unset before sourcing the PKGBUILD to avoid
dangling optional depends.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-13 08:23:36 +02:00
Lukas Fleischer
84b789f760 finddeps: Use read builtin to iterate over packages
Using parameter substitution might result in unpredictable behaviour
when directories contain whitespaces here. The read shell builtin is the
proper way to read single lines.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-13 08:23:35 +02:00
Lukas Fleischer
8edb443c12 finddeps: Remove redundant cd(1)
Source the PKGBUILD using the correct path (relative to our base
directory) instead of using cd(1) to switch to the ABS base directory
first and to the package directory afterwards.

This is very useful when trying to track errors, also:

    $ ~/src/devtools/finddeps libdaq
    ./community/snort (depends)
    PKGBUILD: line 17: ruby: command not found
    PKGBUILD: line 19: [: =: unary operator expected

Versus:

    $ ~/src/devtools/finddeps libdaq
    ./community/snort (depends)
    ./community/ruby-pkgconfig/PKGBUILD: line 17: ruby: command not found
    ./community/lmms/PKGBUILD: line 19: [: =: unary operator expected

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-13 08:23:34 +02:00
Lukas Fleischer
4800be25c2 finddeps: Proper quoting, use double brackets
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-13 08:23:33 +02:00
Lukas Fleischer
fe2040cd14 archrelease: Fix SVN error when repository is empty
If trash is empty, `svn rm -q "${trash[@]}"` fails with:

    svn: Try 'svn help' for more info and then
    svn: Not enough arguments provided

This doesn't result in any further malfunction but is kind of confusing
and unexpected. Skipping `svn rm` on an empty trash fixes this.

Reported-by: Alexander Rødseth <rodseth@gmail.com>
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-12 16:53:08 +02:00
Allan McRae
a991c9a71f Always log builds in makechrootpkg
It is very helpful to always log the build output in makechrootpkg
so pass "-L" as a standard option to makepkg.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-07 21:53:04 +02:00
Dan McGee
022cd3d523 archrelease: call 'svn copy' once for all files
We don't need to invoke svn copy on each file; it accepts multiple
arguments. This cut Allan's time releasing one patch-friendly package
from 5 minutes to 2 minutes.

Signed-off-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-07 21:53:04 +02:00
Jan Alexander Steffens (heftig)
a790c39c7d makechrootpkg: If chroot is missing, exit instead of usage
I'm not sure why this was handled differently than the other
error conditions.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-07 21:53:04 +02:00
Jan Alexander Steffens (heftig)
e66a1f3cd8 makechrootpkg: Add option to explicitly run namcap
Installs namcap if needed, *after* building the package,
contrary to the former way of having to have namcap installed,
e.g. via makedepends.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-07 21:53:03 +02:00
Jan Alexander Steffens (heftig)
7a9f808a0f makechrootpkg: Source PKGBUILD only once
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-07 21:53:03 +02:00
Jan Alexander Steffens (heftig)
b9070bf0b8 makechrootpkg: Use nullglob
Use nullglob instead of checking for existence. If the glob doesn't
match any files, it will be removed instead of staying unexpanded.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-07 21:53:03 +02:00
Jan Alexander Steffens (heftig)
1df6799747 makechrootpkg: Always set PKGDEST and SRCDEST
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-07 21:53:03 +02:00
Jan Alexander Steffens (heftig)
e41deee5e5 makechrootpkg: Replace $workdir with . ($PWD)
$workdir is never used when we change directory, so it's superfluous.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-07 21:53:03 +02:00
Jan Alexander Steffens (heftig)
004ced2a33 makechrootpkg: Eliminate appname, only used once
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-07 21:53:03 +02:00
Jan Alexander Steffens (heftig)
733668f4cc makechrootpkg: Bashify syntax
No functional change. Eliminates unused variables RUN and FORCE.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-07 21:53:03 +02:00
Lukas Fleischer
21daec135a Makefile: Add a cleanup target
Allows for using `make clean` to remove any output files generated by
make(1).

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-07 21:53:02 +02:00
Lukas Fleischer
46c4def073 Support non-standard install locations
This build system overhaul allows for adding (define-style) macros to
our scripts. All source files are now suffixed with ".in" to clarify
that they might contain unprocessed defines. The Makefile provides a new
rule to preprocess source files and generate proper output scripts.

Also, add a "@pkgdatadir@" define (as used in GNU Autotools) and use it
instead of hardcoded paths to "/usr/share/devtools" everywhere. We
missed this when adding PREFIX support to the build system in commit
35fc83ce7d.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-10-07 21:53:02 +02:00
Lukas Fleischer
142b032212 zsh_completion: Fix package completion
Make use of _devtools_completions_all_packages() instead of using
_devtools_completions_installed_packages(). The latter was removed
during an earlier review of the patch adding ZSH completion (now
6350ec04 in master) but we forgot to change two references.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-08-29 13:59:55 +02:00
Lukas Fleischer
5f8458f197 commitpkg: Avoid unnecessary use of basename(1)
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-08-29 13:58:50 +02:00
Lukas Fleischer
50c311c261 archbuild: Avoid unnecessary use of basename(1)
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-08-29 13:58:49 +02:00
Lukas Fleischer
ef10f6c799 archbuild: Proper quoting, use double brackets
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-08-29 13:58:49 +02:00
Lukas Fleischer
d70918d18a archbuild: Use array for base packages
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-08-29 13:58:49 +02:00
26 changed files with 881 additions and 569 deletions

14
.gitignore vendored
View File

@@ -1,2 +1,16 @@
*~ *~
devtools-*.tar.gz devtools-*.tar.gz
archbuild
archco
archrelease
archrm
bash_completion
checkpkg
commitpkg
finddeps
lddd
makechrootpkg
mkarchroot
rebuildpkgs
zsh_completion
find-libdeps

View File

@@ -1,4 +1,4 @@
V=0.9.27 V=20111101
PREFIX = /usr/local PREFIX = /usr/local
@@ -11,7 +11,8 @@ BINPROGS = \
archbuild \ archbuild \
lddd \ lddd \
finddeps \ finddeps \
rebuildpkgs rebuildpkgs \
find-libdeps
SBINPROGS = \ SBINPROGS = \
mkarchroot \ mkarchroot \
@@ -47,7 +48,18 @@ ARCHBUILD_LINKS = \
multilib-build \ multilib-build \
multilib-testing-build multilib-testing-build
all: all: $(BINPROGS) $(SBINPROGS) bash_completion zsh_completion
edit = sed -e "s|@pkgdatadir[@]|$(DESTDIR)$(PREFIX)/share/devtools|g"
%: %.in
@echo "GEN $@"
@m4 -P $@.in | $(edit) >$@
@chmod a-w "$@"
@chmod +x "$@"
clean:
rm -f $(BINPROGS) $(SBINPROGS) bash_completion zsh_completion
install: install:
install -dm0755 $(DESTDIR)$(PREFIX)/bin install -dm0755 $(DESTDIR)$(PREFIX)/bin
@@ -58,6 +70,7 @@ install:
install -m0644 ${CONFIGFILES} $(DESTDIR)$(PREFIX)/share/devtools install -m0644 ${CONFIGFILES} $(DESTDIR)$(PREFIX)/share/devtools
for l in ${COMMITPKG_LINKS}; do ln -sf commitpkg $(DESTDIR)$(PREFIX)/bin/$$l; done for l in ${COMMITPKG_LINKS}; do ln -sf commitpkg $(DESTDIR)$(PREFIX)/bin/$$l; done
for l in ${ARCHBUILD_LINKS}; do ln -sf archbuild $(DESTDIR)$(PREFIX)/bin/$$l; done for l in ${ARCHBUILD_LINKS}; do ln -sf archbuild $(DESTDIR)$(PREFIX)/bin/$$l; done
ln -sf find-libdeps $(DESTDIR)$(PREFIX)/bin/find-libprovides
install -Dm0644 bash_completion $(DESTDIR)/etc/bash_completion.d/devtools install -Dm0644 bash_completion $(DESTDIR)/etc/bash_completion.d/devtools
install -Dm0644 zsh_completion $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools install -Dm0644 zsh_completion $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools
ln -sf archco $(DESTDIR)$(PREFIX)/bin/communityco ln -sf archco $(DESTDIR)$(PREFIX)/bin/communityco
@@ -71,11 +84,13 @@ uninstall:
rm $(DESTDIR)/etc/bash_completion.d/devtools rm $(DESTDIR)/etc/bash_completion.d/devtools
rm $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools rm $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools
rm -f $(DESTDIR)$(PREFIX)/bin/communityco rm -f $(DESTDIR)$(PREFIX)/bin/communityco
rm -f $(DESTDIR)$(PREFIX)/bin/find-libprovides
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
gpg --detach-sign --use-agent devtools-$(V).tar.gz
upload: upload:
scp devtools-$(V).tar.gz gerolde.archlinux.org:/srv/ftp/other/devtools/ scp devtools-$(V).tar.gz devtools-$(V).tar.gz.sig gerolde.archlinux.org:/srv/ftp/other/devtools/
.PHONY: all install uninstall dist upload .PHONY: all clean install uninstall dist upload

View File

@@ -1,67 +0,0 @@
#!/bin/bash
base_packages='base base-devel sudo'
cmd="$(basename "${0%-build}")"
if [ "${cmd%-*}" == 'multilib' ]; then
repo="${cmd}"
arch='x86_64'
base_packages+=' multilib-devel'
else
repo=${cmd%-*}
arch=${cmd##*-}
fi
chroots='/var/tmp/archbuild'
clean_first=false
usage() {
echo "usage $(basename "$0")"
echo ' -c Recreate the chroot before building'
echo ' -r <dir> Create chroots in this directory'
exit 1
}
while getopts 'cr:' arg; do
case "${arg}" in
c) clean_first=true ;;
r) chroots="$OPTARG" ;;
*) usage ;;
esac
done
if [ "$EUID" != '0' ]; then
echo 'This script must be run as root.'
exit 1
fi
if ${clean_first} || [ ! -d "${chroots}/${repo}-${arch}" ]; then
echo "Creating chroot for [${repo}] (${arch})..."
for copy in ${chroots}/${repo}-${arch}/*; do
[[ -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 \
-M /usr/share/devtools/makepkg-${arch}.conf \
${chroots}/${repo}-${arch}/root \
${base_packages}
else
setarch ${arch} mkarchroot \
-u \
${chroots}/${repo}-${arch}/root
fi
echo "Building in chroot for [${repo}] (${arch})..."
setarch ${arch} makechrootpkg -c -r ${chroots}/${repo}-${arch}

77
archbuild.in Normal file
View File

@@ -0,0 +1,77 @@
#!/bin/bash
m4_include(lib/common.sh)
# FIXME: temporary added curl until pacman 4.0 moves to [core]
base_packages=(base base-devel sudo curl)
cmd="${0##*/}"
if [[ "${cmd%%-*}" == 'multilib' ]]; then
repo="${cmd%-build}"
arch='x86_64'
base_packages+=(multilib-devel)
else
tag="${cmd%-build}"
repo=${tag%-*}
arch=${tag##*-}
fi
chroots='/var/tmp/archbuild'
clean_first=false
usage() {
echo "usage $cmd"
echo ' -c Recreate the chroot before building'
echo ' -r <dir> Create chroots in this directory'
exit 1
}
while getopts 'cr:' arg; do
case "${arg}" in
c) clean_first=true ;;
r) chroots="$OPTARG" ;;
*) usage ;;
esac
done
if [[ "$EUID" != '0' ]]; then
die 'This script must be run as root.'
fi
if ${clean_first} || [[ ! -d "${chroots}/${repo}-${arch}" ]]; then
msg "Creating chroot for [${repo}] (${arch})..."
for copy in "${chroots}/${repo}-${arch}"/*; do
[[ -d $copy ]] || continue
msg2 "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 "@pkgdatadir@/pacman-${repo}.conf" \
-M "@pkgdatadir@/makepkg-${arch}.conf" \
"${chroots}/${repo}-${arch}/root" \
"${base_packages[@]}"
# FIXME: temporary workaround until pacman 4.0 moves to [core]
case $repo in
core|extra|community|multilib)
sed -r '/^SigLevel.*/d' -i "${chroots}/${repo}-${arch}/root/etc/pacman.conf"
;;
esac
else
setarch ${arch} mkarchroot \
-u \
"${chroots}/${repo}-${arch}/root"
fi
msg "Building in chroot for [${repo}] (${arch})..."
setarch "${arch}" makechrootpkg -c -r "${chroots}/${repo}-${arch}"

5
archco → archco.in Executable file → Normal file
View File

@@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
m4_include(lib/common.sh)
scriptname=${0##*/} scriptname=${0##*/}
if [ "$1" = '' ]; then if [ "$1" = '' ]; then
@@ -13,8 +15,7 @@ case $scriptname in
communityco) communityco)
SVNURL="svn+ssh://aur.archlinux.org/srv/svn-packages";; SVNURL="svn+ssh://aur.archlinux.org/srv/svn-packages";;
*) *)
echo "error: couldn't find svn url for $scriptname" die "error: couldn't find svn url for $scriptname"
exit 1
;; ;;
esac esac

31
archrelease → archrelease.in Executable file → Normal file
View File

@@ -1,18 +1,16 @@
#!/bin/bash #!/bin/bash
abort() { m4_include(lib/common.sh)
echo ${1:-'archrelease: Cancelled'}
exit 1
}
if [[ -z $1 ]]; then if [[ -z $1 ]]; then
abort 'Usage: archrelease <repo>...' echo 'Usage: archrelease <repo>...'
exit 1
fi fi
# TODO: validate repo is really repo-arch # TODO: validate repo is really repo-arch
if [[ ! -f PKGBUILD ]]; then if [[ ! -f PKGBUILD ]]; then
abort 'archrelease: PKGBUILD not found' die 'archrelease: PKGBUILD not found'
fi fi
trunk=${PWD##*/} trunk=${PWD##*/}
@@ -21,24 +19,24 @@ trunk=${PWD##*/}
# such as 'gnome-unstable' # such as 'gnome-unstable'
IFS='/' read -r -d '' -a parts <<< "$PWD" IFS='/' read -r -d '' -a parts <<< "$PWD"
if [[ "${parts[@]:(-2):1}" == "repos" ]]; then if [[ "${parts[@]:(-2):1}" == "repos" ]]; then
abort 'archrelease: Should not be in repos dir (try from trunk/)' die 'archrelease: Should not be in repos dir (try from trunk/)'
fi fi
unset parts unset parts
if [[ $(svn status -q) ]]; then if [[ $(svn status -q) ]]; then
abort 'archrelease: You have not committed your changes yet!' die 'archrelease: You have not committed your changes yet!'
fi fi
pushd .. >/dev/null pushd .. >/dev/null
IFS=$'\n' read -r -d '' -a known_files < <(svn ls -r HEAD "$trunk") IFS=$'\n' read -r -d '' -a known_files < <(svn ls -r HEAD "$trunk")
for file in "${known_files[@]}"; do for file in "${known_files[@]}"; do
if [[ ${file:(-1)} = '/' ]]; then if [[ ${file:(-1)} = '/' ]]; then
abort "archrelease: subdirectories are not supported in package directories!" die "archrelease: subdirectories are not supported in package directories!"
fi fi
done done
for tag in "$@"; do for tag in "$@"; do
echo -n "copying ${trunk} to ${tag}..." stat_busy "copying ${trunk} to ${tag}"
if [[ -d repos/$tag ]]; then if [[ -d repos/$tag ]]; then
declare -a trash declare -a trash
@@ -46,22 +44,21 @@ for tag in "$@"; do
while read -r file; do while read -r file; do
trash+=("repos/$tag/$file") trash+=("repos/$tag/$file")
done < <(svn ls "repos/$tag") done < <(svn ls "repos/$tag")
svn rm -q "${trash[@]}" [[ $trash ]] && svn rm -q "${trash[@]}"
else else
mkdir -p "repos/$tag" mkdir -p "repos/$tag"
svn add --parents -q "repos/$tag" svn add --parents -q "repos/$tag"
fi fi
for file in "${known_files[@]}"; do # copy all files at once from trunk to the subdirectory in repos/
svn copy -q -r HEAD "$trunk/$file" "repos/$tag/" svn copy -q -r HEAD ${known_files[@]/#/$trunk/} "repos/$tag/"
done
echo 'done' stat_done
done done
echo -n "releasing package..." stat_busy "releasing package"
printf -v tag_list ", %s" "$@"; tag_list="${tag_list#, }" printf -v tag_list ", %s" "$@"; tag_list="${tag_list#, }"
svn commit -q -m "archrelease: copy ${trunk} to $tag_list" || abort svn commit -q -m "archrelease: copy ${trunk} to $tag_list" || abort
echo 'done' stat_done
popd >/dev/null popd >/dev/null

2
archrm → archrm.in Executable file → Normal file
View File

@@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
m4_include(lib/common.sh)
if [ "$1" = '' ]; then if [ "$1" = '' ]; then
echo 'Usage: archrm <path to checkout>' echo 'Usage: archrm <path to checkout>'
exit 1 exit 1

29
checkpkg → checkpkg.in Executable file → Normal file
View File

@@ -1,11 +1,12 @@
#!/bin/bash #!/bin/bash
m4_include(lib/common.sh)
# 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'
else else
echo '/etc/makepkg.conf not found!' die '/etc/makepkg.conf not found!'
exit 1
fi fi
# Source user-specific makepkg.conf overrides # Source user-specific makepkg.conf overrides
@@ -14,8 +15,7 @@ if [[ -r ~/.makepkg.conf ]]; then
fi fi
if [[ ! -f PKGBUILD ]]; then if [[ ! -f PKGBUILD ]]; then
echo 'This must be run in the directory of a built package.' die 'This must be run in the directory of a built package.'
exit 1
fi fi
. PKGBUILD . PKGBUILD
@@ -24,37 +24,30 @@ if [[ $arch == 'any' ]]; then
fi fi
STARTDIR=$(pwd) STARTDIR=$(pwd)
TEMPDIR=$(mktemp -d /tmp/checkpkg-script.XXXX) TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX)
cd "$TEMPDIR" cd "$TEMPDIR"
for _pkgname in "${pkgname[@]}"; do for _pkgname in "${pkgname[@]}"; do
if [[ -z ${epoch} ]] ; then pkgfile=${_pkgname}-$(get_full_version $_pkgname)-${CARCH}${PKGEXT}
pkgfile=${_pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}
else
pkgfile=${_pkgname}-${epoch}:${pkgver}-${pkgrel}-${CARCH}${PKGEXT}
fi
if [[ -f "$STARTDIR/$pkgfile" ]]; then if [[ -f "$STARTDIR/$pkgfile" ]]; then
ln -s "$STARTDIR/$pkgfile" "$pkgfile" ln -s "$STARTDIR/$pkgfile" "$pkgfile"
elif [[ -f "$PKGDEST/$pkgfile" ]]; then elif [[ -f "$PKGDEST/$pkgfile" ]]; then
ln -s "$PKGDEST/$pkgfile" "$pkgfile" ln -s "$PKGDEST/$pkgfile" "$pkgfile"
else else
echo "File \"$pkgfile\" doesn't exist" die "File \"$pkgfile\" doesn't exist"
exit 1
fi fi
pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$_pkgname") pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$_pkgname")
if [[ $? -ne 0 ]]; then if [[ $? -ne 0 ]]; then
echo "Couldn't download previous package for $_pkgname." die "Couldn't download previous package for $_pkgname."
exit 1
fi fi
oldpkg=${pkgurl##*://*/} oldpkg=${pkgurl##*://*/}
if [[ ${oldpkg##*/} = ${pkgfile##*/} ]]; then if [[ ${oldpkg##*/} = ${pkgfile##*/} ]]; then
echo "The built package ($_pkgname) is the one in the repo right now!" die "The built package ($_pkgname) is the one in the repo right now!"
exit 1
fi fi
if [[ ! -f $oldpkg ]]; then if [[ ! -f $oldpkg ]]; then
@@ -83,8 +76,8 @@ for _pkgname in "${pkgname[@]}"; do
done done
cd .. cd ..
else else
echo "No soname differences for $_pkgname." msg "No soname differences for $_pkgname."
fi fi
done done
echo "Files saved to $TEMPDIR" msg "Files saved to $TEMPDIR"

105
commitpkg → commitpkg.in Executable file → Normal file
View File

@@ -1,40 +1,22 @@
#!/bin/bash #!/bin/bash
abort() { m4_include(lib/common.sh)
echo ${1:-'Cancelled'}
exit 1
}
getpkgfile() { getpkgfile() {
if [[ ${#} -ne 1 ]]; then if [[ ${#} -ne 1 ]]; then
echo 'ERROR: No canonical package found!' >&2 die 'ERROR: No canonical package found!'
exit 1
elif [ ! -f "${1}" ]; then elif [ ! -f "${1}" ]; then
echo "ERROR: Package ${1} not found!" >&2 die "ERROR: Package ${1} not found!"
exit 1
fi fi
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'
else else
abort '/etc/makepkg.conf not found!' die '/etc/makepkg.conf not found!'
fi fi
# Source user-specific makepkg.conf overrides # Source user-specific makepkg.conf overrides
@@ -42,10 +24,10 @@ if [ -r ~/.makepkg.conf ]; then
. ~/.makepkg.conf . ~/.makepkg.conf
fi fi
cmd=$(basename "$0") cmd=${0##*/}
if [ ! -f PKGBUILD ]; then if [ ! -f PKGBUILD ]; then
abort 'No PKGBUILD file' die 'No PKGBUILD file'
fi fi
. PKGBUILD . PKGBUILD
@@ -54,7 +36,7 @@ pkgbase=${pkgbase:-$pkgname}
case "$cmd" in case "$cmd" in
commitpkg) commitpkg)
if [ $# -eq 0 ]; then if [ $# -eq 0 ]; then
abort 'usage: commitpkg <reponame> [-l limit] [-a arch] [commit message]' die 'usage: commitpkg <reponame> [-l limit] [-a arch] [commit message]'
fi fi
repo="$1" repo="$1"
shift shift
@@ -63,7 +45,7 @@ case "$cmd" in
repo="${cmd%pkg}" repo="${cmd%pkg}"
;; ;;
*) *)
abort 'usage: commitpkg <reponame> [-l limit] [-a arch] [commit message]' die 'usage: commitpkg <reponame> [-l limit] [-a arch] [commit message]'
;; ;;
esac esac
@@ -74,26 +56,25 @@ case "$repo" in
server='aur.archlinux.org' ;; server='aur.archlinux.org' ;;
*) *)
server='gerolde.archlinux.org' server='gerolde.archlinux.org'
echo "Non-standard repository $repo in use, defaulting to server $server" ;; msg "Non-standard repository $repo in use, defaulting to server $server" ;;
esac 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
if [[ $s != *://* ]] && ! svn status -v "$s" | grep -q '^[ AMRX~]'; then if [[ $s != *://* ]] && ! svn status -v "$s" | grep -q '^[ AMRX~]'; then
abort "$s is not under version control" die "$s is not under version control"
fi fi
done 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) while read -r file; do
for file in $filelist; do
# evaluate any bash variables used # evaluate any bash variables used
eval file=${file} eval file=\"$(sed 's/^\(['\''"]\)\(.*\)\1$/\2/' <<< "$file")\"
if ! svn status -v "${file}" | grep -q '^[ AMRX~]'; then if ! svn status -v "${file}" | grep -q '^[ AMRX~]'; then
abort "${file} is not under version control" die "${file} is not under version control"
fi fi
done done < <(sed -n "s/^[[:space:]]*$i=//p" PKGBUILD)
done 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
@@ -102,20 +83,19 @@ while getopts ':l:a:' flag; do
case $flag in case $flag in
l) rsyncopts+=("--bwlimit=$2") ;; l) rsyncopts+=("--bwlimit=$2") ;;
a) commit_arch=$2 ;; a) commit_arch=$2 ;;
:) echo "option requires an argument -- '$OPTARG'" >&2 :) die "option requires an argument -- '$OPTARG'" ;;
exit 1 ;; \?) die "invalid option -- '$OPTARG'" ;;
\?) echo "invalid option -- '$OPTARG'" >&2
exit 1 ;;
esac esac
done done
shift $(( OPTIND - 1 )) shift $(( OPTIND - 1 ))
if [ -n "$(svn status -q)" ]; then if [ -n "$(svn status -q)" ]; then
echo -n 'committing changes to trunk...'
msgtemplate="upgpkg: $pkgbase $(get_full_version ${epoch:-0} $pkgver $pkgrel)"$'\n\n'
if [ -n "$1" ]; then if [ -n "$1" ]; then
svn commit -q -m "${msgtemplate}${1}" || abort stat_busy 'committing changes to trunk'
svn commit -q -m "${msgtemplate}${1}" || die
stat_done
else else
msgtemplate="upgpkg: $pkgbase $(get_full_version)"$'\n\n'
msgfile="$(mktemp)" msgfile="$(mktemp)"
echo "$msgtemplate" > "$msgfile" echo "$msgtemplate" > "$msgfile"
if [ -n "$SVN_EDITOR" ]; then if [ -n "$SVN_EDITOR" ]; then
@@ -127,23 +107,24 @@ if [ -n "$(svn status -q)" ]; then
else else
vi "$msgfile" vi "$msgfile"
fi fi
[ -s "$msgfile" ] || abort [ -s "$msgfile" ] || die
svn commit -q -F "$msgfile" || abort stat_busy 'committing changes to trunk'
svn commit -q -F "$msgfile" || die
unlink "$msgfile" unlink "$msgfile"
stat_done
fi fi
echo 'done'
fi fi
declare -a uploads declare -a uploads
for _arch in ${arch[@]}; do for _arch in ${arch[@]}; do
if [ -n "$commit_arch" ] && [ "${_arch}" != "$commit_arch" ]; then if [ -n "$commit_arch" ] && [ "${_arch}" != "$commit_arch" ]; then
echo "skipping ${_arch}" warning "skipping ${_arch}"
continue continue
fi fi
for _pkgname in ${pkgname[@]}; do for _pkgname in ${pkgname[@]}; do
fullver=$(get_full_version ${epoch:-0} $pkgver $pkgrel) fullver=$(get_full_version $_pkgname)
pkgfile=$(getpkgfile "$_pkgname-$fullver-${_arch}".pkg.tar.?z 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) pkgdestfile=$(getpkgfile "$PKGDEST/$_pkgname-$fullver-${_arch}".pkg.tar.?z 2>/dev/null)
@@ -152,56 +133,58 @@ for _arch in ${arch[@]}; do
elif [ -f "$pkgdestfile" ]; then elif [ -f "$pkgdestfile" ]; then
pkgfile="$pkgdestfile" pkgfile="$pkgdestfile"
else else
echo "skipping ${_arch}" warning "skipping ${_arch}"
continue 2 continue 2
fi fi
uploads+=("$pkgfile") uploads+=("$pkgfile")
if [[ $SIGNPKG == 'y' ]]; then sigfile="${pkgfile}.sig"
echo "Signing package ${pkgfile}..." if [[ $SIGNPKG == 'y' ]] && [ ! -f "${sigfile}" ]; then
msg "Signing package ${pkgfile}..."
if [[ -n $GPGKEY ]]; then if [[ -n $GPGKEY ]]; then
SIGNWITHKEY="-u ${GPGKEY}" SIGNWITHKEY="-u ${GPGKEY}"
fi fi
gpg --detach-sign --use-agent ${SIGNWITHKEY} "${pkgfile}" || abort gpg --detach-sign --use-agent ${SIGNWITHKEY} "${pkgfile}" || die
fi fi
sigfile="${pkgfile}.sig"
if [ -f "${sigfile}" ]; then if [ -f "${sigfile}" ]; then
if ! gpg --verify "$sigfile" >/dev/null 2>&1; then
die "Signature ${pkgfile}.sig is incorrect!"
fi
uploads+=("$sigfile") uploads+=("$sigfile")
elif [[ $SIGNPKG == 'y' ]]; then else
abort "Signature ${pkgfile}.sig was not found" die "Signature ${pkgfile}.sig was not found"
fi fi
done done
done done
if [[ -n $commit_arch ]]; then if [[ -n $commit_arch ]]; then
archrelease "$repo-$commit_arch" || abort archrelease "$repo-$commit_arch" || die
else else
archrelease "${arch[@]/#/$repo-}" || abort archrelease "${arch[@]/#/$repo-}" || die
fi fi
if [[ ${#uploads[*]} -gt 0 ]]; then if [[ ${#uploads[*]} -gt 0 ]]; then
echo 'uploading all package and signature files' msg 'uploading all package and signature files'
rsync "${rsyncopts[@]}" "${uploads[@]}" "$server:staging/$repo/" || abort rsync "${rsyncopts[@]}" "${uploads[@]}" "$server:staging/$repo/" || die
fi 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
echo "removing $repo-i686 and $repo-x86_64..." stat_busy "removing $repo-i686 and $repo-x86_64"
svn rm $repo-i686 svn rm $repo-i686
svn rm $repo-x86_64 svn rm $repo-x86_64
svn commit -q -m "removed $repo-i686 and $repo-x86_64 for $pkgname" svn commit -q -m "removed $repo-i686 and $repo-x86_64 for $pkgname"
echo 'done' stat_done
popd >/dev/null popd >/dev/null
fi fi
else else
if [ -d ../repos/$repo-any ]; then if [ -d ../repos/$repo-any ]; then
pushd ../repos/ >/dev/null pushd ../repos/ >/dev/null
echo "removing $repo-any..." stat_busy "removing $repo-any"
svn rm $repo-any svn rm $repo-any
svn commit -q -m "removed $repo-any for $pkgname" svn commit -q -m "removed $repo-any for $pkgname"
echo 'done' stat_done
popd >/dev/null popd >/dev/null
fi fi
fi fi

86
find-libdeps.in Normal file
View File

@@ -0,0 +1,86 @@
#!/bin/bash
m4_include(lib/common.sh)
set -e
IGNORE_INTERNAL=0
if [[ $1 = "--ignore-internal" ]]; then
IGNORE_INTERNAL=1
shift
fi
script_mode=${0##*/find-lib}
case $script_mode in
deps|provides) true;;
*) die "unknown mode $script_mode" ;;
esac
if [[ -z $1 ]]; then
echo "${0##*/} [options] <package file|extracted package dir>"
echo "Options:"
echo " --ignore-internal ignore internal libraries"
exit 1
fi
if [[ -d $1 ]]; then
pushd $1 >/dev/null
else
setup_workdir
case ${script_mode} in
deps) bsdtar -C $WORKDIR -xf "$1";;
provides) bsdtar -C $WORKDIR -xf "$1" --include="*.so*";;
esac
pushd $WORKDIR >/dev/null
fi
process_sofile() {
# extract the library name: libfoo.so
soname="${sofile%%\.so\.*}.so"
# extract the major version: 1
soversion="${sofile##*\.so\.}"
if [[ "$soversion" = "$sofile" ]] && (($IGNORE_INTERNAL)); then
continue
fi
if ! in_array "${soname}=${soversion}-${soarch}" ${soobjects[@]}; then
# libfoo.so=1-64
echo "${soname}=${soversion}-${soarch}"
soobjects=(${soobjects[@]} "${soname}=${soversion}-${soarch}")
fi
}
case $script_mode in
deps) find_args="-perm -u+x";;
provides) find_args="-name *.so*";;
esac
find . -type f $find_args | while read filename; do
if [[ $script_mode = "provides" ]]; then
# ignore if we don't have a shared object
if ! LC_ALL=C readelf -h "$filename" 2>/dev/null | grep -q '.*Type:.*DYN (Shared object file).*'; then
continue
fi
fi
# get architecture of the file; if soarch is empty it's not an ELF binary
soarch=$(LC_ALL=C readelf -h "$filename" 2>/dev/null | sed -n 's/.*Class.*ELF\(32\|64\)/\1/p')
[ -n "$soarch" ] || continue
if [[ $script_mode = "provides" ]]; then
# get the string binaries link to: libfoo.so.1.2 -> libfoo.so.1
sofile=$(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -n 's/.*Library soname: \[\(.*\)\].*/\1/p')
[ -z "$sofile" ] && sofile="${filename##*/}"
process_sofile
elif [[ $script_mode = "deps" ]]; then
# process all libraries needed by the binary
for sofile in $(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p'); do
process_sofile
done
fi
done
popd >/dev/null

33
finddeps → finddeps.in Executable file → Normal file
View File

@@ -3,44 +3,37 @@
# finddeps - find packages that depend on a given depname # finddeps - find packages that depend on a given depname
# #
if [ "$1" = '' ]; then m4_include(lib/common.sh)
match=$1
if [[ -z $match ]]; then
echo 'usage: finddeps <depname>' echo 'usage: finddeps <depname>'
echo '' echo ''
echo 'Find packages that depend on a given depname.' echo 'Find packages that depend on a given depname.'
echo 'Run this script from the top-level directory of your ABS tree.' echo 'Run this script from the top-level directory of your ABS tree.'
echo '' echo ''
exit 0 exit 1
fi fi
match=$1 find . -type d | while read d; do
tld=$(pwd) if [[ -f "$d/PKGBUILD" ]]; then
unset pkgname depends makedepends optdepends
for d in $(find . -type d); do . "$d/PKGBUILD"
cd $d
if [ -f PKGBUILD ]; then
unset pkgname depends makedepends
. PKGBUILD
for dep in "${depends[@]}"; do for dep in "${depends[@]}"; do
# lose the version comparator, if any # lose the version comparator, if any
depname=${dep%%[<>=]*} depname=${dep%%[<>=]*}
if [ "$depname" = "$match" ]; then [[ $depname = $match ]] && echo "$d (depends)"
echo "$d (depends)"
fi
done done
for dep in "${makedepends[@]}"; do for dep in "${makedepends[@]}"; do
# lose the version comparator, if any # lose the version comparator, if any
depname=${dep%%[<>=]*} depname=${dep%%[<>=]*}
if [ "$depname" = "$match" ]; then [[ $depname = $match ]] && echo "$d (makedepends)"
echo "$d (makedepends)"
fi
done done
for dep in "${optdepends[@]/:*}"; do for dep in "${optdepends[@]/:*}"; do
# lose the version comaparator, if any # lose the version comaparator, if any
depname=${dep%%[<>=]*} depname=${dep%%[<>=]*}
if [ "$depname" = "$match" ]; then [[ $depname = $match ]] && echo "$d (optdepends)"
echo "$d (optdepends)"
fi
done done
fi fi
cd $tld
done done

10
lddd → lddd.in Executable file → Normal file
View File

@@ -3,18 +3,20 @@
# lddd - find broken library links on your machine # lddd - find broken library links on your machine
# #
m4_include(lib/common.sh)
ifs=$IFS ifs=$IFS
IFS="${IFS}:" IFS="${IFS}:"
libdirs="/lib /usr/lib /usr/local/lib $(cat /etc/ld.so.conf.d/*)" libdirs="/lib /usr/lib /usr/local/lib $(cat /etc/ld.so.conf.d/*)"
extras= extras=
TEMPDIR=$(mktemp -d /tmp/lddd-script.XXXX) TEMPDIR=$(mktemp -d --tmpdir lddd-script.XXXX)
echo 'Go out and drink some tea, this will take a while :) ...' msg 'Go out and drink some tea, this will take a while :) ...'
# Check ELF binaries in the PATH and specified dir trees. # Check ELF binaries in the PATH and specified dir trees.
for tree in $PATH $libdirs $extras; do for tree in $PATH $libdirs $extras; do
echo DIR $tree msg2 "DIR $tree"
# Get list of files in tree. # Get list of files in tree.
files=$(find $tree -type f ! -name '*.a' ! -name '*.la' ! -name '*.py*' ! -name '*.txt' ! -name '*.h' ! -name '*.ttf' ! \ files=$(find $tree -type f ! -name '*.a' ! -name '*.la' ! -name '*.py*' ! -name '*.txt' ! -name '*.h' ! -name '*.ttf' ! \
@@ -43,4 +45,4 @@ done
# clean list # clean list
sort -u $TEMPDIR/pacman.txt >> $TEMPDIR/possible-rebuilds.txt sort -u $TEMPDIR/pacman.txt >> $TEMPDIR/possible-rebuilds.txt
echo "Files saved to $TEMPDIR" msg "Files saved to $TEMPDIR"

124
lib/common.sh Normal file
View File

@@ -0,0 +1,124 @@
# Avoid any encoding problems
export LANG=C
# check if messages are to be printed using color
unset ALL_OFF BOLD BLUE GREEN RED YELLOW
if [[ -t 2 ]]; then
# prefer terminal safe colored and bold text when tput is supported
if tput setaf 0 &>/dev/null; then
ALL_OFF="$(tput sgr0)"
BOLD="$(tput bold)"
BLUE="${BOLD}$(tput setaf 4)"
GREEN="${BOLD}$(tput setaf 2)"
RED="${BOLD}$(tput setaf 1)"
YELLOW="${BOLD}$(tput setaf 3)"
else
ALL_OFF="\e[1;0m"
BOLD="\e[1;1m"
BLUE="${BOLD}\e[1;34m"
GREEN="${BOLD}\e[1;32m"
RED="${BOLD}\e[1;31m"
YELLOW="${BOLD}\e[1;33m"
fi
fi
readonly ALL_OFF BOLD BLUE GREEN RED YELLOW
plain() {
local mesg=$1; shift
printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
}
msg() {
local mesg=$1; shift
printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
}
msg2() {
local mesg=$1; shift
printf "${BLUE} ->${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
}
warning() {
local mesg=$1; shift
printf "${YELLOW}==> WARNING:${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
}
error() {
local mesg=$1; shift
printf "${RED}==> ERROR:${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
}
stat_busy() {
local mesg=$1; shift
printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}...${ALL_OFF}" >&2
}
stat_done() {
printf "${BOLD}done${ALL_OFF}\n" >&2
}
setup_workdir() {
[ -z "$WORKDIR" ] && WORKDIR=$(mktemp -d /tmp/$(basename $0).XXXXXXXXXX)
}
cleanup() {
trap - EXIT INT QUIT TERM
[ -n "$WORKDIR" ] && rm -rf "$WORKDIR"
[ "$1" ] && exit $1
}
abort() {
msg 'Aborting...'
cleanup 0
}
die() {
error "$*"
cleanup 1
}
trap abort INT QUIT TERM HUP
trap 'cleanup 0' EXIT
##
# usage : in_array( $needle, $haystack )
# return : 0 - found
# 1 - not found
##
in_array() {
local needle=$1; shift
local item
for item in "$@"; do
[[ $item = $needle ]] && return 0 # Found
done
return 1 # Not Found
}
##
# usage : get_full_version( [$pkgname] )
# return : full version spec, including epoch (if necessary), pkgver, pkgrel
##
get_full_version() {
# set defaults if they weren't specified in buildfile
pkgbase=${pkgbase:-${pkgname[0]}}
epoch=${epoch:-0}
if [[ -z $1 ]]; then
if [[ $epoch ]] && (( ! $epoch )); then
echo $pkgver-$pkgrel
else
echo $epoch:$pkgver-$pkgrel
fi
else
for i in pkgver pkgrel epoch; do
local indirect="${i}_override"
eval $(declare -f package_$1 | sed -n "s/\(^[[:space:]]*$i=\)/${i}_override=/p")
[[ -z ${!indirect} ]] && eval ${indirect}=\"${!i}\"
done
if (( ! $epoch_override )); then
echo $pkgver_override-$pkgrel_override
else
echo $epoch_override:$pkgver_override-$pkgrel_override
fi
fi
}

View File

@@ -1,305 +0,0 @@
#!/bin/bash
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
FORCE='n'
RUN=''
MAKEPKG_ARGS='-s --noconfirm'
REPACK=''
WORKDIR=$PWD
update_first='0'
clean_first='0'
install_pkg=''
add_to_db=0
chrootdir=''
APPNAME=$(basename "${0}")
default_copy=$USER
[[ -n $SUDO_USER ]] && default_copy=$SUDO_USER
[[ -z $default_copy || $default_copy = root ]] && default_copy=copy
usage() {
echo "usage ${APPNAME} [options] -r <chrootdir> [--] [makepkg args]"
echo ' Run this script in a PKGBUILD dir to build a package inside a'
echo ' clean chroot. All unrecognized arguments passed to this script'
echo ' will be passed to makepkg.'
echo ''
echo ' The chroot dir consists of the following directories:'
echo ' <chrootdir>/{root, copy} but only "root" is required'
echo ' by default. The working copy will be created as needed'
echo ''
echo 'The chroot "root" directory must be created via the following'
echo 'command:'
echo ' mkarchroot <chrootdir>/root base base-devel sudo'
echo ''
echo "Default makepkg args: $MAKEPKG_ARGS"
echo ''
echo 'Flags:'
echo '-h This help'
echo '-c Clean the chroot before building'
echo '-u Update the working copy of the chroot before building'
echo ' This is useful for rebuilds without dirtying the pristine'
echo ' chroot'
echo '-d Add the package to a local db at /repo after building'
echo '-r <dir> The chroot dir to use'
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 ' Useful for maintaining multiple copies.'
echo " Default: $default_copy"
exit 1
}
while getopts 'hcudr:I:l:' arg; do
case "${arg}" in
h) usage ;;
c) clean_first=1 ;;
u) update_first=1 ;;
d) add_to_db=1 ;;
r) chrootdir="$OPTARG" ;;
I) install_pkg="$OPTARG" ;;
l) copy="$OPTARG" ;;
*) MAKEPKG_ARGS="$MAKEPKG_ARGS -$arg $OPTARG" ;;
esac
done
# Canonicalize chrootdir, getting rid of trailing /
chrootdir=$(readlink -e "$chrootdir")
if [[ ${copy:0:1} = "/" ]]; then
copydir=$copy
else
[[ -z $copy ]] && copy=$default_copy
copydir="$chrootdir/$copy"
fi
# Pass all arguments after -- right to makepkg
MAKEPKG_ARGS="$MAKEPKG_ARGS ${*:$OPTIND}"
# See if -R was passed to makepkg
for arg in ${*:$OPTIND}; do
if [ "$arg" = '-R' ]; then
REPACK=1
break;
fi
done
if [ "$EUID" != '0' ]; then
echo 'This script must be run as root.'
exit 1
fi
if [ ! -f PKGBUILD -a -z "$install_pkg" ]; then
echo 'This must be run in a directory containing a PKGBUILD.'
exit 1
fi
if [ ! -d "$chrootdir" ]; then
echo "No chroot dir defined, or invalid path '$chrootdir'"
exit 1
fi
if [ ! -d "$chrootdir/root" ]; then
echo 'Missing chroot dir root directory.'
echo "Try using: mkarchroot $chrootdir/root base base-devel sudo"
usage
fi
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
# 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...'
use_rsync=false
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'
# Drop the read lock again
exec 8>&-
fi
if [ -n "$install_pkg" ]; then
pkgname="$(basename "$install_pkg")"
cp "$install_pkg" "$copydir/$pkgname"
mkarchroot -r "pacman -U /$pkgname --noconfirm" "$copydir"
ret=$?
rm "$copydir/$pkgname"
# Exit early, we've done all we need to
exit $ret
fi
if [ $update_first -eq 1 ]; then
mkarchroot -u "$copydir"
fi
[ -d "$copydir/build" ] || mkdir "$copydir/build"
if [ "$REPACK" != "1" ]; then
# Remove anything in there UNLESS -R (repack) was passed to makepkg
rm -rf "$copydir/build/"*
fi
# Read .makepkg.conf even if called via sudo
if [ -n "${SUDO_USER}" ]; then
makepkg_conf="/$(eval echo ~${SUDO_USER})/.makepkg.conf"
else
makepkg_conf="~/.makepkg.conf"
fi
# Get SRC/PKGDEST from makepkg.conf
if [ -f "${makepkg_conf}" ]; then
eval $(grep '^SRCDEST=' "${makepkg_conf}")
eval $(grep '^PKGDEST=' "${makepkg_conf}")
eval $(grep '^MAKEFLAGS=' "${makepkg_conf}")
eval $(grep '^PACKAGER=' "${makepkg_conf}")
fi
[ -z "${SRCDEST}" ] && eval $(grep '^SRCDEST=' /etc/makepkg.conf)
[ -z "${PKGDEST}" ] && eval $(grep '^PKGDEST=' /etc/makepkg.conf)
[ -d "$copydir/pkgdest" ] || mkdir "$copydir/pkgdest"
if ! grep 'PKGDEST="/pkgdest"' "$copydir/etc/makepkg.conf" >/dev/null 2>&1; then
echo 'PKGDEST="/pkgdest"' >> "$copydir/etc/makepkg.conf"
fi
[ -d "$copydir/srcdest" ] || mkdir "$copydir/srcdest"
if ! grep 'SRCDEST="/srcdest"' "$copydir/etc/makepkg.conf" >/dev/null 2>&1; then
echo 'SRCDEST="/srcdest"' >> "$copydir/etc/makepkg.conf"
fi
[ -z "${MAKEFLAGS}" ] && eval $(grep '^MAKEFLAGS=' /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)
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
eval $(grep '^CARCH=' "$copydir/etc/makepkg.conf")
export CARCH
# Copy PKGBUILD and sources
source=($(. PKGBUILD; echo ${source[@]}))
cp PKGBUILD "$copydir/build/"
for f in ${source[@]}; do
basef=$(echo $f | sed 's|::.*||' | sed 's|^.*://.*/||g')
if [ -f "$basef" ]; then
cp "$basef" "$copydir/srcdest/"
elif [ -f "$SRCDEST/$basef" ]; then
cp "$SRCDEST/$basef" "$copydir/srcdest/"
fi
done
( . PKGBUILD
for i in 'changelog' 'install'; do
filelist=$(sed -n "s/^[[:space:]]*$i=//p" PKGBUILD)
for file in $filelist; do
# evaluate any bash variables used
eval file=${file}
if [[ -f "$file" ]]; then
cp "$file" "$copydir/build/"
fi
done
done
)
chown -R nobody "$copydir/build"
chown -R nobody "$copydir/srcdest"
chown -R nobody "$copydir/pkgdest"
echo 'nobody ALL = NOPASSWD: /usr/bin/pacman' > "$copydir/etc/sudoers.d/nobody-pacman"
chmod 440 "$copydir/etc/sudoers.d/nobody-pacman"
#This is a little gross, but this way the script is recreated every time in the
#working copy
(cat <<EOF
#!/bin/bash
export LANG=C
cd /build
export HOME=/build
sudo -u nobody makepkg $MAKEPKG_ARGS || touch BUILD_FAILED
[ -f BUILD_FAILED ] && exit 1
which namcap &>/dev/null && namcap /build/PKGBUILD /pkgdest/*.pkg.tar.* > /build/namcap.log
exit 0
EOF
) > "$copydir/chrootbuild"
chmod +x "$copydir/chrootbuild"
if mkarchroot -r "/chrootbuild" "$copydir"; then
for pkgfile in "${copydir}"/pkgdest/*.pkg.tar.*; do
[ -e "$pkgfile" ] || continue
if [ "$add_to_db" -eq "1" ]; then
mkdir -p "${copydir}/repo"
pushd "${copydir}/repo" >/dev/null
cp "$pkgfile" .
repo-add repo.db.tar.gz "$(basename "$pkgfile")"
popd >/dev/null
fi
if [ -d "$PKGDEST" ]; then
mv "$pkgfile" "${PKGDEST}"
else
mv "$pkgfile" "${WORKDIR}"
fi
done
for l in "${copydir}"/build/{namcap,*-{build,check,package,package_*}}.log; do
[ -f "$l" ] && mv "$l" "${WORKDIR}"
done
else
#just in case. We returned 1, make sure we fail
touch "${copydir}/build/BUILD_FAILED"
fi
for f in "${copydir}"/srcdest/*; do
[ -e "$f" ] || continue
if [ -d "$SRCDEST" ]; then
mv "$f" "${SRCDEST}"
else
mv "$f" "${WORKDIR}"
fi
done
if [ -e "${copydir}/build/BUILD_FAILED" ]; then
echo "Build failed, check $copydir/build"
rm "${copydir}/build/BUILD_FAILED"
exit 1
fi

312
makechrootpkg.in Normal file
View File

@@ -0,0 +1,312 @@
#!/bin/bash
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
m4_include(lib/common.sh)
shopt -s nullglob
makepkg_args='-s --noconfirm -L'
repack=false
update_first=false
clean_first=false
install_pkg=
add_to_db=false
run_namcap=false
chrootdir=
default_copy=$USER
[[ -n $SUDO_USER ]] && default_copy=$SUDO_USER
[[ -z $default_copy || $default_copy = root ]] && default_copy=copy
usage() {
echo "usage ${0##*/} [options] -r <chrootdir> [--] [makepkg args]"
echo ' Run this script in a PKGBUILD dir to build a package inside a'
echo ' clean chroot. All unrecognized arguments passed to this script'
echo ' will be passed to makepkg.'
echo ''
echo ' The chroot dir consists of the following directories:'
echo ' <chrootdir>/{root, copy} but only "root" is required'
echo ' by default. The working copy will be created as needed'
echo ''
echo 'The chroot "root" directory must be created via the following'
echo 'command:'
echo ' mkarchroot <chrootdir>/root base base-devel sudo'
echo ''
echo "Default makepkg args: $makepkg_args"
echo ''
echo 'Flags:'
echo '-h This help'
echo '-c Clean the chroot before building'
echo '-u Update the working copy of the chroot before building'
echo ' This is useful for rebuilds without dirtying the pristine'
echo ' chroot'
echo '-d Add the package to a local db at /repo after building'
echo '-r <dir> The chroot dir to use'
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 ' Useful for maintaining multiple copies.'
echo '-n Run namcap on the package'
echo " Default: $default_copy"
exit 1
}
while getopts 'hcudr:I:l:n' arg; do
case "$arg" in
h) usage ;;
c) clean_first=true ;;
u) update_first=true ;;
d) add_to_db=true ;;
r) chrootdir="$OPTARG" ;;
I) install_pkg="$OPTARG" ;;
l) copy="$OPTARG" ;;
n) run_namcap=true ;;
*) makepkg_args="$makepkg_args -$arg $OPTARG" ;;
esac
done
# Canonicalize chrootdir, getting rid of trailing /
chrootdir=$(readlink -e "$chrootdir")
if [[ ${copy:0:1} = / ]]; then
copydir=$copy
else
[[ -z $copy ]] && copy=$default_copy
copydir="$chrootdir/$copy"
fi
# Pass all arguments after -- right to makepkg
makepkg_args="$makepkg_args ${*:$OPTIND}"
# See if -R was passed to makepkg
for arg in ${*:$OPTIND}; do
if [[ $arg = -R ]]; then
repack=1
break
fi
done
if (( EUID )); then
die 'This script must be run as root.'
fi
if [[ ! -f PKGBUILD && -z $install_pkg ]]; then
die 'This must be run in a directory containing a PKGBUILD.'
fi
if [[ ! -d $chrootdir ]]; then
die "No chroot dir defined, or invalid path '$chrootdir'"
fi
if [[ ! -d $chrootdir/root ]]; then
die "Missing chroot dir root directory. Try using: mkarchroot $chrootdir/root base base-devel sudo"
fi
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
stat_busy "locking chroot copy '$copy'"
flock 9
stat_done
fi
if [[ ! -d $copydir ]] || $clean_first; 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
stat_busy "locking clean chroot"
flock -s 8
stat_done
fi
stat_busy 'creating clean working copy'
use_rsync=false
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
stat_done
# Drop the read lock again
exec 8>&-
fi
if [[ -n $install_pkg ]]; then
pkgname="${install_pkg##*/}"
cp "$install_pkg" "$copydir/$pkgname"
mkarchroot -r "pacman -U /$pkgname --noconfirm" "$copydir"
ret=$?
rm "$copydir/$pkgname"
# Exit early, we've done all we need to
exit $ret
fi
$update_first && mkarchroot -u "$copydir"
mkdir -p "$copydir/build"
# Remove anything in there UNLESS -R (repack) was passed to makepkg
$repack || rm -rf "$copydir"/build/*
# Read .makepkg.conf and .gnupg/pubring.gpg even if called via sudo
if [[ -n $SUDO_USER ]]; then
SUDO_HOME="$(eval echo ~$SUDO_USER)"
makepkg_conf="$SUDO_HOME/.makepkg.conf"
if [[ -r "$SUDO_HOME/.gnupg/pubring.gpg" ]]; then
install -D "$SUDO_HOME/.gnupg/pubring.gpg" "$copydir/build/.gnupg/pubring.gpg"
fi
else
makepkg_conf="$HOME/.makepkg.conf"
if [[ -r "$HOME/.gnupg/pubring.gpg" ]]; then
install -D "$HOME/.gnupg/pubring.gpg" "$copydir/build/.gnupg/pubring.gpg"
fi
fi
# Get SRC/PKGDEST from makepkg.conf
if [[ -f $makepkg_conf ]]; then
eval $(grep '^SRCDEST=' "$makepkg_conf")
eval $(grep '^PKGDEST=' "$makepkg_conf")
eval $(grep '^MAKEFLAGS=' "$makepkg_conf")
eval $(grep '^PACKAGER=' "$makepkg_conf")
fi
[[ -z $SRCDEST ]] && eval $(grep '^SRCDEST=' /etc/makepkg.conf)
[[ -z $PKGDEST ]] && eval $(grep '^PKGDEST=' /etc/makepkg.conf)
[[ -z $MAKEFLAGS ]] && eval $(grep '^MAKEFLAGS=' /etc/makepkg.conf)
[[ -z $PACKAGER ]] && eval $(grep '^PACKAGER=' /etc/makepkg.conf)
# Use PKGBUILD directory if PKGDEST or SRCDEST don't exist
[[ -d $PKGDEST ]] || PKGDEST=.
[[ -d $SRCDEST ]] || SRCDEST=.
mkdir -p "$copydir/pkgdest"
if ! grep -q 'PKGDEST="/pkgdest"' "$copydir/etc/makepkg.conf"; then
echo 'PKGDEST="/pkgdest"' >> "$copydir/etc/makepkg.conf"
fi
mkdir -p "$copydir/srcdest"
if ! grep -q 'SRCDEST="/srcdest"' "$copydir/etc/makepkg.conf"; then
echo 'SRCDEST="/srcdest"' >> "$copydir/etc/makepkg.conf"
fi
if [[ -n $MAKEFLAGS ]]; then
sed -i '/^MAKEFLAGS=/d' "$copydir/etc/makepkg.conf"
echo "MAKEFLAGS='${MAKEFLAGS}'" >> "$copydir/etc/makepkg.conf"
fi
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
eval $(grep '^CARCH=' "$copydir/etc/makepkg.conf")
export CARCH
# Copy PKGBUILD and sources
cp PKGBUILD "$copydir/build/"
(
source PKGBUILD
for file in "${source[@]}"; do
file="${file%%::*}"
file="${file##*://*/}"
if [[ -f $file ]]; then
cp "$file" "$copydir/srcdest/"
elif [[ -f $SRCDEST/$file ]]; then
cp "$SRCDEST/$file" "$copydir/srcdest/"
fi
done
# Find all changelog and install files, even inside functions
for i in 'changelog' 'install'; do
while read -r file; do
# evaluate any bash variables used
eval file=\"$(sed 's/^\(['\''"]\)\(.*\)\1$/\2/' <<< "$file")\"
[[ -f $file ]] && cp "$file" "$copydir/build/"
done < <(sed -n "s/^[[:space:]]*$i=//p" PKGBUILD)
done
)
chown -R nobody "$copydir"/{build,pkgdest,srcdest}
cat > "$copydir/etc/sudoers.d/nobody-pacman" <<EOF
Defaults env_keep += "HOME"
nobody ALL = NOPASSWD: /usr/bin/pacman
EOF
chmod 440 "$copydir/etc/sudoers.d/nobody-pacman"
# Set this system wide as makepkg will source /etc/profile before calling build()
echo 'LANG=C' > "$copydir/etc/locale.conf"
# This is a little gross, but this way the script is recreated every time in the
# working copy
cat >"$copydir/chrootbuild" <<EOF
#!/bin/bash
export LANG=C
export HOME=/build
cd /build
sudo -u nobody makepkg $makepkg_args || touch BUILD_FAILED
[[ -f BUILD_FAILED ]] && exit 1
if $run_namcap; then
pacman -S --needed --noconfirm namcap
namcap /build/PKGBUILD /pkgdest/*.pkg.tar.?z > /build/namcap.log
fi
exit 0
EOF
chmod +x "$copydir/chrootbuild"
if mkarchroot -r "/chrootbuild" "$copydir"; then
for pkgfile in "$copydir"/pkgdest/*.pkg.tar.*; do
if $add_to_db; then
mkdir -p "$copydir/repo"
pushd "$copydir/repo" >/dev/null
cp "$pkgfile" .
repo-add repo.db.tar.gz "${pkgfile##*/}"
popd >/dev/null
fi
mv "$pkgfile" "$PKGDEST"
done
for l in "$copydir"/build/{namcap,*-{build,check,package,package_*}}.log; do
[[ -f $l ]] && mv "$l" .
done
else
# Just in case. We returned 1, make sure we fail
touch "$copydir/build/BUILD_FAILED"
fi
for f in "$copydir"/srcdest/*; do
mv "$f" "$SRCDEST"
done
if [[ -e $copydir/build/BUILD_FAILED ]]; then
rm "$copydir/build/BUILD_FAILED"
die "Build failed, check $copydir/build"
fi

View File

@@ -8,16 +8,16 @@
# #
#-- The download utilities that makepkg should use to acquire sources #-- The download utilities that makepkg should use to acquire sources
# Format: 'protocol::agent' # Format: 'protocol::agent'
DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3 -O %o %u' DLAGENTS=('ftp::/usr/bin/curl -fC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
'http::/usr/bin/wget -c -t 3 --waitretry=3 -O %o %u' 'http::/usr/bin/curl -fLC - --retry 3 --retry-delay 3 -o %o %u'
'https::/usr/bin/wget -c -t 3 --waitretry=3 --no-check-certificate -O %o %u' 'https::/usr/bin/curl -fLC - --retry 3 --retry-delay 3 -o %o %u'
'rsync::/usr/bin/rsync -z %u %o' 'rsync::/usr/bin/rsync -z %u %o'
'scp::/usr/bin/scp -C %u %o') 'scp::/usr/bin/scp -C %u %o')
# Other common tools: # Other common tools:
# /usr/bin/snarf # /usr/bin/snarf
# /usr/bin/lftpget -c # /usr/bin/lftpget -c
# /usr/bin/curl # /usr/bin/wget
######################################################################### #########################################################################
# ARCHITECTURE, COMPILE FLAGS # ARCHITECTURE, COMPILE FLAGS
@@ -26,7 +26,7 @@ DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3 -O %o %u'
CARCH="i686" CARCH="i686"
CHOST="i686-pc-linux-gnu" CHOST="i686-pc-linux-gnu"
#-- Exclusive: will only run on i686 #-- Compiler and Linker Flags
# -march (or -mcpu) builds exclusively for an architecture # -march (or -mcpu) builds exclusively for an architecture
# -mtune optimizes for an architecture, but builds for whole processor family # -mtune optimizes for an architecture, but builds for whole processor family
CFLAGS="-march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2" CFLAGS="-march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
@@ -39,7 +39,7 @@ LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu"
# BUILD ENVIRONMENT # BUILD ENVIRONMENT
######################################################################### #########################################################################
# #
# Defaults: BUILDENV=(fakeroot !distcc color !ccache check) # Defaults: BUILDENV=(fakeroot !distcc color !ccache check !sign)
# 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
@@ -47,19 +47,23 @@ LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu"
#-- 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 #-- check: Run the check() function if present in the PKGBUILD
#-- sign: Generate PGP signature file
# #
BUILDENV=(fakeroot !distcc color !ccache check) BUILDENV=(fakeroot !distcc color !ccache check !sign)
# #
#-- 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.
#DISTCC_HOSTS="" #DISTCC_HOSTS=""
#
#-- Specify a directory for package building.
#BUILDDIR=/tmp/makepkg
######################################################################### #########################################################################
# GLOBAL PACKAGE OPTIONS # GLOBAL PACKAGE OPTIONS
# These are default values for the options=() settings # These are default values for the options=() settings
######################################################################### #########################################################################
# #
# Default: OPTIONS=(strip docs libtool emptydirs zipman purge) # Default: OPTIONS=(strip docs libtool emptydirs zipman purge !upx)
# 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 #-- strip: Strip symbols from binaries/libraries
@@ -68,8 +72,9 @@ BUILDENV=(fakeroot !distcc color !ccache check)
#-- emptydirs: Leave empty directories in packages #-- emptydirs: Leave empty directories in packages
#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip #-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
#-- purge: Remove files specified by PURGE_TARGETS #-- purge: Remove files specified by PURGE_TARGETS
#-- upx: Compress binary executable files using UPX
# #
OPTIONS=(strip docs libtool emptydirs zipman purge) OPTIONS=(strip docs libtool emptydirs zipman purge !upx)
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512 #-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5) INTEGRITY_CHECK=(md5)
@@ -100,6 +105,8 @@ PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
#SRCPKGDEST=/home/srcpackages #SRCPKGDEST=/home/srcpackages
#-- Packager: name/email of the person or organization building packages #-- Packager: name/email of the person or organization building packages
#PACKAGER="John Doe <john@doe.com>" #PACKAGER="John Doe <john@doe.com>"
#-- Specify a key to use for package signing
#GPGKEY=""
######################################################################### #########################################################################
# EXTENSION DEFAULTS # EXTENSION DEFAULTS

View File

@@ -8,16 +8,16 @@
# #
#-- The download utilities that makepkg should use to acquire sources #-- The download utilities that makepkg should use to acquire sources
# Format: 'protocol::agent' # Format: 'protocol::agent'
DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3 -O %o %u' DLAGENTS=('ftp::/usr/bin/curl -fC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
'http::/usr/bin/wget -c -t 3 --waitretry=3 -O %o %u' 'http::/usr/bin/curl -fLC - --retry 3 --retry-delay 3 -o %o %u'
'https::/usr/bin/wget -c -t 3 --waitretry=3 --no-check-certificate -O %o %u' 'https::/usr/bin/curl -fLC - --retry 3 --retry-delay 3 -o %o %u'
'rsync::/usr/bin/rsync -z %u %o' 'rsync::/usr/bin/rsync -z %u %o'
'scp::/usr/bin/scp -C %u %o') 'scp::/usr/bin/scp -C %u %o')
# Other common tools: # Other common tools:
# /usr/bin/snarf # /usr/bin/snarf
# /usr/bin/lftpget -c # /usr/bin/lftpget -c
# /usr/bin/curl # /usr/bin/wget
######################################################################### #########################################################################
# ARCHITECTURE, COMPILE FLAGS # ARCHITECTURE, COMPILE FLAGS
@@ -26,7 +26,7 @@ DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3 -O %o %u'
CARCH="x86_64" CARCH="x86_64"
CHOST="x86_64-unknown-linux-gnu" CHOST="x86_64-unknown-linux-gnu"
#-- Exclusive: will only run on x86_64 #-- Compiler and Linker Flags
# -march (or -mcpu) builds exclusively for an architecture # -march (or -mcpu) builds exclusively for an architecture
# -mtune optimizes for an architecture, but builds for whole processor family # -mtune optimizes for an architecture, but builds for whole processor family
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2" CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
@@ -39,7 +39,7 @@ LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu"
# BUILD ENVIRONMENT # BUILD ENVIRONMENT
######################################################################### #########################################################################
# #
# Defaults: BUILDENV=(fakeroot !distcc color !ccache check) # Defaults: BUILDENV=(fakeroot !distcc color !ccache check !sign)
# 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
@@ -47,19 +47,23 @@ LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu"
#-- 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 #-- check: Run the check() function if present in the PKGBUILD
#-- sign: Generate PGP signature file
# #
BUILDENV=(fakeroot !distcc color !ccache check) BUILDENV=(fakeroot !distcc color !ccache check !sign)
# #
#-- 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.
#DISTCC_HOSTS="" #DISTCC_HOSTS=""
#
#-- Specify a directory for package building.
#BUILDDIR=/tmp/makepkg
######################################################################### #########################################################################
# GLOBAL PACKAGE OPTIONS # GLOBAL PACKAGE OPTIONS
# These are default values for the options=() settings # These are default values for the options=() settings
######################################################################### #########################################################################
# #
# Default: OPTIONS=(strip docs libtool emptydirs zipman purge) # Default: OPTIONS=(strip docs libtool emptydirs zipman purge !upx)
# 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 #-- strip: Strip symbols from binaries/libraries
@@ -68,8 +72,9 @@ BUILDENV=(fakeroot !distcc color !ccache check)
#-- emptydirs: Leave empty directories in packages #-- emptydirs: Leave empty directories in packages
#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip #-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
#-- purge: Remove files specified by PURGE_TARGETS #-- purge: Remove files specified by PURGE_TARGETS
#-- upx: Compress binary executable files using UPX
# #
OPTIONS=(strip docs libtool emptydirs zipman purge) OPTIONS=(strip docs libtool emptydirs zipman purge !upx)
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512 #-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5) INTEGRITY_CHECK=(md5)
@@ -100,6 +105,8 @@ PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
#SRCPKGDEST=/home/srcpackages #SRCPKGDEST=/home/srcpackages
#-- Packager: name/email of the person or organization building packages #-- Packager: name/email of the person or organization building packages
#PACKAGER="John Doe <john@doe.com>" #PACKAGER="John Doe <john@doe.com>"
#-- Specify a key to use for package signing
#GPGKEY=""
######################################################################### #########################################################################
# EXTENSION DEFAULTS # EXTENSION DEFAULTS

33
mkarchroot → mkarchroot.in Executable file → Normal file
View File

@@ -8,6 +8,8 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
m4_include(lib/common.sh)
FORCE='n' FORCE='n'
RUN='' RUN=''
NOCOPY='n' NOCOPY='n'
@@ -28,7 +30,7 @@ usage() {
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
} }
while getopts 'r:ufnhC:M:c:' arg; do while getopts 'r:ufnhC:M:c:' arg; do
@@ -41,29 +43,26 @@ while getopts 'r:ufnhC:M:c:' arg; do
n) NOCOPY='y' ;; n) NOCOPY='y' ;;
c) cache_dir="$OPTARG" ;; c) cache_dir="$OPTARG" ;;
h|?) usage 0 ;; h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;; *) error "invalid argument '${arg}'"; usage ;;
esac esac
done done
if [ "$EUID" != '0' ]; then if [ "$EUID" != '0' ]; then
echo 'error: this script must be run as root.' die 'this script must be run as root.'
exit 1
fi fi
shift $(($OPTIND - 1)) shift $(($OPTIND - 1))
if [ "$RUN" = '' -a $# -lt 2 ]; then if [ "$RUN" = '' -a $# -lt 2 ]; then
echo 'you must specify a directory and one or more packages' die 'you must specify a directory and one or more packages'
usage 1
elif [ $# -lt 1 ]; then elif [ $# -lt 1 ]; then
echo 'you must specify a directory' die 'you must specify a directory'
usage 1
fi fi
working_dir="$(readlink -f ${1})" working_dir="$(readlink -f ${1})"
shift 1 shift 1
[ "${working_dir}" = '' ] && echo 'error: please specify a working directory' && usage 1 [ "${working_dir}" = '' ] && die 'please specify a working directory'
if [ -z "$cache_dir" ]; then if [ -z "$cache_dir" ]; then
cache_conf=${working_dir}/etc/pacman.conf cache_conf=${working_dir}/etc/pacman.conf
@@ -150,9 +149,9 @@ chroot_lock () {
# Lock the chroot. Take note of the FD number. # Lock the chroot. Take note of the FD number.
if ! flock -n 9; then if ! flock -n 9; then
echo -n "locking chroot..." stat_busy "locking chroot"
flock 9 flock 9
echo "done" stat_done
fi fi
} }
# }}} # }}}
@@ -162,9 +161,7 @@ if [ "$RUN" != "" ]; then
# run chroot {{{ # run chroot {{{
#Sanity check #Sanity check
if [ ! -f "${working_dir}/.arch-chroot" ]; then if [ ! -f "${working_dir}/.arch-chroot" ]; then
echo "error: '${working_dir}' does not appear to be a Arch chroot" die "'${working_dir}' does not appear to be a Arch chroot"
echo ' please build the image using mkarchroot'
exit 1
fi fi
chroot_lock chroot_lock
@@ -177,8 +174,7 @@ if [ "$RUN" != "" ]; then
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" die "working dir '${working_dir}' already exists - try using -f"
exit 1
fi fi
if { type -P btrfs && btrfs subvolume create "${working_dir}"; } &>/dev/null; then if { type -P btrfs && btrfs subvolume create "${working_dir}"; } &>/dev/null; then
@@ -202,8 +198,7 @@ else
op="${op}f" op="${op}f"
fi fi
if ! pacman ${op} ${pacargs} $@; then if ! pacman ${op} ${pacargs} $@; then
echo 'error: failed to install all packages' die 'failed to install all packages'
exit 1
fi fi
fi fi
@@ -221,7 +216,7 @@ else
if [ -e "${working_dir}/etc/locale.gen" ]; then if [ -e "${working_dir}/etc/locale.gen" ]; then
sed -i 's@^#\(en_US\|de_DE\)\(\.UTF-8\)@\1\2@' "${working_dir}/etc/locale.gen" sed -i 's@^#\(en_US\|de_DE\)\(\.UTF-8\)@\1\2@' "${working_dir}/etc/locale.gen"
chroot "${working_dir}" locale-gen chroot "${working_dir}" /usr/sbin/locale-gen
fi fi
if [ ! -e "${working_dir}/.arch-chroot" ]; then if [ ! -e "${working_dir}/.arch-chroot" ]; then

View File

@@ -13,11 +13,12 @@
#DBPath = /var/lib/pacman/ #DBPath = /var/lib/pacman/
#CacheDir = /var/cache/pacman/pkg/ #CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log #LogFile = /var/log/pacman.log
#GPGDir = /etc/pacman.d/gnupg/
HoldPkg = pacman glibc 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/curl -C - -f %u > %o #XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
Architecture = auto Architecture = auto
@@ -28,12 +29,26 @@ Architecture = auto
#NoUpgrade = #NoUpgrade =
#NoExtract = #NoExtract =
# Misc options (all disabled by default) # Misc options
#UseSyslog #UseSyslog
#ShowSize
#UseDelta #UseDelta
#TotalDownload #TotalDownload
# We cannot check disk space from within a chroot environment
#CheckSpace #CheckSpace
#VerbosePkgLists
# PGP signature checking
# NOTE: None of this will work without running `pacman-key --init` first.
# The compiled in default is equivalent to the following line. This requires
# you to locally sign and trust packager keys using `pacman-key` for them to be
# considered valid.
#SigLevel = Optional TrustedOnly
# If you wish to check signatures but avoid local sign and trust issues, use
# the following line. This will treat any key imported into pacman's keyring as
# trusted.
#SigLevel = Optional TrustAll
# Disable signature checks for now
SigLevel = Never
# #
# REPOSITORIES # REPOSITORIES
@@ -76,5 +91,6 @@ Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for # An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories. # tips on creating your own repositories.
#[custom] #[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs #Server = file:///home/custompkgs

View File

@@ -13,11 +13,12 @@
#DBPath = /var/lib/pacman/ #DBPath = /var/lib/pacman/
#CacheDir = /var/cache/pacman/pkg/ #CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log #LogFile = /var/log/pacman.log
#GPGDir = /etc/pacman.d/gnupg/
HoldPkg = pacman glibc 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/curl -C - -f %u > %o #XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
Architecture = auto Architecture = auto
@@ -28,12 +29,26 @@ Architecture = auto
#NoUpgrade = #NoUpgrade =
#NoExtract = #NoExtract =
# Misc options (all disabled by default) # Misc options
#UseSyslog #UseSyslog
#ShowSize
#UseDelta #UseDelta
#TotalDownload #TotalDownload
# We cannot check disk space from within a chroot environment
#CheckSpace #CheckSpace
#VerbosePkgLists
# PGP signature checking
# NOTE: None of this will work without running `pacman-key --init` first.
# The compiled in default is equivalent to the following line. This requires
# you to locally sign and trust packager keys using `pacman-key` for them to be
# considered valid.
#SigLevel = Optional TrustedOnly
# If you wish to check signatures but avoid local sign and trust issues, use
# the following line. This will treat any key imported into pacman's keyring as
# trusted.
#SigLevel = Optional TrustAll
# Disable signature checks for now
SigLevel = Never
# #
# REPOSITORIES # REPOSITORIES
@@ -76,6 +91,7 @@ Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system, # If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repository here. # enable the multilib repository here.
[multilib-testing] [multilib-testing]
#SigLevel = Optional TrustAll
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[multilib] [multilib]

View File

@@ -13,11 +13,12 @@
#DBPath = /var/lib/pacman/ #DBPath = /var/lib/pacman/
#CacheDir = /var/cache/pacman/pkg/ #CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log #LogFile = /var/log/pacman.log
#GPGDir = /etc/pacman.d/gnupg/
HoldPkg = pacman glibc 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/curl -C - -f %u > %o #XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
Architecture = auto Architecture = auto
@@ -28,12 +29,26 @@ Architecture = auto
#NoUpgrade = #NoUpgrade =
#NoExtract = #NoExtract =
# Misc options (all disabled by default) # Misc options
#UseSyslog #UseSyslog
#ShowSize
#UseDelta #UseDelta
#TotalDownload #TotalDownload
# We cannot check disk space from within a chroot environment
#CheckSpace #CheckSpace
#VerbosePkgLists
# PGP signature checking
# NOTE: None of this will work without running `pacman-key --init` first.
# The compiled in default is equivalent to the following line. This requires
# you to locally sign and trust packager keys using `pacman-key` for them to be
# considered valid.
#SigLevel = Optional TrustedOnly
# If you wish to check signatures but avoid local sign and trust issues, use
# the following line. This will treat any key imported into pacman's keyring as
# trusted.
#SigLevel = Optional TrustAll
# Disable signature checks for now
SigLevel = Never
# #
# REPOSITORIES # REPOSITORIES
@@ -76,6 +91,7 @@ Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system, # If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repository here. # enable the multilib repository here.
[multilib] [multilib]
#SigLevel = Optional TrustAll
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for # An example of a custom package repository. See the pacman manpage for

View File

@@ -13,11 +13,12 @@
#DBPath = /var/lib/pacman/ #DBPath = /var/lib/pacman/
#CacheDir = /var/cache/pacman/pkg/ #CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log #LogFile = /var/log/pacman.log
#GPGDir = /etc/pacman.d/gnupg/
HoldPkg = pacman glibc 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/curl -C - -f %u > %o #XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
Architecture = auto Architecture = auto
@@ -28,12 +29,26 @@ Architecture = auto
#NoUpgrade = #NoUpgrade =
#NoExtract = #NoExtract =
# Misc options (all disabled by default) # Misc options
#UseSyslog #UseSyslog
#ShowSize
#UseDelta #UseDelta
#TotalDownload #TotalDownload
# We cannot check disk space from within a chroot environment
#CheckSpace #CheckSpace
#VerbosePkgLists
# PGP signature checking
# NOTE: None of this will work without running `pacman-key --init` first.
# The compiled in default is equivalent to the following line. This requires
# you to locally sign and trust packager keys using `pacman-key` for them to be
# considered valid.
#SigLevel = Optional TrustedOnly
# If you wish to check signatures but avoid local sign and trust issues, use
# the following line. This will treat any key imported into pacman's keyring as
# trusted.
#SigLevel = Optional TrustAll
# Disable signature checks for now
SigLevel = Never
# #
# REPOSITORIES # REPOSITORIES
@@ -76,6 +91,7 @@ Include = /etc/pacman.d/mirrorlist
[community-testing] [community-testing]
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
#SigLevel = Optional TrustAll
[community] [community]
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist

View File

@@ -13,11 +13,12 @@
#DBPath = /var/lib/pacman/ #DBPath = /var/lib/pacman/
#CacheDir = /var/cache/pacman/pkg/ #CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log #LogFile = /var/log/pacman.log
#GPGDir = /etc/pacman.d/gnupg/
HoldPkg = pacman glibc 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/curl -C - -f %u > %o #XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
Architecture = auto Architecture = auto
@@ -28,12 +29,26 @@ Architecture = auto
#NoUpgrade = #NoUpgrade =
#NoExtract = #NoExtract =
# Misc options (all disabled by default) # Misc options
#UseSyslog #UseSyslog
#ShowSize
#UseDelta #UseDelta
#TotalDownload #TotalDownload
# We cannot check disk space from within a chroot environment
#CheckSpace #CheckSpace
#VerbosePkgLists
# PGP signature checking
# NOTE: None of this will work without running `pacman-key --init` first.
# The compiled in default is equivalent to the following line. This requires
# you to locally sign and trust packager keys using `pacman-key` for them to be
# considered valid.
#SigLevel = Optional TrustedOnly
# If you wish to check signatures but avoid local sign and trust issues, use
# the following line. This will treat any key imported into pacman's keyring as
# trusted.
#SigLevel = Optional TrustAll
# Disable signature checks for now
SigLevel = Never
# #
# REPOSITORIES # REPOSITORIES
@@ -76,5 +91,6 @@ Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for # An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories. # tips on creating your own repositories.
#[custom] #[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs #Server = file:///home/custompkgs

28
rebuildpkgs → rebuildpkgs.in Executable file → Normal file
View File

@@ -9,6 +9,8 @@
# Currently uses $(pwd)/rebuilds as the directory for rebuilding... # Currently uses $(pwd)/rebuilds as the directory for rebuilding...
# TODO make this work for community too # TODO make this work for community too
m4_include(lib/common.sh)
if [ $# -le 1 ]; then if [ $# -le 1 ]; then
echo "usage: $(basename $0) <chrootdir> <packages to rebuild>" echo "usage: $(basename $0) <chrootdir> <packages to rebuild>"
echo " example: $(basename $0) ~/chroot readline bash foo bar baz" echo " example: $(basename $0) ~/chroot readline bash foo bar baz"
@@ -19,15 +21,9 @@ fi
if [ -r '/etc/makepkg.conf' ]; then if [ -r '/etc/makepkg.conf' ]; then
source '/etc/makepkg.conf' source '/etc/makepkg.conf'
else else
echo '/etc/makepkg.conf not found!' die '/etc/makepkg.conf not found!'
exit 1
fi fi
die () {
echo $@ >&2
exit 1
}
bump_pkgrel() { bump_pkgrel() {
# Get the current pkgrel from SVN and update the working copy with it # Get the current pkgrel from SVN and update the working copy with it
# This prevents us from incrementing out of control :) # This prevents us from incrementing out of control :)
@@ -53,7 +49,7 @@ pkgs="$@"
SVNPATH='svn+ssh://gerolde.archlinux.org/srv/svn-packages' SVNPATH='svn+ssh://gerolde.archlinux.org/srv/svn-packages'
echo ":: Work will be done in $(pwd)/rebuilds" msg "Work will be done in $(pwd)/rebuilds"
REBUILD_ROOT="$(pwd)/rebuilds" REBUILD_ROOT="$(pwd)/rebuilds"
mkdir -p "$REBUILD_ROOT" mkdir -p "$REBUILD_ROOT"
@@ -65,11 +61,11 @@ FAILED=""
for pkg in $pkgs; do for pkg in $pkgs; do
cd "$REBUILD_ROOT/svn-packages" cd "$REBUILD_ROOT/svn-packages"
echo ":: Building '$pkg'" msg2 "Building '$pkg'"
/usr/bin/svn update "$pkg" /usr/bin/svn update "$pkg"
if [ ! -d "$pkg/trunk" ]; then if [ ! -d "$pkg/trunk" ]; then
FAILED="$FAILED $pkg" FAILED="$FAILED $pkg"
echo ":: $pkg does not exist in SVN" warning "$pkg does not exist in SVN"
continue continue
fi fi
cd "$pkg/trunk/" cd "$pkg/trunk/"
@@ -78,24 +74,24 @@ for pkg in $pkgs; do
if ! sudo makechrootpkg -u -d -r "$chrootdir" -- --noconfirm; then if ! sudo makechrootpkg -u -d -r "$chrootdir" -- --noconfirm; then
FAILED="$FAILED $pkg" FAILED="$FAILED $pkg"
echo ":: $pkg Failed!" error "$pkg Failed!"
else else
pkgfile=$(pkg_from_pkgbuild) pkgfile=$(pkg_from_pkgbuild)
if [ -e "$pkgfile" ]; then if [ -e "$pkgfile" ]; then
echo ":: $pkg Complete" msg2 "$pkg Complete"
else else
FAILED="$FAILED $pkg" FAILED="$FAILED $pkg"
echo ":: $pkg Failed, no package built!" error "$pkg Failed, no package built!"
fi fi
fi fi
done done
cd "$REBUILD_ROOT" cd "$REBUILD_ROOT"
if [ "$FAILED" != "" ]; then if [ "$FAILED" != "" ]; then
echo 'Packages failed:' msg 'Packages failed:'
for pkg in $FAILED; do for pkg in $FAILED; do
echo -e "\t$pkg" msg2 "$pkg"
done done
fi fi
echo 'SVN pkgbumps in svn-packages/ - commit when ready' msg 'SVN pkgbumps in svn-packages/ - commit when ready'

View File

@@ -38,7 +38,7 @@ _commitpkg_args=(
) )
_finddeps_args=( _finddeps_args=(
'1:packages:_devtools_completions_installed_packages' '1:packages:_devtools_completions_all_packages'
) )
_makechrootpkg_args=( _makechrootpkg_args=(
@@ -64,7 +64,7 @@ _mkarchroot_args=(
_rebuildpkgs_args=( _rebuildpkgs_args=(
'1:chroot_dir:_files -/' '1:chroot_dir:_files -/'
'*:packages:_devtools_completions_installed_packages' '*:packages:_devtools_completions_all_packages'
) )
_devtools_completions_all_packages() { _devtools_completions_all_packages() {