Browse code

Move bios/efi to first GPT partition.

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

xiaolin-vmware authored on 2017/04/29 04:13:31
Showing 3 changed files
... ...
@@ -24,7 +24,9 @@ from actionresult import ActionResult
24 24
 from __builtin__ import isinstance
25 25
 
26 26
 class Installer(object):
27
-    def __init__(self, install_config, maxy = 0, maxx = 0, iso_installer = False, rpm_path = "../stage/RPMS", log_path = "../stage/LOGS", ks_config = None):
27
+    def __init__(self, install_config, maxy = 0, maxx = 0, iso_installer = False,
28
+                 rpm_path = "../stage/RPMS", log_path = "../stage/LOGS",
29
+                 ks_config = None):
28 30
         self.install_config = install_config
29 31
         self.ks_config = ks_config
30 32
         self.iso_installer = iso_installer
... ...
@@ -149,15 +151,38 @@ class Installer(object):
149 149
             if self.iso_installer and os.path.isdir("/sys/firmware/efi"):
150 150
                 self.install_config['boot'] = 'efi'
151 151
             # install grub
152
+            if 'boot_partition_number' not in self.install_config['disk']:
153
+                self.install_config['disk']['boot_partition_number'] = 1
154
+
152 155
             try:
153 156
                 if self.install_config['boot'] == 'bios':
154
-                    process = subprocess.Popen([self.setup_grub_command, '-w', self.photon_root, "bios", self.install_config['disk']['disk'], self.install_config['disk']['root'], self.install_config['disk']['boot'], self.install_config['disk']['bootdirectory']], stdout=self.output)
157
+                    process = subprocess.Popen(
158
+                                  [self.setup_grub_command, '-w', self.photon_root,
159
+                                  "bios", self.install_config['disk']['disk'],
160
+                                  self.install_config['disk']['root'],
161
+                                  self.install_config['disk']['boot'],
162
+                                  self.install_config['disk']['bootdirectory'],
163
+                                  str(self.install_config['disk']['boot_partition_number'])],
164
+                                  stdout=self.output)
155 165
                 elif self.install_config['boot'] == 'efi':
156
-                    process = subprocess.Popen([self.setup_grub_command, '-w', self.photon_root, "efi", self.install_config['disk']['disk'], self.install_config['disk']['root'], self.install_config['disk']['boot'], self.install_config['disk']['bootdirectory']], stdout=self.output)
166
+                    process = subprocess.Popen(
167
+                                  [self.setup_grub_command, '-w', self.photon_root,
168
+                                  "efi", self.install_config['disk']['disk'],
169
+                                  self.install_config['disk']['root'],
170
+                                  self.install_config['disk']['boot'],
171
+                                  self.install_config['disk']['bootdirectory'],
172
+                                  str(self.install_config['disk']['boot_partition_number'])],
173
+                                  stdout=self.output)
157 174
             except:
158 175
                 #install bios if variable is not set.
159
-                process = subprocess.Popen([self.setup_grub_command, '-w', self.photon_root, "bios", self.install_config['disk']['disk'], self.install_config['disk']['root'], self.install_config['disk']['boot'], self.install_config['disk']['bootdirectory']], stdout=self.output)
160
-
176
+                process = subprocess.Popen(
177
+                              [self.setup_grub_command, '-w', self.photon_root,
178
+                              "bios", self.install_config['disk']['disk'],
179
+                              self.install_config['disk']['root'],
180
+                              self.install_config['disk']['boot'],
181
+                              self.install_config['disk']['bootdirectory'],
182
+                              str(self.install_config['disk']['boot_partition_number'])],
183
+                              stdout=self.output)
161 184
             retval = process.wait()
162 185
 
163 186
             self.update_fstab()
... ...
@@ -23,16 +23,16 @@ grub_efi_install()
23 23
     then
24 24
          BOOT_PARTITION=/dev/mapper/`basename ${HDD}`p1
25 25
     else
26
-         BOOT_PARTITION=${HDD}2
26
+         BOOT_PARTITION=${HDD}1
27 27
     fi
28
-    mkfs.vfat $BOOT_PARTITION
28
+    mkfs.fat $BOOT_PARTITION
29 29
     mount -t vfat $BOOT_PARTITION $BUILDROOT/boot/efi
30 30
     cp boot/unifont.pf2 /usr/share/grub/
31 31
     grub2-efi-install --target=x86_64-efi --efi-directory=$BUILDROOT/boot/efi --bootloader-id=Boot --root-directory=$BUILDROOT --recheck
