Compare commits

..

43 Commits
0.6.4 ... 0.7.0

Author SHA1 Message Date
Eric Bélanger
760c1c6c5f commitpkg: Added split package support
All packages created by the PKGBUILD are uploaded to the staging directory.
The output and svn commit messages uses pkgbase instead of pkgname.

Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
[Allan: minor fix for existing issue]
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-09-02 16:10:31 +10:00
Allan McRae
f9aa28f895 makechrootpkg: fixed copying of .install files to chroot for split packages
Patch-by: Eric Bélanger <eric@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-09-01 22:27:19 +10:00
Allan McRae
30aab9b936 devtools: clean-up of commitpkg
- replaces backticks by $()
- removes support for package names without the arch in them (all our
repos now uses the arch in the package name)
- removes support for the obsolete and dead [unstable] repo

Patch-by: Eric Bélanger <eric@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-09-01 22:23:25 +10:00
Allan McRae
d8d0c87614 Changes required for new server layout
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-09-01 11:13:38 +10:00
Evangelos Foutras
4bc819a20e Don't copy makepkg.conf into the chroot
Replacing the chroot's makepkg.conf with our own prevents us
from building i686 packages in a i686 chroot on a x86_64 host.

[Aaron: Plus additional whitespace edits]

Signed-off-by: Evangelos Foutras <foutrelis@gmail.com>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-08-18 16:25:00 -07:00
Aaron Griffin
d837403780 Add communityco like archco
Original-idea-by: Eric Bélanger <snowmaniscool@gmail.com>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-08-18 15:52:54 -07:00
Aaron Griffin
568e21f1ac archco: Switch svn.archlinux.org -> archlinux.org
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-08-18 15:52:27 -07:00
Eric Bélanger
b7c19c56b8 makechrootpkg: Remove some extra packages
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-08-18 15:48:51 -07:00
Aaron Griffin
7fa8af659c Replace '>/dev/null 2>&1' with '&>/dev/null'
Original-by: Eric Bélanger <snowmaniscool@gmail.com>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-08-12 13:51:12 -07:00
Eric Bélanger
032febfac4 Fix namcap errors and add PKGBUILD
[Aaron: swapped 2>&1 >/dev/null to >/dev/null 2>&1 to fix this better]
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-08-12 13:48:34 -07:00
Eric Bélanger
b5955a0d59 makechrootpkg: Support for split packages
Move all built packages in the PKGDEST or WORKDIR (pkgname is now
an array).

Additional fixes for * inside quotes

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-08-12 13:45:58 -07:00
Daniel J Griffiths
47e7a3706b commitpkg: Add support for 'any' architecture
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-08-12 13:39:25 -07:00
Aaron Griffin
a3f1558b28 Change mode of commitpkg2any
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-08-06 14:57:21 -07:00
Biru Ionut
7c97db47cb fix copy the install files on split packages.
Signed-off-by: Biru Ionut <ionut@archlinux.ro>
[Aaron: Changed backtick syntax and added some quoting]
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-08-06 14:56:44 -07:00
Aaron Griffin
2ba39720a0 Adjust commitpkg community server
Change community.archlinux.org to aur.archlinux.org to
coincide better with the location recommended for SVN checkouts

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-08-03 09:36:57 -07:00
Biru Ionut
04e79e71fd makechrootpkg: namcap path fix
Run namcap on the full path including /pkgdest/

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-06-30 11:38:38 -07:00
Aaron Griffin
360fcd2f0e svn: remove the default -m commit arg
This should force people to add a valid commit message
when updating PKGBUILDs and the like. Passing it on the
command line still works fine

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-06-12 08:54:36 -07:00
Aaron Griffin
e03dfc4665 Cause chroot buildscript to exit with error
If a build fails, exit the script with an error.
This also prevents namcap from being called if there
is no build package

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-06-12 07:53:32 -07:00
Pierre Schmitz
5dbb964d66 Use $PKGEXT defined in makepkg.conf
Also replace some uses of tar with bsdtar

Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-05-13 09:41:44 -07:00
François Charette
1401d57115 commitpkg2any: New script
Added a script to convert an i686/x86_64 package to
an 'any' architecutre package in the SVN repos

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-05-06 12:38:40 -07:00
Aaron Griffin
2269e5c9c8 Replace unionfs with aufs
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-05-06 12:36:08 -07:00
Aaron Griffin
fef3f4af90 Cleanup some of the DB addition code
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-05-06 12:36:08 -07:00
Aaron Griffin
49947d8fb3 rebuildpkgs: misc bug fixes and changes
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-05-06 12:36:08 -07:00
Dan McGee
ea73c2b08b Add a few TODO notes for community compatibility
Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-05 21:23:30 -05:00
Dan McGee
8deaebf69f commitpkg: rework for new community layout
Remove the community-specific code that calls tupkg. Make the server
variable a bit more dependent on what repo we are uploading to in order to
get community working, and finally create the correct symlinks for
communitypkg in the Makefile.

