Compare commits

...

78 Commits

Author SHA1 Message Date
Pierre Schmitz
ecae65e7fd prepare release 2012-10-03 12:46:07 +02:00
Pierre Schmitz
c617c67ff8 mkarchroot: Use systemd's nspawn if available
* If we are running systemd use nspawn instead of our own chroot setup
* Use pacstrap to setup our chroot environment
* Make sure the common trap is still called
* Bind resolve.conf, timezone and lcoaltime from the host if nspawn is not used
* Run ldconfig within the chroot
2012-10-03 12:38:33 +02:00
Pierre Schmitz
7228cc00e8 Use dedicated trap functions to avoid unsetting the trap when e.g. cleanup is called 2012-10-03 12:35:40 +02:00
Pierre Schmitz
a26416dca3 makechrootpkg: do not run namcap as root 2012-10-03 12:32:55 +02:00
Pierre Schmitz
37bb1d33a7 archbuild: abort if update or creation of the chroot fails 2012-10-03 12:32:03 +02:00
Florian Pritz
dbef0b91bf Fix ownership when copying files from chroot to system
Previously files were always owned by nobody which means trying to write
to them directly would fail because only the owner has +w.

Signed-off-by: Florian Pritz <bluewind@xinu.at>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-09-14 16:01:01 +02:00
Pierre Schmitz
499f20071a prepare release 2012-07-20 23:29:43 +02:00
Eric Bélanger
0d3d63e3aa Fix bash completions
With bash-completion 2.0, the completion must have the same name as the binary.

Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-06-25 00:01:32 +02:00
Pierre Schmitz
d2ec5ab67d prepare release 2012-06-16 17:06:15 +02:00
Pierre Schmitz
a23d93ce7f commitpkg: check if there are any packages to process before doing so 2012-06-16 16:56:42 +02:00
Pierre Schmitz
246b8ead60 mkarchroot: reset trap so it wont be called twice 2012-06-16 16:21:55 +02:00
Pierre Schmitz
b14a1b1bcc archbuild: do not cross filesystems when removing the chroot copies 2012-06-16 15:28:52 +02:00
Pierre Schmitz
0cd9e1ae7e archbuild: use flock -n as we do elsewhere 2012-06-16 15:24:16 +02:00
Allan McRae
3734c80bf7 Fix /run permissions in chroot
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-06-15 09:27:27 +02:00
Pierre Schmitz
7b696f6f8d prepare release 2012-06-12 18:22:37 +02:00
Pierre Schmitz
ed9d5a16e3 Support multiple package cache directories
* We use the host package cache configuration
* As only the first cache will be written to, we mount the others readonly
2012-06-12 08:17:58 +02:00
Pierre Schmitz
e44c49aebb archbuild: Store chroots in /var/lib instead of /var/tmp
/var/tmp is cleaned up by tmpfiels by default which we cannot handle gracefully.
2012-06-12 06:53:11 +02:00
Pierre Schmitz
c5cd72c085 Remove no longer used option 2012-06-11 23:44:30 +02:00
Pierre Schmitz
8bedb89fd6 Add a version number to each chroot so we can tell the user when a rebuild is needed 2012-06-11 17:04:17 +02:00
Pierre Schmitz
c7cda47342 Enable signature checking within build environment
* bind /sys and /dev/pts from host
* drop support for devtmpfs as it is no longer needed
* add /run and /dev/rtc0
* clone own ipc, uts and mount namespaces for chroot
* set localtime, timezone and locale within chroot environment
* copy /etc/pacman.d/gnupg from host
2012-06-11 16:44:23 +02:00
Pierre Schmitz
41b39c3e78 prepare release 2012-06-11 11:39:42 +02:00
Pierre Schmitz
6743c97383 update makepkg.conf and pacman.conf 2012-06-11 11:32:05 +02:00
Gerardo Exequiel Pozzi
231496c82a mkarchroot: use bind mount instead of symlink for /dev/ptmx
We need /dev/ptmx -> /dev/pts/ptmx (for devpts -o newinstance)
Other way to do this thing is via bind mount (as said kernel doc[devpts.txt]).

This should be done in this way at least for /dev as devtmpfs in the chroot.
Since we can not touch /dev (devtmpfs), because devtmpfs is "singleton",
just use bind method and avoid interference.

Do it the same for both modes of /dev (tmpfs) and (devtmpfs) to keep it simple.

Currently devpts in chroot is not working without this when using /dev as devtmpfs,
this fixes this issue (opening /dev/ptmx, creates devices nodes on outside /dev/pts)

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-06-10 12:57:14 +02:00
Lukas Fleischer
fda394f1a0 Gracefully handle files containing an "@"
The "@" sign in file names in SVN marks the beginning of a pegged
version number -- from the Subversion book:

    Peg revisions are specified to the Subversion command-line client
    using at syntax, so called because the syntax involves appending an
    “at sign” (@) and the peg revision to the end of the path with which
    the revision is associated.

The trivial workaround is to always append an at sign to the end of the
path in the version control checks.

Before:

    $ community-stagingpkg 'Add systemd units.'
    ==> ERROR: exim-submission@.service is not under version control
    $ svn status -v | grep 'exim-submission@.service'
    A                -       ?   ?           exim-submission@.service

After:

    $ community-stagingpkg 'Add systemd units.'
    ==> Committing changes to trunk...done
    ==> Signing package exim-4.80-2-x86_64.pkg.tar.xz...
    [...]

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-06-10 12:47:40 +02:00
Allan McRae
addea828fe Prevent packages being uploaded with "Unknown Packager"
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-06-10 12:46:32 +02:00
Pierre Schmitz
acbbe8cb90 Move bash_completion to /usr/share/bash-completion/completions/ 2012-03-21 07:32:44 +01:00
Pierre Schmitz
9840730880 Prepare release 2012-03-05 18:02:22 +01:00
Pierre Schmitz
502813a107 commitpkg: Pass through the -f parameter to archrelease so unofficial repos can be used 2012-03-05 16:48:19 +01:00
Pierre Schmitz
181646d03b makechrootpkg: Install the built packages before running namcap to reduce false positives and check inter split package dependencies. 2012-03-05 16:28:09 +01:00
Gerardo Exequiel Pozzi
2d9a99ee15 Add -d param to optionally support devtmpfs
The main intention of this patch is to take advantage of
/dev/loop-control and loop devices.

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-03-05 14:30:26 +01:00
Pierre Schmitz
cecd257786 Add script to move packages between [extra] and [community] 2012-03-05 01:48:27 +01:00
Pierre Schmitz
82dcc19ff9 commitpkg: Add ability to override the server
This might be useful for unofficial repos
2012-03-04 22:38:07 +01:00
Florian Pritz
c5893672a6 find-libdeps: fix extraction of soname
libperl.so results in soname="libperl.so.so" which is wrong.

This returns the correct string: "libperl.so"

Fix-by: Dave Reisner <dreisner@archlinux.org>
Signed-off-by: Florian Pritz <bluewind@xinu.at>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-03-04 22:25:22 +01:00
Pierre Schmitz
73d61f43c7 prepare release 2012-02-15 11:33:12 +01:00
Allan McRae
afc93f3430 Always sign unsigned packages
We do not allow packages to be uploaded without signatures so force
all unsigned packages to be signed.  This has the bonus of not
breaking makepkg signing support by requiring you use an internal
makepkg variable.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-02-15 11:25:49 +01:00
Lukas Fleischer
9ab0d94578 archrelease: Validate tags before releasing
Compare every single tag with a list of valid tags. This prevents broken
releases which occurred whenever someone made a typo on the command
line:

    $ ./archrelease community i686
    ==> ERROR: archrelease: Invalid tag: "community" (use -f to force release)

Since the list is used in the ZSH completion as well, break it out to a
separate file and move it to "lib/". Also, add a command line parameter
to allow for releasing to an unknown repository when necessary.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-02-12 12:35:14 +01:00
Lukas Fleischer
5e8cb67603 zsh_completion: Remove multilib*-{i686, any}
These tags make no sense. Remove them from our valid tag array that is
used for tab completion.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-02-08 12:53:13 +01:00
Pierre Schmitz
65365f1853 prepare release 2012-02-06 21:17:44 +01:00
Florian Pritz
06a681ca3d commitpkg: use absolute paths when uploading files
This fixes a problem where rsync won't work if the pkgver contains a
colon (epoch). In this case rsync assumes that the colon is a
remote:path separator and having src and dest both being remote
arguments is not supported.

Signed-off-by: Florian Pritz <bluewind@xinu.at>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-02-06 21:15:57 +01:00
Pierre Schmitz
b763788b16 Fix typo: It's PKGDEST and not DESTDIR 2012-01-19 18:45:01 +01:00
Pierre Schmitz
c2d9a0e7b1 Set correct pacman.conf
Commit ee4edefa2f reverted too much and left pacman.conf unset
2012-01-18 16:56:41 +01:00
Pierre Schmitz
ee4edefa2f Remove any pacman 4 related workarounds 2012-01-18 11:24:07 +01:00
Allan McRae
a8b64995ee makechrootpkg: fix error message
Passing a directory that does not exist to makechrootpkg results in
an error message:

==> ERROR: No chroot dir defined, or invalid path ''

The path is not being printed as the readlink command blanks it if
the directory does not exist. Fix this.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-01-18 11:06:52 +01:00
Jan Alexander Steffens (heftig)
2c9855fe6b Fix up usage help, the Default line belongs to -l
Signed-off-by: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-01-18 11:06:52 +01:00
Florian Pritz
4d4ffb5d8f find-libdeps: fix syntax error
The problem has been introduced in commit
56d4dec19f

Signed-off-by: Florian Pritz <bluewind@xinu.at>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-01-18 11:06:52 +01:00
Dave Reisner
2d79191c97 commitpkg: behavior more sanely in searching for built pkgs
In the case of a .pkg.tar.xz and a .pkg.tar.gz existing in the same
directory, all commitpkg would say is:

  ==> WARNING: Could not find . Skipping x86_64

Upon digging into the logic, we did a few things poorly, mostly in
getpkgfile:

- getpkgfile tried to die in a subshell (within the command substituion
  assignment to 'pkgfile'). This will never work.
- We assumed that proper glob expansion happened when we received
  exactly 1 arg. This isn't necessarily true without nullglob in effect.
- We dumped the real error (spewed by getpkgfile) to /dev/null.
- We checked for the package twice in both $PWD and $DESTDIR/.
- We checked for file existance multiple times.

Address this by:

- not hiding errors. revamp the wording a little bit to make it more
  obvious why we failed, particularly in the case of a glob expanding to
  more than 1 file. Logic here is simplified to pointing out the failure
  cases of 0 and >1.
- setting nullglob so the number of arguments passed into getpkgfile is
  meaningful from a 'did it decisively resolve' point of view.
- not trying to exit the entire script from a subshell. Just return a
  value (and use it).
- avoiding the package file existance check afterwards. this is a
  freebie from getpkgfile when the glob passed fails to expand.

Signed-off-by: Dave Reisner <dreisner@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2012-01-18 11:06:51 +01:00
Pierre Schmitz
5b3ca82ae5 prepare release 2012-01-14 20:25:43 +01:00
Pierre Schmitz
90a5e441cd Add support for multilib-staging 2012-01-14 20:22:26 +01:00
Pierre Schmitz
3c7dbe0ea2 prepare release 2011-12-20 23:12:49 +01:00
Tom Gundersen
130227546a mkarchroot: do not create /etc/mtab
As of filesystem-2011.12 this is not needed anylonger, and indeed blocks the
chroot from being upgraded. As a workaround, recreating the chroot fixes the
problem.

