summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2017-07-14Makefile: Add a simple 'check' target that runs shellcheckLuke Shumaker
2017-07-14makechrootpkg: Add a comment warning about a bug in "sudo -i"Luke Shumaker
The bug isn't currently triggered, but I accidentally did trigger when I was trying to modify the command a bit. I figure a "caution" sign would be helpful to any future developers.
2017-07-14Makefile: m4_changequote([[[, ]]]) to avoid accidental quoting.Luke Shumaker
The default m4 quote characters: `QUOTE' are troublesome, because ` is fairly likely to pop up in a shell script (if not for a subshell, because it is a useful character in comments and user-facing messages). So, this changes it to [[[QUOTE]]], as it is unlikely to see three braces together like that, let alone in unbalanced sets.
2017-07-14Makefile: add .DELETE_ON_ERROR:Luke Shumaker
The absence of it was allowing an (m4-produced) syntax error in in a change I had made to be masked.
2017-07-14makechroot: download_sources: Accept makepkg_owner as an argumentLuke Shumaker
What this is really doing is fixing a conflict that I had incorrectly resolved when rebasing what became 2fd5931 onto cda9cf4. Of course, because of dynamic scoping, everything worked out, and everything worked as intended. Before cda9cf4, it was appropriate for download_sources to take src_owner as an argument, but after cda9cf4, it is now appropriate to take makepkg_user as an argument. However, it still takes src_owner as an argument, but pays 0 attention to it; instead looking at makepkg_user which it happily inherited because of dynamic scoping. So change it to take makepkg_user as the argument.
2017-07-14lib/archroot.sh: subvolume_delete_recursive: support arbitrary recursionLuke Shumaker
The `-xdev` flag to `find` makes it not recurse over subvolumes; so it only supports recursion with depth=1. Fix this by having the function recursively call itself.
2017-07-14makechrootpkg: sync_chroot: Make more general.Luke Shumaker
This is inspired by the thought that went in to the delete_chroot is_subvolume commit. sync_chroot($chrootdir, $copydir) copies `$chrootdir/root` to `$copydir`. That seems a little silly; why do we care about "$chrootdir"? Have it just be sync_chroot(source, destination) like every other sync/copy command. Where this becomes tricky is check to decide if we are going to use btrfs subvolumes or not. We don't care if "$source/.." is on btrfs; the root could be a directly-mounted subvolume, but and the destination could be another subvolume of the same btrfs mounted somewhere else. The things we do care about are: - The source is a btrfs subvolume (so that we can snapshot it) - The source is on the same filesystem as the directory that the copy will be created in. - If the destination exists: * that it is not a mountpoint (so that we can delete and recreate it) * that it is a btrfs subvolume (so that we can quickly delete it) On the last point, it isn't necessary for creating the new snapshot, just for quick deletion. That can be a separate check, where we use regular `rm` for deleting the existing copy, but use subvolume snapshots for creating the new one.
2017-07-14makechrootpkg: sync_chroot: make usage easier to understand.Luke Shumaker
Also, shorten the "Synchronizing" message to only include the full path to the copy if it was specified. The capslocked variable names in the Usage comment were references to things in Parabola's tools, that didn't make much sense here out of context.
2017-07-14makechrootpkg: delete_chroot: Fix the is-btrfs-subvolume check.Luke Shumaker
First of all, it ran `is_btrfs "$chrootdir"` to decide if it was on btrfs, but $chrootdir wasn't defined locally; it just happens to work because $chrootdir was defined in main(). (I noticed this because in Parabola, it is called differently, so $chrootdir was empty). So I was tempted to just change it to `is_btrfs "$copydir"`, but if $copydir is just a regular directory on a btrfs filesystem, then it It would leave much of $copydir intact. What we really care about is if $copydir is a btrfs subvolume; which we can check by combining the is_btrfs check with inspecting the inum of the directory. I put this combined check in lib/archroot.sh:is_subvolume. https://lists.archlinux.org/pipermail/arch-projects/2013-September/003901.html
2017-07-14Sync makepkg.conf files with pacman 5.0.2-2Bartłomiej Piotrowski
2017-07-07move with-build-support build to separate symlink and config filev20170707archlinux32/v20170707Erich Eckner
2017-07-06archbuild: delete "root" even if it is a mountpointErich Eckner
2017-07-04add repo build-support for i686v20170704archlinux32/v20170704Erich Eckner
2017-06-29archbuild: cross-mount cache directory, so inside it is ↵v20170629archlinux32/v20170629Erich Eckner
/var/cache/pacman/pkg and outside /var/cache/archbuild32
2017-06-27archbuild: use correct pacman config file for x86_64Erich Eckner
2017-06-27makechrootpkg: put "keyserver-options auto-key-retrieve" into gpg.conf, so ↵v20170627archlinux32/v20170627Erich Eckner
"git verify-tag" downloads missing key(s)
2017-06-27archbuild.in: clean up previous commitErich Eckner
2017-06-27archbuild.in: delete old chroot more forcefullyErich Eckner
2017-06-22remove i486 to not confuse endusers (wasn't functional)v20170622archlinux32/v20170622Erich Eckner
2017-06-22separate mirrorlist for i686 and x86_64Erich Eckner
2017-06-16bugfixes concerning $CARCH, Architecture= and --cachev20170616archlinux32/v20170616Erich Eckner
2017-06-16archbuild.in: set pacman cache dir to /var/cache/archbuild32 in case of ↵Erich Eckner
non-x86_64-build, so we do not use any-packages from x86_64 mirrors
2017-06-16archbuild.in: fix indentationErich Eckner
2017-05-29arch-nspawn: also parse our mirror layout ↵Erich Eckner
(http[s]://mirror.url/path/$arch/$repo)
2017-05-18force correct architecture in pacmanErich Eckner
2017-05-14archbuild: add --arch=$CARCH to pacman optionsv20170514archlinux32/v20170514Erich Eckner
2017-05-13enable i486, add mirror.archlinux32.org as pacman mirror for i*86v20170513archlinux32/v20170513Erich Eckner
2017-04-17makechrootpkg: Avoid having code floating around outside of a function.Luke Shumaker
This means wrapping variable initialization in init_variables(), and the main program routine in main(). I did NOT put `shopt -s nullglob` in to a function. It make make sense to move init_variables() down into the main() function, instead of having it as a separate function up top (if this done, then the `-g` flag passed to `declare` in init_variables() can be dropped). However, in interest of keeping the `diff -w` small, and merges/rebases simpler, this isn't done here.
2017-04-09makechrootpkg: Delete chroot subvols recursively when using -TJan Alexander Steffens (heftig)
I overlooked this one. Fixes FS#53513.
2017-04-05makechrootpkg: Unindent as suggested in 2fd5931Jan Alexander Steffens (heftig)
2017-04-05mkarchroot: Don't let the environment affect pacstrap (sans proxy settings).Luke Shumaker
A previous iteration of this change (libretools commit d7dcce53396d) simply inserted `env -i` to clear the environment. However, that lead to it ignoring proxy settings, which some users had problems with: https://labs.parabola.nu/issues/487: > To fix other bugs, the pacstrap environment is blank, which also > means that the proxy settings are blank. So (in libretools commit d17d1d82349f), I changed it to use `declare -x` to inspect the environment, and create a version of it only consisting of variables ending with "_proxy" (case-insensitive). I honestly don't remember what "other bugs" prompted me to clear the environment in the first place.
2017-04-05makechrootpkg: Improve status messages.Luke Shumaker
In sync_chroot(), this makes the messages be a bit more precise with exactly which thing they are syncing where. This is based on my users expressing confusion at what is going on (especially when something is taking a long time, and they have to blame something for blocking). With these changes, I haven't gotten such confusion in a long time (but maybe my users just got used to it). In delete_chroot(), this changes "temporary copy" to "chroot copy", since in Parabola's version of the tools, the function can get called from other places, and it isn't necessarily operating on a temporary copy.
2017-04-05mkarchroot, arch-nspawn: Add an `-s` flag to inhibit `setarch`.Luke Shumaker
This allows us to run an ARM chroot on an x86 box; as the binfmt runner will set the architecture for us, and the x86 `/usr/bin/setarch` program won't know about the ARM architecture string.
2017-04-05mkarchroot, arch-nspawn: Add an `-f` flag to add files to copy.Luke Shumaker
This allows us to copy in files like `qemu-arm-static`, which is necessary for running an ARM chroot on an x86 box.
2017-04-05makechrootpkg: Adjust to have the functions work with `set -u`.Luke Shumaker
Even though main() doesn't call `set -u`; this way the functions will continue to work if copied into an environment with `set -u`, or so that we are ready if we ever want to start using `set -u`.
2017-04-05makechrootpkg: Have functions be more function-y.Luke Shumaker
Rather than them simply being named blocks of code with braces around them. That is: have them take things via arguments rather than global variables. Specific notes: - create_chroot->sync_chroot: I pulled out locking the destination chroot; getting that lock is now the caller's responsibility. It still handles locking the source chroot though. I pulled the `if [[ ! -d $copydir ]] || $clean_first;` check out; it is now the caller's responsibility to use that check when deciding if to call sync_chroot. However, when pulling that check out, I left it as `if true;`, to keep an indentation level. This patch has had to be rebased/merged many times, and changing the indentation is a sure way to make that go less smoothly; I'm not going to re-indent this block until I see the check removed in the git.archlinux.org/devtools.git repository. - install_packages: 1. Receive the list of packages as arguments, rather than a global variable. 2. Make the caller responsible for looking at PKGBUILD. From the name and arguments, one would never expect it to look at PKGBUILD.
2017-04-05Handle makepkg.conf more consistentlylukeshu@parabola.nu
2017-04-05lib/common.sh: Make it safe to include multiple times.Luke Shumaker
This is similar to common C #ifdef guards. I was tempted to wrap the entire thing in the if/fi, rather than use 'return' to bail early. However, that means it won't execute anything until after it reaches 'fi'. And if `shopt -s extglob` isn't executed before parsing, then it will syntax-error on the extended globs. One solution would have been to move `shopt -s extglob` up above the include-guard. But the committed solution is all-around simpler.
2017-04-05lib/common.sh: Adjust to work properly with `set -u`.Luke Shumaker
2017-04-05makechrootpkg: install_pkg was an unused variableLuke Shumaker
2017-04-05makechrootpkg: Quote directory passed to `rm -rf`.Luke Shumaker
2017-04-05makechrootpkg: /chrootbuild: accept makepkg_args as arguments rather than ↵Luke Shumaker
embedding.
2017-04-05makechrootpkg: usage(): Display the actual default makepkg flags.Luke Shumaker
It was displaing the value of the `makepkg_args` variable, which may have already been changed by the argument parsing by the time it gets to `-h`. Now there is a separate `default_makepkg_args` variable.
2017-04-05Avoid using string interpolation; use printf format strings instead.Luke Shumaker
This involves extending the signature of lib/common.sh's `stat_busy()`, `lock()`, and `slock()`. The `mesg=$1; shift` in stat_busy even suggests that this is what was originally intended from it.
2017-04-05Add a "License:" tag to all code files.Luke Shumaker
In cases where there is no license specified, the file is tagged as "License: Unspecified". Obviously, that is not ideal, but it highlights the fact, and I hope that it encourages whoever has the authority to specify the license to do so. On that note, to anyone who may have the authority to specify the license of files in devtools: the current licence of many files is GPLv2 with no option for later versions; I impore you to re-license them to have the "or any later version" option.
2017-04-05commitpkg: Adjust fancy quoting/escaping to not confuse Emacs.Luke Shumaker
It was confusing Emacs and screwing up the syntax highlighting and auto-indentation for the rest of the file.
2017-04-05Add '#!/hint/bash' headers to non-executable bash files.Luke Shumaker
This provides a cross-editor hint that the syntax of the file is Bash.
2017-04-05lib/common.sh: Make setup_workdir()/cleanup() safe for programs to not useLuke Shumaker
2017-04-05lib/common.sh: lock, slock: Create directories for locks if necessary.Luke Shumaker
2017-04-05lib/common.sh: lock, slock: Allow locks to be inherited.Luke Shumaker
Allow for locks to be inherited. Inheriting the lock is something that mkarchroot could do previously, but has since lost the ability to do. This allows for the programs to be more compos-able. Do this by instead of unconditionally opening $file on $fd, first check if $file is already open on $fd; and go ahead use it if it is. The naive way of doing this would be to `$(readlink /dev/fd/$fd)` and compare that to `$file`. However, if `$file` is itself a symlink; or there is a symlink somewhere in the path to `$file`, then this could easily fail. Instead, check `[[ "/dev/fd/$fd" -ef "$file" ]]`. Even though the Bash documentation (`help test`) says that `-ef` checks for if the two files are hard links to eachother, because it uses stat(3) (which resolves symlinks) to do this check, it also works with the /dev/fd/ soft links.