net/check/zadanie2/hq-srv.sh

105 lines
5.7 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ============================================================
# ПРОВЕРКА ЗАДАНИЯ 2 — HQ-SRV: RAID0, NFS, chrony, apache+mariadb
# (только читает состояние; exportfs/mdadm-детали требуют root)
# ============================================================
NAME="hq-srv"
LOG="check_${NAME}_z2.txt"
OK=0; FAIL=0; SKIP=0
ok() { echo "[OK] $1"; OK=$((OK+1)); }
fail() { echo "[FAIL] $1 — $2"; FAIL=$((FAIL+1)); }
skip() { echo "[ПРОПУЩЕНО] $1"; SKIP=$((SKIP+1)); }
root_or_skip() { if [[ $EUID -ne 0 ]]; then skip "$1 (нужен root)"; return 1; fi; return 0; }
check_var() { if [[ -z "${!2}" ]]; then skip "$1 — не задано $2"; return 1; fi; return 0; }
# ================= ПЕРЕМЕННЫЕ (заполните для проверки) =================
RAID_NAME="md0" # имя массива по заданию
RAID_MOUNT="/raid" # точка монтирования по заданию
NFS_EXPORT="/raid/nfs" # директория экспорта по заданию
NFS_NET="" # сеть HQ-CLI (как в exports)
APACHE_PORT="80" # порт apache
WEB_DB_NAME="webdb" # БД по заданию
WEB_DB_USER="web" # пользователь БД по заданию
WEB_DB_PASS="P@ssw0rd" # пароль пользователя БД по заданию
ISO_WEB_DIR="/mnt/iso/web" # откуда копировались файлы (для справки)
NTP_ADDR="" # адрес ISP (chrony)
main () {
echo "=== Проверка задания 2: HQ-SRV ==="
# --- 1. RAID0 (md0) ---
if [[ -e /dev/$RAID_NAME ]] || grep -q "$RAID_NAME" /proc/mdstat 2>/dev/null; then
if grep -A1 "$RAID_NAME" /proc/mdstat 2>/dev/null | grep -q "raid0"; then
ok "массив $RAID_NAME собран уровнем 0"
else fail "уровень $RAID_NAME" "не raid0 в /proc/mdstat: $(grep -A1 "$RAID_NAME" /proc/mdstat 2>/dev/null)"; fi
DISKS=$(grep -A1 "$RAID_NAME" /proc/mdstat 2>/dev/null | head -1 | grep -o "\[2/2\]")
if [[ -n "$DISKS" ]]; then ok "в массиве 2 диска ($DISKS)"
else fail "диски массива" "ожидалось [2/2]: $(grep -A1 "$RAID_NAME" /proc/mdstat)"; fi
else
fail "массив $RAID_NAME" "не существует"; fi
# --- 2. ФС ext4 и монтирование /raid ---
FSTYP=$(lsblk -no FSTYPE /dev/$RAID_NAME 2>/dev/null)
expect_eq "файловая система $RAID_NAME" "ext4" "$FSTYP"
if mountpoint -q "$RAID_MOUNT" 2>/dev/null; then
ok "$RAID_MOUNT смонтирована"
else fail "$RAID_MOUNT" "не точка монтирования"; fi
if grep -qE " .*$RAID_MOUNT " /etc/fstab 2>/dev/null \
&& grep -E " .*$RAID_MOUNT .*ext4" /etc/fstab &>/dev/null; then
ok "/raid прописан в /etc/fstab"
else fail "/raid в fstab" "нет строки с $RAID_MOUNT (ext4): $(grep -E "raid" /etc/fstab)"; fi
# --- 3. NFS ---
if grep -qF "$NFS_EXPORT" /etc/exports 2>/dev/null; then
EXPORT_LINE=$(grep -F "$NFS_EXPORT" /etc/exports)
if check_var "сеть HQ-CLI для NFS" NFS_NET && grep -qF "$NFS_NET" <<<"$EXPORT_LINE" \
&& grep -qw "rw" <<<"$EXPORT_LINE"; then
ok "NFS экспорт: $EXPORT_LINE"
else fail "NFS экспорт" "нет rw для $NFS_NET: '$EXPORT_LINE'"; fi
else fail "NFS экспорт $NFS_EXPORT" "нет строки в /etc/exports"; fi
if root_or_skip "exportfs (текущее состояние NFS)"; then
if exportfs -v 2>/dev/null | grep -qF "$NFS_EXPORT"; then
ok "NFS экспорт активен (exportfs)"
else fail "NFS экспорт активен" "нет в exportfs -v"; fi
fi
# --- 4. chrony-клиент ---
check_var "источник NTP" NTP_ADDR &&
if command -v chronyc &>/dev/null; then
if chronyc sources 2>/dev/null | grep -qF "$NTP_ADDR"; then ok "NTP источник = $NTP_ADDR"
else fail "NTP источник" "нет $NTP_ADDR в chronyc sources"; fi
else skip "NTP источник — chronyc не найден (ПРОВЕРИТЬ пакет chrony)"; fi
# --- 5. apache + mariadb + приложение ---
if systemctl is-active httpd &>/dev/null || systemctl is-active apache2 &>/dev/null; then
ok "веб-сервер apache активен"
else fail "apache" "служба не активна (ПРОВЕРИТЬ имя службы на РЕД ОС 8)"; fi
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1:$APACHE_PORT/" 2>/dev/null)
if [[ "$HTTP_CODE" == "200" ]]; then ok "apache отвечает 200 на порт $APACHE_PORT"
else fail "ответ apache" "ожидалось 200, получено '$HTTP_CODE'"; fi
if [[ -f /var/www/html/index.php && -f /var/www/html/logo.png ]]; then
ok "index.php и logo.png в корне сайта"
else fail "файлы сайта" "нет index.php/logo.png в /var/www/html"; fi
MYSQL_OUT=$(mysql -u"$WEB_DB_USER" -p"$WEB_DB_PASS" -e "SHOW TABLES;" "$WEB_DB_NAME" 2>&1)
if grep -q "Tables_in" <<<"$MYSQL_OUT"; then
ok "доступ к БД $WEB_DB_NAME под $WEB_DB_USER (таблицы есть)"
else fail "БД $WEB_DB_NAME" "нет таблиц или ошибка подключения: $MYSQL_OUT"; fi
echo ""
echo "=== Проверить вручную ==="
echo " — страница приложения в браузере (функционал, картинка logo.png)"
echo " — содержимое index.php (учётные данные БД указаны правильно)"
echo " — скриншоты для отчёта: exportfs -v, mdadm --D dev/md0, df -h /raid"
echo ""
echo "=== Итог: OK=$OK FAIL=$FAIL ПРОПУЩЕНО=$SKIP ==="
[[ $FAIL -eq 0 ]]
}
main 2>&1 | tee "$LOG"
STATUS=${PIPESTATUS[0]}
echo "Лог сохранён: $LOG"
exit $STATUS