1 |
commit: fcf3076aef8396f394de82dd13b7a470753e2e97 |
2 |
Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> |
3 |
AuthorDate: Tue Mar 26 07:53:35 2019 +0000 |
4 |
Commit: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> |
5 |
CommitDate: Tue Mar 26 08:05:23 2019 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=fcf3076a |
7 |
|
8 |
config_kernel(): add sanity check for required options |
9 |
|
10 |
Sometimes, genkernel modifies kernel config (.config), i.e. when |
11 |
parameter like "--lvm", "--hyperv" or "--virtio" are set. |
12 |
|
13 |
However, this can fail (for example if a required dependency is not set). |
14 |
|
15 |
To avoid problems like an unbootable system, we check for required |
16 |
options and error out if they are missing. |
17 |
|
18 |
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org> |
19 |
|
20 |
gen_configkernel.sh | 69 +++++++++++++++++++++++++++++++++++++++-------------- |
21 |
1 file changed, 51 insertions(+), 18 deletions(-) |
22 |
|
23 |
diff --git a/gen_configkernel.sh b/gen_configkernel.sh |
24 |
index 016d5b2..582d71f 100755 |
25 |
--- a/gen_configkernel.sh |
26 |
+++ b/gen_configkernel.sh |
27 |
@@ -124,6 +124,7 @@ config_kernel() { |
28 |
[ "$?" ] || gen_die "Error: ${add_config} failed!" |
29 |
fi |
30 |
|
31 |
+ local -a required_kernel_options |
32 |
[ -f "${TEMP}/.kconfig_modified" ] && rm "${TEMP}/.kconfig_modified" |
33 |
|
34 |
# Force this on if we are using --genzimage |
35 |
@@ -140,10 +141,12 @@ config_kernel() { |
36 |
cfg_CONFIG_EXT4_FS=$(kconfig_get_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_EXT4_FS") |
37 |
if isTrue "${cfg_CONFIG_EXT4_FS}" |
38 |
then |
39 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_EXT4_USE_FOR_EXT2" "y" |
40 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_EXT4_USE_FOR_EXT2" "y" && |
41 |
+ required_kernel_options+=(CONFIG_EXT4_USE_FOR_EXT2) |
42 |
else |
43 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_BLOCK" "y" |
44 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_EXT2_FS" "y" |
45 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_EXT2_FS" "y" && |
46 |
+ required_kernel_options+=(CONFIG_EXT2_FS) |
47 |
fi |
48 |
fi |
49 |
fi |
50 |
@@ -202,10 +205,12 @@ config_kernel() { |
51 |
esac |
52 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_BLOCK" "y" |
53 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_MD" "y" |
54 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_BLK_DEV_DM" "${cfg_CONFIG_BLK_DEV_DM}" |
55 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_BLK_DEV_DM" "${cfg_CONFIG_BLK_DEV_DM}" && |
56 |
+ required_kernel_options+=(CONFIG_BLK_DEV_DM) |
57 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_DM_SNAPSHOT" "${cfg_CONFIG_DM_SNAPSHOT}" |
58 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_DM_MIRROR" "${cfg_CONFIG_DM_MIRROR}" |
59 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_FILE_LOCKING" "y" |
60 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_FILE_LOCKING" "y" && |
61 |
+ required_kernel_options+=(CONFIG_FILE_LOCKING) |
62 |
fi |
63 |
|
64 |
# Make sure multipath modules are enabled in the kernel, if --multipath |
65 |
@@ -224,8 +229,10 @@ config_kernel() { |
66 |
esac |
67 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_BLOCK" "y" |
68 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_MD" "y" |
69 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_BLK_DEV_DM" "${cfg_CONFIG_BLK_DEV_DM}" |
70 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_DM_MULTIPATH" "${cfg_CONFIG_DM_MULTIPATH}" |
71 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_BLK_DEV_DM" "${cfg_CONFIG_BLK_DEV_DM}" && |
72 |
+ required_kernel_options+=(CONFIG_BLK_DEV_DM) |
73 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_DM_MULTIPATH" "${cfg_CONFIG_DM_MULTIPATH}" && |
74 |
+ required_kernel_options+=(CONFIG_DM_MULTIPATH) |
75 |
fi |
76 |
|
77 |
# Make sure dmraid modules are enabled in the kernel, if --dmraid |
78 |
@@ -234,7 +241,8 @@ config_kernel() { |
79 |
print_info 1 "$(getIndent 1)>> Ensure that required kernel options for DMRAID support are set..." |
80 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_BLOCK" "y" |
81 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_MD" "y" |
82 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_BLK_DEV_DM" "${cfg_CONFIG_BLK_DEV_DM}" |
83 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_BLK_DEV_DM" "${cfg_CONFIG_BLK_DEV_DM}" && |
84 |
+ required_kernel_options+=(CONFIG_BLK_DEV_DM) |
85 |
fi |
86 |
|
87 |
# Make sure iSCSI modules are enabled in the kernel, if --iscsi |
88 |
@@ -267,9 +275,12 @@ config_kernel() { |
89 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_SCSI" "${cfg_CONFIG_SCSI}" |
90 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_SCSI_LOWLEVEL" "y" |
91 |
|
92 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_ISCSI_BOOT_SYSFS" "${cfg_CONFIG_ISCSI_BOOT_SYSFS}" |
93 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_ISCSI_TCP" "${cfg_CONFIG_ISCSI_TCP}" |
94 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_SCSI_ISCSI_ATTRS" "${cfg_CONFIG_SCSI_ISCSI_ATTRS}" |
95 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_ISCSI_BOOT_SYSFS" "${cfg_CONFIG_ISCSI_BOOT_SYSFS}" && |
96 |
+ required_kernel_options+=(CONFIG_ISCSI_BOOT_SYSFS) |
97 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_ISCSI_TCP" "${cfg_CONFIG_ISCSI_TCP}" && |
98 |
+ required_kernel_options+=(CONFIG_ISCSI_TCP) |
99 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_SCSI_ISCSI_ATTRS" "${cfg_CONFIG_SCSI_ISCSI_ATTRS}" && |
100 |
+ required_kernel_options+=(CONFIG_SCSI_ISCSI_ATTRS) |
101 |
fi |
102 |
|
103 |
# Make sure Hyper-V modules are enabled in the kernel, if --hyperv |
104 |
@@ -362,11 +373,15 @@ config_kernel() { |
105 |
*) cfg_CONFIG_HYPERV=${newcfg_setting} |
106 |
esac |
107 |
|
108 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_HYPERV" "${cfg_CONFIG_HYPERV}" |
109 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_HYPERV" "${cfg_CONFIG_HYPERV}" && |
110 |
+ required_kernel_options+=(CONFIG_HYPERV) |
111 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_HYPERV_UTILS" "${cfg_CONFIG_HYPERV}" |
112 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_HYPERV_BALLOON" "${cfg_CONFIG_HYPERV}" |
113 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_HYPERV_STORAGE" "${cfg_CONFIG_HYPERV}" |
114 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_HYPERV_NET" "${cfg_CONFIG_HYPERV}" |
115 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_HYPERV_BALLOON" "${cfg_CONFIG_HYPERV}" && |
116 |
+ required_kernel_options+=(CONFIG_HYPERV_BALLOON) |
117 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_HYPERV_STORAGE" "${cfg_CONFIG_HYPERV}" && |
118 |
+ required_kernel_options+=(CONFIG_HYPERV_STORAGE) |
119 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_HYPERV_NET" "${cfg_CONFIG_HYPERV}" && |
120 |
+ required_kernel_options+=(CONFIG_HYPERV_NET) |
121 |
|
122 |
if [ $(($KV_MAJOR * 1000 + ${KV_MINOR})) -ge 4014 ] |
123 |
then |
124 |
@@ -493,11 +508,15 @@ config_kernel() { |
125 |
fi |
126 |
|
127 |
# VirtIO modules, activate in order! |
128 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_VIRTIO" "${newvirtio_setting}" |
129 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_VIRTIO" "${newvirtio_setting}" && |
130 |
+ required_kernel_options+=(CONFIG_VIRTIO) |
131 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_VIRTIO_MENU" "y" |
132 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_SCSI_VIRTIO" "${newvirtio_setting}" |
133 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_VIRTIO_BLK" "${newvirtio_setting}" |
134 |
- kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_VIRTIO_NET" "${newvirtio_setting}" |
135 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_SCSI_VIRTIO" "${newvirtio_setting}" && |
136 |
+ required_kernel_options+=(CONFIG_SCSI_VIRTIO) |
137 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_VIRTIO_BLK" "${newvirtio_setting}" && |
138 |
+ required_kernel_options+=(CONFIG_VIRTIO_BLK) |
139 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_VIRTIO_NET" "${newvirtio_setting}" && |
140 |
+ required_kernel_options+=(CONFIG_VIRTIO_NET) |
141 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_VIRTIO_PCI" "${newvirtio_setting}" |
142 |
|
143 |
if [ $(($KV_MAJOR * 1000 + ${KV_MINOR})) -ge 4011 ] |
144 |
@@ -556,6 +575,8 @@ config_kernel() { |
145 |
esac |
146 |
kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "$k" "${cfg}" |
147 |
done |
148 |
+ |
149 |
+ required_kernel_options+=(CONFIG_MICROCODE) |
150 |
fi |
151 |
|
152 |
if [ -f "${TEMP}/.kconfig_modified" ] |
153 |
@@ -571,4 +592,16 @@ config_kernel() { |
154 |
else |
155 |
print_info 2 "$(getIndent 1)>> genkernel did not need to add/modify any kernel options." |
156 |
fi |
157 |
+ |
158 |
+ print_info 2 "$(getIndent 1)>> checking for required kernel options..." |
159 |
+ for required_kernel_option in "${required_kernel_options[@]}" |
160 |
+ do |
161 |
+ optval=$(kconfig_get_opt "${KERNEL_OUTPUTDIR}/.config" "${required_kernel_option}") |
162 |
+ if [ -z "${optval}" ] |
163 |
+ then |
164 |
+ gen_die "something went wrong: Required kernel option '${required_kernel_option}' which genkernel tried to set is missing!" |
165 |
+ else |
166 |
+ print_info 2 "$(getIndent 2) - '${required_kernel_option}' is set to '${optval}'" |
167 |
+ fi |
168 |
+ done |
169 |
} |