3 Commits

Author SHA1 Message Date
Dustin B
7ed0ed7280 Update README.md
Modified wording
2025-08-25 09:06:56 -04:00
Dustin B
20fbd8c2fc Update README.md 2025-08-22 15:45:42 -04:00
Dustin B
d67189b86a Update README.md
VDDK instructional steps for anyone migrating from VMWare
2025-08-22 15:28:10 -04:00
2 changed files with 80 additions and 135 deletions

View File

@@ -65,6 +65,33 @@ Restart xo-server.service
Reload your XOCE website using SSL (https://your-host-ip) Reload your XOCE website using SSL (https://your-host-ip)
# Migrating from VMWare ESXi
The optional VMware Virtual Disk Development Kit (VDDK) offers increased performance and additional features when migrating VMs from VMWare ESXi to XCP-ng. This collection must be manually downloaded and installed due to licensing restrictions. Here are the steps for installing this optional module --
1. Go to https://developer.broadcom.com/sdks/vmware-virtual-disk-development-kit-vddk/latest and download the VDDK #.0 Tarball for Linux (at writing the version is 9.0 and MD5 sum is f508fe7134fcdd137fbdba5ee7f65d9f)
2. Move this file to your XOCE installation (winSCP or some other tool)
3. Create this directory as it doesn't exist with `mkdir /usr/local/lib/vddk` and uncompress the tarball into the same directory with ```sudo tar -xvf "./VMware-vix-disklib-9.0.0.0.24742305.x86_64.tar.gz" -C /usr/local/lib/vddk```
The directory structure should match the below
```
debian@xoa-source:/usr/local/lib/vddk$ tree -d .
└── vmware-vix-disklib-distrib
├── bin64
├── doc
│   ├── errors
│   ├── functions
│   ├── samples
│   │   └── diskLib
│   └── types
├── include
├── lib32
└── lib64
```
4. Lastly install these dependencies ```sudo apt install -y nbdkit libnbd-bin```
You should now have access to the improved features from this VDDK
# Problems? # Problems?
Check out our [Troubleshooting Page](https://github.com/Jarli01/xenorchestra_installer/blob/master/TROUBLESHOOTING.md)! Check out our [Troubleshooting Page](https://github.com/Jarli01/xenorchestra_installer/blob/master/TROUBLESHOOTING.md)!
@@ -89,5 +116,3 @@ To keep XOCE up to date I recommend that anyone who's used this installation scr
yarn run turbo run build --filter @xen-orchestra/web 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) Once the installation is completed, you can then go to [https://your-host-ip/v6](https://your-host-ip/v6)

View File

@@ -1,106 +1,15 @@
#!/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 "2000000" ]; then echo "XOCE Requires at least 2GB 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"
@@ -111,53 +20,64 @@ 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 -sSL $yarn_gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null
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 python3-minimal libvhdi-utils nfs-common lvm2 cifs-utils openssl libfuse2t64
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 $systemd_service_dir/$xo_service
rm -f "$systemd_service_dir/$xo_service"
fi fi
/bin/cat << 'EOF' > "$systemd_service_dir/$xo_service" /bin/cat << EOF >> $systemd_service_dir/$xo_service
# Systemd service for XO-Server.
[Unit] [Unit]
Description= XO Server Description= XO Server
After=network-online.target After=network-online.target
@@ -165,6 +85,7 @@ 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 ./dist/cli.mjs
Restart=always Restart=always
SyslogIdentifier=xo-server SyslogIdentifier=xo-server
@@ -172,13 +93,12 @@ SyslogIdentifier=xo-server
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
/bin/systemctl daemon-reload
/bin/systemctl enable "$xo_service"
/bin/systemctl start "$xo_service" || (sleep 2 && /bin/systemctl start "$xo_service")
echo /bin/systemctl daemon-reload
echo "Installation complete, open a browser to:" && hostname -I /bin/systemctl enable $xo_service
echo /bin/systemctl start $xo_service
echo 'Default Login: "admin@admin.net" Password: "admin"'
echo 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!"