Fixes FS#27640.

Reported-by: Andrea Scarpino <andrea@archlinux.org>
Signed-off-by: Tom Gundersen <teg@jklm.no>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-12-20 23:05:44 +01:00
Timothy Redaelli
594f972666 Use #!/bin/bash instead of #!/bin/sh
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-12-20 23:05:38 +01:00
Dave Reisner
0e32334cca archbuild: exec makechrootpkg to preserve exit value
This fixes a compound command such as the one below from continuing even
if the first fails.

  extra-x86_64-build && extra-i686-build

The problem is that 'cleanup 0' is triggered in archbuild even after an
unsucessful call to makechrootpkg. Since both archbuild and
makechrootpkg share the exact same cleanup function (from lib/common),
we simply force the shell to exit with the true return value by exec'ing
the call to makechrootpkg.

Signed-off-by: Dave Reisner <dreisner@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-12-04 18:13:13 +01:00
Allan McRae
58d0ccc4f8 makearchroot: source /etc/profile before building
This ensures the PATH used when building is the default path and
not the value set by the user calling makechrootpkg.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-12-04 18:04:47 +01:00
Lukas Fleischer
bfd2862bc4 Makefile: Remove output files before replacing them
This one fixes all the "Permission denied" errors we got when invoking
make(1) after modifying a source file and removes the need to delete the
generated scripts manually.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-12-04 18:01:51 +01:00
Lukas Fleischer
56d4dec19f Use double brackets everywhere
We already fixed a couple of these in previous patches - this one should
replace all remaining uses of single brackets ("[") by double brackets.
Also, use arithmetic evaluation instead of conditional expressions where
appropriate and make use of "-z" and "-n" instead of comparing variables
to empty strings.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
2011-12-04 18:00:57 +01:00
Pierre Schmitz
f62f307c84 Add support for kde-unstable and gnome-unstable 2011-12-04 17:48:46 +01:00
Pierre Schmitz
8efe61b4e2 Skip archrelease for missing architectures 2011-11-21 10:24:29 +01:00
Pierre Schmitz
8ffc2e44ee prepare release 2011-11-11 22:06:17 +01:00
Ionut Biru
a628c1a006 makechrootpkg: fix repack
repack is defined as a boolean. set it true when -R is passed

/usr/sbin/makechrootpkg: line 295: 1: command not found

Signed-off-by: Ionut Biru <ibiru@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-11-09 20:32:29 +01:00
Pierre Schmitz
8ba91b0574 prepare release 2011-11-06 10:38:39 +01:00
Pierre Schmitz
671643053d archbuild: Always use recent makepkg.conf and pacman.conf; Run namcap by default 2011-11-06 10:32:55 +01:00
Pierre Schmitz
bf96c9f949 makechrootpkg: Create separate namcap log for every single file 2011-11-06 10:31:37 +01:00
Pierre Schmitz
a030cdc532 mkarchroot: Respect makepkg.conf and pacman.conf when running a command 2011-11-06 10:27:55 +01:00
Lukas Fleischer
b7a3c74c50 commitpkg: Fix commit message
Move the message template before the if block. We moved this to the else
branch in commit aaa68e49e8 which lead to
"msgtemplate" being unset if one specifies a commit message on the
command line, thus stripping the "upgpkg:" part.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-11-04 19:38:11 +01:00
Eric Bélanger
a33ee6e78d commitpkg: Make svn quieter
Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-11-04 19:34:50 +01:00
Lukas Fleischer
1f24380a31 Makefile: Add common library to build dependencies
Add "lib/common.sh" to the build dependencies of our scripts to ensure
everything gets rebuilt when we modify a common function. Also, add
"Makefile" itself to enforce a rebuild if the edit command changes.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-11-04 19:34:13 +01:00
Lukas Fleischer
fbbcc30e3d lib/common.sh: Revise setup_workdir()
* Honor TMPDIR variable (just like we did in commit a0c6bf45).
* Quote path properly.
* Avoid unnecessary use of basename(1).

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-11-04 19:34:00 +01:00
Lukas Fleischer
c1752bd716 lib/common.sh: Use double brackets
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-11-04 19:33:51 +01:00
Eric Bélanger
42d821ef7b Capitalize output messages
Some of the output/error messages were capitalized, some were
not. This patch capitalize everything for consistency sake. Other
minor changes were done to the messages like removing the superfluous
"error:" from die messages and adding a final period to messages that
were complete sentences as appropriate.

Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-11-04 19:33:29 +01:00
Pierre Schmitz
aea075d817 Change version to date 2011-11-01 21:36:33 +01:00
Pierre Schmitz
aaa68e49e8 Move common functions to a shared file
* common.sh is included on build time
* most functions are copied from makepkg
2011-11-01 15:33:08 +01:00
Florian Pritz
7c78599a61 add libdepends script
Signed-off-by: Florian Pritz <bluewind@xinu.at>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
2011-10-31 22:57:12 +01:00
Pierre Schmitz
89950ccd70 Create signature for devtools source package 2011-10-31 14:04:35 +01:00
Pierre Schmitz
c238cfafa0 commitpkg: Require signatures for packages 2011-10-31 13:53:43 +01:00
Pierre Schmitz
0e58198f36 commitpkg: Check signature if available 2011-10-31 13:14:16 +01:00
Pierre Schmitz
e07d318c54 commitpkg: Skip signing if signature already exists 2011-10-31 12:53:50 +01:00
Pierre Schmitz
a06ac2451a makechrootpkg: Handle install and changelog file the same way as in commitpkg 2011-10-31 12:43:16 +01:00
Pierre Schmitz
fbdcf6e309 makechrootpkg: Do not export LANG
This is done by /etc/profile.d/locale.sh. By this we also ensure compatibility with systemd.
2011-10-31 12:02:46 +01:00
28 changed files with 1184 additions and 435 deletions

2
.gitignore vendored
View File

@@ -13,3 +13,5 @@ makechrootpkg
mkarchroot mkarchroot
rebuildpkgs rebuildpkgs
zsh_completion zsh_completion
find-libdeps
crossrepomove

View File

