summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2022-04-30 18:10:24 +0200
committerSamantaz Fox <coding@samantaz.fr>2022-05-21 19:06:45 +0200
commitd66ef8fe22ccf095205c0586700728d33d81fbd3 (patch)
treeaae3d1e8d67f0ddd97a01058d62b343d4fe45de1 /scripts
parent6ff3a633f7f7c71f5fb4ea821ae6fd85b645e1d5 (diff)
downloadinvidious-d66ef8fe22ccf095205c0586700728d33d81fbd3.tar.gz
invidious-d66ef8fe22ccf095205c0586700728d33d81fbd3.tar.bz2
invidious-d66ef8fe22ccf095205c0586700728d33d81fbd3.zip
Add a script to install dependencies
Diffstat (limited to 'scripts')
-rw-r--r--scripts/install-dependencies.sh174
1 files changed, 174 insertions, 0 deletions
diff --git a/scripts/install-dependencies.sh b/scripts/install-dependencies.sh
new file mode 100644
index 00000000..27e0bf15
--- /dev/null
+++ b/scripts/install-dependencies.sh
@@ -0,0 +1,174 @@
+#!/bin/sh
+#
+# Script that installs the various dependencies of invidious
+#
+# Dependencies:
+# - crystal => Language in which Invidious is developed
+# - postgres => Database server
+# - git => required to clone Invidious
+# - librsvg2-bin => For login captcha (provides 'rsvg-convert')
+#
+# - libssl-dev => Used by Crystal's SSL module (standard library)
+# - libxml2-dev => Used by Crystal's XML module (standard library)
+# - libyaml-dev => Used by Crystal's YAML module (standard library)
+# - libgmp-dev => Used by Crystal's BigNumbers module (standard library)
+# - libevent-dev => Used by crystal's internal scheduler (?)
+# - libpcre3-dev => Used by Crystal's regex engine (?)
+#
+# - libsqlite3-dev => Used to open .db files from NewPipe exports
+# - zlib1g-dev => TBD
+# - libreadline-dev => TBD
+#
+#
+# Tested on:
+# - OpenSUSE Leap 15.3
+
+#
+# Load system details
+#
+
+if [ -e /etc/os-release ]; then
+ . /etc/os-release
+elif [ -e /usr/lib/os-release ]; then
+ . /usr/lib/os-release
+else
+ echo "Unsupported Linux system"
+ exit 2
+fi
+
+#
+# Some variables
+#
+
+repo_base_url="https://download.opensuse.org/repositories/devel:/languages:/crystal/"
+repo_end_url="devel:languages:crystal.repo"
+
+apt_gpg_key="/usr/share/keyrings/crystal.gpg"
+apt_list_file="/etc/apt/sources.list.d/crystal.list"
+
+yum_repo_file="/etc/yum.repos.d/crystal.repo"
+
+#
+# Major install functions
+#
+
+make_repo_url() {
+ echo "${repo_base_url}/${1}/${repo_end_url}"
+}
+
+
+install_apt() {
+ repo="$1"
+
+ echo "Adding Crystal repository"
+
+ curl -fsSL "${repo_base_url}/${repo}/Release.key" \
+ | gpg --dearmor \
+ | sudo tee "${apt_gpg_key}" > /dev/null
+
+ echo "deb [signed-by=${apt_gpg_key}] ${repo_base_url}/${repo}/ /" \
+ | sudo tee "$apt_list_file"
+
+ sudo apt-get update
+
+ sudo apt-get install --yes --no-install-recommends \
+ libssl-dev libxml2-dev libyaml-dev libgmp-dev libevent-dev \
+ libpcre3-dev libreadline-dev libsqlite3-dev zlib1g-dev \
+ crystal postgres git librsvg2-bin make
+}
+
+install_yum() {
+ repo=$(make_repo_url "$1")
+
+ echo "Adding Crystal repository"
+
+ cat << END | sudo tee "${yum_repo_file}" > /dev/null
+[crystal]
+name=Crystal
+type=rpm-md
+baseurl=${repo}/
+gpgcheck=1
+gpgkey=${repo}/repodata/repomd.xml.key
+enabled=1
+END
+
+ sudo yum -y install \
+ openssl-devel libxml2-devel libyaml-devel gmp-devel \
+ readline-devel sqlite-devel \
+ crystal postgresql postgresql-server git librsvg2-tools make
+}
+
+install_pacman() {
+ # TODO: find an alternative to --no-confirm?
+ sudo pacman -S --no-confirm \
+ base-devel librsvg postgresql crystal
+}
+
+install_zypper()
+{
+ repo=$(make_repo_url "$1")
+
+ echo "Adding Crystal repository"
+ sudo zypper --non-interactive addrepo -f "$repo"
+
+ sudo zypper --non-interactive --gpg-auto-import-keys install --no-recommends \
+ libopenssl-devel libxml2-devel libyaml-devel gmp-devel libevent-devel \
+ pcre-devel readline-devel sqlite3-devel zlib-devel \
+ crystal postgresql postgresql-server git rsvg-convert make
+}
+
+
+#
+# System-specific logic
+#
+
+case "$ID" in
+ archlinux) install_pacman;;
+
+ centos) install_dnf "CentOS_${VERSION_ID}";;
+
+ debian)
+ case "$VERSION_CODENAME" in
+ sid) install_apt "Debian_Unstable";;
+ bookworm) install_apt "Debian_Testing";;
+ *) install_apt "Debian_${VERSION_ID}";;
+ esac
+ ;;
+
+ fedora)
+ if [ "$VERSION" == *"Prerelease"* ]; then
+ install_dnf "Fedora_Rawhide"
+ else
+ install_dnf "Fedora_${VERSION}"
+ fi
+ ;;
+
+ opensuse-leap) install_zypper "openSUSE_Leap_${VERSION}";;
+
+ opensuse-tumbleweed) install_zypper "openSUSE_Tumbleweed";;
+
+ rhel) install_dnf "RHEL_${VERSION_ID}";;
+
+ ubuntu)
+ # Small workaround for recently released 22.04
+ case "$VERSION_ID" in
+ 22.04) install_apt "xUbuntu_21.04";;
+ *) install_apt "xUbuntu_${VERSION_ID}";;
+ esac
+ ;;
+
+ *)
+ # Try to match on ID_LIKE instead
+ # Not guaranteed to 100% work
+ case "$ID_LIKE" in
+ archlinux) install_pacman;;
+ centos) install_dnf "CentOS_${VERSION_ID}";;
+ debian) install_apt "Debian_${VERSION_ID}";;
+ *)
+ echo "Error: distribution ${CODENAME} is not supported"
+ echo "Please install dependencies manually"
+ exit 2
+ ;;
+ esac
+ ;;
+esac