| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- #!/bin/bash
- export os_string=
- get_name_version() {
- local fn=/etc/os-release
- local arch
- arch="$(uname -m)"
- if ! [ -f "$fn" ]; then
- return
- fi
- local name=$(cat $fn | grep '^NAME=.*' | awk -F= '{print $2}' | xargs)
- local version="$(cat $fn | grep '^VERSION=.*' | awk -F= '{print $2}' | xargs)"
- echo "$name $version $arch" | sed -e 's#(.*)##' -e 's# # #g'
- }
- supported_os=(
- "AlmaLinux 8.* x86_64"
- "AlmaLinux 8.* aarch64"
- "AlmaLinux 9.* x86_64"
- "AlmaLinux 9.* aarch64"
- "AlmaLinux 10.* x86_64"
- "AlmaLinux 10.* aarch64"
- "Anolis OS 8.* x86_64"
- "Anolis OS 8.* aarch64"
- "CentOS Linux 7 x86_64"
- "CentOS Linux 7 aarch64"
- "CentOS Stream 8 x86_64"
- "CentOS Stream 8 aarch64"
- "CentOS Stream 9 x86_64"
- "CentOS Stream 9 aarch64"
- "CentOS Stream 9 x86_64"
- "CentOS Stream 10 aarch64"
- "CentOS Stream 10 x86_64"
- "Debian GNU/Linux 11 x86_64"
- "Debian GNU/Linux 11 aarch64"
- "Debian GNU/Linux 12 x86_64"
- "Debian GNU/Linux 12 aarch64"
- "Debian GNU/Linux 13 x86_64"
- "Debian GNU/Linux 13 aarch64"
- "openEuler 22.03 x86_64"
- "openEuler 22.03 aarch64"
- "openEuler 24.03 x86_64"
- "openEuler 24.03 aarch64"
- "OpenCloudOS 8.* x86_64"
- "OpenCloudOS 8.* aarch64"
- "OpenCloudOS 9.* x86_64"
- "OpenCloudOS 9.* aarch64"
- "Rocky Linux 8.* x86_64"
- "Rocky Linux 8.* aarch64"
- "Rocky Linux 9.* x86_64"
- "Rocky Linux 9.* aarch64"
- "Rocky Linux 10.* x86_64"
- "Rocky Linux 10.* aarch64"
- "Ubuntu 20.04.* LTS x86_64"
- "Ubuntu 20.04.* LTS aarch64"
- "Ubuntu 22.04.* LTS x86_64"
- "Ubuntu 22.04.* LTS aarch64"
- "Ubuntu 22.04 LTS x86_64"
- "Ubuntu 22.04 LTS aarch64"
- "Ubuntu 24.04.* LTS x86_64"
- "Ubuntu 24.04.* LTS aarch64"
- "Ubuntu 25.04 x86_64"
- "Ubuntu 25.04 aarch64"
- "Ubuntu 25.04.* x86_64"
- "Ubuntu 25.04.* aarch64"
- "ctyunos 2.*.* x86_64"
- "Arch Linux x86_64"
- "Arch Linux aarch64"
- )
- ubuntu_20_os=(
- "Ubuntu 20.04.* LTS x86_64"
- "Ubuntu 20.04.* LTS aarch64"
- )
- centos_obsolete_os=(
- "CentOS Linux 7 x86_64"
- "CentOS Linux 7 aarch64"
- "CentOS Stream 8 x86_64"
- "CentOS Stream 8 aarch64"
- )
- is_supported() {
- local s
- s="$(get_name_version)"
- for i in "${supported_os[@]}"; do
- if echo "$s" | grep "$i"; then
- return 0
- fi
- done
- return 1
- }
- is_openeuler() {
- grep -qw 'openEuler' /etc/os-release
- }
- is_ubuntu_20() {
- local s
- s="$(get_name_version)"
- for i in "${ubuntu_20_os[@]}"; do
- if echo "$s" | grep "$i"; then
- return 0
- fi
- done
- return 1
- }
- is_centos_obsolete() {
- local s
- s="$(get_name_version)"
- for i in "${centos_obsolete_os[@]}"; do
- if echo "$s" | grep "$i"; then
- return 0
- fi
- done
- return 1
- }
- ensure_buildah_on_openeuler() {
- local arch
- local url
- arch="$(uname -m)"
- case $arch in
- x86_64)
- url=https://iso.yunion.cn/openeuler/22.03/base/x86_64/Packages/buildah-1.34.1-4.x86_64.rpm
- ;;
- aarch64)
- url=https://iso.yunion.cn/openeuler/22.03/base/aarch64/Packages/buildah-1.34.1-4.aarch64.rpm
- ;;
- *)
- exit 1
- ;;
- esac
- if hash buildah &>/dev/null; then
- return
- fi
- dnf localinstall -y "$url"
- }
- ensure_buildah() {
- local installer
- hash yum &>/dev/null && installer=yum
- hash dnf &>/dev/null && installer=dnf
- hash apt &>/dev/null && installer=apt
- hash pacman &>/dev/null && installer=pacman
- #hash git &>/dev/null || $installer install -y git
- if is_ubuntu_20; then
- ./scripts/install-buildah-ubuntu20.sh
- return
- fi
- if is_openeuler; then
- ensure_buildah_on_openeuler
- return
- fi
- if is_centos_obsolete; then
- sed -i 's/^mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
- sed -i 's/^#baseurl/baseurl/g' /etc/yum.repos.d/CentOS-*
- sed -i 's/mirror.centos.org/vault.centos.org/g' /etc/yum.repos.d/CentOS-*
- fi
- if hash buildah &>/dev/null; then
- return
- fi
- if [[ "$installer" == "apt" ]]; then
- apt update -y
- $installer install -y buildah
- elif [[ "$installer" == "pacman" ]]; then
- pacman -Sy --noconfirm buildah
- else
- $installer install -y buildah
- fi
- }
- main() {
- local os_string="$(get_name_version)"
- if ! is_supported; then
- echo "Not supported OS [$os_string]!"
- exit 1
- fi
- # 禁用selinux,否则安装配置文件 config-allinone-current.yml 会写入失败
- hash setenforce &>/dev/null && setenforce 0
- ensure_buildah
- echo "[$os_string] $(buildah --version)"
- }
- main
|