Added install software on VM guest feature

This commit is contained in:
2025-08-12 20:02:42 +02:00
parent 5cce3a0337
commit 41574c143a
22 changed files with 493 additions and 70 deletions

View File

@ -67,8 +67,8 @@ sudo virsh --connect qemu:///session net-define /dev/stdin << EOF
</network> </network>
EOF EOF
``` --> ``` -->
## Examples ## Command Usage
### Command usage ### Command help
```shell ```shell
NAME NAME
./vm_manage.sh ./vm_manage.sh
@ -78,6 +78,7 @@ USAGE
./vm_manage.sh delete NAME ./vm_manage.sh delete NAME
./vm_manage.sh info NAME ./vm_manage.sh info NAME
./vm_manage.sh connect NAME ./vm_manage.sh connect NAME
./vm_manage.sh install NAME
./vm_manage.sh list ./vm_manage.sh list
ACTIONS ACTIONS
@ -86,6 +87,7 @@ ACTIONS
list List all defined virtual machines list List all defined virtual machines
info Show information about a virtual machine info Show information about a virtual machine
connect Connect to the console of a virtual machine connect Connect to the console of a virtual machine
install Install specific software into an existing VM
OPTIONS OPTIONS
-h Show this help message -h Show this help message
@ -149,6 +151,24 @@ Domain 'ubuntuTest' has been undefined
VM 'ubuntuTest' removed successfully. VM 'ubuntuTest' removed successfully.
``` ```
## Install software on VM
`./vm_manage.sh install VM_NAME`
Example:
```shell
./vm_manage.sh install Debian
Select software to install:
--------------
1. Docker
2. Podman
3. Gitlab CE
4. Gitlab Runner
Enter your choice [1-4]:
```
## TODO ## TODO
- Maybe add more BSD flavours guests support - Maybe add more BSD flavours guests support

View File

@ -3,12 +3,14 @@ DISTRO=""
LIBVIRT_NET_MODEL="virtio" LIBVIRT_NET_MODEL="virtio"
LIBVIRT_NET_OPTION="network=$VM_NETWORK,model=$LIBVIRT_NET_MODEL" LIBVIRT_NET_OPTION="network=$VM_NETWORK,model=$LIBVIRT_NET_MODEL"
OS_JSON_FILE="files/os_options.json" OS_JSON_FILE="files/os_options.json"
OS_JSON_FILE_INSTALL="files/software.json"
#VM_BASE_DIR=${VM_BASE_DIR:-"${HOME}/.local/share/libvirt"} #VM_BASE_DIR=${VM_BASE_DIR:-"${HOME}/.local/share/libvirt"}
#VM_BASE_DIR=${VM_BASE_DIR:-"${HOME}/var/lib/libvirt"} #VM_BASE_DIR=${VM_BASE_DIR:-"${HOME}/var/lib/libvirt"}
VM_BASE_DIR="${HOME}/vms" VM_BASE_DIR="${HOME}/vms"
VM_BASE_IMAGES="base" VM_BASE_IMAGES="base"
VM_DISK_EXTENSION="img" VM_DISK_EXTENSION="img"
VM_USERNAME="user" VM_USERNAME="user"
VM_SOFT="";
VM_IMAGE_PATH="${VM_BASE_DIR}/images/$1.img" VM_IMAGE_PATH="${VM_BASE_DIR}/images/$1.img"
CI_IMAGE_PATH="${VM_BASE_DIR}/images/$1-cidata.iso" CI_IMAGE_PATH="${VM_BASE_DIR}/images/$1-cidata.iso"

View File

