develop pull requesy #1
44
SHA512SUMS
44
SHA512SUMS
@ -1,44 +0,0 @@
|
||||
657c3ffd74c4a63b62f05298a5a148dc7f61e89b7222004758d701407839efd1b7438033dae1fde1a86c473ab6304e82cd07437811113dc56d78a75ef5e6047a debian-12-azure-amd64.json
|
||||
6e3b58e593da7f91440253ab9d7e225bfaf10418a5da651c9bf7bf19298610d6599de7ae1317ca33791f8a44e0cdef5c1e0febcb8d2738720e76e21d13687dcb debian-12-azure-amd64.tar.xz
|
||||
81fafefceefd27c840ba5f5ae97bc6f6b5ae32d4fb25df725f0ee808581f8287123a302deaed66330b83f48f5b3b60abae95eeb40d96b47b19c5f2e9ab2b38d5 debian-12-azure-arm64.json
|
||||
2e6d951ad095365d62ff24b547925de5c4c6a65e4fe628b60fd67f87c1f9b6b661d69aa79838253d328fc60bec60ded0a8890bc9a08b6230f4f20f78313e0d70 debian-12-azure-arm64.tar.xz
|
||||
942ec6bc74a3020783a5888baf0e71083a91a11d7ace4e8e3f6d971291d50da69d0b7920b411e668da63ff1678e3c35ddad3eac258ad3c80f733857aca5af2c5 debian-12-ec2-amd64.json
|
||||
40ac9a311266bea743a0e2fc946d105146f940143d847d948ef8746217fd6fa8fa26c186539e80aa52b9bb1a00c831bf91a98db2a2c9220ac31633262053b9e2 debian-12-ec2-amd64.tar.xz
|
||||
a1f3f0972dfdf552e6bdc5e3dd6f3690ac3e6ef6dd9a89663fcd3995b9002e29253624bd8efb746e7c540baca2a0ce62fda0da9651d603b7886333cc8024ad16 debian-12-ec2-arm64.json
|
||||
778b20a996490a65f758de312a78656a8e95b8ede37a0b562de67bd0ce00cf2939d829b03a8320ec19f09ab97435d28d9ff667dba1895da481f65ed661ff70d3 debian-12-ec2-arm64.tar.xz
|
||||
f2bc0d6c7027162809d132c83b1f9e465c7df3c1b00cb54d0ebfa687afb5b77c2b3cb2ae0c8fbc2acaf12032d6c84113ab845e70d3baaf9fb22fbce0bcf33e9c debian-12-generic-amd64.json
|
||||
c651c2f3fd1ee342f225724959a86a97ad804027c3f057e03189455d093d07a006390929a22df0f95a5269291badc619964bde8bf9e2a33b6f3a01f492895068 debian-12-generic-amd64.qcow2
|
||||
598991089849520e7257564c9ec165c6e9f7227e28966321c88f5c70ad1a7cf9603f2a364c6e262519f8b2b7a001fcbd249a6c1453453f75e82e24affc317984 debian-12-generic-amd64.raw
|
||||
c405ada1aadc92de60651fa77f190edbcadde64c78883e7f0bd640124d194db690d76f135bed140ca1fda50a0ba41d66a68d82174fcade3d1302ff18613d5350 debian-12-generic-amd64.tar.xz
|
||||
c1597fe508034fb0bf25e993bb28cbfab1c212651f3d7e66d5df7dfb86ab3ed33a66ec97cfccfd0840429928ef7b364355cfd21ebe4962871564bc1f1aed84ec debian-12-generic-arm64.json
|
||||
67467fa5645b5cfcb313b5cff5365fb203a0b7237e0d29b0f52364464d62fba1d4414eaad80e0e9b467c3a428187177db56f828a5a64825d5b391c12ba1903a4 debian-12-generic-arm64.qcow2
|
||||
41fac0d1c902558dc738827b62b01f086acdc315d0873ca24c00cfcbbe15e09573d0a9b1c888fff7650142e76f435c99b5c8cc4e0f49fbc79fe07764de9dd6a8 debian-12-generic-arm64.raw
|
||||
d0d08d8a9c1587c37fd99790ba8e0e495aefefc2d2d380a76b694c73d494fb766121220dd3a794625c0e2e50ee0cc830529999cf149d9c3b9293334966743ef4 debian-12-generic-arm64.tar.xz
|
||||
a914843e1038b45bae017ac541ea63e92699ab4e011860216c5897c49dc852ec4f064eb2fccae64fd62095f7c839c98634a6c0d70f4844fd4879cfd137e01dac debian-12-generic-ppc64el.json
|
||||
b66cf1b1be63a27e379c50ac3bbc7db0281e27aff870bc30bd14fdaff76b0c4d146becb26620d15d7fc5a8234eb40845dced69803891d94079d14f6f2dbe032e debian-12-generic-ppc64el.qcow2
|
||||
9c76cdf1d178c3f1df015695493ad59cc12ac177bdaa5ef5064e86008a409a30a5ba81f179756b875972c4c93b44fc4dff8e725a3b4880e6836c1d5385d9182f debian-12-generic-ppc64el.raw
|
||||
fee233b7c9e54708e5d2833784f1439451e2375aedfff00fb718143aa7ae1f3589c44c67df066328f17212d334baecc35ab70af62ebf1e9f969a6f22e25c4ef2 debian-12-generic-ppc64el.tar.xz
|
||||
aa93bfecf47a1449f3d3e17e7b0ae510c245228346fa18336fb13f1a599681e49b1ae949bc4e55235e311f55e0be5fd5023a304b64f705c1c45168c7e0d270d4 debian-12-genericcloud-amd64.json
|
||||
da702efced2cd98017790d0e00fee81f1e1404d3f990a4741f52e6f18bde9856d37799c053b3baa48805048a595d2a6a13c41b8287ec6f76ec27b7ef1b67a215 debian-12-genericcloud-amd64.qcow2
|
||||
95bb137e5cca697c8fa0cd6959d6627c57ff819cafaa8dcb479ad2445809cca59de3e52e0e14fa1b3e44decf4b48bd9c2adc45ff34dbf0d622fb64e316276424 debian-12-genericcloud-amd64.raw
|
||||
72fd543d729a2a67e3b015540cbaf75c057554508c415514471df1996cab2ea6f0540d047d5b3d431afd2ffe42f1d7552e6fe1da20f20e03b5c1c0627b3a3e3e debian-12-genericcloud-amd64.tar.xz
|
||||
d867bd6fb1f7372cf7224d81eb94a9fa4fe4d32ef1cdd9ae9c144efd0561146523971294002acdaeea66f0887b3e2dfa8bbfa403c94ecc2b79cef35884c23224 debian-12-genericcloud-arm64.json
|
||||
95f72a3dbc9bbe261aee622ffe0c1b89085d843c9631b720738557a3640e229847deee7f0f87a29b566bf56ba7ecdc9010fb4b844c3477ca76a00865cf016fc1 debian-12-genericcloud-arm64.qcow2
|
||||
ef2b7b801dff51e1e9befbc54b6b67d23d6321dbc526cce85c094a374c338c74b6949cc327765228238589906c6c3225c8a09789a45e8416222fa7a4f52b5c8d debian-12-genericcloud-arm64.raw
|
||||
976af1f3f2132af883a878fa045005b7719d3ae7beceaf749a778713ef21c6fba5bb7bbb143f1f77a4cd7ed817d862229bde1c83721f18f609c948442d90eeab debian-12-genericcloud-arm64.tar.xz
|
||||
89a9f6b16c3a394d8411b9d98fc8deeef68ec7b4998d19733fb2b894c7a8620d3ad58efd1fcd4623bb5853233e81e3a75ffa9a64300b4e8d39e7ef49af445678 debian-12-genericcloud-ppc64el.json
|
||||
fcf25e5d0e6a76e93c3abaecb8109a931380af29658586f51e30baec0f699a2f17de8a14de57acec80b13ab125fd165140893d814800144505a4982492256f19 debian-12-genericcloud-ppc64el.qcow2
|
||||
8ed7eb56beceb4c74982d379ca30ca8a9de7ca12a581325e7b28b824917620a37358f4b42a67efb60ef3b121e540db50c25f8b8d2879c6517b47bf3d1d33a102 debian-12-genericcloud-ppc64el.raw
|
||||
94b36dc5cbc9b94f1cf755da4ff15737ff2dfb5be5dfe0c7eb4626a9f355c66be26dea3e419b69f3b1aa5e3b31d5bfe64bd42835e5f4b04bdb72ae6fd886c416 debian-12-genericcloud-ppc64el.tar.xz
|
||||
7e580a1223d5441ef6e8af9e79c8c6a3fc1424fe0e31d49618d35f454bc2b6c955d65bdb8bcd226297ae81c9948298d4a8d6947f3679d5731e9a5382a933a871 debian-12-nocloud-amd64.json
|
||||
2ae5c702dd6c7f80b1e3e1f80595b21e02cca5712de8b9ba57a20f95427608fd0de0cf2c72f39d61bbaccc85e4a1a4587282fa7d28a9332616ad267c73247ae6 debian-12-nocloud-amd64.qcow2
|
||||
faf7f39ecf549be374056b3fd9959457445f95338631919c6e7e7916d6f4fa4a13ab1e63f74ffaa44b69d38db87cc2cb05ad113e4cfab06291560b9ff3d32239 debian-12-nocloud-amd64.raw
|
||||
b23c7f7b36493c34caf8093ffa4b8d95ca8c77bfc2669282cac77eaa11ccab82e6e29e5e4f4b9a9c7bc4d64c3f1d83a74b9367313c00190b5cb411bb00fe4302 debian-12-nocloud-amd64.tar.xz
|
||||
30f2c3d1bcfa1fe2ce4e44bfadb0d53a63edae1e97bc7b17ec675cae46b7a32827220d131ad6d9a1338f3cc07026face2af9ddc19898435131690b06e8f60677 debian-12-nocloud-arm64.json
|
||||
6b0447249f6cb992dac0b435ab23b552f435d69532bb6e27479e0a3c82524b63169b52736b13737a2b2219f7752d17817637cd8aae1b48107297fa3d2ecd58dc debian-12-nocloud-arm64.qcow2
|
||||
068454af0829fb90504964f3b0194fbbb7189f75f47e29f971e80d1359f6c6329ffefc95d7fa60b24739d1243d5743f801d3dc923d3c8eba518b8222493ecee7 debian-12-nocloud-arm64.raw
|
||||
3dddd708765e2d2ff6fc4840dcca6254706207a569ecc0a794ca81db4d2d292d47c9e140c52cc0f7cb4ada0583ce75d6d9d664a596492c7a19a67ba70129e59c debian-12-nocloud-arm64.tar.xz
|
||||
fb9cec1409b639eececa2a417be0a7d8e38b4eb5b9625985ac26dd1996fafbb32b1ac6f8008f294dacf69bc06b2f2c655020b8fa6c854ebc196064f39f5aea4b debian-12-nocloud-ppc64el.json
|
||||
89ded264a10fd325ed8e3143b1e56df528ff42029431411da78dce49b887019863e6d53b863ffe27c52e64c56ca129b5c2077c0951d930d2dd4dcc07e12bbd24 debian-12-nocloud-ppc64el.qcow2
|
||||
0ba1f10d48d9ec51c23d2c657d084bddbc0c75f1afa4c2636bea8a7a05fab8dd1c4046c4906003524c0ee9e54cf0b0c22c90f6da751b0b55c763b8d2544c860a debian-12-nocloud-ppc64el.raw
|
||||
a774abcbcc96bae0bdf1ad11c12a70a5a754908c7781bada24160f2148efb61ae92fe572d27ba9fc17c07a2caeafbdee6c3d66a3b3a46c4eba4a4c050350e2af debian-12-nocloud-ppc64el.tar.xz
|
||||
@ -1,23 +0,0 @@
|
||||
#!/bin/env bash
|
||||
#Variables
|
||||
VM="$1"
|
||||
VM_BASE_DIR=${VM_BASE_DIR:-"${HOME}/vms"}
|
||||
VM_USER="user"
|
||||
#Functions
|
||||
usage() {
|
||||
cat << EOF
|
||||
USO: $0 VM
|
||||
|
||||
Este script conecta por ssh con la maquina virtual seleccionada.
|
||||
EOF
|
||||
}
|
||||
|
||||
connect_vm() {
|
||||
local VM_IP=$(./vm_get_ip.sh ${VM})
|
||||
ssh -i ${VM_BASE_DIR}/ssh/${VM} -l${VM_USER} ${VM_IP}
|
||||
}
|
||||
if [[ -z "$VM" ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
connect_vm
|
||||
281
vm_create.sh
281
vm_create.sh
@ -1,281 +0,0 @@
|
||||
#!/bin/env bash
|
||||
source common.sh
|
||||
VM_HOSTNAME=
|
||||
VM_DISK_SIZE=20
|
||||
VM_DISK_FORMAT=qcow2
|
||||
VM_MEM_SIZE=2048
|
||||
VM_VCPUS=2
|
||||
VM_BASE_IMAGE=
|
||||
VM_OS_VARIANT=
|
||||
VM_BRIDGE_INT=
|
||||
VM_BASE_IMAGE_LOCATION=
|
||||
VM_NET_USED="default"
|
||||
#LIBVIRT_NET_OPTION="network=$VM_NET_USED,model=e1000"
|
||||
LIBVIRT_NET_MODEL="virtio"
|
||||
LIBVIRT_NET_OPTION="network=$VM_NET_USED,model=$LIBVIRT_NET_MODEL"
|
||||
|
||||
#LIBVIRT_NET_OPTION="model=e1000"
|
||||
|
||||
# Functions
|
||||
usage()
|
||||
{
|
||||
cat << EOF
|
||||
usage: $0 options
|
||||
|
||||
Quickly create guest VMs using cloud image files and cloud-init.
|
||||
|
||||
OPTIONS:
|
||||
-h Show this message
|
||||
-n Host name (required)
|
||||
-b bridge interface name (bridge network is used)
|
||||
-r RAM in MB (defaults to ${VM_MEM_SIZE})
|
||||
-c Number of VCPUs (defaults to ${VM_VCPUS})
|
||||
-s Amount of storage to allocate in GB (defaults to ${VM_DISK_SIZE})
|
||||
-v Verbose
|
||||
EOF
|
||||
}
|
||||
|
||||
HOST_OS=$(cat /etc/os-release | grep -v VERSION_ID |grep "ID=" | awk -F'=' '{print $2}')
|
||||
if [ $HOST_OS == "debian" ]; then
|
||||
source env_scripts/older_os.sh
|
||||
else
|
||||
source env_scripts/newer_os.sh
|
||||
fi
|
||||
|
||||
#create_network()
|
||||
#{
|
||||
#virsh net-define mynet.xml
|
||||
#virsh net-autostart mynet
|
||||
#virsh net-start mynet
|
||||
#}
|
||||
download_base_image()
|
||||
{
|
||||
VM_BASE_IMAGE_NAME=$(basename "${VM_BASE_IMAGE_NAME}" .img)
|
||||
VM_BASE_IMAGE_LOCATION="${VM_BASE_DIR}/${VM_BASE_IMAGES}/$VM_BASE_IMAGE_NAME.${VM_DISK_FORMAT}"
|
||||
if ! test -f "${VM_BASE_IMAGE_LOCATION}"; then
|
||||
wget -O "${VM_BASE_IMAGE_LOCATION}" ${VM_BASE_IMAGE}
|
||||
fi
|
||||
}
|
||||
|
||||
gen_linux_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})
|
||||
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
|
||||
}
|
||||
|
||||
check_hash()
|
||||
{
|
||||
if [[ "${VM_CHECKSUMS_URL}" == *"SHA256SUMS"* ]]; then
|
||||
HASH_CMD="sha256sum"
|
||||
elif [[ "${VM_CHECKSUMS_URL}" == *"SHA512SUMS"* ]]; then
|
||||
HASH_CMD="sha512sum"
|
||||
else
|
||||
echo "ERROR: Unknown checksum type in URL: $CHECKSUM_URL"
|
||||
exit 1
|
||||
fi
|
||||
BASE_FILE_CHECKSUM=$(${HASH_CMD} -b ${VM_BASE_IMAGE_LOCATION} | awk '{print $1}')
|
||||
if [ "${BASE_FILE_CHECKSUM}" = "${VM_BASE_IMAGE_CHECKSUM}" ]; then
|
||||
echo "Checksum OK: ${BASE_FILE_CHECKSUM}"
|
||||
else
|
||||
echo "ERROR: MD5 checksum does NOT match!"
|
||||
echo "Expected: ${VM_BASE_IMAGE_CHECKSUM}"
|
||||
echo "Got: ${BASE_FILE_CHECKSUM}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
gen_freebsd_user_data()
|
||||
{
|
||||
#VM_ROOT_PASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 16; echo)
|
||||
VM_ROOT_PASS="changeme"
|
||||
echo "Generated root passwd: ${VM_ROOT_PASS}"
|
||||
VM_ROOT_PASS_HASH=$(mkpasswd --method=SHA-512 --rounds=4096 ${VM_ROOT_PASS})
|
||||
# Write FreeBSD 13.2 user-data
|
||||
VM_USER_PASS="sasasa123"
|
||||
VM_USER_PASS_HASH=$(mkpasswd --method=SHA-512 --rounds=4096 ${VM_USER_PASS})
|
||||
cat <<EOF > "$VM_BASE_DIR/init/${VM_HOSTNAME}-user-data"
|
||||
#cloud-config
|
||||
users:
|
||||
- name: root
|
||||
lock_passwd: false
|
||||
hashed_passwd: ${VM_ROOT_PASS}
|
||||
- name: ${VM_USERNAME}
|
||||
ssh_authorized_keys:
|
||||
- ssh-rsa ${SSH_PUB_KEY}
|
||||
groups: wheel
|
||||
ssh_pwauth: true
|
||||
hashed_passwd: ${VM_USER_PASS_HASH}
|
||||
write_files:
|
||||
- path: /usr/local/etc/sudoers
|
||||
content: |
|
||||
%wheel ALL=(ALL) NOPASSWD: ALL
|
||||
append: true
|
||||
EOF
|
||||
|
||||
}
|
||||
|
||||
while getopts "h:n:net:b:r:c:s:v" option; do
|
||||
case "${option}"
|
||||
in
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
n) VM_HOSTNAME=${OPTARG};;
|
||||
b) VM_BRIDGE_INT=${OPTARG};;
|
||||
r) VM_MEM_SIZE=${OPTARG};;
|
||||
c) VM_VCPUS=${OPTARG};;
|
||||
s) VM_DISK_SIZE=${OPTARG};;
|
||||
v) VERBOSE=1;;
|
||||
*)
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
if [[ -z $VM_HOSTNAME ]]; then
|
||||
echo "ERROR: Host name is required"
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -n $VERBOSE ]]; then
|
||||
echo "Building ${VM_HOSTNAME} in $VM_IMAGE_DIR"
|
||||
set -xv
|
||||
fi
|
||||
|
||||
if [[ -n $VM_BRIDGE_INT ]]; then
|
||||
LIBVIRT_NET_OPTION="model=virtio,bridge=${VM_BRIDGE_INT}"
|
||||
fi
|
||||
|
||||
mkdir -p "$VM_BASE_DIR"/{images,xml,init,base,ssh}
|
||||
|
||||
## VM Base image
|
||||
# Show dinamic menu
|
||||
echo "Select VM OS:"
|
||||
for entry in $(jq -r '.os_variants[] | @base64' "$OS_JSON_FILE"); do
|
||||
decoded=$(echo "$entry" | base64 --decode)
|
||||
id=$(echo "$decoded" | jq -r .id)
|
||||
name=$(echo "$decoded" | jq -r .name)
|
||||
echo "$id. $name"
|
||||
done
|
||||
|
||||
# ID_MAX calculation
|
||||
ID_MAX=$(jq -r '[.os_variants[].id] | max' "$OS_JSON_FILE")
|
||||
|
||||
# Read input
|
||||
read -r -p "Enter your choice [1-${ID_MAX}]: " answer
|
||||
if ! [[ "$answer" =~ ^[0-9]+$ ]] || (( answer < 1 || answer > ID_MAX )); then
|
||||
echo "Invalid option. Please enter a number between 1 and ${ID_MAX}."
|
||||
exit 1
|
||||
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_BASE_IMAGE=$(echo "$selected" | jq -r .url)
|
||||
VM_BASE_IMAGE_NAME=$(echo "$selected" | jq -r .origin_image_name)
|
||||
VM_BOOT_TYPE=$(echo "$selected" | jq -r .boot_type)
|
||||
VM_CHECKSUMS_URL=$(echo "$selected" | jq -r .md5sum)
|
||||
CHECKSUM_TMP_FOLDER=$(mktemp)
|
||||
curl -s -o "${CHECKSUM_TMP_FOLDER}" "${VM_CHECKSUMS_URL}"
|
||||
VM_BASE_IMAGE_CHECKSUM=$(grep "${VM_BASE_IMAGE_NAME}" "${CHECKSUM_TMP_FOLDER}" | awk '{print $1}')
|
||||
|
||||
# Download base image
|
||||
download_base_image
|
||||
check_hash
|
||||
|
||||
echo "Creating a qcow2 image file ${VM_BASE_DIR}/images/${VM_HOSTNAME}.img that uses the cloud image file ${VM_BASE_IMAGE_LOCATION} as its base"
|
||||
if ! test -f "${VM_BASE_DIR}/images/${VM_HOSTNAME}.img"; then
|
||||
#qemu-img create -b "${VM_BASE_DIR}/${VM_BASE_IMAGES}/${VM_OS_VARIANT}.qcow2" -f qcow2 -F qcow2 "${VM_BASE_DIR}/images/${VM_HOSTNAME}.img" "${VM_DISK_SIZE}G"
|
||||
qemu-img convert \
|
||||
-O qcow2 \
|
||||
"${VM_BASE_IMAGE_LOCATION}" \
|
||||
"${VM_BASE_DIR}/images/${VM_HOSTNAME}.img"
|
||||
qemu-img resize \
|
||||
"${VM_BASE_DIR}/images/${VM_HOSTNAME}.img" \
|
||||
"${VM_DISK_SIZE}G"
|
||||
sudo chown -R $USER:libvirt-qemu "${VM_BASE_DIR}/images/${VM_HOSTNAME}.img"
|
||||
else
|
||||
echo "El fichero ${VM_BASE_DIR}/images/${VM_HOSTNAME}.img ya existe. Elimina la VM con vm_delete.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# VM ssh keys gen
|
||||
if [ -f "${VM_BASE_IMAGE}/ssh/${VM_HOSTNAME}" ]; then
|
||||
echo "Ya existe una clave ssh para la maquina ${VM_HOSTNAME}"
|
||||
else
|
||||
ssh-keygen -t rsa -b 4096 -N '' -f "${VM_BASE_DIR}/ssh/${VM_HOSTNAME}"
|
||||
chmod 600 ${VM_BASE_DIR}/ssh/${VM_HOSTNAME}.pub
|
||||
ssh-keygen -y -f "${VM_BASE_DIR}/ssh/${VM_HOSTNAME}" > "${VM_BASE_DIR}/ssh/${VM_HOSTNAME}".pub.txt
|
||||
SSH_PUB_KEY=$(cat "${VM_BASE_DIR}/ssh/${VM_HOSTNAME}".pub.txt)
|
||||
rm "${VM_BASE_DIR}/ssh/${VM_HOSTNAME}".pub.txt
|
||||
fi
|
||||
#cloud-init VM meta-data
|
||||
cat > "$VM_BASE_DIR/init/${VM_HOSTNAME}-meta-data" << EOF
|
||||
instance-id: ${VM_HOSTNAME}
|
||||
local-hostname: ${VM_HOSTNAME}
|
||||
EOF
|
||||
#cloud-init VM user-data
|
||||
if [[ "$VM_OS_VARIANT" == "freebsd14.0" ]]; then
|
||||
gen_freebsd_user_data
|
||||
# genisoimage \
|
||||
# -output ${VM_BASE_DIR}/images/${VM_HOSTNAME}-cidata.iso \
|
||||
# -V cidata -r \
|
||||
# -J ${VM_BASE_DIR}/init/${VM_HOSTNAME}-user-data ${VM_BASE_DIR}/init/${VM_HOSTNAME}-meta-data
|
||||
# virt-install \
|
||||
# --name ${VM_HOSTNAME} \
|
||||
# --memory ${VM_MEM_SIZE} \
|
||||
# --vcpus="${VM_VCPUS}" \
|
||||
# --os-variant=${VM_OS_VARIANT} \
|
||||
# --disk ${VM_BASE_DIR}/images/${VM_HOSTNAME}.img,device=disk,bus=virtio \
|
||||
# --disk path=${VM_BASE_DIR}/images/${VM_HOSTNAME}-cidata.iso,device=cdrom \
|
||||
# --network ${LIBVIRT_NET_OPTION} \
|
||||
# --autostart \
|
||||
# --import --noautoconsole \
|
||||
# --cloud-init root-password-generate=on,user-data=${VM_BASE_DIR}/init/${VM_HOSTNAME}-user-data
|
||||
else
|
||||
gen_linux_user_data
|
||||
fi
|
||||
|
||||
VM_INSTALL_OPTS=""
|
||||
VM_INSTALL_OPTS="${VM_INSTALL_OPTS} --name ${VM_HOSTNAME}"
|
||||
VM_INSTALL_OPTS="${VM_INSTALL_OPTS} --memory ${VM_MEM_SIZE}"
|
||||
VM_INSTALL_OPTS="${VM_INSTALL_OPTS} --vcpus ${VM_VCPUS}"
|
||||
VM_INSTALL_OPTS="${VM_INSTALL_OPTS} --os-variant=${VM_OS_VARIANT}"
|
||||
VM_INSTALL_OPTS="${VM_INSTALL_OPTS} --disk ${VM_BASE_DIR}/images/${VM_HOSTNAME}.img,device=disk,bus=virtio"
|
||||
VM_INSTALL_OPTS="${VM_INSTALL_OPTS} --network ${LIBVIRT_NET_OPTION}"
|
||||
VM_INSTALL_OPTS="${VM_INSTALL_OPTS} --autostart"
|
||||
VM_INSTALL_OPTS="${VM_INSTALL_OPTS} --import --noautoconsole"
|
||||
VM_INSTALL_OPTS="${VM_INSTALL_OPTS} --cloud-init root-password-generate=on,user-data=${VM_BASE_DIR}/init/${VM_HOSTNAME}-user-data"
|
||||
if [ "$VM_BOOT_TYPE" = "UEFI" ]; then
|
||||
VM_INSTALL_OPTS="${VM_INSTALL_OPTS} --boot uefi"
|
||||
fi
|
||||
eval virt-install $VM_INSTALL_OPTS
|
||||
|
||||
virsh dumpxml "${VM_HOSTNAME}" > "${VM_BASE_DIR}/xml/${VM_HOSTNAME}.xml"
|
||||
42
vm_delete.sh
42
vm_delete.sh
@ -1,42 +0,0 @@
|
||||
#!/bin/env bash
|
||||
|
||||
# Function for usage message
|
||||
usage() {
|
||||
cat << EOF
|
||||
Usage: $0 vm_name
|
||||
|
||||
This script removes a virtual machine managed by virsh.
|
||||
|
||||
EOF
|
||||
}
|
||||
VM_BASE_DIR="${VM_BASE_DIR:-${HOME}/vms}"
|
||||
VM_IMAGE_PATH="${VM_BASE_DIR}/images/$1.img"
|
||||
CI_IMAGE_PATH="${VM_BASE_DIR}/images/$1-cidata.iso"
|
||||
|
||||
# Validate VM name argument
|
||||
if [[ -z "$1" ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if VM exists
|
||||
if [[ -f "$VM_IMAGE_PATH" ]]; then
|
||||
# Safely remove the VM with confirmation
|
||||
read -p "Are you sure you want to remove the VM '$1' (y/N)? " confirm
|
||||
if [[ "$confirm" =~ ^[Yy]$ ]]; then
|
||||
# Attempt to stop the VM before deleting
|
||||
virsh destroy "$1" 2>/dev/null || true
|
||||
# Delete VM definition and associated images
|
||||
virsh undefine "$1" 2>/dev/null || true
|
||||
rm -fv "$VM_IMAGE_PATH" "$CI_IMAGE_PATH"
|
||||
rm ${VM_BASE_DIR}/xml/$1.xml
|
||||
rm ${VM_BASE_DIR}/ssh/$1*
|
||||
rm ${VM_BASE_DIR}/init/$1-user-data
|
||||
rm ${VM_BASE_DIR}/init/$1-meta-data
|
||||
else
|
||||
echo "VM removal cancelled."
|
||||
fi
|
||||
else
|
||||
# Handle case where VM image is not found
|
||||
echo "Cannot find VM image file '$VM_IMAGE_PATH'. No action taken."
|
||||
fi
|
||||
41
vm_get_ip.sh
41
vm_get_ip.sh
@ -1,41 +0,0 @@
|
||||
#!/bin/env bash
|
||||
usage() {
|
||||
cat << EOF
|
||||
USO: $0 VM
|
||||
|
||||
Este script recupera la dirección IP de una máquina virtual administrada por virsh.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Función para obtener la dirección IP de la máquina virtual
|
||||
get_vm_ip_address() {
|
||||
local VM="$1"
|
||||
|
||||
# Obtener la dirección MAC de la interfaz de red
|
||||
MAC_VM=$(virsh domiflist "$VM" | awk '{ print $5 }' | tail -2 | head -1)
|
||||
if [[ -z "$MAC_VM" ]]; then
|
||||
echo "Error: No se pudo encontrar la dirección MAC para '$VM'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 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')
|
||||
if [[ -z "$VM_IP_ADDRESS" ]]; then
|
||||
echo "Error: No se pudo encontrar la dirección IP para la dirección MAC '$MAC_VM'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$VM_IP_ADDRESS"
|
||||
}
|
||||
|
||||
# Obtener el nombre del host de la máquina virtual
|
||||
VM="$1"
|
||||
|
||||
if [[ -z "$VM" ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Obtener la dirección IP de la máquina virtual
|
||||
get_vm_ip_address "$VM"
|
||||
@ -1,88 +0,0 @@
|
||||
#!/bin/env bash
|
||||
VM_BASE_DIR=${VM_BASE_DIR:-"${HOME}/vms"}
|
||||
VM_USER="user"
|
||||
VM=$1
|
||||
VM_IP=''
|
||||
SCRIPT=''
|
||||
VM_DISTRO=''
|
||||
VM_VERSION=''
|
||||
usage() {
|
||||
cat << EOF
|
||||
USO: $0 VM
|
||||
|
||||
Este script instala algunos programas en la VM seleccionada
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Función para obtener la dirección IP de la máquina virtual
|
||||
get_vm_ip_address() {
|
||||
local VM="$1"
|
||||
|
||||
# Obtener la dirección MAC de la interfaz de red
|
||||
MAC_VM=$(virsh domiflist "$VM" | awk '{ print $5 }' | tail -2 | head -1)
|
||||
if [[ -z "$MAC_VM" ]]; then
|
||||
echo "Error: No se pudo encontrar la dirección MAC para '$VM'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 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')
|
||||
if [[ -z "$VM_IP_ADDRESS" ]]; then
|
||||
echo "Error: No se pudo encontrar la dirección IP para la dirección MAC '$MAC_VM'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$VM_IP_ADDRESS"
|
||||
}
|
||||
|
||||
obtener_info_vm() {
|
||||
# Obtener el ID del sistema operativo
|
||||
# Obtener el ID del sistema operativo
|
||||
OS_ID=$(grep -o 'id="[^"]*"' "$1" | tr -d '"' | awk '{print $1}')
|
||||
|
||||
# Eliminar el protocolo y el dominio del ID
|
||||
OS_ID=$(echo "$OS_ID" | cut -d '/' -f 2-)
|
||||
echo $OS_ID
|
||||
# Convertir la URL a un nombre de distribución y versión
|
||||
VM_DISTRO=$(echo "$OS_ID" | awk -F '/' '{print $3}')
|
||||
VM_VERSION=$(echo "$OS_ID" | awk -F '/' '{print $4}')
|
||||
|
||||
}
|
||||
|
||||
# Obtener el nombre del host de la máquina virtual
|
||||
VM="$1"
|
||||
|
||||
if [[ -z "$VM" ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Obtener la dirección IP de la máquina virtual
|
||||
VM_IP=$(get_vm_ip_address "$VM")
|
||||
obtener_info_vm ${VM_BASE_DIR}/xml/${VM}.xml
|
||||
while true; do
|
||||
read -r -p $'Select software to install:\n 1.Docker\n 2.Gitlab CE\n 3.Gitlab runner\n 4.Kubernetes Single cluster\n' -n1 answer
|
||||
case $answer in
|
||||
[1]* )
|
||||
if [[ "$VM_DISTRO" == "debian" ]]; then
|
||||
SCRIPT='../vm_example_scripts/docker_debian.sh'
|
||||
elif [[ "$VM_DISTRO" == "ubuntu" ]]; then
|
||||
SCRIPT='../vm_example_scripts/docker_ubuntu.sh'
|
||||
fi
|
||||
break;;
|
||||
[2]* ) SCRIPT='../vm_example_scripts/gitlab_ce.sh'
|
||||
break;;
|
||||
[3]* ) SCRIPT='../vm_example_scripts/gitlab_runner.sh'
|
||||
break;;
|
||||
[4]* ) cd ../vm_example_scripts/
|
||||
./k8s.sh $VM
|
||||
break;;
|
||||
* ) echo "Please answer 1,2,3 or 4.";;
|
||||
esac
|
||||
done
|
||||
if [[ -z "$SCRIPT" ]]; then
|
||||
exit 0
|
||||
else
|
||||
ssh -i ${VM_BASE_DIR}/ssh/${VM} -l${VM_USER} ${VM_IP} "bash -s" -- < ${SCRIPT}
|
||||
fi
|
||||
@ -1,2 +0,0 @@
|
||||
#!/bin/env bash
|
||||
virsh list
|
||||
80
vm_set_ip.sh
80
vm_set_ip.sh
@ -1,80 +0,0 @@
|
||||
#!/bin/env bash
|
||||
|
||||
VM_BASE_DIR=${VM_BASE_DIR:-"${HOME}/vms"}
|
||||
VM_USER="user"
|
||||
MAC_VM=
|
||||
usage() {
|
||||
cat << EOF
|
||||
USO: $0 VM
|
||||
|
||||
Este script setea la dirección IP de una máquina virtual administrada por virsh.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Función para obtener la dirección IP de la máquina virtual
|
||||
get_vm_ip_address() {
|
||||
local VM="$1"
|
||||
|
||||
# Obtener la dirección MAC de la interfaz de red
|
||||
MAC_VM=$(virsh domiflist "$VM" | awk '{ print $5 }' | tail -2 | head -1)
|
||||
if [[ -z "$MAC_VM" ]]; then
|
||||
echo "Error: No se pudo encontrar la dirección MAC para '$VM'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 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')
|
||||
if [[ -z "$VM_IP_ADDRESS" ]]; then
|
||||
echo "Error: No se pudo encontrar la dirección IP para la dirección MAC '$MAC_VM'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$VM_IP_ADDRESS"
|
||||
}
|
||||
|
||||
|
||||
define_netplan()
|
||||
{
|
||||
cat <<EOF > "$VM_BASE_DIR/init/${VM}-netplan"
|
||||
# This file is generated from information provided by the datasource. Changes
|
||||
# to it will not persist across an instance reboot. To disable cloud-init's
|
||||
# network configuration capabilities, write a file
|
||||
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
|
||||
# network: {config: disabled}
|
||||
network:
|
||||
ethernets:
|
||||
enp1s0:
|
||||
addresses:
|
||||
- ${IP}/24
|
||||
nameservers:
|
||||
addresses:
|
||||
- 208.67.222.222
|
||||
- 208.67.220.220
|
||||
match:
|
||||
macaddress: ${MAC_VM}
|
||||
set-name: enp1s0
|
||||
version: 2
|
||||
EOF
|
||||
}
|
||||
# Obtener el nombre del host de la máquina virtual
|
||||
VM="$1"
|
||||
IP="$2"
|
||||
if [[ -z "$VM" ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "$IP" ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
MAC_VM=$(virsh domiflist "$VM" | awk '{ print $5 }' | tail -2 | head -1)
|
||||
CURRENT_IP=$(get_vm_ip_address "$VM")
|
||||
define_netplan
|
||||
# Obtener la dirección IP de la máquina virtual
|
||||
scp -i ${VM_BASE_DIR}/ssh/${VM} \
|
||||
-r $VM_BASE_DIR/init/${VM}-netplan \
|
||||
${VM_USER}@${CURRENT_IP}:50-cloud-init.yaml
|
||||
ssh -i ${VM_BASE_DIR}/ssh/${VM} -l${VM_USER} ${CURRENT_IP} "bash -s" -- < ../vm_example_scripts/apply_netplan.sh
|
||||
|
||||
Reference in New Issue
Block a user