You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
vvzvlad a91f3a9989 update readme 1 year ago
files fix GIT_AUTHOR_NAME 1 year ago
README.md update readme 1 year ago
requirements.txt init commit 1 year ago
user_cmd.sh add user cmd 1 year ago
vestasync.py add reboot 1 year ago

README.md

Vestasync

Vestasync - это ПО для бекапа и восстановления контроллеров Wirenboard. Оно решает две задачи:

  1. Создание бекапа конфигурации автоматически и деплой ее на удаленный git-сервер (поддерживается Gitea, для поддержки других сервисов необходимо дописать соответствующую функцию создания репозитория) по расписанию (раз в день)
  2. Восстановление бекапа одной командой: после подключения нового контроллера достаточно ввести его IP и имя хоста предыдущего контроллера, чтобы Vestasync автоматически восстановила бекап вплоть до MAC-адресов сетевых интерфейсов, чтобы не было нужды менять настройки на DHCP-сервере. После перезагрузки контроллер вернется в сеть с IP старого контроллера.

Установка

Эти команды выполняются не на контроллере, а на локальной машине или на сервере, с которых есть доступ к контроллеру. Система изначально писалась для инсталляций с множеством контроллеров, поэтому она сама заходит на пустой контроллер и настраивает его (так работает, например, ansible). Для настройки десяти контроллеров надо просто запустить 10 команд с разными device_ip.

git clone https://github.com/vvzvlad/vestasync
cd vestasync
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Команды

У Vestasync есть всего две команды: install, и restore.

install

Команда install выполняет подготовительные действия — устанавливает ПО, создает гит-репозитарий, устанавливает службы (подробнее в разделе "Службы").
Эту команду надо выполнять, указывая в device_ip исходный контроллер (который будет стоять в проде инсталляции) перед началом эксплуатации (если выполнять ее еще до настройки, то бонусом получим сохранение конфигов в гите во время ПНР). Эта команда выполняется на контроллере один раз.

Пример запуска (запускается на локальной машине, адрес контроллера указывается в device_ip):

./vestasync.py 
--cmd install 
--device_ip 192.168.1.85 
--gitea_address http://192.168.1.101:3001/ 
--device_new_name WB2 
--gitea_token de8a2eaee0d2f27746157c2fd563815f932d671c`

--cmd install: означает, что надо установить Vestasync на контроллер и подготовить его к созданию бекапа
--device_ip: IP-адрес контроллера
--gitea_address: адрес Gitea-сервера, куда будет отправлен бекап в виде "http://192.168.1.101:3001/"
--device_new_name: имя контроллера, из которого вместе с SN будет сформировано название контроллера, которое запишется в хостнейм и будет служить именем репозитария с конфигами
--gitea_token: токен для авторизации на Gitea-сервере (получается в интерфейсе)

Пользовательские команды

В папке системы лежит файл "user_cmd.sh", внутри которого можно описать любые команды, которыми вам надо конфигурировать контроллер: например, установка ключа SSH, установка таймзоны и локали, и так далее. Если вы не хотите ничего устанавливать, оставьте его пустым.

restore

Команда restore выполняет восстановление существующего бекапа на контроллере.
Эту команду надо выполнять на подменном контроллере из ЗИП-а в случае замены основного контроллера подменным. Эта команда выполянется один раз, после чего контроллер становится копией старого контроллера и продолжает сохранять свои изменения в конфигах в тот же репозитарий.

Пример запуска (запускается на локальной машине, адрес контроллера указывается в device_ip):

./vestasync.py 
--cmd restore 
--device_ip 192.168.98.85 
--gitea_address http://192.168.1.101:3001/ 
--gitea_token de8a2eaee0d2f27746157c2fd563815f932d671c`
--source_hostname WB2-A3TBJXLS

Используются те же аргументы, что и в install, но дополнительно еще нужен аругмент source_hostname, который определяет имя контроллера, с которого выполняется бекап. device_new_name не используетс, в качестве имени будет взято имя старого контроллера.

Службы

Службы, которые будут запущенны на контроллере при установке:

Восстановление MAC-адресов (apply_macs)

Служба apply_macs отвечает за применение MAC-адресов к сетевым интерфейсам при загрузке системы.
Эта служба считывает MAC-адреса из файлов, расположенных в каталоге /mnt/data/etc/vestasync/macs/, если они есть, и присваивает их соответствующим интерфейсам, таким как eth0, eth1, wlan0 и т. д. Это используется, если на контроллер был восстанновлен созданный бекап, чтобы сохранять MAC-адреса старого контроллера, и соотвественно, адрес, выданный DHCP. Для изменения MAC-адресов на изначальные надо просто удалить все файлы и перезагрузиться:

rm -rf /mnt/data/etc/vestasync/macs/*
reboot

Или, если надо сделать это временно, остановить службу: systemctl stop apply_macs.service
Обратно запустить: systemctl start apply_macs.service
Узнать статус: systemctl status apply_macs.service

Автоматическое версионирование и деплой конфигов (pushgit)

Службы pushgit (и таймер pushgit.timer) и pushgit_inotify обеспечивают автоматическое сохранение конфигов в репозиторий Git на удаленном сервере. Это позволяет сохранять изменения в файлах и версионировать их, что упрощает управление конфигурационными файлами и предотвращает потерю данных при их случайном изменении или удалении.
Данные сохраняются при каждом сохранении файлов или каждый день, если не сработал мониторинг сохранения. Чтобы отключить сохранение каждый день, надо остановить службу: systemctl stop pushgit.timer. Запустить обратно — systemctl start pushgit.timer.
Чтобы отключить сохранение по изменению файлов, надо остановить службу: systemctl stop pushgit_inotify.service. Запустить обратно — systemctl start pushgit_inotify.service.

Для принудительной загрузки конфигов надо выполнить в консоли контроллера systemctl start pushgit.service

Gitea

В качестве git-сервера используется gitea. Предполагается, что она работает локально, но можно использовать и публичные инсталляции. Устанавливать ее можно любым удобным способом, например с помощью такого docker-compose:

version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:1.19.0
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=postgres
      - GITEA__database__HOST=gitea_pg_db:5432
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=gitea
    restart: always
    networks:
      - gitea
    volumes:
      - /root/gitea/data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3001:3000"
      - "222:22"
    depends_on:
      - db

  db:
    image: postgres:14
    restart: always
    container_name: gitea_pg_db
    environment:
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=gitea
      - POSTGRES_DB=gitea
    networks:
      - gitea
    volumes:
      - /root/gitea/pg-data:/var/lib/postgresql/data

После запуска контейнера, надо перейти в веб-панель Gitea, создать там пользователя Vestasync, после чего получить в его настройках токен доступа, установив все галочки. В дальнейшем этот токен указывается в gitea_token