Merge branch 'develop'

This commit is contained in:
2025-07-23 20:29:15 +02:00
10 changed files with 325 additions and 166 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
*.img *.img
*.qcow2 *.qcow2
./openbsd-cloud-image

View File

@ -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"
@ -100,13 +150,13 @@ vm_net_get_ip()
# Obtener la dirección MAC de la interfaz de red # Obtener la dirección MAC de la interfaz de red
MAC_VM=$(vm_net_get_mac $VM) MAC_VM=$(vm_net_get_mac $VM)
if [[ -z "$MAC_VM" ]]; then if [[ -z "$MAC_VM" ]]; then
echo "Error: No se pudo encontrar la dirección MAC para '$VM'" echo "Error: The MAC address could not be found for '$VM'"
return 1 return 1
fi fi
# Obtener la dirección IP a partir de la dirección MAC # Obtener la dirección IP a partir de la dirección MAC
VM_IP_ADDRESS=$(arp -a | grep "$MAC_VM" | awk '{ print $2 }' | sed 's/[()]//g') VM_IP_ADDRESS=$(arp -a | grep "$MAC_VM" | awk '{ print $2 }' | sed 's/[()]//g')
if [[ -z "$VM_IP_ADDRESS" ]]; then if [[ -z "$VM_IP_ADDRESS" ]]; then
echo "Error: No se pudo encontrar la dirección IP para la dirección MAC '$MAC_VM'" echo "Error: Could not find IP address for MAC address '$MAC_VM'"
return 1 return 1
fi fi
echo "$VM_IP_ADDRESS" echo "$VM_IP_ADDRESS"
@ -170,7 +220,6 @@ vm_connect()
vm_delete () vm_delete ()
{ {
local VM=$1 local VM=$1
echo "VM: $VM"
if [[ -f "$VM_IMAGE_PATH" ]]; then if [[ -f "$VM_IMAGE_PATH" ]]; then
# Safely remove the VM with confirmation # Safely remove the VM with confirmation
read -p "Are you sure you want to remove the VM '$VM' (y/N)? " confirm read -p "Are you sure you want to remove the VM '$VM' (y/N)? " confirm
@ -195,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
@ -208,15 +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()
{ {
echo "Creating a qcow2 image file ${VM_BASE_DIR}/images/${VM_HOSTNAME}.${VM_DISK_EXTENSION} that uses the cloud image file ${VM_BASE_IMAGE_LOCATION} as its base" if [[ "$VM_OS_TYPE" == "BSD" && "${VM_OS_VARIANT}" == *"freebsd"* ]]; then
if [[ "$VM_OS_TYPE" == "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
@ -248,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"
@ -331,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
@ -356,6 +435,10 @@ vm_guest_install()
eval virt-install $VM_INSTALL_OPTS eval virt-install $VM_INSTALL_OPTS
virsh dumpxml "${VM_HOSTNAME}" > "${VM_BASE_DIR}/xml/${VM_HOSTNAME}.xml" virsh dumpxml "${VM_HOSTNAME}" > "${VM_BASE_DIR}/xml/${VM_HOSTNAME}.xml"
echo "Root password: $VM_ROOT_PASS" clear
echo "User password: $VM_USER_PASS" 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 "root pass is(only for BSD flavour): ${VM_USER_PASS}"
echo "user pass is: ${VM_USER_PASS}"
echo "virsh console ${VM_HOSTNAME} --safe"
} }

View File

@ -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"

View File

@ -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
View 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
View 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
View 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

View File

@ -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": ""
}
] ]
} }

View File

@ -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

View File

@ -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
@ -121,8 +136,6 @@ case "${ACTION}" in
fi fi
VM_HOSTNAME="$1" VM_HOSTNAME="$1"
source env_scripts/common.sh source env_scripts/common.sh
echo "Action: ${ACTION}"
echo "VM Name: ${VM_HOSTNAME}"
if [[ "${ACTION}" == 'delete' ]]; then if [[ "${ACTION}" == 'delete' ]]; then
vm_delete ${VM_HOSTNAME} vm_delete ${VM_HOSTNAME}
elif [[ "${ACTION}" == 'info' ]]; then elif [[ "${ACTION}" == 'info' ]]; then
@ -133,7 +146,6 @@ case "${ACTION}" in
;; ;;
list) list)
#echo "Action: list"
vm_list vm_list
;; ;;