@@ -1,4 +1,4 @@
V=0.9.30 V=20121003
PREFIX = /usr/local PREFIX = /usr/local
@@ -11,7 +11,9 @@ BINPROGS = \
archbuild \ archbuild \
lddd \ lddd \
finddeps \ finddeps \
rebuildpkgs rebuildpkgs \
find-libdeps \
crossrepomove
SBINPROGS = \ SBINPROGS = \
mkarchroot \ mkarchroot \
@@ -24,7 +26,10 @@ CONFIGFILES = \
pacman-testing.conf \ pacman-testing.conf \
pacman-staging.conf \ pacman-staging.conf \
pacman-multilib.conf \ pacman-multilib.conf \
pacman-multilib-testing.conf pacman-multilib-testing.conf \
pacman-multilib-staging.conf \
pacman-kde-unstable.conf \
pacman-gnome-unstable.conf
COMMITPKG_LINKS = \ COMMITPKG_LINKS = \
extrapkg \ extrapkg \
@@ -35,7 +40,10 @@ COMMITPKG_LINKS = \
community-testingpkg \ community-testingpkg \
community-stagingpkg \ community-stagingpkg \
multilibpkg \ multilibpkg \
multilib-testingpkg multilib-testingpkg \
multilib-stagingpkg \
kde-unstablepkg \
gnome-unstablepkg
ARCHBUILD_LINKS = \ ARCHBUILD_LINKS = \
extra-i686-build \ extra-i686-build \
@@ -45,13 +53,29 @@ ARCHBUILD_LINKS = \
staging-i686-build \ staging-i686-build \
staging-x86_64-build \ staging-x86_64-build \
multilib-build \ multilib-build \
multilib-testing-build multilib-testing-build \
multilib-staging-build \
kde-unstable-i686-build \
kde-unstable-x86_64-build \
gnome-unstable-i686-build \
gnome-unstable-x86_64-build
CROSSREPOMOVE_LINKS = \
extra2community \
community2extra
BASHCOMPLETION_LINKS = \
archco \
communityco
all: $(BINPROGS) $(SBINPROGS) bash_completion zsh_completion all: $(BINPROGS) $(SBINPROGS) bash_completion zsh_completion
%: %.in edit = sed -e "s|@pkgdatadir[@]|$(DESTDIR)$(PREFIX)/share/devtools|g"
%: %.in Makefile lib/common.sh
@echo "GEN $@" @echo "GEN $@"
@sed -e "s|@pkgdatadir[@]|$(DESTDIR)$(PREFIX)/share/devtools|g" "$<" >"$@" @$(RM) "$@"
@m4 -P $@.in | $(edit) >$@
@chmod a-w "$@" @chmod a-w "$@"
@chmod +x "$@" @chmod +x "$@"
@@ -67,7 +91,10 @@ install:
install -m0644 ${CONFIGFILES} $(DESTDIR)$(PREFIX)/share/devtools install -m0644 ${CONFIGFILES} $(DESTDIR)$(PREFIX)/share/devtools
for l in ${COMMITPKG_LINKS}; do ln -sf commitpkg $(DESTDIR)$(PREFIX)/bin/$$l; done for l in ${COMMITPKG_LINKS}; do ln -sf commitpkg $(DESTDIR)$(PREFIX)/bin/$$l; done
for l in ${ARCHBUILD_LINKS}; do ln -sf archbuild $(DESTDIR)$(PREFIX)/bin/$$l; done for l in ${ARCHBUILD_LINKS}; do ln -sf archbuild $(DESTDIR)$(PREFIX)/bin/$$l; done
install -Dm0644 bash_completion $(DESTDIR)/etc/bash_completion.d/devtools for l in ${CROSSREPOMOVE_LINKS}; do ln -sf crossrepomove $(DESTDIR)$(PREFIX)/bin/$$l; done
ln -sf find-libdeps $(DESTDIR)$(PREFIX)/bin/find-libprovides
install -Dm0644 bash_completion $(DESTDIR)/usr/share/bash-completion/completions/devtools
for l in ${BASHCOMPLETION_LINKS}; do ln -sf devtools $(DESTDIR)/usr/share/bash-completion/completions/$$l; done
install -Dm0644 zsh_completion $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools install -Dm0644 zsh_completion $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools
ln -sf archco $(DESTDIR)$(PREFIX)/bin/communityco ln -sf archco $(DESTDIR)$(PREFIX)/bin/communityco
@@ -77,14 +104,17 @@ uninstall:
for f in ${CONFIGFILES}; do rm -f $(DESTDIR)$(PREFIX)/share/devtools/$$f; done for f in ${CONFIGFILES}; do rm -f $(DESTDIR)$(PREFIX)/share/devtools/$$f; done
for l in ${COMMITPKG_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done for l in ${COMMITPKG_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done
for l in ${ARCHBUILD_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done for l in ${ARCHBUILD_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done
rm $(DESTDIR)/etc/bash_completion.d/devtools for l in ${CROSSREPOMOVE_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done
rm $(DESTDIR)/usr/share/bash-completion/completions/devtools
rm $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools rm $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools
rm -f $(DESTDIR)$(PREFIX)/bin/communityco rm -f $(DESTDIR)$(PREFIX)/bin/communityco
rm -f $(DESTDIR)$(PREFIX)/bin/find-libprovides
dist: dist:
git archive --format=tar --prefix=devtools-$(V)/ $(V) | gzip -9 > devtools-$(V).tar.gz git archive --format=tar --prefix=devtools-$(V)/ $(V) | gzip -9 > devtools-$(V).tar.gz
gpg --detach-sign --use-agent devtools-$(V).tar.gz
upload: upload:
scp devtools-$(V).tar.gz gerolde.archlinux.org:/srv/ftp/other/devtools/ scp devtools-$(V).tar.gz devtools-$(V).tar.gz.sig gerolde.archlinux.org:/srv/ftp/other/devtools/
.PHONY: all clean install uninstall dist upload .PHONY: all clean install uninstall dist upload

View File

@@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
m4_include(lib/common.sh)
base_packages=(base base-devel sudo) base_packages=(base base-devel sudo)
cmd="${0##*/}" cmd="${0##*/}"
@@ -12,7 +14,7 @@ else
repo=${tag%-*} repo=${tag%-*}
arch=${tag##*-} arch=${tag##*-}
fi fi
chroots='/var/tmp/archbuild' chroots='/var/lib/archbuild'
clean_first=false clean_first=false
usage() { usage() {
@@ -31,45 +33,42 @@ while getopts 'cr:' arg; do
done done
if [[ "$EUID" != '0' ]]; then if [[ "$EUID" != '0' ]]; then
echo 'This script must be run as root.' die 'This script must be run as root.'
exit 1
fi fi
if ${clean_first} || [[ ! -d "${chroots}/${repo}-${arch}" ]]; then if ${clean_first} || [[ ! -d "${chroots}/${repo}-${arch}" ]]; then
echo "Creating chroot for [${repo}] (${arch})..." msg "Creating chroot for [${repo}] (${arch})..."
for copy in "${chroots}/${repo}-${arch}"/*; do for copy in "${chroots}/${repo}-${arch}"/*; do
[[ -d $copy ]] || continue [[ -d $copy ]] || continue
echo "Deleting chroot copy '$(basename "${copy}")'..." msg2 "Deleting chroot copy '$(basename "${copy}")'..."
# Lock the copy exec 9>"$copydir.lock"
exec 9>"${copy}.lock" if ! flock -n 9; then
flock 9 stat_busy "Locking chroot copy '$copy'"
flock 9
stat_done
fi
{ type -P btrfs && btrfs subvolume delete "${copy}"; } &>/dev/null { type -P btrfs && btrfs subvolume delete "${copy}"; } &>/dev/null
rm -rf "${copy}" rm -rf --one-file-system "${copy}"
done done
exec 9>&- exec 9>&-
rm -rf "${chroots}/${repo}-${arch}" rm -rf --one-file-system "${chroots}/${repo}-${arch}"
mkdir -p "${chroots}/${repo}-${arch}" mkdir -p "${chroots}/${repo}-${arch}"
setarch "${arch}" mkarchroot \ setarch "${arch}" mkarchroot \
-C "@pkgdatadir@/pacman-${repo}.conf" \ -C "@pkgdatadir@/pacman-${repo}.conf" \
-M "@pkgdatadir@/makepkg-${arch}.conf" \ -M "@pkgdatadir@/makepkg-${arch}.conf" \
"${chroots}/${repo}-${arch}/root" \ "${chroots}/${repo}-${arch}/root" \
"${base_packages[@]}" "${base_packages[@]}" || abort
# FIXME: temporary workaround until pacman 4.0 moves to [core]
case $repo in
core|extra|community|multilib)
sed -r '/^SigLevel.*/d' -i "${chroots}/${repo}-${arch}/root/etc/pacman.conf"
;;
esac
else else
setarch ${arch} mkarchroot \ setarch ${arch} mkarchroot \
-u \ -u \
"${chroots}/${repo}-${arch}/root" -C "@pkgdatadir@/pacman-${repo}.conf" \
-M "@pkgdatadir@/makepkg-${arch}.conf" \
"${chroots}/${repo}-${arch}/root" || abort
fi fi
echo "Building in chroot for [${repo}] (${arch})..." msg "Building in chroot for [${repo}] (${arch})..."
setarch "${arch}" makechrootpkg -c -r "${chroots}/${repo}-${arch}" exec setarch "${arch}" makechrootpkg -c -n -r "${chroots}/${repo}-${arch}"

View File

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

View File

@@ -1,18 +1,35 @@
#!/bin/bash #!/bin/bash
abort() { m4_include(lib/common.sh)
echo ${1:-'archrelease: Cancelled'} m4_include(lib/valid-tags.sh)
exit 1
}
if [[ -z $1 ]]; then # parse command line options
abort 'Usage: archrelease <repo>...' FORCE=
while getopts ':f' flag; do
case $flag in
f) FORCE=1 ;;
:) die "Option requires an argument -- '$OPTARG'" ;;
\?) die "Invalid option -- '$OPTARG'" ;;
esac
done
shift $(( OPTIND - 1 ))
if ! (( $# )); then
echo 'Usage: archrelease [-f] <repo>...'
exit 1
fi fi
# TODO: validate repo is really repo-arch # validate repo is really repo-arch
if [[ -z $FORCE ]]; then
for tag in "$@"; do
if ! in_array "$tag" "${_tags[@]}"; then
die 'archrelease: Invalid tag: "'$tag'" (use -f to force release)'
fi
done
fi
if [[ ! -f PKGBUILD ]]; then if [[ ! -f PKGBUILD ]]; then
abort 'archrelease: PKGBUILD not found' die 'archrelease: PKGBUILD not found'
fi fi
trunk=${PWD##*/} trunk=${PWD##*/}
@@ -21,24 +38,27 @@ trunk=${PWD##*/}
# such as 'gnome-unstable' # such as 'gnome-unstable'
IFS='/' read -r -d '' -a parts <<< "$PWD" IFS='/' read -r -d '' -a parts <<< "$PWD"
if [[ "${parts[@]:(-2):1}" == "repos" ]]; then if [[ "${parts[@]:(-2):1}" == "repos" ]]; then
abort 'archrelease: Should not be in repos dir (try from trunk/)' die 'archrelease: Should not be in repos dir (try from trunk/)'
fi fi
unset parts unset parts
if [[ $(svn status -q) ]]; then if [[ $(svn status -q) ]]; then
abort 'archrelease: You have not committed your changes yet!' die 'archrelease: You have not committed your changes yet!'
fi fi
pushd .. >/dev/null pushd .. >/dev/null
IFS=$'\n' read -r -d '' -a known_files < <(svn ls -r HEAD "$trunk") IFS=$'\n' read -r -d '' -a known_files < <(svn ls -r HEAD "$trunk")
for file in "${known_files[@]}"; do for file in "${known_files[@]}"; do
if [[ ${file:(-1)} = '/' ]]; then if [[ ${file:(-1)} = '/' ]]; then
abort "archrelease: subdirectories are not supported in package directories!" die "archrelease: subdirectories are not supported in package directories!"
fi fi
done done
# gracefully handle files containing an "@" character
known_files=("${known_files[@]/%/@}")
for tag in "$@"; do for tag in "$@"; do
echo -n "copying ${trunk} to ${tag}..." stat_busy "Copying ${trunk} to ${tag}"
if [[ -d repos/$tag ]]; then if [[ -d repos/$tag ]]; then
declare -a trash declare -a trash
@@ -55,12 +75,12 @@ for tag in "$@"; do
# copy all files at once from trunk to the subdirectory in repos/ # copy all files at once from trunk to the subdirectory in repos/
svn copy -q -r HEAD ${known_files[@]/#/$trunk/} "repos/$tag/" svn copy -q -r HEAD ${known_files[@]/#/$trunk/} "repos/$tag/"
echo 'done' stat_done
done done
echo -n "releasing package..." stat_busy "Releasing package"
printf -v tag_list ", %s" "$@"; tag_list="${tag_list#, }" printf -v tag_list ", %s" "$@"; tag_list="${tag_list#, }"
svn commit -q -m "archrelease: copy ${trunk} to $tag_list" || abort svn commit -q -m "archrelease: copy ${trunk} to $tag_list" || abort
echo 'done' stat_done
popd >/dev/null popd >/dev/null

View File

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

View File

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

View File

@@ -1,51 +1,39 @@
#!/bin/bash #!/bin/bash
abort() { m4_include(lib/common.sh)
echo ${1:-'Cancelled'}
exit 1
}
getpkgfile() { getpkgfile() {
if [[ ${#} -ne 1 ]]; then case $# in
echo 'ERROR: No canonical package found!' >&2 0)
exit 1 error 'No canonical package found!'
elif [ ! -f "${1}" ]; then return 1
echo "ERROR: Package ${1} not found!" >&2 ;;
exit 1 [!1])
fi error 'Failed to canonicalize package name -- multiple packages found:'
msg2 '%s' "$@"
return 1
;;
esac
echo ${1} echo "$1"
}
##
# usage : get_full_version( $epoch, $pkgver, $pkgrel )
# return : full version spec, including epoch (if necessary), pkgver, pkgrel
##
get_full_version() {
if [[ $1 -eq 0 ]]; then
# zero epoch case, don't include it in version
echo $2-$3
else
echo $1:$2-$3
fi
} }
# Source makepkg.conf; fail if it is not found # Source makepkg.conf; fail if it is not found
if [ -r '/etc/makepkg.conf' ]; then if [[ -r '/etc/makepkg.conf' ]]; then
source '/etc/makepkg.conf' source '/etc/makepkg.conf'
else else
abort '/etc/makepkg.conf not found!' die '/etc/makepkg.conf not found!'
fi fi
# Source user-specific makepkg.conf overrides # Source user-specific makepkg.conf overrides
if [ -r ~/.makepkg.conf ]; then if [[ -r ~/.makepkg.conf ]]; then
. ~/.makepkg.conf . ~/.makepkg.conf
fi fi
cmd=${0##*/} cmd=${0##*/}
if [ ! -f PKGBUILD ]; then if [[ ! -f PKGBUILD ]]; then
abort 'No PKGBUILD file' die 'No PKGBUILD file'
fi fi
. PKGBUILD . PKGBUILD
@@ -53,8 +41,8 @@ pkgbase=${pkgbase:-$pkgname}
case "$cmd" in case "$cmd" in
commitpkg) commitpkg)
if [ $# -eq 0 ]; then if (( $# == 0 )); then
abort 'usage: commitpkg <reponame> [-l limit] [-a arch] [commit message]' die 'usage: commitpkg <reponame> [-f] [-s server] [-l limit] [-a arch] [commit message]'
fi fi
repo="$1" repo="$1"
shift shift
@@ -63,24 +51,14 @@ case "$cmd" in
repo="${cmd%pkg}" repo="${cmd%pkg}"
;; ;;
*) *)
abort 'usage: commitpkg <reponame> [-l limit] [-a arch] [commit message]' die 'usage: commitpkg <reponame> [-f] [-s server] [-l limit] [-a arch] [commit message]'
;; ;;
esac esac
case "$repo" in
core|extra|testing|staging)
server='gerolde.archlinux.org' ;;
community*|multilib*)
server='aur.archlinux.org' ;;
*)
server='gerolde.archlinux.org'
echo "Non-standard repository $repo in use, defaulting to server $server" ;;
esac
# check if all local source files are under version control # check if all local source files are under version control
for s in "${source[@]}"; do for s in "${source[@]}"; do
if [[ $s != *://* ]] && ! svn status -v "$s" | grep -q '^[ AMRX~]'; then if [[ $s != *://* ]] && ! svn status -v "$s@" | grep -q '^[ AMRX~]'; then
abort "$s is not under version control" die "$s is not under version control"
fi fi
done done
@@ -90,117 +68,157 @@ for i in 'changelog' 'install'; do
# evaluate any bash variables used # evaluate any bash variables used
eval file=\"$(sed 's/^\(['\''"]\)\(.*\)\1$/\2/' <<< "$file")\" eval file=\"$(sed 's/^\(['\''"]\)\(.*\)\1$/\2/' <<< "$file")\"
if ! svn status -v "${file}" | grep -q '^[ AMRX~]'; then if ! svn status -v "${file}" | grep -q '^[ AMRX~]'; then
abort "${file} is not under version control" die "${file} is not under version control"
fi fi
done < <(sed -n "s/^[[:space:]]*$i=//p" PKGBUILD) done < <(sed -n "s/^[[:space:]]*$i=//p" PKGBUILD)
done done
# see if any limit options were passed, we'll send them to rsync
rsyncopts=(-e ssh -p --chmod=ug=rw,o=r -c -h -L --progress --partial -y) rsyncopts=(-e ssh -p --chmod=ug=rw,o=r -c -h -L --progress --partial -y)
while getopts ':l:a:' flag; do archreleaseopts=()
while getopts ':l:a:s:f' flag; do
case $flag in case $flag in
l) rsyncopts+=("--bwlimit=$2") ;; f) archreleaseopts+=('-f') ;;
a) commit_arch=$2 ;; s) server=$OPTARG ;;
:) echo "option requires an argument -- '$OPTARG'" >&2 l) rsyncopts+=("--bwlimit=$OPTARG") ;;
exit 1 ;; a) commit_arch=$OPTARG ;;
\?) echo "invalid option -- '$OPTARG'" >&2 :) die "Option requires an argument -- '$OPTARG'" ;;
exit 1 ;; \?) die "Invalid option -- '$OPTARG'" ;;
esac esac
done done
shift $(( OPTIND - 1 )) shift $(( OPTIND - 1 ))
if [ -n "$(svn status -q)" ]; then # check packages have the packager field set
echo -n 'committing changes to trunk...'
msgtemplate="upgpkg: $pkgbase $(get_full_version ${epoch:-0} $pkgver $pkgrel)"$'\n\n'
if [ -n "$1" ]; then
svn commit -q -m "${msgtemplate}${1}" || abort
else
msgfile="$(mktemp)"
echo "$msgtemplate" > "$msgfile"
if [ -n "$SVN_EDITOR" ]; then
$SVN_EDITOR "$msgfile"
elif [ -n "$VISUAL" ]; then
$VISUAL "$msgfile"
elif [ -n "$EDITOR" ]; then
$EDITOR "$msgfile"
else
vi "$msgfile"
fi
[ -s "$msgfile" ] || abort
svn commit -q -F "$msgfile" || abort
unlink "$msgfile"
fi
echo 'done'
fi
declare -a uploads
for _arch in ${arch[@]}; do for _arch in ${arch[@]}; do
if [ -n "$commit_arch" ] && [ "${_arch}" != "$commit_arch" ]; then if [[ -n $commit_arch && ${_arch} != "$commit_arch" ]]; then
echo "skipping ${_arch}"
continue continue
fi fi
for _pkgname in ${pkgname[@]}; do for _pkgname in ${pkgname[@]}; do
fullver=$(get_full_version ${epoch:-0} $pkgver $pkgrel) fullver=$(get_full_version $_pkgname)
pkgfile=$(getpkgfile "$_pkgname-$fullver-${_arch}".pkg.tar.?z 2>/dev/null)
pkgdestfile=$(getpkgfile "$PKGDEST/$_pkgname-$fullver-${_arch}".pkg.tar.?z 2>/dev/null)
if [ -f "$pkgfile" ]; then if pkgfile=$(shopt -s nullglob;
pkgfile="./$pkgfile" getpkgfile "${PKGDEST+$PKGDEST/}$_pkgname-$fullver-${_arch}".pkg.tar.?z); then
elif [ -f "$pkgdestfile" ]; then if grep -q "packager = Unknown Packager" <(bsdtar -xOqf $pkgfile .PKGINFO); then
pkgfile="$pkgdestfile" die "PACKAGER was not set when building package"
else
echo "skipping ${_arch}"
continue 2
fi
uploads+=("$pkgfile")
if [[ $SIGNPKG == 'y' ]]; then
echo "Signing package ${pkgfile}..."
if [[ -n $GPGKEY ]]; then
SIGNWITHKEY="-u ${GPGKEY}"
fi fi
gpg --detach-sign --use-agent ${SIGNWITHKEY} "${pkgfile}" || abort
fi
sigfile="${pkgfile}.sig"
if [ -f "${sigfile}" ]; then
uploads+=("$sigfile")
elif [[ $SIGNPKG == 'y' ]]; then
abort "Signature ${pkgfile}.sig was not found"
fi fi
done done
done done
if [[ -n $commit_arch ]]; then if [[ -z $server ]]; then
archrelease "$repo-$commit_arch" || abort case "$repo" in
else core|extra|testing|staging|kde-unstable|gnome-unstable)
archrelease "${arch[@]/#/$repo-}" || abort server='gerolde.archlinux.org' ;;
community*|multilib*)
server='aur.archlinux.org' ;;
*)
server='gerolde.archlinux.org'
msg "Non-standard repository $repo in use, defaulting to server $server" ;;
esac
fi
if [[ -n $(svn status -q) ]]; then
msgtemplate="upgpkg: $pkgbase $(get_full_version)"$'\n\n'
if [[ -n $1 ]]; then
stat_busy 'Committing changes to trunk'
svn commit -q -m "${msgtemplate}${1}" || die
stat_done
else
msgfile="$(mktemp)"
echo "$msgtemplate" > "$msgfile"
if [[ -n $SVN_EDITOR ]]; then
$SVN_EDITOR "$msgfile"
elif [[ -n $VISUAL ]]; then
$VISUAL "$msgfile"
elif [[ -n $EDITOR ]]; then
$EDITOR "$msgfile"
else
vi "$msgfile"
fi
[[ -s $msgfile ]] || die
stat_busy 'Committing changes to trunk'
svn commit -q -F "$msgfile" || die
unlink "$msgfile"
stat_done
fi
fi
declare -a uploads
declare -a commit_arches
declare -a skip_arches
for _arch in ${arch[@]}; do
if [[ -n $commit_arch && ${_arch} != "$commit_arch" ]]; then
skip_arches+=($_arch)
continue
fi
for _pkgname in ${pkgname[@]}; do
fullver=$(get_full_version $_pkgname)
if ! pkgfile=$(shopt -s nullglob;
getpkgfile "${PKGDEST+$PKGDEST/}$_pkgname-$fullver-${_arch}".pkg.tar.?z); then
warning "Skipping $_pkgname-$fullver-$_arch: failed to locate package file"
skip_arches+=($_arch)
continue 2
fi
uploads+=("$pkgfile")
sigfile="${pkgfile}.sig"
if [[ ! -f $sigfile ]]; then
msg "Signing package ${pkgfile}..."
if [[ -n $GPGKEY ]]; then
SIGNWITHKEY="-u ${GPGKEY}"
fi
gpg --detach-sign --use-agent ${SIGNWITHKEY} "${pkgfile}" || die
fi
if ! gpg --verify "$sigfile" >/dev/null 2>&1; then
die "Signature ${pkgfile}.sig is incorrect!"
fi
uploads+=("$sigfile")
done
done
for _arch in ${arch[@]}; do
if ! in_array $_arch ${skip_arches[@]}; then
commit_arches+=($_arch)
fi
done
if [[ ${#commit_arches[*]} -gt 0 ]]; then
archrelease "${archreleaseopts[@]}" "${commit_arches[@]/#/$repo-}" || die
fi fi
if [[ ${#uploads[*]} -gt 0 ]]; then if [[ ${#uploads[*]} -gt 0 ]]; then
echo 'uploading all package and signature files' new_uploads=()
rsync "${rsyncopts[@]}" "${uploads[@]}" "$server:staging/$repo/" || abort
# convert to absolute paths so rsync can work with colons (epoch)
while read -r -d '' upload; do
new_uploads+=("$upload")
done < <(realpath -z "${uploads[@]}")
uploads=("${new_uploads[@]}")
unset new_uploads
msg 'Uploading all package and signature files'
rsync "${rsyncopts[@]}" "${uploads[@]}" "$server:staging/$repo/" || die
fi fi
if [ "${arch[*]}" == 'any' ]; then if [[ "${arch[*]}" == 'any' ]]; then
if [ -d ../repos/$repo-i686 -a -d ../repos/$repo-x86_64 ]; then if [[ -d ../repos/$repo-i686 && -d ../repos/$repo-x86_64 ]]; then
pushd ../repos/ >/dev/null pushd ../repos/ >/dev/null
echo "removing $repo-i686 and $repo-x86_64..." stat_busy "Removing $repo-i686 and $repo-x86_64"
svn rm $repo-i686 svn rm -q $repo-i686
svn rm $repo-x86_64 svn rm -q $repo-x86_64
svn commit -q -m "removed $repo-i686 and $repo-x86_64 for $pkgname" svn commit -q -m "Removed $repo-i686 and $repo-x86_64 for $pkgname"
echo 'done' stat_done
popd >/dev/null popd >/dev/null
fi fi
else else
if [ -d ../repos/$repo-any ]; then if [[ -d ../repos/$repo-any ]]; then
pushd ../repos/ >/dev/null pushd ../repos/ >/dev/null
echo "removing $repo-any..." stat_busy "Removing $repo-any"
svn rm $repo-any svn rm -q $repo-any
svn commit -q -m "removed $repo-any for $pkgname" svn commit -q -m "Removed $repo-any for $pkgname"
echo 'done' stat_done
popd >/dev/null popd >/dev/null
fi fi
fi fi

86
crossrepomove.in Normal file
View File

@@ -0,0 +1,86 @@
#!/bin/bash
m4_include(lib/common.sh)
scriptname=${0##*/}
if [[ -z $1 ]]; then
echo 'Usage: '$scriptname' [pkgbase]'
exit 1
fi
pkgbase="${1}"
packages_svn='svn+ssh://gerolde.archlinux.org/srv/svn-packages'
packages_server='gerolde.archlinux.org'
community_svn='svn+ssh://aur.archlinux.org/srv/svn-packages'
community_server='aur.archlinux.org'
mirror='http://mirrors.kernel.org/archlinux'
case $scriptname in
extra2community)
source_svn="${packages_svn}"
target_svn="${community_svn}"
source_server="${packages_server}"
target_server="${community_server}"
source_repo='extra'
target_repo='community'
;;
community2extra)
source_svn="${community_svn}"
target_svn="${packages_svn}"
source_server="${community_server}"
target_server="${packages_server}"
source_repo='community'
target_repo='extra'
;;
*)
die "Couldn't find configuration for $scriptname"
;;
esac
setup_workdir
pushd $WORKDIR >/dev/null
msg "Downloading sources for ${pkgbase}"
svn -q checkout -N "${target_svn}" target_checkout
mkdir -p "target_checkout/${pkgbase}/repos"
svn -q export "${source_svn}/${pkgbase}/trunk" "target_checkout/${pkgbase}/trunk" || die
. "target_checkout/${pkgbase}/trunk/PKGBUILD"
msg "Downloading packages for ${pkgbase}"
for _arch in ${arch[@]}; do
if [[ "${_arch[*]}" == 'any' ]]; then
repo_arch='x86_64'
else
repo_arch=${_arch}
fi
for _pkgname in ${pkgname[@]}; do
fullver=$(get_full_version $_pkgname)
# FIXME: this only works with .xz packages
ssh "${target_server}" "cd staging/${target_repo}
curl -O ${mirror}/${source_repo}/os/${repo_arch}/$_pkgname-$fullver-${_arch}.pkg.tar.xz
curl -O ${mirror}/${source_repo}/os/${repo_arch}/$_pkgname-$fullver-${_arch}.pkg.tar.xz.sig" || die
done
done
msg "Adding ${pkgbase} to ${target_repo}"
svn -q add "target_checkout/${pkgbase}"
svn -q propset svn:keywords 'Id' "target_checkout/${pkgbase}/trunk/PKGBUILD"
svn -q commit -m"${scriptname}: Moving ${pkgbase} from ${source_repo} to ${target_repo}" target_checkout
pushd "target_checkout/${pkgbase}/trunk" >/dev/null
archrelease "${arch[@]/#/$target_repo-}" || die
popd >/dev/null
ssh "${target_server}" '/arch/db-update' || die
msg "Removing ${pkgbase} from ${source_repo}"
for _arch in ${arch[@]}; do
ssh "${source_server}" "/arch/db-remove ${source_repo} ${_arch} ${pkgbase}"
done
svn -q checkout -N "${source_svn}" source_checkout
svn -q up "source_checkout/${pkgbase}"
svn -q rm "source_checkout/${pkgbase}"
svn -q commit -m"${scriptname}: Moving ${pkgbase} from ${source_repo} to ${target_repo}" source_checkout
popd >/dev/null

87
find-libdeps.in Normal file
View File

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

View File

@@ -3,6 +3,8 @@
# finddeps - find packages that depend on a given depname # finddeps - find packages that depend on a given depname
# #
m4_include(lib/common.sh)
match=$1 match=$1
if [[ -z $match ]]; then if [[ -z $match ]]; then
@@ -11,7 +13,7 @@ if [[ -z $match ]]; then
echo 'Find packages that depend on a given depname.' echo 'Find packages that depend on a given depname.'
echo 'Run this script from the top-level directory of your ABS tree.' echo 'Run this script from the top-level directory of your ABS tree.'
echo '' echo ''
exit 0 exit 1
fi fi
find . -type d | while read d; do find . -type d | while read d; do

14
lddd.in
View File

@@ -1,8 +1,10 @@
#!/bin/sh #!/bin/bash
# #
# lddd - find broken library links on your machine # lddd - find broken library links on your machine
# #
m4_include(lib/common.sh)
ifs=$IFS ifs=$IFS
IFS="${IFS}:" IFS="${IFS}:"
@@ -11,10 +13,10 @@ extras=
TEMPDIR=$(mktemp -d --tmpdir lddd-script.XXXX) TEMPDIR=$(mktemp -d --tmpdir lddd-script.XXXX)
echo 'Go out and drink some tea, this will take a while :) ...' msg 'Go out and drink some tea, this will take a while :) ...'
# Check ELF binaries in the PATH and specified dir trees. # Check ELF binaries in the PATH and specified dir trees.
for tree in $PATH $libdirs $extras; do for tree in $PATH $libdirs $extras; do
echo DIR $tree msg2 "DIR $tree"
# Get list of files in tree. # Get list of files in tree.
files=$(find $tree -type f ! -name '*.a' ! -name '*.la' ! -name '*.py*' ! -name '*.txt' ! -name '*.h' ! -name '*.ttf' ! \ files=$(find $tree -type f ! -name '*.a' ! -name '*.la' ! -name '*.py*' ! -name '*.txt' ! -name '*.h' ! -name '*.ttf' ! \
@@ -25,9 +27,9 @@ for tree in $PATH $libdirs $extras; do
-name '*.mcopclass' ! -name '*.mcoptype') -name '*.mcopclass' ! -name '*.mcoptype')
IFS=$ifs IFS=$ifs
for i in $files; do for i in $files; do
if [ $(file $i | grep -c 'ELF') -ne 0 ]; then if (( $(file $i | grep -c 'ELF') != 0 )); then
# Is an ELF binary. # Is an ELF binary.
if [ $(ldd $i 2>/dev/null | grep -c 'not found') -ne 0 ]; then if (( $(ldd $i 2>/dev/null | grep -c 'not found') != 0 )); then
# Missing lib. # Missing lib.
echo "$i:" >> $TEMPDIR/raw.txt echo "$i:" >> $TEMPDIR/raw.txt
ldd $i 2>/dev/null | grep 'not found' >> $TEMPDIR/raw.txt ldd $i 2>/dev/null | grep 'not found' >> $TEMPDIR/raw.txt
@@ -43,4 +45,4 @@ done
# clean list # clean list
sort -u $TEMPDIR/pacman.txt >> $TEMPDIR/possible-rebuilds.txt sort -u $TEMPDIR/pacman.txt >> $TEMPDIR/possible-rebuilds.txt
echo "Files saved to $TEMPDIR" msg "Files saved to $TEMPDIR"

132
lib/common.sh Normal file
View File

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

20
lib/valid-tags.sh Normal file
View File

@@ -0,0 +1,20 @@
_arch=(
i686
x86_64
any
)
_tags=(
core-i686 core-x86_64 core-any
extra-i686 extra-x86_64 extra-any
multilib-x86_64
staging-i686 staging-x86_64 staging-any
testing-i686 testing-x86_64 testing-any
multilib-testing-x86_64
multilib-staging-x86_64
community-i686 community-x86_64 community-any
community-staging-i686 community-staging-x86_64 community-staging-any
community-testing-i686 community-testing-x86_64 community-testing-any
kde-unstable-i686 kde-unstable-x86_64 kde-unstable-any
gnome-unstable-i686 gnome-unstable-x86_64 gnome-unstable-any
)

View File

@@ -8,6 +8,8 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
m4_include(lib/common.sh)
shopt -s nullglob shopt -s nullglob
makepkg_args='-s --noconfirm -L' makepkg_args='-s --noconfirm -L'
@@ -18,10 +20,12 @@ install_pkg=
add_to_db=false add_to_db=false
run_namcap=false run_namcap=false
chrootdir= chrootdir=
passeddir=
default_copy=$USER default_copy=$USER
[[ -n $SUDO_USER ]] && default_copy=$SUDO_USER [[ -n $SUDO_USER ]] && default_copy=$SUDO_USER
[[ -z $default_copy || $default_copy = root ]] && default_copy=copy [[ -z $default_copy || $default_copy = root ]] && default_copy=copy
src_owner=${SUDO_USER:-$USER}
usage() { usage() {
echo "usage ${0##*/} [options] -r <chrootdir> [--] [makepkg args]" echo "usage ${0##*/} [options] -r <chrootdir> [--] [makepkg args]"
@@ -50,8 +54,8 @@ usage() {
echo '-I <pkg> Install a package into the working copy of the chroot' echo '-I <pkg> Install a package into the working copy of the chroot'
echo '-l <copy> The directory to use as the working copy of the chroot' echo '-l <copy> The directory to use as the working copy of the chroot'
echo ' Useful for maintaining multiple copies.' echo ' Useful for maintaining multiple copies.'
echo '-n Run namcap on the package'
echo " Default: $default_copy" echo " Default: $default_copy"
echo '-n Run namcap on the package'
exit 1 exit 1
} }
@@ -61,16 +65,16 @@ while getopts 'hcudr:I:l:n' arg; do
c) clean_first=true ;; c) clean_first=true ;;
u) update_first=true ;; u) update_first=true ;;
d) add_to_db=true ;; d) add_to_db=true ;;
r) chrootdir="$OPTARG" ;; r) passeddir="$OPTARG" ;;
I) install_pkg="$OPTARG" ;; I) install_pkg="$OPTARG" ;;
l) copy="$OPTARG" ;; l) copy="$OPTARG" ;;
n) run_namcap=true ;; n) run_namcap=true; makepkg_args="$makepkg_args -i" ;;
*) makepkg_args="$makepkg_args -$arg $OPTARG" ;; *) makepkg_args="$makepkg_args -$arg $OPTARG" ;;
esac esac
done done
# Canonicalize chrootdir, getting rid of trailing / # Canonicalize chrootdir, getting rid of trailing /
chrootdir=$(readlink -e "$chrootdir") chrootdir=$(readlink -e "$passeddir")
if [[ ${copy:0:1} = / ]]; then if [[ ${copy:0:1} = / ]]; then
copydir=$copy copydir=$copy
@@ -85,30 +89,25 @@ makepkg_args="$makepkg_args ${*:$OPTIND}"
# See if -R was passed to makepkg # See if -R was passed to makepkg
for arg in ${*:$OPTIND}; do for arg in ${*:$OPTIND}; do
if [[ $arg = -R ]]; then if [[ $arg = -R ]]; then
repack=1 repack=true
break break
fi fi
done done
if (( EUID )); then if (( EUID )); then
echo 'This script must be run as root.' die 'This script must be run as root.'
exit 1
fi fi
if [[ ! -f PKGBUILD && -z $install_pkg ]]; then if [[ ! -f PKGBUILD && -z $install_pkg ]]; then
echo 'This must be run in a directory containing a PKGBUILD.' die 'This must be run in a directory containing a PKGBUILD.'
exit 1
fi fi
if [[ ! -d $chrootdir ]]; then if [[ ! -d $chrootdir ]]; then
echo "No chroot dir defined, or invalid path '$chrootdir'" die "No chroot dir defined, or invalid path '$passeddir'"
exit 1
fi fi
if [[ ! -d $chrootdir/root ]]; then if [[ ! -d $chrootdir/root ]]; then
echo 'Missing chroot dir root directory.' die "Missing chroot dir root directory. Try using: mkarchroot $chrootdir/root base base-devel sudo"
echo "Try using: mkarchroot $chrootdir/root base base-devel sudo"
exit 1
fi fi
umask 0022 umask 0022
@@ -117,9 +116,9 @@ umask 0022
# Note this is the same FD number as in mkarchroot # Note this is the same FD number as in mkarchroot
exec 9>"$copydir.lock" exec 9>"$copydir.lock"
if ! flock -n 9; then if ! flock -n 9; then
echo -n "locking chroot copy '$copy'..." stat_busy "Locking chroot copy '$copy'"
flock 9 flock 9
echo "done" stat_done
fi fi
if [[ ! -d $copydir ]] || $clean_first; then if [[ ! -d $copydir ]] || $clean_first; then
@@ -128,12 +127,12 @@ if [[ ! -d $copydir ]] || $clean_first; then
exec 8>"$chrootdir/root.lock" exec 8>"$chrootdir/root.lock"
if ! flock -sn 8; then if ! flock -sn 8; then
echo -n "locking clean chroot..." stat_busy "Locking clean chroot"
flock -s 8 flock -s 8
echo "done" stat_done
fi fi
echo -n 'creating clean working copy...' stat_busy 'Creating clean working copy'
use_rsync=false use_rsync=false
if type -P btrfs >/dev/null; then if type -P btrfs >/dev/null; then
[[ -d $copydir ]] && btrfs subvolume delete "$copydir" &>/dev/null [[ -d $copydir ]] && btrfs subvolume delete "$copydir" &>/dev/null
@@ -147,7 +146,7 @@ if [[ ! -d $copydir ]] || $clean_first; then
mkdir -p "$copydir" mkdir -p "$copydir"
rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir" rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir"
fi fi
echo 'done' stat_done
# Drop the read lock again # Drop the read lock again
exec 8>&- exec 8>&-
@@ -243,12 +242,12 @@ cp PKGBUILD "$copydir/build/"
done done
# Find all changelog and install files, even inside functions # Find all changelog and install files, even inside functions
for i in changelog install; do for i in 'changelog' 'install'; do
sed -n "s/^[[:space:]]*$i=//p" PKGBUILD | while IFS= read -r file; do while read -r file; do
# evaluate any bash variables used # evaluate any bash variables used
eval file="$file" eval file=\"$(sed 's/^\(['\''"]\)\(.*\)\1$/\2/' <<< "$file")\"
[[ -f $file ]] && cp "$file" "$copydir/build/" [[ -f $file ]] && cp "$file" "$copydir/build/"
done done < <(sed -n "s/^[[:space:]]*$i=//p" PKGBUILD)
done done
) )
@@ -260,14 +259,11 @@ nobody ALL = NOPASSWD: /usr/bin/pacman
EOF EOF
chmod 440 "$copydir/etc/sudoers.d/nobody-pacman" chmod 440 "$copydir/etc/sudoers.d/nobody-pacman"
# Set this system wide as makepkg will source /etc/profile before calling build()
echo 'export LANG=C' > "$copydir/etc/locale.conf"
# This is a little gross, but this way the script is recreated every time in the # This is a little gross, but this way the script is recreated every time in the
# working copy # working copy
cat >"$copydir/chrootbuild" <<EOF cat >"$copydir/chrootbuild" <<EOF
#!/bin/bash #!/bin/bash
export LANG=C . /etc/profile
export HOME=/build export HOME=/build
cd /build cd /build
@@ -277,7 +273,10 @@ sudo -u nobody makepkg $makepkg_args || touch BUILD_FAILED
if $run_namcap; then if $run_namcap; then
pacman -S --needed --noconfirm namcap pacman -S --needed --noconfirm namcap
namcap /build/PKGBUILD /pkgdest/*.pkg.tar.?z > /build/namcap.log for pkgfile in /build/PKGBUILD /pkgdest/*.pkg.tar.?z; do
echo "Checking \${pkgfile##*/}"
sudo -u nobody namcap "\$pkgfile" 2>&1 | tee "/build/\${pkgfile##*/}-namcap.log"
done
fi fi
exit 0 exit 0
@@ -285,7 +284,7 @@ EOF
chmod +x "$copydir/chrootbuild" chmod +x "$copydir/chrootbuild"
if mkarchroot -r "/chrootbuild" "$copydir"; then if mkarchroot -r "/chrootbuild" "$copydir"; then
for pkgfile in "$copydir"/pkgdest/*.pkg.tar.*; do for pkgfile in "$copydir"/pkgdest/*.pkg.tar.?z; do
if $add_to_db; then if $add_to_db; then
mkdir -p "$copydir/repo" mkdir -p "$copydir/repo"
pushd "$copydir/repo" >/dev/null pushd "$copydir/repo" >/dev/null
@@ -294,10 +293,12 @@ if mkarchroot -r "/chrootbuild" "$copydir"; then
popd >/dev/null popd >/dev/null
fi fi
chown "$src_owner" "$pkgfile"
mv "$pkgfile" "$PKGDEST" mv "$pkgfile" "$PKGDEST"
done done
for l in "$copydir"/build/{namcap,*-{build,check,package,package_*}}.log; do for l in "$copydir"/build/*-{build,check,namcap,package,package_*}.log; do
chown "$src_owner" "$l"
[[ -f $l ]] && mv "$l" . [[ -f $l ]] && mv "$l" .
done done
else else
@@ -306,11 +307,11 @@ else
fi fi
for f in "$copydir"/srcdest/*; do for f in "$copydir"/srcdest/*; do
chown "$src_owner" "$f"
mv "$f" "$SRCDEST" mv "$f" "$SRCDEST"
done done
if [[ -e $copydir/build/BUILD_FAILED ]]; then if [[ -e $copydir/build/BUILD_FAILED ]]; then
echo "Build failed, check $copydir/build"
rm "$copydir/build/BUILD_FAILED" rm "$copydir/build/BUILD_FAILED"
exit 1 die "Build failed, check $copydir/build"
fi fi

View File

@@ -31,7 +31,7 @@ CHOST="i686-pc-linux-gnu"
# -mtune optimizes for an architecture, but builds for whole processor family # -mtune optimizes for an architecture, but builds for whole processor family
CFLAGS="-march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2" CFLAGS="-march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
CXXFLAGS="-march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2" CXXFLAGS="-march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu" LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro"
#-- Make Flags: change this for DistCC/SMP systems #-- Make Flags: change this for DistCC/SMP systems
#MAKEFLAGS="-j2" #MAKEFLAGS="-j2"

View File

@@ -31,7 +31,7 @@ CHOST="x86_64-unknown-linux-gnu"
# -mtune optimizes for an architecture, but builds for whole processor family # -mtune optimizes for an architecture, but builds for whole processor family
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2" CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2" CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu" LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro"
#-- Make Flags: change this for DistCC/SMP systems #-- Make Flags: change this for DistCC/SMP systems
#MAKEFLAGS="-j2" #MAKEFLAGS="-j2"

View File

@@ -8,6 +8,10 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
m4_include(lib/common.sh)
CHROOT_VERSION='v2'
FORCE='n' FORCE='n'
RUN='' RUN=''
NOCOPY='n' NOCOPY='n'
@@ -26,9 +30,9 @@ usage() {
echo ' -C <file> Location of a pacman config file' echo ' -C <file> Location of a pacman config file'
echo ' -M <file> Location of a makepkg config file' echo ' -M <file> Location of a makepkg config file'
echo ' -n Do not copy config files into the chroot' echo ' -n Do not copy config files into the chroot'
echo ' -c <dir> Set pacman cache. Default: /var/cache/pacman/pkg' echo ' -c <dir> Set pacman cache'
echo ' -h This message' echo ' -h This message'
exit $1 exit 1
} }
while getopts 'r:ufnhC:M:c:' arg; do while getopts 'r:ufnhC:M:c:' arg; do
@@ -41,191 +45,229 @@ while getopts 'r:ufnhC:M:c:' arg; do
n) NOCOPY='y' ;; n) NOCOPY='y' ;;
c) cache_dir="$OPTARG" ;; c) cache_dir="$OPTARG" ;;
h|?) usage 0 ;; h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;; *) error "invalid argument '${arg}'"; usage ;;
esac esac
done done
if [ "$EUID" != '0' ]; then if (( $EUID != 0 )); then
echo 'error: this script must be run as root.' die 'This script must be run as root.'
exit 1
fi fi
shift $(($OPTIND - 1)) shift $(($OPTIND - 1))
if [ "$RUN" = '' -a $# -lt 2 ]; then if [[ -z $RUN ]] && (( $# < 2 )); then
echo 'you must specify a directory and one or more packages' die 'You must specify a directory and one or more packages.'
usage 1 elif (( $# < 1 )); then
elif [ $# -lt 1 ]; then die 'You must specify a directory.'
echo 'you must specify a directory'
usage 1
fi fi
working_dir="$(readlink -f ${1})" working_dir="$(readlink -f ${1})"
shift 1 shift 1
[ "${working_dir}" = '' ] && echo 'error: please specify a working directory' && usage 1 [[ -z $working_dir ]] && die 'Please specify a working directory.'
if [ -z "$cache_dir" ]; then if [[ -z $cache_dir ]]; then
cache_conf=${working_dir}/etc/pacman.conf cache_dirs=($(pacman -v $cache_conf 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g'))
[ ! -f $cache_conf ] && cache_conf=${pac_conf:-/etc/pacman.conf} else
cache_dir=$( (grep -m 1 '^CacheDir' $cache_conf || echo 'CacheDir = /var/cache/pacman/pkg') | sed 's/CacheDir\s*=\s*//') cache_dirs=(${cache_dir})
unset cache_conf
fi fi
if [ -f /etc/pacman.d/mirrorlist ]; then host_mirror=$(pacman -Sddp extra/devtools 2>/dev/null | sed -E 's#(.*/)extra/os/.*#\1$repo/os/$arch#')
host_mirror=$(pacman -Sddp 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 if echo "${host_mirror}" | grep -q 'file://'; then
host_mirror_path=$(echo "${host_mirror}" | sed -E 's#file://(/.*)/\$repo/os/\$arch#\1#g') host_mirror_path=$(echo "${host_mirror}" | sed -E 's#file://(/.*)/\$repo/os/\$arch#\1#g')
fi fi
# {{{ functions # {{{ functions
chroot_mount() { chroot_mount() {
[ -e "${working_dir}/sys" ] || mkdir "${working_dir}/sys" trap 'trap_chroot_umount' EXIT INT QUIT TERM HUP
mount -t sysfs sysfs "${working_dir}/sys"
[ -e "${working_dir}/proc" ] || mkdir "${working_dir}/proc" if (( ! have_nspawn )); then
mount -t proc proc "${working_dir}/proc" [[ -e "${working_dir}/sys" ]] || mkdir "${working_dir}/sys"
mount -o bind /sys "${working_dir}/sys"
mount -o remount,ro,bind "${working_dir}/sys"
[ -e "${working_dir}/dev" ] || mkdir "${working_dir}/dev" [[ -e "${working_dir}/proc" ]] || mkdir "${working_dir}/proc"
mount -t tmpfs dev "${working_dir}/dev" -o mode=0755,size=10M,nosuid mount -t proc proc -o nosuid,noexec,nodev "${working_dir}/proc"
mknod -m 666 "${working_dir}/dev/null" c 1 3 mount -o bind /proc/sys "${working_dir}/proc/sys"
mknod -m 666 "${working_dir}/dev/zero" c 1 5 mount -o remount,ro,bind "${working_dir}/proc/sys"
mknod -m 600 "${working_dir}/dev/console" c 5 1
mknod -m 644 "${working_dir}/dev/random" c 1 8
mknod -m 644 "${working_dir}/dev/urandom" c 1 9
mknod -m 666 "${working_dir}/dev/tty" c 5 0
mknod -m 666 "${working_dir}/dev/tty0" c 4 0
mknod -m 666 "${working_dir}/dev/full" c 1 7
ln -s /proc/kcore "${working_dir}/dev/core"
ln -s /proc/self/fd "${working_dir}/dev/fd"
ln -s /proc/self/fd/0 "${working_dir}/dev/stdin"
ln -s /proc/self/fd/1 "${working_dir}/dev/stdout"
ln -s /proc/self/fd/2 "${working_dir}/dev/stderr"
[ -e "${working_dir}/dev/shm" ] || mkdir "${working_dir}/dev/shm" [[ -e "${working_dir}/dev" ]] || mkdir "${working_dir}/dev"
mount -t tmpfs shm "${working_dir}/dev/shm" -o nodev,nosuid,size=128M mount -t tmpfs dev "${working_dir}/dev" -o mode=0755,size=10M,nosuid,strictatime
mknod -m 666 "${working_dir}/dev/null" c 1 3
mknod -m 666 "${working_dir}/dev/zero" c 1 5
mknod -m 600 "${working_dir}/dev/console" c 5 1
mknod -m 644 "${working_dir}/dev/random" c 1 8
mknod -m 644 "${working_dir}/dev/urandom" c 1 9
mknod -m 666 "${working_dir}/dev/tty" c 5 0
mknod -m 666 "${working_dir}/dev/ptmx" c 5 2
mknod -m 666 "${working_dir}/dev/tty0" c 4 0
mknod -m 666 "${working_dir}/dev/full" c 1 7
mknod -m 666 "${working_dir}/dev/rtc0" c 254 0
ln -s /proc/kcore "${working_dir}/dev/core"
ln -s /proc/self/fd "${working_dir}/dev/fd"
ln -s /proc/self/fd/0 "${working_dir}/dev/stdin"
ln -s /proc/self/fd/1 "${working_dir}/dev/stdout"
ln -s /proc/self/fd/2 "${working_dir}/dev/stderr"
[ -e "${working_dir}/dev/pts" ] || mkdir "${working_dir}/dev/pts" [[ -e "${working_dir}/dev/shm" ]] || mkdir "${working_dir}/dev/shm"
mount -t devpts devpts "${working_dir}/dev/pts" -o newinstance,ptmxmode=666 mount -t tmpfs shm "${working_dir}/dev/shm" -o nodev,nosuid,size=128M
ln -s pts/ptmx "${working_dir}/dev/ptmx"
[ -e "${cache_dir}" ] || mkdir -p "${cache_dir}" [[ -e "${working_dir}/dev/pts" ]] || mkdir "${working_dir}/dev/pts"
[ -e "${working_dir}/${cache_dir}" ] || mkdir -p "${working_dir}/${cache_dir}" mount -o bind /dev/pts "${working_dir}/dev/pts"
mount -o bind "${cache_dir}" "${working_dir}/${cache_dir}"
if [ -n "${host_mirror_path}" ]; then [[ -e "${working_dir}/run" ]] || mkdir "${working_dir}/run"
[ -e "${working_dir}/${host_mirror_path}" ] || mkdir -p "${working_dir}/${host_mirror_path}" mount -t tmpfs tmpfs "${working_dir}/run" -o mode=0755,nodev,nosuid,strictatime,size=64M
mount -o bind "${host_mirror_path}" "${working_dir}/${host_mirror_path}"
mount -o remount,ro,bind "${host_mirror_path}" "${working_dir}/${host_mirror_path}" for host_config in resolv.conf timezone localtime; do
[[ -e "${working_dir}/etc/${host_config}" ]] || touch "${working_dir}/etc/${host_config}"
mount -o bind /etc/${host_config} "${working_dir}/etc/${host_config}"
mount -o remount,ro,bind "${working_dir}/etc/${host_config}"
done
fi fi
trap 'chroot_umount' EXIT INT QUIT TERM HUP 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 "${working_dir}/${host_mirror_path}"
fi
local cache_dir_first=true
for cache_dir in ${cache_dirs[@]}; do
[[ -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 ! ${cache_dir_first}; then
mount -o remount,ro,bind "${working_dir}/${cache_dir}"
else
cache_dir_first=false
fi
done
} }
copy_hostconf () { copy_hostconf () {
chroot "${working_dir}" /bin/findmnt -rnu -o SOURCE,TARGET,FSTYPE,OPTIONS > "${working_dir}/etc/mtab" cp -a /etc/pacman.d/gnupg "${working_dir}/etc/pacman.d"
cp /etc/resolv.conf "${working_dir}/etc/resolv.conf"
echo "Server = ${host_mirror}" > ${working_dir}/etc/pacman.d/mirrorlist echo "Server = ${host_mirror}" > ${working_dir}/etc/pacman.d/mirrorlist
if [[ -n $pac_conf && $NOCOPY = 'n' ]]; then
cp ${pac_conf} ${working_dir}/etc/pacman.conf
fi
if [[ -n $makepkg_conf && $NOCOPY = 'n' ]]; then
cp ${makepkg_conf} ${working_dir}/etc/makepkg.conf
fi
sed -r "s|^#?\\s*CacheDir.+|CacheDir = $(echo -n ${cache_dirs[@]})|g" -i ${working_dir}/etc/pacman.conf
} }
chroot_umount () { trap_chroot_umount () {
umount "${working_dir}/proc" trap 'trap_exit' EXIT INT QUIT TERM HUP
umount "${working_dir}/sys"
umount "${working_dir}/dev/pts" for cache_dir in ${cache_dirs[@]}; do
umount "${working_dir}/dev/shm" umount "${working_dir}/${cache_dir}"
umount "${working_dir}/dev" done
umount "${working_dir}/${cache_dir}" [[ -n $host_mirror_path ]] && umount "${working_dir}/${host_mirror_path}"
[ -n "${host_mirror_path}" ] && umount "${working_dir}/${host_mirror_path}"
if (( ! have_nspawn )); then
for host_config in resolv.conf timezone localtime; do
umount "${working_dir}/etc/${host_config}"
done
umount "${working_dir}/proc/sys"
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}/run"
fi
} }
chroot_lock () { chroot_lock () {
# Only reopen the FD if it wasn't handed to us # Only reopen the FD if it wasn't handed to us
if [ "$(readlink -f /dev/fd/9)" != "${working_dir}.lock" ]; then if [[ $(readlink -f /dev/fd/9) != "${working_dir}.lock" ]]; then
exec 9>"${working_dir}.lock" exec 9>"${working_dir}.lock"
fi fi
# Lock the chroot. Take note of the FD number. # Lock the chroot. Take note of the FD number.
if ! flock -n 9; then if ! flock -n 9; then
echo -n "locking chroot..." stat_busy "Locking chroot"
flock 9 flock 9
echo "done" stat_done
fi fi
} }
chroot_run() {
local dir=$1
shift
if (( have_nspawn)); then
eval systemd-nspawn -D "${dir}" -- ${@} 2>/dev/null
else
eval unshare -mui -- chroot "${dir}" ${@}
fi
}
# }}} # }}}
# use systemd-nspawn if we have it available and systemd is running
if type -P systemd-nspawn >/dev/null && mountpoint -q /sys/fs/cgroup/systemd; then
have_nspawn=1
fi
umask 0022 umask 0022
if [ "$RUN" != "" ]; then if [[ -n $RUN ]]; then
# run chroot {{{ # run chroot {{{
#Sanity check #Sanity check
if [ ! -f "${working_dir}/.arch-chroot" ]; then if [[ ! -f "${working_dir}/.arch-chroot" ]]; then
echo "error: '${working_dir}' does not appear to be a Arch chroot" die "'${working_dir}' does not appear to be a Arch chroot."
echo ' please build the image using mkarchroot' elif [[ $(cat "${working_dir}/.arch-chroot") != ${CHROOT_VERSION} ]]; then
exit 1 die "'${working_dir}' is not compatible with ${APPNAME} version ${CHROOT_VERSION}. Please rebuild."
fi fi
chroot_lock chroot_lock
chroot_mount chroot_mount
copy_hostconf copy_hostconf
eval chroot "${working_dir}" ${RUN} chroot_run "${working_dir}" ${RUN}
# }}} # }}}
else else
# {{{ build chroot # {{{ build chroot
if [ -e "${working_dir}" -a "${FORCE}" = "n" ]; then if [[ -e $working_dir && $FORCE = 'n' ]]; then
echo "error: working dir '${working_dir}' already exists - try using -f" die "Working directory '${working_dir}' already exists - try using -f"
exit 1
fi fi
if { type -P btrfs && btrfs subvolume create "${working_dir}"; } &>/dev/null; then if { type -P btrfs && btrfs subvolume create "${working_dir}"; } &>/dev/null; then
chmod 0755 "${working_dir}" chmod 0755 "${working_dir}"
fi fi
mkdir -p "${working_dir}/var/lib/pacman/sync"
mkdir -p "${working_dir}/etc/"
chroot_lock chroot_lock
chroot_mount chroot_mount
pacargs="--noconfirm --root=${working_dir} --cachedir=${cache_dir}" pacargs="${cache_dirs[@]/#/--cachedir=}"
if [ "$pac_conf" != "" ]; then if [[ -n $pac_conf ]]; then
pacargs="$pacargs --config=${pac_conf}" pacargs="$pacargs --config=${pac_conf}"
fi fi
if [ $# -ne 0 ]; then if (( $# != 0 )); then
op='-Sy' if [[ $FORCE = 'y' ]]; then
if [ "$FORCE" = "y" ]; then pacargs="$pacargs --force"
op="${op}f"
fi fi
if ! pacman ${op} ${pacargs} $@; then if ! pacstrap -GMcd "${working_dir}" ${pacargs} $@; then
echo 'error: failed to install all packages' die 'Failed to install all packages'
exit 1
fi fi
fi fi
if [ -d "${working_dir}/lib/modules" ]; then if [[ -d "${working_dir}/lib/modules" ]]; then
ldconfig -r "${working_dir}" chroot_run "${working_dir}" ldconfig
fi fi
if [ "$pac_conf" != "" -a "$NOCOPY" = "n" ]; then if [[ -e "${working_dir}/etc/locale.gen" ]]; then
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 [ -e "${working_dir}/etc/locale.gen" ]; then
sed -i 's@^#\(en_US\|de_DE\)\(\.UTF-8\)@\1\2@' "${working_dir}/etc/locale.gen" sed -i 's@^#\(en_US\|de_DE\)\(\.UTF-8\)@\1\2@' "${working_dir}/etc/locale.gen"
chroot "${working_dir}" /usr/sbin/locale-gen chroot_run "${working_dir}" locale-gen
fi fi
echo 'LANG=C' > "${working_dir}/etc/locale.conf"
if [ ! -e "${working_dir}/.arch-chroot" ]; then copy_hostconf
date +%s > "${working_dir}/.arch-chroot"
fi echo "${CHROOT_VERSION}" > "${working_dir}/.arch-chroot"
# }}} # }}}
fi fi

View File

@@ -37,18 +37,13 @@ Architecture = auto
#CheckSpace #CheckSpace
#VerbosePkgLists #VerbosePkgLists
# PGP signature checking # By default, pacman accepts packages signed by keys that its local keyring
# NOTE: None of this will work without running `pacman-key --init` first. # trusts (see pacman-key and its man page), as well as unsigned packages.
# The compiled in default is equivalent to the following line. This requires
# you to locally sign and trust packager keys using `pacman-key` for them to be
# considered valid.
#SigLevel = Optional TrustedOnly #SigLevel = Optional TrustedOnly
# If you wish to check signatures but avoid local sign and trust issues, use
# the following line. This will treat any key imported into pacman's keyring as # NOTE: You must run `pacman-key --init` before first using pacman; the local
# trusted. # keyring can then be populated with the keys of all official Arch Linux
#SigLevel = Optional TrustAll # packagers with `pacman-key --populate archlinux`.
# Disable signature checks for now
SigLevel = Never
# #
# REPOSITORIES # REPOSITORIES
@@ -74,18 +69,23 @@ SigLevel = Never
# after the header, and they will be used before the default mirrors. # after the header, and they will be used before the default mirrors.
#[testing] #[testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist #Include = /etc/pacman.d/mirrorlist
[core] [core]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[extra] [extra]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
#[community-testing] #[community-testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist #Include = /etc/pacman.d/mirrorlist
[community] [community]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for # An example of a custom package repository. See the pacman manpage for

100
pacman-gnome-unstable.conf Normal file
View File

@@ -0,0 +1,100 @@
#
# /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
#GPGDir = /etc/pacman.d/gnupg/
HoldPkg = pacman glibc
# If upgrades are available for these packages they will be asked for first
SyncFirst = pacman
#XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options
#UseSyslog
#UseDelta
#TotalDownload
# We cannot check disk space from within a chroot environment
#CheckSpace
#VerbosePkgLists
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
#SigLevel = Optional TrustedOnly
# NOTE: You must run `pacman-key --init` before first using pacman; the local
# keyring can then be populated with the keys of all official Arch Linux
# packagers with `pacman-key --populate archlinux`.
#
# 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.
[gnome-unstable]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[testing]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[core]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[extra]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[community-testing]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[community]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs

100
pacman-kde-unstable.conf Normal file
View File

@@ -0,0 +1,100 @@
#
# /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
#GPGDir = /etc/pacman.d/gnupg/
HoldPkg = pacman glibc
# If upgrades are available for these packages they will be asked for first
SyncFirst = pacman
#XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options
#UseSyslog
#UseDelta
#TotalDownload
# We cannot check disk space from within a chroot environment
#CheckSpace
#VerbosePkgLists
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
#SigLevel = Optional TrustedOnly
# NOTE: You must run `pacman-key --init` before first using pacman; the local
# keyring can then be populated with the keys of all official Arch Linux
# packagers with `pacman-key --populate archlinux`.
#
# 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.
[kde-unstable]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[testing]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[core]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[extra]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[community-testing]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[community]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs

View File

@@ -0,0 +1,118 @@
#
# /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
#GPGDir = /etc/pacman.d/gnupg/
HoldPkg = pacman glibc
# If upgrades are available for these packages they will be asked for first
SyncFirst = pacman
#XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options
#UseSyslog
#UseDelta
#TotalDownload
# We cannot check disk space from within a chroot environment
#CheckSpace
#VerbosePkgLists
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
#SigLevel = Optional TrustedOnly
# NOTE: You must run `pacman-key --init` before first using pacman; the local
# keyring can then be populated with the keys of all official Arch Linux
# packagers with `pacman-key --populate archlinux`.
#
# 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]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[testing]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[core]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[extra]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[community-staging]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[community-testing]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[community]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repositories as required here.
[multilib-staging]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[multilib-testing]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[multilib]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs

View File

@@ -37,18 +37,13 @@ Architecture = auto
#CheckSpace #CheckSpace
#VerbosePkgLists #VerbosePkgLists
# PGP signature checking # By default, pacman accepts packages signed by keys that its local keyring
# NOTE: None of this will work without running `pacman-key --init` first. # trusts (see pacman-key and its man page), as well as unsigned packages.
# The compiled in default is equivalent to the following line. This requires
# you to locally sign and trust packager keys using `pacman-key` for them to be
# considered valid.
#SigLevel = Optional TrustedOnly #SigLevel = Optional TrustedOnly
# If you wish to check signatures but avoid local sign and trust issues, use
# the following line. This will treat any key imported into pacman's keyring as # NOTE: You must run `pacman-key --init` before first using pacman; the local
# trusted. # keyring can then be populated with the keys of all official Arch Linux
#SigLevel = Optional TrustAll # packagers with `pacman-key --populate archlinux`.
# Disable signature checks for now
SigLevel = Never
# #
# REPOSITORIES # REPOSITORIES
@@ -74,31 +69,38 @@ SigLevel = Never
# after the header, and they will be used before the default mirrors. # after the header, and they will be used before the default mirrors.
[testing] [testing]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[core] [core]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[extra] [extra]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[community-testing] [community-testing]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[community] [community]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system, # If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repository here. # enable the multilib repositories as required here.
[multilib-testing] [multilib-testing]
#SigLevel = Optional TrustAll SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[multilib] [multilib]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for # An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories. # tips on creating your own repositories.
#[custom] #[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs #Server = file:///home/custompkgs

View File

@@ -37,18 +37,13 @@ Architecture = auto
#CheckSpace #CheckSpace
#VerbosePkgLists #VerbosePkgLists
# PGP signature checking # By default, pacman accepts packages signed by keys that its local keyring
# NOTE: None of this will work without running `pacman-key --init` first. # trusts (see pacman-key and its man page), as well as unsigned packages.
# The compiled in default is equivalent to the following line. This requires
# you to locally sign and trust packager keys using `pacman-key` for them to be
# considered valid.
#SigLevel = Optional TrustedOnly #SigLevel = Optional TrustedOnly
# If you wish to check signatures but avoid local sign and trust issues, use
# the following line. This will treat any key imported into pacman's keyring as # NOTE: You must run `pacman-key --init` before first using pacman; the local
# trusted. # keyring can then be populated with the keys of all official Arch Linux
#SigLevel = Optional TrustAll # packagers with `pacman-key --populate archlinux`.
# Disable signature checks for now
SigLevel = Never
# #
# REPOSITORIES # REPOSITORIES
@@ -74,28 +69,39 @@ SigLevel = Never
# after the header, and they will be used before the default mirrors. # after the header, and they will be used before the default mirrors.
#[testing] #[testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist #Include = /etc/pacman.d/mirrorlist
[core] [core]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[extra] [extra]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
#[community-testing] #[community-testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist #Include = /etc/pacman.d/mirrorlist
[community] [community]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system, # If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repository here. # enable the multilib repositories as required here.
#[multilib-testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist
[multilib] [multilib]
#SigLevel = Optional TrustAll SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for # An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories. # tips on creating your own repositories.
#[custom] #[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs #Server = file:///home/custompkgs

View File

@@ -37,18 +37,13 @@ Architecture = auto
#CheckSpace #CheckSpace
#VerbosePkgLists #VerbosePkgLists
# PGP signature checking # By default, pacman accepts packages signed by keys that its local keyring
# NOTE: None of this will work without running `pacman-key --init` first. # trusts (see pacman-key and its man page), as well as unsigned packages.
# The compiled in default is equivalent to the following line. This requires
# you to locally sign and trust packager keys using `pacman-key` for them to be
# considered valid.
#SigLevel = Optional TrustedOnly #SigLevel = Optional TrustedOnly
# If you wish to check signatures but avoid local sign and trust issues, use
# the following line. This will treat any key imported into pacman's keyring as # NOTE: You must run `pacman-key --init` before first using pacman; the local
# trusted. # keyring can then be populated with the keys of all official Arch Linux
#SigLevel = Optional TrustAll # packagers with `pacman-key --populate archlinux`.
# Disable signature checks for now
SigLevel = Never
# #
# REPOSITORIES # REPOSITORIES
@@ -74,29 +69,36 @@ SigLevel = Never
# after the header, and they will be used before the default mirrors. # after the header, and they will be used before the default mirrors.
[staging] [staging]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[testing] [testing]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[core] [core]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[extra] [extra]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[community-staging] [community-staging]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[community-testing] [community-testing]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
#SigLevel = Optional TrustAll
[community] [community]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for # An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories. # tips on creating your own repositories.
#[custom] #[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs #Server = file:///home/custompkgs

View File

@@ -37,18 +37,13 @@ Architecture = auto
#CheckSpace #CheckSpace
#VerbosePkgLists #VerbosePkgLists
# PGP signature checking # By default, pacman accepts packages signed by keys that its local keyring
# NOTE: None of this will work without running `pacman-key --init` first. # trusts (see pacman-key and its man page), as well as unsigned packages.
# The compiled in default is equivalent to the following line. This requires
# you to locally sign and trust packager keys using `pacman-key` for them to be
# considered valid.
#SigLevel = Optional TrustedOnly #SigLevel = Optional TrustedOnly
# If you wish to check signatures but avoid local sign and trust issues, use
# the following line. This will treat any key imported into pacman's keyring as # NOTE: You must run `pacman-key --init` before first using pacman; the local
# trusted. # keyring can then be populated with the keys of all official Arch Linux
#SigLevel = Optional TrustAll # packagers with `pacman-key --populate archlinux`.
# Disable signature checks for now
SigLevel = Never
# #
# REPOSITORIES # REPOSITORIES
@@ -74,18 +69,23 @@ SigLevel = Never
# after the header, and they will be used before the default mirrors. # after the header, and they will be used before the default mirrors.
[testing] [testing]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[core] [core]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[extra] [extra]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[community-testing] [community-testing]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
[community] [community]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for # An example of a custom package repository. See the pacman manpage for

View File

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

View File

@@ -1,18 +1,6 @@
#compdef archbuild archco archrelease archrm commitpkg finddeps makechrootpkg mkarchroot rebuildpkgs extrapkg=commitpkg corepkg=commitpkg testingpkg=commitpkg stagingpkg=commitpkg communitypkg=commitpkg community-testingpkg=commitpkg community-stagingpkg=commitpkg multilibpkg=commitpkg multilib-testingpkg=commitpkg extra-i686-build=archbuild extra-x86_64-build=archbuild testing-i686-build=archbuild testing-x86_64-build=archbuild staging-i686-build=archbuild staging-x86_64-build=archbuild multilib-build=archbuild multilib-testing-build=archbuild communityco=archco #compdef archbuild archco archrelease archrm commitpkg finddeps makechrootpkg mkarchroot rebuildpkgs extrapkg=commitpkg corepkg=commitpkg testingpkg=commitpkg stagingpkg=commitpkg communitypkg=commitpkg community-testingpkg=commitpkg community-stagingpkg=commitpkg multilibpkg=commitpkg multilib-testingpkg=commitpkg extra-i686-build=archbuild extra-x86_64-build=archbuild testing-i686-build=archbuild testing-x86_64-build=archbuild staging-i686-build=archbuild staging-x86_64-build=archbuild multilib-build=archbuild multilib-testing-build=archbuild multilib-staging-build=archbuild kde-unstable-i686-build=archbuild kde-unstable-x86_64-build=archbuild gnome-unstable-i686-build=archbuild gnome-unstable-x86_64-build=archbuild communityco=archco
_arch=(i686 x86_64 any) m4_include(lib/valid-tags.sh)
_tags=(
core-i686 core-x86_64 core-any
extra-i686 extra-x86_64 extra-any
multilib-i686 multilib-x86_64 multilib-any
staging-i686 staging-x86_64 staging-any
testing-i686 testing-x86_64 testing-any
multilib-testing-i686 multilib-testing-x86_64 multilib-testing-any
community-i686 community-x86_64 community-any
community-staging-i686 community-staging-x86_64 community-staging-any
community-testing-i686 community-testing-x86_64 community-testing-any
)
_archbuild_args=( _archbuild_args=(
'-c[Recreate the chroot before building]' '-c[Recreate the chroot before building]'