Browse code

Add a new ova target with generic linux kernel

Change-Id: Ifd8e9a6a5678e9195c20a507f25ffc2dcd10f926
Reviewed-on: http://photon-jenkins.eng.vmware.com/52
Tested-by: jenkins-photon <wangnan2015@hotmail.com>
Reviewed-by: Sharath George

suezzelur authored on 2015/10/10 08:37:36
Showing 7 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,8 @@
0
+{
1
+    "minimal" : {
2
+        "title" : "Photon Minimal",
3
+        "file" : "packages_minimal.json",
4
+        "visible" : true,
5
+        "include" : []
6
+    }
7
+}
... ...
@@ -111,23 +111,25 @@ if [ $IMG_NAME != "ova" ] && [ $IMG_NAME != "ova_uefi" ]
111 111
       then
112 112
         cp ntpd.service $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/lib/systemd/system/
113 113
     fi
114
-    cp ntpd.service $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/lib/systemd/system/
115
-    cp eth0.service $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/lib/systemd/system/
116
-    cp -f docker.service $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/lib/systemd/system/
117
-    cp -f docker.socket $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/lib/systemd/system/
118
-    if [ -e $IMG_NAME/cloud-photon.cfg ]
119
-    then
120
-        cp -f $IMG_NAME/cloud-photon.cfg $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/etc/cloud/cloud.cfg
121
-    fi
114
+    if [ $IMG_NAME != "ova_generic" ]
115
+      then
116
+        cp ntpd.service $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/lib/systemd/system/
117
+        cp eth0.service $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/lib/systemd/system/
118
+        cp -f docker.service $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/lib/systemd/system/
119
+        cp -f docker.socket $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/lib/systemd/system/
120
+        if [ -e $IMG_NAME/cloud-photon.cfg ]
121
+          then
122
+            cp -f $IMG_NAME/cloud-photon.cfg $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/etc/cloud/cloud.cfg
123
+        fi
122 124
     
123
-    cp $IMG_NAME/$IMG_NAME-patch.sh $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/
125
+        cp $IMG_NAME/$IMG_NAME-patch.sh $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/
124 126
 
125 127
 
126
-    cp /etc/resolv.conf $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/etc/
127
-    echo "chrooting and running patch inside the chroot"
128
-    chroot $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME} /bin/bash -c "/$IMG_NAME-patch.sh"
129
-    rm -f $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/$IMG_NAME-patch.sh
130
-
128
+        cp /etc/resolv.conf $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/etc/
129
+        echo "chrooting and running patch inside the chroot"
130
+        chroot $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME} /bin/bash -c "/$IMG_NAME-patch.sh"
131
+        rm -f $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/$IMG_NAME-patch.sh
132
+    fi
131 133
 fi
132 134
 umount $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/sys
133 135
 umount $PHOTON_IMG_OUTPUT_PATH/photon-${IMG_NAME}/dev/pts
... ...
@@ -3,6 +3,9 @@ set -x
3 3
 PHOTON_IMG_OUTPUT_PATH=$1
4 4
 SRC_ROOT=$2
5 5
 
