Compare commits

...

55 Commits

Author SHA1 Message Date
Pierre Schmitz
0d0e1a9079 repare release 2010-09-06 20:53:26 +02:00
Ionut Biru
b9ea05789d checkpkg: fix extracting soname bumps
extracting the tarball was done from the wrong directory

Signed-off-by: Ionut Biru <ibiru@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2010-09-06 20:28:14 +02:00
Pierre Schmitz
79ac757e7f add support for community-staging repository 2010-09-01 20:00:11 +02:00
Pierre Schmitz
a4eabcceaa add makepkg.conf for [multilib] 2010-08-22 21:54:17 +02:00
Pierre Schmitz
b591e69541 add initial [multilib] support 2010-08-22 21:52:23 +02:00
Pierre Schmitz
2f18ca1836 Use findmnt to generate a mtab
Instead of just copying the hosts mtab use findmnt. This way only reachable mount points are shown.
2010-08-22 20:26:33 +02:00
Pierre Schmitz
0ebc0b4b4b prepare release 2010-08-20 12:44:16 +02:00
Pierre Schmitz
9b001033ae Add archbuild helper script to create and build in chroots
This will create chroots on demand if needed.
2010-08-20 12:41:39 +02:00
Pierre Schmitz
ae5083fc11 source PKGBUILD before evaluating install and changelog files
This makes it possible to use e.g. install=$pkgname.install
2010-08-20 11:55:33 +02:00
Pierre Schmitz
6f4e865ff9 makechrootpkg: read packager and makeflags from makepkg.conf
also set some sane default options
2010-08-18 21:43:27 +02:00
Ionut Biru
000d68f7c6 copy packages into TEMPDIR
TEMPDIR is used before packages are copied into it and made it fail
because cannot find any.

Signed-off-by: Ionut Biru <ibiru@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2010-08-18 17:30:49 +02:00
Pierre Schmitz
fc6efdc38a reduce pacman's verbosity 2010-08-17 19:30:54 +02:00
Pierre Schmitz
87f5eb6300 Use host mirror in chroot environment
* Set first enabled mirror found mirrorlist as mirror within the chroot.
* If the mirror is local bind its directory read-only into the chroot.
* Fallback is the kernel.org mirror.
2010-08-17 19:23:16 +02:00
Pierre Schmitz
1a419e7974 add default config files for makepkg and pacman 2010-08-17 18:44:11 +02:00
Pierre Schmitz
1418bfbf42 Use default locale instead of copying from host
Use en_US.UTF-8 and de_DE.UTF-8 by default (the latter is needed for some packages like gcc)
2010-08-17 18:38:47 +02:00
Pierre Schmitz
f1c05d870b tagging 0.9.8 2010-08-17 08:33:23 +02:00
Pierre Schmitz
2e6d542220 add [staging] repository 2010-08-17 08:12:03 +02:00
Pierre Schmitz
cfddde22be Fix typo 2010-08-16 21:30:44 +02:00
Pierre Schmitz
f7b67c25ff Provide /dev/{shm,pts} within chroot
implements FS#20246
2010-08-12 18:26:07 +02:00
Pierre Schmitz
65d654a9d7 lddd: correct mktemp usage 2010-07-13 15:10:47 +02:00
Pierre Schmitz
cfdfbd99f8 checkpkg: Improve output message 2010-07-11 13:46:40 +02:00
Pierre Schmitz
a01ed3869c checkpkg: Use temporary working directory 2010-07-11 13:45:51 +02:00
Pierre Schmitz
e656ec7052 Check if ~/.makepkg.conf exists
Fixes FS#20041
2010-07-01 16:51:43 +02:00
Pierre Schmitz
dcc7b6728d prepare 0.9.7 release 2010-06-28 10:32:47 +02:00
Pierre Schmitz
88764c0298 local can only be used within functions 2010-06-28 10:26:38 +02:00
Pierre Schmitz
f2959b8dd5 check if changelog and install files are commited to svn 2010-06-28 09:54:50 +02:00
Pierre Schmitz
0564514df4 remove useless sourcing of PKGBUILD 2010-06-28 09:50:08 +02:00
Pierre Schmitz
edb24eb1a0 Simplify detection of changelog and install files
Thise code was copied from makepkg
2010-06-28 09:48:21 +02:00
Andrea Scarpino
a2132bc899 read {SRC, PKG}DEST from user makepkg.conf
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2010-06-28 09:35:20 +02:00
Eric Bélanger
964c0d1640 Fixed changelog support to work with makepkg 3.4
Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2010-06-28 08:07:41 +02:00
Pierre Schmitz
76f3e25949 keep partially transferred files 2010-06-25 21:40:45 +02:00
Pierre Schmitz
85251a1d7b removed mode lines; was not a good idea after all 2010-06-24 10:01:20 +02:00
Eric Bélanger
27df94f51b commitpkg: add newline to make output look more orderly
Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2010-06-22 17:09:49 +02:00
Pierre Schmitz
12eec95ff8 set version in Makefile 2010-05-02 15:46:51 +02:00
Pierre Schmitz
d4f00819ac copy namcap.log to working dir 2010-05-02 15:42:29 +02:00
Pierre Schmitz
4a4455c086 Set target CARCH before sourcing the PKGBUILD
CARCH might be used within the PKGBUILD to select correct sources
2010-05-02 15:23:54 +02:00
Pierre Schmitz
52e140f2fe exit 1 on build failure 2010-05-02 15:16:53 +02:00
Pierre Schmitz
48dead1af7 Force correct remote file permissions 2010-03-31 23:58:59 +02:00
Pierre Schmitz
17e875f6b3 makechrootpkg: Keep source files even if build fails
implementes FS#18437
2010-03-03 21:49:22 +01:00
Pierre Schmitz
a7c5010d24 Upload any pkg.tar.* file as long as it is canonical 2010-03-03 21:41:53 +01:00
Pierre Schmitz
f72775feac PKGEXT was not defined in the context 2010-03-03 21:38:59 +01:00
Pierre Schmitz
371f57b043 Don't check if package was released already
The checks aren't reliable enough and fail if the local repo is broken due to
network failures. So for now we just allways commit.
2010-02-22 19:11:17 +01:00
Pierre Schmitz
2fe5dbf904 be more fail safe 2010-02-22 08:13:43 +01:00
Eric Bélanger
5036f1250e mkarchroot: Added default pacman cache in usage help
Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2010-02-21 19:34:11 +01:00
Pierre Schmitz
f00c8f66bd escape line breaks in find command 2010-02-17 23:55:05 +01:00
Pierre Schmitz
df4310025b Use svnversion insead of svn info 2010-02-17 18:27:09 +01:00
Pierre Schmitz
53a864a5aa Use local information to determine if a commit is needed 2010-02-17 18:05:16 +01:00
Pierre Schmitz
849e6c6de5 Check if package was already released 2010-02-17 15:24:54 +01:00
Dan McGee
62e4272ca2 commitpkg: dereference symlinks on package upload
This is a regression introduced after switching to rsync in place of scp;
scp dereferenced symlinks automatically without need for a command-line
option.

Signed-off-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2010-02-17 06:11:48 +01:00
Pierre Schmitz
dd488b3c90 add dist target to Makefile 2010-02-13 20:57:34 +01:00
Pierre Schmitz
de38f347a7 add common gitignore file 2010-02-13 20:41:46 +01:00
Pierre Schmitz
362a99b995 apply common coding style 2010-02-13 19:47:16 +01:00
Allan McRae
7a8130fec8 Further fixes to cache_dir handling
1) Typo cachedir -> cache_dir
2) Use $cache_dir when calling pacman

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2010-02-13 15:55:23 +01:00
Allan McRae
a6e1f8cfd3 Read cachedir from pacman.conf in working dir
This allows setting a different cachedir for (e.g.) i686 and x86_64
chroots.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2010-02-13 09:57:49 +01:00
Pierre Schmitz
70d7baee68 set umask to 0022
this fixes commit 7ce9cd6965
2010-02-13 07:22:54 +01:00
20 changed files with 1257 additions and 522 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*~
devtools-*.tar.gz

View File

