Compare commits

...

181 Commits

Author SHA1 Message Date
Pierre Schmitz
e3d2f1a020 prepare release 2010-11-18 00:28:25 +01:00
Pierre Schmitz
8440133032 archbuild: simplify multilib call 2010-11-17 22:10:21 +01:00
Pierre Schmitz
0adf83fadf Don't try to guess users architecture 2010-11-16 13:43:13 +01:00
Pierre Schmitz
ecc3fcf86d Explicitly install libtool-multilib when building multilib packages
This bypasses a strange pacman behaviour with the --noconfirm parameter.
2010-11-16 13:31:54 +01:00
Pierre Schmitz
394d9c8b54 Create pacman sync dir on chroot creation
See https://bugs.archlinux.org/task/21125
2010-11-16 13:27:33 +01:00
Pierre Schmitz
7a3550c903 commitpkg: pkgfile might be an absolute path when using PKGDEST 2010-10-19 07:44:35 +02:00
Pierre Schmitz
c290215aa6 prepare release 2010-10-17 14:33:40 +02:00
Andrea Scarpino
32b55d1587 install option (-I) does not require a directory containing a PKGBUILD
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2010-10-17 12:57:57 +02:00
Pierre Schmitz
6201853f52 install gcc-multilib for multilib-build by default 2010-10-17 12:57:48 +02:00
Florian Pritz
fbc3929ec0 commitpkg: error out if ~/staging/$repo doesn't exist
Signed-off-by: Florian Pritz <bluewind@xssn.at>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2010-09-16 06:15:40 +02:00
Pierre Schmitz
8cb3bcc17b checkpkg: make diff output more readable 2010-09-11 20:17:41 +02:00
Pierre Schmitz
db7a90ccd2 Use pacman to determine the host's mirror 2010-09-11 19:25:54 +02:00
Pierre Schmitz
a9bfd8d2c9 ad support for multilib-testing 2010-09-11 19:09:05 +02:00
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
Pierre Schmitz
59b7a739e8 inform the user of activities that might take a longer time 2010-02-13 04:03:10 +01:00
Pierre Schmitz
9e14e8691d Fall back to default if CacheDir is not set 2010-02-12 10:14:04 +01:00
Pierre Schmitz
c22a6014d7 supress confusing output of pushd and popd 2010-02-12 01:11:59 +01:00
Pierre Schmitz
d440e5998d copy files seperately to avoid escaping problems 2010-02-12 01:07:45 +01:00
Pierre Schmitz
611314a740 check install files, too 2010-02-11 23:48:06 +01:00
Pierre Schmitz
c39e59892d make sure pacman cache dir exists 2010-02-11 23:28:02 +01:00
Pierre Schmitz
f76261f073 don't cross filesystems. usefull if you bind a local mirror into your working copy 2010-02-11 23:27:30 +01:00
Pierre Schmitz
a37c07a8cb update comment 2010-02-11 15:27:24 +01:00
Pierre Schmitz
72a2b4789a abort if not all local source files are under version control
This looks a little hacky. The || true is needed because grep will return 1
if in fact everything is fine.

implements FS#18048
2010-02-11 15:19:13 +01:00
Pierre Schmitz
30cfcdc501 Add missing -n option to getopt list for mkarchroot
Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
2010-02-11 14:41:45 +01:00
Pierre Schmitz
f09baea392 Replace expensive merge with delete and copy 2010-02-11 14:25:20 +01:00
Pierre Schmitz
d68e7cb031 avoid useless output in commitpkg 2010-02-11 14:01:45 +01:00
Pierre Schmitz
106a0cddfe simplify and optimize upload process
Use rsync instead of scp to be able to continue uploads and get upload
verification for free.

