8bf3ecfd1f
Linux distribution detection is much more robust. We also now include the Linux distribution family. That should help downstream Linux distributions as well. For example, Manjaro will now be detected as arch and Mint Linux will be detected as Ubuntu.
175 lines
6.0 KiB
Bash
Executable File
175 lines
6.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# This file will be the host environment setup file for all operating systems other than base Windows.
|
|
|
|
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
|
# Check if root or sudo
|
|
root=true
|
|
if [ "$EUID" -ne 0 ]; then
|
|
root=false
|
|
fi
|
|
|
|
get_distro_name() {
|
|
local line
|
|
if [ -f /etc/os-release ]; then
|
|
# We search for the line starting with ID=
|
|
# Then we remove the ID= prefix to get the name itself
|
|
line="$(grep -Ei '^ID=' /etc/os-release)"
|
|
line=${line##*=}
|
|
echo "$line"
|
|
return 0
|
|
elif command -v python >/dev/null; then
|
|
line="$(python -mplatform)"
|
|
echo "$line"
|
|
return 0
|
|
elif command -v python3 >/dev/null; then
|
|
line="$(python3 -mplatform)"
|
|
echo "$line"
|
|
return 0
|
|
else
|
|
line="None"
|
|
echo "$line"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
get_distro_family() {
|
|
local line
|
|
if [ -f /etc/os-release ]; then
|
|
# We search for the line starting with ID_LIKE=
|
|
# Then we remove the ID_LIKE= prefix to get the name itself
|
|
# This is the "type" of distro. For example, Ubuntu returns "debian".
|
|
if grep -Eiq '^ID_LIKE=' /etc/os-release >/dev/null; then
|
|
line="$(grep -Ei '^ID_LIKE=' /etc/os-release)"
|
|
line=${line##*=}
|
|
echo "$line"
|
|
return 0
|
|
else
|
|
line="None"
|
|
echo "$line"
|
|
return 1
|
|
fi
|
|
else
|
|
line="None"
|
|
echo "$line"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
distro=get_distro_name
|
|
family=get_distro_family
|
|
if "$distro" | grep -qi "Ubuntu" || "$family" | grep -qi "Ubuntu"; then
|
|
echo "Ubuntu detected."
|
|
echo "Installing Python TK if not found on the system."
|
|
if [ ! $(dpkg-query -W -f='${Status}' python3-tk 2>/dev/null | grep -c "ok installed") -eq 0 ]; then
|
|
if [ root = true ]; then
|
|
apt-get install python3-tk
|
|
else
|
|
echo "This script needs to be run as root or via sudo to install packages."
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Python TK found! Skipping install!"
|
|
fi
|
|
elif "$distro" | grep -Eqi "Fedora|CentOS|Redhat"; then
|
|
if ! rpm -qa | grep -qi python3-tkinter; then
|
|
if [ root = true ]; then
|
|
dnf install python3-tkinter
|
|
else
|
|
echo "This script needs to be run as root or via sudo to install packages."
|
|
exit 1
|
|
fi
|
|
fi
|
|
elif "$distro" | grep -Eqi "arch" || "$family" | grep -qi "arch"; then
|
|
if ! pacman -Qi tk >/dev/null; then
|
|
if [ root = true ]; then
|
|
pacman -S tk
|
|
else
|
|
echo "This script needs to be run as root or via sudo to install packages."
|
|
exit 1
|
|
fi
|
|
fi
|
|
elif "$distro" | grep -Eqi "opensuse" || "$family" | grep -qi "opensuse"; then
|
|
if ! rpm -qa | grep -qi python-tk; then
|
|
if [ root = true ]; then
|
|
zypper install python-tk
|
|
else
|
|
echo "This script needs to be run as root or via sudo to install packages."
|
|
exit 1
|
|
fi
|
|
fi
|
|
elif [ "$distro" = "None" ] || [ "$family" = "None" ]; then
|
|
if [ "$distro" = "None" ]; then
|
|
echo "We could not detect your distribution of Linux. Please file a bug report on github with the contents of your /etc/os-release file."
|
|
fi
|
|
|
|
if [ "$family" = "None" ]; then
|
|
echo "We could not detect the family of your Linux distribution. Please file a bug report on github with the contents of your /etc/os-release file."
|
|
fi
|
|
fi
|
|
|
|
python3 -m venv venv
|
|
source venv/bin/activate
|
|
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
|
|
pip install --use-pep517 --upgrade -r requirements.txt
|
|
pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/linux/xformers-0.0.14.dev0-cp310-cp310-linux_x86_64.whl
|
|
accelerate config
|
|
|
|
echo -e "Setup finished! Run \e[0;92m./gui.sh\e[0m to start."
|
|
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
|
# The initial setup script to prep the environment on macOS
|
|
# xformers has been omitted as that is for Nvidia GPUs only
|
|
|
|
if ! command -v brew >/dev/null; then
|
|
echo "Please install homebrew first. This is a requirement for the remaining setup."
|
|
echo "You can find that here: https://brew.sh"
|
|
#shellcheck disable=SC2016
|
|
echo 'The "brew" command should be in $PATH to be detected.'
|
|
exit 1
|
|
fi
|
|
|
|
# Install base python packages
|
|
echo "Installing Python 3.10 if not found."
|
|
if ! brew ls --versions python@3.10 >/dev/null; then
|
|
brew install python@3.10
|
|
else
|
|
echo "Python 3.10 found!"
|
|
fi
|
|
echo "Installing Python-TK 3.10 if not found."
|
|
if ! brew ls --versions python-tk@3.10 >/dev/null; then
|
|
brew install python-tk@3.10
|
|
else
|
|
echo "Python Tkinter 3.10 found!"
|
|
fi
|
|
|
|
if command -v python3.10 >/dev/null; then
|
|
python3.10 -m venv venv
|
|
source venv/bin/activate
|
|
|
|
# DEBUG ONLY
|
|
#pip install pydevd-pycharm~=223.8836.43
|
|
|
|
# Tensorflow installation
|
|
if wget https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl /tmp; then
|
|
python -m pip install tensorflow==0.1a3 -f https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl
|
|
rm -f /tmp/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl
|
|
fi
|
|
|
|
pip install torch==2.0.0 torchvision==0.15.1 -f https://download.pytorch.org/whl/cpu/torch_stable.html
|
|
python -m pip install --use-pep517 --upgrade -r requirements.txt
|
|
accelerate config
|
|
echo -e "Setup finished! Run ./gui.sh to start."
|
|
else
|
|
echo "Python not found. Please ensure you install Python."
|
|
echo "The brew command for Python 3.10 is: brew install python@3.10"
|
|
exit 1
|
|
fi
|
|
elif [[ "$OSTYPE" == "cygwin" ]]; then
|
|
# Cygwin is a standalone suite of Linux utilies on Windows
|
|
echo "This hasn't been validated on cygwin yet."
|
|
elif [[ "$OSTYPE" == "msys" ]]; then
|
|
# MinGW has the msys environment which is a standalone suite of Linux utilies on Windows
|
|
# "git bash" on Windows may also be detected as msys.
|
|
echo "This hasn't been validated in msys (mingw) on Windows yet."
|
|
fi
|