Files
hpnn-proto/scripts/host-prereq.sh
T

62 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# Подготовка хоста к запуску стенда.
#
# ./host-prereq.sh загрузить модуль openvswitch
# ./host-prereq.sh --shim дополнительно поднять macvlan-shim, чтобы стенд
# можно было проверять с самого хоста
# ./host-prereq.sh --shim-down снять shim
#
# Про shim: macvlan-интерфейс контейнера и физический интерфейс хоста не видят
# друг друга напрямую — это ограничение macvlan, а не стенда. Клиент из
# 192.168.5.0/24 обращается к стенду без всяких shim; shim нужен только если
# проверять хочется с самой машины 192.168.5.9.
set -euo pipefail
PARENT=${PARENT:-enp3s0}
SHIM=${SHIM:-hpnn-shim}
SHIM_IP=${SHIM_IP:-192.168.5.13/32}
LB_IP=${LB_IP:-192.168.5.20}
VIP=${VIP:-192.168.5.21}
log() { echo "[host-prereq] $*"; }
shim_up() {
if ! ip link show "$SHIM" >/dev/null 2>&1; then
ip link add "$SHIM" link "$PARENT" type macvlan mode bridge
log "создан $SHIM поверх $PARENT"
fi
ip addr replace "$SHIM_IP" dev "$SHIM"
ip link set "$SHIM" up
ip route replace "$LB_IP/32" dev "$SHIM"
ip route replace "$VIP/32" dev "$SHIM"
log "shim поднят: $SHIM_IP, маршруты на $LB_IP и $VIP"
}
shim_down() {
ip link del "$SHIM" 2>/dev/null && log "$SHIM удалён" || log "$SHIM отсутствует"
}
case "${1:-}" in
--shim-down)
shim_down
exit 0
;;
esac
if ! grep -q '^openvswitch ' /proc/modules; then
modprobe openvswitch
log "модуль openvswitch загружен"
else
log "модуль openvswitch уже загружен"
fi
# Чтобы стенд переживал перезагрузку хоста.
if [ -d /etc/modules-load.d ] && [ ! -f /etc/modules-load.d/openvswitch.conf ]; then
echo openvswitch > /etc/modules-load.d/openvswitch.conf
log "модуль добавлен в автозагрузку (/etc/modules-load.d/openvswitch.conf)"
fi
[ "${1:-}" = "--shim" ] && shim_up
log "готово"