Browse code

dracut: adjust host_only flag based on running environment

Currently if initramfs triggers regenration of initrd using
`mkinitrd -q /boot/initrd.img-$k $k` host_only will be 0 because we are
specifying both target & kernel.
So, control never eneters default_kernel_images function.

As a result after a kernel upgrade/downgrade generic initrd will be
created which is unnecessary.

So, moved the host_only flag setting logic outside of default_kernel_images
function.

Change-Id: I6af523598f796d46240a717d864cdf5c5298035b
Signed-off-by: Shreenidhi Shedi <sshedi@vmware.com>
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/12020
Reviewed-by: Ankit Jain <ankitja@vmware.com>
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Alexey Makhalov <amakhalov@vmware.com>

Shreenidhi Shedi authored on 2020/12/16 03:50:01
Showing 5 changed files
... ...
@@ -4,7 +4,7 @@
4 4
 Summary:        dracut to create initramfs
5 5
 Name:           dracut
6 6
 Version:        050
7
-Release:        5%{?dist}
7
+Release:        6%{?dist}
8 8
 Group:          System Environment/Base
9 9
 # The entire source code is GPLv2+
10 10
 # except install/* which is LGPLv2+
... ...
@@ -156,6 +156,8 @@ rm -rf -- $RPM_BUILD_ROOT
156 156
 %dir /var/lib/dracut/overlay
157 157
 
158 158
 %changelog
159
+*   Tue Dec 15 2020 Shreenidhi Shedi <sshedi@vmware.com> 050-6
160
+-   Adjust hostonly based on running environment
159 161
 *   Tue Nov 03 2020 Srinidhi Rao <srinidhir@vmware.com> 050-5
160 162
 -   Remove fipsify support
161 163
 *   Fri Oct 09 2020 Shreenidhi Shedi <sshedi@vmware.com> 050-4
