Browse code

dynamic initramfs

Change-Id: I79e7a9c862f1a3f1ad839cf67df6fe9dde66ab1e
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/2626
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Alexey Makhalov <amakhalov@vmware.com>

Bo Gan authored on 2017/05/04 18:30:42
Showing 12 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,42 @@
0
+diff --git a/dracut-init.sh b/dracut-init.sh
1
+index 43128e1..d1182f4 100644
2
+--- a/dracut-init.sh
3
+@@ -19,11 +19,7 @@
4
+ #
5
+ export LC_MESSAGES=C
6
+ 
7
+-if [[ "$EUID" = "0" ]]; then
8
+-    export DRACUT_CP="cp --reflink=auto --sparse=auto --preserve=mode,timestamps,xattr,links -dfr"
9
+-else
10
+     export DRACUT_CP="cp --reflink=auto --sparse=auto --preserve=mode,timestamps,links -dfr"
11
+-fi
12
+ 
13
+ # is_func <command>
14
+ # Check whether $1 is a function.
15
+diff --git a/install/dracut-install.c b/install/dracut-install.c
16
+index 32faee6..d7fe26c 100644
17
+--- a/install/dracut-install.c
18
+@@ -300,10 +300,6 @@ static int cp(const char *src, const char *dst)
19
+  normal_copy:
20
+         pid = fork();
21
+         if (pid == 0) {
22
+-                if (geteuid() == 0)
23
+-                        execlp("cp", "cp", "--reflink=auto", "--sparse=auto", "--preserve=mode,xattr,timestamps", "-fL", src, dst,
24
+-                               NULL);
25
+-                else
26
+                         execlp("cp", "cp", "--reflink=auto", "--sparse=auto", "--preserve=mode,timestamps", "-fL", src, dst,
27
+                                NULL);
28
+                 _exit(EXIT_FAILURE);
29
+@@ -312,10 +308,6 @@ static int cp(const char *src, const char *dst)
30
+         while (waitpid(pid, &ret, 0) < 0) {
31
+                 if (errno != EINTR) {
32
+                         ret = -1;
33
+-                        if (geteuid() == 0)
34
+-                                log_error("Failed: cp --reflink=auto --sparse=auto --preserve=mode,xattr,timestamps -fL %s %s", src,
35
+-                                          dst);
36
+-                        else
37
+                                 log_error("Failed: cp --reflink=auto --sparse=auto --preserve=mode,timestamps -fL %s %s", src,
38
+                                           dst);
39
+                         break;
... ...
@@ -5,7 +5,7 @@
5 5
 
6 6
 Name:		dracut
7 7
 Version:	045
8
-Release:	1%{?dist}
8
+Release:	2%{?dist}
9 9
 Group:		System Environment/Base
10 10
 # The entire source code is GPLv2+
11 11
 # except install/* which is LGPLv2+
... ...
@@ -18,6 +18,8 @@ Source0:	http://www.kernel.org/pub/linux/utils/boot/dracut/dracut-%{version}.tar
18 18
 Source1:        https://sourceforge.net/projects/asciidoc/files/asciidoc/8.6.9/asciidoc-8.6.9.tar.gz
19 19
 %define sha1 asciidoc=82e574dd061640561fa0560644bc74df71fb7305
20 20
 Patch0:		https://www.gnu.org/licenses/lgpl-2.1.txt
21
+Patch1:		disable-xattr.patch
22
+Patch2:		fix-initrd-naming-for-photon.patch
21 23
 Summary:	dracut to create initramfs
22 24
 Vendor:		VMware, Inc.
23 25
 Distribution:	Photon
... ...
@@ -48,6 +50,8 @@ This package contains tools to assemble the local initrd and host configuration.
48 48
 %setup -q -n %{name}-%{version}
49 49
 cp %{PATCH0} .
50 50
 tar xf %{SOURCE1} --no-same-owner
51
+%patch1 -p1
52
+%patch2 -p1
51 53
 
52 54
 %build
53 55
 %configure --systemdsystemunitdir=%{_unitdir} --bashcompletiondir=$(pkg-config --variable=completionsdir bash-completion) \
... ...
@@ -115,7 +119,7 @@ rm -rf -- $RPM_BUILD_ROOT
115 115
 %dir %{dracutlibdir}
116 116
 %dir %{dracutlibdir}/modules.d
117 117
 %{dracutlibdir}/modules.d/*
118
-/usr/lib/kernel/install.d/*
118
+%exclude %{_libdir}/kernel
119 119
 /usr/lib/dracut/dracut-init.sh
120 120
 /usr/share/pkgconfig/dracut.pc
121 121
 %{dracutlibdir}/dracut-functions.sh
... ...
@@ -157,6 +161,8 @@ rm -rf -- $RPM_BUILD_ROOT
157 157
 %dir /var/lib/dracut/overlay
158 158
 
159 159
 %changelog
160
+*	Thu Apr 27 2017 Bo Gan <ganb@vmware.com> 045-2
161
+-	Disable xattr for cp
160 162
 *	Wed Apr 12 2017 Chang Lee <changlee@vmware.com> 045-1
161 163
 -	Updated to 045
162 164
 *	Wed Jan 25 2017 Harish Udaiya Kumar <hudaiyakumr@vmware.com> 044-6
163 165
new file mode 100644
... ...
@@ -0,0 +1,153 @@
0
+diff --git a/lsinitrd.sh b/lsinitrd.sh
1
+index b19a66a..7bb1188 100755
2
+--- a/lsinitrd.sh
3
+@@ -92,15 +92,7 @@ if [[ $1 ]]; then
4
+         exit 1
5
+     fi
6
+ else
7
+-    [[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
8
+-
9
+-    if [[ -d /boot/loader/entries || -L /boot/loader/entries ]] \
10
+-        && [[ $MACHINE_ID ]] \
11
+-        && [[ -d /boot/${MACHINE_ID} || -L /boot/${MACHINE_ID} ]] ; then
12
+-        image="/boot/${MACHINE_ID}/${KERNEL_VERSION}/initrd"
13
+-    else
14
+-        image="/boot/initramfs-${KERNEL_VERSION}.img"
15
+-    fi
16
++    image="/boot/initrd.img-${KERNEL_VERSION}"
17
+ fi
18
+ 
19
+ shift
20
+diff --git a/mkinitrd-dracut.sh b/mkinitrd-dracut.sh
21
+index da34e34..638280a 100755
22
+--- a/mkinitrd-dracut.sh
23
+@@ -1,5 +1,5 @@
24
+ #!/bin/bash --norc
25
+-kver=$(uname -r)
26
++kernel_ver_dir='/var/lib/initramfs/kernel'
27
+ 
28
+ boot_dir="/boot"
29
+ quiet=0
30
+@@ -48,63 +48,16 @@ read_arg() {
31
+     fi
32
+ }
33
+ 
34
+-# Taken over from SUSE mkinitrd
35
++# For photon
36
+ default_kernel_images() {
37
+-    local regex kernel_image kernel_version version_version initrd_image
38
+-    local qf='%{NAME}-%{VERSION}-%{RELEASE}\n'
39
+-
40
+-    case "$(uname -m)" in
41
+-        s390|s390x)
42
+-            regex='image'
43
+-            ;;
44
+-        ppc|ppc64)
45
+-            regex='vmlinux'
46
+-            ;;
47
+-        i386|x86_64)
48
+-            regex='vmlinuz'
49
+-            ;;
50
+-        arm*)
51
+-            regex='[uz]Image'
52
+-            ;;
53
+-        aarch64)
54
+-            regex='Image'
55
+-            ;;
56
+-        *)  regex='vmlinu.'
57
+-            ;;
58
+-    esac
59
++    local kernel_version
60
+ 
61
+-    # user mode linux
62
+-    if grep -q UML /proc/cpuinfo; then
63
+-            regex='linux'
64
+-    fi
65
++    for kernel_version in $(ls $kernel_ver_dir) ; do
66
++
67
++        # Take this directory as the source of truth
68
++        kernels="$kernels $kernel_version"
69
++        targets="$targets $boot_dir/initrd.img-$kernel_version"
70
+ 
71
+-    kernel_images=""
72
+-    initrd_images=""
73
+-    for kernel_image in $(ls $boot_dir \
74
+-            | sed -ne "\|^$regex\(-[0-9.]\+-[0-9]\+-[a-z0-9]\+$\)\?|p" \
75
+-            | grep -v kdump$ ) ; do
76
+-
77
+-        # Note that we cannot check the RPM database here -- this
78
+-        # script is itself called from within the binary kernel
79
+-        # packages, and rpm does not allow recursive calls.
80
+-
81
+-        [ -L "$boot_dir/$kernel_image" ] && continue
82
+-        [ "${kernel_image%%.gz}" != "$kernel_image" ] && continue
83
+-        kernel_version=$(/usr/bin/get_kernel_version \
84
+-                         $boot_dir/$kernel_image 2> /dev/null)
85
+-        initrd_image=$(echo $kernel_image | sed -e "s|${regex}|initrd|")
86
+-        if [ "$kernel_image" != "$initrd_image" -a \
87
+-             -n "$kernel_version" -a \
88
+-             -d "/lib/modules/$kernel_version" ]; then
89
+-                kernel_images="$kernel_images $boot_dir/$kernel_image"
90
+-                initrd_images="$initrd_images $boot_dir/$initrd_image"
91
+-        fi
92
+-    done
93
+-    for kernel_image in $kernel_images;do
94
+-	kernels="$kernels ${kernel_image#*-}"
95
+-    done
96
+-    for initrd_image in $initrd_images;do
97
+-	targets="$targets $initrd_image"
98
+     done
99
+     host_only=1
100
+     force=1
101
+@@ -187,7 +140,7 @@ while (($# > 0)); do
102
+ done
103
+ 
104
+ [[ $targets && $kernels ]] || default_kernel_images
105
+-[[ $targets && $kernels ]] || (error "No kernel found in $boot_dir" && usage)
106
++[[ $targets && $kernels ]] || (error "No Kernel Registered")
107
+ 
108
+ # We can have several targets/kernels, transform the list to an array
109
+ targets=( $targets )
110
+@@ -196,7 +149,6 @@ targets=( $targets )
111
+ [[ $host_only == 1 ]] && dracut_args="${dracut_args} -H"
112
+ [[ $force == 1 ]]     && dracut_args="${dracut_args} -f"
113
+ 
114
+-echo "Creating: target|kernel|dracut args|basicmodules "
115
+ for ((i=0 ; $i<${#targets[@]} ; i++)); do
116
+ 
117
+     if [[ $img_vers ]];then
118
+@@ -206,21 +158,27 @@ for ((i=0 ; $i<${#targets[@]} ; i++)); do
119
+     fi
120
+     kernel="${kernels[$i]}"
121
+ 
122
++    if [[ -s "$kernel_ver_dir/$kernel" ]]; then
123
++        readarray -t kernel_cfg < <(xargs -n1 -a $kernel_ver_dir/$kernel)
124
++    else
125
++        kernel_cfg=()
126
++    fi
127
++
128
+     # Duplicate code: No way found how to redirect output based on $quiet
129
+     if [[ $quiet == 1 ]];then
130
+-	echo "$target|$kernel|$dracut_args|$basicmodules"
131
++	echo "Creating $target"
132
+ 	if [[ $basicmodules ]]; then
133
+-            dracut $dracut_args --add-drivers "$basicmodules" "$target" \
134
++            dracut $dracut_args --add-drivers "$basicmodules" "${kernel_cfg[@]}" "$target" \
135
+ 		"$kernel" &>/dev/null
136
+ 	else
137
+-            dracut $dracut_args "$target" "$kernel" &>/dev/null
138
++            dracut $dracut_args "${kernel_cfg[@]}" "$target" "$kernel" &>/dev/null
139
+ 	fi
140
+     else
141
+ 	if [[ $basicmodules ]]; then
142
+-            dracut $dracut_args --add-drivers "$basicmodules" "$target" \
143
++            dracut $dracut_args --add-drivers "$basicmodules" "${kernel_cfg[@]}" "$target" \
144
+ 		"$kernel"
145
+ 	else
146
+-            dracut $dracut_args "$target" "$kernel"
147
++            dracut $dracut_args "${kernel_cfg[@]}" "$target" "$kernel"
148
+ 	fi
149
+     fi
150
+ done
0 151
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+fscks="e2fsck fsck fsck.ext2 fsck.ext3 fsck.ext4"
... ...
@@ -1,48 +1,78 @@
1 1
 Summary:	initramfs
2 2
 Name:		initramfs
3
-Version:	1.0
4
-Release:	7%{?kernelsubrelease}%{?dist}
3
+Version:	2.0
4
+Release:	1%{?dist}
5
+Source0:	fscks.conf
5 6
 License:	Apache License
6 7
 Group:		System Environment/Base
7 8
 Vendor:		VMware, Inc.
8 9
 Distribution:	Photon
9
-BuildRequires:       linux = %{KERNEL_VERSION}-%{KERNEL_RELEASE}
10
-BuildRequires:       dracut
11
-BuildRequires:       ostree
12
-BuildRequires:       e2fsprogs
13
-Requires:	     linux = %{KERNEL_VERSION}-%{KERNEL_RELEASE}
10
+Provides:	initramfs
11
+Requires:	dracut
14 12
 
15 13
 %description
16
-Photon release files such as yum configs and other /etc/ release related files
17
-
18
-%prep
19
-umask 022
20
-cd /usr/src/photon/BUILD
21
-cd /usr/src/photon/BUILD
22
-rm -rf initramfs
23
-mkdir initramfs
24
-cd initramfs
25
-/bin/chmod -Rf a+rX,u+w,g-w,o-w .
26
-echo 'add_drivers+="tmem xen-acpi-processor xen-evtchn xen-gntalloc xen-gntdev xen-privcmd xen-pciback xenfs hv_ballon hv_utils hv_vmbus cn"' >> /etc/dracut.conf
27
-
28
-echo 'add_dracutmodules+=" ostree systemd "' > /etc/dracut.conf.d/ostree.conf
29
-
30
-%build
31
-dracut --force --kver %{KERNEL_VERSION}-%{KERNEL_RELEASE} --fscks "e2fsck fsck fsck.ext2 fsck.ext3 fsck.ext4" initrd.img-%{KERNEL_VERSION}-%{KERNEL_RELEASE}
14
+This package provides the configuration files for initrd generation.
15
+
32 16
 %install
33
-rm -rf $RPM_BUILD_ROOT
34
-install -d $RPM_BUILD_ROOT/boot
35
-install -m 600 initrd.img-%{KERNEL_VERSION}-%{KERNEL_RELEASE} $RPM_BUILD_ROOT/boot/initrd.img-%{KERNEL_VERSION}-%{KERNEL_RELEASE}
17
+mkdir -p %{buildroot}%{_sysconfdir}/dracut.conf.d
18
+install -D -m644 %{SOURCE0} %{buildroot}%{_sysconfdir}/dracut.conf.d/
19
+install -d -m755 %{buildroot}%{_localstatedir}/lib/initramfs/kernel
20
+
21
+%define watched_path %{_sbindir} %{_libdir}/udev/rules.d %{_libdir}/systemd/system  /lib/modules
22
+%define watched_pkgs e2fsprogs, ostree, systemd, kpartx, device-mapper-multipath
23
+
24
+%define removal_action \
25
+rm -rf %{_localstatedir}/lib/rpm-state/initramfs.regenerate \
26
+rm -rf %{_localstatedir}/lib/rpm-state/initramfs.pending
27
+
28
+%define pkgs_trigger_action \
29
+[ -f %{_localstatedir}/lib/rpm-state/initramfs.regenerate ] && exit 0 \
30
+mkdir -p %{_localstatedir}/lib/rpm-state \
31
+touch %{_localstatedir}/lib/rpm-state/initramfs.regenerate \
32
+echo "initramfs (re)generation triggered" >&2
33
+
34
+%define file_trigger_action \
35
+if [ -f %{_localstatedir}/lib/rpm-state/initramfs.regenerate ]; then \
36
+    echo "(re)generate initramfs for all kernels" >&2 \
37
+    mkinitrd -q \
38
+elif [ -d %{_localstatedir}/lib/rpm-state/initramfs.pending ]; then \
39
+    for k in `ls %{_localstatedir}/lib/rpm-state/initramfs.pending/`; do \
40
+        echo "generate initramfs for $k" >&2 \
41
+        mkinitrd -q /boot/initrd.img-$k $k \
42
+    done; \
43
+fi \
44
+%{removal_action}
45
+
46
+%post
47
+%{pkgs_trigger_action}
48
+
49
+%postun
50
+[ $1 -eq 0 ] || exit 0
51
+%{removal_action}
52
+
53
+%posttrans
54
+%{file_trigger_action}
55
+
56
+%triggerin -- %{watched_pkgs}
57
+%{pkgs_trigger_action}
58
+
59
+%triggerun -- %{watched_pkgs}
60
+%{pkgs_trigger_action}
61
+
62
+%transfiletriggerin -- %{watched_path}
63
+%{file_trigger_action}
36 64
 
37
-%clean
38
-rm -rf $RPM_BUILD_ROOT
65
+%transfiletriggerpostun -- %{watched_path}
66
+%{file_trigger_action}
39 67
 
40 68
 %files
41 69
 %defattr(-,root,root,-)
42
-%dir /boot
43
-/boot/initrd.img-%{KERNEL_VERSION}-%{KERNEL_RELEASE}
70
+%{_sysconfdir}/dracut.conf.d/fscks.conf
71
+%dir %{_localstatedir}/lib/initramfs/kernel
44 72
 
45 73
 %changelog
74
+*   Wed Apr 12 2017 Bo Gan <ganb@vmware.com> 2.0-1
75
+-   Made initrd generation dynamic, triggers for systemd, e2fs-progs
46 76
 *   Wed Nov 30 2016 Alexey Makhalov <amakhalov@vmware.com> 1.0-7
47 77
 -   Expand uname -r to have release number
48 78
 *   Wed Nov 23 2016 Anish Swaminathan <anishs@vmware.com>  1.0-6
49 79
new file mode 100644
... ...
@@ -0,0 +1,9 @@
0
+%triggerin -- initramfs
1
+mkdir -p %{_localstatedir}/lib/rpm-state/initramfs/kernel.pending
2
+touch %{_localstatedir}/lib/rpm-state/initramfs/kernel.pending/%{uname_r}
3
+echo "initrd generation of kernel %{uname_r} will be triggered later" >&2
4
+
5
+%triggerun -- initramfs
6
+rm -rf %{_localstatedir}/lib/rpm-state/initramfs/kernel.pending/%{uname_r}
7
+rm -rf /boot/initrd.img-%{uname_r}
8
+echo "initrd of kernel %{uname_r} removed" >&2
... ...
@@ -2,7 +2,7 @@
2 2
 Summary:        Kernel
3 3
 Name:           linux-esx
4 4
 Version:        4.9.24
5
-Release:        1%{?dist}
5
+Release:        2%{?dist}
6 6
 License:        GPLv2
7 7
 URL:            http://www.kernel.org/
8 8
 Group:          System Environment/Kernel
... ...
@@ -11,6 +11,7 @@ Distribution:   Photon
11 11
 Source0:        http://www.kernel.org/pub/linux/kernel/v4.x/linux-%{version}.tar.xz
12 12
 %define sha1 linux=c504e8817a320030313710066360bc50be7bebe8
13 13
 Source1:        config-esx-%{version}
14
+Source2:        initramfs.trigger
14 15
 # common
15 16
 Patch0:         x86-vmware-read-tsc_khz-only-once-at-boot-time.patch
16 17
 Patch1:         x86-vmware-use-tsc_khz-value-for-calibrate_cpu.patch
... ...
@@ -136,8 +137,13 @@ cat > %{buildroot}/boot/linux-%{uname_r}.cfg << "EOF"
136 136
 # GRUB Environment Block
137 137
 photon_cmdline=init=/lib/systemd/systemd rcupdate.rcu_expedited=1 rw systemd.show_status=0 quiet noreplace-smp cpu_init_udelay=0
138 138
 photon_linux=vmlinuz-%{uname_r}
139
+#photon_initrd=initrd.img-%{uname_r}
139 140
 EOF
140 141
 
142
+# Register myself to initramfs
143
+mkdir -p %{buildroot}/%{_localstatedir}/lib/initramfs/kernel
144
+touch %{buildroot}/%{_localstatedir}/lib/initramfs/kernel/%{uname_r}
145
+
141 146
 # cleanup dangling symlinks
142 147
 rm -f %{buildroot}/lib/modules/%{uname_r}/source
143 148
 rm -f %{buildroot}/lib/modules/%{uname_r}/build
... ...
@@ -154,6 +160,8 @@ cp .config %{buildroot}/usr/src/linux-headers-%{uname_r}
154 154
 ln -sf /usr/src/linux-headers-%{uname_r} %{buildroot}/lib/modules/%{uname_r}/build
155 155
 find %{buildroot}/lib/modules -name '*.ko' -print0 | xargs -0 chmod u+x
156 156
 
157
+%include %{SOURCE2}
158
+
157 159
 %post
158 160
 /sbin/depmod -aq %{uname_r}
159 161
 ln -sf linux-%{uname_r}.cfg /boot/photon.cfg
... ...
@@ -164,6 +172,7 @@ ln -sf linux-%{uname_r}.cfg /boot/photon.cfg
164 164
 /boot/config-%{uname_r}
165 165
 /boot/vmlinuz-%{uname_r}
166 166
 %config(noreplace) /boot/linux-%{uname_r}.cfg
167
+%config %{_localstatedir}/lib/initramfs/kernel/%{uname_r}
167 168
 /lib/modules/*
168 169
 %exclude /lib/modules/%{uname_r}/build
169 170
 %exclude /usr/src
... ...
@@ -178,6 +187,8 @@ ln -sf linux-%{uname_r}.cfg /boot/photon.cfg
178 178
 /usr/src/linux-headers-%{uname_r}
179 179
 
180 180
 %changelog
181
+*   Thu Apr 27 2017 Bo Gan <ganb@vmware.com> 4.9.24-2
182
+-   Support dynamic initrd generation
181 183
 *   Tue Apr 25 2017 Alexey Makhalov <amakhalov@vmware.com> 4.9.24-1
182 184
 -   Fix CVE-2017-6874 and CVE-2017-7618.
183 185
 -   .config: build nvme and nvme-core in kernel.
... ...
@@ -2,7 +2,7 @@
2 2
 Summary:        Kernel
3 3
 Name:           linux-secure
4 4
 Version:        4.9.24
5
-Release:        1%{?dist}
5
+Release:        2%{?dist}
6 6
 License:        GPLv2
7 7
 URL:            http://www.kernel.org/
8 8
 Group:          System Environment/Kernel
... ...
@@ -12,6 +12,7 @@ Source0:       http://www.kernel.org/pub/linux/kernel/v4.x/linux-%{version}.tar.
12 12
 %define sha1 linux=c504e8817a320030313710066360bc50be7bebe8
13 13
 Source1:        config-secure-%{version}
14 14
 Source2:        aufs4.9.tar.gz
15
+Source3:        initramfs.trigger
15 16
 # common
16 17
 Patch0:         x86-vmware-read-tsc_khz-only-once-at-boot-time.patch
17 18
 Patch1:         x86-vmware-use-tsc_khz-value-for-calibrate_cpu.patch
... ...
@@ -174,6 +175,13 @@ cat > %{buildroot}/boot/linux-%{uname_r}.cfg << "EOF"
174 174
 # GRUB Environment Block
175 175
 photon_cmdline=init=/lib/systemd/systemd ro loglevel=3 quiet no-vmw-sta loadpin.enabled=0 slub_debug=P page_poison=1
176 176
 photon_linux=vmlinuz-%{uname_r}
177
+photon_initrd=initrd.img-%{uname_r}
178
+EOF
179
+
180
+# Register myself to initramfs
181
+mkdir -p %{buildroot}/%{_localstatedir}/lib/initramfs/kernel
182
+cat > %{buildroot}/%{_localstatedir}/lib/initramfs/kernel/%{uname_r} << "EOF"
183
+--add-drivers "tmem xen-acpi-processor xen-evtchn xen-gntalloc xen-gntdev xen-privcmd xen-pciback xenfs hv_utils hv_vmbus hv_balloon cn"
177 184
 EOF
178 185
 
179 186
 # cleanup dangling symlinks
... ...
@@ -191,6 +199,9 @@ cp .config %{buildroot}/usr/src/linux-headers-%{uname_r}
191 191
 # symling to the build folder
192 192
 ln -sf /usr/src/linux-headers-%{uname_r} %{buildroot}/lib/modules/%{uname_r}/build
193 193
 
194
+
195
+%include %{SOURCE3}
196
+
194 197
 %post
195 198
 /sbin/depmod -aq %{uname_r}
196 199
 ln -sf linux-%{uname_r}.cfg /boot/photon.cfg
... ...
@@ -201,6 +212,7 @@ ln -sf linux-%{uname_r}.cfg /boot/photon.cfg
201 201
 /boot/config-%{uname_r}
202 202
 /boot/vmlinuz-%{uname_r}
203 203
 %config(noreplace) /boot/linux-%{uname_r}.cfg
204
+%config %{_localstatedir}/lib/initramfs/kernel/%{uname_r}
204 205
 /lib/firmware/*
205 206
 /lib/modules/*
206 207
 %exclude /lib/modules/%{uname_r}/build
... ...
@@ -216,6 +228,8 @@ ln -sf linux-%{uname_r}.cfg /boot/photon.cfg
216 216
 /usr/src/linux-headers-%{uname_r}
217 217
 
218 218
 %changelog
219
+*   Thu Apr 27 2017 Bo Gan <ganb@vmware.com> 4.9.24-2
220
+-   Support dynamic initrd generation
219 221
 *   Tue Apr 25 2017 Alexey Makhalov <amakhalov@vmware.com> 4.9.24-1
220 222
 -   Fix CVE-2017-6874 and CVE-2017-7618.
221 223
 -   .config: build nvme and nvme-core in kernel.
... ...
@@ -2,7 +2,7 @@
2 2
 Summary:        Kernel
3 3
 Name:           linux
4 4
 Version:        4.9.24
5
-Release:        1%{?dist}
5
+Release:        2%{?dist}
6 6
 License:    	GPLv2
7 7
 URL:        	http://www.kernel.org/
8 8
 Group:        	System Environment/Kernel
... ...
@@ -11,6 +11,7 @@ Distribution: 	Photon
11 11
 Source0:        http://www.kernel.org/pub/linux/kernel/v4.x/linux-%{version}.tar.xz
12 12
 %define sha1 linux=c504e8817a320030313710066360bc50be7bebe8
13 13
 Source1:	config-%{version}
14
+Source2:	initramfs.trigger
14 15
 # common
15 16
 Patch0:         x86-vmware-read-tsc_khz-only-once-at-boot-time.patch
16 17
 Patch1:         x86-vmware-use-tsc_khz-value-for-calibrate_cpu.patch
... ...
@@ -162,6 +163,12 @@ photon_linux=vmlinuz-%{uname_r}
162 162
 photon_initrd=initrd.img-%{uname_r}
163 163
 EOF
164 164
 
165
+# Register myself to initramfs
166
+mkdir -p %{buildroot}/%{_localstatedir}/lib/initramfs/kernel
167
+cat > %{buildroot}/%{_localstatedir}/lib/initramfs/kernel/%{uname_r} << "EOF"
168
+--add-drivers "tmem xen-acpi-processor xen-evtchn xen-gntalloc xen-gntdev xen-privcmd xen-pciback xenfs hv_utils hv_vmbus hv_balloon cn"
169
+EOF
170
+
165 171
 #    Cleanup dangling symlinks
166 172
 rm -rf %{buildroot}/lib/modules/%{uname_r}/source
167 173
 rm -rf %{buildroot}/lib/modules/%{uname_r}/build
... ...
@@ -183,6 +190,8 @@ find %{buildroot}/lib/modules -name '*.ko' -print0 | xargs -0 chmod u+x
183 183
 # Linux version that was affected is 4.4.26
184 184
 make -C tools JOBS=1 DESTDIR=%{buildroot} prefix=%{_prefix} perf_install
185 185
 
186
+%include %{SOURCE2}
187
+
186 188
 %post
187 189
 /sbin/depmod -aq %{uname_r}
188 190
 ln -sf %{name}-%{uname_r}.cfg /boot/photon.cfg
... ...
@@ -202,6 +211,7 @@ ln -sf %{name}-%{uname_r}.cfg /boot/photon.cfg
202 202
 /boot/config-%{uname_r}
203 203
 /boot/vmlinuz-%{uname_r}
204 204
 %config(noreplace) /boot/%{name}-%{uname_r}.cfg
205
+%config %{_localstatedir}/lib/initramfs/kernel/%{uname_r}
205 206
 /lib/firmware/*
206 207
 %defattr(0644,root,root)
207 208
 /lib/modules/%{uname_r}/*
... ...
@@ -243,6 +253,8 @@ ln -sf %{name}-%{uname_r}.cfg /boot/photon.cfg
243 243
 /usr/share/doc/*
244 244
 
245 245
 %changelog
246
+*   Thu Apr 27 2017 Bo Gan <ganb@vmware.com> 4.9.24-2
247
+-   Support dynamic initrd generation
246 248
 *   Tue Apr 25 2017 Alexey Makhalov <amakhalov@vmware.com> 4.9.24-1
247 249
 -   Fix CVE-2017-6874 and CVE-2017-7618.
248 250
 -   Fix audit-devel BuildRequires.
... ...
@@ -410,8 +410,7 @@ class Installer(object):
410 410
 
411 411
     def adjust_packages_for_vmware_virt(self):
412 412
         try:
413
-            if (self.install_config['vmware_virt'] and
414
-                self.install_config['install_linux_esx']):
413
+            if self.install_config['install_linux_esx']:
415 414
                 selected_packages = self.install_config['packages']
416 415
                 try:
417 416
                     selected_packages.remove('linux')
... ...
@@ -184,9 +184,6 @@ class IsoInstaller(object):
184 184
             random_id = '%12x' % random.randrange(16**12)
185 185
             random_hostname = "photon-" + random_id.strip()
186 186
             install_config = {'iso_system': False}
187
-            install_config['vmware_virt'] = False
188
-            if self.is_vmware_virtualization():
189
-                install_config['vmware_virt'] = True
190 187
             license_agreement = License(self.maxy, self.maxx)
191 188
             select_disk = SelectDisk(self.maxy, self.maxx, install_config)
192 189
             select_partition = PartitionISO(self.maxy, self.maxx, install_config)
... ...
@@ -236,7 +233,7 @@ class IsoInstaller(object):
236 236
             items.append((select_disk.guided_partitions, False))
237 237
             items.append((package_selector.display, True))
238 238
             select_linux_index = -1
239
-            if install_config['vmware_virt'] == True:
239
+            if self.is_vmware_virtualization():
240 240
                 linux_selector   = LinuxSelector(self.maxy, self.maxx, install_config)
241 241
                 items.append((linux_selector.display, True))
242 242
                 select_linux_index = items.index((linux_selector.display, True))
... ...
@@ -247,6 +244,8 @@ class IsoInstaller(object):
247 247
         else:
248 248
             install_config = ks_config
249 249
             install_config['iso_system'] = False
250
+            if self.is_vmware_virtualization() and 'install_linux_esx' not in install_config:
251
+                 install_config['install_linux_esx'] = True
250 252
 
251 253
         installer = InstallerContainer(install_config, self.maxy, self.maxx, True, rpm_path=rpm_path, log_path="/var/log", ks_config=ks_config)
252 254
 
... ...
@@ -27,8 +27,8 @@ class LinuxSelector(object):
27 27
         self.menu_starty = self.win_starty + 3
28 28
 
29 29
         self.menu_items = []
30
-        self.menu_items.append(("1. linux", self.set_linux_esx_installation, False))
31
-        self.menu_items.append(("2. linux-esx", self.set_linux_esx_installation, True))
30
+        self.menu_items.append(("1. linux-esx", self.set_linux_esx_installation, True))
31
+        self.menu_items.append(("2. linux", self.set_linux_esx_installation, False))
32 32
 
33 33
         self.host_menu = Menu(self.menu_starty, self.maxx, self.menu_items,
34 34
                               default_selected = 0, tab_enable=False)