1 |
commit: 9394d2189c6691b78665c2f8adcfc56cedaac08e |
2 |
Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sat Dec 14 17:29:32 2019 +0000 |
4 |
Commit: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Dec 14 18:44:38 2019 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=9394d218 |
7 |
|
8 |
gen_initramfs.sh: create_initramfs(): Fix building compressed integrated initramfs |
9 |
|
10 |
Re-compiling kernel failed due to multiple set CONFIG_INITRAMFS_COMPRESSION_* |
11 |
options. |
12 |
|
13 |
In addition it is important to call `make olddefconfig` after changing options |
14 |
to make sure kernel config is still valid and make won't block with user |
15 |
prompt. |
16 |
|
17 |
This commit will also ensure that we honor set COMPRESS_INITRD_TYPE. |
18 |
|
19 |
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org> |
20 |
|
21 |
gen_initramfs.sh | 87 +++++++++++++++++++++++++++++++++++++++----------------- |
22 |
1 file changed, 61 insertions(+), 26 deletions(-) |
23 |
|
24 |
diff --git a/gen_initramfs.sh b/gen_initramfs.sh |
25 |
index 6bc8777..38c77d0 100755 |
26 |
--- a/gen_initramfs.sh |
27 |
+++ b/gen_initramfs.sh |
28 |
@@ -1853,32 +1853,67 @@ create_initramfs() { |
29 |
sed -i '/^.*CONFIG_INITRAMFS_SOURCE=.*$/d' "${KERNEL_OUTPUTDIR}/.config" \ |
30 |
|| gen_die "failed to delete CONFIG_INITRAMFS_SOURCE from '${KERNEL_OUTPUTDIR}/.config'" |
31 |
|
32 |
- local compress_config='INITRAMFS_COMPRESSION_NONE' |
33 |
- case ${compress_ext} in |
34 |
- gz) compress_config='INITRAMFS_COMPRESSION_GZIP' ;; |
35 |
- bz2) compress_config='INITRAMFS_COMPRESSION_BZIP2' ;; |
36 |
- lzma) compress_config='INITRAMFS_COMPRESSION_LZMA' ;; |
37 |
- xz) compress_config='INITRAMFS_COMPRESSION_XZ' ;; |
38 |
- lzo) compress_config='INITRAMFS_COMPRESSION_LZO' ;; |
39 |
- lz4) compress_config='INITRAMFS_COMPRESSION_LZ4' ;; |
40 |
- *) compress_config='INITRAMFS_COMPRESSION_NONE' ;; |
41 |
- esac |
42 |
- |
43 |
- # All N default except XZ, so there it gets used if the kernel does |
44 |
- # compression on it's own. |
45 |
- cat >>${KERNEL_OUTPUTDIR}/.config <<-EOF |
46 |
- CONFIG_INITRAMFS_SOURCE="${CPIO_ARCHIVE}.cpio${compress_ext}" |
47 |
- CONFIG_INITRAMFS_ROOT_UID=0 |
48 |
- CONFIG_INITRAMFS_ROOT_GID=0 |
49 |
- CONFIG_INITRAMFS_COMPRESSION_NONE=n |
50 |
- CONFIG_INITRAMFS_COMPRESSION_GZIP=n |
51 |
- CONFIG_INITRAMFS_COMPRESSION_BZIP2=n |
52 |
- CONFIG_INITRAMFS_COMPRESSION_LZMA=n |
53 |
- CONFIG_INITRAMFS_COMPRESSION_XZ=y |
54 |
- CONFIG_INITRAMFS_COMPRESSION_LZO=n |
55 |
- CONFIG_INITRAMFS_COMPRESSION_LZ4=n |
56 |
- CONFIG_${compress_config}=y |
57 |
- EOF |
58 |
+ local compress_config=NONE |
59 |
+ local -a KNOWN_INITRAMFS_COMPRESSION_TYPES=() |
60 |
+ KNOWN_INITRAMFS_COMPRESSION_TYPES+=( NONE ) |
61 |
+ KNOWN_INITRAMFS_COMPRESSION_TYPES+=( GZIP ) |
62 |
+ KNOWN_INITRAMFS_COMPRESSION_TYPES+=( BZIP2 ) |
63 |
+ KNOWN_INITRAMFS_COMPRESSION_TYPES+=( LZMA ) |
64 |
+ KNOWN_INITRAMFS_COMPRESSION_TYPES+=( XZ ) |
65 |
+ KNOWN_INITRAMFS_COMPRESSION_TYPES+=( LZO ) |
66 |
+ KNOWN_INITRAMFS_COMPRESSION_TYPES+=( LZ4 ) |
67 |
+ |
68 |
+ if isTrue "${COMPRESS_INITRD}" |
69 |
+ then |
70 |
+ case ${COMPRESS_INITRD_TYPE} in |
71 |
+ gz) |
72 |
+ compress_config='GZIP' |
73 |
+ ;; |
74 |
+ bz2) |
75 |
+ compress_config='BZIP2' |
76 |
+ ;; |
77 |
+ lzma) |
78 |
+ compress_config='LZMA' |
79 |
+ ;; |
80 |
+ xz|best|fastest) |
81 |
+ compress_config='XZ' |
82 |
+ ;; |
83 |
+ lzop) |
84 |
+ compress_config='LZO' |
85 |
+ ;; |
86 |
+ lz4) |
87 |
+ compress_config='LZ4' |
88 |
+ ;; |
89 |
+ esac |
90 |
+ fi |
91 |
+ |
92 |
+ print_info 1 "$(get_indent 1)>> --integrated-initramfs is set; Setting CONFIG_INITRAMFS_* options ..." |
93 |
+ |
94 |
+ [ -f "${KCONFIG_MODIFIED_MARKER}" ] && rm "${KCONFIG_MODIFIED_MARKER}" |
95 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_INITRAMFS_SOURCE" "${CPIO_ARCHIVE}.cpio" |
96 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_INITRAMFS_ROOT_UID" "0" |
97 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_INITRAMFS_ROOT_GID" "0" |
98 |
+ |
99 |
+ local KNOWN_INITRAMFS_COMPRESSION_TYPE |
100 |
+ local KOPTION_VALUE |
101 |
+ for KNOWN_INITRAMFS_COMPRESSION_TYPE in "${KNOWN_INITRAMFS_COMPRESSION_TYPES[@]}" |
102 |
+ do |
103 |
+ KOPTION_VALUE=n |
104 |
+ if [[ "${KNOWN_INITRAMFS_COMPRESSION_TYPE}" == "${compress_config}" ]] |
105 |
+ then |
106 |
+ KOPTION_VALUE=y |
107 |
+ fi |
108 |
+ |
109 |
+ kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "CONFIG_INITRAMFS_COMPRESSION_${KNOWN_INITRAMFS_COMPRESSION_TYPE}" "${KOPTION_VALUE}" |
110 |
+ done |
111 |
+ |
112 |
+ if [ -f "${KCONFIG_MODIFIED_MARKER}" ] |
113 |
+ then |
114 |
+ print_info 1 "$(get_indent 1)>> Running 'make olddefconfig' due to changed kernel options ..." |
115 |
+ pushd "${KERNEL_DIR}" &>/dev/null || gen_die "Failed to chdir to '${KERNEL_DIR}'!" |
116 |
+ compile_generic olddefconfig kernel 2>/dev/null |
117 |
+ popd &>/dev/null || gen_die "Failed to chdir!" |
118 |
+ fi |
119 |
else |
120 |
if isTrue "${COMPRESS_INITRD}" |
121 |
then |