summaryrefslogtreecommitdiffstats
path: root/functions
AgeCommit message (Collapse)AuthorFilesLines
2012-05-18functions: introduce add_runscriptDave Reisner1-4/+44
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>
2012-05-16functions: introduce add_checked_modules and add_all_modulesDave Reisner1-2/+50
Instead of returning a list of modules which the caller should then add themselves or stuff into the MODULES string, call add_module for each candidate. This is basically a different wrapper around all_modules. DEPRECATION WARNING: This commit marks checked_modules as deprecated. Although it is not slated to go away, direct usage of all_modules is strongly discouraged. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2012-05-16functions: move --try logic into add_moduleDave Reisner1-13/+16
Allow add_module to detect trailing ? characters for ignoring errors rather than passing -t or --try to add_module. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2012-05-16functions: remove get_dirname and get_basenameDave Reisner1-13/+1
A lot has changed since 643e98eeb42677 when these functions were implemented, and there is exactly 1 case of get_dirname left, and no calls to get_basename. Remove these, and use a PE in place of the remaining call. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2012-05-16refactor error tracking in build hooksDave Reisner1-2/+7
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>
2012-05-12remove unnecessary quoting/bracingDave Reisner1-4/+4
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2012-05-12functions: merge _add_symlink into add_symlinkDave Reisner1-19/+11
This frontend/backend split is no longer necessary without the notion of a basedir. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2012-05-12functions: merge _add_file into add_fileDave Reisner1-28/+16
This frontend/backend split is no longer necessary without the notion of a basedir. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2012-05-12function: merge _add_dir into add_dirDave Reisner1-17/+9
This frontend/backend split is no longer necessary without the notion of a basedir. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2012-05-12mkinitcpio: remove --basedir optionDave Reisner1-34/+14
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>
2012-05-03functions: firmware is now in /usr/libMatthew Monaco1-2/+2
2012-04-22functions: align error output with GNU getopt_longDave Reisner1-8/+7
Display the name of the program. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2012-04-22functions: add missing local for iteratorDave Reisner1-0/+2
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2012-04-20functions: add parseopts for longopt funDave Reisner1-0/+138
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2012-03-04add support for HOOKDIR/INSTDIR as arraysDave Reisner1-2/+16
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>
2012-01-28function: avoid applying --try to all modulesDave Reisner1-3/+3
An error in logic here would cause the --try flag to be passed to all modules after the first, if a hook added modules ending with a '?'. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2012-01-05function: suppress errors from modprobeDave Reisner1-1/+1
kmod is a bit noisier about unresolvable aliases, but we don't really care for the purposes of creating the module whitelist. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-12-26functions: display proper name on file not foundDave Reisner1-1/+1
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-12-15functions: don't fail on add_binary adding a non-binaryDave Reisner1-1/+1
The function did its job, it just isn't going to add any deps. This makes add_binary effectively a slightly more costly version of add_file. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-11-29functions: don't allow add_binary to re-add depsDave Reisner1-1/+1
Since we now silently overwrite instead of silently failing on existing files and symlinks, we have a lot of sodeps which are overwritten by various binaries -- udevd and udevadm being one example. Nip this in add_binary by doing our own check and preventing addition of pre-existing files in the $BUILDROOT. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-11-29functions: add verbose output for overwriting filesDave Reisner1-3/+14
This goes in hand with an earlier commit which changed behavior to silenltly overwrite files rather than silently fail. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-11-29add_{file,symlink}: overwrite existing fileTom Gundersen1-3/+1
Now we fail silently if the file exists, which means there is no easy way to overwrite binaries. I think it makes the most sense to do the following: 1) add all the busybox stuff as a basic system; 2) overwrite some of the links with any binaries we add to base hook; 3) allow users to write their own hooks to overwrite even more stuff. This can now be done by this hook. v2: make sure we are able to overwrite a symlink pointing to a directory Signed-off-by: Tom Gundersen <teg@jklm.no>
2011-10-30add_symlink: fix argument ordering and add_dir callTom Gundersen1-2/+2
Two bugs: operands were swapped in call to _add_symlink, and missing operand in call to _add_dir. Signed-off-by: Tom Gundersen <teg@jklm.no>
2011-10-01functions: fix output order in _add_symlinkDave Reisner1-1/+1
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-09-27ensure local scoping of variablesDave Reisner1-3/+9
Also make sure that simple variables are declared as null strings. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-09-27functions: specify the delimiter to xargsDave Reisner1-1/+2
Without specifying this, xargs will split arguments on whitespace as well as newlines, and will interpret quoting and backslashes. When the delimiter is specified, every character is taken literally and only the given delimiter in honored. This sidesteps issues with broken modalias files as evidenced by a MacBookAir3,1 or the bbs thread below: https://bbs.archlinux.org/viewtopic.php?pid=971853 Also fixes FS#25450. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-09-27functions: perform path lookup for binaries if neededDave Reisner1-1/+25
We used to do this, but it was lost somewhere along the way in fixing up basedir support. Add in a 'pathlookup' function which can do a search within any given basedir. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-09-27functions: refactor get_{base,dir}nameDave Reisner1-7/+8
Make sure these are completely safe for user input. Use the same three step process in both cases: 1) Strip any trailing slash 2) Trim the string according to base/dir request 3) Print the result, defaulting to / if step 2 yielded an empty string Signed-off-by: Dave Reisner <d@falconindy.com>
2011-09-27functions: allow ignoring errors on module additionDave Reisner1-4/+16
We conditionally, but naively, add modules in some of our install hooks, but the kernel may not have these. Note that these modules can fail silently by detecting a '?' suffix on the module name. In conjunction with this, the add_module function now takes a flag, -t or --try, which will ignore module not found errors from modinfo. The config file will also support this syntax. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-07-09functions: restore verbose feedback to add_moduleDave Reisner1-0/+1
Since we no longer call _add_file from add_module, we lose our 'adding file..' feedback on -v. Explicitly mention each module alongside addition of the path/name to the associated arrays. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-07-04functions: do not null delimit modalias dataDave Reisner1-2/+2
These files will never be more than one line, and they're newline delimited already. Moreover, adding the extra null delimiters appears to do strange things in transit to modprobe. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-07-04unify error messaging, both in grammar and outputDave Reisner1-4/+4
This also removes a superfluous check on MODULEDIR, which is already covered by get_kernver. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-07-02functions: remove cruft from in_arrayDave Reisner1-3/+2
the for loop is already a NOOP when the haystack is empty, so it already falls through to the return 1. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-07-02install modules all at onceDave Reisner1-1/+2
build an array of paths to modules, and install them all at once with mkdir -p and cp --parents. Cuts back on our major source of calls to install(1). This is a tad ugly in that it creates some amount of data duplication, keeping an array of paths in addition to module names. However, turns out to be a worthwhile tradeoff as merging the two datasets into one results in the need for massive string trimming.
2011-07-02functions: reorg, no code changesDave Reisner1-83/+83
Mostly, this groups "private" functions together, separate from public functions. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-07-02always exit from cleanupDave Reisner1-2/+1
There's no use case for us calling cleanup without exiting afterwards, so we can simplify all of our cleanup;exit; calls into just cleanup. This means our sighandler is no longer needed (it wasn't really, to begin with), but we split it up to make sure we exit with a posix-ish 128+signum exit value. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-07-01functions: call _add_file directly from add_moduleDave Reisner1-1/+1
This avoids an expensive stat call and some other unnecessary path juggling. Signed-off-by: Dave Reisner <dreisner@archlinux.org> Signed-off-by: Dan McGee <dan@archlinux.org>
2011-07-01function: fix whitespace errorsDave Reisner1-21/+21
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-07-01avoid touching the linker directlyDave Reisner1-7/+3
Much to my chagrin, we're going back to using ldd directly, as it's otherwise too difficult to account for odd setups, such as idiots wanting to create multilib initramfs images, or more commonly -- a 64 bit kernel on a 32 bit userland. Fortunately, we don't suffer too large a regression in speed compared to the previous implementation. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-07-01functions: reduce calls to modinfoDave Reisner1-27/+24
Cut back to a single call to modinfo, instead of 3, which yields roughly a 30% decrease in execution time for a single run of add_module. This of course varies by module but it's an overall win. Suggested-by: Dan McGee <dan@archlinux.org> Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-06-30function: return with 0 if we reach the end of add_binaryDave Reisner1-0/+2
The read loop will intentionally return 1 on EOF, but parse_hook will interpret this as an error, and trip our error handler, reporting a false positive failure.
2011-06-27functions: fix pathing issue with $BASEDIRDave Reisner1-3/+3
Thanks-to: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar> Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-06-27functions: s/basedir/BASEDIR/Dave Reisner1-2/+2
Thanks-to: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar> Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-06-27functions: add missing 'command' before installDave Reisner1-1/+1
Without this, we hit an infinte loop and crash when a legacy 'install' function in a hook is encountered. Thanks-to: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar> Signed-off-by: Dave Reisner <dreisner@archlinux.org>
2011-06-26functions: support $BASEDIR in modprobeDave Reisner1-1/+1
Signed-off-by: Dave Reisner <d@falconindy.com>
2011-06-25properly support $BASEDIRDave Reisner1-50/+89
This add proper support for a $BASEDIR, wherein as much as possible is taken from the user specified root, instead of mixing and matching binaries and modules. This avoids conflicts, particularly with binaries like udev or module-init-tools which may have newer functionality that the root in the $BASEDIR requires. This is somewhat of a large patch, which involves a few key changes: 1) Add a new class of "private" functions: _add_*, which act as a "back end" for the equivalent non-underscore-prefixed functions. 2) Refactor the add_* family of functions to use these new back end functions. This generally simplifies the logic as we have a clear division of labor. 3) Instead of using ldd, which is a glorified wrapper around the RTLD, create a wrapper around the RTLD and invoke it ourselves. This is basically just a small performance improvement -- the bulk of the parsing done by this function's output is done in pure bash. Signed-off-by: Dave Reisner <d@falconindy.com>
2011-06-25mkinitcpio: catch errors in parse_hookDave Reisner1-1/+1
It would be better to catch errors in build as well, but this isn't entirely feasible due to the expectation of some builtins to return non-zero during normal operations (e.g., read returns 1 on EOF). Addresses FS#20661 Signed-off-by: Dave Reisner <d@falconindy.com>
2011-06-25functions: remove get_module_nameDave Reisner1-8/+0
This is no longer used, as all of our module discovery functions will return clean module names. Signed-off-by: Dave Reisner <d@falconindy.com>
2011-06-19add -t option to specify alternate build directoryDave Reisner1-5/+5
This requires some refactoring of how we handle TMPDIR declaration and creation, as well as protecting the way we do cleanup so that we don't error out when cleanup is called prior to TMPDIR being declared. We also add a shortcut to the build root based on the TMPDIR for convenience. Signed-off-by: Dave Reisner <d@falconindy.com>
2011-06-19mkinitcpio: bashification, part 1/2Dave Reisner1-3/+3
Always use bash's [[ ]], and apply (( )) where arithmetic calculations are made. We also take a few other bash shortcuts to simplify code where possible. We also touch the Makefile here to adjust the sed'ing for directory names. Signed-off-by: Dave Reisner <d@falconindy.com>