... ...
@@ -1,20 +1,56 @@
1
-diff --color -Naurp -rupN dracut-050/mkinitrd-dracut.sh dracut-050-new/mkinitrd-dracut.sh
2
-+++ dracut-050-new/mkinitrd-dracut.sh	2020-10-09 12:23:40.832349012 +0530
3
-@@ -61,7 +61,15 @@ default_kernel_images() {
1
+From c06a5e795b9213b749ded74e5f9ced0e63ad93f4 Mon Sep 17 00:00:00 2001
2
+From: Shreenidhi Shedi <sshedi@vmware.com>
3
+Date: Mon, 21 Dec 2020 12:41:51 +0530
4
+Subject: [PATCH] adjust host_only flag based on running environment
5
+
6
+host_only decides the nature of initrd.
7
+If initrd is getting generated in docker/chroot environemnt, it should
8
+be generic. Otherwise cloud-images & ova will have a host specific
9
+initrd which may fail to boot on a different host.
10
+
11
+Signed-off-by: Shreenidhi Shedi <sshedi@vmware.com>
12
+---
13
+ mkinitrd-dracut.sh | 20 +++++++++++++++++---
14
+ 1 file changed, 17 insertions(+), 3 deletions(-)
15
+
16
+diff --git a/mkinitrd-dracut.sh b/mkinitrd-dracut.sh
17
+index 01c989c3..6d502a09 100755
18
+--- a/mkinitrd-dracut.sh
19
+@@ -60,9 +60,6 @@ default_kernel_images() {
20
+ 	kernels="$kernels $kernel_version"
4 21
          targets="$targets $boot_dir/initrd.img-$kernel_version"
5 22
      done
6
- 
23
+-
7 24
 -    host_only=1
8
-+    # don't set hostonly flag if running in docker env
9
-+    # if set initrd will be incomplete
10
-+    # https://fedoraproject.org/wiki/Features/DracutHostOnly#Detailed_Description
11
-+    # https://man7.org/linux/man-pages/man5/dracut.conf.5.html
12
-+    if grep -qc docker /proc/self/cgroup; then
13
-+      host_only=0
14
-+    else
15
-+      host_only=1
16
-+    fi
17
-     force=1
25
+-    force=1
18 26
  }
19 27
  
28
+ while (($# > 0)); do
29
+@@ -148,6 +145,23 @@ done
30
+ targets=( $targets )
31
+ [[ $kernels ]] && kernels=( $kernels )
32
+ 
33
++# don't set hostonly flag if running in docker env
34
++# if set initrd will be incomplete
35
++# https://fedoraproject.org/wiki/Features/DracutHostOnly#Detailed_Description
36
++# https://man7.org/linux/man-pages/man5/dracut.conf.5.html
37
++if grep -qc docker /proc/self/cgroup; then
38
++  echo "--- Generating initrd under docker environment ---"
39
++  host_only=0
40
++elif [ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]; then
41
++  # set host_only=0 if initrd is generated in chroot
42
++  # otherwise cloud images generated in a Photon host will have bad initrd
43
++  echo "--- Generating initrd under chroot environment ---"
44
++  host_only=0
45
++else
46
++  host_only=1
47
++fi
48
++force=1
49
++
50
+ [[ $host_only == 1 ]] && dracut_args="${dracut_args} -H"
51
+ [[ $force == 1 ]]     && dracut_args="${dracut_args} -f"
52
+ 
53
+-- 
54
+2.17.1
55
+
... ...
@@ -750,6 +750,7 @@ class BuildImage:
750 750
         self.srpm_path = constants.sourceRpmPath
751 751
         self.pkg_to_rpm_map_file = os.path.join(Build_Config.stagePath, "pkg_info.json")
752 752
         self.ph_docker_image = configdict["photon-build-param"]["photon-docker-image"]
753
+        self.ova_cloud_images = ["ami", "gce", "azure", "ova_uefi", "ova"]
753 754
 
754 755
     def set_Iso_Parameters(self, imgName):
755 756
         self.generated_data_path = Build_Config.stagePath + "/common/data"
... ...
@@ -829,7 +830,7 @@ class BuildImage:
829 829
             rpmBuildTarget.packages()
830 830
         if not check_prerequesite["ostree-repo"]:
831 831
             RpmBuildTarget.ostree_repo()
832
-        print("Building image " + self.img_name)
832
+        print("Building " + self.img_name + " image")
833 833
         imagebuilder.createImage(self)
834 834
 
835 835
     @staticmethod
... ...
@@ -865,8 +866,7 @@ class BuildImage:
865 865
         os.chdir(curDir)
866 866
 
867 867
     def all_images(self):
868
-        images = ["ami", "gce", "azure", "ova_uefi", "ova"]
869
-        for img in images:
868
+        for img in self.ova_cloud_images:
870 869
            self.img_name = img
871 870
            self.build_image()
872 871
 
... ...
@@ -1078,7 +1078,7 @@ def main():
1078 1078
             if options.targetName in ["iso", "src-iso", "minimal-iso", "rt-iso"]:
1079 1079
                 buildImage.set_Iso_Parameters(options.targetName)
1080 1080
                 buildImage.build_iso()
1081
-            elif options.targetName in ["ami", "gce", "ova", "ova_uefi", "azure", "rpi", "ls1012afrwy"]:
1081
+            elif options.targetName in buildImage.ova_cloud_images + ["rpi", "ls1012afrwy"]:
1082 1082
                 buildImage.build_image()
1083 1083
             else:
1084 1084
                 attr = getattr(buildImage, configdict["targetName"])
... ...
@@ -24,7 +24,7 @@ rm -f /etc/ssh/ssh_host_*
24 24
 sudo groupadd docker
25 25
 sudo groupadd sudo
26 26
 
27
-rm /root/.ssh/authorized_keys   
27
+rm /root/.ssh/authorized_keys
28 28
 
29 29
 # ssh server config
30 30
 # Override old values
... ...
@@ -66,14 +66,3 @@ sed -i 's/$photon_cmdline/init=\/lib\/systemd\/systemd loglevel=3 ro console=tty
66 66
 
67 67
 # Remove kernel symbols
68 68
 rm -f /boot/System.map*
69
-
70
-arch="$(uname -m)"
71
-
72
-if [[ "$arch" == "aarch64" ]]; then
73
-kver="$(rpm -q --queryformat "%{VERSION}-%{RELEASE}" linux)"
74
-
75
-# Regenerate initramfs to reflect the new dracut config and also without the host-only flag
76
-# TODO: improve mkinitrd to simplify the command line
77
-
78
-dracut_args='-N --force' mkinitrd "/boot/initrd.img-$kver" "$kver"
79
-fi
... ...
@@ -16,10 +16,3 @@ cat > /etc/modules-load.d/genet.conf << "EOF"
16 16
 mdio_bcm_unimac
17 17
 genet
18 18
 EOF
19
-
20
-kver="$(rpm -q --queryformat "%{VERSION}-%{RELEASE}" linux)"
21
-
22
-# Regenerate initramfs to reflect the new dracut config and also without the host-only flag
23
-# TODO: improve mkinitrd to simplify the command line
24
-
25
-dracut_args='-N --force' mkinitrd "/boot/initrd.img-$kver" "$kver"