install.sh 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. #!/usr/bin/env bash
  2. set -o errexit
  3. set -o nounset
  4. set -o pipefail
  5. echo "Installing runtipi..."
  6. ARCHITECTURE="$(uname -m)"
  7. # Not supported on 32 bits systems
  8. if [[ "$ARCHITECTURE" == "armv7"* ]] || [[ "$ARCHITECTURE" == "i686" ]] || [[ "$ARCHITECTURE" == "i386" ]]; then
  9. echo "runtipi is not supported on 32 bits systems"
  10. exit 1
  11. fi
  12. ### --------------------------------
  13. ### CLI arguments
  14. ### --------------------------------
  15. UPDATE="false"
  16. while [ -n "${1-}" ]; do
  17. case "$1" in
  18. --update) UPDATE="true" ;;
  19. --)
  20. shift # The double dash makes them parameters
  21. break
  22. ;;
  23. *) echo "Option $1 not recognized" && exit 1 ;;
  24. esac
  25. shift
  26. done
  27. OS="$(cat /etc/[A-Za-z]*[_-][rv]e[lr]* | grep "^ID=" | cut -d= -f2 | uniq | tr '[:upper:]' '[:lower:]' | tr -d '"')"
  28. SUB_OS="$(cat /etc/[A-Za-z]*[_-][rv]e[lr]* | grep "^ID_LIKE=" | cut -d= -f2 | uniq | tr '[:upper:]' '[:lower:]' | tr -d '"')"
  29. function install_generic() {
  30. local dependency="${1}"
  31. local os="${2}"
  32. if [[ "${os}" == "debian" ]]; then
  33. sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "${dependency}"
  34. return 0
  35. elif [[ "${os}" == "ubuntu" || "${os}" == "pop" ]]; then
  36. sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "${dependency}"
  37. return 0
  38. elif [[ "${os}" == "centos" ]]; then
  39. sudo yum install -y --allowerasing "${dependency}"
  40. return 0
  41. elif [[ "${os}" == "fedora" ]]; then
  42. sudo dnf -y install "${dependency}"
  43. return 0
  44. elif [[ "${os}" == "arch" ]]; then
  45. if ! sudo pacman -Sy --noconfirm "${dependency}" ; then
  46. if command -v yay > /dev/null 2>&1 ; then
  47. sudo -u $SUDO_USER yay -Sy --noconfirm "${dependency}"
  48. else
  49. echo "Could not install \"${dependency}\", either using pacman or the yay AUR helper. Please try installing it manually."
  50. return 1
  51. fi
  52. fi
  53. return 0
  54. else
  55. return 1
  56. fi
  57. }
  58. function install_docker() {
  59. local os="${1}"
  60. echo "Installing docker for os ${os}"
  61. if [[ "${os}" == "debian" ]]; then
  62. sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ca-certificates curl gnupg lsb-release
  63. sudo mkdir -p /etc/apt/keyrings
  64. curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  65. echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
  66. sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
  67. sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  68. return 0
  69. elif [[ "${os}" == "ubuntu" || "${os}" == "pop" ]]; then
  70. sudo DEBIAN_FRONTEND=noninteractive apt-get install -y ca-certificates curl gnupg lsb-release
  71. sudo mkdir -p /etc/apt/keyrings
  72. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  73. echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
  74. sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
  75. sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  76. return 0
  77. elif [[ "${os}" == "centos" ]]; then
  78. sudo yum install -y yum-utils
  79. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  80. sudo yum install -y --allowerasing docker-ce docker-ce-cli containerd.io docker-compose-plugin
  81. sudo systemctl start docker
  82. sudo systemctl enable docker
  83. return 0
  84. elif [[ "${os}" == "fedora" ]]; then
  85. sudo dnf -y install dnf-plugins-core
  86. sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
  87. sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  88. sudo systemctl start docker
  89. sudo systemctl enable docker
  90. return 0
  91. elif [[ "${os}" == "arch" ]]; then
  92. sudo pacman -Sy --noconfirm docker docker-compose
  93. sudo systemctl start docker.service
  94. sudo systemctl enable docker.service
  95. return 0
  96. else
  97. return 1
  98. fi
  99. }
  100. echo "Updating system"
  101. sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
  102. echo "Upgrading system"
  103. sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y
  104. if ! command -v docker >/dev/null; then
  105. echo "Installing docker"
  106. install_docker "${OS}"
  107. docker_result=$?
  108. if [[ docker_result -eq 0 ]]; then
  109. echo "Docker installed"
  110. else
  111. echo "Your system ${OS} is not supported trying with sub_os ${SUB_OS}"
  112. install_docker "${SUB_OS}"
  113. docker_sub_result=$?
  114. if [[ docker_sub_result -eq 0 ]]; then
  115. echo "Docker installed"
  116. else
  117. echo "Your system ${SUB_OS} is not supported please install docker manually"
  118. exit 1
  119. fi
  120. fi
  121. fi
  122. function check_dependency_and_install() {
  123. local dependency="${1}"
  124. if ! command -v "${dependency}" >/dev/null; then
  125. echo "Installing ${dependency}"
  126. install_generic "${dependency}" "${OS}"
  127. install_result=$?
  128. if [[ install_result -eq 0 ]]; then
  129. echo "${dependency} installed"
  130. else
  131. echo "Your system ${OS} is not supported trying with sub_os ${SUB_OS}"
  132. install_generic "${dependency}" "${SUB_OS}"
  133. install_sub_result=$?
  134. if [[ install_sub_result -eq 0 ]]; then
  135. echo "${dependency} installed"
  136. else
  137. echo "Your system ${SUB_OS} is not supported please install ${dependency} manually"
  138. exit 1
  139. fi
  140. fi
  141. fi
  142. }
  143. # Example
  144. # check_dependency_and_install "openssl"
  145. LATEST_VERSION=$(curl -s https://api.github.com/repos/meienberger/runtipi/releases/latest | grep tag_name | cut -d '"' -f4)
  146. LATEST_ASSET="runtipi-cli-linux-x64"
  147. if [ "$ARCHITECTURE" == "arm64" ] || [ "$ARCHITECTURE" == "aarch64" ]; then
  148. LATEST_ASSET="runtipi-cli-linux-arm64"
  149. fi
  150. URL="https://github.com/meienberger/runtipi/releases/download/$LATEST_VERSION/$LATEST_ASSET"
  151. if [[ "${UPDATE}" == "false" ]]; then
  152. mkdir -p runtipi
  153. cd runtipi || exit
  154. fi
  155. curl --location "$URL" -o ./runtipi-cli
  156. sudo chmod +x ./runtipi-cli
  157. # Check if user is in docker group
  158. if ! groups | grep -q docker; then
  159. echo "User is not in docker group. Please make sure your user is in the docker group and restart the script."
  160. echo "You can add your user to the docker group by running: 'sudo usermod -aG docker $USER' and then exit the shell and restart the script."
  161. exit 1
  162. fi
  163. ./runtipi-cli start