@@ -1,28 +1,49 @@
V=0.9.10
all: all:
install: install:
# commitpkg/checkpkg and friends # commitpkg/checkpkg and friends
mkdir -p $(DESTDIR)/usr/bin install -d -m755 $(DESTDIR)/usr/bin
install -m 755 checkpkg $(DESTDIR)/usr/bin install -m 755 checkpkg $(DESTDIR)/usr/bin
install -m 755 commitpkg $(DESTDIR)/usr/bin install -m 755 commitpkg $(DESTDIR)/usr/bin
ln -sf commitpkg $(DESTDIR)/usr/bin/extrapkg ln -sf commitpkg $(DESTDIR)/usr/bin/extrapkg
ln -sf commitpkg $(DESTDIR)/usr/bin/corepkg ln -sf commitpkg $(DESTDIR)/usr/bin/corepkg
ln -sf commitpkg $(DESTDIR)/usr/bin/testingpkg ln -sf commitpkg $(DESTDIR)/usr/bin/testingpkg
ln -sf commitpkg $(DESTDIR)/usr/bin/stagingpkg
ln -sf commitpkg $(DESTDIR)/usr/bin/communitypkg ln -sf commitpkg $(DESTDIR)/usr/bin/communitypkg
ln -sf commitpkg $(DESTDIR)/usr/bin/community-testingpkg ln -sf commitpkg $(DESTDIR)/usr/bin/community-testingpkg
ln -sf commitpkg $(DESTDIR)/usr/bin/community-stagingpkg
ln -sf commitpkg $(DESTDIR)/usr/bin/multilibpkg
# arch{co,release,rm} # arch{co,release,rm}
install -m 755 archco $(DESTDIR)/usr/bin install -m 755 archco $(DESTDIR)/usr/bin
install -m 755 communityco $(DESTDIR)/usr/bin install -m 755 communityco $(DESTDIR)/usr/bin
install -m 755 archrelease $(DESTDIR)/usr/bin install -m 755 archrelease $(DESTDIR)/usr/bin
install -m 755 archrm $(DESTDIR)/usr/bin install -m 755 archrm $(DESTDIR)/usr/bin
# new chroot tools, only usable by root # new chroot tools, only usable by root
mkdir -p $(DESTDIR)/usr/sbin install -d -m 755 $(DESTDIR)/usr/sbin
install -m 755 mkarchroot $(DESTDIR)/usr/sbin install -m 755 mkarchroot $(DESTDIR)/usr/sbin
install -m 755 makechrootpkg $(DESTDIR)/usr/sbin install -m 755 makechrootpkg $(DESTDIR)/usr/sbin
#Additional packaging helper scripts 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
# Additional packaging helper scripts
install -m 755 lddd $(DESTDIR)/usr/bin install -m 755 lddd $(DESTDIR)/usr/bin
install -m 755 finddeps $(DESTDIR)/usr/bin install -m 755 finddeps $(DESTDIR)/usr/bin
install -m 755 rebuildpkgs $(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
uninstall: uninstall:
# remove all files we installed # remove all files we installed
@@ -31,10 +52,20 @@ uninstall:
rm $(DESTDIR)/usr/bin/extrapkg rm $(DESTDIR)/usr/bin/extrapkg
rm $(DESTDIR)/usr/bin/corepkg rm $(DESTDIR)/usr/bin/corepkg
rm $(DESTDIR)/usr/bin/testingpkg rm $(DESTDIR)/usr/bin/testingpkg
rm $(DESTDIR)/usr/bin/stagingpkg
rm $(DESTDIR)/usr/bin/communitypkg rm $(DESTDIR)/usr/bin/communitypkg
rm $(DESTDIR)/usr/bin/community-testingpkg rm $(DESTDIR)/usr/bin/community-testingpkg
rm $(DESTDIR)/usr/bin/community-stagingpkg
rm $(DESTDIR)/usr/bin/multilibpkg
rm $(DESTDIR)/usr/sbin/mkarchroot rm $(DESTDIR)/usr/sbin/mkarchroot
rm $(DESTDIR)/usr/sbin/makechrootpkg 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/lddd rm $(DESTDIR)/usr/bin/lddd
rm $(DESTDIR)/usr/bin/finddeps rm $(DESTDIR)/usr/bin/finddeps
rm $(DESTDIR)/usr/bin/archco rm $(DESTDIR)/usr/bin/archco
@@ -42,3 +73,12 @@ uninstall:
rm $(DESTDIR)/usr/bin/archrm rm $(DESTDIR)/usr/bin/archrm
rm $(DESTDIR)/usr/bin/communityco rm $(DESTDIR)/usr/bin/communityco
rm $(DESTDIR)/usr/bin/rebuildpkgs 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
dist:
git archive --format=tar --prefix=devtools-$(V)/ $(V) | gzip -9 > devtools-$(V).tar.gz

51
archbuild Executable file
View File

@@ -0,0 +1,51 @@
#!/bin/bash
cmd="$(basename "${0%-build}")"
if [ "${cmd}" == 'multilib' ]; then
repo='multilib'
arch='x86_64'
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 [ "$(uname -m)" == 'i686' -a "${arch}" != 'i686' ]; then
echo 'You can only build i686 packages on this system'
exit 1
fi
if [ "$(uname -m)" != 'x86_64' -a "${repo}" == 'multilib' ]; then
echo 'You can only build multilib packages on a x86_64 system'
exit 1
fi
if ${clean_first} || [ ! -d "${chroots}/${repo}-${arch}" ]; then
echo "Creating chroot for [${repo}] (${arch})..."
sudo rm -rf ${chroots}/${repo}-${arch}
sudo mkdir -p ${chroots}/${repo}-${arch}
setarch ${arch} sudo mkarchroot \
-C /usr/share/devtools/pacman-${repo}.conf \
-M /usr/share/devtools/makepkg-${arch}.conf \
${chroots}/${repo}-${arch}/root \
base base-devel sudo
fi
echo "Building in chroot for [${repo}] (${arch})..."
setarch ${arch} sudo makechrootpkg -c -u -r ${chroots}/${repo}-${arch}

6
archco
View File

@@ -1,10 +1,10 @@
#!/bin/bash #!/bin/bash
if [ "$1" = "" ]; then if [ "$1" = '' ]; then
echo "Usage: archco <package name> [<package name>]" echo 'Usage: archco <package name> [<package name>]'
exit 1 exit 1
fi fi
for i in "$@"; do for i in "$@"; do
svn co svn+ssh://gerolde.archlinux.org/srv/svn-packages/$i svn co svn+ssh://gerolde.archlinux.org/srv/svn-packages/$i
done done

View File

@@ -1,33 +1,33 @@
#!/bin/bash #!/bin/bash
if [ "$1" = "" ]; then abort() {
echo "Usage: archrelease <repo>" echo ${1:-'archrelease: Cancelled'}
exit 1 exit 1
}
if [ "$1" = '' ]; then
abort 'Usage: archrelease <repo>'
fi fi
if [ ! -f PKGBUILD ]; then if [ ! -f PKGBUILD ]; then
echo "archrelease: PKGBUILD not found" abort 'archrelease: PKGBUILD not found'
exit 1
fi fi
if [ "$(basename $(readlink -f .))" != "trunk" ]; then if [ "$(basename $(readlink -f .))" != 'trunk' ]; then
echo "archrelease: Not in a package trunk dir" abort 'archrelease: Not in a package trunk dir'
exit 1
fi fi
if [ "$(svn diff)" != "" ]; then if [ ! -z "$(svn status -q)" ]; then
echo "archrelease: You have not committed your changes yet!" abort 'archrelease: You have not committed your changes yet!'
echo " Please run 'upgpkg' or 'svn commit' first"
exit 1
fi fi
echo -n 'releasing package...' echo -n 'releasing package...'
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}"
svn commit -q -m "archrelease: remove $1" svn commit -q -m "archrelease: remove ${1}" || abort
fi fi
svn copy -q -r HEAD trunk repos/$1 svn copy -q -r HEAD trunk "repos/${1}"
svn commit -q -m "archrelease: copy trunk to $1" svn commit -q -m "archrelease: copy trunk to ${1}" || abort
popd >/dev/null popd >/dev/null
echo 'done' echo 'done'

4
archrm
View File

@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
if [ "$1" = "" ]; then if [ "$1" = '' ]; then
echo "Usage: archrm <path to checkout>" echo 'Usage: archrm <path to checkout>'
exit 1 exit 1
fi fi

130
checkpkg
View File

