added openbsd guest support
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
*.img
|
*.img
|
||||||
*.qcow2
|
*.qcow2
|
||||||
|
./openbsd-cloud-image
|
||||||
@ -1,6 +1,11 @@
|
|||||||
#!/bin/env bash
|
#!/usr/bin/env -S bash
|
||||||
|
|
||||||
# Functions
|
# Functions
|
||||||
|
pause()
|
||||||
|
{
|
||||||
|
read -s -n 1 -p "Press any key to continue . . ."
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
check_host_os()
|
check_host_os()
|
||||||
{
|
{
|
||||||
@ -13,48 +18,93 @@ check_host_os()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
show_vm_menu()
|
generate_openbsd_image()
|
||||||
{
|
{
|
||||||
# Show dinamic menu
|
local CURRENT_PATH="$PWD"
|
||||||
echo "Select VM OS:"
|
VM_BASE_IMAGE_NAME=${VM_BASE_IMAGE%%.*}
|
||||||
for entry in $(jq -r '.os_variants[] | @base64' "$OS_JSON_FILE"); do
|
VM_BASE_IMAGE_EXTENSION=${VM_BASE_IMAGE#*.}
|
||||||
decoded=$(echo "$entry" | base64 --decode)
|
git clone https://github.com/hcartiaux/openbsd-cloud-image.git
|
||||||
id=$(echo "$decoded" | jq -r .id)
|
cd openbsd-cloud-image
|
||||||
name=$(echo "$decoded" | jq -r .name)
|
./build_openbsd_qcow2.sh \
|
||||||
echo "$id. $name"
|
--image-file ${VM_BASE_IMAGE_NAME}.${VM_BASE_IMAGE_EXTENSION} \
|
||||||
done
|
--disklabel custom/disklabel.cloud \
|
||||||
|
--size ${VM_DISK_SIZE} \
|
||||||
# ID_MAX calculation
|
-b
|
||||||
ID_MAX=$(jq -r '[.os_variants[].id] | max' "$OS_JSON_FILE")
|
if ! test -f "${VM_BASE_DIR}/images/${VM_HOSTNAME}.${VM_DISK_EXTENSION}"; then
|
||||||
|
mv images/${VM_BASE_IMAGE_NAME}.${VM_BASE_IMAGE_EXTENSION} ${VM_BASE_DIR}/images/${VM_HOSTNAME}.${VM_DISK_EXTENSION}
|
||||||
# Read input
|
sudo chown -R $USER:libvirt-qemu "${VM_BASE_DIR}/images/${VM_HOSTNAME}.${VM_DISK_EXTENSION}"
|
||||||
read -r -p "Enter your choice [1-${ID_MAX}]: " answer
|
cd ${CURRENT_PATH}
|
||||||
if ! [[ "$answer" =~ ^[0-9]+$ ]] || (( answer < 1 || answer > ID_MAX )); then
|
rm -r openbsd-cloud-image
|
||||||
echo "Invalid option. Please enter a number between 1 and ${ID_MAX}."
|
else
|
||||||
|
echo "${VM_BASE_DIR}/images/${VM_HOSTNAME}.${VM_DISK_EXTENSION} already exists. Delete VM with "delete" option"
|
||||||
|
cd ${CURRENT_PATH}
|
||||||
|
rm -r openbsd-cloud-image
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
selected=$(jq -r ".os_variants[] | select(.id == $answer)" "$OS_JSON_FILE")
|
|
||||||
|
|
||||||
if [ -z "$selected" ]; then
|
|
||||||
echo "Invalid option."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Asignar variables
|
|
||||||
VM_OS_VARIANT=$(echo "$selected" | jq -r .variant)
|
|
||||||
VM_OS_TYPE=$(echo "$selected" | jq -r .os_type)
|
|
||||||
VM_BASE_IMAGE_URL=$(echo "$selected" | jq -r .url)
|
|
||||||
VM_BASE_IMAGE=$(echo "$selected" | jq -r .origin_image_name)
|
|
||||||
VM_BOOT_TYPE=$(echo "$selected" | jq -r .boot_type)
|
|
||||||
VM_CHECKSUMS_URL=$(echo "$selected" | jq -r .md5sum)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
show_vm_menu() {
|
||||||
|
# Display dynamic OS selection menu
|
||||||
|
echo "Select VM OS:"
|
||||||
|
echo "--------------"
|
||||||
|
|
||||||
|
# Array to store valid IDs for validation
|
||||||
|
VALID_IDS=()
|
||||||
|
while IFS= read -r entry; do
|
||||||
|
DECODED=$(echo "$entry" | base64 --decode)
|
||||||
|
ID=$(echo "$DECODED" | jq -r '.id')
|
||||||
|
NAME=$(echo "$DECODED" | jq -r '.name')
|
||||||
|
printf "%2s. %s\n" "$ID" "$NAME"
|
||||||
|
VALID_IDS+=("$ID")
|
||||||
|
done < <(jq -r '.os_variants[] | @base64' "$OS_JSON_FILE")
|
||||||
|
|
||||||
|
# Calculate max ID for range validation
|
||||||
|
ID_MAX=$(jq -r '[.os_variants[].id] | max' "$OS_JSON_FILE")
|
||||||
|
ID_MIN=$(jq -r '[.os_variants[].id] | min' "$OS_JSON_FILE")
|
||||||
|
|
||||||
|
# Read user input
|
||||||
|
read -r -p "Enter your choice [${ID_MIN}-${ID_MAX}]: " CHOICE
|
||||||
|
|
||||||
|
# Validate input: must be a number and within range
|
||||||
|
if ! [[ "$CHOICE" =~ ^[0-9]+$ ]]; then
|
||||||
|
echo "Error: Please enter a valid number." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( CHOICE < ID_MIN || CHOICE > ID_MAX )); then
|
||||||
|
echo "Error: Please enter a number between ${ID_MIN} and ${ID_MAX}." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get selected OS variant
|
||||||
|
SELECTED=$(jq -r ".os_variants[] | select(.id == ${CHOICE})" "$OS_JSON_FILE")
|
||||||
|
|
||||||
|
if [ -z "$SELECTED" ]; then
|
||||||
|
echo "Error: Invalid selection." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Export variables in uppercase
|
||||||
|
VM_OS_VARIANT=$(echo "$SELECTED" | jq -r '.variant')
|
||||||
|
VM_OS_TYPE=$(echo "$SELECTED" | jq -r '.os_type')
|
||||||
|
VM_BASE_IMAGE_URL=$(echo "$SELECTED" | jq -r '.url')
|
||||||
|
VM_BASE_IMAGE=$(echo "$SELECTED" | jq -r '.origin_image_name')
|
||||||
|
VM_BOOT_TYPE=$(echo "$SELECTED" | jq -r '.boot_type')
|
||||||
|
VM_CHECKSUMS_URL=$(echo "$SELECTED" | jq -r '.md5sum')
|
||||||
|
|
||||||
|
# Optional: Debug
|
||||||
|
# echo "Selected OS variant: ${VM_OS_VARIANT}"
|
||||||
|
}
|
||||||
compare_checksum()
|
compare_checksum()
|
||||||
{
|
{
|
||||||
CHECKSUM_TMP_FOLDER=$(mktemp)
|
CHECKSUM_TMP_FOLDER=$(mktemp)
|
||||||
curl -s -o "${CHECKSUM_TMP_FOLDER}" "${VM_CHECKSUMS_URL}"
|
|
||||||
if [[ "$VM_OS_TYPE" == "freebsd" ]]; then
|
wget -L \
|
||||||
|
--user-agent="Mozilla/5.0 (X11; Linux x86_64)" \
|
||||||
|
-O "${CHECKSUM_TMP_FOLDER}" \
|
||||||
|
"${VM_CHECKSUMS_URL}"
|
||||||
|
|
||||||
|
if [[ "$VM_OS_TYPE" == "BSD" && "${VM_OS_VARIANT}" == *"freebsd"* ]]; then
|
||||||
if [[ "${VM_BASE_IMAGE}" == *"zfs"* ]]; then
|
if [[ "${VM_BASE_IMAGE}" == *"zfs"* ]]; then
|
||||||
VM_BASE_IMAGE_CHECKSUM=$(grep "FreeBSD-14.3-STABLE-amd64-BASIC-CLOUDINIT" "${CHECKSUM_TMP_FOLDER}" | grep "zfs.qcow2.xz" | awk '{print $4}')
|
VM_BASE_IMAGE_CHECKSUM=$(grep "FreeBSD-14.3-STABLE-amd64-BASIC-CLOUDINIT" "${CHECKSUM_TMP_FOLDER}" | grep "zfs.qcow2.xz" | awk '{print $4}')
|
||||||
else
|
else
|
||||||
@ -63,7 +113,7 @@ compare_checksum()
|
|||||||
else
|
else
|
||||||
VM_BASE_IMAGE_CHECKSUM=$(grep "$VM_BASE_IMAGE_NAME.${VM_BASE_IMAGE_EXTENSION}" "${CHECKSUM_TMP_FOLDER}" | awk '{print $1}')
|
VM_BASE_IMAGE_CHECKSUM=$(grep "$VM_BASE_IMAGE_NAME.${VM_BASE_IMAGE_EXTENSION}" "${CHECKSUM_TMP_FOLDER}" | awk '{print $1}')
|
||||||
fi
|
fi
|
||||||
if [[ "${VM_CHECKSUMS_URL}" == *"SHA256"* ]]; then
|
if [[ "${VM_CHECKSUMS_URL}" == *"SHA256"* || "${VM_CHECKSUMS_URL}" == *"sha256"* ]]; then
|
||||||
HASH_CMD="sha256sum"
|
HASH_CMD="sha256sum"
|
||||||
elif [[ "${VM_CHECKSUMS_URL}" == *"SHA512"* ]]; then
|
elif [[ "${VM_CHECKSUMS_URL}" == *"SHA512"* ]]; then
|
||||||
HASH_CMD="sha512sum"
|
HASH_CMD="sha512sum"
|
||||||
@ -194,7 +244,7 @@ vm_delete ()
|
|||||||
}
|
}
|
||||||
vm_download_base_image()
|
vm_download_base_image()
|
||||||
{
|
{
|
||||||
if [[ "$VM_OS_TYPE" == "freebsd" ]]; then
|
if [[ "$VM_OS_TYPE" == "BSD" && "${VM_OS_VARIANT}" == *"freebsd"* ]]; then
|
||||||
if [[ "${VM_BASE_IMAGE}" == *"zfs"* ]]; then
|
if [[ "${VM_BASE_IMAGE}" == *"zfs"* ]]; then
|
||||||
VM_BASE_IMAGE_NAME="${VM_OS_VARIANT}-zfs"
|
VM_BASE_IMAGE_NAME="${VM_OS_VARIANT}-zfs"
|
||||||
else
|
else
|
||||||
@ -207,14 +257,17 @@ vm_download_base_image()
|
|||||||
fi
|
fi
|
||||||
VM_BASE_IMAGE_LOCATION="${VM_BASE_DIR}/${VM_BASE_IMAGES}/${VM_BASE_IMAGE_NAME}.${VM_BASE_IMAGE_EXTENSION}"
|
VM_BASE_IMAGE_LOCATION="${VM_BASE_DIR}/${VM_BASE_IMAGES}/${VM_BASE_IMAGE_NAME}.${VM_BASE_IMAGE_EXTENSION}"
|
||||||
if ! test -f "${VM_BASE_IMAGE_LOCATION}"; then
|
if ! test -f "${VM_BASE_IMAGE_LOCATION}"; then
|
||||||
wget -O "${VM_BASE_IMAGE_LOCATION}" ${VM_BASE_IMAGE_URL}
|
wget -L \
|
||||||
|
--user-agent="Mozilla/5.0 (X11; Linux x86_64)" \
|
||||||
|
-O "${VM_BASE_IMAGE_LOCATION}" \
|
||||||
|
${VM_BASE_IMAGE_URL}
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
vm_create_guest_image()
|
vm_create_guest_image()
|
||||||
{
|
{
|
||||||
if [[ "$VM_OS_TYPE" == "freebsd" ]]; then
|
if [[ "$VM_OS_TYPE" == "BSD" && "${VM_OS_VARIANT}" == *"freebsd"* ]]; then
|
||||||
if ! test -f "${VM_BASE_DIR}/images/${VM_HOSTNAME}.qcow"; then
|
if ! test -f "${VM_BASE_DIR}/images/${VM_HOSTNAME}.qcow"; then
|
||||||
xz -d ${VM_BASE_IMAGE_LOCATION}
|
xz -d ${VM_BASE_IMAGE_LOCATION}
|
||||||
fi
|
fi
|
||||||
@ -246,81 +299,104 @@ vm_generate_ssh_hey()
|
|||||||
#rm "${VM_BASE_DIR}/ssh/${VM_HOSTNAME}".pub.txt
|
#rm "${VM_BASE_DIR}/ssh/${VM_HOSTNAME}".pub.txt
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# vm_gen_user_data()
|
||||||
|
# {
|
||||||
|
# VM_USER_PASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 8; echo)
|
||||||
|
# VM_USER_PASS_HASH=$(mkpasswd --method=SHA-512 --rounds=4096 ${VM_USER_PASS})
|
||||||
|
# #FREEBSD GUEST
|
||||||
|
# if [[ "$VM_OS_TYPE" == "BSD" && "${VM_OS_VARIANT}" == *"freebsd"* ]]; then
|
||||||
|
# VM_ROOT_PASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 8; echo)
|
||||||
|
# VM_ROOT_PASS_HASH=$(mkpasswd --method=SHA-512 --rounds=4096 ${VM_ROOT_PASS})
|
||||||
|
# cat <<EOF > "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
||||||
|
# #cloud-config
|
||||||
|
# hostname: ${VM_HOSTNAME}
|
||||||
|
# package_reboot_if_required: true
|
||||||
|
# package_update: true
|
||||||
|
# package_upgrade: true
|
||||||
|
# packages:
|
||||||
|
# - sudo
|
||||||
|
# - vim
|
||||||
|
# ssh_pwauth: false
|
||||||
|
# users:
|
||||||
|
# - name: root
|
||||||
|
# lock_passwd: false
|
||||||
|
# hashed_passwd: ${VM_ROOT_PASS_HASH}
|
||||||
|
# - name: ${VM_USERNAME}
|
||||||
|
# ssh_authorized_keys:
|
||||||
|
# - ${SSH_PUB_KEY}
|
||||||
|
# lock_passwd: true
|
||||||
|
# groups: wheel
|
||||||
|
# shell: /bin/tcsh
|
||||||
|
|
||||||
|
# write_files:
|
||||||
|
# - path: /usr/local/etc/sudoers
|
||||||
|
# content: |
|
||||||
|
# %wheel ALL=(ALL) NOPASSWD: ALL
|
||||||
|
# append: true
|
||||||
|
# EOF
|
||||||
|
# #OPENBSD
|
||||||
|
# elif [[ "$VM_OS_TYPE" == "BSD" && "${VM_OS_VARIANT}" == *"openbsd"* ]]; then
|
||||||
|
# #"disable_root": true
|
||||||
|
# cat <<EOF > "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
||||||
|
# #cloud-config
|
||||||
|
# "hostname": ${VM_HOSTNAME}
|
||||||
|
# "package_upgrade": true
|
||||||
|
# "packages":
|
||||||
|
# - "bash"
|
||||||
|
# - "vim--no_x11"
|
||||||
|
# "ssh_pwauth": false
|
||||||
|
# "users":
|
||||||
|
# - "name": ${VM_USERNAME}
|
||||||
|
# "sudo": "ALL=(ALL) NOPASSWD:ALL"
|
||||||
|
# "groups": wheel
|
||||||
|
# "hashed_passwd": "!"
|
||||||
|
# "lock_passwd": true
|
||||||
|
# "shell": "/usr/local/bin/bash"
|
||||||
|
# "ssh_authorized_keys":
|
||||||
|
# - ${SSH_PUB_KEY}
|
||||||
|
# - "name": "root"
|
||||||
|
# "hashed_passwd": "!"
|
||||||
|
# "lock_passwd": true
|
||||||
|
# write_files:
|
||||||
|
# - path: /etc/sudoers
|
||||||
|
# content: |
|
||||||
|
# %wheel ALL=(ALL) NOPASSWD: ALL
|
||||||
|
# append: true
|
||||||
|
# EOF
|
||||||
|
# else
|
||||||
|
# cat <<EOF > "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
||||||
|
# #cloud-config
|
||||||
|
# hostname: ${VM_HOSTNAME}
|
||||||
|
# # manage_etc_hosts: false
|
||||||
|
# ssh_pwauth: true
|
||||||
|
# disable_root: true
|
||||||
|
# users:
|
||||||
|
# - name: ${VM_USERNAME}
|
||||||
|
# hashed_passwd: ${VM_USER_PASS_HASH}
|
||||||
|
# sudo: ALL=(ALL) NOPASSWD:ALL
|
||||||
|
# shell: /bin/bash
|
||||||
|
# lock-passwd: false
|
||||||
|
# ssh_authorized_keys:
|
||||||
|
# - ${SSH_PUB_KEY}
|
||||||
|
# EOF
|
||||||
|
# fi
|
||||||
|
# }
|
||||||
|
|
||||||
|
|
||||||
vm_gen_user_data()
|
vm_gen_user_data()
|
||||||
{
|
{
|
||||||
VM_USER_PASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 8; echo)
|
if [[ "$VM_OS_TYPE" == "BSD" && "${VM_OS_VARIANT}" == *"freebsd"* ]]; then
|
||||||
VM_USER_PASS_HASH=$(mkpasswd --method=SHA-512 --rounds=4096 ${VM_USER_PASS})
|
VM_USER_DATA_FILE="files/freebsd-user-data"
|
||||||
#FREEBSD GUEST
|
elif [[ "$VM_OS_TYPE" == "BSD" && "${VM_OS_VARIANT}" == *"openbsd"* ]]; then
|
||||||
if [[ "$VM_OS_TYPE" == "freebsd" ]]; then
|
VM_USER_DATA_FILE="files/openbsd-user-data"
|
||||||
VM_ROOT_PASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 8; echo)
|
else
|
||||||
VM_ROOT_PASS_HASH=$(mkpasswd --method=SHA-512 --rounds=4096 ${VM_ROOT_PASS})
|
VM_USER_DATA_FILE="files/linux-user-data"
|
||||||
cat <<EOF > "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
fi
|
||||||
#cloud-config
|
cp ${VM_USER_DATA_FILE} "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
||||||
hostname: ${VM_HOSTNAME}
|
sed -i "s|__SSH_PUB_KEY__|${SSH_PUB_KEY}|g" "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
||||||
package_reboot_if_required: true
|
sed -i "s|__VM_USERNAME__|${VM_USERNAME}|g" "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
||||||
package_update: true
|
|
||||||
package_upgrade: true
|
|
||||||
packages:
|
|
||||||
- sudo
|
|
||||||
- vim
|
|
||||||
ssh_pwauth: false
|
|
||||||
users:
|
|
||||||
- name: root
|
|
||||||
lock_passwd: false
|
|
||||||
hashed_passwd: ${VM_ROOT_PASS_HASH}
|
|
||||||
- name: ${VM_USERNAME}
|
|
||||||
ssh_authorized_keys:
|
|
||||||
- ${SSH_PUB_KEY}
|
|
||||||
lock_passwd: true
|
|
||||||
groups: wheel
|
|
||||||
shell: /bin/tcsh
|
|
||||||
write_files:
|
|
||||||
- path: /usr/local/etc/sudoers
|
|
||||||
content: |
|
|
||||||
%wheel ALL=(ALL) NOPASSWD: ALL
|
|
||||||
append: true
|
|
||||||
EOF
|
|
||||||
#LINUX GUEST
|
|
||||||
else
|
|
||||||
cat <<EOF > "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
|
||||||
#cloud-config
|
|
||||||
hostname: ${VM_HOSTNAME}
|
|
||||||
# manage_etc_hosts: false
|
|
||||||
ssh_pwauth: true
|
|
||||||
disable_root: true
|
|
||||||
users:
|
|
||||||
- name: ${VM_USERNAME}
|
|
||||||
hashed_passwd: ${VM_USER_PASS_HASH}
|
|
||||||
sudo: ALL=(ALL) NOPASSWD:ALL
|
|
||||||
shell: /bin/bash
|
|
||||||
lock-passwd: false
|
|
||||||
ssh_authorized_keys:
|
|
||||||
- ${SSH_PUB_KEY}
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# vm_gen_user_data()
|
|
||||||
# {
|
|
||||||
# VM_USER_DATA_FILE=files/user-data
|
|
||||||
# VM_USER_PASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 8; echo)
|
|
||||||
# VM_USER_PASS_HASH=$(mkpasswd --method=SHA-512 --rounds=4096 ${VM_USER_PASS})
|
|
||||||
# #FREEBSD GUEST
|
|
||||||
# if [[ "$VM_OS_TYPE" == "freebsd" ]]; then
|
|
||||||
# VM_ROOT_PASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 8; echo)
|
|
||||||
# VM_ROOT_PASS_HASH=$(mkpasswd --method=SHA-512 --rounds=4096 ${VM_ROOT_PASS})
|
|
||||||
# VM_USER_DATA_FILE="files/freebsd-user-data"
|
|
||||||
# fi
|
|
||||||
# cp ${VM_USER_DATA_FILE} "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
|
||||||
# sed -i "s|__SSH_KEY__|${SSH_PUB_KEY}|g" "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
|
||||||
# sed -i "s| __USER_PASSWORD__|${VM_USER_PASS_HASH}|g" "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
|
||||||
# sed -i "s| __USER_NAME__|${VM_USERNAME}|g" "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
|
||||||
# if [[ "$VM_OS_TYPE" == "freebsd" ]]; then
|
|
||||||
# sed -i "s| __ROOT_PASSWORD__|${VM_ROOT_PASS_HASH} |g" "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
|
||||||
# fi
|
|
||||||
# }
|
|
||||||
|
|
||||||
vm_gen_meta_data()
|
vm_gen_meta_data()
|
||||||
{
|
{
|
||||||
cp files/meta-data "$VM_BASE_DIR/init/${VM_HOSTNAME}-meta-data"
|
cp files/meta-data "$VM_BASE_DIR/init/${VM_HOSTNAME}-meta-data"
|
||||||
@ -329,8 +405,13 @@ vm_gen_meta_data()
|
|||||||
|
|
||||||
vm_set_guest_type()
|
vm_set_guest_type()
|
||||||
{
|
{
|
||||||
if [[ "$VM_OS_TYPE" == "freebsd" ]]; then
|
if [[ "$VM_OS_TYPE" == "BSD" ]]; then
|
||||||
VM_OS_VARIANT=${GUEST_OS_TYPE_FREEBSD}
|
if [[ "${VM_OS_VARIANT}" == *"freebsd"* ]]; then
|
||||||
|
VM_OS_VARIANT=${GUEST_OS_TYPE_FREEBSD}
|
||||||
|
fi
|
||||||
|
if [[ "${VM_OS_VARIANT}" == *"openbsd"* ]]; then
|
||||||
|
VM_OS_VARIANT=${GUEST_OS_TYPE_OPENBSD}
|
||||||
|
fi
|
||||||
elif [[ "${VM_OS_VARIANT}" == *"debian13"* ]]; then
|
elif [[ "${VM_OS_VARIANT}" == *"debian13"* ]]; then
|
||||||
VM_OS_VARIANT=${GUEST_OS_TYPE_DEBIAN}
|
VM_OS_VARIANT=${GUEST_OS_TYPE_DEBIAN}
|
||||||
fi
|
fi
|
||||||
@ -357,5 +438,7 @@ vm_guest_install()
|
|||||||
clear
|
clear
|
||||||
echo "VM ${VM_HOSTNAME} Created!"
|
echo "VM ${VM_HOSTNAME} Created!"
|
||||||
echo "NOTE: It may take some time for the virtual machine to be available if it is a BSD flavor. You can check the status of the virtual machine with the following command:"
|
echo "NOTE: It may take some time for the virtual machine to be available if it is a BSD flavor. You can check the status of the virtual machine with the following command:"
|
||||||
|
echo "root pass is(only for BSD flavour): ${VM_USER_PASS}"
|
||||||
|
echo "user pass is: ${VM_USER_PASS}"
|
||||||
echo "virsh console ${VM_HOSTNAME} --safe"
|
echo "virsh console ${VM_HOSTNAME} --safe"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
#!/bin/env bash
|
#!/bin/env bash
|
||||||
GUEST_OS_TYPE_DEBIAN="debian13"
|
GUEST_OS_TYPE_DEBIAN="debian13"
|
||||||
GUEST_OS_TYPE_FREEBSD="freebsd14.2"
|
GUEST_OS_TYPE_FREEBSD="freebsd14.2"
|
||||||
|
GUEST_OS_TYPE_OPENBSD="openbsd7.6"
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
#!/bin/env bash
|
#!/bin/env bash
|
||||||
GUEST_OS_TYPE_DEBIAN="debian11"
|
GUEST_OS_TYPE_DEBIAN="debian11"
|
||||||
GUEST_OS_TYPE_FREEBSD="freebsd13.1"
|
GUEST_OS_TYPE_FREEBSD="freebsd13.1"
|
||||||
|
GUEST_OS_TYPE_OPENBSD="openbsd7.0"
|
||||||
|
|||||||
25
files/freebsd-user-data
Normal file
25
files/freebsd-user-data
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#cloud-config
|
||||||
|
package_reboot_if_required: true
|
||||||
|
package_update: true
|
||||||
|
package_upgrade: true
|
||||||
|
packages:
|
||||||
|
- sudo
|
||||||
|
- vim
|
||||||
|
ssh_pwauth: false
|
||||||
|
users:
|
||||||
|
- name: __VM_USERNAME__
|
||||||
|
sudo: "ALL=(ALL) NOPASSWD:ALL"
|
||||||
|
groups: wheel
|
||||||
|
hashed_passwd: "!"
|
||||||
|
lock_passwd: true
|
||||||
|
shell: /bin/tcsh
|
||||||
|
ssh_authorized_keys:
|
||||||
|
- __SSH_PUB_KEY__
|
||||||
|
- name: root
|
||||||
|
hashed_passwd: "!"
|
||||||
|
lock_passwd: true
|
||||||
|
write_files:
|
||||||
|
- path: /usr/local/etc/sudoers
|
||||||
|
content: |
|
||||||
|
%wheel ALL=(ALL) NOPASSWD: ALL
|
||||||
|
append: true
|
||||||
14
files/linux-user-data
Normal file
14
files/linux-user-data
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#cloud-config
|
||||||
|
ssh_pwauth: true
|
||||||
|
disable_root: true
|
||||||
|
package_reboot_if_required: true
|
||||||
|
package_update: true
|
||||||
|
package_upgrade: true
|
||||||
|
users:
|
||||||
|
- name: __VM_USERNAME__
|
||||||
|
ssh_authorized_keys:
|
||||||
|
- __SSH_PUB_KEY__
|
||||||
|
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
|
||||||
|
groups: sudo
|
||||||
|
shell: /bin/bash
|
||||||
|
lock-passwd: true
|
||||||
25
files/openbsd-user-data
Normal file
25
files/openbsd-user-data
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#cloud-config
|
||||||
|
package_reboot_if_required: true
|
||||||
|
package_update: true
|
||||||
|
package_upgrade: true
|
||||||
|
packages:
|
||||||
|
- sudo
|
||||||
|
- vim
|
||||||
|
ssh_pwauth: false
|
||||||
|
users:
|
||||||
|
- name: __VM_USERNAME__
|
||||||
|
sudo: "ALL=(ALL) NOPASSWD:ALL"
|
||||||
|
groups: wheel
|
||||||
|
hashed_passwd: "!"
|
||||||
|
lock_passwd: true
|
||||||
|
shell: /usr/local/bin/bash
|
||||||
|
ssh_authorized_keys:
|
||||||
|
- __SSH_PUB_KEY__
|
||||||
|
- name: root
|
||||||
|
hashed_passwd: "!"
|
||||||
|
lock_passwd: true
|
||||||
|
write_files:
|
||||||
|
- path: /etc/sudoers
|
||||||
|
content: |
|
||||||
|
%wheel ALL=(ALL) NOPASSWD: ALL
|
||||||
|
append: true
|
||||||
@ -74,7 +74,7 @@
|
|||||||
{
|
{
|
||||||
"id": 8,
|
"id": 8,
|
||||||
"name": "FreeBSD 14.3 UFS",
|
"name": "FreeBSD 14.3 UFS",
|
||||||
"os_type": "freebsd",
|
"os_type": "BSD",
|
||||||
"variant": "freebsd14.2",
|
"variant": "freebsd14.2",
|
||||||
"url": "https://download.freebsd.org/ftp/snapshots/VM-IMAGES/14.3-STABLE/amd64/Latest/FreeBSD-14.3-STABLE-amd64-BASIC-CLOUDINIT-ufs.qcow2.xz",
|
"url": "https://download.freebsd.org/ftp/snapshots/VM-IMAGES/14.3-STABLE/amd64/Latest/FreeBSD-14.3-STABLE-amd64-BASIC-CLOUDINIT-ufs.qcow2.xz",
|
||||||
"origin_image_name": "FreeBSD-14.3-STABLE-amd64-BASIC-CLOUDINIT-ufs.qcow2.xz",
|
"origin_image_name": "FreeBSD-14.3-STABLE-amd64-BASIC-CLOUDINIT-ufs.qcow2.xz",
|
||||||
@ -83,11 +83,20 @@
|
|||||||
{
|
{
|
||||||
"id": 9,
|
"id": 9,
|
||||||
"name": "FreeBSD 14.3 ZFS",
|
"name": "FreeBSD 14.3 ZFS",
|
||||||
"os_type": "freebsd",
|
"os_type": "BSD",
|
||||||
"variant": "freebsd14.2",
|
"variant": "freebsd14.2",
|
||||||
"url": "https://download.freebsd.org/ftp/snapshots/VM-IMAGES/14.3-STABLE/amd64/Latest/FreeBSD-14.3-STABLE-amd64-BASIC-CLOUDINIT-zfs.qcow2.xz",
|
"url": "https://download.freebsd.org/ftp/snapshots/VM-IMAGES/14.3-STABLE/amd64/Latest/FreeBSD-14.3-STABLE-amd64-BASIC-CLOUDINIT-zfs.qcow2.xz",
|
||||||
"origin_image_name": "FreeBSD-14.3-STABLE-amd64-BASIC-CLOUDINIT-zfs.qcow2.xz",
|
"origin_image_name": "FreeBSD-14.3-STABLE-amd64-BASIC-CLOUDINIT-zfs.qcow2.xz",
|
||||||
"md5sum": "https://download.freebsd.org/ftp/snapshots/VM-IMAGES/14.3-STABLE/amd64/Latest/CHECKSUM.SHA512"
|
"md5sum": "https://download.freebsd.org/ftp/snapshots/VM-IMAGES/14.3-STABLE/amd64/Latest/CHECKSUM.SHA512"
|
||||||
}
|
} ,
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"name": "OpenBSD 7.7 generic",
|
||||||
|
"os_type": "BSD",
|
||||||
|
"variant": "openbsd7.6",
|
||||||
|
"url": "",
|
||||||
|
"origin_image_name": "openbsd-generic.qcow2",
|
||||||
|
"md5sum": ""
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,12 +0,0 @@
|
|||||||
ssh_pwauth: true
|
|
||||||
disable_root: true
|
|
||||||
users:
|
|
||||||
- name: user
|
|
||||||
ssh_authorized_keys:
|
|
||||||
- __SSH_KEY__
|
|
||||||
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
|
|
||||||
groups: sudo
|
|
||||||
shell: /bin/bash
|
|
||||||
hashed_passwd: __USER_PASSWORD__
|
|
||||||
lock-passwd: false
|
|
||||||
|
|
||||||
73
vm_manage.sh
73
vm_manage.sh
@ -1,4 +1,4 @@
|
|||||||
#!/bin/env bash
|
#!/usr/bin/env -S bash
|
||||||
|
|
||||||
source env_scripts/common.sh
|
source env_scripts/common.sh
|
||||||
source env_scripts/functions.sh
|
source env_scripts/functions.sh
|
||||||
@ -9,30 +9,41 @@ VM_DISK_SIZE=10
|
|||||||
|
|
||||||
# Function to display usage message
|
# Function to display usage message
|
||||||
usage() {
|
usage() {
|
||||||
echo "Usage: $0 create -n NAME [-b BRIDGE] [-r RAM] [-c VCPUS] [-s DISK] [-v]"
|
less << EOF
|
||||||
echo " $0 delete -n NAME"
|
NAME
|
||||||
echo " $0 info -n NAME"
|
$0
|
||||||
echo " $0 connect -n NAME"
|
|
||||||
echo " $0 list"
|
USAGE
|
||||||
echo ""
|
Usage: $0 create -n NAME [-b BRIDGE] [-r RAM] [-c VCPUS] [-s DISK] [-v]
|
||||||
echo "Actions:"
|
$0 delete NAME
|
||||||
echo " create Create a new virtual machine"
|
$0 info NAME
|
||||||
echo " delete Delete a virtual machine"
|
$0 connect NAME
|
||||||
echo " list List all defined virtual machines"
|
$0 list
|
||||||
echo " info Show information about a virtual machine"
|
|
||||||
echo " connect Connect to the console of a virtual machine"
|
ACTIONS
|
||||||
echo ""
|
create Create a new virtual machine
|
||||||
echo "Options for 'create':"
|
delete Delete a virtual machine
|
||||||
echo " -h Show this help message"
|
list List all defined virtual machines
|
||||||
echo " -n NAME Host name (required)"
|
info Show information about a virtual machine
|
||||||
echo " -b BRIDGE Bridge interface name"
|
connect Connect to the console of a virtual machine
|
||||||
echo " -r RAM RAM in MB (default: ${VM_MEM_SIZE})"
|
|
||||||
echo " -c VCPUS Number of VCPUs (default: ${VM_VCPUS})"
|
OPTIONS
|
||||||
echo " -s DISK Disk size in GB (default: ${VM_DISK_SIZE})"
|
-h Show this help message
|
||||||
echo " -v Verbose mode"
|
-n NAME Host name (required)
|
||||||
|
-b BRIDGE Bridge interface name
|
||||||
|
-r RAM RAM in MB (default: ${VM_MEM_SIZE})
|
||||||
|
-c VCPUS Number of VCPUs (default: ${VM_VCPUS})
|
||||||
|
-s DISK Disk size in GB (default: ${VM_DISK_SIZE})
|
||||||
|
-v Verbose mode
|
||||||
|
|
||||||
|
AUTHOR
|
||||||
|
Victor Gracia Enguita <victor@burufalla.ovh>
|
||||||
|
|
||||||
|
COPYRIGHT
|
||||||
|
This is free software; see the source for copying conditions.
|
||||||
|
EOF
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if at least one argument is provided
|
# Check if at least one argument is provided
|
||||||
if [ $# -eq 0 ]; then
|
if [ $# -eq 0 ]; then
|
||||||
usage
|
usage
|
||||||
@ -97,12 +108,16 @@ case "${ACTION}" in
|
|||||||
show_vm_menu
|
show_vm_menu
|
||||||
#Set guest type based on check_host_os
|
#Set guest type based on check_host_os
|
||||||
vm_set_guest_type
|
vm_set_guest_type
|
||||||
#Download cloud image
|
if [[ "$VM_OS_TYPE" == "BSD" && "${VM_OS_VARIANT}" == *"openbsd"* ]]; then
|
||||||
vm_download_base_image
|
generate_openbsd_image
|
||||||
#Compare hashes
|
else
|
||||||
compare_checksum
|
#Download cloud image
|
||||||
#Create guest image
|
vm_download_base_image
|
||||||
vm_create_guest_image
|
#Compare hashes
|
||||||
|
compare_checksum
|
||||||
|
#Create guest image
|
||||||
|
vm_create_guest_image
|
||||||
|
fi
|
||||||
#Generate ssh key
|
#Generate ssh key
|
||||||
vm_generate_ssh_hey
|
vm_generate_ssh_hey
|
||||||
#Generate meta-data file for VM
|
#Generate meta-data file for VM
|
||||||
|
|||||||
Reference in New Issue
Block a user