summaryrefslogtreecommitdiff
path: root/src/chroot-tools
AgeCommit message (Collapse)Author
2024-04-03HACKING: Remove the "HACKING_" prefix from filenamesLuke T. Shumaker
2024-03-28update docsbill-auger
2024-03-28update docsbill-auger
2024-02-21fix: libremakepkg: Have startdir be RO unless the -W flag is passed to make ↵Luke T. Shumaker
it RW A key aspect of libremakepkg is that it tries to be strict about many things, in order to catch issues. One issue is that sources are downloaded during build(), meaning that they're missing from the .src.pkg.tar sourceball. So, by default libremakepkg runs build() with networking disabled, to catch this issue. If there is a problematic package, we have an -N flag to enable networking, as an escape hatch; as we only have finite packager time/effort. One issue is when a package can't be rebuilt from the .src.pkg.tar sourceball. If the PKGBUILD modifies itself, then it won't match what's in the sourceball. This is what the libremakepkg.bats:"libremakepkg does not run pkgver" test demonstrates and tests-for; this failing demonstration testcase was added in 044b4e1 (test: libremakepkg: Add some failing tests [ci-skip], 2018-07-31, Luke Shumaker <lukeshu@lukeshu.com>). We solved by mounting the $startdir read-only in 646ac02 (libremakepkg,chcleanup: Be stricter about network access, 2018-08-03, Luke Shumaker <lukeshu@lukeshu.com>). However, it turns out that this caused issues for a few packages. So, this protection was reverted in a6f6ac4 (libremakepkg: fix building packages requring a rw startdir, 2019-05-17, Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>). This is bad, it potentially lets many issues slip through undetected. Instead, handle it like we do networking: Have the protection on by default, say "PLEASE don't turn this off", but recognize the increased cost in time and efforts and so provide the `-W` flag as an escape hatch.
2024-02-20fix: libremakepkg: Fix distcc TCP supportLuke T. Shumaker
When leaving the fakeroot environment, the build fails with something like kill: sending signal to 694 failed: No such process /usr/bin/fakeroot: line 178: 686 User defined signal 1 FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH="$PATHS" LD_PRELOAD="$FAKEROOT_LIB" "$@" What's happening is that: 1. the main makepkg process launches the `distcc-tool ideaemon`, which binds to the TCP ports 2. then, the inferior in-fakeroot makepkg process tries to launch its own `distcc-tool idaemon`, which immediately fails in the background because it can't bind to those TCP ports. 3. Then, when the inferior in-fakeroot makepkg process exits it tries to clean up after itself by `kill`ing the idaemon pid. This fails because that pid died long ago. I'm not entirely sure what broke it--I think either makepkg didn't used to re-load makepkg.conf when entering the fakeroot environment, or Bash `jobs -p` didn't used to list jobs that had terminated but hadn't been `wait`ed for? IDK. Actually, the Bash one seems more likely. Anyway, fix this by only launching the idaemon from the parent makepkg process.
2024-02-20fix: Update copyright statementsLuke T. Shumaker
This documents all the contributions of the last few years, based on the Git history.
2024-02-15libremakepkg: fix building packages requring a rw startdirDenis 'GNUtoo' Carikli
Several packages require a read-write startdir: - Some packages have a pkgver that is computed dynamically through a pkgver function. This is the case for many packages using git repositories. At the end of the package build, the pkgver is automatically updated in the PKGBUILD, however, without that fix that fails with libremakepkg as the PKGBUILD was set read-only. - Some packages like linux-libre are modifying the install= script. This is done by creating a temporary install script in the startdir that is then modified with sed. Once this is done that install script is then dynamically selected. As this also require to have read-write access to the startdir to be read-write it fails to build the package if it's not the case. In both cases it's possible to modify the PKGBUILDs to workaround the issue, however the Arch Linux distribution has a read-write startdir, and modifying each affected packages would significatively increase the cost (in time and efforts) of maintaining Parabola. This was broken by the commit 646ac0258c3295943778142468aadfe5b04ad6d1 ("libremakepkg,chcleanup: Be stricter about network access"). Thanks to elibrokeit on the #parabola IRC channel on Freenode for helping me identifying the cause of read-only mounts in libremakepkg. Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
2019-04-03add volatile bulid support repos to chroot pacman.conf (commented-out)bill-auger
2018-10-15libremakepkg: Add -S flag to use an existing source packageLuke Shumaker
"Ignore space change" might be helpful when viewing this diff.
2018-10-15libremakepkg: Tidy formatting of usage() flagsLuke Shumaker
"What is the alignment of the libremakepkg options section based on?", you may ask. You'll see in the next commit!
2018-10-02libremakepkg: Fix launching `distcc-tool idaemon`Luke Shumaker
- Drop `distcc-tool-idaemon.pid`; we can just check `jobs -p` - _distcc_start_idaemon() and _distcc_stop_idaemon() are thereby simplified to the point where they can just be inlined. - Why did I keep doing `foo & wait`!? - Don't forget to write DISTCC_HOSTS to makepkg.conf - There was a typo in makepkg.conf; it said "_discc_start_idaemon"
2018-10-02libremakepkg: Tidy funny syntaxLuke Shumaker
I don't know what I was thinking when I wrote it that way. For one, the "<&0" bit is a no-op. It redirects stdin to be stdin. Maybe I had meant to write "<&-" and close it? For two, just write it normally. It's simple enough, don't make it look like magic.
2018-10-02distcc-tool: SimplifyLuke Shumaker
- I'm pretty sure the "& trap 'jobs -p | xargs kill' EXIT; wait" bit is 100% superstition. - Sprinkle `exec` in there to use fewer PIDs - Don't bother with variables for short constant values, just hard-code them - Use `sleep infinity` instead of a dumb socat if we need to sleep forever without doing anything.
2018-10-01distcc-tool: Note which Bash version is requiredLuke Shumaker
2018-10-01libremakepkg: Add a commentLuke Shumaker
This really messed me up while debugging, I don't want to fall for that again!
2018-10-01libremakepkg: distcc-tool: Avoid using overly-long socket namesLuke Shumaker
The maximum socket name length is surprising short. So `cd` and use a short relative path.
2018-08-29librechroot make: Try harder to avoid inheriting the host's pacman configLuke Shumaker
- `-A`: Comment out the `Include = /etc/pacman.d/*.conf` line that is present in the /usr/share/pacman/defaults/ files since pacman 5.1.1-1.parabola4 - Pass --hookdir="$copydir/etc/pacman.d/hooks" to mkarchroot's pacman to avoid inheriting the host's hooks. https://bugs.archlinux.org/task/49347 I should maybe add tests for both of those things, but they both rely on the actual contents of /etc/pacman.d/...
2018-08-29libremakepkg: Remove old reference to /chrootprepareLuke Shumaker
That file hasn't been created since 646ac025 (2018-08-04).
2018-08-29Rely on Bash 4.4 empty array behaviorLuke Shumaker
2018-08-26librechroot clean-pkgs: Do the right thing when libretools is installed in ↵Luke Shumaker
the chroot The /bin/chcleanup file that it installs will clash with the package-owned /usr/bin/chcleanup (since /bin is a symlink)
2018-08-15librechroot: Add --noconfirm to install-name, don't expect input.Luke Shumaker
2018-08-15librechroot,libremakepkg: Don't have stdin of nspawn be a TTY if we don't ↵Luke Shumaker
expect input If stdin is a TTY, systemd-nspawn will create a proxy PTY, and pump the data from real stdin through the proxy PTY. Because the PTY acts as a buffer, that means that it eats stdin, EVEN IF THE PROGRAM DOESN'T ACTUALLY READ IT. This is surprising to the user. We can't know if the command to `librechroot run` is going to read from stdin, but for most uses of librechroot we do know. So, set stdin to /dev/null for those cases.
2018-08-15librechroot: Fix typo in a commentLuke Shumaker
2018-08-15librechroot: Remove SYSTEMD-STDIN HACKLuke Shumaker
https://labs.parabola.nu/issues/431
2018-08-07oopsLuke Shumaker
2018-08-07librechroot: Disallow flags overriding other flagsLuke Shumaker
This results in user confusion, like https://labs.parabola.nu/issues/1938
2018-08-06chcleanup: Ignore depends of split packages, just look at pkgbasev20180806Luke Shumaker
2018-08-06chcleanup: Try preloading the scratch DB to speed things up.Luke Shumaker
2018-08-06chcleanup: Only use `pacman -T` filtering on DEPENDSLuke Shumaker
2018-08-06chcleanup: Tidy upLuke Shumaker
- Move a few lines around - Add comments - Don't bother checking [[ -n $TEXTDOMAIN ]]/TEXTDOMAINDIR, they're never set. - Put the pacman db at "$TEMPDIR/db", not "$TEMPDIR". - Create a pacman=() variable for storing all of our scratch flags - Drop the pkglist='' variable; expand it out where used Altogether, there should be no user-visible changes here
2018-08-06chcleanup: More informative output, use pacman -T to speed things upLuke Shumaker
2018-08-06chcleanup: Do the package list creating in tiersLuke Shumaker
This avoids something like a dep on 'systemd-tools' from resolving to 'notsystemd', causing a conflict with 'systemd' in 'base-devel', which had the 'systemd-tools' dep already filled. On the downside, this is much slower.
2018-08-06librechroot help: Clarify the usage of -w and -rLuke Shumaker
2018-08-04libremakepkg,chcleanup: Be stricter about network accessv20180804Luke Shumaker
Objectives: - Once the source package has been created, never run makepkg with networking enabled again, so that we can be 100% sure that the source package has all of the sources that we need. - Don't let makepkg edit the PKGBUILD (eg. by evaluating pkgver()) User-facing changes: - libremakepkg now disables networking during prepare() - libremakepkg no longer runs pkgver() - chcleanup (and thus `librechroot clean-pkgs`) now also installs packages Technical description of changes: - In devtools (and not really in this commit): * No longer split /chrootprepare off of /chrootbuild. The point of splitting it was that we'd have prepare() run from /chrootprepare and the rest later run from /chrootbuild, so that we could leave networking enabled during prepare() but not the rest. Now that we're disabling networking during prepare(), that's pointless. * Have download_sources create a source package (rather than having /chrootbuild create the source package at the same time that we create the binary package). We adjust the caller to temporarily set SRCPKGDEST to a temporary directory, so that we can get the file and control the filename when we move it in to the real SRCPKGDEST. - Have chcleanup install the dependencies. If we used the traditional `makepkg --sync` to install the dependencies, then we'd be breaking the "no networking for makepkg after source package creation" objective. chcleanup already has all of the logic necessary to accomplish this. If there's a discrepancy in chcleanup behavior and makepkg behavior, and makepkg thinks it needs to install something, then that just means we'll have to fix the bug in chcleanup, instead of letting it go for more than a year (*cough* https://labs.parabola.nu/issues/1311 *cough*). - Use files extracted from the source package (rather than files found in the current directory) to build the package. - We mount the temporary directory containing the extracted source package files read-only, to be sure that makepkg doesn't modify the PKGBUILD. This is necessary because --holdver only disables pkgver() if it's a VCS package.
2018-08-03Use Bash 4.4 @Q instead of %qLuke Shumaker
2018-08-03libremakepkg: Expand short flags to unshareLuke Shumaker
2018-08-03chcleanup: Expand short flags to pacmanLuke Shumaker
2018-08-03chcleanup: Consider _$CARCH depsLuke Shumaker
Also, don't parse PKGBUILD ourself; use .SRCINFO to extract information from the PKGBUILD.
2018-06-02librechroot: Properly clean up temporary pacman.conf fileLuke Shumaker
2018-06-02librechroot: Remove the hack for -any packages differing between archesLuke Shumaker
db-import-pkg now makes sure that that doesn't happen.
2018-05-30libremakepkg: Fix it_fails_with_bad_signaturesv20180530Luke Shumaker
libremakepkg defined a cleanup() function, which overrode common.sh:cleanup(), which meant that common.sh:die() exited with a '0' status.
2018-05-30libremakepkg: Fix it_succeeds_with_good_signaturesLuke Shumaker
Do this by syncing makepkg_args with makechrootpkg's default_makepkg_args; recent devtools have makechrootpkg not copy the keyring in to the chroot. This incorporates 3 commits from Arch devtools: 7ca4eb82d (2017-05-02): add --holdver 0cbc179d2 (2017-07-13): use long options; `-s`→`--syncdeps`, `-L`→`--log` 75fdff181 (2017-07-13): add --skipinteg
2018-03-27Makefile: Use files.groups instead of nested.subdirs to split the packageLuke Shumaker
2018-03-24Makefile: Support split libdir / libexecdirLuke Shumaker
I intend to have xbs-abs have separate libdir / libexecdir s.
2018-03-24librechroot: Add Andreas Grapentin to the copyright statement.Luke Shumaker
This should have been in 314f2c9b1daac8c47d78754569a7310d0b77e22b.
2018-03-20make librechroot target arch agnosticAndreas Grapentin
in the light of my attempts to create a riscv64 parabola port, I would like to see the following changes made to librechroot. The patch removes the hard-coded arm cross arch checks in favour of a more general approach, that works for more architectures. As a side effect, this now also would behave correctly when creating x86 chroots on arm, although why anyone would choose to do this is beyond me. Reviewed-By: Luke Shumaker <lukeshu@parabola.nu> [LS: Added quotes]
2018-01-03update for new devtoolsLuke Shumaker
2018-01-03libremakepkg: usage: mention copying in the GnuPG pubringLuke Shumaker
2018-01-03libremakepkg: consistent tense in usage text bulletsLuke Shumaker
2018-01-02Change my email address lukeshu@sbcglobal.net -> lukeshu@parabola.nuLuke Shumaker