2 Commits

Author SHA1 Message Date
Dustin B
7334a9c888 Delete import 2020-07-22 14:45:44 -04:00
Dustin B
85ce5b3078 Direct Import
Replicates the direct import process
2020-07-22 11:37:16 -04:00
3 changed files with 68 additions and 205 deletions

View File

@@ -1,69 +1,22 @@
# Xen-Orchestra (Community Edition) Installer # Xen-Orchestra (Community Edition) Installer
Xen-Orchestra (Community Edition) allows you to administer Citrix Hypervisor (aka XenServer) and XCP-ng as well as backup any VM's running on these systems. The single line installation script allows you to go from a bare-minimal installation of [Ubuntu](https://ubuntu.com/download/server) or [Debian (Server)](https://www.debian.org/distrib/netinst) to fully operational XOCE server. Xen-Orchestra (Community Edition) allows you to administer Citrix XenServer and XCP-ng as well as backup any VM's running on these systems.
## System Minimum Requirements for installation The single line installation script allows you to go from a bare-minimal installation of [Ubuntu](https://ubuntu.com/download/server) or [Debian (Server)](https://www.debian.org/distrib/netinst) to fully operational XOCE server. Run the following steps from a root shell.
* 1 vCPU curl https://raw.githubusercontent.com/Jarli01/xenorchestra_installer/master/xo_install.sh | sudo bash
* 3 GiB RAM <password>
* 10 GiB disk space
## System recommendations for operation
* 2 vCPU recommended
* 3 GiB of RAM (for environments containing 500+ VMs increase the amount RAM)
* 20 GiB disk space (for system updates)
## Assumptions
* We assume you have a Virtual or physical server running a currently supported Ubuntu or Debian server installation with internet connectivity
* You've read this community and understand what installation entails and does on your soon to be XOCE server
## Installation
Run the following steps from a root shell on your **Ubuntu or Debian** host.
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 The default username and password are applied, admin@admin.net and admin for the password
If you don't want NFS capabilities run ```sudo apt-get remove nfs-common```. If you don't want NFS capabilities run ```sudo apt-get remove nfs-common```.
* Do not use LAMP * Do not use LAMP
* SSH Access is optional, but highly recommended * SSH Access is optional, but highly recommended
## Updates # Declaration
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. 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.
# Declarations
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
If you are running this internally and need SSL (recommended) follow the below steps to create a self-signed SSL key and certificate; while browsers will still say the connection is unsecured, this is because the certificate isn't from a public authority and is on your LAN. You can add this cert to your systems root authority if it want to to remove the warning. Alternatively a reverse proxy can be used for public facing installations.
## Generate your key and cert from your XOCE installation
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/ssl/private/key.pem -out /etc/ssl/certs/certificate.pem
Now edit the xo-server.toml file
vi /opt/xen-orchestra/packages/xo-server/.xo-server.toml
Comment-out or edit the port from 80 to 443 and add the cert and key to the appropriate locations within this file.
port = 443
cert = '/etc/ssl/certs/certificate.pem'
key = '/etc/ssl/private/key.pem'
Restart xo-server.service
systemctl restart xo-server.service
Reload your XOCE website using SSL (https://your-host-ip)
# Problems? # Problems?
@@ -83,11 +36,4 @@ 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 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)

View File