@ -175,11 +175,12 @@ show_vm_menu() {
compare_checksum() compare_checksum()
{ {
CHECKSUM_TMP_FOLDER=$(mktemp) CHECKSUM_TMP_FOLDER=$(mktemp)
curl -L -o "${CHECKSUM_TMP_FOLDER}" \
wget --recursive \
--user-agent="Mozilla/5.0 (X11; Linux x86_64)" \
-O "${CHECKSUM_TMP_FOLDER}" \
"${VM_CHECKSUMS_URL}" "${VM_CHECKSUMS_URL}"
# wget --recursive \
# --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_OS_TYPE" == "BSD" && "${VM_OS_VARIANT}" == *"freebsd"* ]]; then
if [[ "${VM_BASE_IMAGE}" == *"zfs"* ]]; then if [[ "${VM_BASE_IMAGE}" == *"zfs"* ]]; then
@ -347,10 +348,14 @@ 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 \ # wget \
--user-agent="Mozilla/5.0 (X11; Linux x86_64)" \ # --user-agent="Mozilla/5.0 (X11; Linux x86_64)" \
-O "${VM_BASE_IMAGE_LOCATION}" \ # -O "${VM_BASE_IMAGE_LOCATION}" \
${VM_BASE_IMAGE_URL} # ${VM_BASE_IMAGE_URL}
curl -L ${VM_BASE_IMAGE_URL} \
-o ${VM_BASE_IMAGE_LOCATION} \
fi fi
} }
@ -533,3 +538,125 @@ vm_guest_install()
echo "user pass is: ${VM_USER_PASS}" echo "user pass is: ${VM_USER_PASS}"
echo "virsh console ${VM_HOSTNAME} --safe" echo "virsh console ${VM_HOSTNAME} --safe"
} }
vm_get_guest_info()
{
# 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}')
}
show_software_menu() {
# Display dynamic OS selection menu
echo "Select software to install:"
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 '.show_name')
printf "%2s. %s\n" "$ID" "$NAME"
VALID_IDS+=("$ID")
done < <(jq -r '.software[] | @base64' "$OS_JSON_FILE_INSTALL")
# Calculate max ID for range validation
ID_MAX=$(jq -r '[.software[].id] | max' "$OS_JSON_FILE_INSTALL")
ID_MIN=$(jq -r '[.software[].id] | min' "$OS_JSON_FILE_INSTALL")
# 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 ".software[] | select(.id == ${CHOICE})" "$OS_JSON_FILE_INSTALL")
if [ -z "$SELECTED" ]; then
echo "Error: Invalid selection." >&2
exit 1
fi
# Export variables in uppercase
VM_SOFT=$(echo "$SELECTED" | jq -r '.name')
}
vm_install_utils()
{
local VM=$1
local SCRIPT=''
local VM_DISTRO=''
local VM_VERSION=''
local VM_IP=$(vm_net_get_ip "$VM")
vm_get_guest_info ${VM_BASE_DIR}/xml/${VM}.xml
case ${VM_SOFT} in
docker)
if [[ "$VM_DISTRO" == "debian" ]]; then
SCRIPT='vm_example_scripts/docker_debian.sh'
elif [[ "$VM_DISTRO" == "ubuntu" ]]; then
SCRIPT='vm_example_scripts/docker_ubuntu.sh'
elif [[ "$VM_DISTRO" == "fedora" ]]; then
SCRIPT='vm_example_scripts/docker_fedora.sh'
elif [[ "$VM_DISTRO" == "freebsd" ]]; then
echo "Automated installation for Docker on ${VM_DISTRO} is not available."
echo "It's better to use Pidman instead"
exit 1
fi
;;
podman)
if [[ "$VM_DISTRO" == "debian" || "$VM_DISTRO" == "ubuntu" ]]; then
SCRIPT='vm_example_scripts/podman_deb.sh'
elif [[ "$VM_DISTRO" == "fedora" ]]; then
SCRIPT='vm_example_scripts/podman_fedora.sh'
elif [[ "$VM_DISTRO" == "freebsd" ]]; then
SCRIPT='vm_example_scripts/podman_freebsd.sh'
fi
;;
gitlab_ce)
if [[ "$VM_DISTRO" == "debian" || "$VM_DISTRO" == "ubuntu" ]]; then
SCRIPT='vm_example_scripts/gitlab_ce_deb.sh'
elif [[ "$VM_DISTRO" == "fedora" || "$VM_DISTRO" == "freebsd" ]]; then
#SCRIPT='vm_example_scripts/gitlab_ce_fedora.sh'
echo "Automated installation for Gitlab CE on ${VM_DISTRO} is not available by the moment."
exit 1
fi
;;
gitlab_runner)
if [[ "$VM_DISTRO" == "debian" || "$VM_DISTRO" == "ubuntu" ]]; then
SCRIPT='vm_example_scripts/gitlab_runner_deb.sh'
elif [[ "$VM_DISTRO" == "fedora" ]]; then
SCRIPT='vm_example_scripts/gitlab_runner_fedora.sh'
elif [[ "$VM_DISTRO" == "freebsd" ]]; then
SCRIPT='vm_example_scripts/gitlab_runner_freebsd.sh'
fi
;;
*)
echo "Unknown action: ${ACTION}" >&2
usage
;;
esac
#Exec script
#bash ${SCRIPT}
if [[ "$VM_DISTRO" == "freebsd" ]]; then
ssh -i ${VM_BASE_DIR}/ssh/${VM} -l${VM_USERNAME} ${VM_IP} "sudo sh -s" - < ${SCRIPT}
else
ssh -i ${VM_BASE_DIR}/ssh/${VM} -l${VM_USERNAME} ${VM_IP} "sudo bash -s" - < ${SCRIPT}
fi
}

