install-buildah.sh 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. #!/bin/bash
  2. export os_string=
  3. get_name_version() {
  4. local fn=/etc/os-release
  5. local arch
  6. arch="$(uname -m)"
  7. if ! [ -f "$fn" ]; then
  8. return
  9. fi
  10. local name=$(cat $fn | grep '^NAME=.*' | awk -F= '{print $2}' | xargs)
  11. local version="$(cat $fn | grep '^VERSION=.*' | awk -F= '{print $2}' | xargs)"
  12. echo "$name $version $arch" | sed -e 's#(.*)##' -e 's# # #g'
  13. }
  14. supported_os=(
  15. "AlmaLinux 8.* x86_64"
  16. "AlmaLinux 8.* aarch64"
  17. "AlmaLinux 9.* x86_64"
  18. "AlmaLinux 9.* aarch64"
  19. "AlmaLinux 10.* x86_64"
  20. "AlmaLinux 10.* aarch64"
  21. "Anolis OS 8.* x86_64"
  22. "Anolis OS 8.* aarch64"
  23. "CentOS Linux 7 x86_64"
  24. "CentOS Linux 7 aarch64"
  25. "CentOS Stream 8 x86_64"
  26. "CentOS Stream 8 aarch64"
  27. "CentOS Stream 9 x86_64"
  28. "CentOS Stream 9 aarch64"
  29. "CentOS Stream 9 x86_64"
  30. "CentOS Stream 10 aarch64"
  31. "CentOS Stream 10 x86_64"
  32. "Debian GNU/Linux 11 x86_64"
  33. "Debian GNU/Linux 11 aarch64"
  34. "Debian GNU/Linux 12 x86_64"
  35. "Debian GNU/Linux 12 aarch64"
  36. "Debian GNU/Linux 13 x86_64"
  37. "Debian GNU/Linux 13 aarch64"
  38. "openEuler 22.03 x86_64"
  39. "openEuler 22.03 aarch64"
  40. "openEuler 24.03 x86_64"
  41. "openEuler 24.03 aarch64"
  42. "OpenCloudOS 8.* x86_64"
  43. "OpenCloudOS 8.* aarch64"
  44. "OpenCloudOS 9.* x86_64"
  45. "OpenCloudOS 9.* aarch64"
  46. "Rocky Linux 8.* x86_64"
  47. "Rocky Linux 8.* aarch64"
  48. "Rocky Linux 9.* x86_64"
  49. "Rocky Linux 9.* aarch64"
  50. "Rocky Linux 10.* x86_64"
  51. "Rocky Linux 10.* aarch64"
  52. "Ubuntu 20.04.* LTS x86_64"
  53. "Ubuntu 20.04.* LTS aarch64"
  54. "Ubuntu 22.04.* LTS x86_64"
  55. "Ubuntu 22.04.* LTS aarch64"
  56. "Ubuntu 22.04 LTS x86_64"
  57. "Ubuntu 22.04 LTS aarch64"
  58. "Ubuntu 24.04.* LTS x86_64"
  59. "Ubuntu 24.04.* LTS aarch64"
  60. "Ubuntu 25.04 x86_64"
  61. "Ubuntu 25.04 aarch64"
  62. "Ubuntu 25.04.* x86_64"
  63. "Ubuntu 25.04.* aarch64"
  64. "ctyunos 2.*.* x86_64"
  65. "Arch Linux x86_64"
  66. "Arch Linux aarch64"
  67. )
  68. ubuntu_20_os=(
  69. "Ubuntu 20.04.* LTS x86_64"
  70. "Ubuntu 20.04.* LTS aarch64"
  71. )
  72. centos_obsolete_os=(
  73. "CentOS Linux 7 x86_64"
  74. "CentOS Linux 7 aarch64"
  75. "CentOS Stream 8 x86_64"
  76. "CentOS Stream 8 aarch64"
  77. )
  78. is_supported() {
  79. local s
  80. s="$(get_name_version)"
  81. for i in "${supported_os[@]}"; do
  82. if echo "$s" | grep "$i"; then
  83. return 0
  84. fi
  85. done
  86. return 1
  87. }
  88. is_openeuler() {
  89. grep -qw 'openEuler' /etc/os-release
  90. }
  91. is_ubuntu_20() {
  92. local s
  93. s="$(get_name_version)"
  94. for i in "${ubuntu_20_os[@]}"; do
  95. if echo "$s" | grep "$i"; then
  96. return 0
  97. fi
  98. done
  99. return 1
  100. }
  101. is_centos_obsolete() {
  102. local s
  103. s="$(get_name_version)"
  104. for i in "${centos_obsolete_os[@]}"; do
  105. if echo "$s" | grep "$i"; then
  106. return 0
  107. fi
  108. done
  109. return 1
  110. }
  111. ensure_buildah_on_openeuler() {
  112. local arch
  113. local url
  114. arch="$(uname -m)"
  115. case $arch in
  116. x86_64)
  117. url=https://iso.yunion.cn/openeuler/22.03/base/x86_64/Packages/buildah-1.34.1-4.x86_64.rpm
  118. ;;
  119. aarch64)
  120. url=https://iso.yunion.cn/openeuler/22.03/base/aarch64/Packages/buildah-1.34.1-4.aarch64.rpm
  121. ;;
  122. *)
  123. exit 1
  124. ;;
  125. esac
  126. if hash buildah &>/dev/null; then
  127. return
  128. fi
  129. dnf localinstall -y "$url"
  130. }
  131. ensure_buildah() {
  132. local installer
  133. hash yum &>/dev/null && installer=yum
  134. hash dnf &>/dev/null && installer=dnf
  135. hash apt &>/dev/null && installer=apt
  136. hash pacman &>/dev/null && installer=pacman
  137. #hash git &>/dev/null || $installer install -y git
  138. if is_ubuntu_20; then
  139. ./scripts/install-buildah-ubuntu20.sh
  140. return
  141. fi
  142. if is_openeuler; then
  143. ensure_buildah_on_openeuler
  144. return
  145. fi
  146. if is_centos_obsolete; then
  147. sed -i 's/^mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
  148. sed -i 's/^#baseurl/baseurl/g' /etc/yum.repos.d/CentOS-*
  149. sed -i 's/mirror.centos.org/vault.centos.org/g' /etc/yum.repos.d/CentOS-*
  150. fi
  151. if hash buildah &>/dev/null; then
  152. return
  153. fi
  154. if [[ "$installer" == "apt" ]]; then
  155. apt update -y
  156. $installer install -y buildah
  157. elif [[ "$installer" == "pacman" ]]; then
  158. pacman -Sy --noconfirm buildah
  159. else
  160. $installer install -y buildah
  161. fi
  162. }
  163. main() {
  164. local os_string="$(get_name_version)"
  165. if ! is_supported; then
  166. echo "Not supported OS [$os_string]!"
  167. exit 1
  168. fi
  169. # 禁用selinux,否则安装配置文件 config-allinone-current.yml 会写入失败
  170. hash setenforce &>/dev/null && setenforce 0
  171. ensure_buildah
  172. echo "[$os_string] $(buildah --version)"
  173. }
  174. main