We also try to commit to svn trunk first to avoid useless uploads (FS#18088).
2010-02-11 13:53:30 +01:00
Pierre Schmitz
0e43db65b2 Revert "add support for community svn"
This reverts commit 0346db0ff7.

This commit changed the expected behaviour of archco and truned it into a
more complex alias of "svn up <package>".
2010-02-11 12:50:01 +01:00
Pierre Schmitz
3e3b32641d Reduce verbosity to a sane minimum 2010-02-11 12:49:28 +01:00
Pierre Schmitz
16dd1fe6e0 Read pacman cache dir from pacman.conf or cli 2010-02-11 11:23:41 +01:00
Pierre Schmitz
f8ab1fb7a7 Create a working copy instead of using an union layer
Use rsync to create a (clean) working copy of the root dir instead of using aufs.
2010-02-11 10:26:45 +01:00
Pierre Schmitz
4ea489ad85 Move build and package logs to WORKDIR, otherwise it is lost 2010-02-11 09:14:56 +01:00
Ionut Biru
0346db0ff7 add support for community svn
Signed-off-by: Ionut Biru <ionut@archlinux.ro>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2010-01-11 13:41:04 -08:00
Nezmer
a1ede4dd4b devtools: make sure all files are owned by nobody before building
In makechrootpkg, build dirs are chowned to nobody before we move files
to "$uniondir/build". This could lead to failure If the files are
supposed to be dynamically upgraded when we run makepkg.

A common use-case is when we upgrade $pkgver in git,svn PKGBUILDS.

Signed-off-by: Nezmer <Nezmer@allurelinux.org>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2010-01-11 13:38:50 -08:00
Byron Clark
7ce9cd6965 Reset umask before touching the chroot.
This prevents problems when running with a umask that masks permissions
for others.

Signed-off-by: Byron Clark <byron@theclarkfamily.name>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2010-01-11 10:25:43 -08:00
Aaron Griffin
a7d88845a8 Remove sourcing of makepkg.conf files
This is replaced by commit marked "Use the host's SRCDEST and PKGDEST if
defined"

Noticed-by: Eric Bélanger <snowmaniscool@gmail.com>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-12-18 09:01:44 -08:00
Eric Bélanger
ea4b0d0a67 makechrootpkg: Replaced DB_COMPRESSION with 'gz'
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
2009-12-16 12:49:25 -08:00
Aaron Griffin
0c17e0d9fc Use the host's SRCDEST and PKGDEST if defined
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
Original-by: Eric Bélanger <snowmaniscool@gmail.com>
2009-12-16 10:54:59 -08:00
Ronald van Haren
6922cc39f0 Move the determination of unique .install files
Move this inside the split packages loop

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-10-28 11:59:48 -07:00
Eric Bélanger
61e8cd97fb checkpkg: Check package cache for old packages
Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-10-26 13:20:58 -07:00
Eric Bélanger
23aa9719a8 checkpkg: Made wget quiet
Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-10-26 13:20:51 -07:00
Eric Bélanger
40791b305f checkpkg: Added split package support
Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-10-26 13:20:38 -07:00
Francois Charette
db962d9b7c Change loop var CARCH to _arch
This is just better practice, as CARCH means something else in
makepkg.conf

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-10-26 13:18:27 -07:00
Francois Charette
4fb916c824 Change "uploading to" message to be less ambiguous
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-10-26 13:18:02 -07:00
Evangelos Foutras
169c33195f commitpkg: tidy quotes and remove unneeded braces
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-10-06 09:25:09 -07:00
Evangelos Foutras
86416b25b3 Move package verification into a separate function
Also switch to openssl and sha1 checksums.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-10-06 09:25:00 -07:00
Andrea Scarpino
fd82cb3eb7 makechrootpkg: Ensure SRC/PKGDEST are directories
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-10-06 09:22:49 -07:00
François Charette
54ae50500b commitpkg: tagged msg is now in archrelease
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-10-06 09:20:59 -07:00
François Charette
bb1ab73c74 archrelease: exit if working copy is not committed
Check with svn diff if the PKGBUILD etc has been committed,
and exit with an error message if not.

Also moved message from commitpkg to here.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-10-06 09:20:03 -07:00
François Charette
219ec9f196 checkpkg: Set CARCH=any when arch=any
Fixes FS#16419

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-10-06 09:18:02 -07:00
Daniel J Griffiths
14947cf645 commitpkg: Fix pushd for any packages
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-23 12:31:19 -07:00
Evangelos Foutras
381f91c336 commitpkg: introduce abort function for errors
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-23 12:06:25 -07:00
Evangelos Foutras
fa47bd1a17 commitpkg: correct svn commit message spacing
[Aaron: Remove trailing whitespace]
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-23 12:02:26 -07:00
Evangelos Foutras
8130fd3846 commitpkg: upload all available architectures
Now commitpkg will go through each architecture defined in the PKGBUILD
and if all packages are present, it will upload them and run archrelease
for that architecture.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-23 12:01:11 -07:00
Evangelos Foutras
3d9c9c1b46 Move initialization code out of the upload loop
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-23 12:00:45 -07:00
Evangelos Foutras
70e48eff7a commitpkg: get rid of tabs and indent comments
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-23 12:00:00 -07:00
Francois Charette
e82825dd6d minor syntax fix
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-21 13:08:59 -07:00
Francois Charette
80061e2051 fix indentation
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-21 13:08:43 -07:00
Eric Bélanger
eebe3a49b7 makechrootpkg: Fixed add_to_db option check
Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-18 15:02:41 -07:00
Aaron Griffin
06b02906b8 makechrootpkg: fixed copying of split packages
This patch fixed copying of packages with splitting (FS#16181)
It also adds missing quotes around chrootdir variable.

Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-18 14:54:50 -07:00
Aaron Griffin
71a6d2c895 Attempted fix for SRCDEST/PKGDEST parsing
- Do *not* overwrite the makepkg.conf in the chroot
- Source global makepkg configs for SRCDEST and PKGDEST

Original commit 4bc819a20e
by Evangelos Foutras <foutrelis@gmail.com>

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-18 14:04:02 -07:00
Aaron Griffin
3b383b50fc Remove some extra cleanup umounts
Leftovers from when we used to bind-mount PKGDEST and SRCDEST

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-18 13:30:36 -07:00
Francois Charette
29b19aaa8b Remove refs to commitpkg2any in Makefile
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-18 13:13:43 -07:00
Francois Charette
e1b0d23027 remove commitpkg2any
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-18 13:13:08 -07:00
Francois Charette
a5651376b4 Automate rm of repo-*86* when commiting "any" pkg
This commit integrates part of the functionality of commitpkg2any
in the standard commitpkg script. If the package is for arch=any
and there exists ../repos/$repo-{i686,x86_64}, then these are
removed.

NB: I believe commitpkg2any should be removed, as it encourages
converting a pkg to arch=any with the same $pkgver. It is better
practice to wait for a new version before releasing the pkg
with arch=any. It also saves bandwidth!

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-18 13:12:44 -07:00
Eric Blanger
9561089142 Fixed Makefile to install/uninstall new cmds
communityco, commitpkg2any and rebuildpkgs

Signed-off-by: Eric Blanger <snowmaniscool@gmail.com>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-18 11:59:48 -07:00
Aaron Griffin
92a83232e3 Revert "Don't copy makepkg.conf into the chroot"
This reverts commit 4bc819a20e.

Temporary revert until we get this sorted out

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-18 11:56:48 -07:00
Francois Charette
40251235a8 Fix indentation
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-18 11:55:34 -07:00
Daniel J Griffiths
c9d1b3457c Add support for community-testing repo
[Aaron: Added Makefile entries]
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2009-09-18 11:53:18 -07:00
Dan McGee
0a35566e2b Make commitpkg not lock up without a message 2009-09-14 21:00:30 -05:00
Eric Blanger
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 Blanger <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
Aaron Griffin
aa39a8a11f Remove the 'add' dir from staging
This extra dir is largely useless. db-remove makes the del/
dir unnecessary, so lets kill the add/ dir too

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2008-11-21 13:38:21 -08:00
Eric Bélanger
d40455cabd Switch archco svn path: home -> srv
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2008-11-21 13:36:07 -08:00
Aaron Griffin
a80fe69f4b Only run locale-gen if the target root has /etc/locale.gen
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2008-10-20 01:09:43 -05:00
Thomas Bächler
80d0aa8912 Aaron broke it 2008-08-24 07:13:40 +02:00
Jason Chu
0dec86c4c3 Fix a typo in extrapkg 2008-05-10 11:05:20 -07:00
Aaron Griffin
182c12ec4a Remove suffix usage from extrapkg
The new dbscripts do not need this. All info can
be gathered from the $CARCH variable in the filename.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2008-05-06 18:31:19 -04:00
Aaron Griffin
4c56be5601 Allow makechrootpkg to install package files in the chroot
This is a very very hackish way to deal with rebuilds for
right now.

The intent is the following:
    First build foobar-1.2
    makechrootpkg -i foobar-1.2-1-i686.pkg.tar.gz
    Now build packages that depend on foobar-1.2

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2008-04-21 23:13:47 -05:00
Aaron Griffin
17ecb862f2 makechrootpkg: Always attempt to move pkg/src
Sometimes makepkg fails, but a package is built - for
instance, when makepkg cannot remove deps. In this case we
will attempt to move the pkg/src files regardless.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2008-04-21 22:56:58 -05:00
Aaron Griffin
6805bc54f4 Ensure archrelease is always run from a proper directory
It should only be run from a trunk dir containing a PKGBUILD

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2008-04-21 21:31:51 -05:00
Aaron Griffin
b54ddd2cf4 Create the 'repos' dir if it doesn't exist
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2008-04-21 21:25:41 -05:00
Jason Chu
0b36e8ecb3 Add a message that explains what to do when a merge conflict is detected and needs to be dealt with. 2008-04-20 13:30:00 -07:00
Travis Willard
f71a0fabb7 Copy ChangeLog into chroot too.
Signed-off-by: Travis Willard <travis@archlinux.org>
Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2008-04-14 11:19:33 -05:00
Aaron Griffin
718a6d802d Temporary workaround for unionfs issues
The latest incarnations of unionfs have issues appending
text via shell redirection, so to work around it, we can
touch the file before-hand to move it to the RW portion
of the union.

Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
2008-04-14 11:18:09 -05:00
Jason Chu
bd6a5df0ab Start tracking svnmerge info when we create a branch
I thought it was tracked by default
2008-04-09 12:23:11 -07:00
22 changed files with 1484 additions and 532 deletions

2
.gitignore vendored Normal file
View File

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

View File

@@ -1,36 +1,90 @@
V=0.9.12
all:
install:
# extrapkg/checkpkg and friends
mkdir -p $(DESTDIR)/usr/bin
# commitpkg/checkpkg and friends
install -d -m755 $(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/stagingpkg
ln -sf commitpkg $(DESTDIR)/usr/bin/communitypkg
ln -sf commitpkg $(DESTDIR)/usr/bin/community-testingpkg
ln -sf commitpkg $(DESTDIR)/usr/bin/community-stagingpkg
ln -sf commitpkg $(DESTDIR)/usr/bin/multilibpkg
ln -sf commitpkg $(DESTDIR)/usr/bin/multilib-testingpkg
# arch{co,release,rm}
install -m 755 archco $(DESTDIR)/usr/bin
install -m 755 communityco $(DESTDIR)/usr/bin
install -m 755 archrelease $(DESTDIR)/usr/bin
install -m 755 archrm $(DESTDIR)/usr/bin
# new chroot tools, only usable by root
mkdir -p $(DESTDIR)/usr/sbin
install -d -m 755 $(DESTDIR)/usr/sbin
install -m 755 mkarchroot $(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
ln -sf archbuild $(DESTDIR)/usr/bin/multilib-testing-build
# Additional packaging helper scripts
install -m 755 lddd $(DESTDIR)/usr/bin
install -m 755 finddeps $(DESTDIR)/usr/bin
install -m 755 rebuildpkgs $(DESTDIR)/usr/bin
# install default config
install -d -m755 $(DESTDIR)/usr/share/devtools
install -m 644 makepkg-i686.conf $(DESTDIR)/usr/share/devtools
install -m 644 makepkg-x86_64.conf $(DESTDIR)/usr/share/devtools
install -m 644 pacman-extra.conf $(DESTDIR)/usr/share/devtools
install -m 644 pacman-testing.conf $(DESTDIR)/usr/share/devtools
install -m 644 pacman-staging.conf $(DESTDIR)/usr/share/devtools
install -m 644 pacman-multilib.conf $(DESTDIR)/usr/share/devtools
install -m 644 pacman-multilib-testing.conf $(DESTDIR)/usr/share/devtools
uninstall:
# 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/stagingpkg
rm $(DESTDIR)/usr/bin/communitypkg
rm $(DESTDIR)/usr/bin/community-testingpkg
rm $(DESTDIR)/usr/bin/community-stagingpkg
rm $(DESTDIR)/usr/bin/multilibpkg
rm $(DESTDIR)/usr/bin/multilib-testingpkg
rm $(DESTDIR)/usr/sbin/mkarchroot
rm $(DESTDIR)/usr/sbin/makechrootpkg
rm $(DESTDIR)/usr/bin/extra-i686-build
rm $(DESTDIR)/usr/bin/extra-x86_64-build
rm $(DESTDIR)/usr/bin/testing-i686-build
rm $(DESTDIR)/usr/bin/testing-x86_64-build
rm $(DESTDIR)/usr/bin/staging-i686-build
rm $(DESTDIR)/usr/bin/staging-x86_64-build
rm $(DESTDIR)/usr/bin/multilib-build
rm $(DESTDIR)/usr/bin/multilib-testing-build
rm $(DESTDIR)/usr/bin/lddd
rm $(DESTDIR)/usr/bin/finddeps
rm $(DESTDIR)/usr/bin/archco
rm $(DESTDIR)/usr/bin/archrelease
rm $(DESTDIR)/usr/bin/archrm
rm $(DESTDIR)/usr/bin/communityco
rm $(DESTDIR)/usr/bin/rebuildpkgs
rm $(DESTDIR)/usr/share/devtools/makepkg-i686.conf
rm $(DESTDIR)/usr/share/devtools/makepkg-x86_64.conf
rm $(DESTDIR)/usr/share/devtools/pacman-extra.conf
rm $(DESTDIR)/usr/share/devtools/pacman-testing.conf
rm $(DESTDIR)/usr/share/devtools/pacman-staging.conf
rm $(DESTDIR)/usr/share/devtools/pacman-multilib.conf
rm $(DESTDIR)/usr/share/devtools/pacman-multilib-testing.conf
dist:
git archive --format=tar --prefix=devtools-$(V)/ $(V) | gzip -9 > devtools-$(V).tar.gz

44
archbuild Executable file
View File

@@ -0,0 +1,44 @@
#!/bin/bash
base_packages='base base-devel sudo'
cmd="$(basename "${0%-build}")"
if [ "${cmd%-*}" == 'multilib' ]; then
repo="${cmd}"
arch='x86_64'
base_packages+=' gcc-multilib libtool-multilib'
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 ${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_packages}
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
if [ "$1" = "" ]; then
echo "Usage: archco <package name> [<package name>]"
if [ "$1" = '' ]; then
echo 'Usage: archco <package name> [<package name>]'
exit 1
fi
for i in "$@"; do
svn co svn+ssh://svn.archlinux.org/home/svn-packages/$i
svn co svn+ssh://gerolde.archlinux.org/srv/svn-packages/$i
done

View File

@@ -1,24 +1,33 @@
#!/bin/bash
if [ "$1" = "" ]; then
echo "Usage: archrelease <repo>"
exit 1
abort() {
echo ${1:-'archrelease: Cancelled'}
exit 1
}
if [ "$1" = '' ]; then
abort 'Usage: archrelease <repo>'
fi
if [ ! -d ../repos/$1 ]; then
pushd ..
svn copy -r HEAD trunk repos/$1
svn commit -m "archrelease: new repo $1"
popd
else
svnmerge merge ../repos/$1
pushd ..
if [ -f trunk/svnmerge-commit-message.txt ]; then
svn commit -F trunk/svnmerge-commit-message.txt
rm trunk/svnmerge-commit-message.txt
else
echo "Nothing to commit"
fi
popd
if [ ! -f PKGBUILD ]; then
abort 'archrelease: PKGBUILD not found'
fi
if [ "$(basename $(readlink -f .))" != 'trunk' ]; then
abort 'archrelease: Not in a package trunk dir'
fi
if [ ! -z "$(svn status -q)" ]; then
abort 'archrelease: You have not committed your changes yet!'
fi
echo -n 'releasing package...'
pushd .. >/dev/null
if [ -d "repos/${1}" ]; then
svn rm --force -q "repos/${1}"
svn commit -q -m "archrelease: remove ${1}" || abort
fi
svn copy -q -r HEAD trunk "repos/${1}"
svn commit -q -m "archrelease: copy trunk to ${1}" || abort
popd >/dev/null
echo 'done'

4
archrm
View File

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

125
checkpkg
View File

@@ -1,11 +1,11 @@
#!/bin/bash
# Source makepkg.conf; fail if it is not found
if [ -r "/etc/makepkg.conf" ]; then
source "/etc/makepkg.conf"
if [ -r '/etc/makepkg.conf' ]; then
source '/etc/makepkg.conf'
else
echo "/etc/makepkg.conf not found!"
exit 1
echo '/etc/makepkg.conf not found!'
exit 1
fi
# Source user-specific makepkg.conf overrides
@@ -18,70 +18,81 @@ strip_url() {
}
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
fi
source PKGBUILD
pkgfile=${pkgname}-${pkgver}-${pkgrel}-${CARCH}.pkg.tar.gz
oldstylepkgfile=${pkgname}-${pkgver}-${pkgrel}.pkg.tar.gz
if [ -f "$(pwd)/$pkgfile" ]; then
pkgfile=$(pwd)/$pkgfile
elif [ -f "$PKGDEST/$pkgfile" ]; then
pkgfile=$PKGDEST/$pkgfile
elif [ -f "$(pwd)/$oldstylepkgfile" ]; then
pkgfile=$(pwd)/$oldstylepkgfile
elif [ -f "$PKGDEST/$oldstylepkgfile" ]; then
pkgfile=$PKGDEST/$oldstylepkgfile
else
echo "File \"$pkgfile\" doesn't exist"
exit 1
. PKGBUILD
if [ "$arch" == 'any' ]; then
CARCH='any'
fi
tmp=`pacman -Spd --noconfirm $pkgname`
STARTDIR=$(pwd)
TEMPDIR=$(mktemp -d /tmp/checkpkg-script.XXXX)
cd $TEMPDIR
if [ $? -ne 0 ]; then
echo "Couldn't download previous package."
exit 1
fi
for _pkgname in ${pkgname[@]}; do
pkgfile=${_pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}
oldstylepkgfile=${_pkgname}-${pkgver}-${pkgrel}${PKGEXT}
pkgurl=`echo $tmp | rev | cut -d ' ' -f 1 | rev`
oldpkg=`strip_url $pkgurl`
if [ "$(basename $oldpkg)" = "$(basename $pkgfile)" ]; then
echo "The built package 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://##'` .
if [ -f "$STARTDIR/$pkgfile" ]; then
cp "$STARTDIR/$pkgfile" .
elif [ -f "$PKGDEST/$pkgfile" ]; then
cp "$PKGDEST/$pkgfile" .
elif [ -f "$STARTDIR/$oldstylepkgfile" ]; then
cp "$STARTDIR/$oldstylepkgfile" .
elif [ -f "$PKGDEST/$oldstylepkgfile" ]; then
cp "$PKGDEST/$oldstylepkgfile" .
else
wget $pkgurl
echo "File \"$pkgfile\" doesn't exist"
exit 1
fi
fi
tar tzf $oldpkg > filelist-old
tar tzf "$pkgfile" > filelist
tmp=`pacman -Spd --noconfirm $_pkgname`
sort -o filelist filelist
sort -o filelist-old filelist-old
if [ $? -ne 0 ]; then
echo "Couldn't download previous package for $_pkgname."
exit 1
fi
diff filelist-old filelist
pkgurl=`echo $tmp | rev | cut -d ' ' -f 1 | rev`
if diff filelist-old filelist | grep '\.so\.' > /dev/null 2>&1; then
mkdir -p pkg
cd pkg
tar xzf "$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
done
else
echo "No filename differences"
fi
oldpkg=`strip_url $pkgurl`
# vim:ft=sh:ts=4:sw=4:et:
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
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 -u 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
echo "Files saved to $TEMPDIR"

137
commitpkg Executable file
View File

@@ -0,0 +1,137 @@
#!/bin/bash
abort() {
echo ${1:-'Cancelled'}
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
if [ -r '/etc/makepkg.conf' ]; then
source '/etc/makepkg.conf'
else
abort '/etc/makepkg.conf not found!'
fi
# Source user-specific makepkg.conf overrides
if [ -r ~/.makepkg.conf ]; then
. ~/.makepkg.conf
fi
cmd=$(basename "$0")
if [ ! -f PKGBUILD ]; then
abort 'No PKGBUILD file'
fi
. PKGBUILD
pkgbase=${pkgbase:-$pkgname}
# 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" == 'stagingpkg' ]; then
repo='staging'
elif [ "$cmd" == 'communitypkg' ]; then
repo='community'
server='aur.archlinux.org'
elif [ "$cmd" == 'community-testingpkg' ]; then
repo='community-testing'
server='aur.archlinux.org'
elif [ "$cmd" == 'community-stagingpkg' ]; then
repo='community-staging'
server='aur.archlinux.org'
elif [ "$cmd" == 'multilibpkg' ]; then
repo='multilib'
server='aur.archlinux.org'
elif [ "$cmd" == 'multilib-testingpkg' ]; then
repo='multilib-testing'
server='aur.archlinux.org'
else
if [ $# -eq 0 ]; then
abort 'usage: commitpkg <reponame> [-l limit] [commit message]'
fi
repo="$1"
shift
fi
# check if all local source files are under version control
(for s in ${source[@]}; do
echo $s | grep -vq '://' && \
svn status $s | grep -q '?' && \
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
# see if any limit options were passed, we'll send them to rsync
unset rsyncopts
if [ "$1" = '-l' ]; then
rsyncopts="--bwlimit=$2"
shift 2
fi
echo -n 'committing changes to trunk...'
if [ -n "$1" ]; then
svn commit -q -m "upgpkg: $pkgbase $pkgver-$pkgrel
$1" || abort
else
svn commit -q || abort
fi
echo 'done'
for _arch in ${arch[@]}; do
for _pkgname in ${pkgname[@]}; do
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 "$pkgdestfile" ]; then
pkgfile="$pkgdestfile"
elif [ ! -f "$pkgfile" ]; then
echo "skipping ${_arch}"
continue 2
fi
echo -n 'uploading '
rsync -p --chmod 'ug=rw,o=r' -c -h -L --progress $rsyncopts --partial "${pkgfile}" -e ssh "$server:staging/$repo/${pkgfile##*/}" || abort
done
archrelease $repo-${_arch} || abort
done
if [ "${arch[*]}" == 'any' ]; then
if [ -d ../repos/$repo-i686 -a -d ../repos/$repo-x86_64 ]; then
pushd ../repos/ >/dev/null
echo "removing $repo-i686 and $repo-x86_64..."
svn rm $repo-i686
svn rm $repo-x86_64
svn commit -q -m "removed $repo-i686 and $repo-x86_64 for $pkgname"
echo 'done'
popd >/dev/null
fi
fi

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

123
extrapkg
View File

@@ -1,123 +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
# define staging areas based on architecture
if [ "$CARCH" = "i686" ]; then
suffix=''
elif [ "$CARCH" = "x86_64" ]; then
suffix='64'
else
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 (suffix defined based on $CARCH)
uploadto="staging/${repo}${suffix}/add/$(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 compatability"
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

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

49
lddd
View File

@@ -6,42 +6,41 @@
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=
TEMPDIR=$(mktemp /tmp/lddd-script.XXXX)
rm $TEMPDIR
mkdir -p $TEMPDIR
TEMPDIR=$(mktemp -d /tmp/lddd-script.XXXX)
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.
for tree in $PATH $libdirs $extras
do
echo DIR $tree
for tree in $PATH $libdirs $extras; do
echo DIR $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')
IFS=$ifs
for i in $files
do
if [ `file $i | grep -c 'ELF'` -ne 0 ]; then
# Is an ELF binary.
if [ `ldd $i 2>/dev/null | grep -c 'not found'` -ne 0 ]; then
# Missing lib.
echo "$i:" >> $TEMPDIR/raw.txt
ldd $i 2>/dev/null | grep 'not found' >> $TEMPDIR/raw.txt
fi
fi
done
# 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')
IFS=$ifs
for i in $files; do
if [ `file $i | grep -c 'ELF'` -ne 0 ]; then
# Is an ELF binary.
if [ `ldd $i 2>/dev/null | grep -c 'not found'` -ne 0 ]; then
# Missing lib.
echo "$i:" >> $TEMPDIR/raw.txt
ldd $i 2>/dev/null | grep 'not found' >> $TEMPDIR/raw.txt
fi
fi
done
done
grep '^/' $TEMPDIR/raw.txt | sed -e 's/://g' >> $TEMPDIR/affected-files.txt
# invoke pacman
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
# clean list
sort -u $TEMPDIR/pacman.txt >> $TEMPDIR/possible-rebuilds.txt
echo "Files saved to $TEMPDIR"
# vim:ft=sh:ts=4:sw=4:et:

View File

@@ -8,202 +8,254 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
FORCE="n"
RUN=""
MAKEPKG_ARGS="-sr"
REPACK=""
FORCE='n'
RUN=''
MAKEPKG_ARGS='-s --noconfirm'
REPACK=''
COPY='copy'
WORKDIR=$PWD
clean_first="0"
chrootdir="$CHROOT_SHELL"
update_first='0'
clean_first='0'
install_pkg=''
add_to_db=0
chrootdir=''
APPNAME=$(basename "${0}")
usage ()
{
echo "usage ${APPNAME} [-h] [-c] [-r CHROOT_SHELL] [--] [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 ""
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 "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 ""
echo "Default makepkg args: $MAKEPKG_ARGS"
exit 1
usage() {
echo "usage ${APPNAME} [options] -r <chrootdir> [--] [makepkg args]"
echo ' Run this script in a PKGBUILD dir to build a package inside a'
echo ' clean chroot. All unrecognized arguments passed to this script'
echo ' will be passed to makepkg.'
echo ''
echo ' The chroot dir consists of the following directories:'
echo ' <chrootdir>/{root, copy} but only "root" is required'
echo ' by default. The working copy will be created as needed'
echo ''
echo 'The chroot "root" directory must be created via the following'
echo 'command:'
echo ' mkarchroot <chrootdir>/root base base-devel sudo'
echo ''
echo "Default makepkg args: $MAKEPKG_ARGS"
echo ''
echo 'Flags:'
echo '-h This help'
echo '-c Clean the chroot before building'
echo '-u Update the working copy of the chroot before building'
echo ' This is useful for rebuilds without dirtying the pristine'
echo ' chroot'
echo '-d Add the package to a local db at /repo after building'
echo '-r <dir> The chroot dir to use'
echo '-I <pkg> Install a package into the working copy of the chroot'
echo '-l <copy> The directory to use as the working copy of the chroot'
echo ' Useful for maintain multiple copies Default: copy'
exit 1
}
while getopts ':r:h:c' arg; do
case "${arg}" in
r) chrootdir="$OPTARG" ;;
c) clean_first=1 ;;
h|?) usage ;;
*) MAKEPKG_ARGS="$MAKEPKG_ARGS -$arg $OPTARG" ;;
esac
while getopts 'hcudr:I:l:' arg; do
case "${arg}" in
h) usage ;;
c) clean_first=1 ;;
u) update_first=1 ;;
d) add_to_db=1 ;;
r) chrootdir="$OPTARG" ;;
I) install_pkg="$OPTARG" ;;
l) COPY="$OPTARG" ;;
*) MAKEPKG_ARGS="$MAKEPKG_ARGS -$arg $OPTARG" ;;
esac
done
#Get rid of trailing / in chrootdir
[ "$chrootdir" != "/" ] && chrootdir=$(echo $chrootdir | sed 's#/$##')
copydir="$chrootdir/$COPY"
# Pass all arguments after -- right to makepkg
MAKEPKG_ARGS="$MAKEPKG_ARGS ${*:$OPTIND}"
# See if -R was passed to makepkg
for arg in ${*:$OPTIND}; do
if [ "$arg" = "-R" ]; then
REPACK=1
break;
fi
if [ "$arg" = '-R' ]; then
REPACK=1
break;
fi
done
if [ "$EUID" != "0" ]; then
echo "This script must be run as root."
exit 1
if [ "$EUID" != '0' ]; then
echo 'This script must be run as root.'
exit 1
fi
if [ ! -f PKGBUILD ]; then
echo "This must be run in a directory containing a PKGBUILD."
exit 1
if [ ! -f PKGBUILD -a -z "$install_pkg" ]; then
echo 'This must be run in a directory containing a PKGBUILD.'
exit 1
fi
source PKGBUILD
if [ ! -d "$chrootdir" ]; then
echo "No \$CHROOT_SHELL defined, or invalid path ($chrootdir)"
exit 1
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"
usage
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/union" ] || mkdir "$chrootdir/union"
cleanup ()
{
echo "cleaning up unioned mounts"
umount "$chrootdir/union/pkgdest" 2>/dev/null
umount "$chrootdir/union/srcdest" 2>/dev/null
umount "$chrootdir/union"
}
uniondir="$chrootdir/union"
echo "building union chroot"
grep -Fq unionfs /proc/filesystems
if [ $? -ne 0 ]; then
modprobe -q unionfs
if [ $? -ne 0 ]; then
echo "ERROR: No unionfs available. Abandon ship!" && exit 1
fi
umask 0022
if [ ! -d "$copydir" -o "$clean_first" -eq "1" ]; then
echo -n 'creating clean working copy...'
mkdir -p "$copydir"
rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir"
echo 'done'
fi
mount -t unionfs none -o "dirs=$chrootdir/rw=rw:$chrootdir/root=ro" "$uniondir"
trap 'cleanup' 0 1 2 15
echo "moving build files to chroot"
[ -d "$uniondir/build" ] || mkdir "$uniondir/build"
if [ -n "$install_pkg" ]; then
pkgname="$(basename "$install_pkg")"
cp "$install_pkg" "$copydir/$pkgname"
mkarchroot -r "pacman -U /$pkgname" "$copydir"
ret=$?
rm "$copydir/$pkgname"
#exit early, we've done all we need to
exit $ret
fi
if [ $update_first -eq 1 ]; then
mkarchroot -u "$copydir"
fi
[ -d "$copydir/build" ] || mkdir "$copydir/build"
if [ "$REPACK" != "1" ]; then
#Remove anything in there UNLESS -R (repack) was passed to makepkg
rm -rf "$uniondir/build/"*
#Remove anything in there UNLESS -R (repack) was passed to makepkg
rm -rf "$copydir/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
# 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
source $uniondir/etc/makepkg.conf
# Get SRC/PKGDEST from makepkg.conf
if [ -f "${makepkg_conf}" ]; then
eval $(grep '^SRCDEST=' "${makepkg_conf}")
eval $(grep '^PKGDEST=' "${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"
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)
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"
[ -d "$copydir/pkgdest" ] || mkdir "$copydir/pkgdest"
if ! grep 'PKGDEST="/pkgdest"' "$copydir/etc/makepkg.conf" >/dev/null 2>&1; then
echo 'PKGDEST="/pkgdest"' >> "$copydir/etc/makepkg.conf"
fi
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"
[ -d "$copydir/srcdest" ] || mkdir "$copydir/srcdest"
if ! grep 'SRCDEST="/srcdest"' "$copydir/etc/makepkg.conf" >/dev/null 2>&1; then
echo 'SRCDEST="/srcdest"' >> "$copydir/etc/makepkg.conf"
fi
[ -z "${MAKEFLAGS}" ] && eval $(grep '^MAKEFLAGS=' /etc/makepkg.conf)
[ -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"
chown -R nobody "$uniondir/build"
chown -R nobody "$uniondir/srcdest"
chown -R nobody "$uniondir/pkgdest"
# Set target CARCH as it might be used within the PKGBUILD to select correct sources
eval $(grep '^CARCH=' "$copydir/etc/makepkg.conf")
export CARCH
# Copy PKGBUILD and sources
source PKGBUILD
cp PKGBUILD "$uniondir/build/"
source=($(. PKGBUILD; echo ${source[@]}))
cp PKGBUILD "$copydir/build/"
for f in ${source[@]}; do
basef=$(basename $f)
if [ -f "$basef" ]; then
cp "$basef" "$uniondir/srcdest/"
fi
basef=$(echo $f | sed 's|::.*||' | sed 's|^.*://.*/||g')
if [ -f "$basef" ]; then
cp "$basef" "$copydir/srcdest/"
elif [ -f "$SRCDEST/$basef" ]; then
cp "$SRCDEST/$basef" "$copydir/srcdest/"
fi
done
if [ "$install" != "" -a -f "$install" ]; then
cp "$install" "$uniondir/build/"
fi
if ! grep "^nobody" "$uniondir/etc/sudoers" >/dev/null 2>&1; then
echo "allowing 'nobody' sudo rights in the chroot"
echo "nobody ALL=(ALL) NOPASSWD: ALL" >> "$uniondir/etc/sudoers"
chmod 440 "$uniondir/etc/sudoers"
( . PKGBUILD
for i in 'changelog' 'install'; do
filelist=$(sed -n "s/^[[:space:]]*$i=//p" PKGBUILD)
for file in $filelist; do
# evaluate any bash variables used
eval file=${file}
if [[ -f "$file" ]]; then
cp "$file" "$copydir/build/"
fi
done
done
)
chown -R nobody "$copydir/build"
chown -R nobody "$copydir/srcdest"
chown -R nobody "$copydir/pkgdest"
if ! grep "^nobody" "$copydir/etc/sudoers" >/dev/null 2>&1; then
touch "$copydir/etc/sudoers"
echo 'nobody ALL=(ALL) NOPASSWD: ALL' >> "$copydir/etc/sudoers"
chmod 440 "$copydir/etc/sudoers"
fi
#This is a little gross, but this way the script is recreated every time in the
#rw portion of the union
#working copy
(cat <<EOF
#!/bin/bash
export LANG=$LOCALE
export LANG=C
cd /build
export HOME=/build
sudo -u nobody makepkg $MAKEPKG_ARGS || touch BUILD_FAILED
[ -f BUILD_FAILED ] && exit 1
which namcap &>/dev/null && namcap /build/PKGBUILD /pkgdest/*.pkg.tar.* > /build/namcap.log
exit 0
EOF
) > "$uniondir/chrootbuild"
chmod +x "$uniondir/chrootbuild"
) > "$copydir/chrootbuild"
chmod +x "$copydir/chrootbuild"
mkarchroot -r "/chrootbuild" "$uniondir"
if mkarchroot -r "/chrootbuild" "$copydir"; then
for pkgfile in "${copydir}"/pkgdest/*.pkg.tar.*; do
[ -e "$pkgfile" ] || continue
if [ "$add_to_db" -eq "1" ]; then
mkdir -p "${copydir}/repo"
pushd "${copydir}/repo" >/dev/null
cp "$pkgfile" .
repo-add repo.db.tar.gz "$(basename "$pkgfile")"
popd >/dev/null
fi
if [ -e ${chrootdir}/rw/build/BUILD_FAILED ]; then
echo "Build failed, check \$CHROOT_DIR/rw/build"
rm ${chrootdir}/rw/build/BUILD_FAILED
exit 1
else
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
rm -rf ${chrootdir}/rw/build/*
echo "Build complete"
if [ -d "$PKGDEST" ]; then
mv "$pkgfile" "${PKGDEST}"
else
mv "$pkgfile" "${WORKDIR}"
fi
done
for l in "${copydir}"/build/{namcap,*-{build,package}}.log; do
[ -f "$l" ] && mv "$l" "${WORKDIR}"
done
else
#just in case. We returned 1, make sure we fail
touch "${copydir}/build/BUILD_FAILED"
fi
# vim:ft=sh:ts=4:sw=4:et:
for f in "${copydir}"/srcdest/*; do
[ -e "$f" ] || continue
if [ -d "$SRCDEST" ]; then
mv "$f" "${SRCDEST}"
else
mv "$f" "${WORKDIR}"
fi
done
if [ -e "${copydir}/build/BUILD_FAILED" ]; then
echo "Build failed, check $copydir/build"
rm "${copydir}/build/BUILD_FAILED"
exit 1
else
rm -rf "${copydir}"/build/*
fi

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,177 +8,191 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
FORCE="n"
RUN=""
FORCE='n'
RUN=''
NOCOPY='n'
working_dir=""
working_dir=''
APPNAME=$(basename "${0}")
# usage: usage <exitvalue>
usage ()
{
echo "usage ${APPNAME} [options] working-dir [package-list | app]"
echo " options:"
echo " -r <app> Run 'app' within the context of the chroot"
echo " -u Update the chroot via pacman"
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 " -h This message"
exit $1
usage() {
echo "usage ${APPNAME} [options] working-dir [package-list | app]"
echo ' options:'
echo ' -r <app> Run "app" within the context of the chroot'
echo ' -u Update the chroot via pacman'
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 " -c <dir> Set pacman cache. Default: /var/cache/pacman/pkg"
echo ' -h This message'
exit $1
}
while getopts 'r:ufhC:M:' arg; do
case "${arg}" in
r) RUN="$OPTARG" ;;
u) RUN="pacman -Syu" ;;
f) FORCE="y" ;;
C) pac_conf="$OPTARG" ;;
M) makepkg_conf="$OPTARG" ;;
h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;;
esac
while getopts 'r:ufnhC:M:c:' arg; do
case "${arg}" in
r) RUN="$OPTARG" ;;
u) RUN='pacman -Syu --noconfirm' ;;
f) FORCE='y' ;;
C) pac_conf="$OPTARG" ;;
M) makepkg_conf="$OPTARG" ;;
n) NOCOPY='y' ;;
c) cache_dir="$OPTARG" ;;
h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;;
esac
done
if [ "$EUID" != "0" ]; then
echo "error: this script must be run as root."
exit 1
if [ "$EUID" != '0' ]; then
echo 'error: this script must be run as root.'
exit 1
fi
shift $(($OPTIND - 1))
if [ "$RUN" = "" -a $# -lt 2 ]; then
echo "you must specify a directory and one or more packages"
usage 1
if [ "$RUN" = '' -a $# -lt 2 ]; then
echo 'you must specify a directory and one or more packages'
usage 1
elif [ $# -lt 1 ]; then
echo "you must specify a directory"
usage 1
echo 'you must specify a directory'
usage 1
fi
working_dir="$(readlink -f ${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=$(pacman -Sdp extra/devtools 2>/dev/null | sed -E 's#(.*/)extra/os/.*#\1$repo/os/$arch#')
fi
if [ -z "${host_mirror}" ]; then
host_mirror='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#file://(/.*)/\$repo/os/\$arch#\1#g')
fi
# {{{ functions
chroot_mount ()
{
echo "mounting sysfs : /sys"
[ -e "${working_dir}/sys" ] || mkdir "${working_dir}/sys"
mount -t sysfs sysfs "${working_dir}/sys"
chroot_mount() {
[ -e "${working_dir}/sys" ] || mkdir "${working_dir}/sys"
mount -t sysfs sysfs "${working_dir}/sys"
echo "mounting procfs : /proc"
[ -e "${working_dir}/proc" ] || mkdir "${working_dir}/proc"
mount -t proc proc "${working_dir}/proc"
[ -e "${working_dir}/proc" ] || mkdir "${working_dir}/proc"
mount -t proc proc "${working_dir}/proc"
echo "binding device nodes : /dev"
[ -e "${working_dir}/dev" ] || mkdir "${working_dir}/dev"
mount -o bind /dev "${working_dir}/dev"
[ -e "${working_dir}/dev" ] || mkdir "${working_dir}/dev"
mount -o bind /dev "${working_dir}/dev"
echo "binding pacman cache : /var/cache/pacman"
[ -e "${working_dir}/var/cache/pacman" ] || mkdir -p "${working_dir}/var/cache/pacman"
mount -o bind /var/cache/pacman "${working_dir}/var/cache/pacman"
[ -e "${working_dir}/dev/shm" ] || mkdir "${working_dir}/dev/shm"
mount -t tmpfs shm "${working_dir}/dev/shm"
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 ()
{
echo "copying mtab : /etc/mtab"
cp /etc/mtab "${working_dir}/etc/mtab"
echo "copying resolv.conf : /etc/resolv.conf"
cp /etc/resolv.conf "${working_dir}/etc/resolv.conf"
copy_hostconf () {
chroot "${working_dir}" /bin/findmnt -rnu -o SOURCE,TARGET,FSTYPE,OPTIONS > "${working_dir}/etc/mtab"
cp /etc/resolv.conf "${working_dir}/etc/resolv.conf"
echo "Server = ${host_mirror}" > ${working_dir}/etc/pacman.d/mirrorlist
}
chroot_umount ()
{
echo "cleaning up mounts"
umount "${working_dir}/proc"
umount "${working_dir}/sys"
umount "${working_dir}/dev"
umount "${working_dir}/var/cache/pacman"
chroot_umount () {
umount "${working_dir}/proc"
umount "${working_dir}/sys"
umount "${working_dir}/dev/pts"
umount "${working_dir}/dev/shm"
umount "${working_dir}/dev"
umount "${working_dir}/${cache_dir}"
[ -n "${host_mirror_path}" ] && umount "${working_dir}/${host_mirror_path}"
}
# }}}
umask 0022
if [ "$RUN" != "" ]; then
# run chroot {{{
#Sanity check
if [ ! -f "${working_dir}/.arch-chroot" ]; then
echo "error: '${working_dir}' does not appear to be a Arch chroot"
echo " please build the image using mkarchroot"
exit 1
fi
# run chroot {{{
#Sanity check
if [ ! -f "${working_dir}/.arch-chroot" ]; then
echo "error: '${working_dir}' does not appear to be a Arch chroot"
echo ' please build the image using mkarchroot'
exit 1
fi
chroot_mount
copy_hostconf
chroot_mount
copy_hostconf
echo "starting chroot ($RUN)"
chroot "${working_dir}" ${RUN}
chroot "${working_dir}" ${RUN}
# }}}
else
# {{{ build chroot
if [ -e "${working_dir}" -a "${FORCE}" = "n" ]; then
echo "error: working dir '${working_dir}' already exists - try using -f"
exit 1
fi
# }}}
else
# {{{ build chroot
if [ -e "${working_dir}" -a "${FORCE}" = "n" ]; then
echo "error: working dir '${working_dir}' already exists - try using -f"
exit 1
fi
mkdir -p "${working_dir}/var/lib/pacman/"
mkdir -p "${working_dir}/etc/"
mkdir -p "${working_dir}/var/lib/pacman/sync"
mkdir -p "${working_dir}/etc/"
chroot_mount
chroot_mount
pacargs="--noconfirm -v " #--noprogressbar -v
pacargs="$pacargs --root=${working_dir}"
# pacman takes these as relative to the given root
pacargs="$pacargs --cachedir=/var/cache/pacman/pkg"
if [ "$pac_conf" != "" ]; then
pacargs="$pacargs --config=${pac_conf}"
fi
pacargs="--noconfirm --root=${working_dir} --cachedir=${cache_dir}"
if [ "$pac_conf" != "" ]; then
pacargs="$pacargs --config=${pac_conf}"
fi
if [ $# -eq 0 ]; then
echo "no packages to install"
else
echo "installing packages:"
for i in $@; do echo -e "\t$i"; done
if [ $# -ne 0 ]; then
op='-Sy'
if [ "$FORCE" = "y" ]; then
op="${op}f"
fi
if ! pacman ${op} ${pacargs} $@; then
echo 'error: failed to install all packages'
exit 1
fi
fi
op="-Sy"
if [ "$FORCE" = "y" ]; then
op="${op}f"
fi
if ! pacman ${op} ${pacargs} $@; then
echo "error: failed to install all packages"
exit 1
fi
fi
if [ -d "${working_dir}/lib/modules" ]; then
ldconfig -r "${working_dir}"
fi
if [ -d "${working_dir}/lib/modules" ]; then
echo "running ldconfig"
ldconfig -r "${working_dir}"
fi
if [ "$pac_conf" != "" -a "$NOCOPY" = "n" ]; then
cp ${pac_conf} ${working_dir}/etc/pacman.conf
fi
if [ "$pac_conf" != "" ]; then
echo "installing custom pacman.conf"
cp ${pac_conf} ${working_dir}/etc/pacman.conf
fi
if [ "$makepkg_conf" != "" -a "$NOCOPY" = "n" ]; then
cp ${makepkg_conf} ${working_dir}/etc/makepkg.conf
fi
if [ "$makepkg_conf" != "" ]; then
echo "installing custom makepkg.conf"
cp ${makepkg_conf} ${working_dir}/etc/makepkg.conf
fi
if [ -e "${working_dir}/etc/locale.gen" ]; then
echo -e 'en_US.UTF-8 UTF-8\nde_DE.UTF-8 UTF-8' > "${working_dir}/etc/locale.gen"
chroot "${working_dir}" locale-gen
fi
echo "generating default locales"
cp /etc/locale.gen "${working_dir}/etc/locale.gen"
chroot "${working_dir}" locale-gen
if [ ! -e "${working_dir}/.arch-chroot" ]; then
date +%s > "${working_dir}/.arch-chroot"
fi
# }}}
if [ ! -e "${working_dir}/.arch-chroot" ]; then
date +%s > "${working_dir}/.arch-chroot"
fi
# }}}
fi
# vim:ft=sh:ts=4:sw=4:et:

79
pacman-extra.conf Normal file
View File

@@ -0,0 +1,79 @@
#
# /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]
#Include = /etc/pacman.d/mirrorlist
[core]
Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
#[community-testing]
#Include = /etc/pacman.d/mirrorlist
[community]
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

@@ -0,0 +1,87 @@
#
# /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]
Include = /etc/pacman.d/mirrorlist
[core]
Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
[community-testing]
Include = /etc/pacman.d/mirrorlist
[community]
Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repository here.
[multilib-testing]
Include = /etc/pacman.d/mirrorlist
[multilib]
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-multilib.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]
#Include = /etc/pacman.d/mirrorlist
[core]
Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
#[community-testing]
#Include = /etc/pacman.d/mirrorlist
[community]
Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repository here.
[multilib]
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

85
pacman-staging.conf Normal file
View File

@@ -0,0 +1,85 @@
#
# /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]
Include = /etc/pacman.d/mirrorlist
[testing]
Include = /etc/pacman.d/mirrorlist
[core]
Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
[community-staging]
Include = /etc/pacman.d/mirrorlist
[community-testing]
Include = /etc/pacman.d/mirrorlist
[community]
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

79
pacman-testing.conf Normal file
View File

@@ -0,0 +1,79 @@
#
# /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]
Include = /etc/pacman.d/mirrorlist
[core]
Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
[community-testing]
Include = /etc/pacman.d/mirrorlist
[community]
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

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
(source 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'