@@ -1,11 +1,11 @@
#!/bin/bash #!/bin/bash
# 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!" echo '/etc/makepkg.conf not found!'
exit 1 exit 1
fi fi
# Source user-specific makepkg.conf overrides # Source user-specific makepkg.conf overrides
@@ -18,77 +18,81 @@ strip_url() {
} }
if [ ! -f PKGBUILD ]; then if [ ! -f PKGBUILD ]; then
echo "This must be run in the directory of a built package." echo 'This must be run in the directory of a built package.'
exit 1 exit 1
fi fi
source PKGBUILD . PKGBUILD
if [ "$arch" == "any" ]; then if [ "$arch" == 'any' ]; then
CARCH="any" CARCH='any'
fi fi
STARTDIR=$(pwd)
TEMPDIR=$(mktemp -d /tmp/checkpkg-script.XXXX)
cd $TEMPDIR
for _pkgname in ${pkgname[@]}; do for _pkgname in ${pkgname[@]}; do
pkgfile=${_pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT} pkgfile=${_pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}
oldstylepkgfile=${_pkgname}-${pkgver}-${pkgrel}${PKGEXT} oldstylepkgfile=${_pkgname}-${pkgver}-${pkgrel}${PKGEXT}
if [ -f "$(pwd)/$pkgfile" ]; then if [ -f "$STARTDIR/$pkgfile" ]; then
pkgfile=$(pwd)/$pkgfile cp "$STARTDIR/$pkgfile" .
elif [ -f "$PKGDEST/$pkgfile" ]; then elif [ -f "$PKGDEST/$pkgfile" ]; then
pkgfile=$PKGDEST/$pkgfile cp "$PKGDEST/$pkgfile" .
elif [ -f "$(pwd)/$oldstylepkgfile" ]; then elif [ -f "$STARTDIR/$oldstylepkgfile" ]; then
pkgfile=$(pwd)/$oldstylepkgfile cp "$STARTDIR/$oldstylepkgfile" .
elif [ -f "$PKGDEST/$oldstylepkgfile" ]; then elif [ -f "$PKGDEST/$oldstylepkgfile" ]; then
pkgfile=$PKGDEST/$oldstylepkgfile cp "$PKGDEST/$oldstylepkgfile" .
else
echo "File \"$pkgfile\" doesn't exist"
exit 1
fi
tmp=`pacman -Spd --noconfirm $_pkgname`
if [ $? -ne 0 ]; then
echo "Couldn't download previous package for $_pkgname."
exit 1
fi
pkgurl=`echo $tmp | rev | cut -d ' ' -f 1 | rev`
oldpkg=`strip_url $pkgurl`
if [ "$(basename $oldpkg)" = "$(basename $pkgfile)" ]; then
echo "The built package ($_pkgname) is the one in the repo right now!"
exit 1
fi
if [ ! -f $oldpkg ]; then
if echo $pkgurl | grep "^file:///" > /dev/null 2>&1; then
cp `echo $pkgurl | sed 's#^file://##'` .
elif [ -f $PKGDEST/$oldpkg ]; then
cp $PKGDEST/$oldpkg .
else else
wget --quiet $pkgurl echo "File \"$pkgfile\" doesn't exist"
exit 1
fi fi
fi
bsdtar tf $oldpkg > filelist-$_pkgname-old tmp=`pacman -Spd --noconfirm $_pkgname`
bsdtar tf "$pkgfile" > filelist-$_pkgname
sort -o filelist-$_pkgname filelist-$_pkgname if [ $? -ne 0 ]; then
sort -o filelist-$_pkgname-old filelist-$_pkgname-old echo "Couldn't download previous package for $_pkgname."
exit 1
fi
diff filelist-$_pkgname-old filelist-$_pkgname pkgurl=`echo $tmp | rev | cut -d ' ' -f 1 | rev`
if diff filelist-$_pkgname-old filelist-$_pkgname | grep '\.so\.' > /dev/null 2>&1; then oldpkg=`strip_url $pkgurl`
mkdir -p pkg
cd pkg if [ "$(basename $oldpkg)" = "$(basename $pkgfile)" ]; then
bsdtar xf "$pkgfile" > /dev/null echo "The built package ($_pkgname) is the one in the repo right now!"
for i in `diff ../filelist-$_pkgname-old ../filelist-$_pkgname | grep \> | grep \.so\. | awk '{print $2}'`; do exit 1
echo -n "${i}: " fi
objdump -p $i | grep SONAME
done if [ ! -f $oldpkg ]; then
else if echo $pkgurl | grep '^file:///' > /dev/null 2>&1; then
echo "No filename differences for $_pkgname." cp `echo $pkgurl | sed 's#^file://##'` .
fi elif [ -f $PKGDEST/$oldpkg ]; then
cp $PKGDEST/$oldpkg .
else
wget --quiet $pkgurl
fi
fi
bsdtar tf $oldpkg > filelist-$_pkgname-old
bsdtar tf "$pkgfile" > filelist-$_pkgname
sort -o filelist-$_pkgname filelist-$_pkgname
sort -o filelist-$_pkgname-old filelist-$_pkgname-old
diff filelist-$_pkgname-old filelist-$_pkgname
if diff filelist-$_pkgname-old filelist-$_pkgname | grep '\.so\.' > /dev/null 2>&1; then
mkdir -p pkg
cd pkg
bsdtar xf ../"$pkgfile" > /dev/null
for i in `diff ../filelist-$_pkgname-old ../filelist-$_pkgname | grep \> | grep \.so\. | awk '{print $2}'`; do
echo -n "${i}: "
objdump -p $i | grep SONAME
done
else
echo "No soname differences for $_pkgname."
fi
done done
# vim:ft=sh:ts=4:sw=4:et: echo "Files saved to $TEMPDIR"

148
commitpkg
View File

@@ -1,104 +1,134 @@
#!/bin/bash #!/bin/bash
abort() { abort() {
echo ${1:-"Cancelled"} echo ${1:-'Cancelled'}
exit 1 exit 1
} }
getpkgfile() {
if [[ ${#} -ne 1 ]]; then
echo 'ERROR: No canonical package found!' >&2
exit 1
elif [ ! -f "${1}" ]; then
echo "ERROR: Package ${1} not found!" >&2
exit 1
fi
echo ${1}
}
# 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!" abort '/etc/makepkg.conf not found!'
fi fi
# Source user-specific makepkg.conf overrides # Source user-specific makepkg.conf overrides
if [ -r ~/.makepkg.conf ]; then if [ -r ~/.makepkg.conf ]; then
source ~/.makepkg.conf . ~/.makepkg.conf
fi fi
cmd=$(basename "$0") cmd=$(basename "$0")
if [ ! -f PKGBUILD ]; then if [ ! -f PKGBUILD ]; then
abort "No PKGBUILD file" abort 'No PKGBUILD file'
fi fi
source PKGBUILD . PKGBUILD
pkgbase=${pkgbase:-$pkgname} pkgbase=${pkgbase:-$pkgname}
# set up repo-specific opts depending on how we were called # set up repo-specific opts depending on how we were called
server="gerolde.archlinux.org" server='gerolde.archlinux.org'
if [ "$cmd" == "extrapkg" ]; then if [ "$cmd" == 'extrapkg' ]; then
repo="extra" repo='extra'
elif [ "$cmd" == "corepkg" ]; then elif [ "$cmd" == 'corepkg' ]; then
repo="core" repo='core'
elif [ "$cmd" == "testingpkg" ]; then elif [ "$cmd" == 'testingpkg' ]; then
repo="testing" repo='testing'
elif [ "$cmd" == "communitypkg" ]; then elif [ "$cmd" == 'stagingpkg' ]; then
repo="community" repo='staging'
server="aur.archlinux.org" elif [ "$cmd" == 'communitypkg' ]; then
elif [ "$cmd" == "community-testingpkg" ]; then repo='community'
repo="community-testing" server='aur.archlinux.org'
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'
else else
if [ $# -eq 0 ]; then if [ $# -eq 0 ]; then
abort "usage: commitpkg <reponame> [-l limit] [commit message]" abort 'usage: commitpkg <reponame> [-l limit] [commit message]'
fi fi
repo="$1" repo="$1"
shift shift
fi fi
# check if all local source files are under version control # check if all local source files are under version control
(for s in ${source[@]} $install; do (for s in ${source[@]}; do
echo $s | grep -vq '://' && \ echo $s | grep -vq '://' && \
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
# check if changelog and install files are under version control
(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 svn status ${file} | grep -q '?'; then
abort "${file} is not under version control"
fi
done
done) || true done) || true
# 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 unset rsyncopts
if [ "$1" = "-l" ]; then if [ "$1" = '-l' ]; then
rsyncopts="--bwlimit=$2" rsyncopts="--bwlimit=$2"
shift 2 shift 2
fi fi
echo -n 'committing changes to trunk...' echo -n 'committing changes to trunk...'
if [ -n "$1" ]; then if [ -n "$1" ]; then
svn commit -q -m "upgpkg: $pkgbase $pkgver-$pkgrel svn commit -q -m "upgpkg: $pkgbase $pkgver-$pkgrel
$1" || abort $1" || abort
else else
svn commit -q || abort svn commit -q || abort
fi fi
echo 'done' echo 'done'
for _arch in ${arch[@]}; do for _arch in ${arch[@]}; do
for _pkgname in ${pkgname[@]}; do for _pkgname in ${pkgname[@]}; do
pkgfile=$_pkgname-$pkgver-$pkgrel-${_arch}$PKGEXT pkgfile=$(getpkgfile "$_pkgname-$pkgver-$pkgrel-${_arch}".pkg.tar.* 2>/dev/null)
pkgdestfile=$(getpkgfile "$PKGDEST/$_pkgname-$pkgver-$pkgrel-${_arch}".pkg.tar.* 2>/dev/null)
if [ ! -f $pkgfile -a -f "$PKGDEST/$pkgfile" ]; then if [ ! -f "$pkgfile" -a -f "$pkgdestfile" ]; then
pkgfile="$PKGDEST/$pkgfile" pkgfile="$pkgdestfile"
elif [ ! -f $pkgfile ]; then elif [ ! -f "$pkgfile" ]; then
echo "skipping ${_arch}" echo "skipping ${_arch}"
continue 2 continue 2
fi fi
echo -n 'uploading ' echo -n 'uploading '
rsync -c -h --progress $rsyncopts "${pkgfile}" -e ssh $server:staging/$repo || abort rsync -p --chmod 'ug=rw,o=r' -c -h -L --progress $rsyncopts --partial "${pkgfile}" -e ssh $server:staging/$repo || abort
done done
archrelease $repo-${_arch} || abort archrelease $repo-${_arch} || abort
done done
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 -n "removing $repo-i686 and $repo-x86_64..." echo "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' echo 'done'
popd >/dev/null popd >/dev/null
fi fi
fi fi
# vim:ft=sh:ts=4:sw=4:et:

View File

@@ -1,10 +1,10 @@
#!/bin/bash #!/bin/bash
if [ "$1" = "" ]; then if [ "$1" = '' ]; then
echo "Usage: communityco <package name> [<package name>]" echo 'Usage: communityco <package name> [<package name>]'
exit 1 exit 1
fi fi
for i in "$@"; do for i in "$@"; do
svn co svn+ssh://aur.archlinux.org/srv/svn-packages/$i svn co svn+ssh://aur.archlinux.org/srv/svn-packages/$i
done done

View File

@@ -3,39 +3,37 @@
# finddeps - find packages that depend on a given depname # finddeps - find packages that depend on a given depname
# #
if [ "$1" = "" ]; then if [ "$1" = '' ]; 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 0
fi fi
match=$1 match=$1
tld=$(pwd) tld=$(pwd)
for d in $(find . -type d); do for d in $(find . -type d); do
cd $d cd $d
if [ -f PKGBUILD ]; then if [ -f PKGBUILD ]; then
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 comaparator, 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 comaparator, if any
depname=${dep%%[<>=]*} depname=${dep%%[<>=]*}
if [ "$depname" = "$match" ]; then if [ "$depname" = "$match" ]; then
echo "$d (makedepends)" echo "$d (makedepends)"
fi fi
done done
fi fi
cd $tld cd $tld
done done
# vim:ft=sh:ts=4:sw=4:et:

49
lddd
View File

@@ -6,42 +6,41 @@
ifs=$IFS ifs=$IFS
IFS=':' IFS=':'
libdirs="/lib:/usr/lib:/opt/qt/lib:/opt/kde/lib:/usr/lib/libfakeroot:/opt/NX/lib" libdirs='/lib:/usr/lib:/opt/qt/lib:/opt/kde/lib:/usr/lib/libfakeroot:/opt/NX/lib'
extras= extras=
TEMPDIR=$(mktemp /tmp/lddd-script.XXXX) TEMPDIR=$(mktemp -d /tmp/lddd-script.XXXX)
rm $TEMPDIR
mkdir -p $TEMPDIR
echo " Go out and drink some tea, this will take a while :) ..." echo '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 for tree in $PATH $libdirs $extras; do
do echo DIR $tree
echo 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' ! -name '*.rb' ! -name '*.ko' ! -name '*.pc' ! -name '*.enc' ! -name '*.cf' ! -name '*.def' ! -name '*.rules' ! -name '*.cmi' ! -name '*.mli' ! -name '*.ml' ! -name '*.cma' ! -name '*.cmx' ! -name '*.cmxa' ! -name '*.pod' ! -name '*.pm' ! -name '*.pl' ! -name '*.al' ! -name '*.tcl' ! -name '*.bs' ! -name '*.o' ! -name '*.png' ! -name '*.gif' ! -name '*.cmo' ! -name '*.cgi' ! -name '*.defs' ! -name '*.conf' ! -name '*_LOCALE' ! -name 'Compose' ! -name '*_OBJS' ! -name '*.msg' ! -name '*.mcopclass' ! -name '*.mcoptype') files=$(find $tree -type f ! -name '*.a' ! -name '*.la' ! -name '*.py*' ! -name '*.txt' ! -name '*.h' ! -name '*.ttf' ! \
IFS=$ifs -name '*.rb' ! -name '*.ko' ! -name '*.pc' ! -name '*.enc' ! -name '*.cf' ! -name '*.def' ! -name '*.rules' ! -name \
for i in $files '*.cmi' ! -name '*.mli' ! -name '*.ml' ! -name '*.cma' ! -name '*.cmx' ! -name '*.cmxa' ! -name '*.pod' ! -name '*.pm' \
do ! -name '*.pl' ! -name '*.al' ! -name '*.tcl' ! -name '*.bs' ! -name '*.o' ! -name '*.png' ! -name '*.gif' ! -name '*.cmo' \
if [ `file $i | grep -c 'ELF'` -ne 0 ]; then ! -name '*.cgi' ! -name '*.defs' ! -name '*.conf' ! -name '*_LOCALE' ! -name 'Compose' ! -name '*_OBJS' ! -name '*.msg' ! \
# Is an ELF binary. -name '*.mcopclass' ! -name '*.mcoptype')
if [ `ldd $i 2>/dev/null | grep -c 'not found'` -ne 0 ]; then IFS=$ifs
# Missing lib. for i in $files; do
echo "$i:" >> $TEMPDIR/raw.txt if [ `file $i | grep -c 'ELF'` -ne 0 ]; then
ldd $i 2>/dev/null | grep 'not found' >> $TEMPDIR/raw.txt # Is an ELF binary.
fi if [ `ldd $i 2>/dev/null | grep -c 'not found'` -ne 0 ]; then
fi # Missing lib.
done echo "$i:" >> $TEMPDIR/raw.txt
ldd $i 2>/dev/null | grep 'not found' >> $TEMPDIR/raw.txt
fi
fi
done
done done
grep '^/' $TEMPDIR/raw.txt | sed -e 's/://g' >> $TEMPDIR/affected-files.txt grep '^/' $TEMPDIR/raw.txt | sed -e 's/://g' >> $TEMPDIR/affected-files.txt
# invoke pacman # invoke pacman
for i in $(cat $TEMPDIR/affected-files.txt); do for i in $(cat $TEMPDIR/affected-files.txt); do
pacman -Qo $i | awk '{print $4,$5}' >> $TEMPDIR/pacman.txt pacman -Qo $i | awk '{print $4,$5}' >> $TEMPDIR/pacman.txt
done 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" echo "Files saved to $TEMPDIR"
# vim:ft=sh:ts=4:sw=4:et:

View File

@@ -8,64 +8,63 @@
# 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.
FORCE="n" FORCE='n'
RUN="" RUN=''
MAKEPKG_ARGS="-sr" MAKEPKG_ARGS='-s --noconfirm'
REPACK="" REPACK=''
COPY="copy" COPY='copy'
WORKDIR=$PWD WORKDIR=$PWD
update_first="0" update_first='0'
clean_first="0" clean_first='0'
install_pkg="" install_pkg=''
add_to_db=0 add_to_db=0
chrootdir="" chrootdir=''
APPNAME=$(basename "${0}") APPNAME=$(basename "${0}")
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" echo ' clean chroot. All unrecognized arguments passed to this script'
echo " clean chroot. All unrecognized arguments passed to this script" echo ' will be passed to makepkg.'
echo " will be passed to makepkg." echo ''
echo "" echo ' The chroot dir consists of the following directories:'
echo " The chroot dir consists of the following directories:" echo ' <chrootdir>/{root, copy} but only "root" is required'
echo " <chrootdir>/{root, copy} but only 'root' is required" echo ' by default. The working copy will be created as needed'
echo " by default. The working copy will be created as needed" echo ''
echo "" echo 'The chroot "root" directory must be created via the following'
echo "The chroot 'root' directory must be created via the following" echo 'command:'
echo "command:" echo ' mkarchroot <chrootdir>/root base base-devel sudo'
echo " mkarchroot <chrootdir>/root base base-devel sudo" echo ''
echo "" echo "Default makepkg args: $MAKEPKG_ARGS"
echo "Default makepkg args: $MAKEPKG_ARGS" echo ''
echo "" echo 'Flags:'
echo "Flags:" echo '-h This help'
echo "-h This help" echo '-c Clean the chroot before building'
echo "-c Clean the chroot before building" echo '-u Update the working copy of 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 " This is useful for rebuilds without dirtying the pristine" echo ' chroot'
echo " chroot" echo '-d Add the package to a local db at /repo after building'
echo "-d Add the package to a local db at /repo after building" 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 maintain multiple copies Default: copy" exit 1
exit 1
} }
while getopts 'hcudr:I:l:' arg; do while getopts 'hcudr:I:l:' arg; do
case "${arg}" in case "${arg}" in
h) usage ;; h) usage ;;
c) clean_first=1 ;; c) clean_first=1 ;;
u) update_first=1 ;; u) update_first=1 ;;
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 #Get rid of trailing / in chrootdir
@@ -77,174 +76,186 @@ MAKEPKG_ARGS="$MAKEPKG_ARGS ${*:$OPTIND}"
# See if -R was passed to makepkg # See if -R was passed to makepkg
for arg in ${*:$OPTIND}; do for arg in ${*:$OPTIND}; do
if [ "$arg" = "-R" ]; then if [ "$arg" = '-R' ]; then
REPACK=1 REPACK=1
break; break;
fi fi
done done
if [ "$EUID" != "0" ]; then if [ "$EUID" != '0' ]; then
echo "This script must be run as root." echo 'This script must be run as root.'
exit 1 exit 1
fi fi
if [ ! -f PKGBUILD ]; then if [ ! -f PKGBUILD ]; then
echo "This must be run in a directory containing a PKGBUILD." echo 'This must be run in a directory containing a PKGBUILD.'
exit 1 exit 1
fi fi
source PKGBUILD
if [ ! -d "$chrootdir" ]; then if [ ! -d "$chrootdir" ]; then
echo "No chroot dir defined, or invalid path '$chrootdir'" echo "No chroot dir defined, or invalid path '$chrootdir'"
exit 1 exit 1
fi fi
if [ ! -d "$chrootdir/root" ]; then if [ ! -d "$chrootdir/root" ]; then
echo "Missing chroot dir root directory." echo 'Missing chroot dir root directory.'
echo "Try using: mkarchroot $chrootdir/root base base-devel sudo" echo "Try using: mkarchroot $chrootdir/root base base-devel sudo"
usage usage
fi fi
umask 000 umask 0022
if [ ! -d "$copydir" -o "$clean_first" -eq "1" ]; then if [ ! -d "$copydir" -o "$clean_first" -eq "1" ]; then
echo -n 'creating clean working copy...' echo -n 'creating clean working copy...'
mkdir -p "$copydir" mkdir -p "$copydir"
rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir" rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir"
echo 'done' echo 'done'
fi fi
if [ -n "$install_pkg" ]; then if [ -n "$install_pkg" ]; then
pkgname="$(basename "$install_pkg")" pkgname="$(basename "$install_pkg")"
cp "$install_pkg" "$copydir/$pkgname" cp "$install_pkg" "$copydir/$pkgname"
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
if [ $update_first -eq 1 ]; then if [ $update_first -eq 1 ]; then
mkarchroot -r "pacman -Syu --noconfirm" "$copydir" mkarchroot -u "$copydir"
fi 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
# read .makpekg.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 fi
# Get SRC/PKGDEST from makepkg.conf # Get SRC/PKGDEST from makepkg.conf
SRCDEST=$(grep '^SRCDEST=' /etc/makepkg.conf | cut -d= -f2) if [ -f "${makepkg_conf}" ]; then
PKGDEST=$(grep '^PKGDEST=' /etc/makepkg.conf | cut -d= -f2) 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" [ -d "$copydir/pkgdest" ] || mkdir "$copydir/pkgdest"
if ! grep "PKGDEST=/pkgdest" "$copydir/etc/makepkg.conf" >/dev/null 2>&1; then if ! grep 'PKGDEST="/pkgdest"' "$copydir/etc/makepkg.conf" >/dev/null 2>&1; then
echo "PKGDEST=/pkgdest" >> "$copydir/etc/makepkg.conf" echo 'PKGDEST="/pkgdest"' >> "$copydir/etc/makepkg.conf"
fi fi
[ -d "$copydir/srcdest" ] || mkdir "$copydir/srcdest" [ -d "$copydir/srcdest" ] || mkdir "$copydir/srcdest"
if ! grep "SRCDEST=/srcdest" "$copydir/etc/makepkg.conf" >/dev/null 2>&1; then 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)
[ -n "${MAKEFLAGS}" ] && echo "MAKEFLAGS='${MAKEFLAGS}'" >> "$copydir/etc/makepkg.conf"
[ -z "${PACKAGER}" ] && eval $(grep '^PACKAGER=' /etc/makepkg.conf)
[ -n "${PACKAGER}" ] && echo "PACKAGER='${PACKAGER}'" >> "$copydir/etc/makepkg.conf"
# 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 # Copy PKGBUILD and sources
source PKGBUILD source=($(. PKGBUILD; echo ${source[@]}))
cp PKGBUILD "$copydir/build/" cp PKGBUILD "$copydir/build/"
for f in ${source[@]}; do for f in ${source[@]}; do
basef=$(echo $f | sed 's|::.*||' | sed 's|^.*://.*/||g') basef=$(echo $f | sed 's|::.*||' | sed 's|^.*://.*/||g')
if [ -f "$basef" ]; then if [ -f "$basef" ]; then
cp "$basef" "$copydir/srcdest/" cp "$basef" "$copydir/srcdest/"
elif [ -f "$SRCDEST/$basef" ]; then elif [ -f "$SRCDEST/$basef" ]; then
cp "$SRCDEST/$basef" "$copydir/srcdest/" cp "$SRCDEST/$basef" "$copydir/srcdest/"
fi fi
done done
install_files=$(grep "install=" PKGBUILD) ( . PKGBUILD
for pkg in ${pkgname[@]}; do for i in 'changelog' 'install'; do
install_files+=' ' filelist=$(sed -n "s/^[[:space:]]*$i=//p" PKGBUILD)
install_files+=$(echo $install_files |sed "s/\$pkgname/$pkg/"|sed "s/\${pkgname}/$pkg/") for file in $filelist; do
install_files=$(eval echo $install_files |tr '[:blank:]' '\n'|sort |uniq) # evaluate any bash variables used
eval file=${file}
if [[ -f "$file" ]]; then
cp "$file" "$copydir/build/"
fi
done
done done
)
for f in $install_files;do
install="${f#"install="}"
if [ "$install" != "" -a -f "$install" ]; then
cp "$install" "$copydir/build/"
fi
done
if [ -f "ChangeLog" ]; then
cp ChangeLog "$copydir/build/"
fi
chown -R nobody "$copydir/build" chown -R nobody "$copydir/build"
chown -R nobody "$copydir/srcdest" chown -R nobody "$copydir/srcdest"
chown -R nobody "$copydir/pkgdest" chown -R nobody "$copydir/pkgdest"
if ! grep "^nobody" "$copydir/etc/sudoers" >/dev/null 2>&1; then if ! grep "^nobody" "$copydir/etc/sudoers" >/dev/null 2>&1; then
touch "$copydir/etc/sudoers" touch "$copydir/etc/sudoers"
echo "nobody ALL=(ALL) NOPASSWD: ALL" >> "$copydir/etc/sudoers" echo 'nobody ALL=(ALL) NOPASSWD: ALL' >> "$copydir/etc/sudoers"
chmod 440 "$copydir/etc/sudoers" chmod 440 "$copydir/etc/sudoers"
fi fi
#This is a little gross, but this way the script is recreated every time in the #This is a little gross, but this way the script is recreated every time in the
#working copy #working copy
(cat <<EOF (cat <<EOF
#!/bin/bash #!/bin/bash
export LANG=$LOCALE export LANG=C
cd /build cd /build
export HOME=/build export HOME=/build
sudo -u nobody makepkg $MAKEPKG_ARGS || touch BUILD_FAILED sudo -u nobody makepkg $MAKEPKG_ARGS || touch BUILD_FAILED
[ -f BUILD_FAILED ] && exit 1 [ -f BUILD_FAILED ] && exit 1
which namcap &>/dev/null && namcap /build/PKGBUILD /pkgdest/*${PKGEXT} > /pkgdest/namcap.log which namcap &>/dev/null && namcap /build/PKGBUILD /pkgdest/*.pkg.tar.* > /build/namcap.log
exit 0 exit 0
EOF EOF
) > "$copydir/chrootbuild" ) > "$copydir/chrootbuild"
chmod +x "$copydir/chrootbuild" chmod +x "$copydir/chrootbuild"
if mkarchroot -r "/chrootbuild" "$copydir"; then if mkarchroot -r "/chrootbuild" "$copydir"; then
for pkgfile in "${copydir}"/pkgdest/*${PKGEXT}; do for pkgfile in "${copydir}"/pkgdest/*.pkg.tar.*; do
[ -e "$pkgfile" ] || continue [ -e "$pkgfile" ] || continue
_pkgname=$(basename "$pkgfile") if [ "$add_to_db" -eq "1" ]; then
if [ "$add_to_db" -eq "1" ]; then mkdir -p "${copydir}/repo"
[ -d "${copydir}/repo" ] || mkdir -p "${copydir}/repo" pushd "${copydir}/repo" >/dev/null
pushd "${copydir}/repo" >/dev/null cp "$pkgfile" .
cp "$pkgfile" . repo-add repo.db.tar.gz "$(basename "$pkgfile")"
repo-add repo.db.tar.gz "$_pkgname" popd >/dev/null
popd >/dev/null fi
fi
if [ -d "$PKGDEST" ]; then if [ -d "$PKGDEST" ]; then
mv "$pkgfile" "${PKGDEST}" mv "$pkgfile" "${PKGDEST}"
else else
mv "$pkgfile" "${WORKDIR}" mv "$pkgfile" "${WORKDIR}"
fi fi
done done
for f in "${copydir}"/srcdest/*; do for l in "${copydir}"/build/{namcap,*-{build,package}}.log; do
[ -e "$f" ] || continue [ -f "$l" ] && mv "$l" "${WORKDIR}"
if [ -d "$SRCDEST" ]; then done
mv "$f" "${SRCDEST}"
else
mv "$f" "${WORKDIR}"
fi
done
for l in "${copydir}"/build/*-{build,package}.log; do
[ -f "$l" ] && mv "$l" "${WORKDIR}"
done
else else
#just in case. We returned 1, make sure we fail #just in case. We returned 1, make sure we fail
touch "${copydir}/build/BUILD_FAILED" touch "${copydir}/build/BUILD_FAILED"
fi 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 if [ -e "${copydir}/build/BUILD_FAILED" ]; then
echo "Build failed, check $copydir/build" echo "Build failed, check $copydir/build"
rm "${copydir}/build/BUILD_FAILED" rm "${copydir}/build/BUILD_FAILED"
exit 1
else else
rm -rf "${copydir}"/build/* rm -rf "${copydir}"/build/*
fi fi
# vim:ft=sh:ts=4:sw=4:et:

115
makepkg-i686.conf Normal file
View File

@@ -0,0 +1,115 @@
#
# /etc/makepkg.conf
#
#########################################################################
# SOURCE ACQUISITION
#########################################################################
#
#-- The download utilities that makepkg should use to acquire sources
# Format: 'protocol::agent'
DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3 -O %o %u'
'http::/usr/bin/wget -c -t 3 --waitretry=3 -O %o %u'
'https::/usr/bin/wget -c -t 3 --waitretry=3 --no-check-certificate -O %o %u'
'rsync::/usr/bin/rsync -z %u %o'
'scp::/usr/bin/scp -C %u %o')
# Other common tools:
# /usr/bin/snarf
# /usr/bin/lftpget -c
# /usr/bin/curl
#########################################################################
# ARCHITECTURE, COMPILE FLAGS
#########################################################################
#
CARCH="i686"
CHOST="i686-pc-linux-gnu"
#-- Exclusive: will only run on i686
# -march (or -mcpu) builds exclusively for an architecture
# -mtune optimizes for an architecture, but builds for whole processor family
CFLAGS="-march=i686 -mtune=generic -O2 -pipe"
CXXFLAGS="-march=i686 -mtune=generic -O2 -pipe"
LDFLAGS="-Wl,--hash-style=gnu -Wl,--as-needed"
#-- Make Flags: change this for DistCC/SMP systems
#MAKEFLAGS="-j2"
#########################################################################
# BUILD ENVIRONMENT
#########################################################################
#
# Defaults: BUILDENV=(fakeroot !distcc color !ccache)
# A negated environment option will do the opposite of the comments below.
#
#-- fakeroot: Allow building packages as a non-root user
#-- distcc: Use the Distributed C/C++/ObjC compiler
#-- color: Colorize output messages
#-- ccache: Use ccache to cache compilation
#
BUILDENV=(fakeroot !distcc color !ccache)
#
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster.
#DISTCC_HOSTS=""
#########################################################################
# GLOBAL PACKAGE OPTIONS
# These are default values for the options=() settings
#########################################################################
#
# Default: OPTIONS=(strip docs libtool emptydirs zipman purge)
# A negated option will do the opposite of the comments below.
#
#-- strip: Strip symbols from binaries/libraries in STRIP_DIRS
#-- docs: Save doc directories specified by DOC_DIRS
#-- libtool: Leave libtool (.la) files in packages
#-- emptydirs: Leave empty directories in packages
#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
#-- purge: Remove files specified by PURGE_TARGETS
#
OPTIONS=(strip docs libtool emptydirs zipman purge)
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5)
#-- Options to be used when stripping binaries. See `man strip' for details.
STRIP_BINARIES="--strip-all"
#-- Options to be used when stripping shared libraries. See `man strip' for details.
STRIP_SHARED="--strip-unneeded"
#-- Options to be used when stripping static libraries. See `man strip' for details.
STRIP_STATIC="--strip-debug"
#-- Manual (man and info) directories to compress (if zipman is specified)
MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
#-- Doc directories to remove (if !docs is specified)
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)
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
#########################################################################
# PACKAGE OUTPUT
#########################################################################
#
# Default: put built package and cached source in build directory
#
#-- Destination: specify a fixed directory where all packages will be placed
#PKGDEST=/home/packages
#-- Source cache: specify a fixed directory where source files will be cached
#SRCDEST=/home/sources
#-- Source packages: specify a fixed directory where all src packages will be placed
#SRCPKGDEST=/home/srcpackages
#-- Packager: name/email of the person or organization building packages
#PACKAGER="John Doe <john@doe.com>"
#########################################################################
# EXTENSION DEFAULTS
#########################################################################
#
# WARNING: Do NOT modify these variables unless you know what you are
# doing.
#
PKGEXT='.pkg.tar.xz'
SRCEXT='.src.tar.gz'
# vim: set ft=sh ts=2 sw=2 et:

115
makepkg-x86_64.conf Normal file
View File

@@ -0,0 +1,115 @@
#
# /etc/makepkg.conf
#
#########################################################################
# SOURCE ACQUISITION
#########################################################################
#
#-- The download utilities that makepkg should use to acquire sources
# Format: 'protocol::agent'
DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3 -O %o %u'
'http::/usr/bin/wget -c -t 3 --waitretry=3 -O %o %u'
'https::/usr/bin/wget -c -t 3 --waitretry=3 --no-check-certificate -O %o %u'
'rsync::/usr/bin/rsync -z %u %o'
'scp::/usr/bin/scp -C %u %o')
# Other common tools:
# /usr/bin/snarf
# /usr/bin/lftpget -c
# /usr/bin/curl
#########################################################################
# ARCHITECTURE, COMPILE FLAGS
#########################################################################
#
CARCH="x86_64"
CHOST="x86_64-unknown-linux-gnu"
#-- Exclusive: will only run on x86_64
# -march (or -mcpu) builds exclusively for an architecture
# -mtune optimizes for an architecture, but builds for whole processor family
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe"
CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe"
LDFLAGS="-Wl,--hash-style=gnu -Wl,--as-needed"
#-- Make Flags: change this for DistCC/SMP systems
#MAKEFLAGS="-j2"
#########################################################################
# BUILD ENVIRONMENT
#########################################################################
#
# Defaults: BUILDENV=(fakeroot !distcc color !ccache)
# A negated environment option will do the opposite of the comments below.
#
#-- fakeroot: Allow building packages as a non-root user
#-- distcc: Use the Distributed C/C++/ObjC compiler
#-- color: Colorize output messages
#-- ccache: Use ccache to cache compilation
#
BUILDENV=(fakeroot !distcc color !ccache)
#
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster.
#DISTCC_HOSTS=""
#########################################################################
# GLOBAL PACKAGE OPTIONS
# These are default values for the options=() settings
#########################################################################
#
# Default: OPTIONS=(strip docs libtool emptydirs zipman purge)
# A negated option will do the opposite of the comments below.
#
#-- strip: Strip symbols from binaries/libraries in STRIP_DIRS
#-- docs: Save doc directories specified by DOC_DIRS
#-- libtool: Leave libtool (.la) files in packages
#-- emptydirs: Leave empty directories in packages
#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
#-- purge: Remove files specified by PURGE_TARGETS
#
OPTIONS=(strip docs libtool emptydirs zipman purge)
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5)
#-- Options to be used when stripping binaries. See `man strip' for details.
STRIP_BINARIES="--strip-all"
#-- Options to be used when stripping shared libraries. See `man strip' for details.
STRIP_SHARED="--strip-unneeded"
#-- Options to be used when stripping static libraries. See `man strip' for details.
STRIP_STATIC="--strip-debug"
#-- Manual (man and info) directories to compress (if zipman is specified)
MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
#-- Doc directories to remove (if !docs is specified)
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)
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
#########################################################################
# PACKAGE OUTPUT
#########################################################################
#
# Default: put built package and cached source in build directory
#
#-- Destination: specify a fixed directory where all packages will be placed
#PKGDEST=/home/packages
#-- Source cache: specify a fixed directory where source files will be cached
#SRCDEST=/home/sources
#-- Source packages: specify a fixed directory where all src packages will be placed
#SRCPKGDEST=/home/srcpackages
#-- Packager: name/email of the person or organization building packages
#PACKAGER="John Doe <john@doe.com>"
#########################################################################
# EXTENSION DEFAULTS
#########################################################################
#
# WARNING: Do NOT modify these variables unless you know what you are
# doing.
#
PKGEXT='.pkg.tar.xz'
SRCEXT='.src.tar.gz'
# vim: set ft=sh ts=2 sw=2 et:

View File

@@ -8,169 +8,191 @@
# 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.
FORCE="n" FORCE='n'
RUN="" RUN=''
NOCOPY="n" NOCOPY='n'
working_dir="" working_dir=''
cache_dir=$((grep -m 1 '^CacheDir' /etc/pacman.conf || echo 'CacheDir = /var/cache/pacman/pkg') | sed 's/CacheDir\s*=\s*//')
APPNAME=$(basename "${0}") APPNAME=$(basename "${0}")
# usage: usage <exitvalue> # usage: usage <exitvalue>
usage () usage() {
{ echo "usage ${APPNAME} [options] working-dir [package-list | app]"
echo "usage ${APPNAME} [options] working-dir [package-list | app]" echo ' options:'
echo " options:" echo ' -r <app> Run "app" within the context of the chroot'
echo " -r <app> Run 'app' within the context of the chroot" echo ' -u Update the chroot via pacman'
echo " -u Update the chroot via pacman" echo ' -f Force overwrite of files in the working-dir'
echo " -f Force overwrite of files in the working-dir" 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: ${cache_dir}" 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
case "${arg}" in case "${arg}" in
r) RUN="$OPTARG" ;; r) RUN="$OPTARG" ;;
u) RUN="pacman -Syu" ;; u) RUN='pacman -Syu --noconfirm' ;;
f) FORCE="y" ;; f) FORCE='y' ;;
C) pac_conf="$OPTARG" ;; C) pac_conf="$OPTARG" ;;
M) makepkg_conf="$OPTARG" ;; M) makepkg_conf="$OPTARG" ;;
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 ;; *) echo "invalid argument '${arg}'"; usage 1 ;;
esac esac
done done
if [ "$EUID" != "0" ]; then if [ "$EUID" != '0' ]; then
echo "error: this script must be run as root." echo 'error: this script must be run as root.'
exit 1 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" echo 'you must specify a directory and one or more packages'
usage 1 usage 1
elif [ $# -lt 1 ]; then elif [ $# -lt 1 ]; then
echo "you must specify a directory" echo 'you must specify a directory'
usage 1 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}" = '' ] && echo 'error: please specify a working directory' && usage 1
if [ -z "$cache_dir" ]; then
cache_conf=${working_dir}/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*//')
unset cache_conf
fi
if [ -f /etc/pacman.d/mirrorlist ]; then
host_mirror=$(grep -v '^#' -m1 /etc/pacman.d/mirrorlist | sed -E 's#/os/(i686|x86_64)#/os/\$arch#g')
fi
if [ -z "${host_mirror}" ]; then
host_mirror='Server = http://mirrors.kernel.org/archlinux/$repo/os/$arch'
fi
if echo "${host_mirror}" | grep -q 'file://'; then
host_mirror_path=$(echo "${host_mirror}" | sed -E 's#Server\s=\sfile://(/.*)/\$repo/os/(\$arch|i686|x86_64)#\1#g')
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"
[ -e "${working_dir}/proc" ] || mkdir "${working_dir}/proc" [ -e "${working_dir}/proc" ] || mkdir "${working_dir}/proc"
mount -t proc proc "${working_dir}/proc" mount -t proc proc "${working_dir}/proc"
[ -e "${working_dir}/dev" ] || mkdir "${working_dir}/dev" [ -e "${working_dir}/dev" ] || mkdir "${working_dir}/dev"
mount -o bind /dev "${working_dir}/dev" mount -o bind /dev "${working_dir}/dev"
[ -e "${working_dir}/var/cache/pacman/pkg" ] || mkdir -p "${working_dir}/var/cache/pacman/pkg" [ -e "${working_dir}/dev/shm" ] || mkdir "${working_dir}/dev/shm"
[ -e "${cache_dir}" ] || mkdir -p "${cache_dir}" mount -t tmpfs shm "${working_dir}/dev/shm"
mount -o bind "${cache_dir}" "${working_dir}/var/cache/pacman/pkg"
trap 'chroot_umount' 0 1 2 15 [ -e "${working_dir}/dev/pts" ] || mkdir "${working_dir}/dev/pts"
mount -t devpts devpts "${working_dir}/dev/pts"
[ -e "${cache_dir}" ] || mkdir -p "${cache_dir}"
[ -e "${working_dir}/${cache_dir}" ] || mkdir -p "${working_dir}/${cache_dir}"
mount -o bind "${cache_dir}" "${working_dir}/${cache_dir}"
if [ -n "${host_mirror_path}" ]; then
[ -e "${working_dir}/${host_mirror_path}" ] || mkdir -p "${working_dir}/${host_mirror_path}"
mount -o bind "${host_mirror_path}" "${working_dir}/${host_mirror_path}"
mount -o remount,ro,bind "${host_mirror_path}" "${working_dir}/${host_mirror_path}"
fi
trap 'chroot_umount' 0 1 2 15
} }
copy_hostconf () copy_hostconf () {
{ chroot "${working_dir}" /bin/findmnt -rnu -o SOURCE,TARGET,FSTYPE,OPTIONS > "${working_dir}/etc/mtab"
cp /etc/mtab "${working_dir}/etc/mtab" cp /etc/resolv.conf "${working_dir}/etc/resolv.conf"
cp /etc/resolv.conf "${working_dir}/etc/resolv.conf" echo "${host_mirror}" > ${working_dir}/etc/pacman.d/mirrorlist
} }
chroot_umount () chroot_umount () {
{ umount "${working_dir}/proc"
umount "${working_dir}/proc" umount "${working_dir}/sys"
umount "${working_dir}/sys" umount "${working_dir}/dev/pts"
umount "${working_dir}/dev" umount "${working_dir}/dev/shm"
umount "${working_dir}/var/cache/pacman/pkg" umount "${working_dir}/dev"
umount "${working_dir}/${cache_dir}"
[ -n "${host_mirror_path}" ] && umount "${working_dir}/${host_mirror_path}"
} }
# }}} # }}}
umask 000 umask 0022
if [ "$RUN" != "" ]; then 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" echo "error: '${working_dir}' does not appear to be a Arch chroot"
echo " please build the image using mkarchroot" echo ' please build the image using mkarchroot'
exit 1 exit 1
fi fi
chroot_mount chroot_mount
copy_hostconf copy_hostconf
chroot "${working_dir}" ${RUN} 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
mkdir -p "${working_dir}/var/lib/pacman/" mkdir -p "${working_dir}/var/lib/pacman/"
mkdir -p "${working_dir}/etc/" mkdir -p "${working_dir}/etc/"
chroot_mount chroot_mount
pacargs="--noconfirm -v " #--noprogressbar -v pacargs="--noconfirm --root=${working_dir} --cachedir=${cache_dir}"
pacargs="$pacargs --root=${working_dir}" if [ "$pac_conf" != "" ]; then
# pacman takes these as relative to the given root pacargs="$pacargs --config=${pac_conf}"
pacargs="$pacargs --cachedir=/var/cache/pacman/pkg" fi
if [ "$pac_conf" != "" ]; then
pacargs="$pacargs --config=${pac_conf}"
fi
if [ $# -ne 0 ]; then if [ $# -ne 0 ]; then
op="-Sy" op='-Sy'
if [ "$FORCE" = "y" ]; then if [ "$FORCE" = "y" ]; then
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" echo 'error: failed to install all packages'
exit 1 exit 1
fi fi
fi fi
if [ -d "${working_dir}/lib/modules" ]; then if [ -d "${working_dir}/lib/modules" ]; then
ldconfig -r "${working_dir}" ldconfig -r "${working_dir}"
fi fi
if [ "$pac_conf" != "" -a "$NOCOPY" = "n" ]; then if [ "$pac_conf" != "" -a "$NOCOPY" = "n" ]; then
cp ${pac_conf} ${working_dir}/etc/pacman.conf cp ${pac_conf} ${working_dir}/etc/pacman.conf
fi fi
if [ "$makepkg_conf" != "" -a "$NOCOPY" = "n" ]; then if [ "$makepkg_conf" != "" -a "$NOCOPY" = "n" ]; then
cp ${makepkg_conf} ${working_dir}/etc/makepkg.conf cp ${makepkg_conf} ${working_dir}/etc/makepkg.conf
fi fi
if [ -e "${working_dir}/etc/locale.gen" ]; then if [ -e "${working_dir}/etc/locale.gen" ]; then
cp /etc/locale.gen "${working_dir}/etc/locale.gen" echo -e 'en_US.UTF-8 UTF-8\nde_DE.UTF-8 UTF-8' > "${working_dir}/etc/locale.gen"
chroot "${working_dir}" locale-gen chroot "${working_dir}" locale-gen
fi fi
if [ ! -e "${working_dir}/.arch-chroot" ]; then if [ ! -e "${working_dir}/.arch-chroot" ]; then
date +%s > "${working_dir}/.arch-chroot" date +%s > "${working_dir}/.arch-chroot"
fi fi
# }}} # }}}
fi fi
# vim:ft=sh:ts=4:sw=4:et:

84
pacman-extra.conf Normal file
View File

@@ -0,0 +1,84 @@
#
# /etc/pacman.conf
#
# See the pacman.conf(5) manpage for option and repository directives
#
# GENERAL OPTIONS
#
[options]
# The following paths are commented out with their default values listed.
# If you wish to use different paths, uncomment and update the paths.
#RootDir = /
#DBPath = /var/lib/pacman/
#CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log
HoldPkg = pacman glibc
# If upgrades are available for these packages they will be asked for first
SyncFirst = pacman
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#XferCommand = /usr/bin/curl -C - %u > %o
#CleanMethod = KeepInstalled
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options (all disabled by default)
#UseSyslog
#ShowSize
#UseDelta
#TotalDownload
#
# REPOSITORIES
# - can be defined here or included from another file
# - pacman will search repositories in the order defined here
# - local/custom mirrors can be added here or in separate files
# - repositories listed first will take precedence when packages
# have identical names, regardless of version number
# - URLs will have $repo replaced by the name of the current repo
# - URLs will have $arch replaced by the name of the architecture
#
# Repository entries are of the format:
# [repo-name]
# Server = ServerName
# Include = IncludePath
#
# The header [repo-name] is crucial - it must be present and
# uncommented to enable the repo.
#
# The testing repositories are disabled by default. To enable, uncomment the
# repo name header and Include lines. You can add preferred servers immediately
# after the header, and they will be used before the default mirrors.
#[testing]
## Add your preferred servers here, they will be used first
#Include = /etc/pacman.d/mirrorlist
[core]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
[extra]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
#[community-testing]
## Add your preferred servers here, they will be used first
#Include = /etc/pacman.d/mirrorlist
[community]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#Server = file:///home/custompkgs

88
pacman-multilib.conf Normal file
View File

@@ -0,0 +1,88 @@
#
# /etc/pacman.conf
#
# See the pacman.conf(5) manpage for option and repository directives
#
# GENERAL OPTIONS
#
[options]
# The following paths are commented out with their default values listed.
# If you wish to use different paths, uncomment and update the paths.
#RootDir = /
#DBPath = /var/lib/pacman/
#CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log
HoldPkg = pacman glibc
# If upgrades are available for these packages they will be asked for first
SyncFirst = pacman
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#XferCommand = /usr/bin/curl -C - %u > %o
#CleanMethod = KeepInstalled
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options (all disabled by default)
#UseSyslog
#ShowSize
#UseDelta
#TotalDownload
#
# REPOSITORIES
# - can be defined here or included from another file
# - pacman will search repositories in the order defined here
# - local/custom mirrors can be added here or in separate files
# - repositories listed first will take precedence when packages
# have identical names, regardless of version number
# - URLs will have $repo replaced by the name of the current repo
# - URLs will have $arch replaced by the name of the architecture
#
# Repository entries are of the format:
# [repo-name]
# Server = ServerName
# Include = IncludePath
#
# The header [repo-name] is crucial - it must be present and
# uncommented to enable the repo.
#
# The testing repositories are disabled by default. To enable, uncomment the
# repo name header and Include lines. You can add preferred servers immediately
# after the header, and they will be used before the default mirrors.
#[testing]
## Add your preferred servers here, they will be used first
#Include = /etc/pacman.d/mirrorlist
[core]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
[extra]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
#[community-testing]
## Add your preferred servers here, they will be used first
#Include = /etc/pacman.d/mirrorlist
[community]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
[multilib]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#Server = file:///home/custompkgs

92
pacman-staging.conf Normal file
View File

@@ -0,0 +1,92 @@
#
# /etc/pacman.conf
#
# See the pacman.conf(5) manpage for option and repository directives
#
# GENERAL OPTIONS
#
[options]
# The following paths are commented out with their default values listed.
# If you wish to use different paths, uncomment and update the paths.
#RootDir = /
#DBPath = /var/lib/pacman/
#CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log
HoldPkg = pacman glibc
# If upgrades are available for these packages they will be asked for first
SyncFirst = pacman
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#XferCommand = /usr/bin/curl -C - %u > %o
#CleanMethod = KeepInstalled
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options (all disabled by default)
#UseSyslog
#ShowSize
#UseDelta
#TotalDownload
#
# REPOSITORIES
# - can be defined here or included from another file
# - pacman will search repositories in the order defined here
# - local/custom mirrors can be added here or in separate files
# - repositories listed first will take precedence when packages
# have identical names, regardless of version number
# - URLs will have $repo replaced by the name of the current repo
# - URLs will have $arch replaced by the name of the architecture
#
# Repository entries are of the format:
# [repo-name]
# Server = ServerName
# Include = IncludePath
#
# The header [repo-name] is crucial - it must be present and
# uncommented to enable the repo.
#
# The testing repositories are disabled by default. To enable, uncomment the
# repo name header and Include lines. You can add preferred servers immediately
# after the header, and they will be used before the default mirrors.
[staging]
## Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
[testing]
## Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
[core]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
[extra]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
[community-staging]
## Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
[community-testing]
## Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
[community]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#Server = file:///home/custompkgs

84
pacman-testing.conf Normal file
View File

@@ -0,0 +1,84 @@
#
# /etc/pacman.conf
#
# See the pacman.conf(5) manpage for option and repository directives
#
# GENERAL OPTIONS
#
[options]
# The following paths are commented out with their default values listed.
# If you wish to use different paths, uncomment and update the paths.
#RootDir = /
#DBPath = /var/lib/pacman/
#CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log
HoldPkg = pacman glibc
# If upgrades are available for these packages they will be asked for first
SyncFirst = pacman
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#XferCommand = /usr/bin/curl -C - %u > %o
#CleanMethod = KeepInstalled
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options (all disabled by default)
#UseSyslog
#ShowSize
#UseDelta
#TotalDownload
#
# REPOSITORIES
# - can be defined here or included from another file
# - pacman will search repositories in the order defined here
# - local/custom mirrors can be added here or in separate files
# - repositories listed first will take precedence when packages
# have identical names, regardless of version number
# - URLs will have $repo replaced by the name of the current repo
# - URLs will have $arch replaced by the name of the architecture
#
# Repository entries are of the format:
# [repo-name]
# Server = ServerName
# Include = IncludePath
#
# The header [repo-name] is crucial - it must be present and
# uncommented to enable the repo.
#
# The testing repositories are disabled by default. To enable, uncomment the
# repo name header and Include lines. You can add preferred servers immediately
# after the header, and they will be used before the default mirrors.
[testing]
## Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
[core]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
[extra]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
[community-testing]
## Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
[community]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#Server = file:///home/custompkgs

View File

@@ -10,48 +10,48 @@
# TODO make this work for community too # TODO make this work for community too
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"
exit 1 exit 1
fi 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
echo "/etc/makepkg.conf not found!" echo '/etc/makepkg.conf not found!'
exit 1 exit 1
fi fi
die () { die () {
echo $@ >&2 echo $@ >&2
exit 1 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 :)
pbuild=".svn/text-base/PKGBUILD.svn-base" pbuild='.svn/text-base/PKGBUILD.svn-base'
oldrel=$(grep "pkgrel=" $pbuild | cut -d= -f2) oldrel=$(grep 'pkgrel=' $pbuild | cut -d= -f2)
#remove decimals #remove decimals
rel=$(echo $oldrel | cut -d. -f1) rel=$(echo $oldrel | cut -d. -f1)
newrel=$(($rel + 1))
sed -i "s/pkgrel=$oldrel/pkgrel=$newrel/" PKGBUILD newrel=$(($rel + 1))
sed -i "s/pkgrel=$oldrel/pkgrel=$newrel/" PKGBUILD
} }
pkg_from_pkgbuild () { pkg_from_pkgbuild() {
# we want the sourcing to be done in a subshell so we don't pollute our current namespace # we want the sourcing to be done in a subshell so we don't pollute our current namespace
export CARCH PKGEXT export CARCH PKGEXT
(. PKGBUILD; echo "$pkgname-$pkgver-$pkgrel-$CARCH$PKGEXT") (source PKGBUILD; echo "$pkgname-$pkgver-$pkgrel-$CARCH$PKGEXT")
} }
chrootdir="$1"; shift chrootdir="$1"; shift
pkgs="$@" 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" echo ":: Work will be done in $(pwd)/rebuilds"
@@ -63,39 +63,39 @@ cd "$REBUILD_ROOT"
FAILED="" FAILED=""
for pkg in $pkgs; do for pkg in $pkgs; do
cd "$REBUILD_ROOT/svn-packages" cd "$REBUILD_ROOT/svn-packages"
echo ":: Building '$pkg'" echo ":: 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" echo ":: $pkg does not exist in SVN"
continue continue
fi fi
cd "$pkg/trunk/" cd "$pkg/trunk/"
bump_pkgrel bump_pkgrel
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!" echo ":: $pkg Failed!"
else else
pkgfile=$(pkg_from_pkgbuild) pkgfile=$(pkg_from_pkgbuild)
if [ -e "$pkgfile" ]; then if [ -e "$pkgfile" ]; then
echo ":: $pkg Complete" echo ":: $pkg Complete"
else else
FAILED="$FAILED $pkg" FAILED="$FAILED $pkg"
echo ":: $pkg Failed, no package built!" echo ":: $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:" echo 'Packages failed:'
for pkg in $FAILED; do for pkg in $FAILED; do
echo -e "\t$pkg" echo -e "\t$pkg"
done done
fi fi
echo "SVN pkgbumps in svn-packages/ - commit when ready" echo 'SVN pkgbumps in svn-packages/ - commit when ready'