It was back in 2003-04 when I had worked on linux with RedHat 2x & 3x, Fedora 2x and Knoppix 3x. After that for almost a decade I didn’t use linux.
In last few years (since late 2014) I have been playing Ubuntu releases as part of my experiments, learning DevOps tools and data science topics.
I have another laptop at home with Windows and Ubuntu dual boot which I keep switching between. At times when I am travelling, my preferred option is using Hyper-v virtual machines.
In this post, I will share my recipe building Ubuntu 16.04 virtual machine in unattended mode using PowerShell script.
- This script is output my experiment with Hyper-V, PowerShell & Bash on Windows 10 PRO. I have not added extensive error/exception handling.
- To keep post focused on experiment and outcome, I have drafted much about Kickstart and Preseeding in Linux. I have provided reference to get good enough idea about it.
- I ran this script 7 times after creating and it produced working VM in an average 35 minutes.
- Ubuntu 16.04 ISO (download)
- Baseline Kickstart Configuration File (found one generic sample at )
- Baseline Preseed file (found example at )
- mkisofs utility (found Windows edition at )
- Hyper-V OR any other virtualization to host VM (I am on Windows 10 PRO with Hyper-V)
- Good enough free disk space (About 50-80 GB should be good enough)
- Run the script to build iso for unattended setup.
- Connect to VM (last step in script hence actually not extra step)
- Connect through SSH and work with VM
Script Walk-through (High Level Steps)
- Setting up required variables ( line number 2 to 9 )
- Ask the user questions about user preferences ( line number 12 to 16 )
- Check if the passwords match and then generate encrypted hash to use in preseed file ( line number 19 to 29 )
- Check if the root passwords match and generate encrypted hash to use in ks.cfg file ( line number 32 to 42 )
- Creating/Verifying Required Folder Structure is available to work ( line number 45 to 69 )
- Mounting C:\LabSources\ISOs\ubuntu-16.04.1-server-amd64.iso file and copy content locally ( line number 72 to 82 )
- Copy baseline Kickstart Configuration File [ks.cfg] To Working Folder ( line number 85 )
- Copy baseline Seed File [mshende.seed in my case] (answers for unattended setup) To Working Folder ( line number 88 )
- Update the ks.cfg file to reflect encrypted root password hash ( line number 91 )
- Update the mshende.seed file to reflect the user’s choices ( line number 94 to 97 )
- Update the isolinux.cfg file to reflect boot time choices ( line number 100 to 101 )
- Building installer menu choice to make it default and use ks.cfg and mshende.seed files ( line number 104 to 111 )
- Creating new ISO file at C:\LabSources\ISOs\ubuntu-16.04.1-server-amd64-unattended.iso ( line number 116 )
- Create Hyper-V Virtual Machine ( line number 119 to 128 )
- Add host entry on my physical machine pointing to VM ip address to connect VM over ssh ( line number 130 )
- Starting Virtual Machine and Connecting through VM console ( line number 135 to 136 )
- Connect to server once ready using putty ( line number 139, type manually once VM is ready after setup)
- Download Complete script (Create-Ubuntu1604Server.ps1)
- ks.cfg used in script
- mshende.seed used in script
- I am not expert in Linux, however being conceptually aware on diverse topics, I was able to use PowerShell to get what I want.
- There are many options (both cloud and on-premise) available these days to host virtual machines. This is not about what is better v/s bad. This is about using available resources.
- While writing this I couldn’t find best suitable alternatives for mkpasswd (line number 36) and mkisofs.exe ( line number 116 ) natively in/with PowerShell. However, because PowerShell can work with variety of applications, I was able to proceed without getting stuck.
- In this case mkpasswd ( line number 36 ), I am calling bash command from Bash on Windows 10 and use in my script.
- In this case of mkisofs which is available in bash shell, but I was not able to get it working like in the case of line number 36. I found Windows platform download at https://code.google.com/archive/p/mkisofs-md5/downloads.