32 32
     rm $BUILDROOT/boot/efi/EFI/Boot/grubx64.efi
33 33
     cp EFI/BOOT/* $BUILDROOT/boot/efi/EFI/Boot/
34 34
     mkdir -p $BUILDROOT/boot/efi/boot/grub2
35
-    echo "configfile (hd0,gpt1)/boot/grub2/grub.cfg" > $BUILDROOT/boot/efi/boot/grub2/grub.cfg
35
+    echo "configfile (hd0,gpt${BOOT_PARTITION_NUMBER})${BOOT_DIRECTORY}grub2/grub.cfg" > $BUILDROOT/boot/efi/boot/grub2/grub.cfg
36 36
     umount $BUILDROOT/boot/efi
37 37
 }
38 38
 
... ...
@@ -53,13 +53,14 @@ ARCH=$(uname -m)    # host architecture
53 53
 > ${LOGFILE}        #    clear/initialize logfile
54 54
 
55 55
 # Check if passing a HHD and partition
56
-if [ $# -eq 5 ] 
56
+if [ $# -eq 6 ]
57 57
     then
58 58
         BOOTMODE=$1
59 59
     HDD=$2
60 60
     ROOT_PARTITION_PATH=$3
61 61
     BOOT_PARTITION_PATH=$4
62 62
     BOOT_DIRECTORY=$5
63
+    BOOT_PARTITION_NUMBER=$6
63 64
 fi
64 65
 
65 66
 #
... ...
@@ -44,9 +44,16 @@ def partition_disk(disk, partitions):
44 44
     # Partitioning the disk
45 45
     extensible_partition = None
46 46
     partitions_count = len(partitions)
47
-    partition_number = 1
47
+    partition_number = 2
48
+    # Add part size and grub flags
49
+    grub_flag = ':ef02'
50
+    part_size = '+2M'
51
+    if os.path.isdir("/sys/firmware/efi"):
52
+        grub_flag = ':ef00'
53
+        part_size = '+3M'
54
+
48 55
     # Adding the bios partition
49
-    partition_cmd = ['sgdisk', '-n', `partitions_count + 1` + ':-2M:']
56
+    partition_cmd = ['sgdisk', '-n 1::' + part_size]
50 57
     # Adding the known size partitions
51 58
     for partition in partitions:
52 59
         if partition['size'] == 0:
... ...
@@ -77,12 +84,7 @@ def partition_disk(disk, partitions):
77 77
         log(LOG_ERROR, "Faild partition disk, command: {0}". format(partition_cmd))
78 78
         return None
79 79
 
80
-    # Add the grub flags
81
-    grub_flag = ':ef02'
82
-    if os.path.isdir("/sys/firmware/efi"):
83
-        grub_flag = ':ef00'
84
-
85
-    process = subprocess.Popen(['sgdisk', '-t' + `partitions_count + 1` + grub_flag, disk], stdout = output)
80
+    process = subprocess.Popen(['sgdisk', '-t1' + grub_flag, disk], stdout = output)
86 81
     retval = process.wait()
87 82
     if retval != 0:
88 83
         log(LOG_ERROR, "Failed to setup grub partition")
... ...
@@ -93,8 +95,10 @@ def partition_disk(disk, partitions):
93 93
         if "mountpoint" in partition:
94 94
             if partition['mountpoint'] == '/':
95 95
                 partitions_data['root'] = partition['path']
96
+                partitions_data['root_partition_number'] = partition['partition_number']
96 97
             elif partition['mountpoint'] == '/boot':
97 98
                 partitions_data['boot'] = partition['path']
99
+                partitions_data['boot_partition_number'] = partition['partition_number']
98 100
                 partitions_data['bootdirectory'] = '/'
99 101
         if partition['filesystem'] == "swap":
100 102
             process = subprocess.Popen(['mkswap', partition['path']], stdout = output)
... ...
@@ -116,10 +120,11 @@ def partition_disk(disk, partitions):
116 116
 
117 117
     if not 'boot' in partitions_data:
118 118
         partitions_data['boot'] = partitions_data['root']
119
+        partitions_data['boot_partition_number'] = partitions_data['root_partition_number']
119 120
         partitions_data['bootdirectory'] = '/boot/'
120 121
 
121 122
     partitions.sort(lambda p1,p2: partition_compare(p1, p2))
122
-	
123
+
123 124
     return partitions_data
124 125
 
125 126
 def replace_string_in_file(filename,  search_string,  replace_string):