6
+rm -f $PHOTON_IMG_OUTPUT_PATH/*.vmdk
7
+rm -f $PHOTON_IMG_OUTPUT_PATH/*.ova
8
+
6 9
 #Generate two ova images one with a random password and the other with a defined password
7 10
 
8 11
 sed "s|VMDK_IMAGE|$PHOTON_IMG_OUTPUT_PATH/photon-ova.vmdk|" vmx-template > /tmp/vmx-temp.vmx
9 12
new file mode 100755
... ...
@@ -0,0 +1,82 @@
0
+#!/bin/bash
1
+set -x
2
+PHOTON_IMG_OUTPUT_PATH=$1
3
+SRC_ROOT=$2
4
+
5
+rm -f $PHOTON_IMG_OUTPUT_PATH/*.vmdk
6
+rm -f $PHOTON_IMG_OUTPUT_PATH/*.ova
7
+
8
+#Generate two ova images one with a random password and the other with a defined password
9
+
10
+sed "s|VMDK_IMAGE|$PHOTON_IMG_OUTPUT_PATH/photon-generic-ova.vmdk|" vmx-generic-template > /tmp/vmx-generic-temp.vmx
11
+sed "s|VMDK_IMAGE|$PHOTON_IMG_OUTPUT_PATH/photon-generic-custom.vmdk|" vmx-generic-template > /tmp/vmx-generic-temp-custom.vmx
12
+
13
+cp update_custom_password.py $PHOTON_IMG_OUTPUT_PATH/
14
+
15
+cd $SRC_ROOT/tools/src/vixDiskUtil
16
+mkdir -p $SRC_ROOT/tools/bin
17
+make clean
18
+make
19
+$SRC_ROOT/tools/bin/vixdiskutil -convert $PHOTON_IMG_OUTPUT_PATH/photon-ova_generic.raw -cap 16000 $PHOTON_IMG_OUTPUT_PATH/photon-generic-ova.vmdk
20
+$SRC_ROOT/tools/bin/vixdiskutil -wmeta toolsVersion 2147483647 $PHOTON_IMG_OUTPUT_PATH/photon-generic-ova.vmdk
21
+
22
+cd $PHOTON_IMG_OUTPUT_PATH
23
+
24
+mkdir -p $PHOTON_IMG_OUTPUT_PATH/temp
25
+ovftool /tmp/vmx-generic-temp.vmx $PHOTON_IMG_OUTPUT_PATH/temp/photon-generic-ova.ovf
26
+cd $PHOTON_IMG_OUTPUT_PATH/temp
27
+
28
+sed -i "s/otherGuest/other3xLinux64Guest/g" $PHOTON_IMG_OUTPUT_PATH/temp/photon-generic-ova.ovf
29
+#Add product info
30
+sed -i '/\/VirtualSystem>/i \ \t<ProductSection> \n \t\t<Info>Information about the installed software</Info> \n \t\t<Product>Photon</Product> \n \t\t<Vendor>VMware Inc.</Vendor> \n \t\t<Version>1.0.0</Version> \n \t\t<FullVersion>1.0.0-TP2</FullVersion> \n \t</ProductSection> ' $PHOTON_IMG_OUTPUT_PATH/temp/photon-generic-ova.ovf
31
+rm -f $PHOTON_IMG_OUTPUT_PATH/temp/photon-generic-ova.mf
32
+openssl sha1 *.vmdk photon-generic-ova.ovf > photon-generic-ova.mf
33
+tar cf photon-generic-ova-$PHOTON_RELEASE_VER-$PHOTON_BUILD_NUM.ova photon-generic-ova.ovf photon-generic-ova.mf photon-generic-ova-disk1.vmdk
34
+cp $PHOTON_IMG_OUTPUT_PATH/temp/photon-generic-ova-$PHOTON_RELEASE_VER-$PHOTON_BUILD_NUM.ova $PHOTON_IMG_OUTPUT_PATH/
35
+cd $PHOTON_IMG_OUTPUT_PATH
36
+ln -s photon-generic-ova-$PHOTON_RELEASE_VER-$PHOTON_BUILD_NUM.ova photon-generic-ova.ova
37
+rm -rf photon-generic-custom
38
+DISK_DEVICE=`losetup --show -f ${PHOTON_IMG_OUTPUT_PATH}/photon-ova_generic.raw`
39
+kpartx -av $DISK_DEVICE
40
+
41
+DEVICE_NAME=`echo $DISK_DEVICE|cut -c6- `
42
+
43
+rm -rf $PHOTON_IMG_OUTPUT_PATH/photon-generic-custom
44
+mkdir $PHOTON_IMG_OUTPUT_PATH/photon-generic-custom
45
+
46
+mount -v -t ext4 /dev/mapper/${DEVICE_NAME}p2 $PHOTON_IMG_OUTPUT_PATH/photon-generic-custom
47
+#The defined password is 'changeme'
48
+cp $PHOTON_IMG_OUTPUT_PATH/photon-generic-custom/etc/shadow $PHOTON_IMG_OUTPUT_PATH/photon-generic-custom/etc/shadow.bak
49
+sed -e "s/^\(root:\)[^:]*:/\1x:/" $PHOTON_IMG_OUTPUT_PATH/photon-generic-custom/etc/shadow.bak > $PHOTON_IMG_OUTPUT_PATH/photon-generic-custom/etc/shadow
50
+./update_custom_password.py changeme $PHOTON_IMG_OUTPUT_PATH/photon-generic-custom
51
+rm -f $PHOTON_IMG_OUTPUT_PATH/photon-generic-custom/etc/shadow-
52
+rm -f $PHOTON_IMG_OUTPUT_PATH/photon-generic-custom/etc/shadow.bak
53
+# Force immediate password expiry
54
+chroot $PHOTON_IMG_OUTPUT_PATH/photon-generic-custom /bin/bash -c "chage -d 0 root"
55
+umount $PHOTON_IMG_OUTPUT_PATH/photon-generic-custom
56
+kpartx -d $DISK_DEVICE
57
+
58
+rm -rf photon-generic-custom
59
+
60
+echo "Detaching loop device from raw disk"
61
+losetup -d $DISK_DEVICE
62
+
63
+$SRC_ROOT/tools/bin/vixdiskutil -convert $PHOTON_IMG_OUTPUT_PATH/photon-ova_generic.raw -cap 16000 $PHOTON_IMG_OUTPUT_PATH/photon-generic-custom.vmdk
64
+
65
+$SRC_ROOT/tools/bin/vixdiskutil -wmeta toolsVersion 2147483647 $PHOTON_IMG_OUTPUT_PATH/photon-generic-custom.vmdk
66
+
67
+mkdir -p $PHOTON_IMG_OUTPUT_PATH/temp1
68
+ovftool /tmp/vmx-generic-temp-custom.vmx $PHOTON_IMG_OUTPUT_PATH/temp1/photon-generic-custom.ovf
69
+cd $PHOTON_IMG_OUTPUT_PATH/temp1
70
+sed -i "s/otherGuest/other3xLinux64Guest/g" $PHOTON_IMG_OUTPUT_PATH/temp1/photon-generic-custom.ovf
71
+#Add product info
72
+sed -i '/\/VirtualSystem>/i \ \t<ProductSection> \n \t\t<Info>Information about the installed software</Info> \n \t\t<Product>Photon</Product> \n \t\t<Vendor>VMware Inc.</Vendor> \n \t\t<Version>1.0.0</Version> \n \t\t<FullVersion>1.0.0-TP2</FullVersion> \n \t</ProductSection> ' $PHOTON_IMG_OUTPUT_PATH/temp1/photon-generic-custom.ovf
73
+rm -f $PHOTON_IMG_OUTPUT_PATH/temp1/photon-generic-custom.mf
74
+openssl sha1 *.vmdk photon-generic-custom.ovf > photon-generic-custom.mf
75
+tar cf photon-generic-custom-$PHOTON_RELEASE_VER-$PHOTON_BUILD_NUM.ova photon-generic-custom.ovf photon-generic-custom.mf photon-generic-custom-disk1.vmdk
76
+cp $PHOTON_IMG_OUTPUT_PATH/temp1/photon-generic-custom-$PHOTON_RELEASE_VER-$PHOTON_BUILD_NUM.ova $PHOTON_IMG_OUTPUT_PATH/
77
+cd $PHOTON_IMG_OUTPUT_PATH
78
+ln -s photon-generic-custom-$PHOTON_RELEASE_VER-$PHOTON_BUILD_NUM.ova photon-generic-custom.ova
79
+rm -rf $PHOTON_IMG_OUTPUT_PATH/temp/
80
+rm -rf $PHOTON_IMG_OUTPUT_PATH/temp1/
81
+rm -f $PHOTON_IMG_OUTPUT_PATH/photon-ova_generic.raw
0 82
new file mode 100755
... ...
@@ -0,0 +1,32 @@
0
+#!/usr/bin/python2
1
+
2
+import os
3
+import crypt
4
+import random
5
+import string
6
+import sys
7
+import re
8
+
9
+
10
+def crypt_password(password, root_path):
11
+    shadow_password = crypt.crypt(password, "$6$" + "".join([random.choice(string.ascii_letters + string.digits) for _ in range(16)]))
12
+
13
+    shadow_filename = os.path.join(root_path, 'etc/shadow')
14
+    
15
+    if os.path.isfile(shadow_filename) == False:
16
+        with open(shadow_filename, "w") as destination:
17
+            destination.write("root:"+shadow_password+":")
18
+    else:
19
+        #add password hash in shadow file
20
+        with open(shadow_filename, "r") as source:
21
+            lines=source.readlines()
22
+
23
+        with open(shadow_filename, "w") as destination:
24
+            for line in lines:
25
+                destination.write(re.sub("root:x:",  "root:"+shadow_password+":",  line))
26
+
27
+if __name__ == '__main__':
28
+    if len(sys.argv) < 3:
29
+        print ("Usage : update_custom_password.py <password> <root_path>")
30
+        sys.exit(1)
31
+    crypt_password(str(sys.argv[1]), str(sys.argv[2]))
0 32
new file mode 100644
... ...
@@ -0,0 +1,12 @@
0
+{
1
+	"hostname": "photon-machine",
2
+	"password": 
3
+		{
4
+			"crypted": false,
5
+			"text": "PASSWORD"
6
+		},
7
+	"type": "minimal",
8
+    "size": {"root": "8", "swap": "0"},
9
+    "public_key":"<ssh-key-here>"
10
+}
11
+
0 12
new file mode 100644
... ...
@@ -0,0 +1,22 @@
0
+.encoding = "UTF-8"
1
+virtualHW.version = "10"
2
+scsi0.present = "TRUE"
3
+scsi0.virtualDev = "pvscsi"
4
+scsi0:0.present = "TRUE"
5
+scsi0:0.fileName = "VMDK_IMAGE"
6
+ethernet0.present = "TRUE"
7
+ethernet0.virtualDev = "vmxnet3"
8
+ethernet0.wakeOnPcktRcv = "FALSE"
9
+ethernet0.addressType = "generated"
10
+ethernet0.linkStatePropagation.enable = "TRUE"
11
+ethernet0.connectionType = "None"
12
+displayName = "Photon"
13
+guestOS = "*other26xLinux64Guest"
14
+memsize = "2048"
15
+ide1:0.present = "TRUE"
16
+ide1:0.autodetect = "TRUE"
17
+ide1:0.deviceType = "cdrom-raw"
18
+ide1:0.startConnected = "FALSE"
19
+
20
+
21
+