... | ... |
@@ -9,6 +9,10 @@ each other's toes, when the native configuration language does not support |
9 | 9 |
functionality equivalent to `include config.d/*`. In essence, it is a glorified |
10 | 10 |
`cat config.d/* > config`. |
11 | 11 |
|
12 |
+The generated file is compared against any pre-existing file, if they differ a |
|
13 |
+warning is printed and the pre-existing file is moved to a backup file whose |
|
14 |
+name includes a time stamp. |
|
15 |
+ |
|
12 | 16 |
[`dotd`]: https://git.rcrnstn.net/rcrnstn/dotd |
13 | 17 |
|
14 | 18 |
## Usage |
... | ... |
@@ -41,11 +45,13 @@ options: |
41 | 45 |
|
42 | 46 |
-c, --comment <comment> |
43 | 47 |
If non-empty, adds comments starting with <comment> that the file is |
44 |
- auto-generated and which fragment corresponds to which file. |
|
48 |
+ auto-generated and which fragment corresponds to which file. E.g. |
|
49 |
+ // |
|
45 | 50 |
[default: ] |
46 | 51 |
|
47 | 52 |
-g, --glob <glob> |
48 |
- Shell glob used to find fragment files, relative to <dir>. |
|
53 |
+ Shell glob used to find fragment files, relative to <dir>. E.g |
|
54 |
+ *.h |
|
49 | 55 |
[default: *] |
50 | 56 |
|
51 | 57 |
-v, --validate <validate> |
... | ... |
@@ -57,10 +63,13 @@ options: |
57 | 63 |
|
58 | 64 |
## Dependencies |
59 | 65 |
|
60 |
-All dependencies are [POSIX][] and are highly likely to be installed by default |
|
61 |
-(e.g. they all have the [Debian priority][] `required`). |
|
66 |
+All dependencies are [POSIX][] (except `mktemp`, but most Unix-like systems |
|
67 |
+have some version), and are highly likely to be installed by default (e.g. they |
|
68 |
+all have the [Debian priority][] `required`). |
|
62 | 69 |
|
63 | 70 |
- `sh` (e.g. from [`bash`][] or [`dash`][]) |
71 |
+- `rm`, `mv`, `tail`, `date`, `mktemp` (e.g. from [`coreutils`][]) |
|
72 |
+- `cmp` (e.g. from [`diffutils`][]) |
|
64 | 73 |
- `sed` (e.g. from [`sed`][]) |
65 | 74 |
- `awk` (e.g. from [`mawk`][]) |
66 | 75 |
|
... | ... |
@@ -68,6 +77,8 @@ All dependencies are [POSIX][] and are highly likely to be installed by default |
68 | 77 |
[Debian priority]: https://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities |
69 | 78 |
[`bash`]: https://packages.debian.org/bash |
70 | 79 |
[`dash`]: https://packages.debian.org/dash |
80 |
+[`coreutils`]: https://packages.debian.org/coreutils |
|
81 |
+[`diffutils`]: https://packages.debian.org/diffutils |
|
71 | 82 |
[`sed`]: https://packages.debian.org/sed |
72 | 83 |
[`mawk`]: https://packages.debian.org/mawk |
73 | 84 |
|
... | ... |
@@ -11,6 +11,66 @@ functionality equivalent to `include config.d/*`. In essence, it is a glorified |
11 | 11 |
|
12 | 12 |
[`dotd`]: https://git.rcrnstn.net/rcrnstn/dotd |
13 | 13 |
|
14 |
+## Usage |
|
15 |
+ |
|
16 |
+`dotd --help`: |
|
17 |
+ |
|
18 |
+``` |
|
19 |
+dotd 1.0 |
|
20 |
+ |
|
21 |
+Generate a file from fragment files in a directory. |
|
22 |
+ |
|
23 |
+usage: |
|
24 |
+ dotd [options] [--] <file> [<dir>] |
|
25 |
+ dotd -h|--help |
|
26 |
+ dotd --version |
|
27 |
+ |
|
28 |
+arguments: |
|
29 |
+ <file> |
|
30 |
+ File to generate. Specify - to print to stdout instead. |
|
31 |
+ |
|
32 |
+ <dir> |
|
33 |
+ Directory containing fragment files. <file>.d is used if not |
|
34 |
+ specified. |
|
35 |
+ |
|
36 |
+options: |
|
37 |
+ -a, --action <action> |
|
38 |
+ Action to perform on each fragment file. E.g. |
|
39 |
+ printf "#include \"%s\"\n" |
|
40 |
+ [default: cat] |
|
41 |
+ |
|
42 |
+ -c, --comment <comment> |
|
43 |
+ If non-empty, adds comments starting with <comment> that the file is |
|
44 |
+ auto-generated and which fragment corresponds to which file. |
|
45 |
+ [default: ] |
|
46 |
+ |
|
47 |
+ -g, --glob <glob> |
|
48 |
+ Shell glob used to find fragment files, relative to <dir>. |
|
49 |
+ [default: *] |
|
50 |
+ |
|
51 |
+ -v, --validate <validate> |
|
52 |
+ Command to run on the (temporary) generated file. Only if the command |
|
53 |
+ returns success is the file moved to its final destination. E.g. |
|
54 |
+ /usr/sbin/sshd -t -f |
|
55 |
+ [default: ] |
|
56 |
+``` |
|
57 |
+ |
|
58 |
+## Dependencies |
|
59 |
+ |
|
60 |
+All dependencies are [POSIX][] and are highly likely to be installed by default |
|
61 |
+(e.g. they all have the [Debian priority][] `required`). |
|
62 |
+ |
|
63 |
+- `sh` (e.g. from [`bash`][] or [`dash`][]) |
|
64 |
+- `sed` (e.g. from [`sed`][]) |
|
65 |
+- `awk` (e.g. from [`mawk`][]) |
|
66 |
+ |
|
67 |
+[POSIX]: https://en.wikipedia.org/wiki/POSIX |
|
68 |
+[Debian priority]: https://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities |
|
69 |
+[`bash`]: https://packages.debian.org/bash |
|
70 |
+[`dash`]: https://packages.debian.org/dash |
|
71 |
+[`sed`]: https://packages.debian.org/sed |
|
72 |
+[`mawk`]: https://packages.debian.org/mawk |
|
73 |
+ |
|
14 | 74 |
## Related projects |
15 | 75 |
|
16 | 76 |
- [Ansible][]'s [`assemble` module][]. |
... | ... |
@@ -11,6 +11,16 @@ functionality equivalent to `include config.d/*`. In essence, it is a glorified |
11 | 11 |
|
12 | 12 |
[`dotd`]: https://git.rcrnstn.net/rcrnstn/dotd |
13 | 13 |
|
14 |
+## Related projects |
|
15 |
+ |
|
16 |
+- [Ansible][]'s [`assemble` module][]. |
|
17 |
+- [Puppet][]'s [`concat` module][]. |
|
18 |
+ |
|
19 |
+[Ansible]: https://en.wikipedia.org/wiki/Ansible_(software) |
|
20 |
+[`assemble` module]: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/assemble_module.html |
|
21 |
+[Puppet]: https://en.wikipedia.org/wiki/Puppet_(software) |
|
22 |
+[`concat` module]: https://forge.puppet.com/modules/puppetlabs/concat |
|
23 |
+ |
|
14 | 24 |
## License |
15 | 25 |
|
16 | 26 |
Licensed under the [ISC License][] unless otherwise noted, see the |
... | ... |
@@ -10,3 +10,11 @@ functionality equivalent to `include config.d/*`. In essence, it is a glorified |
10 | 10 |
`cat config.d/* > config`. |
11 | 11 |
|
12 | 12 |
[`dotd`]: https://git.rcrnstn.net/rcrnstn/dotd |
13 |
+ |
|
14 |
+## License |
|
15 |
+ |
|
16 |
+Licensed under the [ISC License][] unless otherwise noted, see the |
|
17 |
+[`LICENSE`][] file. |
|
18 |
+ |
|
19 |
+[ISC License]: https://choosealicense.com/licenses/isc/ |
|
20 |
+[`LICENSE`]: LICENSE |
1 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,12 @@ |
1 |
+# [`dotd`][] |
|
2 |
+ |
|
3 |
+Generate a file from fragment files in a directory. |
|
4 |
+ |
|
5 |
+`dotd` is intended to be used to (re-)generate e.g. a configuration file |
|
6 |
+`config` from files in a corresponding directory `config.d` where separate |
|
7 |
+people or programs can place configuration fragment files without treading on |
|
8 |
+each other's toes, when the native configuration language does not support |
|
9 |
+functionality equivalent to `include config.d/*`. In essence, it is a glorified |
|
10 |
+`cat config.d/* > config`. |
|
11 |
+ |
|
12 |
+[`dotd`]: https://git.rcrnstn.net/rcrnstn/dotd |