Skip to content

Instantly share code, notes, and snippets.

@CodeBradley
Last active May 26, 2025 18:51
Show Gist options
  • Save CodeBradley/6acef34563323f8c2a11b72900c20092 to your computer and use it in GitHub Desktop.
Save CodeBradley/6acef34563323f8c2a11b72900c20092 to your computer and use it in GitHub Desktop.
How to Setup Open Media Vault (OMV) 7 on FriendlyElec CM3588 Nas Kit with ZFS

How to Setup Open Media Vault (OMV) 7 on FriendlyElec CM3588 Nas Kit with ZFS

The FriendlyElec (NanoPC) CM3588 is a RK3588 based solution with 4/8/16GB LPDDR4x memory and 0/64GB eMMC flash storage. The inital carrier board released with the CM3588 features 4x M.2 NVMe SSD slots (PCIe 3.0 x1 each) and a 2.5gbps RJ45 port, making it an attractive option for a low powered silent NAS at $130/$145/$174 depending on which RAM configuration you purchase.

I ordered this in response to the LTT video. I have seen a few people struggling to configure these, and figured I would offer some basic guides in order to get those who need some assistance on getting their NAS up and going.

I will be using the precompiled Debian 12 installer found here. ( 01_Official images > 02_SD-to-eMMC images > rk3588-eflasher-debian-bookworm-core-6.1-arm64-xxxxxxxx.img.gz)

The FriendlyElec Wiki is actually pretty good, but it can feel like a wall of text/commands to run and can be overwhelming to a new user.

Want to power this over POE+? I used this adapter, and verified it supplies up to 25 watts and passes 2.5gbps.

Typical power consumption with 4 Micron 2300 NVMe drives and (2) Noctua NF-A4x10 fans @ 5V:

  • idle = ~5w idle
  • "typical" load = ~7-15w
  • stress testing CPU and SSDs = ~20-23w

I have found that transfering at linerate (2.5gbps) uses about 35% CPU and ~15-20w in my testing.

I remixed sgofferj's CM3588-NAS-case to accomadate the case fan screws (M5.5) that come with the Noctua fans. You can find that here.

Installing an OS

Since I bought a 8GB RAM/64GB eMMC model, I will be using an SD to eMMC install image for this guide. You will need a MicroSD card that is 8GB or larger.

  1. Download Debian 12 Bookworm Core from here. ( 01_Official images > 02_SD-to-eMMC images > rk3588-eflasher-debian-bookworm-core-6.1-arm64-xxxxxxxx.img.gz)
  2. Use a tool like 7Zip, to extract the .img file
  3. Use Balena Etcher to write the image to the SD card.
  4. Install the SD card into the CM3588 NAS, then power the unit on.
  5. If you use one of the HDMI out ports, you can track the progress. Otherwise you can wait ~5 minutes (mine consistently takes around 80 seconds to install).
  6. Power down the unit, then power it back on.
  7. If you have HDMI hooked up, you should be prompted at the main login screen. If you want to use SSH, scan your network or check your router/DHCP server for the device's IP address.

Configuring Debian 12

There are 2 accounts by default.

  • root/fa
  • pi/pi (in the sudoers group)

In this guide we will be:

Use your favorite tool to SSH into the unit.

Changing root password

passwd

Enter a new password, and confirm.

Delete default user

We are going to create our own user, so we don't need this one.

deluser pi

Set your locale

If you're not US based, change this to your locale

sudo localectl set-locale LANG=en_US.UTF-8

Create a new user

I am using nas in this example, but feel free to name it whatever you want, then we will add it to sudoers group

useradd nas
passwd nas
usermod -aG sudo -d /home/nas nas

To verify user was added to the sudoers group

getent group sudo

If you need to add the users home dir manually

sudo mkdir -p /home/nas
sudo chmod 755 /home/nas
sudo usermod -d /home/nas nas

Move over skeleton files

sudo cp -r /etc/skel/. /home/nas/
sudo chown -R nas:nas /home/nas

Configure the user to use bash

chsh -s /bin/bash nas

Disabling root SSH logins

This is for security, as the username is always root and the access rights are unlimited.

You can skip this step if installing OMV right away, otherwise you will need to run it again later.

nano /etc/ssh/sshd_config

Go to line 33, change PermitRootLogin yes to PermitRootLogin no.

systemctl restart sshd
exit

SSH back in as your newly created user

Reconfigure Apt sources

By default the sources file comes with a mirror that is based out of China. While this is fine, it would be much faster if you used the local Debian apt sources. So we will change them back. I have commented them out for now.

sudo cp /etc/apt/sources.list /etc/apt/sources.list.old
sudo nano /etc/apt/sources.list
#deb https://mirrors.aliyun.com/debian bookworm main non-free contrib
#deb-src https://mirrors.aliyun.com/debian bookworm main non-free contrib
#deb https://mirrors.aliyun.com/debian-security bookworm-security main
#deb-src https://mirrors.aliyun.com/debian-security bookworm-security main
#deb https://mirrors.aliyun.com/debian bookworm-backports main non-free contrib
#deb-src https://mirrors.aliyun.com/debian bookworm-backports main non-free contrib