Note that this change will require the Arch devtools package to get a
replace entry for aurtools.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-04 00:00:36 -05:00
Dan McGee
bcb0e39a0b Makefile cleanups
Don't link commitpkg to itself, and remove the unstablepkg symlinks.

Signed-off-by: Dan McGee <dan@archlinux.org>
2009-04-03 23:55:12 -05:00
Aaron Griffin
70794e8dec makechrootpkg: remove 'local' keyword
Whoops. Not valid outside a function

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-03-09 12:27:55 -07:00
Aaron Griffin
f7c44611fe makechrootpkg: remove (pkg|src)dest mount check
This is no longer needed as we don't mount-bind PKGDEST or SRCDEST

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-03-09 12:27:09 -07:00
Aaron Griffin
b3b1cfba42 makechrootpkg: Don't fail if no chroot namcap
The call to namcap was causing the script to fail
if namcap didn't exist or returned 1. Fix that by
always returning 0...

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-03-09 12:24:43 -07:00
Aaron Griffin
486375ba0a makechrootpkg: Don't mount-bind srcdest/pkgdest
Do actual copying to and from PKGDEST and SRCDEST rather than
mounting via --bind, as the chown and other operations can cause
issues here

Original-work-by: Phil Dillon-Thiselton <dibblethewrecker@gmail.com>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-03-09 12:22:50 -07:00
Aaron Griffin
3a78a87739 Add rebuildpkgs script
This script should aid in mass-rebuilding packages under a chroot

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-03-03 10:00:39 -08:00
Aaron Griffin
d4dbb527dc Rename extrapkg to commitpkg
Also allow for uploads to any user-specified repo name

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-03-03 09:00:56 -08:00
Aaron Griffin
bf48e3ad8f makechrootpkg: Check for files before copying
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-02-26 15:33:02 -08:00
Aaron Griffin
9ec1e72e65 makechrootpkg: Allow setting rw layer dir name
Make the name of the rw layer (default <chrootdir>/rw) configurable
with a command line switch.

Useful for maintaining multipl chroots on top of a clean base.

i.e.
<chrootdir>/root  #clean chroot
<chrootdir>/rw    #default RW layer
<chrootdir>/gnome #a RW layer with all of gnome installed
<chrootdir>/kde   #a RW layer with all of KDE installed

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-02-26 10:51:35 -08:00
Aaron Griffin
97f7e2f2c3 Check mkarchroot's return code
We weren't doing this before, and after build steps were
being run even if the build failed or if the user cancelled
the build

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-02-25 10:11:39 -08:00
Aaron Griffin
f6f7a52f4b makechrootpkg: Use --noconfirm when updating
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-02-24 11:41:41 -08:00
Aaron Griffin
ca99683972 makechrootpkg: Add -d to add to local repo
When a package build is complete, it is automatically
added to a local db in <chrootdir>/rw/repo/

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-02-24 11:41:21 -08:00
Aaron Griffin
1d1eef1959 makechrootpkg: Remove $CHROOT_SHELL env var
This was kinda useless and complicated. We'll just force
-r usage

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-02-24 10:01:20 -08:00
Aaron Griffin
623acfaa9e Change makechrootpkg -i arg to -I
This way we don't conflict with makepkg's -i, which
could be useful to us

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-02-23 15:04:24 -08:00
Aaron Griffin
dd45bbcaf3 Add 'update first' flag and fix help
Add -u to update the chroot before building. This should update the
unionfs rw layer only, leaving the chroot clean. Useful for rebuilds
and a local repo.

Also fix the docs and document the -i flag

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-02-23 14:30:28 -08:00
Allan McRae
c67729af98 makechrootpkg - understand makepkg source syntax
The source line in a PKGBUILD can have a structure like
source=(´filename::url´).

Signed-off-by: Allan McRae <allan@archlinux.org>
2009-01-31 20:28:32 +10:00
Aaron Griffin
9dd60741bd Add a param to NOT copy config files to the chroot
This is primarilly needed for archiso creation, but
could be useful elsewhere.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-01-24 16:52:54 -06:00
Allan McRae
1b178621a5 Specify upload server in variable
This means people with different usernames on their local machine
only need to change a single line.

Original-patch-by: Vesa Kaihlavirta <vesa@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2009-01-10 00:11:59 +10:00
10 changed files with 391 additions and 195 deletions

View File

