diff --git a/reinstall.sh b/reinstall.sh index e1b0fbf..62a41d9 100644 --- a/reinstall.sh +++ b/reinstall.sh @@ -46,6 +46,14 @@ is_in_windows() { [ "$(uname -o)" = Cygwin ] || [ "$(uname -o)" = Msys ] } +is_in_alpine() { + [ -f /etc/alpine-release ] +} + +is_in_arch() { + [ -f /etc/arch-release ] +} + set_github_proxy() { case "$confhome" in http*://raw.githubusercontent.com/*) @@ -291,29 +299,45 @@ apt_install() { } install_pkg() { - pkgs=$* - for pkg in $pkgs; do - # util-linux 用 lsmem 命令测试 - [ "$pkg" = util-linux ] && pkg=lsmem - if ! command -v $pkg >/dev/null; then - { - if [ -f /etc/alpine-release ]; then - if ! apk add $pkgs; then - add_community_repo_for_alpine - apk add $pkgs - fi - else - apt_install $pkgs || - dnf install -y $pkgs || - yum install -y $pkgs || - zypper install -y $pkgs || - pacman -Syu --noconfirm $pkgs - fi - } 2>/dev/null - # break 返回值始终为 0 - return + cmds=$* + need_install=false + for cmd in $cmds; do + if ! command -v $cmd >/dev/null; then + need_install=true + break fi done + + if $need_install; then + if is_in_alpine; then + add_community_repo_for_alpine + fi + # cmds to pkgs + for cmd in $cmds; do + case $cmd in + lsmem) pkg=util-linux ;; + nslookup | dig) + if is_in_alpine; then + pkg="bind-tools" + elif is_in_arch; then + pkg="bind" + else + pkg="bind*-*utils" + fi + ;; + *) pkg=$cmd ;; + esac + pkgs+=" $pkg" + done + { + apt_install $pkgs || + dnf install -y $pkgs || + yum install -y $pkgs || + zypper install -y $pkgs || + pacman -Syu --noconfirm $pkgs || + apk add $pkgs + } 2>/dev/null + fi } check_ram() { @@ -324,7 +348,7 @@ check_ram() { # arm 24g dmidecode 显示少了128m # arm 24g lshw 显示23BiB # ec2 t4g arm alpine 用 lsmem 和 dmidecode 都无效,要用 lshw,但结果和free -m一致,其他平台则没问题 - install_pkg util-linux + install_pkg lsmem ram_size=$(lsmem -b 2>/dev/null | grep 'Total online memory:' | awk '{ print $NF/1024/1024 }') if [ -z $ram_size ]; then @@ -516,7 +540,7 @@ fi # 必备组件 install_pkg curl # alpine 自带的 grep 是 busybox 里面的, 要下载完整版grep -if [ -f /etc/alpine-release ]; then +if is_in_alpine; then apk add grep fi