Gentoo Archives: gentoo-commits

From: Thomas Deutschmann <whissi@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/genkernel:master commit in: /
Date: Tue, 26 Mar 2019 08:07:24
Message-Id: 1553587523.fcf3076aef8396f394de82dd13b7a470753e2e97.whissi@gentoo
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 }