Author: Cesar Jorge Martínez
Site: https://cesarjorgemartinez.github.io/automate-virtual-machine-linux-images
Read the LICENSE GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
- 1. Introduction
- 2. Operating Systems that can be built
- 3. Create and configure the environment
- 3.1. Install VirtualBox
- 3.2. Install VMware Workstation Player
- 3.3. Install CygWin 64 bits
- 3.4. Disable Windows Python installation
- 3.5. Install needed CygWin packages
- 3.6. Install Python system pip packages
- 3.7. Configure your Git environment to work with github
- 3.8. Howto generate SHA-512 password hashes with Python3 in CygWin command line
- 4. Getting started
- 5. Build CentOS 7 Minimal image
- 6. Build CentOS 8 Minimal image
- 7. Build Ubuntu 20 Minimal image
This project helps to build automatically multiple Virtual Machine Images of Operating Systems that are compatible with different virtualization systems, as OpenStack, KVM, VirtualBox, VMware, VMware ESXI, Nutanix, etc.
The image formats that are generated are the following:
- vmdk: For VirtualBox, VMware and VMware ESXI.
- ovf: For VirtualBox, VMware and VMware ESXI.
- qcow2: For OpenStack, KVM and Nutanix.
The virtualization system VirtualBox also uses the vdi format but it is not necessary since the VirtualBox itself converts the vmdk format into vdi.
You can deploy and boot directly these images in these virtualization systems without doing anything special or extra, thanks to the use of two systemd units:
- control-cloud-init.service: If the virtual machine boots in OpenStack or KVM or AWS then lets execute
cloud-init
. If the virtual machine boots in VMware or VirtualBox or other virtualization systems then maskcloud-init
. - guest-vmtools.service: If the virtual machine boots inside VirtualBox then install its GuestTools disabling others. If the virtual machine boots inside VMware or VMware ESXI then install its VMwareTools disabling others.
These images are ideal to work as servers in Cloud, traditional or development environments, and is very useful to work with Docker, because the size of the image created is very small and clean. These images are builded with a Linux admin account provided as parameter at the time of build. The cloud-init
software use other account provided as optional parameter at the time of build (not created because the cloud-init
do this work at the first boot of the virtual machine) that by default is cloud-user. Also these images come with six network intefaces named eth0
, eth1
, eth2
, eth3
, eth4
and eth5
by default.
To work with this software you need Windows 10 64 bits and CygWin 64 bits to use Linux-Bash commands.
This project has been tested with the following software versions:
- Windows:
10 64 bits updated
- VirtualBox:
6.1.16
- CygWin 64 bits:
64 bits 3.1.7(0.340/5/3)
- QEMU for Windows:
qemu-w64-setup-20201124 qemu-img version 5.1.92 (v5.2.0-rc2-11843-gf571c4ffb5-dirty)
- VMware Workstation Player:
16.1.0 build-17198959
- VMware ESXI:
6.5
and6.7
- OpenStack (
curl https://<identity_endpoint>:13000/v3
):3.7 Newton
- Nutanix:
community edition 5.18
Actually you can build the following Operating Systems:
- CentOS 7 Minimal:
CentOS 7.9 (2009)
- CentOS 8 Minimal:
CentOS 8.2 (2004)
andCentOS 8.3 (2011)
- Ubuntu 20 Minimal:
Ubuntu 20.04.1 (server)
You need to do the next tasks.
Go to this URL https://www.virtualbox.org/wiki/Downloads and install latest VirtualBox for Windows. You need to ensure that in addition to installing VirtualBox you also install Oracle VM VirtualBox Extension Pack.
Go to this URL https://www.vmware.com/go/downloadworkstationplayer and install latest VMware Workstation Player for Windows.
This is optional step only if you will be use VMware or VMware ESXI.
To install CygWin 64 bits you need to do the following tasks:
- With a browser download https://cygwin.com/setup-x86_64.exe.
- Install this doing right button of the mouse over this downloaded file, and
Run as admistrator
. - Following.
- Install from Internet.
- Following.
- Local Package Directory:
C:\cygwin64\mypackages
. - Use System Proxy Settings.
- Choose A Download Site, choose one and:
- Following.
- Use default packages (Don't select others).
- Following.
- Following.
- Finalize.
When terminate these tasks, then:
- In
Cygwin64 Terminal Desktop Icon
click on right button of the mouse and selectproperties
. - Click in
Advanced options
. - Set
Run as administrator
and clickAccept
andAccept
.
To prevent that CygWin use the Python installed in Windows (if exist), do the following to disable access to Windows Python installation:
- Enter in a Cygwin64 session.
- Launch this:
echo $'PATH=$(echo $PATH | tr \':\' \'\\n\' | grep -v "/cygdrive/.*/Python[23]" | paste -sd:)' >> .bash_profile
exit
You need to do the following tasks:
- Enter in a Cygwin64 session.
- Launch this:
curl -O https://cygwin.com/setup-x86_64.exe
./setup-x86_64.exe -q --upgrade-also --packages="bash,python2,python2-devel,python2-setuptools,python2-crypto,python2-paramiko,python2-boto,python2-certifi,python2-pip,python2-nacl,python3,python3-devel,python38,python38-devel,openssl,openssh,openssl-devel,libffi-devel,gcc-g++,git,nc,nc6,libsodium-common,libsodium-devel,dialog,figlet,rsync,gettext,autoconf,automake,binutils,cygport,gcc-core,make,lynx,zip,sshpass,jq,expect,procps-ng"
To work with Python install basic pip packages in a system level:
TODO: Check if this tasks are obsoleted using last CygWin version. In a existing CygWin installation is not necessary.
- Enter in a Cygwin64 session.
- Launch this:
easy_install-2.7 pip
pip install --upgrade pip
pip install --upgrade setuptools
pip install --upgrade wheel
pip install --upgrade virtualenv
pip install --upgrade terrafile
To work with https://github.com you need to do the next tasks. Example to use Git with SSH.
-
Get your public and private SSH keys of your GitHub account.
-
Enter in a Cygwin64 session.
mkdir -p ~/.ssh
echo "StrictHostKeyChecking no
UserKnownHostsFile /dev/null
ServerAliveInterval 30
ServerAliveCountMax 3
ControlMaster no
Host github.com
IdentityFile ~/.ssh/id_rsa_private_github
" > ~/.ssh/config
-
Store your public key to
~/.ssh/id_rsa_private_github.pub
and your private key to~/.ssh/id_rsa_private_github
. -
Set good permissions in the SSH config folder.
chmod 600 ~/.ssh/*
chmod 700 ~/.ssh
- Configure your Git client settings. You need the
user.name
anduser.email
of your GitHub account. Enter in a Cygwin64 session.
git config --system color.ui "true"
git config --system alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"
git config --system user.name "<your user.name>"
git config --system user.email "<your user.email>"
git config --system http.sslVerify false
To generate SHA-512
password hashes you need to do the following tasks:
-
Enter in a Cygwin64 session.
-
Launch this command where
password
is the plain text password:
python3 -c 'import crypt; print(crypt.crypt("password", crypt.mksalt(crypt.METHOD_SHA512)))'
After you have completed the previous sections, follow the next steps.
Do the following tasks:
git clone git@github.com:cesarjorgemartinez/automate-virtual-machine-linux-images.git
cd automate-virtual-machine-linux-images
The QEMU for Windows is needed to convert the vmdk to qcow2 image format. Launch this command:
download-and-install-qemu.sh
Then a QEMU for Windows installer window appears and do the following:
- Please select a language: Select your language, as example
English / English
- Click in OK
- Next
- I Agree
- Next
- Install
- Finish
This section explains howto build this Virtual Machine Image: Build CentOS 7 Minimal image.
This section explains howto build this Virtual Machine Image: Build CentOS 8 Minimal image.
This section explains howto build this Virtual Machine Image: Build Ubuntu 20 Minimal image.