Modern backup systems like to work using the S3 protocol. The outdated NAS326 does not have it. Therefore, the idea arose to put a MinIO there.

Settings in the web interface

  1. Enable SSH access, if not already enabled: Control Panel -> Network -> Terminal -> Enable SSH service.
  2. Create a folder for the Mini: Control Panel -> Sharing and User Rights -> Shared Resources -> + (Add a shared resource). For the sake of certainty, it will be called s3. You do not need to distribute access to it through this interface.

Copying the MinIO binary

Let’s save the distribution on the local computer and copy it to the nas (the root password is the same as the admin password in the web panel):

curl -LfO https://dl.min.io/server/minio/release/linux-arm/minio
ssh -oHostKeyAlgorithms=+ssh-dss root@nas.local "cat > /root/minio" < minio

Installing MinIO

On my system, the s3 folder was created using the path /data/d732885c/s3/. I do not know if you will also have d732885c or another folder, please note.

Launching on the 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/*

Please note that the API starts on port 9000 (standard), and the Mini web console starts on port 9003, since ports 9001 and 9002 are occupied by another application on the NAS (twonkyserver).

How to launch

Launch:

/i-data/d732885c/s3/bin/minio.sh start

Stop:

/i-data/d732885c/s3/bin/minio.sh stop

Upon reboot, most folders (except /i-data) are recreated (including /etc and /root). In this regard, I have not found any adequate way to start automatically.

In theory, you can make a package/application for the NAS and install it, but you don’t want to waste time on it (and maybe it won’t be possible without some kind of signature).

For myself, I plan to write a script that will check once an hour that port 9000 is working and, if not, then run the start command (above) via ssh:

ssh -oHostKeyAlgorithms=+ssh-dss root@nas.local "/i-data/d732885c/s3/bin/minio.sh start"

Old core

Another of the disadvantages is this warning:

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

And indeed:

# uname -a
Linux NAS 3.10.39 #1 Thu Aug 11 16:37:05 CST 2022 armv7l GNU/Linux

There are guides on how to install clean Linux (including with a new kernel), but this is a completely different story (and I don’t recommend it):

Setting up s3cmd

It is convenient to use s3cmd from the script console.

Let’s install it and use it (I have already created the test package in the MinIO web panel):

$ 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