Age | Commit message (Collapse) | Author | Files | Lines |
|
This is an ugly patch, and probably does more than I'd like it to. The
idea is that mkinitcpio adopts some sort of consistent style which I'm
actually happy with. I define 3 kinds of variables:
1) local variables: all lower case, and scoped within functions. Use
freely, as they're well contained.
2) global variables: these are known to mkinitcpio internally, but are
global in scope. They mainly carry runtime configuration and collected
data during the image generation process. These are always lower case,
but carry a leading underscore to denote that they're global.
3) "API" variables: also global in scope, but exist "outside" of
mkinitcpio -- either drawn in from the configuration file, or "exported"
to the install hooks. These are always all upper case. When introducing
new variables, extreme care must be taken to pick names that will not
conflict with the environment inherited by mkinitcpio.
A HACKING file is introduced with a similar description of the above,
and more.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
The initramfs installs all modules to kernel/ which devalues the
modules.order file. To avoid any edge cases with the wrong module being
loaded (because all matching modules for a given alias will be added),
make sure that the modules.order file is actually valid.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Overlooked in b8d9c5cd2753e9. This change also assigns a value of "2" to
builtin modules which are added to the the ADDED_MODULES array, to
distinguish them from actual modules on disk. Using this, we can avoid
adding builtins to the image's runtime config.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
This was always wrong and should have been braced by MODPATHS rather
than ADDED_MODULES. However, since ADDED_MODULES now possibly contains
modules that weren't actually added (builtins), creating an initramfs
without modules causes cp to be passed a null string to be copied.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
In case mkinitcpio is in run via chroot(1), this possibly silences a
harmless warning about bsdcpio failing to set the default locale. This
comes up fairly often with the recent install media and users think that
it's something to be concerned about.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Assuming modules.builtin exists, add the module names it contains to the
ADDED_MODULES hash so that we silently skip over them.
Suggested-by: Matthew Monaco <dgbaley27@0x01b.net>
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Lookups in the hash table are far faster than traversing the entire
array, as this grows O(n) and introduces a particularly noticeable
slowdown on larger images.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Rename this option so that it mirrors the longopt name for -S,
--skiphooks. The original --add option remains behind in the option
parser for backwards compatability, but no other references remain.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
This might be useful for creating an initramfs image as part of a kernel
package.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
mkinitcpio needs to be able to more tightly control the layout of the
image. By moving this outside the control of the base hook, it's more
reasonable to believe that a drop-in replacement for the base hook could
be written, as it now only contains the utilities required for the /init
that it provides.
Being that initialize_buildroot is outside of a hook, we can make "raw"
calls to coreutils that create the directories and symlinks, saving some
overhead and forking.
This also symlinks /usr/local/{lib,bin} into the common /usr/lib and
/usr/bin, respectively, so that there's always a way to override libs
and bins, and they're automatically pulled into our strict early init
path of /usr/bin.
Finally, we lump all this generally a little "later" in the early setup.
This addresses an unseen "bug" wherein an extra temp directory that
never gets used is created when leveraging a preset.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
I've adopted the convention of specifying the shebang for the
interpreter any given install or runtime hook that a script runs under.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Technically, we report success when we wrote an image to disk, but this
might not be obvious to users, even with a blaring warning right before
this line. If in the event builderrors is incremented at all, avoid
reporting any sort of "success", since there might be cause for concern.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Generalize the awk program embedded in add_runscript and create a
separate function which can be reused to display the specific hooks that
a script has.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
This allows us to declare sourced variables that we want to shield from
stomping on our config variables, and without needing to use a subshell.
Incidentally, this also fixes FS#29992 in a more permanent way.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Break this out of install/base into a separate function. We need to be
able to read from the RUNHOOKS array to accurately specify which hooks
to execute at runtime.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
This function adds a runtime script to the /hooks directory on the
initramfs image. Note that this function will also install hooks with
executable permissions for use by a later change to early init.
With this commit, there are now methods available which can be used in
place of the MODULES, FILES, BINARIES, and SCRIPT variables, as we now
offer error checking on the add_* functions. Usage of the variables is
deprecated, and these will no longer be read in a future version of
mkinitcpio.
This commit also lays the groundwork for the addition of more early
userspace hooks. Runtime hook files are parsed for specific functions
and variables (not yet used) are populated. These will eventually be
written to the image config so that early userspace knows exactly
what to run.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Avoid any delay in checking this option, as it only serves to fragment
the logic.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Rather than catching errors solely from parse_hook via an ERR trap,
implement a RETURN trap which catches all errors from the core add_*
functions.
In the future, this may mean that support for MODULES/FILES/BINARIES
within hooks goes away, and those variables remain only in the config.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Rename get_kernelver -> resolve_kernelver, and ensure that it only does
what it's name advertises. Introduce find_moduledir to locate the
corresponding module directory in /usr/lib or /lib.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
This option is just a bad idea. Initramfs creation is too important to
get wrong, and running it from outside the root FS has too many gotchas,
the worst of them being:
- where do you pull hooks from?
- how do you resolve binary dependencies within the root?
In general, dealing with the extra luggage of the base directory makes the
codebase more complicated than it needs to be (see all the '_' prefixed
functions which are called from add functions). In favor of simplifying the
code, and making it more maintainable, kill this off and force the sane
option of chroot'ing into an install if the need arises.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
$ mkinitcpio -L
==> Available hooks
/usr/bin/mkinitcpio: line 173: cd: /lib/initcpio/install: No such file or directory
sort and dedupe as well, since we deal with a hierarchy which may (for
some horrible reason) contain duplicates.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Additionally, exit zero after returning.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Updates the doc and bash-completion, as well. Also adds the previously
unmentioned -A option to the --help output.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
This still doesn't solve all our problems, but it gets us closer.
There's no point in creating an image if HOOKS aren't present as this is
the bread and butter of any sane mkinitcpio recipe.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
This should have been done as part of b65cf9cd9.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
This makes us a little more future proof as far as moving files around.
No need for 2 lib/ directories in early userspace anyways.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Avoid pulling insane apps from user added PATH elements.
FS#29162
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Since INSTDIR and HOOKDIR are understood as arrays now, declare them as
such with the local 'hooks' and 'install' first to override the local
FS. This makes the missing udev error go away and allows easier testing
of other out of tree hooks.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
This fixes a strange edge where-in a user creates an image as non-root
and attempts to boot from it. Any setuid binaries (such as mount) will
fail, as the ownership is preserved.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
The only reason this has to be done is because of the Kconfig option
that reuses the ext4 module for ext[23], thereby aliasing ext[23] to
ext4. This is (currently) the only case in the whole kernel where valid
module names magically become aliases.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
This is a really ugly patch, but allows mkinitcpio to read hooks from
multiple locations, namely:
/usr/lib/initcpio/{install,hooks}
/lib/initcpio/{install,hooks}
Preference is given to the first, and all files included with mkinitcpio
are moved there.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
This increases compression efficiency, which might be useful on an image
containing a lot of modules.
For the usecase I had in mind, this reduced the size by about a quarter.
Signed-off-by: Tom Gundersen <teg@jklm.no>
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
depmod doesn't care where modules are, within reason, and separating
modules into the respective hierarchies only serves to irritate users
who go looking for modules in the rootfs (aka me). Forget all this and
dump everything into the kernel/ dir.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Move the unsetting of the errtrace and ERR trap flags to after the
image has been built. This lets us capture errors during module
installation to the build root and the call to depmod. Either of these
steps failing could be hazardous and should prompt a failure.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
All official hooks have been using build() for quite some time now.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Otherwise we need to modprobe module manually.
(Particulary I need this for archiso for using /dev/loop-control)
Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
|
|
When present, modules.order will allow depmod to order the binary module
indicies for faster lookups and more deterministic behavior in resolving
aliases. We can discard this file from the buildroot after depmod is
called.
modules.builtin.bin is added as well (generated from modules.builtin),
to allow modprobe to not fail when a symbol is provided as a builtin.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
Follow suit with lsinitcpio (change 0495018d) and make output colorless
on redirecting/piping stdout.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
This forces bash tests as well as utilities like find to dereference
MODULEDIR in the odd case that it's a symlink.
Addresses FS#27494
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
|
This is mostly a debugging aid. lsinitcpio will be taught to read this.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|