@@ -1,13 +1,14 @@
all:
install:
# extrapkg/checkpkg and friends
# commitpkg/checkpkg and friends
mkdir -p $(DESTDIR)/usr/bin
install -m 755 checkpkg $(DESTDIR)/usr/bin
install -m 755 extrapkg $(DESTDIR)/usr/bin
ln -sf extrapkg $(DESTDIR)/usr/bin/corepkg
ln -sf extrapkg $(DESTDIR)/usr/bin/testingpkg
ln -sf extrapkg $(DESTDIR)/usr/bin/unstablepkg
install -m 755 commitpkg $(DESTDIR)/usr/bin
ln -sf commitpkg $(DESTDIR)/usr/bin/extrapkg
ln -sf commitpkg $(DESTDIR)/usr/bin/corepkg
ln -sf commitpkg $(DESTDIR)/usr/bin/testingpkg
ln -sf commitpkg $(DESTDIR)/usr/bin/communitypkg
# arch{co,release,rm}
install -m 755 archco $(DESTDIR)/usr/bin
install -m 755 archrelease $(DESTDIR)/usr/bin
@@ -23,10 +24,11 @@ install:
uninstall:
# remove all files we installed
rm $(DESTDIR)/usr/bin/checkpkg
rm $(DESTDIR)/usr/bin/commitpkg
rm $(DESTDIR)/usr/bin/extrapkg
rm $(DESTDIR)/usr/bin/corepkg
rm $(DESTDIR)/usr/bin/testingpkg
rm $(DESTDIR)/usr/bin/unstablepkg
rm $(DESTDIR)/usr/bin/communitypkg
rm $(DESTDIR)/usr/sbin/mkarchroot
rm $(DESTDIR)/usr/sbin/makechrootpkg
rm $(DESTDIR)/usr/bin/lddd

2
archco
View File

@@ -6,5 +6,5 @@ if [ "$1" = "" ]; then
fi
for i in "$@"; do
svn co svn+ssh://svn.archlinux.org/srv/svn-packages/$i
svn co svn+ssh://gerolde.archlinux.org/srv/svn-packages/$i
done

View File

@@ -24,8 +24,8 @@ fi
source PKGBUILD
pkgfile=${pkgname}-${pkgver}-${pkgrel}-${CARCH}.pkg.tar.gz
oldstylepkgfile=${pkgname}-${pkgver}-${pkgrel}.pkg.tar.gz
pkgfile=${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}
oldstylepkgfile=${pkgname}-${pkgver}-${pkgrel}${PKGEXT}
if [ -f "$(pwd)/$pkgfile" ]; then
pkgfile=$(pwd)/$pkgfile
@@ -64,8 +64,8 @@ if [ ! -f $oldpkg ]; then
fi
fi
tar tzf $oldpkg > filelist-old
tar tzf "$pkgfile" > filelist
bsdtar tf $oldpkg > filelist-old
bsdtar tf "$pkgfile" > filelist
sort -o filelist filelist
sort -o filelist-old filelist-old
@@ -75,7 +75,7 @@ diff filelist-old filelist
if diff filelist-old filelist | grep '\.so\.' > /dev/null 2>&1; then
mkdir -p pkg
cd pkg
tar xzf "$pkgfile" > /dev/null
bsdtar xf "$pkgfile" > /dev/null
for i in `diff ../filelist-old ../filelist | grep \> | grep \.so\. | awk '{print $2}'`; do
echo -n "${i}: "
objdump -p $i | grep SONAME

119
commitpkg Executable file
View File

