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