summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2019-09-12Version 2019091220190912Levente Polyak1-1/+1
2019-09-12Revert "makechrootpkg: with -n, check if the package failed to install"Eli Schwartz1-8/+1
This reverts commit be44b9cde15f3228839253c0c0d7d56c124c4e26. This was a nice idea in theory, because it means that we can catch conflicting files before releasing them into the repos. In practice, there were unanticipated side effects: single-package installs which conflict against their own makedepends cannot be installed either. Examples include: - kernel modules which makedepend on their dkms equivalent - jack2, which makedepends/optdepends on portaudio, which requires jack... but jack2 is a drop-in provides/conflicts jack. We cannot reliably detect when makepkg --install will error out because of dependency conflicts vs. packages which are simply broken. So, back out this change for now. Revisit this once pacutils has a new release, because it will add the option --resolve-conflicts=all, allowing for much better scripted responses to "foo conflicts with bar, remove bar? [y/N]" than simply "--noconfirm and fail". Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-21Version 2019082120190821Levente Polyak1-1/+1
2019-08-09makechrootpkg: with -n, check if the package failed to installEli Schwartz1-1/+8
We previously whitelisted this return code because split packages can frequently conflict each other, so makepkg -i is *expected* to fail in such a case. However, there is no good reason to let this succeed if the pkgbase only builds one pkgname -- that will always be a severe issue. Add a check for how many split Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09makechrootpkg: make the -U option work for the first time everEli Schwartz1-2/+2
The -U option was initially introduced in commit cda9cf436b2897b063c1e40efb144404aad8b821 in order to enable running makechrootpkg as root, delegating to another, manually selected, user to perform various non-root tasks (given that makepkg was modified to throw fatal errors when run as root without the option of --asroot to disable that). However, it was only ever implemented for the --verifysource option outside of the chroot, and the builduser inside the chroot is created with the same uid as the makechrootpkg invoker. It needs to run as the same uid, because it needs rw access to $startdir and $SRCDEST! Additionally this lets the invoking user more easily inspect the build directory in case of problems... The correct solution for this is to properly implement the initial intention of the -U option, and make it override the autodetection of the "invoking user" which is normally done by inspecting $SUDO_USER. This is then used as the single source of truth for "who am I pretending to be". Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09archrelease: actually fail in failure conditionsEli Schwartz1-7/+8
When svn ls fails due to network timeouts, this currently results in archrelease deleting all files, then committing this as the changeset. This causes data loss... With bash 4.4 and using wait $! we can get return the return code of the last backgrounded command -- which process substitution qualifies as. Key off of this to make sure that `svn ls` actually succeeded. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09archbuild: prefer repo/arch-specific configs if they existEli Schwartz1-4/+13
When mixing and matching different repos and architectures not present in mainline archlinux, it is sometimes desirable to set up differing presets with more granularity than devtools currently allows. One example of this is when building for architectures that are only supported by another project -- in order to coexist on a mainline archlinux host, a different mirrorlist needs to be used. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09makechrootpkg: also downgrade packages when updating chrootsEli Schwartz2-2/+2
Packages should never be getting downgraded... unless a package is pulled from testing, e.g. for example if gcc9 totally breaks the linux kernel. In such cases, the master repo says there is a downgrade, so we'd better go with that. Basically, ensure that packages match the repo they are being built against. Consistency at all costs! Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09makechrootpkg: when installing with -I, ensure package is installedEli Schwartz1-1/+1
noconfirm is wrong here, as we don't want to accept the default answer -- we want to install the new package, even if it conflicts and provides an existing one. After all, we explicitly asked for it. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09arch-nspawn: unshare the gpg namespace to prevent zombie processesEli Schwartz1-1/+1
gpg-agent is really annoying and leaves useless copies of itself around. Using unshare ensures that all such processes are killed as soon as the main gpg process dies. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09finddeps: suppress error messages for unreadable directoriesEli Schwartz1-1/+1
If the find command cannot descend into a directory in order to search for a PKGBUILD, it is likely a "$pkgdir" which makepkg sets as unreadable. As far as finddeps is concerned, this error message is not needed. Also convert to using null-delimited paths on general principle to prevent read from splitting on odd paths. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09makechrootpkg: accept arguments useful to verifysourceEli Schwartz1-3/+5
And pass them on to download_sources outside the chroot. Fixes FS#35652 Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09makechrootpkg: fix breakage in makepkg option parsingEli Schwartz1-2/+1
In commit bd826752c9dc8f01917ee831302b6220ad09603a, support for short options was added to the heuristic for --noextract, but in the process, we changed to loop over the set of user options plus the builtin defaults for inside the chroot. This was wrong, as we only care about the user options -- moreover, it prevents us from adding verifysource support *outside* the chroot, for options that are also chroot options, like --holdver. Also remove uselessly duplicated line. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09ensure that sane umask is used where neededEli Schwartz3-1/+9
If a user umask is restrictive, a chroot may be created as root without the ability for the user to read it, which then causes makepkg --verifysource to fail. Do not set this in lib/common.sh, where it would apply to all scripts, as we do not want to override the user's policy for things like $SRCDEST files, svn checkouts, etc. Fixes FS#47625 Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09Escape paths with ":" that are passed to systemd-nspawn --bindEli Schwartz2-5/+5
When parsing paths to automatically make available to the container, the ":" is used internally by systemd-nspawn to signify destinations in the container. Replace automatically with "\:" for the mounts that we set up, in order to safely handle a working directory etc. that contains this character. For bind options exposed to the user, it is assumed the user takes care of passing systemd-nspawn compatible paths themselves. Fixes FS#60845 Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09arch-nspawn: support bind-mounting custom file:/// repositoriesEli Schwartz1-0/+13
Fixes FS#45882 Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09checkpkg: implement comparison against alternative targetsEli Schwartz1-5/+20
This allows comparing the currently built set of packages against targets named by filename, url, or pkgname. One example use is to compare a package against a different version that was never in the repos; another example use is to compare a *-git package against the non-git version. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09makechrootpkg: check truthiness using shell arithmeticEli Schwartz1-18/+19
Using the literal strings "true" and "false" is inaccurate and may result in uncertainty of whether it is set when doing string comparison, or simply rely on the shell implementation of treating the string as a command builtin, then executing the value as a shell command. Emulate makepkg, which makes heavy use of shell arithmetic for this purpose. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09Revert "makechrootpkg: Have functions be more function-y."Eli Schwartz1-33/+6
This reverts (the bulk of) commit 2fd5931a8c67289a8a4acd327b3ce99a5d64c8c7. Reducing globals makes little sense in in a oneshot bash script, but reduces code clarity and in fact resulted in bugs because even the commit author couldn't keep track of the script state. An exit was changed to a return, even though that made no sense outside of a function, and has been duly returned to being an exit. This was never tested and later papered over by wrapping the entire script in a main() function and then calling the function for hysterical raisins. The functiony nature of sync_chroot/delete_chroot is preserved, as those functions demonstrate meaningfully standalone functionality -- who knows? we may want to reuse this. Everything else is tightly bound to the internal logic of makechrootpkg. Completely separate functionality that was silently implemented in the original commit is also preserved: - declare a couple of variables as locals - move the abort-on-no-PKGBUILD outside the install_packages function Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09Revert "makechrootpkg: Avoid having code floating around outside of a function."Eli Schwartz1-121/+117
This reverts commit 49088b0860276c664933c2b3e36a2fef714b7a07. The fundamental intention was flawed and broken, it caused annoying issues and regressions, and the self-avowed sole purpose of the change was so that a downstream project could *post-modify the script and source it as a library*. That is not okay. You don't wrap non-factorable code in a function called main() and call it a library. The only possible use for this is to treat makechrootpkg *internals* as a library, which is not supported. Downstream projects that wish to use the functionality of makechrootpkg should treat makepkg as a command with a public API in the form of command line options. That is kind of how commands of all kinds work, since forever. That is how all users of makechrootpkg *except for parabola* use it. Arguments that "it saves us the cost of fork+exec to bash" are simply invalid. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09Don't rely on $0 to determine script names.Eli Schwartz3-5/+5
Programs can freely define the value of argv0 and thus it means nothing. Instead, use the bash-specific variable explicitly designed to safely and accurately reference the name of the currently sourced file. This also fixes the case where simple debugging mechanisms like using "bash -x foo" tried to treat "foo" as the unqualified $0 and therefore broke horribly due to lack of pathnames. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09Revert "mkarchroot: Don't let the environment affect pacstrap (sans proxy ↵Eli Schwartz1-5/+0
settings)." This reverts commit 578a62f1e0713b0df9722470146fb85fb819202c. mkarchroot is run as root (via check_root if needed) so the environment should already be clean. If not, the user has broken their root environment, and we cannot support this. It's unclear what environment settings may or may not be messing with anything, ever, but the original bug report happened on Parabola who perform extensive patching to "libretools" such that the code no longer resembles devtools at all. It's therefore likely any such bug is parabola specific, but we will never know since the original commit message states that they don't know why they do it either. Parsing the user's entire exported environment via both sed and grep is overkill for a non-bug, especially when it doesn't work for variables declared -rx and doesn't work for things like: export fooled_you=$'wow such hax\ndeclare -x http_proxy=lol' Also if done properly this would rely on compgen -e to print all exported shell variables. Or even better, loop through /proc/$$/environ which is both null-delimited and easily parsed with the read builtin and [[ ]] Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09arch-nspawn should not take pacman cache from hostBrian Bidulock1-1/+1
Previously, arch-nspawn was using the hosts' pacman cache in the chroot even when the chroot was set up with a different cache by mkarchroot, unless specified with the -c flag. Problem is that makechrootpkg passes no -C, -M nor -c flags to arch-nspawn, so all values must be obtained from the working directory. This change take the cache directories from the pacman.conf specified with the -C option unless the -c option was given (as is the case when the chroot is set up with mkarchroot), and, when neither -C nor -c is given (as is the case when invoked by makechrootpkg), the cache directory is taken from the pacman.conf in the working directory. This wasn't such an issue when i686 was mainline, however, which building packages in a chroot against archlinux32 on an x86_64 platform, the cache of the host should _never_ be used. Rebased by eschwartz on top of cachedir reworking. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09arch-nspawn: don't delete the guest gpg configurationEli Schwartz1-1/+2
It's important to ensure the guest has up to date data because updating a chroot after quite some time can potentially rely on updated archlinux-keyring, something which the host machine either kept up to date on or manually fixed, but it kills automation to mess around with chroot configs like that. Alternatively, signed packages added with -I need to work, and we assume the host is configured to accept these. That is *not* a good reason to completely nuke whatever is in the guest, though. A guest might have been manually configured to accept keys which aren't accepted by the host; one example of this happening in practice, is archlinux32 when building 32-bit packages from an archlinux host. The right solution is to append to, rather thna overwrite, the chrooted guest's pacman keyring. To do this, we will use gpg's native facility to dump the keyring from one GNUPGHOME and import it into another. We'd use pacman-key's --import option directly, but this doesn't support passing custom options like --import-options import-local-sigs Finally use pacman-key's native facility to import the trust status from the host. While we are at it, fix a bug where we didn't respect the host's pacman.conf settings for the GpgDir. While it isn't wildly likely a user will choose to customize this, it is a valid and supported use case and we must think about this ourselves. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09fixup commit "arch-nspawn: get all mirrors from host"Eli Schwartz1-1/+0
In commit d9b73504484da7e185dc590ef13d5f31942f6051, a line was deleted that had a shellcheck ignore marker, but the marker itself was left in (and had nothing to do). So, remove it. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09mkarchroot: don't create a broken chroot by defaultEli Schwartz1-1/+1
It's incorrect to make pacman completely useless inside the chroot by starting off with no pacman keyring. Assuming that the only consumers of a new chroot will be arch-nspawn (which copies over the hostconf) is bad design, and furthermore makes it impossible to fix other issues in arch-nspawn itself. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09makechrootpkg: load makepkg.conf variables correctlyEli Schwartz1-1/+1
Since makepkg.conf is a bash-compatible configuration file, it must be sourced. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09Makefile: don't inject DESTDIR into the pkgdatadirEli Schwartz1-1/+1
In commit 46c4def0733a78ce08702d188e3e1a141fb07316, we added support for nonstandard PREFIX installations, but DESTDIR was and is never supposed to be a part of that. While DESTDIR isn't terribly likely to be used during `make all` invocations, that's no reason to break horribly if it is used for some reason. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-08-09Migrate pacman.conf CacheDir parsing to pacman-confEli Schwartz2-15/+14
And while we're at it, make this more consistent. Currently we unnecessarily support only one -c /path/to/cachedir option. This requires slightly more thorough handling in mkarchroot to ensure all custom cachedirs are passed on to arch-nspawn. Rework to simply forward all arguments to arch-nspawn (minus final arguments used for pacman -Sy packagelist). Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
2019-06-13offload-build: disable shellcheck false-positive for shell-escapeLevente Polyak1-0/+1
2019-06-12doc: add manpage for the new offload-build toolEli Schwartz via arch-projects2-0/+53
Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
2019-06-12Add new tool: offload-buildEli Schwartz via arch-projects2-0/+108
This tool is useful for running makechrootpkg on a remote build server, and is by default hooked up to send a PKGBUILD and initiate a build on our shiny new build server "dragon". Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
2019-06-12Revert "makechrootpkg: sync_chroot: Make more general."Eli Schwartz via arch-projects2-27/+13
This reverts commit 6d1992909cc46e293027ff488ae2632047603e66. It has never worked. In commit c86823a2d4a4152c71faa1c3bab227756232996f it was noted that it compared the device numbers for [[ $1 = $1 ]] which was a useless check and always returned true, for *any* btrfs filesystem. Now that the function is corrected to compare [[ $1 = $2 ]] the check is still useless, but this time because it always returns false -- btrfs subvolumes on the same filesystem do *not* share device numbers. So let's go back to the original working implementation that only matters in terms of makechrootpkg, and just checks if makechrootpkg's root working directory is btrfs (in which case we know it will be a subvolume because mkarchroot will create it that way). This restores our special support for the btrfs filesystem. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
2019-04-20fix whitespace/indentation errorsErich Eckner3-3/+3
Some lines are indented by spaces, while adjacent lines are indentet by tabs. We should use tabs on both. Signed-off-by: Erich Eckner <git@eckner.net>
2019-04-20is_same_fs() in lib/archroot.sh should use $1 and $2, not $1 and $1Erich Eckner1-1/+1
The old behaviour would always evaluate to true - this is certainly not what that function should do. Signed-off-by: Erich Eckner <git@eckner.net>
2019-03-29Version 2019032920190329Levente Polyak1-1/+1
2019-03-29readme: fix faulty whitespace in release commandsLevente Polyak1-1/+1
2019-03-29make: fix faulty install targetsLevente Polyak1-3/+3
This fixes a regression introduced in eeb1c0e59ee8a5f7be4a6742ba6689af54e9ac7d
2019-03-28fix up sogrep manpage to correspond with current sogrep commandEli Schwartz via arch-projects1-2/+8
Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
2019-03-28add sogrep commandEli Schwartz via arch-projects1-25/+76
This is the new and improved, canonical sogrep command, now with a valid license. The previous version of sogrep had several issues and inefficiencies, and ultimately wasn't really the finished project I wanted it to be. Due to a mistake in communication, I was totally unaware it was in the process of being merged at all, nor that there was a licensing issue, or I would have recommended waiting for both further improvements, and a declaration of license intent; nevertheless, here it is now, and I formally give this over into the GPLv2+ domain. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
2019-03-28sogrep: don't be templated when it is not templatedEli Schwartz via arch-projects3-4/+6
Partition the Makefile targets to only clean configured files, and make the configured files be a subset of the bin programs. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
2019-03-25Create a general READMEJelle van der Waa1-0/+24
Introduce a README which describes where to send patches and how to release a new version of devtools. Signed-off-by: Jelle van der Waa <jelle@vdwaa.nl>
2019-03-25makechrootpkg: keep *DEST, MAKEFLAGS & PACKAGERMatt Robinson1-1/+1
If makechrootpkg is called as non-root, the {SRC,SRCPKG,PKG,LOG}DEST, MAKEFLAGS and PACKAGER environment variables are lost in the call to check_root(). Add these to the passed keepenv list so that they are preserved instead.
2019-03-25arch-nspawn: get all mirrors from hostChristian Hesse1-6/+8
Now that pacconf gives us all mirrors we can use them, instead of just the first one. Signed-off-by: Christian Hesse <mail@eworm.de>
2019-03-17sogrep: remove duplicate sogrepJelle van der Waa2-98/+1
The rename of sogrep to sogrep.in failed to remove sogrep and adding it to .gitignore. Signed-off-by: Jelle van der Waa <jelle@archlinux.org>
2019-03-16doc: Add myself as maintainerJelle van der Waa1-0/+1
Signed-off-by: Jelle van der Waa <jelle@vdwaa.nl>
2019-03-16sogrep: rename to sogrep.in so make clean worksJelle van der Waa2-0/+98
make clean removes all .in converted files to a file without .in which in the make clean step is removed. So running make clean will remove sogrep since it's specified as BINPROGS. In the future this steps should be removed for sogrep since it is a standalone script. Signed-off-by: Jelle van der Waa <jelle@vdwaa.nl>
2019-03-16find-libdeps: fix indentation in caseJelle van der Waa1-1/+1
Signed-off-by: Jelle van der Waa <jelle@vdwaa.nl>
2019-03-16doc: add man pages for find-{libdeps,libprovides}Jelle van der Waa3-7/+33
Add a simple man page for find-libdeps and find-libprovides. Signed-off-by: Jelle van der Waa <jelle@vdwaa.nl>
2019-03-13doc: add Environment variables section to sogrepJelle van der Waa1-0/+11
Add a section about environment variables which influence sogrep's behaviour. Signed-off-by: Jelle van der Waa <jelle@vdwaa.nl>