diff --git a/get.sh b/get.sh new file mode 100644 index 00000000..94f25a56 --- /dev/null +++ b/get.sh @@ -0,0 +1,145 @@ +#!/usr/bin/env bash +# +# File Browser Installer Script +# +# GitHub: https://github.com/filebrowser/filebrowser +# Issues: https://github.com/filebrowser/filebrowser/issues +# Requires: bash, mv, rm, tr, type, grep, sed, curl/wget, tar (or unzip on OSX and Windows) +# +# This script installs File Browser to your path. +# Usage: +# +# $ curl -fsSL https://filebrowser.xyz/get.sh | bash +# or +# $ wget -qO- https://filebrowser.xyz/get.sh | bash +# +# In automated environments, you may want to run as root. +# If using curl, we recommend using the -fsSL flags. +# +# This should work on Mac, Linux, and BSD systems, and +# hopefully Windows with Cygwin. Please open an issue if +# you notice any bugs. +# + +install_filemanager() +{ + trap 'echo -e "Aborted, error $? in command: $BASH_COMMAND"; trap ERR; return 1' ERR + filemanager_os="unsupported" + filemanager_arch="unknown" + install_path="/usr/local/bin" + repo_name="g45t345rt" + + # Termux on Android has $PREFIX set which already ends with /usr + if [[ -n "$ANDROID_ROOT" && -n "$PREFIX" ]]; then + install_path="$PREFIX/bin" + fi + + # Fall back to /usr/bin if necessary + if [[ ! -d $install_path ]]; then + install_path="/usr/bin" + fi + + # Not every platform has or needs sudo (https://termux.com/linux.html) + ((EUID)) && [[ -z "$ANDROID_ROOT" ]] && sudo_cmd="sudo" + + ######################### + # Which OS and version? # + ######################### + + filemanager_bin="filebrowser" + filemanager_dl_ext=".tar.gz" + + # NOTE: `uname -m` is more accurate and universal than `arch` + # See https://en.wikipedia.org/wiki/Uname + unamem="$(uname -m)" + case $unamem in + *aarch64*) + filemanager_arch="arm64";; + *64*) + filemanager_arch="amd64";; + *86*) + filemanager_arch="386";; + *armv5*) + filemanager_arch="armv5";; + *armv6*) + filemanager_arch="armv6";; + *armv7*) + filemanager_arch="armv7";; + *) + echo "Aborted, unsupported or unknown architecture: $unamem" + return 2 + ;; + esac + + unameu="$(tr '[:lower:]' '[:upper:]' <<<$(uname))" + if [[ $unameu == *DARWIN* ]]; then + filemanager_os="darwin" + elif [[ $unameu == *LINUX* ]]; then + filemanager_os="linux" + elif [[ $unameu == *FREEBSD* ]]; then + filemanager_os="freebsd" + elif [[ $unameu == *NETBSD* ]]; then + filemanager_os="netbsd" + elif [[ $unameu == *OPENBSD* ]]; then + filemanager_os="openbsd" + elif [[ $unameu == *WIN* || $unameu == MSYS* ]]; then + # Should catch cygwin + sudo_cmd="" + filemanager_os="windows" + filemanager_bin="filebrowser.exe" + filemanager_dl_ext=".zip" + else + echo "Aborted, unsupported or unknown OS: $uname" + return 6 + fi + + ######################## + # Download and extract # + ######################## + + echo "Downloading File Browser for $filemanager_os/$filemanager_arch..." + if type -p curl >/dev/null 2>&1; then + net_getter="curl -fsSL" + elif type -p wget >/dev/null 2>&1; then + net_getter="wget -qO-" + else + echo "Aborted, could not find curl or wget" + return 7 + fi + + filemanager_file="${filemanager_os}-$filemanager_arch-filebrowser$filemanager_dl_ext" + filemanager_tag="$(${net_getter} https://api.github.com/repos/$repo_name/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')" + filemanager_url="https://github.com/$repo_name/filebrowser/releases/download/$filemanager_tag/$filemanager_file" + echo "$filemanager_url" + + # Use $PREFIX for compatibility with Termux on Android + rm -rf "$PREFIX/tmp/$filemanager_file" + + ${net_getter} "$filemanager_url" > "$PREFIX/tmp/$filemanager_file" + + echo "Extracting..." + case "$filemanager_file" in + *.zip) unzip -o "$PREFIX/tmp/$filemanager_file" "$filemanager_bin" -d "$PREFIX/tmp/" ;; + *.tar.gz) tar -xzf "$PREFIX/tmp/$filemanager_file" -C "$PREFIX/tmp/" "$filemanager_bin" ;; + esac + chmod +x "$PREFIX/tmp/$filemanager_bin" + + echo "Putting filemanager in $install_path (may require password)" + $sudo_cmd mv "$PREFIX/tmp/$filemanager_bin" "$install_path/$filemanager_bin" + if setcap_cmd=$(PATH+=$PATH:/sbin type -p setcap); then + $sudo_cmd $setcap_cmd cap_net_bind_service=+ep "$install_path/$filemanager_bin" + fi + $sudo_cmd rm -- "$PREFIX/tmp/$filemanager_file" + + if type -p $filemanager_bin >/dev/null 2>&1; then + echo "Successfully installed" + trap ERR + return 0 + else + echo "Something went wrong, File Browser is not in your path" + trap ERR + return 1 + fi +} + +install_filemanager