Почему-то ZyXEL NAS326 не имеет бинарника rsync. Это означает, что на него копировать через rsync нельзя, что совсем неудобно.
Раньше можно было воспользоваться установкой пакета RandomTools, но домен zyxel.diskstation.eu перестал работать (впрочем, репозиторий жив и переехал на новый адрес — об этом в конце статьи). Поэтому пришлось придумывать как это сделать теперь.
Всего несколько команд, объединенных в скрипт:
cat >/i-data/sysvol/install_rsync.sh <<EOF
curl -fLO http://entware.zyxmon.org/binaries/armv7/installer/entware_install.sh
chmod +x entware_install.sh
./entware_install.sh
/opt/bin/opkg install --force-space rsync
cp /opt/bin/rsync /bin
EOF
chmod 755 /i-data/sysvol/install_rsync.sh
Только после перезагрузки все кроме скрипта пропадает. Нужно будет повторить:
/i-data/sysvol/install_rsync.sh
Наверное, можно скопировать /opt в /i-data/sysvol/rsync/, и восстанавливать от туда без интернета, но пока что не требуется.
Один бинарник rsync копировать не получится, т.к. он зависит от множества библиотек (по идее можно где-то найти собранный бинарник, который бы включал все библиотеки и не зависел от внешних, но опять же пока что не хочется на это тратить время – все работает и еще куча вещей, которые нужно сделать).
Обновление: как сделать, чтобы установка переживала перезагрузку
Сначала почему всё пропадает. Корневая ФС NAS326 – это ramdisk-образ, который прошивка распаковывает из флеша при каждой загрузке. /opt, /bin, /usr живут внутри него и пересоздаются при ребуте. На дисках переживают перезагрузку только /i-data/* и /etc/zyxel. Поэтому и выживает только скрипт, а установленный в /opt Entware – нет.
Способ 1: MetaRepository + RandomTools (правильный)
Домен zyxel.diskstation.eu действительно умер, но сам репозиторий переехал на новый адрес: http://zyxel.ddnss.eu/Users/Mijzelf/zypkg-repo/. Важно: именно http, без s – curl в прошивке не умеет ни https, ни редиректы, и список пакетов просто не скачается.
cd /i-data/sysvol/admin
mkdir -p zy-pkgs && cd zy-pkgs
echo "http://zyxel.ddnss.eu/Users/Mijzelf/zypkg-repo/" > web_prefix
Дальше в веб-интерфейсе: Центр приложений → Обзор → Все приложения → обновить список → установить MetaRepository → обновить список ещё раз → установить RandomTools (rsync входит в него; у пакета нет веб-интерфейса, это нормально).
Почему это переживает ребут: пакеты, установленные через штатный пакетный менеджер, физически лежат в /i-data/sysvol/.PKG/<имя>/ – то есть на дисках, а прошивка при загрузке сама выполняет их стартовые скрипты.
Если rsync нужен как демон (принимать бекапы по rsync-протоколу), автозапуск делается скриптом в /i-data/sysvol/.PKG/RandomTools/etc/custom_startscripts/ – всё из этой папки прошивка выполняет при загрузке:
cat >/i-data/sysvol/.PKG/RandomTools/etc/custom_startscripts/rsyncd.sh <<EOF
#!/bin/sh
/usr/local/bin/rsync --daemon --config=/opt/etc/rsyncd.conf
EOF
chmod +x /i-data/sysvol/.PKG/RandomTools/etc/custom_startscripts/rsyncd.sh
(путь к бинарю проверить через which rsync; если Backup Planner установлен – удалить, его zysync занимает порт 873).
Способ 2: остаться на ручной установке из скрипта выше
Идея: тело Entware положить на диск, а после ребута восстанавливать только симлинк и запуск демона – без интернета и переустановки.
Один раз, после успешной установки:
cp -a /opt /i-data/sysvol/opt-persist
rm -rf /opt
ln -s /i-data/sysvol/opt-persist /opt
Скрипт-восстановитель /i-data/sysvol/rsync_boot.sh:
#!/bin/sh
# восстановить /opt, если ребут всё стёр
[ -e /opt/bin/rsync ] || { rm -rf /opt; ln -s /i-data/sysvol/opt-persist /opt; }
# запустить rsyncd, если ещё не запущен
pidof rsync >/dev/null || /opt/bin/rsync --daemon --config=/i-data/sysvol/opt-persist/etc/rsyncd.conf
Проблема: на чистой прошивке без MetaRepository нет точки автозапуска – некому выполнить этот скрипт при загрузке. Поэтому триггер делается снаружи, с того устройства, которое инициирует бекапы (у меня TrueNAS): cron-задача за пару минут до окна бекапа:
sshpass -p 'пароль_root' ssh -o StrictHostKeyChecking=no root@<IP_NAS326> /i-data/sysvol/rsync_boot.sh
Ребуты NAS редки, а если случились – ближайшая задача бекапа сама всё поднимет обратно.