mirror of
https://github.com/Jarli01/xenorchestra_installer
synced 2025-12-24 04:29:59 +00:00
Compare commits
35 Commits
curl-test
...
OS-Spec-De
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5637752960 | ||
|
|
9c8eea5347 | ||
|
|
15ddc7cea5 | ||
|
|
5a5f8035f2 | ||
|
|
3c3e7710c7 | ||
|
|
58fcac8659 | ||
|
|
ac22baf7a9 | ||
|
|
8c8f2e0d1d | ||
|
|
ada0c8dc91 | ||
|
|
e54fc57cdc | ||
|
|
47bd62ec0a | ||
|
|
c092780246 | ||
|
|
5a04a2aed6 | ||
|
|
bfc606a207 | ||
|
|
95c80ae455 | ||
|
|
d12423d78c | ||
|
|
910e9c2cae | ||
|
|
b8382da30d | ||
|
|
b1272516b9 | ||
|
|
91869f1d73 | ||
|
|
0cebde394a | ||
|
|
efb9114bcc | ||
|
|
99a4ee7590 | ||
|
|
4ed35c8fa3 | ||
|
|
722080371c | ||
|
|
1e38e80b20 | ||
|
|
8779dd628d | ||
|
|
f61fdcdff3 | ||
|
|
b7638ef28f | ||
|
|
095c7baf3c | ||
|
|
b9815e4271 | ||
|
|
bd6fcddf04 | ||
|
|
1a19441859 | ||
|
|
7d07d1ba9f | ||
|
|
8e8a3148c6 |
37
README.md
37
README.md
@@ -23,8 +23,8 @@ Xen-Orchestra (Community Edition) allows you to administer Citrix Hypervisor (ak
|
||||
|
||||
Run the following steps from a root shell on your **Ubuntu or Debian** host.
|
||||
|
||||
curl https://raw.githubusercontent.com/Jarli01/xenorchestra_installer/master/xo_install.sh | sudo bash
|
||||
<password>
|
||||
sudo bash
|
||||
bash -c "$(curl https://raw.githubusercontent.com/Jarli01/xenorchestra_installer/master/xo_install.sh)"
|
||||
|
||||
The default username and password are applied, admin@admin.net and admin for the password
|
||||
|
||||
@@ -33,29 +33,13 @@ If you don't want NFS capabilities run ```sudo apt-get remove nfs-common```.
|
||||
* Do not use LAMP
|
||||
* SSH Access is optional, but highly recommended
|
||||
|
||||
## Updates
|
||||
|
||||
To maintain your installation from Source or from this repo. (either prepackaged or scripted installation) we recommend using the update script which this community maintains. This can be [found here](https://github.com/Jarli01/xenorchestra_updater) and doesn't require you to download or install a separate package to your XOCE installation. Simply run it via shell session of your XOCE host.
|
||||
|
||||
# Declarations
|
||||
|
||||
This script automates the manual process which can be [found here](https://xen-orchestra.com/docs/from_the_sources.html) as well as removes a few feature restrictions that otherwise would need to be changed manually if following the manual installation process. This script is not officially supported by the Vates team, but is supported by this community.
|
||||
|
||||
# Prepacked installation
|
||||
* *This is a very small installation and while it will operate, it may not meet all of your requirements, use at your own discretion*
|
||||
|
||||
To download and deploy a prepacked Ubuntu 20.04 installation of Xen Orchestra (CE) run the below from an SSH session on your XCP-NG/Citrix Hypervisor (XenServer) host(s)
|
||||
|
||||
bash -c "$(curl -s https://raw.githubusercontent.com/Jarli01/xenorchestra_installer/master/xoce-import.sh)"
|
||||
|
||||
MD5 Checksum `5db537c4b6388a4323583357b6e13d20`
|
||||
SHA256 Checksum `c487d63f2eef67fcaf0e9c4e4998d4a3948fdad960cb1af5a70fcb80b07c2551`
|
||||
|
||||
For verification of SHA256 checksum the XVA file can be downloaded directly and verified/imported.
|
||||
|
||||
Direct Download https://srv-file8.gofile.io/download/CYaI0l/XOCE.xva
|
||||
|
||||
To login to the console use:
|
||||
Username: **XOCE**
|
||||
Password: **XOCE**
|
||||
|
||||
**Change the password if you are using this in production**
|
||||
This script automates the manual process which can be [found here](https://docs.xen-orchestra.com/installation) as well as removes a few feature restrictions that otherwise would need to be changed manually if following the manual installation process. This script is not officially supported by the Vates team, but is supported by this community.
|
||||
|
||||
# Self-signed SSL
|
||||
|
||||
@@ -99,4 +83,11 @@ While the goal initially was to have a solution as close to XOA as possible, wit
|
||||
|
||||
To keep XOCE up to date I recommend that anyone who's used this installation script or the sources installation to use this: https://github.com/Jarli01/xenorchestra_updater
|
||||
|
||||
## Adding XOCE v6 to your installation (this is a Work In Progress by Vates)
|
||||
|
||||
cd /opt/xen-orchestra
|
||||
yarn run turbo run build --filter @xen-orchestra/web
|
||||
|
||||
Once the installation is completed, you can then go to [https://your-host-ip/v6](https://your-host-ip/v6)
|
||||
|
||||
|
||||
|
||||
187
xo_install.sh
187
xo_install.sh
@@ -1,101 +1,184 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
# Check if we were effectively run as root
|
||||
[ $EUID = 0 ] || { echo "This script needs to be run as root!"; exit 1; }
|
||||
# --- Check if we were effectively run as root ---
|
||||
[ "${EUID:-$(id -u)}" = 0 ] || { echo "This script needs to be run as root!"; exit 1; }
|
||||
|
||||
# Check for required memory
|
||||
# --- Check for required memory ---
|
||||
totalk=$(awk '/^MemTotal:/{print $2}' /proc/meminfo)
|
||||
if [ "$totalk" -lt "3000000" ]; then echo "XOCE Requires at least 3GB Memory!"; exit 1; fi
|
||||
if [ "$totalk" -lt "2000000" ]; then echo "XOCE Requires at least 2GB Memory!"; exit 1; fi
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
distro=$(/usr/bin/lsb_release -is)
|
||||
if [ "$distro" = "Ubuntu" ]; then /usr/bin/add-apt-repository multiverse; fi
|
||||
# --- OS detection ---
|
||||
if [ -f /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
distro="$ID"
|
||||
version="$VERSION_ID"
|
||||
else
|
||||
echo "Unable to detect OS via /etc/os-release"; exit 1
|
||||
fi
|
||||
|
||||
# --- Deb Point Release Check ---
|
||||
if [ "$distro" = "debian" ] && [ -r /etc/debian_version ]; then
|
||||
deb_point=$(sed -E 's/^([0-9]+(\.[0-9]+)?).*/\1/' /etc/debian_version)
|
||||
version="${deb_point:-$version}"
|
||||
fi
|
||||
|
||||
echo "Detected: $distro $version"
|
||||
|
||||
# --- Version compare helper ---
|
||||
version_ge() { dpkg --compare-versions "$1" ge "$2"; }
|
||||
|
||||
# --- Minimum supported versions ---
|
||||
case "$distro" in
|
||||
debian)
|
||||
version_ge "$version" "12.5" || { echo "Debian $version too old (min 12.5)"; exit 1; }
|
||||
;;
|
||||
ubuntu)
|
||||
version_ge "$version" "24.04" || { echo "Ubuntu $version too old (min 24.04)"; exit 1; }
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported distribution: $distro"; exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# --- Helper: apt install if available ---
|
||||
apt_install_if_available() {
|
||||
local pkg="$1"
|
||||
/usr/bin/apt-get update -qq
|
||||
if /usr/bin/apt-cache policy "$pkg" 2>/dev/null | grep -q 'Candidate:'; then
|
||||
echo "Installing $pkg"
|
||||
/usr/bin/apt-get --yes install "$pkg"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# --- FUSE runtime install ---
|
||||
install_fuse_runtime() {
|
||||
echo "Ensuring FUSE runtime (libfuse.so.2)..."
|
||||
for p in libfuse2 libfuse2t64; do
|
||||
apt_install_if_available "$p" && break
|
||||
done
|
||||
/sbin/ldconfig -v 2>/dev/null || true
|
||||
if ! /sbin/ldconfig -p | grep -Fq 'libfuse.so.2'; then
|
||||
echo "ERROR: libfuse.so.2 not found. XO requires FUSE2 runtime."
|
||||
exit 1
|
||||
fi
|
||||
echo "libfuse.so.2 verified."
|
||||
}
|
||||
|
||||
# --- Install dependencies ---
|
||||
install_deps() {
|
||||
echo "Installing general dependencies..."
|
||||
/usr/bin/apt-get update
|
||||
/usr/bin/apt-get --yes install git curl apt-transport-https gnupg ca-certificates
|
||||
|
||||
case "$distro" in
|
||||
debian)
|
||||
echo "Installing Debian-specific dependencies..."
|
||||
install_fuse_runtime
|
||||
/usr/bin/apt-get --yes install libnbd-bin nbdkit nbdkit-plugin-vddk || true
|
||||
;;
|
||||
ubuntu)
|
||||
echo "Installing Ubuntu-specific dependencies..."
|
||||
/usr/bin/apt-get --yes install software-properties-common
|
||||
/usr/bin/add-apt-repository -y multiverse || true
|
||||
/usr/bin/apt-get update
|
||||
install_fuse_runtime
|
||||
/usr/bin/apt-get --yes install libnbd-bin nbdkit || true
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "Installing XOCE common dependencies..."
|
||||
/usr/bin/apt-get --yes install \
|
||||
build-essential redis-server libpng-dev python3-minimal \
|
||||
libvhdi-utils nfs-common lvm2 cifs-utils openssl || true
|
||||
}
|
||||
|
||||
install_deps
|
||||
|
||||
# --- Script variables ---
|
||||
xo_branch="master"
|
||||
xo_server="https://github.com/vatesfr/xen-orchestra"
|
||||
n_repo="https://raw.githubusercontent.com/tj/n/master/bin/n"
|
||||
yarn_repo="deb https://dl.yarnpkg.com/debian/ stable main"
|
||||
yarn_repo="deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main"
|
||||
yarn_gpg="https://dl.yarnpkg.com/debian/pubkey.gpg"
|
||||
n_location="/usr/local/bin/n"
|
||||
xo_server_dir="/opt/xen-orchestra"
|
||||
systemd_service_dir="/lib/systemd/system"
|
||||
xo_service="xo-server.service"
|
||||
|
||||
# Ensures that Yarn dependencies are installed
|
||||
/usr/bin/apt-get update
|
||||
/usr/bin/apt-get --yes install git curl apt-transport-https gnupg
|
||||
|
||||
#Install yarn
|
||||
# --- Install Yarn ---
|
||||
cd /opt
|
||||
|
||||
/usr/bin/curl -sS $yarn_gpg | apt-key add -
|
||||
/usr/bin/curl -sSL "$yarn_gpg" | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null
|
||||
echo "$yarn_repo" | tee /etc/apt/sources.list.d/yarn.list
|
||||
/usr/bin/apt-get update
|
||||
/usr/bin/apt-get install --yes yarn
|
||||
|
||||
# Install n
|
||||
/usr/bin/curl -o $n_location $n_repo
|
||||
/bin/chmod +x $n_location
|
||||
# --- Install Node via n ---
|
||||
/usr/bin/curl -o "$n_location" "$n_repo"
|
||||
/bin/chmod +x "$n_location"
|
||||
/usr/local/bin/n lts
|
||||
|
||||
# Install node via n
|
||||
n lts
|
||||
# Ensure new Node is used
|
||||
export PATH="/usr/local/bin:$PATH"
|
||||
hash -r
|
||||
|
||||
# Symlink node directories
|
||||
ln -s /usr/bin/node /usr/local/bin/node
|
||||
node_version=$(node -v | sed 's/v//')
|
||||
dpkg --compare-versions "$node_version" lt "20.18" && {
|
||||
echo "ERROR: Node version $node_version too old. XO requires >=20.18"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Install XO dependencies
|
||||
/usr/bin/apt-get install --yes build-essential redis-server libpng-dev git python2-minimal libvhdi-utils nfs-common lvm2 cifs-utils
|
||||
|
||||
/usr/bin/git clone -b $xo_branch $xo_server
|
||||
|
||||
cd $xo_server_dir
|
||||
# --- Clone & build XO ---
|
||||
/usr/bin/git clone -b "$xo_branch" "$xo_server" "$xo_server_dir" 2>/dev/null || true
|
||||
cd "$xo_server_dir"
|
||||
/usr/bin/yarn
|
||||
/usr/bin/yarn build
|
||||
|
||||
cd packages/xo-server
|
||||
cp sample.config.toml .xo-server.toml
|
||||
cp -f sample.config.toml .xo-server.toml
|
||||
|
||||
dest=/usr/local/lib/node_modules/
|
||||
#Create node_modules directory if doesn't exist
|
||||
mkdir -p $dest
|
||||
mkdir -p "$dest"
|
||||
|
||||
# Plugins to ignore
|
||||
ignoreplugins=("xo-server-test")
|
||||
|
||||
# Symlink all plugins
|
||||
for source in $(ls -d /opt/xen-orchestra/packages/xo-server-*); do
|
||||
plugin=$(basename $source)
|
||||
if [[ "${ignoreplugins[@]}" =~ $plugin ]]; then
|
||||
echo "Ignoring $plugin plugin"
|
||||
else
|
||||
ln -s "$source" "$dest"
|
||||
fi
|
||||
for source in $(ls -d /opt/xen-orchestra/packages/xo-server-* 2>/dev/null || true); do
|
||||
plugin=$(basename "$source")
|
||||
[[ " ${ignoreplugins[*]} " == *" $plugin "* ]] && continue
|
||||
ln -sfn "$source" "$dest"
|
||||
done
|
||||
|
||||
if [[ ! -e $systemd_service_dir/$xo_service ]] ; then
|
||||
|
||||
/bin/cat << EOF >> $systemd_service_dir/$xo_service
|
||||
# Systemd service for XO-Server.
|
||||
# --- systemd service ---
|
||||
if [[ -e "$systemd_service_dir/$xo_service" ]]; then
|
||||
rm -f "$systemd_service_dir/$xo_service"
|
||||
fi
|
||||
|
||||
/bin/cat << 'EOF' > "$systemd_service_dir/$xo_service"
|
||||
[Unit]
|
||||
Description= XO Server
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/xen-orchestra/packages/xo-server/
|
||||
ExecStart=/usr/local/bin/node ./bin/xo-server
|
||||
ExecStart=/usr/local/bin/node ./dist/cli.mjs
|
||||
Restart=always
|
||||
SyslogIdentifier=xo-server
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
fi
|
||||
|
||||
/bin/systemctl daemon-reload
|
||||
/bin/systemctl enable $xo_service
|
||||
/bin/systemctl start $xo_service
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
echo "Installation complete, open a browser to:" && hostname -I && echo "" && echo "Default Login:"admin@admin.net" Password:"admin"" && echo "" && echo "Don't forget to change your password!"
|
||||
/bin/systemctl enable "$xo_service"
|
||||
/bin/systemctl start "$xo_service" || (sleep 2 && /bin/systemctl start "$xo_service")
|
||||
|
||||
echo
|
||||
echo "Installation complete, open a browser to:" && hostname -I
|
||||
echo
|
||||
echo 'Default Login: "admin@admin.net" Password: "admin"'
|
||||
echo
|
||||
echo "Don't forget to change your password!"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
XOCE_URL=https://nc.nl.tab.digital/s/5tKYF9AyLjowm3E/download
|
||||
XOCE_URL=https://nc.nl.tab.digital/s/WQmCwmH4e9EdTTA/download
|
||||
|
||||
# Welcome message
|
||||
printf "\n\033[1mWelcome to the XOCE auto-deploy script!\033[0m\n\n"
|
||||
@@ -10,7 +10,7 @@ then
|
||||
echo
|
||||
echo 'Sorry, the xe command is required for this auto-deploy.'
|
||||
echo
|
||||
echo 'Please, make sure you are on a XenServer host.'
|
||||
echo 'Please, make sure you are on a XCP-ng/XenServer host.'
|
||||
echo
|
||||
exit 1
|
||||
fi
|
||||
@@ -18,8 +18,8 @@ fi
|
||||
# Basic check: are we on a XS host?
|
||||
if grep -Fxq "XenServer" /etc/issue
|
||||
then
|
||||
printf "\nSorry, it seems you are not on a XenServer (XCP-ng) host.\n\n"
|
||||
printf "\n\033[1mThis script is meant to be deployed on XenServer (or XCP-ng) only.\033[0m\n\n"
|
||||
printf "\nSorry, it seems you are not on a XCP-ng/XenServer host.\n\n"
|
||||
printf "\n\033[1mThis script is meant to be deployed on XCP-ng or XenServer only.\033[0m\n\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -36,7 +36,7 @@ then
|
||||
read -p "dns? [8.8.8.8] " dns
|
||||
dns=${dns:-8.8.8.8}
|
||||
else
|
||||
printf "\nYour XOCE will be started using DHCP\n\n"
|
||||
printf "\nYour XOCE installation will be started using DHCP\n\n"
|
||||
fi
|
||||
|
||||
# Downloading and importing the VM
|
||||
@@ -56,7 +56,7 @@ fi
|
||||
import=$?
|
||||
if [ $import -ne 0 ]
|
||||
then
|
||||
printf "\n\nAuto deploy failed. Please contact us on xen-orchestra.com live chat for assistance.\nError:\n\n %s\n\n" "$uuid"
|
||||
printf "\n\nAuto deploy failed. Please contact us on https://github.com/Jarli01/xenorchestra_installer/issues for assistance.\nError:\n\n %s\n\n" "$uuid"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@@ -75,7 +75,7 @@ sleep 2
|
||||
|
||||
# Waiting for the VM IP from Xen tools for 60 secs
|
||||
|
||||
printf "Waiting for your XOCE to be ready…\n"
|
||||
printf "Waiting for XOCE to be ready…\n"
|
||||
url=$(xe vm-param-get uuid=$uuid param-name=networks param-key=0/ip 2> /dev/null)
|
||||
wait=0
|
||||
limit=60
|
||||
@@ -95,7 +95,7 @@ done
|
||||
|
||||
if [ "$ip" != 'dhcp' ]
|
||||
then
|
||||
printf "\n\033[1mYour XOCE is ready on https://%s/\033[0m\n" "$ip"
|
||||
printf "\n\033[1mYour XOCE is ready at https://%s/\033[0m\n" "$ip"
|
||||
# clean the xenstore data
|
||||
xe vm-param-remove param-name=xenstore-data param-key=vm-data/dns param-key=vm-data/ip param-key=vm-data/netmask param-key=vm-data/gateway uuid=$uuid
|
||||
|
||||
@@ -105,7 +105,7 @@ elif [ -z "$url" ]
|
||||
then
|
||||
printf "\n\033[1mYour XOCE booted but we couldn't fetch its IP address\033[0m\n"
|
||||
else
|
||||
printf "\n\033[1mYour XOCE is ready on https://%s/\033[0m\n" "$url"
|
||||
printf "\n\033[1mYour XOCE is ready at https://%s/\033[0m\n" "$url"
|
||||
fi
|
||||
printf "\nDefault UI credentials: admin@admin.net/admin\nDefault console credentials: xoce/xoce\n"
|
||||
printf "\nVM UUID: %s\n\n" "$uuid"
|
||||
|
||||
Reference in New Issue
Block a user