@@ -1,184 +1,101 @@
#!/bin/bash #!/bin/bash
set -euo pipefail
IFS=$'\n\t'
# --- Check if we were effectively run as root --- # Check if we were effectively run as root
[ "${EUID:-$(id -u)}" = 0 ] || { echo "This script needs to be run as root!"; exit 1; } [ $EUID = 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) totalk=$(awk '/^MemTotal:/{print $2}' /proc/meminfo)
if [ "$totalk" -lt "2000000" ]; then echo "XOCE Requires at least 2GB Memory!"; exit 1; fi if [ "$totalk" -lt "3000000" ]; then echo "XOCE Requires at least 3GB Memory!"; exit 1; fi
export DEBIAN_FRONTEND=noninteractive
# --- OS detection --- distro=$(/usr/bin/lsb_release -is)
if [ -f /etc/os-release ]; then if [ "$distro" = "Ubuntu" ]; then /usr/bin/add-apt-repository multiverse; fi
. /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_branch="master"
xo_server="https://github.com/vatesfr/xen-orchestra" xo_server="https://github.com/vatesfr/xen-orchestra"
n_repo="https://raw.githubusercontent.com/tj/n/master/bin/n" n_repo="https://raw.githubusercontent.com/tj/n/master/bin/n"
yarn_repo="deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" yarn_repo="deb https://dl.yarnpkg.com/debian/ stable main"
yarn_gpg="https://dl.yarnpkg.com/debian/pubkey.gpg" yarn_gpg="https://dl.yarnpkg.com/debian/pubkey.gpg"
n_location="/usr/local/bin/n" n_location="/usr/local/bin/n"
xo_server_dir="/opt/xen-orchestra" xo_server_dir="/opt/xen-orchestra"
systemd_service_dir="/lib/systemd/system" systemd_service_dir="/lib/systemd/system"
xo_service="xo-server.service" xo_service="xo-server.service"
# --- Install Yarn --- # 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
cd /opt cd /opt
/usr/bin/curl -sSL "$yarn_gpg" | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null
/usr/bin/curl -sS $yarn_gpg | apt-key add -
echo "$yarn_repo" | tee /etc/apt/sources.list.d/yarn.list echo "$yarn_repo" | tee /etc/apt/sources.list.d/yarn.list
/usr/bin/apt-get update /usr/bin/apt-get update
/usr/bin/apt-get install --yes yarn /usr/bin/apt-get install --yes yarn
# --- Install Node via n --- # Install n
/usr/bin/curl -o "$n_location" "$n_repo" /usr/bin/curl -o $n_location $n_repo
/bin/chmod +x "$n_location" /bin/chmod +x $n_location
/usr/local/bin/n lts
# Ensure new Node is used # Install node via n
export PATH="/usr/local/bin:$PATH" n lts
hash -r
node_version=$(node -v | sed 's/v//') # Symlink node directories
dpkg --compare-versions "$node_version" lt "20.18" && { ln -s /usr/bin/node /usr/local/bin/node
echo "ERROR: Node version $node_version too old. XO requires >=20.18"
exit 1
}
# --- Clone & build XO --- # Install XO dependencies
/usr/bin/git clone -b "$xo_branch" "$xo_server" "$xo_server_dir" 2>/dev/null || true /usr/bin/apt-get install --yes build-essential redis-server libpng-dev git python2-minimal libvhdi-utils nfs-common lvm2 cifs-utils
cd "$xo_server_dir"
/usr/bin/git clone -b $xo_branch $xo_server
cd $xo_server_dir
/usr/bin/yarn /usr/bin/yarn
/usr/bin/yarn build /usr/bin/yarn build
cd packages/xo-server cd packages/xo-server
cp -f sample.config.toml .xo-server.toml cp sample.config.toml .xo-server.toml
dest=/usr/local/lib/node_modules/ dest=/usr/local/lib/node_modules/
mkdir -p "$dest" #Create node_modules directory if doesn't exist
mkdir -p $dest
# Plugins to ignore
ignoreplugins=("xo-server-test") ignoreplugins=("xo-server-test")
for source in $(ls -d /opt/xen-orchestra/packages/xo-server-* 2>/dev/null || true); do
plugin=$(basename "$source") # Symlink all plugins
[[ " ${ignoreplugins[*]} " == *" $plugin "* ]] && continue for source in $(ls -d /opt/xen-orchestra/packages/xo-server-*); do
ln -sfn "$source" "$dest" plugin=$(basename $source)
if [[ "${ignoreplugins[@]}" =~ $plugin ]]; then
echo "Ignoring $plugin plugin"
else
ln -s "$source" "$dest"
fi
done done
# --- systemd service --- if [[ ! -e $systemd_service_dir/$xo_service ]] ; then
if [[ -e "$systemd_service_dir/$xo_service" ]]; then
rm -f "$systemd_service_dir/$xo_service" /bin/cat << EOF >> $systemd_service_dir/$xo_service
fi # Systemd service for XO-Server.
/bin/cat << 'EOF' > "$systemd_service_dir/$xo_service"
[Unit] [Unit]
Description= XO Server Description= XO Server
After=network-online.target After=network-online.target
[Service] [Service]
WorkingDirectory=/opt/xen-orchestra/packages/xo-server/ WorkingDirectory=/opt/xen-orchestra/packages/xo-server/
ExecStart=/usr/local/bin/node ./dist/cli.mjs ExecStart=/usr/local/bin/node ./bin/xo-server
Restart=always Restart=always
SyslogIdentifier=xo-server SyslogIdentifier=xo-server
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
fi
/bin/systemctl daemon-reload /bin/systemctl daemon-reload
/bin/systemctl enable "$xo_service" /bin/systemctl enable $xo_service
/bin/systemctl start "$xo_service" || (sleep 2 && /bin/systemctl start "$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!"
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!"

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
XOCE_URL=https://nc.nl.tab.digital/s/WQmCwmH4e9EdTTA/download XOCE_URL=https://archive.org/download/xogithub_gmail_Xoce/xoce
# Welcome message # Welcome message
printf "\n\033[1mWelcome to the XOCE auto-deploy script!\033[0m\n\n" printf "\n\033[1mWelcome to the XOCE auto-deploy script!\033[0m\n\n"
@@ -10,7 +10,7 @@ then
echo echo
echo 'Sorry, the xe command is required for this auto-deploy.' echo 'Sorry, the xe command is required for this auto-deploy.'
echo echo
echo 'Please, make sure you are on a XCP-ng/XenServer host.' echo 'Please, make sure you are on a XenServer host.'
echo echo
exit 1 exit 1
fi fi
@@ -18,8 +18,8 @@ fi
# Basic check: are we on a XS host? # Basic check: are we on a XS host?
if grep -Fxq "XenServer" /etc/issue if grep -Fxq "XenServer" /etc/issue
then then
printf "\nSorry, it seems you are not on a XCP-ng/XenServer host.\n\n" 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 XCP-ng or XenServer only.\033[0m\n\n" printf "\n\033[1mThis script is meant to be deployed on XenServer (or XCP-ng) only.\033[0m\n\n"
exit 1 exit 1
fi fi
@@ -36,7 +36,7 @@ then
read -p "dns? [8.8.8.8] " dns read -p "dns? [8.8.8.8] " dns
dns=${dns:-8.8.8.8} dns=${dns:-8.8.8.8}
else else
printf "\nYour XOCE installation will be started using DHCP\n\n" printf "\nYour XOCE will be started using DHCP\n\n"
fi fi
# Downloading and importing the VM # Downloading and importing the VM
@@ -56,7 +56,7 @@ fi
import=$? import=$?
if [ $import -ne 0 ] if [ $import -ne 0 ]
then then
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" printf "\n\nAuto deploy failed. Please contact us on xen-orchestra.com live chat for assistance.\nError:\n\n %s\n\n" "$uuid"
exit 0 exit 0
fi fi
@@ -75,7 +75,7 @@ sleep 2
# Waiting for the VM IP from Xen tools for 60 secs # Waiting for the VM IP from Xen tools for 60 secs
printf "Waiting for XOCE to be ready…\n" printf "Waiting for your XOCE to be ready…\n"
url=$(xe vm-param-get uuid=$uuid param-name=networks param-key=0/ip 2> /dev/null) url=$(xe vm-param-get uuid=$uuid param-name=networks param-key=0/ip 2> /dev/null)
wait=0 wait=0
limit=60 limit=60
@@ -95,7 +95,7 @@ done
if [ "$ip" != 'dhcp' ] if [ "$ip" != 'dhcp' ]
then then
printf "\n\033[1mYour XOCE is ready at https://%s/\033[0m\n" "$ip" printf "\n\033[1mYour XOCE is ready on https://%s/\033[0m\n" "$ip"
# clean the xenstore data # 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 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 then
printf "\n\033[1mYour XOCE booted but we couldn't fetch its IP address\033[0m\n" printf "\n\033[1mYour XOCE booted but we couldn't fetch its IP address\033[0m\n"
else else
printf "\n\033[1mYour XOCE is ready at https://%s/\033[0m\n" "$url" printf "\n\033[1mYour XOCE is ready on https://%s/\033[0m\n" "$url"
fi fi
printf "\nDefault UI credentials: admin@admin.net/admin\nDefault console credentials: xoce/xoce\n" printf "\nDefault UI credentials: admin@admin.net/admin\nDefault console credentials: xoce/xoce\n"
printf "\nVM UUID: %s\n\n" "$uuid" printf "\nVM UUID: %s\n\n" "$uuid"