File: module-setup.sh.in

package info (click to toggle)
zfs-linux 2.3.2-2~bpo12%2B1
  • links: PTS, VCS
  • area: contrib
  • in suites: bookworm-backports
  • size: 71,500 kB
  • sloc: ansic: 392,648; sh: 67,208; asm: 47,693; python: 8,160; makefile: 5,100; perl: 839; sed: 41
file content (132 lines) | stat: -rwxr-xr-x 4,571 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/usr/bin/env bash
# shellcheck disable=SC2154

check() {
	# We depend on udev-rules being loaded
	[[ "${1}" = "-d" ]] && return 0

	# Verify the zfs tool chain
	for tool in "zgenhostid" "zpool" "zfs" "mount.zfs"; do
		command -v "${tool}" >/dev/null || return 1
	done
}

depends() {
	echo udev-rules
}

installkernel() {
	instmods -c zfs
}

install() {
	inst_rules 90-zfs.rules 69-vdev.rules 60-zvol.rules

	inst_multiple \
		zgenhostid \
		zfs \
		zpool \
		mount.zfs \
		hostid \
		grep \
		awk \
		tr \
		cut \
		head ||
		{ dfatal "Failed to install essential binaries"; exit 1; }

	# Adapted from https://github.com/zbm-dev/zfsbootmenu
	if ! ldd "$(command -v zpool)" | grep -qF 'libgcc_s.so' && ldconfig -p 2> /dev/null | grep -qF 'libc.so.6' ; then
		# On systems with gcc-config (Gentoo, Funtoo, etc.), use it to find libgcc_s
		if command -v gcc-config >/dev/null; then
			inst_simple "/usr/lib/gcc/$(s=$(gcc-config -c); echo "${s%-*}/${s##*-}")/libgcc_s.so.1" ||
				{ dfatal "Unable to install libgcc_s.so"; exit 1; }
			# Otherwise, use dracut's library installation function to find the right one
		elif ! inst_libdir_file "libgcc_s.so*"; then
			# If all else fails, just try looking for some gcc arch directory
			inst_simple /usr/lib/gcc/*/*/libgcc_s.so* ||
				{ dfatal "Unable to install libgcc_s.so"; exit 1; }
		fi
	fi

	inst_hook cmdline 95 "${moddir}/parse-zfs.sh"
	if [[ -n "${systemdutildir}" ]]; then
		inst_script "${moddir}/zfs-generator.sh" "${systemdutildir}/system-generators/dracut-zfs-generator"
	fi
	inst_hook pre-mount 90 "${moddir}/zfs-load-key.sh"
	inst_hook mount 98 "${moddir}/mount-zfs.sh"
	inst_hook cleanup 99 "${moddir}/zfs-needshutdown.sh"
	inst_hook shutdown 20 "${moddir}/export-zfs.sh"

	inst_script "${moddir}/zfs-lib.sh" "/lib/dracut-zfs-lib.sh"

	# -H ensures they are marked host-only
	# -o ensures there is no error upon absence of these files
	inst_multiple -o -H \
		"@sysconfdir@/zfs/zpool.cache" \
		"@sysconfdir@/zfs/vdev_id.conf"

	# Synchronize initramfs and system hostid
	if ! inst_simple -H @sysconfdir@/hostid; then
		if HOSTID="$(hostid 2>/dev/null)" && [[ "${HOSTID}" != "00000000" ]]; then
			zgenhostid -o "${initdir}@sysconfdir@/hostid" "${HOSTID}"
			mark_hostonly @sysconfdir@/hostid
		fi
	fi

	if dracut_module_included "systemd"; then
		inst_simple "${systemdsystemunitdir}/zfs-import.target"
		systemctl -q --root "${initdir}" add-wants initrd.target zfs-import.target

		inst_simple "${moddir}/zfs-env-bootfs.service" "${systemdsystemunitdir}/zfs-env-bootfs.service"
		systemctl -q --root "${initdir}" add-wants zfs-import.target zfs-env-bootfs.service

		inst_simple "${moddir}/zfs-nonroot-necessities.service" "${systemdsystemunitdir}/zfs-nonroot-necessities.service"
		systemctl -q --root "${initdir}" add-requires initrd-root-fs.target zfs-nonroot-necessities.service

		# Add user-provided unit overrides:
		# - /etc/systemd/system/${_service}
		# - /etc/systemd/system/${_service}.d/overrides.conf
		# -H ensures they are marked host-only
		# -o ensures there is no error upon absence of these files
		inst_multiple -o -H \
			"${systemdsystemconfdir}/zfs-import.target" \
			"${systemdsystemconfdir}/zfs-import.target.d/"*.conf

		for _service in \
			"zfs-import-scan.service" \
			"zfs-import-cache.service" \
            "zfs-load-module.service"; do
			inst_simple "${systemdsystemunitdir}/${_service}"
			systemctl -q --root "${initdir}" add-wants zfs-import.target "${_service}"

			# Add user-provided unit overrides:
			# - /etc/systemd/system/${_service}
			# - /etc/systemd/system/${_service}.d/overrides.conf
			# -H ensures they are marked host-only
			# -o ensures there is no error upon absence of these files
			inst_multiple -o -H \
				"${systemdsystemconfdir}/${_service}" \
				"${systemdsystemconfdir}/${_service}.d/"*.conf

		done

		for _service in \
			"zfs-snapshot-bootfs.service" \
			"zfs-rollback-bootfs.service"; do
			inst_simple "${moddir}/${_service}" "${systemdsystemunitdir}/${_service}"
			systemctl -q --root "${initdir}" add-wants initrd.target "${_service}"

			# Add user-provided unit overrides:
			# - /etc/systemd/system/${_service}
			# - /etc/systemd/system/${_service}.d/overrides.conf
			# -H ensures they are marked host-only
			# -o ensures there is no error upon absence of these files
			inst_multiple -o -H \
				"${systemdsystemconfdir}/${_service}" \
				"${systemdsystemconfdir}/${_service}.d/"*.conf
		done

		inst_simple "${moddir}/import-opts-generator.sh" "${systemdutildir}/system-environment-generators/zfs-import-opts.sh"
	fi
}