osi-tools/Documentation/disk-formats.md

61 lines
2.2 KiB
Markdown

# Adding "disk" formats to osi-mk
<!--
Copyright (C) 2024 Umorpha Systems
SPDX-License-Identifier: AGPL-3.0-or-later
-->
Create a file `lib/mk/format-*.sh`, and `source` that file from
`bin/osi-mk`.
In that file:
- required: set `formats+=('YOURFORMAT')`
- required: set `format_options['YOURFORMAT']=` to a
whitespace-separated list of the `--conf=format.XXX=` flags that
your format takes.
- optional: define `format_checkconf:YOURFORMAT() { … }` to insert
your own validation for `--conf=` flags.
- optional: define `format_genfstab:YOURFORMAT() { … }` to override
the usual `genfstab` command.
- required: set `format_is_block['YOURFORMAT']=` to `true` or
`false`, indicating whether osi-mk should pre-allocate a file for
you (pointed at by `$arg_file`).
* if `format_is_block['YOURFORMAT']='true'`, then
+ required: define `format_mkfs:YOURFORMAT() { … }` which runs
the appropriate `mkfs` on `$arg_file`.
+ required: define `format_editfs:YOURFORMAT() { … }` which
applies any `--conf=format.XXX=` flags. If `format.size` is
set, then you don't need to resize the file itself, osi-mk does
that before/after calling `format_editfs:YOURFORMAT`, but you
do need to run `resize2fs` or `btrfs filesystem resize` or
whatever.
* if `format_is_block['YOURFORMAT']='false'`, then
+ required: set `format_wants_tmpfs['YOURFORMAT']` to `true` or
`false`, indicating whether `$mount_dev` should be set to a
tmpfs (instead of `$arg_file`) and whether `$mount_opt` should
be set to `bind`.
+ required: define `format_before:YOURFORMAT() { … }` that does
any nescessary setup on `$mount_dev`/`$mount_opt` before
mounting it to do the install.
+ required: define `format_after:YOURFORMAT() { … }` that does
any nescessary transforms to get from `$mount_dev` to
`$arg_file`.
- required: set `format_after_clamps_mtime['YOURFORMAT']=` to
`true` or `false` indicating whether your
`format_after:YOURFORMAT` function clamps mtimes to
`SOURCE_DATE_EPOCH` (`true`), or whether osi-mk should adjust
all the mtimes before calling `format_after:YOURFORMAT`