Современные системы бекапа любят работать по протоколу S3. Устаревший NAS326 его не имеет. Поэтому возникла идея поставить туда MinIO.

Настройки в веб-интерфейсе

  1. Включите доступ по SSH, если еще не включен: Панель управления -> Сеть -> Terminal -> Включите службу SSH.
  2. Создайте папку для 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