@@ -7,21 +7,35 @@ FNOS_MOUNT_MANAGER_APPLY_LOADED=1
77
88# 检查本机预览文件是否与当前 local 配置一致,防止 apply 直接跳过 generate。
99fm_assert_local_preview_is_fresh () {
10- local preview_path
11- preview_path=" $( fm_local_fstab_path) "
12- [[ -f " ${preview_path} " ]] || fm_die " Local preview is missing. Run generate first."
13-
14- local temp_render
15- temp_render=" $( mktemp) "
16-
17- fm_generate_scope " $( fm_local_config_path) " " ${temp_render} " " disks.local.conf"
18-
19- if ! cmp -s " ${preview_path} " " ${temp_render} " ; then
20- rm -f " ${temp_render} "
10+ local fstab_preview_path
11+ local tmpfiles_preview_path
12+ fstab_preview_path=" $( fm_local_fstab_path) "
13+ tmpfiles_preview_path=" $( fm_local_tmpfiles_path) "
14+ [[ -f " ${fstab_preview_path} " ]] || fm_die " Local preview is missing. Run generate first."
15+ [[ -f " ${tmpfiles_preview_path} " ]] || fm_die " Local tmpfiles preview is missing. Run generate first."
16+
17+ local temp_fstab_render
18+ local temp_tmpfiles_render
19+ temp_fstab_render=" $( mktemp) "
20+ temp_tmpfiles_render=" $( mktemp) "
21+
22+ fm_generate_scope \
23+ " $( fm_local_config_path) " \
24+ " ${temp_fstab_render} " \
25+ " ${temp_tmpfiles_render} " \
26+ " disks.local.conf"
27+
28+ if ! cmp -s " ${fstab_preview_path} " " ${temp_fstab_render} " ; then
29+ rm -f " ${temp_fstab_render} " " ${temp_tmpfiles_render} "
2130 fm_die " Local preview is stale. Run generate before apply."
2231 fi
2332
24- rm -f " ${temp_render} "
33+ if ! cmp -s " ${tmpfiles_preview_path} " " ${temp_tmpfiles_render} " ; then
34+ rm -f " ${temp_fstab_render} " " ${temp_tmpfiles_render} "
35+ fm_die " Local tmpfiles preview is stale. Run generate before apply."
36+ fi
37+
38+ rm -f " ${temp_fstab_render} " " ${temp_tmpfiles_render} "
2539}
2640
2741# 确保所有受管挂载点目录存在,避免 mount 或 automount 首次触发时落到不存在路径。
@@ -35,18 +49,25 @@ fm_prepare_mountpoints() {
3549# 处理 apply 子命令,支持通过 --target 把受控区块写到其他 fstab 文件。
3650fm_cmd_apply () {
3751 local target=" /etc/fstab"
52+ local tmpfiles_target=" /etc/tmpfiles.d/fnos-mount-manager.conf"
53+ local install_tmpfiles=" 0"
3854
3955 while [[ $# -gt 0 ]]; do
4056 case " $1 " in
4157 --target)
4258 target=" $2 "
4359 shift 2
4460 ;;
61+ --tmpfiles-target)
62+ tmpfiles_target=" $2 "
63+ install_tmpfiles=" 1"
64+ shift 2
65+ ;;
4566 --help | -h)
4667 cat << 'EOF '
47- Usage: fnos-mount-manager apply [--target /path/to/fstab]
68+ Usage: fnos-mount-manager apply [--target /path/to/fstab] [--tmpfiles-target /path/to/tmpfiles.conf]
4869
49- Merge the generated managed block into the target fstab file.
70+ Merge the generated managed block into the target fstab file and optionally install tmpfiles rules .
5071EOF
5172 return 0
5273 ;;
7192
7293 if [[ " ${target} " == " /etc/fstab" ]]; then
7394 fm_prepare_mountpoints
95+ install_tmpfiles=" 1"
7496 fi
7597
7698 fm_install_file " ${temp_output} " " ${target} "
7799 rm -f " ${temp_output} "
78100 fm_log " info" " Applied managed block to ${target} "
79101
102+ if [[ " ${install_tmpfiles} " == " 1" ]]; then
103+ fm_install_file " $( fm_local_tmpfiles_path) " " ${tmpfiles_target} "
104+ fm_log " info" " Applied tmpfiles rules to ${tmpfiles_target} "
105+ fi
106+
80107 if [[ " ${target} " == " /etc/fstab" ]] && command -v systemctl > /dev/null 2>&1 ; then
81108 fm_run_privileged systemctl daemon-reload
109+ if command -v systemd-tmpfiles > /dev/null 2>&1 ; then
110+ fm_run_privileged systemd-tmpfiles --create " ${tmpfiles_target} "
111+ fi
82112 fi
83113}
0 commit comments