| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Also, change builder.py to always obey the --max-jobs setting, unless
a morphology has a max-jobs field.
The defaults have been chosen so that they work for everyone equally
well. It may be useful to have a local mirror and then set the options
to point there, but it's not reasonable to try to guess such things,
so the defaults can be adapated to that.
Collect the defaults into one place so they're easier to overview.
The cliapp interface for adding settings is verbose enough that the
defaults were getting buried.
|
| |
|
|
|
|
|
| |
This avoids problems with files with the right names but partial
content, if morph is killed in the middle of writing the file.
|
|
|
|
|
|
|
|
|
|
|
|
| |
This makes it easier to check the output with vgrep for errors or
problems. Voluminous git output made that hard.
The key is that "git bundle create" has no --quiet optio (meh),
so we have to redirect stderr to /dev/null. However, that would
hide real errors, which we want to catch. Luckily, we can just
replace the call to subprocess.call with a call to
subprocess.check_call, and then we'll at least abort if there's
an error, instead of silently ignoring it.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Either all .gits need to be left alone, including submodules, or
all of them get changed.
Doing all gets surprisingly complicated, as bottom-up traversal is
needed for directories to have their mtimes set, which means that
either we check the path for a .git component, or we do our own
traversal function, to top-down exclude .git and bottom-up set
mtimes.
This is more effort than it is worth when git probably doesn't care
so let's just drop it entirely.
|
| |
|
|
|
|
|
|
|
|
| |
Setting mtimes can fail if it is a symbolic link and it
points to a non-existant file.
This has happened when we had symbolic links pointing to files
in a submodule, so we set mtimes after submodules have been
checked out.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
This is done to keep the git repository intact with history and all
that. cp + checkout turns out to be faster than a regular "git clone".
In order to avoid roundtrips to the internet whenever a chunk tries to
do something with submodules, we force the submodule URLs to point to
our locally cached repos.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Putting the commands in a file made it more difficult to tell
what happened in scripts, until the self.msg was added.
After then it made the commands more difficult to reproduce
So if it can safely be done in a single command it should be more
readable.
This approach uses sh -c to cd then evaluate the remaining options
The command is 'cd "$1" && shift && eval "$@"', then passes the command
as arguments to the shell script, so the program does not need to do any
escaping of strings.
If the commands were a list of strings instead of a quoted string then
it would be a bit safer, but less flexible for use.
|
| |
|
| |
|
| |
|
|\ |
|
| | |
|
| |
| |
| |
| | |
Now it should actually work.
|
|/
|
|
|
|
| |
This adds options --staging-filler and --staging-chroot.
The wisdom of these options needs to be re-considered at
some point, but for now they're OK.
|
|
|
|
|
| |
This time, with testing. For a five line method, this was surprisingly
tricky to get right. Should sleep properly at night...
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This allows us to do this:
"build-system": "autotools",
"configure-commands": [
"./configure --prefix=$PREFIX --disable-nls --enable-foo"
]
The explicit command is used for configure, but the commands provided
by the autotools build-system will be used for build-commands,
test-commands, and install-commands.
|
|
|
|
| |
This reverts commit 63cab3e0e2f550a0bfe470d018063a8b91a759bd.
|
|
|
|
| |
This reverts commit e0fb97f08156af97ec2341ec8061fe514ae358e5.
|
|
|
|
| |
This only includes PKG_CONFIG_PATH and LD_LIBRARY_PATH at the moment.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This change requires the latest version of cliapp to be installed.
Rather than creating an archive from the cached git repositories,
moving this tarball archive into the cache and then extracting it from
there into the build directory, we now directly extract the sources into
the build directory.
We also recursively extract all submodules into the corresponding paths
inside the build directory. (Recursing has not been tested yet,
however.)
|
|
|
|
|
| |
This change is necessary because upstream git no longer allows --remote
to be combined with an arbitrary SHA1.
|
|
|
|
|
| |
This may not be the optimal way of doing it but it is a start towards
making debugging failed builds a little easier.
|
|
|
|
|
|
|
|
|
|
|
|
| |
This requires build-single to take a dependency context tuple when
building chunks of a stratum. This context tuple is the surrounding
stratum which is used to construct the dependency graph in the worker
and then do a breadth-first search to collect all dependencies that need
to be added to the staging area.
Implementing this required a few hash/eq changes in Blob, Morphology
and Treeish as well as a few adjustments in the corresponding unit
tests.
|
|
|
|
|
| |
...while at the same time making sure that all dependencies are marked
for staging prior to building the blob itself.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This affects pretty much every part of morph, so this might not be fully
working and stable yet.
This commit also introduces the "update-gits" command that can be used
to update all cached repositories from the list of base URLs. The tree
walk when resolving the Treeish objects in Builder.get_cache_id() is a
bit similar to what we do in BuildDependencyGraph, maybe we can merge
that one day.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
The "show-dependencies" command takes a series of build tuples and dumps
the resulting dependency graph (including strata and chunks at the
moment) to the standard output. It also dumps the resulting build order
which is a list of groups. These groups indicate which chunks and strata
can be built in parallel and are not dependent on each other.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This simplifies its use. Previously:
w.start('foo')
...
w.stop('foo')
Now:
with w('foo'):
...
With "with", it is immediately clear from the code,
and its indentation, what is being measured. With
the old code, you have to hunt for the start and stop
method calls.
|
| |
|
|
|
|
|
|
|
|
| |
Previously, we required the caller to add /usr/sbin (or
other possible locations for ldconfig) to PATH before
invoking morph. This was inconvenient, so now morph
adds the FHS-compliant possible locations itself,
to save the caller a bit of pain.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Instead, assume the whole build will be run, by the user, under
fakeroot or sudo (the latter for system image builds). This allows
us to run all non-system-image-build tests without root access
at all.
We now always create the cache directory, if missing, even if
we're running as root.
We no longer run ldconfig if ld.so.conf is missing. It is missing
during our tests, but is (now) created by fhs-dirs for real builds.
|
|
|
|
|
|
|
| |
Actually, run it whenever it _may_ be necessary. It's fast
enough that it's worth running even when not strictly necessary,
such as when unpacking a chunk that does not contain shared
libraries.
|
| |
|
| |
|
|\ |
|
| |
| |
| |
| | |
Alter extlinux.conf so that /sbin/init is used instead of /bin/sh
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Some commands can remain as fakeroot if they share the same fakeroot
This can be done with the -i and -s parameters to fakeroot
Now the Execute objects contain a reference to the file that stores
their state, so fake commands' fake state is recognised by later commands
The creating a system image definitely needs to be sudo though.
Morph needs to create some files as part of the process, so unfortunately
the equivalent to 'echo foo | sudo tee bar >/dev/null' is being used.
They could be created with sufficient permissions, written then have
better permissions set, but it seemed neater this way
A better solution may be to have a subprogram that does the system image
creation
Putting files into the staging area for building other chunks is currently
sudo, but shouldn't have to be. Rather than having a fakeroot per Execute
object, it may be better to have a global one, though this would prevent
concurrent use of fakeroot.
|
| |
| |
| |
| |
| |
| |
| |
| | |
Then fix all the places where this broke things because they didn't have
the required permissions.
This is a potential security risk of course, it would be preferable if
the install commands were run in a fakeroot session and only the final
image building was run as root, but it needs to work first
|