mirror of
https://github.com/Jarli01/xenorchestra_installer
synced 2026-07-30 10:21:22 +00:00
Compare commits
11 Commits
d68456ceb0
...
OS-Spec-De
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5637752960 | ||
|
|
9c8eea5347 | ||
|
|
15ddc7cea5 | ||
|
|
5a5f8035f2 | ||
|
|
3c3e7710c7 | ||
|
|
58fcac8659 | ||
|
|
ac22baf7a9 | ||
|
|
8c8f2e0d1d | ||
|
|
ada0c8dc91 | ||
|
|
e54fc57cdc | ||
|
|
47bd62ec0a |
@@ -39,7 +39,7 @@ To maintain your installation from Source or from this repo. (either prepackaged
|
||||
|
||||
# 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.
|
||||
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
|
||||
|
||||
@@ -83,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)
|
||||
|
||||
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
# defaults file
|
||||
# The default username and password are applied, and admin for the password
|
||||
xoa_install_url: https://raw.githubusercontent.com/Jarli01/xenorchestra_installer/master/xo_install.sh
|
||||
xoa_install_script: xo_install.sh
|
||||
xoa_update_url: https://raw.githubusercontent.com/Jarli01/xenorchestra_updater/master/xo-update.sh
|
||||
xoa_update_script: xo_update.sh
|
||||
git_email: ""
|
||||
git_user: ""
|
||||
xoa_default_user: "admin@admin.net"
|
||||
xoa_default_password: "admin"
|
||||
xoa_user: xoa
|
||||
xoa_password: xoa
|
||||
xcpng_servers: [{"label": "localhost", "ip": "127.0.1"}]
|
||||
xcpng_user: root
|
||||
xcpng_password: xcpng
|
||||
@@ -1,22 +0,0 @@
|
||||
- name: reload_systemd
|
||||
shell: systemctl daemon-reload
|
||||
args:
|
||||
warn: no
|
||||
|
||||
- name: cleaning_packages_metadata
|
||||
shell: yum clean all && rm -rf /var/cache/yum
|
||||
when: ansible_distribution == 'Red Hat Enterprise Linux' or ansible_distribution == 'XCP-ng'
|
||||
args:
|
||||
warn: no
|
||||
|
||||
- name: cleaning_packages_metadata
|
||||
shell: zypper clean && rm -rf /var/cache/zypp
|
||||
when: ansible_distribution == 'openSUSE Leap'
|
||||
args:
|
||||
warn: no
|
||||
|
||||
- name: cleaning_packages_metadata
|
||||
shell: apt clean
|
||||
when: ansible_distribution == 'Debian'
|
||||
args:
|
||||
warn: no
|
||||
@@ -1,57 +0,0 @@
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your description
|
||||
company: your company (optional)
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
|
||||
# Some suggested licenses:
|
||||
# - BSD (default)
|
||||
# - MIT
|
||||
# - GPLv2
|
||||
# - GPLv3
|
||||
# - Apache
|
||||
# - CC-BY
|
||||
license: license (GPLv2, CC-BY, etc)
|
||||
|
||||
min_ansible_version: 1.2
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
# Optionally specify the branch Galaxy will use when accessing the GitHub
|
||||
# repo for this role. During role install, if no tags are available,
|
||||
# Galaxy will use this branch. During import Galaxy will access files on
|
||||
# this branch. If Travis integration is configured, only notifications for this
|
||||
# branch will be accepted. Otherwise, in all cases, the repo's default branch
|
||||
# (usually master) will be used.
|
||||
#github_branch:
|
||||
|
||||
#
|
||||
# platforms is a list of platforms, and each platform has a name and a list of versions.
|
||||
#
|
||||
# platforms:
|
||||
# - name: Fedora
|
||||
# versions:
|
||||
# - all
|
||||
# - 25
|
||||
# - name: SomePlatform
|
||||
# versions:
|
||||
# - all
|
||||
# - 1.0
|
||||
# - 7
|
||||
# - 99.99
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
||||
@@ -1,250 +0,0 @@
|
||||
- name: Updating packages
|
||||
shell: apt-get update -y && apt-get upgrade -y
|
||||
when: ansible_distribution == 'Debian'
|
||||
ignore_errors: True
|
||||
args:
|
||||
warn: no
|
||||
notify: cleaning_packages_metadata
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Installing packages
|
||||
package: name={{item}} state=present
|
||||
when: ansible_distribution == 'Debian'
|
||||
with_items:
|
||||
- curl
|
||||
- git
|
||||
notify: cleaning_packages_metadata
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Check if xoa is already installed
|
||||
stat:
|
||||
path: /opt/xen-orchestra
|
||||
register: xen_orchestra_directory
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Ensure group xoa exists
|
||||
ansible.builtin.group:
|
||||
name: xoa
|
||||
state: present
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Check if xoa is already registered in sudoers.d
|
||||
stat:
|
||||
path: /etc/sudoers.d/xoa
|
||||
register: xoa_sudoers_file
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Add the xoa user
|
||||
ansible.builtin.user:
|
||||
name: xoa
|
||||
shell: /bin/bash
|
||||
home: /home/xoa
|
||||
comment: xen-orchestra user
|
||||
uid: 1040
|
||||
groups: xoa,users
|
||||
append: yes
|
||||
when: not xoa_sudoers_file.stat.exists
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Register xoa in sudoers.d
|
||||
ansible.builtin.file:
|
||||
path: /etc/sudoers.d/xoa
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0640'
|
||||
when: not xoa_sudoers_file.stat.exists
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Allow xoa to have passwordless sudo
|
||||
lineinfile:
|
||||
dest: /etc/sudoers.d/xoa
|
||||
state: present
|
||||
regexp: '^%xoa'
|
||||
line: '%xoa ALL=(ALL) NOPASSWD: ALL'
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Setting git user email
|
||||
git_config:
|
||||
name: user.email
|
||||
scope: global
|
||||
value: "{{git_email}}"
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Setting git user
|
||||
git_config:
|
||||
name: user.name
|
||||
scope: global
|
||||
value: "{{git_user}}"
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Download installation script
|
||||
ansible.builtin.get_url:
|
||||
url: "{{xoa_install_url}}"
|
||||
dest: "/tmp/{{xoa_install_script}}"
|
||||
mode: '0770'
|
||||
when: not xen_orchestra_directory.stat.exists
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Download update script
|
||||
ansible.builtin.get_url:
|
||||
url: "{{xoa_update_url}}"
|
||||
dest: "/home/xoa/{{xoa_update_script}}"
|
||||
mode: '0770'
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Create symbolic link to
|
||||
file:
|
||||
src: "/home/xoa/{{xoa_update_script}}"
|
||||
dest: "/etc/cron.weekly/{{xoa_update_script}}"
|
||||
state: link
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Removing existing data structures
|
||||
shell: "rm -R /var/lib/xo-server"
|
||||
ignore_errors: False
|
||||
args:
|
||||
warn: no
|
||||
when: not xen_orchestra_directory.stat.exists
|
||||
tags:
|
||||
- install
|
||||
|
||||
- name: Removing existing data structures
|
||||
shell: "rm -R /var/lib/xo-updater"
|
||||
ignore_errors: False
|
||||
args:
|
||||
warn: no
|
||||
when: not xen_orchestra_directory.stat.exists
|
||||
tags:
|
||||
- install
|
||||
|
||||
- name: Removing existing redis data
|
||||
shell: "redis-cli -n 0 FLUSHALL"
|
||||
ignore_errors: False
|
||||
args:
|
||||
warn: no
|
||||
when: not xen_orchestra_directory.stat.exists
|
||||
tags:
|
||||
- install
|
||||
|
||||
- name: Installing
|
||||
shell: "/tmp/{{xoa_install_script}}"
|
||||
ignore_errors: False
|
||||
args:
|
||||
warn: no
|
||||
when: not xen_orchestra_directory.stat.exists
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Updating
|
||||
shell: "/home/xoa/{{xoa_update_script}} -n stable"
|
||||
ignore_errors: False
|
||||
args:
|
||||
warn: no
|
||||
when: xen_orchestra_directory.stat.exists
|
||||
tags:
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Installing xo-cli
|
||||
shell: "npm install -g xo-cli"
|
||||
ignore_errors: False
|
||||
args:
|
||||
warn: no
|
||||
tags:
|
||||
- add-servers
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Closing existing session using xo-cli
|
||||
shell: "xo-cli --unregister"
|
||||
ignore_errors: True
|
||||
args:
|
||||
warn: no
|
||||
tags:
|
||||
- add-servers
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Opening session using xo-cli
|
||||
shell: "xo-cli --register --au http://127.0.0.1 {{xoa_default_user}} {{xoa_default_password}}"
|
||||
ignore_errors: False
|
||||
args:
|
||||
warn: no
|
||||
tags:
|
||||
- install
|
||||
|
||||
- name: Adding user session using xo-cli
|
||||
shell: "xo-cli user.create email='{{xoa_user}}' password='{{xoa_password}}' permission='admin'"
|
||||
ignore_errors: False
|
||||
args:
|
||||
warn: no
|
||||
tags:
|
||||
- install
|
||||
|
||||
- name: Closing existing session using xo-cli
|
||||
shell: "xo-cli --unregister"
|
||||
ignore_errors: True
|
||||
args:
|
||||
warn: no
|
||||
tags:
|
||||
- add-servers
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Opening session using xo-cli
|
||||
shell: "xo-cli --register --au http://127.0.0.1 {{xoa_user}} {{xoa_password}}"
|
||||
ignore_errors: False
|
||||
args:
|
||||
warn: no
|
||||
tags:
|
||||
- add-servers
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Adding xcp-ng servers using xo-cli
|
||||
shell: "xo-cli server.add label='{{item.label}}' host='{{item.ip}}' username={{xcpng_user}} password='{{xcpng_password}}' autoConnect=true allowUnauthorized=true"
|
||||
ignore_errors: False
|
||||
with_items: "{{xcpng_servers}}"
|
||||
args:
|
||||
warn: no
|
||||
tags:
|
||||
- add-servers
|
||||
- install
|
||||
- update
|
||||
|
||||
- name: Closing session using xo-cli
|
||||
shell: "xo-cli --unregister"
|
||||
ignore_errors: False
|
||||
args:
|
||||
warn: no
|
||||
tags:
|
||||
- add-servers
|
||||
- install
|
||||
- update
|
||||
@@ -1,2 +0,0 @@
|
||||
localhost
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
- hosts: localhost
|
||||
remote_user: root
|
||||
roles:
|
||||
- xoa
|
||||
@@ -1,2 +0,0 @@
|
||||
---
|
||||
# vars file
|
||||
184
xo_install.sh
184
xo_install.sh
@@ -1,15 +1,106 @@
|
||||
#!/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 "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
|
||||
|
||||
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"
|
||||
@@ -20,64 +111,53 @@ 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 -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
|
||||
/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 python3-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
|
||||
rm $systemd_service_dir/$xo_service
|
||||
# --- 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
|
||||
# Systemd service for XO-Server.
|
||||
|
||||
/bin/cat << 'EOF' > "$systemd_service_dir/$xo_service"
|
||||
[Unit]
|
||||
Description= XO Server
|
||||
After=network-online.target
|
||||
@@ -85,7 +165,6 @@ After=network-online.target
|
||||
[Service]
|
||||
WorkingDirectory=/opt/xen-orchestra/packages/xo-server/
|
||||
ExecStart=/usr/local/bin/node ./dist/cli.mjs
|
||||
|
||||
Restart=always
|
||||
SyslogIdentifier=xo-server
|
||||
|
||||
@@ -93,12 +172,13 @@ SyslogIdentifier=xo-server
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
|
||||
/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!"
|
||||
|
||||
Reference in New Issue
Block a user