Современные системы бекапа любят работать по протоколу S3. Устаревший NAS326 его не имеет. Поэтому возникла идея поставить туда MinIO.
Настройки в веб-интерфейсе
- Включите доступ по SSH, если еще не включен: Панель управления -> Сеть -> Terminal -> Включите службу SSH.
- Создайте папку для MinIO: Панель управления -> Общий доступ и права пользователей -> Общие ресурсы -> + (Добавить общий ресурс). Для определенности он будет называться s3. Доступы на него через этот интерфейс раздавать не нужно.
Копируем бинарник MinIO
Сохраним дистрибьютив на локальном компьютере и скопируем на nas (пароль от root такой же как от admin в веб-панели):
curl -LfO https://dl.min.io/server/minio/release/linux-arm/minio
ssh -oHostKeyAlgorithms=+ssh-dss root@nas.local "cat > /root/minio" < minio
Устанавливаем MinIO
На моей системе папка s3 создалась по пути /i-data/d732885c/s3/
. Не знаю будет ли у вас так же d732885c
или другая папка, обратите внимание.
Запускаем на NAS:
# просто переменная для того, чтобы менять папку в одном месте
export S3_DIR=/i-data/d732885c/s3
cd $S3_DIR
# создаем папки, которые будут использоваться MinIO
mkdir bin certs data
# переносим бинарник из временного места в постоянное
mv /root/minio $S3_DIR/bin/
# создаем скрипт старта и остановки (не забудьте поменять пароль)
cat > $S3_DIR/bin/minio.sh <<\EOF
#!/bin/sh
export MINIO_ROOT_USER=minio
export MINIO_ROOT_PASSWORD=myBestPassword123
case "$1" in
start)
/sbin/start-stop-daemon --start --background --make-pidfile --pidfile /var/run/minio.pid --quiet --exec /i-data/d732885c/s3/bin/minio -- server --certs-dir /i-data/d732885c/s3/certs --console-address :9003 /i-data/d732885c/s3/data
;;
stop)
/sbin/start-stop-daemon --stop --signal TERM --pidfile /var/run/minio.pid
;;
reload|restart|force-reload)
$0 stop
sleep 3
$0 start
;;
*)
echo "Usage: /i-data/d732885c/s3/bin/minio.sh {start|stop|reload|restart|force-reload}"
exit 1
;;
esac
exit 0
EOF
# делаем файлы запускаемыми
chmod +x $S3_DIR/bin/*
Обратите внимание, что API стартует на порту 9000 (стандартно), а веб-консоль MinIO на порту 9003, т.к. порты 9001 и 9002 занимает другое приложение на NAS (twonkyserver).
Как запускать
Запуск:
/i-data/d732885c/s3/bin/minio.sh start
Остановка:
/i-data/d732885c/s3/bin/minio.sh stop
При перезагрузке большинсто папок (кроме /i-data) пересоздаются (включая /etc и /root). В связи с этим какого-то адекватного способа автоматического старта не нашел.
В теории, можно сделать пакет/приложение для NAS и установить его, но не хочется на это тратить время (и, может быть, без какой-нибудь подписи это будет невозможно).
Для себя планирую написать скрипт, который раз в час будет проверять, что порт 9000 работает и, если нет, то запускать команду старта (выше) через ssh:
ssh -oHostKeyAlgorithms=+ssh-dss root@nas.local "/i-data/d732885c/s3/bin/minio.sh start"
Старое ядро
Еще из минусов отмечу такое предупреждение:
WARNING: Detected Linux kernel version older than 4.0.0 release, there are some known potential performance problems with this kernel version. MinIO recommends a minimum of 4.x.x linux kernel version for best performance
И действительно:
# uname -a
Linux NAS 3.10.39 #1 Thu Aug 11 16:37:05 CST 2022 armv7l GNU/Linux
Есть руководства как поставить чистый Linux (в том числе с новым ядром), но это уже совсем другая история (и особо не рекомендую):
Настройка s3cmd
Из консоли для скриптов удобно использовать s3cmd.
Давайте ее поставим и используем (бакет test я уже создал в веб-панели MinIO):
$ brew install s3cmd
$ cat > ~/.s3cfg <<EOF
[default]
access_key = minio
secret_key = myBestPassword123
host_bucket = nas.local:9000
host_base = nas.local:9000
use_https = false
EOF
$ s3cmd put example.jpg s3://test
$ s3cmd ls s3://test