Скрипт, който инсталира ctop
Това е скрипт за инсталиране на програмата ctop (измерване на използването на ресурси в контейнери на Linux).
Ето какво прави скриптът:
Извлича името на ядрото на операционната система и го запазва в променливата KERNEL.
Дефинира функция output(), която служи за извеждане на съобщения със зелен цвят.
Дефинира функция command_exists(), която проверява дали дадена команда съществува.
Дефинира функция extract_url(), която извлича URL адрес, отговарящ на даден модел, от текст.
Използва case конструкция, за да определи съответния MATCH_BUILD според операционната система.
Проверява дали командите curl и wget съществуват в системата.
Ако потребителят, който изпълнява скрипта, не е root, проверява дали командите sudo или su съществуват, за да може да се изпълняват команди с root права.
Създава временна директория с помощта на mktemp.
Променя текущата работна директория към временната директория.
Извежда съобщение за изтегляне на последната информация за версията от GitHub API.
Извлича URL адреса на файла с контролни суми от информацията за последната версия.
Изтегля файла с контролни суми.
Проверява дали вече е инсталирана последната версия на ctop. Ако да, извежда съобщение, че програмата вече е актуализирана.
Ако последната версия не е инсталирана, извлича URL адреса на файла за текущата операционна система и архитектура и го изтегля.
Проверява контролните суми на изтегления файл. Ако не съвпадат, прекратява скрипта с грешка.
Инсталира ctop като изпълним файл в /usr/local/bin.
Извежда съобщение, че инсталацията е успешна.
install-ctop.sh
#!/usr/bin/env bash
# скрипт за инсталиране на ctop
KERNEL=$(uname -s)
function output() { echo -e "\033[32mctop-install\033[0m $@"; } # функция за извеждане на съобщение
function command_exists() { # функция, която проверява дали дадена команда съществува
command -v "$@" > /dev/null 2>&1
}
# функция за извличане на URL адрес, отговарящ на даден модел
function extract_url() {
match=$1; shift
echo "$@" | while read line; do
case $line in
*browser_download_url*${match}*)
url=$(echo $line | sed -e 's/^.*"browser_download_url":[ ]*"//' -e 's/".*//;s/\ //g')
echo $url
break
;;
esac
done
}
case $KERNEL in
Linux) MATCH_BUILD="linux-amd64" ;; # ако операционната система е Linux, MATCH_BUILD става "linux-amd64"
Darwin) MATCH_BUILD="darwin-amd64" ;; # ако операционната система е Darwin (macOS), MATCH_BUILD става "darwin-amd64"
*)
echo "platform not supported by this install script" # ако операционната система не се поддържа от скрипта за инсталиране, извежда грешка
exit 1
;;
esac
for req in curl wget; do # проверява дали командите curl и wget са инсталирани
command_exists $req || {
output "missing required $req binary" # ако някоя от командите липсва, извежда съобщение за грешка
req_failed=1
}
done
[ "$req_failed" == 1 ] && exit 1 # ако липсваща команда е открита, скриптът се прекратява с код на грешка 1
sh_c='sh -c'
if [ "$CURRENT_USER" != 'root' ]; then
if command_exists sudo; then
sh_c='sudo -E sh -c' # ако текущият потребител не е root и командата sudo е налична, използва sudo за изпълнение на команди с root права
elif command_exists su; then
sh_c='su -c' # ако текущият потребител не е root и командата su е налична, използва su за изпълнение на команди с root права
else
output "Error: this installer needs the ability to run commands as root. We are unable to find either "sudo" or "su" available to make this happen."
exit 1 # ако не са налични нито sudo, нито su, извежда съобщение за грешка и прекратява изпълнението на скрипта с код на грешка 1
fi
fi
TMP=$(mktemp -d "${TMPDIR:-/tmp}/ctop.XXXXX") # създава временна директория
cd ${TMP} # променя текущата работна директория към временната директория
output "fetching latest release info" # извежда съобщение за изтегляне на последната информация за версията
resp=$(curl -s https://api.github.com/repos/bcicen/ctop/releases/latest) # извлича информацията за последната версия от GitHub API
output "fetching release checksums" # извежда съобщение за изтегляне на контролни суми за версията
checksum_url=$(extract_url sha256sums.txt "$resp") # извлича URL адреса на файла с контролни суми от информацията за версията
wget -q $checksum_url -O sha256sums.txt # изтегля файла с контролни суми
# пропуска инсталацията, ако последната версия вече е инсталирана
cur_ctop=$(which ctop 2> /dev/null)
if [[ -n "$cur_ctop" ]]; then
cur_sum=$(sha256sum $cur_ctop | sed 's/ .*//')
(grep -q $cur_sum sha256sums.txt) && {
output "already up-to-date" # ако текущата версия е същата като последната, извежда съобщение, че вече е актуализирана
exit 0
}
fi
output "fetching latest ctop" # извежда съобщение за изтегляне на последната версия на ctop
url=$(extract_url $MATCH_BUILD "$resp") # извлича URL адреса на файла за текущата операционна система и архитектура
wget -q --show-progress $url # изтегля файла за текущата операционна система и архитектура
(sha256sum -c --quiet --ignore-missing sha256sums.txt) || exit 1 # проверява контролните суми на файла, ако не съвпадат, прекратява изпълнението на скрипта с код на грешка 1
output "installing to /usr/local/bin" # извежда съобщение за инсталиране в /usr/local/bin
chmod +x ctop-* # прави файла за изпълним
$sh_c "mv ctop-* /usr/local/bin/ctop" # премества файла в /usr/local/bin
output "done!" # извежда съобщение, че инсталацията е завършена успешно
Това е основата на скрипта за инсталиране на ctop. Той проверява операционната система, наличието на необходимите команди и изтегля и инсталира последната версия на ctop.
Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:
Donate ☕️ Дарете с PayPalDonate 💳 Дарете с Revolut