24
files/software.json Normal file
View File

@ -0,0 +1,24 @@
{
"software": [
{
"id": 1,
"show_name": "Docker",
"name": "docker"
},
{
"id": 2,
"show_name": "Podman",
"name": "podman"
},
{
"id": 3,
"show_name": "Gitlab CE",
"name": "gitlab_ce"
},
{
"id": 4,
"show_name": "Gitlab Runner",
"name": "gitlab_runner"
}
]
}

View File

@ -1,3 +1,3 @@
#!/bin/bash #!/usr/bin/env bash
sudo mv /home/user/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml sudo mv /home/user/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml
sudo netplan apply sudo netplan apply

View File

@ -1,20 +1,36 @@
#!/bin/sh #!/usr/bin/env bash
#SOURCE: https://docs.docker.com/engine/install/debian/ # SOURCE: https://docs.docker.com/engine/install/debian/
# https://docs.docker.com/engine/install/linux-postinstall/ # https://docs.docker.com/engine/install/linux-postinstall/
export DEBIAN_FRONTEND=noninteractive
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done # Exit on error, undefined vars, and pipe failures
# Add Docker's official GPG key: set -euo pipefail
sudo apt-get update
sudo apt-get -y install ca-certificates curl gnupg export DEBIAN_FRONTEND=noninteractive
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # Remove old conflicting packages
sudo chmod a+r /etc/apt/keyrings/docker.gpg for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do
# Add the repository to Apt sources: apt-get remove -y "$pkg" 2>/dev/null || true
echo \ done
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ # Add Docker's official GPG key
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null apt-get update
sudo apt-get update apt-get -y install ca-certificates curl gnupg
sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin install -m 0755 -d /etc/apt/keyrings
sudo usermod -aG docker $USER curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources
# shellcheck disable=SC2027,SC2046 # We handle word splitting safely here
# shellcheck source=/dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
# Update and install Docker
apt-get update
apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Add user to docker group
usermod -aG docker "${USER}"
# Refresh group membership (optional, user may need to log out)
newgrp docker newgrp docker

View File

@ -0,0 +1,24 @@
#!/usr/bin/env bash
#SOURCE: https://docs.docker.com/engine/install/fedora/
# https://docs.docker.com/engine/install/linux-postinstall/
# Exit on error, undefined vars, and pipe failures
set -euo pipefail
dnf -y remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
dnf -y install dnf-plugins-core
dnf-3 config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker
usermod -aG docker "$USER"
echo "To use docker execute :"
echo "newgrp docker"