deb http://deb.debian.org/debian bookworm main non-free-firmware contrib
deb-src http://deb.debian.org/debian bookworm main non-free-firmware

deb http://deb.debian.org/debian-security/ bookworm-security main non-free-firmware
deb-src http://deb.debian.org/debian-security/ bookworm-security main non-free-firmware

deb http://deb.debian.org/debian bookworm-updates main non-free-firmware
deb-src http://deb.debian.org/debian bookworm-updates main non-free-firmware

deb http://deb.debian.org/debian bookworm-backports main non-free-firmware contrib
deb-src http://deb.debian.org/debian bookworm-backports main non-free-firmware

Then update and upgrade apt

sudo apt update && sudo apt upgrade

Compiling linux-headers for DKMS (Dynamic Kernel Module Support)

In order to install ZFS, we first need to install linux headers for our kernel to add DKMS support.

Luckily, pre-compiled headers can already be found in /opt/archives.

Note: Versions will change, if the command fails then ls /opt/archives to find the file to use

sudo -i
dpkg -i /opt/archives/linux-*

Installing ZFS

Now that we have Linux headers, we can use apt to install ZFS

sudo apt install zfs-dkms zfsutils-linux

Now that ZFS is installed, we will try to run a command to test that ZFS and DKMS are actually functional.

zpool status

If this works, it will report that we have 0 pools. If you get an error that says: "The ZFS modules are not loaded. Try running '/sbin/modprobe zfs' as root to load them", that means DKMS isn't working properly and you likely missed a step up above or it failed to compile, which should have given you an error.

Now that we have ZFS working, we can create our ZFS pool. You have a few options, depending on how much redundancy or performance you want. I would recommend the following options, although there are a few more. You will have to check the ZFS documenation for any other array types.

ZFS should be working now.

Create ZFS Pool

Create the zfs drive now by running the following command

zpool create <poolname> <raidtype> <devices> <devices> [<devices>] [<devices>]

example

sudo zpool create zfs-nmve-z1 raidz1 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1

After that, run the below command to verify the drive was created.

zpool status

It should look like this

zpool status
  pool: zfs-nmve-z1
 state: ONLINE
config:

        NAME         STATE     READ WRITE CKSUM
        zfs-nmve-z1  ONLINE       0     0     0
          raidz1-0   ONLINE       0     0     0
            nvme0n1  ONLINE       0     0     0
            nvme1n1  ONLINE       0     0     0
            nvme2n1  ONLINE       0     0     0
            nvme3n1  ONLINE       0     0     0

errors: No known data errors

Openmedia Vault uses podman for certain apps, and you are going to run into two issues. Permissions and the OverlayFS.

Run the following two commands to fix the issue with permissions.

zfs set acltype=posixacl <poolname>

example

sudo zfs set acltype=posixacl zfs-nmve-z1

Installing OpenMediaVault

Next you need to add fuse-overlayfs

sudo apt install fuse-overlayfs

Then run

vi /etc/containers/storage.conf

or

nano /etc/containers/storage.conf

your choice.

The conf file should look like the following.

[storage]
driver = "overlay"
runroot = "/run/containers/storage"
graphroot = "/var/lib/containers/storage"

[storage.options]
pull_options = {enable_partial_images = "false", use_hard_links = "false", ostree_repos=""}
#mount_program = "/usr/local/bin/overlayzfsmount"
mount_program = "/usr/bin/fuse-overlayfs"

[storage.options.overlay]
mountopt = "nodev"

From this point,

Install OpenMediaVault from the website

https://docs.openmediavault.org/en/latest/installation/on_debian.html

if you used the nas user from the github page you'll be locked out. you need to run the following to add the ssh group to nas to login with it again. You will also need to disable permitrootlogin in the sshd_config again.

sudo usermod –a –G _ssh nas

Then run the omv-extras install

wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash

After that you should be all set.

In the WebGui

Run Updates

Go to System -> Update Management -> Updates

Hit the Magnifying Glass then do all updates.

Download Plugins

Go to System -> Plugins

Hit the Magnifying Glass

Then search for ZFS, install the plugin like normal. It should go through without any errors.

You should be all done now, Enjoy.


Credits

https://www.reddit.com/r/OpenMediaVault/comments/1dq4toy/omv7_cm3588_zfs_setup/

https://github.com/Vincent-Dalstra/CM3588?tab=readme-ov-file#changing-root-password

@Aseru6565
Copy link

Hi

Thanks for the guide
I got as far as "vi /etc/containers/storage.conf" and found there was no storage.conf does that mean I have to create it rather than it being there already?

Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment