apply common coding style

This commit is contained in:
Pierre Schmitz 2010-02-13 19:47:16 +01:00
parent 7a8130fec8
commit 362a99b995
11 changed files with 512 additions and 495 deletions

9
archco
View File

@ -1,10 +1,13 @@
#!/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
# vim: set noexpandtab tabstop=8 shiftwidth=8 wrap:textwidth=132 autoindent
# kate: indent-mode normal; indent-width 8; tab-indents on; tab-width 8; word-wrap on; word-wrap-column 132

View File

@ -1,33 +1,36 @@
#!/bin/bash #!/bin/bash
if [ "$1" = "" ]; then if [ "$1" = '' ]; then
echo "Usage: archrelease <repo>" echo 'Usage: archrelease <repo>'
exit 1 exit 1
fi fi
if [ ! -f PKGBUILD ]; then if [ ! -f PKGBUILD ]; then
echo "archrelease: PKGBUILD not found" echo 'archrelease: PKGBUILD not found'
exit 1 exit 1
fi fi
if [ "$(basename $(readlink -f .))" != "trunk" ]; then if [ "$(basename $(readlink -f .))" != 'trunk' ]; then
echo "archrelease: Not in a package trunk dir" echo 'archrelease: Not in a package trunk dir'
exit 1 exit 1
fi fi
if [ "$(svn diff)" != "" ]; then if [ "$(svn diff)" != '' ]; then
echo "archrelease: You have not committed your changes yet!" echo 'archrelease: You have not committed your changes yet!'
echo " Please run 'upgpkg' or 'svn commit' first" echo ' Please run "svn commit" first'
exit 1 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"
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"
popd >/dev/null popd >/dev/null
echo 'done' echo 'done'
# vim: set noexpandtab tabstop=8 shiftwidth=8 wrap:textwidth=132 autoindent
# kate: indent-mode normal; indent-width 8; tab-indents on; tab-width 8; word-wrap on; word-wrap-column 132

7
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
@ -11,3 +11,6 @@ fi
#popd #popd
rm -rf $1 rm -rf $1
# vim: set noexpandtab tabstop=8 shiftwidth=8 wrap:textwidth=132 autoindent
# kate: indent-mode normal; indent-width 8; tab-indents on; tab-width 8; word-wrap on; word-wrap-column 132

127
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,78 @@ 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
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 "$(pwd)/$pkgfile" ]; then
pkgfile=$(pwd)/$pkgfile pkgfile=$(pwd)/$pkgfile
elif [ -f "$PKGDEST/$pkgfile" ]; then elif [ -f "$PKGDEST/$pkgfile" ]; then
pkgfile=$PKGDEST/$pkgfile pkgfile=$PKGDEST/$pkgfile
elif [ -f "$(pwd)/$oldstylepkgfile" ]; then elif [ -f "$(pwd)/$oldstylepkgfile" ]; then
pkgfile=$(pwd)/$oldstylepkgfile pkgfile=$(pwd)/$oldstylepkgfile
elif [ -f "$PKGDEST/$oldstylepkgfile" ]; then elif [ -f "$PKGDEST/$oldstylepkgfile" ]; then
pkgfile=$PKGDEST/$oldstylepkgfile pkgfile=$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 filename differences for $_pkgname."
fi
done done
# vim:ft=sh:ts=4:sw=4:et: # vim: set noexpandtab tabstop=8 shiftwidth=8 wrap:textwidth=132 autoindent
# kate: indent-mode normal; indent-width 8; tab-indents on; tab-width 8; word-wrap on; word-wrap-column 132

115
commitpkg
View File

@ -1,104 +1,105 @@
#!/bin/bash #!/bin/bash
abort() { abort() {
echo ${1:-"Cancelled"} echo ${1:-'Cancelled'}
exit 1 exit 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" == 'communitypkg' ]; then
repo="community" repo='community'
server="aur.archlinux.org" server='aur.archlinux.org'
elif [ "$cmd" == "community-testingpkg" ]; then elif [ "$cmd" == 'community-testingpkg' ]; then
repo="community-testing" repo='community-testing'
server="aur.archlinux.org" 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[@]} $install; 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 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=$_pkgname-$pkgver-$pkgrel-${_arch}$PKGEXT
if [ ! -f $pkgfile -a -f "$PKGDEST/$pkgfile" ]; then if [ ! -f $pkgfile -a -f "$PKGDEST/$pkgfile" ]; then
pkgfile="$PKGDEST/$pkgfile" pkgfile="$PKGDEST/$pkgfile"
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 -c -h --progress $rsyncopts "${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 -n "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: # vim: set noexpandtab tabstop=8 shiftwidth=8 wrap:textwidth=132 autoindent
# kate: indent-mode normal; indent-width 8; tab-indents on; tab-width 8; word-wrap on; word-wrap-column 132

View File

@ -1,10 +1,13 @@
#!/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
# vim: set noexpandtab tabstop=8 shiftwidth=8 wrap:textwidth=132 autoindent
# kate: indent-mode normal; indent-width 8; tab-indents on; tab-width 8; word-wrap on; word-wrap-column 132

View File

@ -3,39 +3,40 @@
# 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: # vim: set noexpandtab tabstop=8 shiftwidth=8 wrap:textwidth=132 autoindent
# kate: indent-mode normal; indent-width 8; tab-indents on; tab-width 8; word-wrap on; word-wrap-column 132

46
lddd
View File

@ -6,42 +6,46 @@
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 /tmp/lddd-script.XXXX)
rm $TEMPDIR rm $TEMPDIR
mkdir -p $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
# Is an ELF binary. '*.msg' ! -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: # vim: set noexpandtab tabstop=8 shiftwidth=8 wrap:textwidth=132 autoindent
# kate: indent-mode normal; indent-width 8; tab-indents on; tab-width 8; word-wrap on; word-wrap-column 132

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='-sr'
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,61 +76,61 @@ 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 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 0022 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 -r 'pacman -Syu --noconfirm' "$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 fi
# Get SRC/PKGDEST from makepkg.conf # Get SRC/PKGDEST from makepkg.conf
@ -139,43 +138,43 @@ SRCDEST=$(grep '^SRCDEST=' /etc/makepkg.conf | cut -d= -f2)
PKGDEST=$(grep '^PKGDEST=' /etc/makepkg.conf | cut -d= -f2) PKGDEST=$(grep '^PKGDEST=' /etc/makepkg.conf | cut -d= -f2)
[ -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
# Copy PKGBUILD and sources # Copy PKGBUILD and sources
source PKGBUILD source PKGBUILD
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) install_files=$(grep 'install=' PKGBUILD)
for pkg in ${pkgname[@]}; do for pkg in ${pkgname[@]}; do
install_files+=' ' install_files+=' '
install_files+=$(echo $install_files |sed "s/\$pkgname/$pkg/"|sed "s/\${pkgname}/$pkg/") install_files+=$(echo $install_files |sed "s/\$pkgname/$pkg/"|sed "s/\${pkgname}/$pkg/")
install_files=$(eval echo $install_files |tr '[:blank:]' '\n'|sort |uniq) install_files=$(eval echo $install_files |tr '[:blank:]' '\n'|sort |uniq)
done done
for f in $install_files;do for f in $install_files;do
install="${f#"install="}" install="${f#"install="}"
if [ "$install" != "" -a -f "$install" ]; then if [ "$install" != "" -a -f "$install" ]; then
cp "$install" "$copydir/build/" cp "$install" "$copydir/build/"
fi fi
done done
if [ -f "ChangeLog" ]; then if [ -f 'ChangeLog' ]; then
cp ChangeLog "$copydir/build/" cp ChangeLog "$copydir/build/"
fi fi
chown -R nobody "$copydir/build" chown -R nobody "$copydir/build"
@ -183,9 +182,9 @@ 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
@ -204,47 +203,47 @@ EOF
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/*${PKGEXT}; do
[ -e "$pkgfile" ] || continue [ -e "$pkgfile" ] || continue
_pkgname=$(basename "$pkgfile") _pkgname=$(basename "$pkgfile")
if [ "$add_to_db" -eq "1" ]; then if [ "$add_to_db" -eq "1" ]; then
[ -d "${copydir}/repo" ] || 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 "$_pkgname" 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 f in "${copydir}"/srcdest/*; do
[ -e "$f" ] || continue [ -e "$f" ] || continue
if [ -d "$SRCDEST" ]; then if [ -d "$SRCDEST" ]; then
mv "$f" "${SRCDEST}" mv "$f" "${SRCDEST}"
else else
mv "$f" "${WORKDIR}" mv "$f" "${WORKDIR}"
fi fi
done done
for l in "${copydir}"/build/*-{build,package}.log; do for l in "${copydir}"/build/*-{build,package}.log; do
[ -f "$l" ] && mv "$l" "${WORKDIR}" [ -f "$l" ] && mv "$l" "${WORKDIR}"
done 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
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"
else else
rm -rf "${copydir}"/build/* rm -rf "${copydir}"/build/*
fi fi
# vim: set noexpandtab tabstop=8 shiftwidth=8 wrap:textwidth=132 autoindent
# vim:ft=sh:ts=4:sw=4:et: # kate: indent-mode normal; indent-width 8; tab-indents on; tab-width 8; word-wrap on; word-wrap-column 132

View File

@ -8,175 +8,171 @@
# 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=''
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: ${cache_dir}"
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' ;;
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 if [ -z "$cache_dir" ]; then
cache_conf=${working_dir}/etc/pacman.conf cache_conf=${working_dir}/etc/pacman.conf
[ ! -f $cache_conf ] && cache_conf=${pac_conf:-/etc/pacman.conf} [ ! -f $cache_conf ] && cache_conf=${pac_conf:-/etc/pacman.conf}
cache_dir=$((grep -m 1 '^CacheDir' $cache_conf || echo 'CacheDir = /var/cache/pacman/pkg') | sed 's/CacheDir\s*=\s*//') cache_dir=$((grep -m 1 '^CacheDir' $cache_conf || echo 'CacheDir = /var/cache/pacman/pkg') | sed 's/CacheDir\s*=\s*//')
unset cache_conf unset cache_conf
fi fi
# {{{ 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 "${cache_dir}" ] || mkdir -p "${cache_dir}" [ -e "${cache_dir}" ] || mkdir -p "${cache_dir}"
[ -e "${working_dir}/${cache_dir}" ] || mkdir -p "${working_dir}/${cache_dir}" [ -e "${working_dir}/${cache_dir}" ] || mkdir -p "${working_dir}/${cache_dir}"
mount -o bind "${cache_dir}" "${working_dir}/${cache_dir}" mount -o bind "${cache_dir}" "${working_dir}/${cache_dir}"
trap 'chroot_umount' 0 1 2 15 trap 'chroot_umount' 0 1 2 15
} }
copy_hostconf () copy_hostconf () {
{ cp /etc/mtab "${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"
} }
chroot_umount () chroot_umount () {
{ umount "${working_dir}/proc"
umount "${working_dir}/proc" umount "${working_dir}/sys"
umount "${working_dir}/sys" umount "${working_dir}/dev"
umount "${working_dir}/dev" umount "${working_dir}/${cache_dir}"
umount "${working_dir}/${cache_dir}"
} }
# }}} # }}}
umask 0022 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 -v ' #--noprogressbar -v
pacargs="$pacargs --root=${working_dir}" pacargs="$pacargs --root=${working_dir}"
# pacman takes these as relative to the given root # pacman takes these as relative to the given root
pacargs="$pacargs --cachedir=${cache_dir}" pacargs="$pacargs --cachedir=${cache_dir}"
if [ "$pac_conf" != "" ]; then if [ "$pac_conf" != "" ]; then
pacargs="$pacargs --config=${pac_conf}" pacargs="$pacargs --config=${pac_conf}"
fi 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" cp /etc/locale.gen "${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: # vim: set noexpandtab tabstop=8 shiftwidth=8 wrap:textwidth=132 autoindent
# kate: indent-mode normal; indent-width 8; tab-indents on; tab-width 8; word-wrap on; word-wrap-column 132

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,42 @@ 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'
# vim: set noexpandtab tabstop=8 shiftwidth=8 wrap:textwidth=132 autoindent
# kate: indent-mode normal; indent-width 8; tab-indents on; tab-width 8; word-wrap on; word-wrap-column 132