View File

@ -1,18 +1,50 @@
#!/bin/bash #!/usr/bin/env bash
export DEBIAN_FRONTEND=noninteractive # SOURCE: https://docs.docker.com/engine/install/ubuntu/
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done # https://docs.docker.com/engine/install/linux-postinstall/
# Add Docker's official GPG key:
sudo apt-get update # Exit on error, undefined vars, and pipe failures
sudo apt-get install -y ca-certificates curl set -euo pipefail
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc export DEBIAN_FRONTEND=noninteractive
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources: # Remove old or conflicting packages
echo \ for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ apt-get remove -y "$pkg" 2>/dev/null || true
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ done
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update # Install prerequisites
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin apt-get update
sudo usermod -aG docker $USER apt-get install -y ca-certificates curl gnupg
newgrp docker
# Create keyrings directory and add Docker GPG key
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
# Add Docker repository
# shellcheck source=/dev/null
. /etc/os-release
ARCH=$(dpkg --print-architecture)
CODENAME="$VERSION_CODENAME"
echo "deb [arch=$ARCH signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $CODENAME stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
# Update and install Docker
apt-get update
apt-get install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
# Add user to docker group
usermod -aG docker "$USER"
# Refresh group membership
echo "Docker installation completed."
echo "To use Docker without sudo, run:"
echo " newgrp docker"
echo "Or log out and back"

View File

@ -1,13 +1,17 @@
#!/bin/sh #!/usr/bin/env bash
#SOURCE: https://about.gitlab.com/install/#debian #SOURCE: https://about.gitlab.com/install/#debian
# Exit on error, undefined vars, and pipe failures
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive export DEBIAN_FRONTEND=noninteractive
NET_DEVICE='enp1s0' NET_DEVICE='enp1s0'
GITLAB_URL=$(ip -o -4 addr list ${NET_DEVICE} | awk '{print $4}' | cut -d/ -f1) GITLAB_URL=$(ip -o -4 addr list ${NET_DEVICE} | awk '{print $4}' | cut -d/ -f1)
#Base dependencies #Base dependencies
sudo apt-get update apt-get update
sudo apt-get install -y curl openssh-server ca-certificates perl apt-get install -y curl openssh-server ca-certificates perl
#OPTIONAL: postfix #OPTIONAL: postfix
#sudo apt-get install -y postfix #apt-get install -y postfix
#Add gitlab repo #Add gitlab repo
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | bash
sudo EXTERNAL_URL="${GITLAB_URL}" apt-get install gitlab-ee EXTERNAL_URL="${GITLAB_URL}" apt-get install gitlab-ee

View File

@ -0,0 +1,20 @@
#!/usr/bin/env bash
#Source: https://docs.gitlab.com/install/package/almalinux/?tab=Community+Edition
# Exit on error, undefined vars, and pipe failures
set -euo pipefail
NET_DEVICE='enp1s0'
GITLAB_URL=$(ip -o -4 addr list ${NET_DEVICE} | awk '{print $4}' | cut -d/ -f1)
#Enable sshd. enabled on cloud-image by default
#systemctl enable --now sshd
#Set firewall rules
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=ssh
systemctl reload firewalld
#Add repo
curl "https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh" | bash
#Install Gitlab CE
EXTERNAL_URL="${GITLAB_URL}" dnf install gitlab-ce

View File

@ -1,12 +0,0 @@
#!/bin/sh
#SOURCE: https://about.gitlab.com/install/#debian
export DEBIAN_FRONTEND=noninteractive
cat <<EOF | sudo tee /etc/apt/preferences.d/pin-gitlab-runner.pref
Explanation: Prefer GitLab provided packages over the Debian native ones
Package: gitlab-runner
Pin: origin packages.gitlab.com
Pin-Priority: 1001
EOF
sudo apt-get update
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
sudo apt-get -y install gitlab-runner