@@ -0,0 +1,119 @@
#!/bin/bash
# Source makepkg.conf; fail if it is not found
if [ -r "/etc/makepkg.conf" ]; then
source "/etc/makepkg.conf"
else
echo "/etc/makepkg.conf not found!"
exit 1
fi
# Source user-specific makepkg.conf overrides
if [ -r ~/.makepkg.conf ]; then
source ~/.makepkg.conf
fi
cmd=$(basename $0)
if [ ! -f PKGBUILD ]; then
echo "No PKGBUILD file"
exit 1
fi
if [ -z "$CARCH" ]; then
echo "CARCH must be set to a recognized value!"
exit 1
fi
source PKGBUILD
pkgbase=${pkgbase:-${pkgname[0]}}
for _pkgname in ${pkgname[@]}; do
pkgfile=${_pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}
anypkgfile=${_pkgname}-${pkgver}-${pkgrel}-any${PKGEXT}
if [ ! -f $pkgfile ]; then
if [ -f $PKGDEST/$pkgfile ]; then
pkgfile=$PKGDEST/$pkgfile
elif [ -f $anypkgfile ]; then
pkgfile=$anypkgfile
CARCH=any
elif [ -f $PKGDEST/$anypkgfile ]; then
pkgfile=$PKGDEST/$anypkgfile
CARCH=any
else
echo "File $pkgfile doesn't exist"
exit 1
fi
fi
# set up repo-specific opts depending on how we were called
server="gerolde.archlinux.org"
if [ "$cmd" == "extrapkg" ]; then
repo="extra"
elif [ "$cmd" == "corepkg" ]; then
repo="core"
elif [ "$cmd" == "testingpkg" ]; then
repo="testing"
elif [ "$cmd" == "communitypkg" ]; then
repo="community"
server="aur.archlinux.org"
else
if [ $# -eq 0 ]; then
echo "usage: commitpkg <reponame> [-l limit] [commit message]"
exit 1
fi
repo="$1"
shift
fi
# see if any limit options were passed, we'll send them to SCP
unset scpopts
if [ "$1" = "-l" ]; then
scpopts="$1 $2"
shift 2
fi
# combine what we know into a variable
uploadto="staging/${repo}/$(basename ${pkgfile})"
scp ${scpopts} "${pkgfile}" "${server}:${uploadto}"
if [ "$(md5sum "${pkgfile}" | cut -d' ' -f1)" != "$(ssh ${server} md5sum "${uploadto}" | cut -d' ' -f1)" ]; then
echo "File got corrupted during upload, cancelled."
exit 1
else
echo "File integrity okay."
fi
if [ $? -ne 0 ]; then
echo "Cancelled"
exit 1
fi
echo "===> Uploaded $pkgfile"
done
if [ "$1" != "" ]; then
svn commit -m "upgpkg: $pkgbase $pkgver-$pkgrel
$1" > /dev/null
if [ $? -ne 0 ]; then
echo "Cancelled"
exit 1
fi
echo "===> Commited with \"upgpkg: $pkgbase $pkgver-$pkgrel
$1\" message"
else
svn commit >/dev/null
if [ $? -ne 0 ]; then
echo "Cancelled"
exit 1
fi
echo "===> Commited with \"upgpkg: $pkgbase $pkgver-$pkgrel\" message"
fi
archrelease $repo-$CARCH
if [ $? -ne 0 ]; then
echo "Cancelled"
exit 1
fi
echo "===> Tagged for $repo-$CARCH"
# vim:ft=sh:ts=4:sw=4:et:

33
commitpkg2any Executable file
View File

@@ -0,0 +1,33 @@
#!/bin/bash
# This script commits an existing package as an 'any'
# package. It is simply to help aid in the conversion
# to any-based packages
if [ $# -ne 1 ]; then
echo "Syntax: $(basename $0) <repo>"
exit 1
fi
repo=$1
source PKGBUILD
sed -i 's|^arch=.\+$|arch=(any)|' PKGBUILD
svn commit -m "upgpkg: $pkgname $pkgver-$pkgrel
Converted to arch=any" > /dev/null
archrelease $repo-any
if [ $? -ne 0 ]; then
echo "Cancelled"
exit 1
fi
echo "===> Tagged for $repo-any"
pushd ..
svn rm $repo-i686
svn rm $repo-x86_64
svn commit -m "removed $repo-i686 and $repo-x86_64 for $pkgname"
popd
echo "Don't forget to run \"/arch/db-update $repo\" on gerolde"

10
communityco Executable file
View File

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

118
extrapkg
View File

@@ -1,118 +0,0 @@
#!/bin/bash
# Source makepkg.conf; fail if it is not found
if [ -r "/etc/makepkg.conf" ]; then
source "/etc/makepkg.conf"
else
echo "/etc/makepkg.conf not found!"
exit 1
fi
# Source user-specific makepkg.conf overrides
if [ -r ~/.makepkg.conf ]; then
source ~/.makepkg.conf
fi
cmd=`basename $0`
if [ ! -f PKGBUILD ]; then
echo "No PKGBUILD file"
exit 1
fi
if [ -z "$CARCH" ]; then
echo "CARCH must be set to a recognized value!"
exit 1
fi
source PKGBUILD
pkgfile=${pkgname}-${pkgver}-${pkgrel}-${CARCH}.pkg.tar.gz
oldstylepkgfile=${pkgname}-${pkgver}-${pkgrel}.pkg.tar.gz
if [ ! -f $pkgfile ]; then
if [ -f $PKGDEST/$pkgfile ]; then
pkgfile=$PKGDEST/$pkgfile
oldstylepkgfile=$PKGDEST/$oldstylepkgfile
elif [ -f $oldstylepkgfile ]; then
pkgfile=$oldstylepkgfile
elif [ -f $PKGDEST/$oldstylepkgfile ]; then
pkgfile=$PKGDEST/$oldstylepkgfile
else
echo "File $pkgfile doesn't exist"
exit 1
fi
fi
if [ "$cmd" == "extrapkg" ]; then
repo="extra"
elif [ "$cmd" == "corepkg" ]; then
repo="core"
elif [ "$cmd" == "testingpkg" ]; then
repo="testing"
elif [ "$cmd" == "unstablepkg" ]; then
repo="unstable"
elif [ "$cmd" == "communitypkg" ]; then
repo="community"
fi
# see if any limit options were passed, we'll send them to SCP
unset scpopts
if [ "$1" = "-l" ]; then
scpopts="$1 $2"
shift 2
fi
if [ "$repo" != "community" ]; then
# combine what we know into a variable
uploadto="staging/${repo}/$(basename ${pkgfile})"
scp ${scpopts} "${pkgfile}" "archlinux.org:${uploadto}"
if [ "$(md5sum "${pkgfile}" | cut -d' ' -f1)" != "$(ssh archlinux.org md5sum "${uploadto}" | cut -d' ' -f1)" ]; then
echo "File got corrupted during upload, cancelled."
exit 1
else
echo "File integrity okay."
fi
else
if [ ! -f ~/.tupkg ]; then
echo "Must configure tupkg via ~/.tupkg, cancelled"
exit 1
fi
if [ "$(basename $pkgfile)" != "$(basename $oldstylepkgfile)" ]; then
echo "Renaming makepkg3 package for compatibility"
mv $pkgfile $oldstylepkgfile
pkgfile=$oldstylepkgfile
fi
tupkg $pkgfile
fi
if [ $? -ne 0 ]; then
echo "Cancelled"
exit 1
fi
echo "===> Uploaded $pkgfile"
if [ "$1" != "" ]; then
svn commit -m "upgpkg: $pkgname $pkgver-$pkgrel
$1" > /dev/null
if [ $? -ne 0 ]; then
echo "Cancelled"
exit 1
fi
echo "===> Commited with \"upgpkg: $pkgname $pkgver-$pkgrel
$1\" message"
else
svn commit -m "upgpkg: $pkgname $pkgver-$pkgrel" > /dev/null
if [ $? -ne 0 ]; then
echo "Cancelled"
exit 1
fi
echo "===> Commited with \"upgpkg: $pkgname $pkgver-$pkgrel\" message"
fi
archrelease $repo-$CARCH
if [ $? -ne 0 ]; then
echo "Cancelled"
exit 1
fi
echo "===> Tagged for $repo-$CARCH"
# vim:ft=sh:ts=4:sw=4:et:

View File

@@ -12,46 +12,58 @@ FORCE="n"
RUN=""
MAKEPKG_ARGS="-sr"
REPACK=""
LAYER="rw"
WORKDIR=$PWD
update_first="0"
clean_first="0"
install_pkg=""
add_to_db=0
chrootdir="$CHROOT_SHELL"
chrootdir=""
APPNAME=$(basename "${0}")
usage ()
{
echo "usage ${APPNAME} [-h] [-c] [-r CHROOT_SHELL] [--] [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 " clean chroot. All unrecognized arguments passed to this script"
echo " will be passed to makepkg."
echo ""
echo "The \$CHROOT_SHELL environment variable is used to determine where"
echo " your chroot shell is. The shell consists of the following"
echo " directories: \$CHROOT_SHELL/{root, rw, union} but only 'root' is"
echo " required by default. The rest will be created as needed"
echo " The chroot dir consists of the following directories:"
echo " <chrootdir>/{root, rw, union} but only 'root' is required"
echo " by default. The rest will be created as needed"
echo ""
echo "The -c flag, if specified, will remove all files created by previous"
echo "builds using makechrootpkg. This will ensure a clean chroot is used."
echo ""
echo "The chroot shell 'root' directory must be created via the following"
echo "The chroot 'root' directory must be created via the following"
echo "command:"
echo " mkarchroot \$CHROOT_SHELL/root base base-devel sudo"
echo ""
echo "If you have problems passing params to makepkg or need to pass long"
echo "options, put -- between the makechrootpkg args and the makepkg args"
echo " mkarchroot <chrootdir>/root base base-devel sudo"
echo ""
echo "Default makepkg args: $MAKEPKG_ARGS"
echo ""
echo "Flags:"
echo "-h This help"
echo "-c Clean the chroot before building"
echo "-u Update the rw layer of the chroot before building"
echo " This is useful for rebuilds without dirtying the pristine"
echo " chroot"
echo "-d Add the package to a local db at /repo after building"
echo "-r <dir> The chroot shell to use"
echo "-I <pkg> Install a package into the rw layer of the chroot"
echo "-l <layer> The directory to use as the rw layer of the union"
echo " Useful for maintain multiple layers. Default: rw"
exit 1
}
while getopts ':r:i:h:c' arg; do
while getopts 'hcudr:I:l:' arg; do
case "${arg}" in
r) chrootdir="$OPTARG" ;;
i) install_pkg="$OPTARG" ;;
h) usage ;;
c) clean_first=1 ;;
h|?) usage ;;
u) update_first=1 ;;
d) add_to_db=1 ;;
r) chrootdir="$OPTARG" ;;
I) install_pkg="$OPTARG" ;;
l) LAYER="$OPTARG" ;;
*) MAKEPKG_ARGS="$MAKEPKG_ARGS -$arg $OPTARG" ;;
esac
done
@@ -82,18 +94,18 @@ fi
source PKGBUILD
if [ ! -d "$chrootdir" ]; then
echo "No \$CHROOT_SHELL defined, or invalid path ($chrootdir)"
echo "No chroot dir defined, or invalid path '$chrootdir'"
exit 1
fi
if [ ! -d "$chrootdir/root" ]; then
echo "Missing \$CHROOT_SHELL root directory."
echo "Try using: mkarchroot \$CHROOT_SHELL base base-devel sudo"
echo "Missing chroot dir root directory."
echo "Try using: mkarchroot $chrootdir/root base base-devel sudo"
usage
fi
[ -d "$chrootdir/rw" -a "$clean_first" -eq "1" ] && rm -rf "$chrootdir/rw/"
[ -d "$chrootdir/rw" ] || mkdir "$chrootdir/rw"
[ -d "$chrootdir/$LAYER" -a "$clean_first" -eq "1" ] && rm -rf "$chrootdir/$LAYER/"
[ -d "$chrootdir/$LAYER" ] || mkdir "$chrootdir/$LAYER"
[ -d "$chrootdir/union" ] || mkdir "$chrootdir/union"
cleanup ()
@@ -106,14 +118,14 @@ cleanup ()
uniondir="$chrootdir/union"
echo "building union chroot"
grep -Fq unionfs /proc/filesystems
grep -Fq aufs /proc/filesystems
if [ $? -ne 0 ]; then
modprobe -q unionfs
modprobe -q aufs
if [ $? -ne 0 ]; then
echo "ERROR: No unionfs available. Abandon ship!" && exit 1
echo "ERROR: No aufs available. Abandon ship!" && exit 1
fi
fi
mount -t unionfs none -o "dirs=$chrootdir/rw=rw:$chrootdir/root=ro" "$uniondir"
mount -t aufs none -o "dirs=$chrootdir/$LAYER=rw:$chrootdir/root=ro" "$uniondir"
trap 'cleanup' 0 1 2 15
if [ -n "$install_pkg" ]; then
@@ -127,6 +139,11 @@ if [ -n "$install_pkg" ]; then
exit $ret
fi
if [ $update_first -eq 1 ]; then
echo "updating chroot"
mkarchroot -r "pacman -Syu --noconfirm" "$uniondir"
fi
echo "moving build files to chroot"
[ -d "$uniondir/build" ] || mkdir "$uniondir/build"
@@ -135,30 +152,15 @@ if [ "$REPACK" != "1" ]; then
rm -rf "$uniondir/build/"*
fi
# Copy makepkg.conf and ~/.makepkg.conf into the chroot so packager has
# all their custom variables set.
if [ -r "/etc/makepkg.conf" ]; then
rm $uniondir/etc/makepkg.conf
cp /etc/makepkg.conf $uniondir/etc/makepkg.conf
fi
if [ -r ~/.makepkg.conf ]; then
cat ~/.makepkg.conf >> $uniondir/etc/makepkg.conf
fi
source $uniondir/etc/makepkg.conf
# Magic trickery with PKGDEST and SRCDEST, so that the built
# files end up where they're expected in the _real_ filesystem
[ -d "$uniondir/srcdest" ] || mkdir "$uniondir/srcdest"
[ -d "$uniondir/pkgdest" ] || mkdir "$uniondir/pkgdest"
[ ! -z "$PKGDEST" ] && mount --bind "$PKGDEST" "$uniondir/pkgdest"
[ ! -z "$SRCDEST" ] && mount --bind "$SRCDEST" "$uniondir/srcdest"
if ! grep "PKGDEST=/pkgdest" "$uniondir/etc/makepkg.conf" >/dev/null 2>&1; then
echo "Setting PKGDEST in makepkg.conf"
echo "PKGDEST=/pkgdest" >> "$uniondir/etc/makepkg.conf"
fi
[ -d "$uniondir/srcdest" ] || mkdir "$uniondir/srcdest"
if ! grep "SRCDEST=/srcdest" "$uniondir/etc/makepkg.conf" >/dev/null 2>&1; then
echo "Setting SRCDEST in makepkg.conf"
echo "SRCDEST=/srcdest" >> "$uniondir/etc/makepkg.conf"
@@ -172,14 +174,28 @@ chown -R nobody "$uniondir/pkgdest"
source PKGBUILD
cp PKGBUILD "$uniondir/build/"
for f in ${source[@]}; do
basef=$(basename $f)
basef=$(echo $f | sed 's|::.*||' | sed 's|^.*://.*/||g')
if [ -f "$basef" ]; then
cp "$basef" "$uniondir/srcdest/"
elif [ -f "$SRCDEST/$basef" ]; then
cp "$SRCDEST/$basef" "$uniondir/srcdest/"
fi
done
install_files=$(grep "install=" PKGBUILD)
for pkg in ${pkgname[@]}; do
install_files+=' '
install_files+=$(echo $install_files |sed "s/\$pkgname/$pkg/"|sed "s/\${pkgname}/$pkg/")
done
install_files=$(eval echo $install_files |tr '[:blank:]' '\n'|sort |uniq)
for f in $install_files;do
install="${f#"install="}"
if [ "$install" != "" -a -f "$install" ]; then
cp "$install" "$uniondir/build/"
fi
done
if [ "$install" != "" -a -f "$install" ]; then
cp "$install" "$uniondir/build/"
fi
if [ -f "ChangeLog" ]; then
cp ChangeLog "$uniondir/build/"
@@ -200,29 +216,59 @@ export LANG=$LOCALE
cd /build
export HOME=/build
sudo -u nobody makepkg $MAKEPKG_ARGS || touch BUILD_FAILED
[ -f BUILD_FAILED ] && exit 1
which namcap &>/dev/null && namcap /build/PKGBUILD /pkgdest/*${PKGEXT} > /pkgdest/namcap.log
exit 0
EOF
) > "$uniondir/chrootbuild"
chmod +x "$uniondir/chrootbuild"
mkarchroot -r "/chrootbuild" "$uniondir"
if mkarchroot -r "/chrootbuild" "$uniondir"; then
source ${WORKDIR}/PKGBUILD
source ${WORKDIR}/PKGBUILD
if [ -z "$(mount | grep ${chrootdir}/union/pkgdest)" ]; then
echo "Moving completed package file to ${WORKDIR}"
mv ${chrootdir}/union/pkgdest/${pkgname}-${pkgver}-${pkgrel}-*.pkg.tar.gz ${WORKDIR}
fi
if [ -z "$(mount | grep ${chrootdir}/union/srcdest)" ]; then
echo "Moving downloaded source files to ${WORKDIR}"
mv ${chrootdir}/union/srcdest/* ${WORKDIR}
fi
for _pkgname in ${pkgname[@]}; do
pkgfile="${chrootdir}"/union/pkgdest/${_pkgname}-*${PKGEXT}
if [ -e ${chrootdir}/rw/build/BUILD_FAILED ]; then
echo "Build failed, check \$CHROOT_DIR/rw/build"
rm ${chrootdir}/rw/build/BUILD_FAILED
if [ -n "$add_to_db" -a -e "$pkgfile" ]; then
[ -d "${chrootdir}/union/repo" ] || mkdir -p "${chrootdir}/union/repo"
pushd "${chrootdir}/union/repo" >/dev/null
cp "$pkgfile" .
repo-add repo.db.tar.${DB_COMPRESSION} ${_pkgname}-${pkgver}-${pkgrel}-*${PKGEXT}
popd >/dev/null
fi
if [ -e $pkgfile ]; then
if [ -n "$PKGDEST" ]; then
echo "Moving completed ${_pkgname} package file to ${PKGDEST}"
mv $pkgfile "${PKGDEST}"
else
echo "Moving completed ${_pkgname} package file to ${WORKDIR}"
mv $pkgfile "${WORKDIR}"
fi
fi
done
for f in ${chrootdir}/union/srcdest/*; do
[ -e "$f" ] || continue
if [ -n "$SRCDEST" ]; then
echo "Moving downloaded source file $(basename $f) to ${SRCDEST}"
mv "$f" "${SRCDEST}"
else
echo "Moving downloaded source file $(basename $f) to ${WORKDIR}"
mv "$f" "${WORKDIR}"
fi
done
else
rm -rf ${chrootdir}/rw/build/*
echo "Build complete"
fi
#just in case. We returned 1, make sure we fail
touch ${chrootdir}/union/build/BUILD_FAILED
fi
if [ -e ${chrootdir}/union/build/BUILD_FAILED ]; then
echo "Build failed, check $chrootdir/$LAYER/build"
rm ${chrootdir}/union/build/BUILD_FAILED
else
rm -rf ${chrootdir}/union/build/*
echo "Build complete"
fi
# vim:ft=sh:ts=4:sw=4:et:

View File

@@ -10,6 +10,7 @@
FORCE="n"
RUN=""
NOCOPY="n"
working_dir=""
@@ -25,6 +26,7 @@ usage ()
echo " -f Force overwrite of files in the working-dir"
echo " -C <file> location of a pacman config file"
echo " -M <file> location of a makepkg config file"
echo " -n do not copy config files into the chroot"
echo " -h This message"
exit $1
}
@@ -36,6 +38,7 @@ while getopts 'r:ufhC:M:' arg; do
f) FORCE="y" ;;
C) pac_conf="$OPTARG" ;;
M) makepkg_conf="$OPTARG" ;;
n) NOCOPY="y" ;;
h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;;
esac
@@ -161,12 +164,12 @@ else
ldconfig -r "${working_dir}"
fi
if [ "$pac_conf" != "" ]; then
if [ "$pac_conf" != "" -a "$NOCOPY" = "n" ]; then
echo "installing custom pacman.conf"
cp ${pac_conf} ${working_dir}/etc/pacman.conf
fi
if [ "$makepkg_conf" != "" ]; then
if [ "$makepkg_conf" != "" -a "$NOCOPY" = "n" ]; then
echo "installing custom makepkg.conf"
cp ${makepkg_conf} ${working_dir}/etc/makepkg.conf
fi

101
rebuildpkgs Executable file
View File

@@ -0,0 +1,101 @@
#!/bin/bash
# This script rebuilds a list of packages in order
# and reports anything that fails
#
# Due to sudo usage, it is recommended to allow makechrootpkg
# to be run with NOPASSWD in your sudoers file
#
# FIXME
# Currently uses $(pwd)/rebuilds as the directory for rebuilding...
# TODO make this work for community too
if [ $# -le 1 ]; then
echo "usage: $(basename $0) <chrootdir> <packages to rebuild>"
echo " example: $(basename $0) ~/chroot readline bash foo bar baz"
exit 1
fi
# Source makepkg.conf; fail if it is not found
if [ -r "/etc/makepkg.conf" ]; then
source "/etc/makepkg.conf"
else
echo "/etc/makepkg.conf not found!"
exit 1
fi
die () {
echo $@ >&2
exit 1
}
bump_pkgrel () {
# Get the current pkgrel from SVN and update the working copy with it
# This prevents us from incrementing out of control :)
pbuild=".svn/text-base/PKGBUILD.svn-base"
oldrel=$(grep "pkgrel=" $pbuild | cut -d= -f2)
#remove decimals
rel=$(echo $oldrel | cut -d. -f1)
newrel=$(($rel + 1))
sed -i "s/pkgrel=$oldrel/pkgrel=$newrel/" PKGBUILD
}
pkg_from_pkgbuild () {
# we want the sourcing to be done in a subshell so we don't pollute our current namespace
export CARCH PKGEXT
(. PKGBUILD; echo "$pkgname-$pkgver-$pkgrel-$CARCH$PKGEXT")
}
chrootdir="$1"; shift
pkgs="$@"
SVNPATH="svn+ssh://gerolde.archlinux.org/srv/svn-packages"
echo ":: Work will be done in $(pwd)/rebuilds"
REBUILD_ROOT="$(pwd)/rebuilds"
mkdir -p "$REBUILD_ROOT"
cd "$REBUILD_ROOT"
/usr/bin/svn co -N $SVNPATH
FAILED=""
for pkg in $pkgs; do
cd "$REBUILD_ROOT/svn-packages"
echo ":: Building '$pkg'"
/usr/bin/svn update "$pkg"
if [ ! -d "$pkg/trunk" ]; then
FAILED="$FAILED $pkg"
echo ":: $pkg does not exist in SVN"
continue
fi
cd "$pkg/trunk/"
bump_pkgrel
if ! sudo makechrootpkg -u -d -r "$chrootdir" -- --noconfirm; then
FAILED="$FAILED $pkg"
echo ":: $pkg Failed!"
else
pkgfile=$(pkg_from_pkgbuild)
if [ -e "$pkgfile" ]; then
echo ":: $pkg Complete"
else
FAILED="$FAILED $pkg"
echo ":: $pkg Failed, no package built!"
fi
fi
done
cd "$REBUILD_ROOT"
if [ "$FAILED" != "" ]; then
echo "Packages failed:"
for pkg in $FAILED; do
echo -e "\t$pkg"
done
fi
echo "SVN pkgbumps in svn-packages/ - commit when ready"