View File

@ -0,0 +1,16 @@
#!/usr/bin/env bash
#SOURCE: https://about.gitlab.com/install/#debian
# Exit on error, undefined vars, and pipe failures
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
# cat <<EOF | tee /etc/apt/preferences.d/pin-gitlab-runner.pref
# Explanation: Prefer GitLab provided packages over the Debian native ones
# Package: gitlab-runner
# Pin: origin packages.gitlab.com
# Pin-Priority: 1001
# EOF
apt-get update
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | bash
apt-get -y install gitlab-runner

View File

@ -0,0 +1,8 @@
#!/usr/bin/env bash
#SOURCE: https://docs.gitlab.com/runner/install/
# Exit on error, undefined vars, and pipe failures
set -euo pipefail
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
sudo dnf -Y install gitlab-runner

View File

@ -0,0 +1,60 @@
#!/usr/bin/env sh
#SOURCE: https://docs.gitlab.com/runner/install/
# Exit on error, undefined vars, and pipe failures
set -euo pipefail
#Creating gitlab user
sudo pw group add -n gitlab-runner
sudo pw user add -n gitlab-runner -g gitlab-runner -s /bin/sh
sudo mkdir /home/gitlab-runner
sudo chown gitlab-runner:gitlab-runner /home/gitlab-runner
#Downloading binary and giving permissions
sudo fetch -o /usr/local/bin/gitlab-runner https://s3.dualstack.us-east-1.amazonaws.com/gitlab-runner-downloads/latest/binaries/gitlab-runner-freebsd-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
#Creating logfile and giving permissions
sudo touch /var/log/gitlab_runner.log && sudo chown gitlab-runner:gitlab-runner /var/log/gitlab_runner.log
#Creating rc service
mkdir -p /usr/local/etc/rc.d
sudo sh -c 'cat > /usr/local/etc/rc.d/gitlab_runner' << "EOF"
#!/bin/sh
# PROVIDE: gitlab_runner
# REQUIRE: DAEMON NETWORKING
# BEFORE:
# KEYWORD:
. /etc/rc.subr
name="gitlab_runner"
rcvar="gitlab_runner_enable"
user="gitlab-runner"
user_home="/home/gitlab-runner"
command="/usr/local/bin/gitlab-runner"
command_args="run"
pidfile="/var/run/${name}.pid"
start_cmd="gitlab_runner_start"
gitlab_runner_start()
{
export USER=${user}
export HOME=${user_home}
if checkyesno ${rcvar}; then
cd ${user_home}
/usr/sbin/daemon -u ${user} -p ${pidfile} ${command} ${command_args} > /var/log/gitlab_runner.log 2>&1
fi
}
load_rc_config $name
run_rc_command $1
EOF
sudo chmod +x /usr/local/etc/rc.d/gitlab_runner
echo "Now register a runner and then:"
echo "sudo sysrc gitlab_runner_enable=YES"
echo "sudo service gitlab_runner start"

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
HAPROXY_URL="https://github.com/haproxytech/kubernetes-ingress/releases/download/v1.10.11/haproxy-ingress-controller_1.10.11_Linux_x86_64.tar.gz" HAPROXY_URL="https://github.com/haproxytech/kubernetes-ingress/releases/download/v1.10.11/haproxy-ingress-controller_1.10.11_Linux_x86_64.tar.gz"
# Install HAProxy # Install HAProxy
apt update apt update

0
vm_example_scripts/init_freebsd.sh Normal file → Executable file
View File

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
helm repo add jenkins https://charts.jenkins.io helm repo add jenkins https://charts.jenkins.io
helm repo update helm repo update
kubectl create namespace jenkins kubectl create namespace jenkins

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
VM_BASE_DIR=${VM_BASE_DIR:-"${HOME}/vms"} VM_BASE_DIR=${VM_BASE_DIR:-"${HOME}/vms"}
VM_USER="user" VM_USER="user"
VM=$1 VM=$1

View File

@ -0,0 +1,7 @@
#!/usr/bin/env bash
# Exit on error, undefined vars, and pipe failures
set -euo pipefail
apt-get update
apt-get -y install podman buildah

View File

@ -0,0 +1,7 @@
#!/usr/bin/env bash
# Exit on error, undefined vars, and pipe failures
set -euo pipefail
dnf update
dnf -y install podman buildah

View File

@ -0,0 +1,62 @@
#!/usr/bin/env sh
# Source: https://podman.io/docs/installation#installing-on-freebsd-140
# Variables
LINE='fdesc /dev/fd fdescfs rw 0 0'
FSTAB="/etc/fstab"
FD_MOUNTPOINT="/dev/fd"
FSTYPE="fdescfs"
SERVICE_NAME='linux'
# Enable Linux compatibility
sysrc linux_enable=YES
# Start the service if not running
if ! service "${SERVICE_NAME}" status >/dev/null 2>&1; then
if ! service "${SERVICE_NAME}" start; then
echo "Error: Cannot start ${SERVICE_NAME}." >&2
exit 1
fi
echo "Service ${SERVICE_NAME} started"
fi
# Add fdescfs to /etc/fstab if not present
if ! grep -q 'fdesc[[:space:]]\+/dev/fd[[:space:]]\+fdescfs[[:space:]]\+rw[[:space:]]\+0[[:space:]]\+0' "$FSTAB"; then
printf '%s\n' "$LINE" | tee -a "$FSTAB" > /dev/null
fi
# Install and enable Podman
pkg install -y podman-suite
service podman enable
# Mount fdescfs if not already mounted
if ! mount | grep -w "${FD_MOUNTPOINT}" | grep -q "$FSTYPE"; then
mount -t fdescfs fdesc /dev/fd
fi
# Configure pf firewall
cp /usr/local/etc/containers/pf.conf.sample /etc/pf.conf
sed -i '' 's/ix0/vtnet0/g' /etc/pf.conf
# Enable pf at boot
if ! grep -q 'pf_load="YES"' "/boot/loader.conf"; then
echo 'pf_load="YES"' | tee -a /boot/loader.conf > /dev/null
fi
# Load pf module and enable local filtering
kldload pf
sysctl net.pf.filter_local=1
if ! grep -q 'net.pf.filter_local=1' "/etc/sysctl.conf.local"; then
echo 'net.pf.filter_local=1' | tee -a /etc/sysctl.conf.local > /dev/null
fi
service pf enable
service pf restart
# Configure storage backend
if pgrep -x zfskern >/dev/null 2>&1; then
zfs create -o mountpoint=/var/db/containers zroot/containers
else
sed -I .bak -e 's/driver = "zfs"/driver = "vfs"/' /usr/local/etc/containers/storage.conf
fi

View File

@ -18,6 +18,7 @@ USAGE
$0 delete NAME $0 delete NAME
$0 info NAME $0 info NAME
$0 connect NAME $0 connect NAME
$0 install NAME
$0 list $0 list
ACTIONS ACTIONS
@ -26,6 +27,7 @@ ACTIONS
list List all defined virtual machines list List all defined virtual machines
info Show information about a virtual machine info Show information about a virtual machine
connect Connect to the console of a virtual machine connect Connect to the console of a virtual machine
install Install specific software into an existing VM
OPTIONS OPTIONS
-h Show this help message -h Show this help message
@ -147,7 +149,11 @@ case "${ACTION}" in
vm_connect ${VM_HOSTNAME} vm_connect ${VM_HOSTNAME}
fi fi
;; ;;
install)
VM_HOSTNAME="$1"
show_software_menu
vm_install_utils $VM_HOSTNAME
;;
list) list)
vm_list vm_list
;; ;;