[DIY NAS] OpenMediaVault 5 on Proxmox LXC

基於 Debian 10 開發的 OMV5  beta 已經出來啦,更新速度真的很快,這邊記錄一下跟以往安裝過程不同的流程,OMV5 全部採用 Saltstack 的架構了,以前修改的部分需要做一些修正囉!

安裝 OpenMediaVault 5

初始化 LXC

先創一台 Debian 10 的 LXC,規格隨意,創好 LXC 後,請勿開機,不然後續會有問題喔!

創好後修改 LXC 的設定檔,我這台的 ID 是 106,在 /etc/pve/lxc/<strong>LXCID</strong>.conf 加入下列內容:

 

開機後先修改 /etc/apt/sources.list 的內容,指向國網中心,在台灣連線速度最快:

 

更新 LXC 並且重新啟動 LXC: apt update && apt dist-upgrade -y && reboot<br /> (如果有出現 Perl: warning: Setting locale failed. 可以參考這篇文章

 

新增OMV套件來源

# echo "deb https://packages.openmediavault.org/public usul main" >> /etc/apt/sources.list.d/omv.list

 

更新套件庫

# apt update
# apt install gnupg wget -y
# export DEBIAN_FRONTEND=noninteractive
# export APT_LISTCHANGES_FRONTEND=none
# wget -O "/etc/apt/trusted.gpg.d/openmediavault-archive-keyring.asc" https://packages.openmediavault.org/public/archive.key
# apt-key add "/etc/apt/trusted.gpg.d/openmediavault-archive-keyring.asc"
# apt update

 

安裝 OpenMediaVault 5

# apt-get --yes --auto-remove --show-upgraded \
	--allow-downgrades --allow-change-held-packages \
	--no-install-recommends \
	--option Dpkg::Options::="--force-confdef" \
	--option DPkg::Options::="--force-confold" \
	install openmediavault-keyring openmediavault

# omv-confdbadm populate

 

這樣子就裝好啦!XD完全不用像以前那樣 chroot 啦!

 

安裝 OpenMediaVault 5 外掛來源

進入 LXC,安裝插件來源:

# wget http://omv-extras.org/openmediavault-omvextrasorg_latest_all5.deb
# apt install -f ./openmediavault-omvextrasorg_latest_all5.deb
# apt update

 

可以看到套件列表了(容許我抓舊圖來用):

 

新增 Zvol — 利用 ZFS 模擬實體硬碟

在 ZPOOL 建立一個 1GB 大小的 zvol:

# zfs create -V 1GB data/omv-disk

 

查詢 Zvol 的實際位置

透過 ls -al發現是一個 link位置後發現是一個 link,再用 ls -al查尋他的真實位置

# ls -al /dev/zvol/data/omv-disk
lrwxrwxrwx 1 root root 11 Mar 26 23:48 /dev/zvol/data/omv-disk -> ../../zd224
# root@x79:~# ls -al /dev/zd224
brw-rw---- 1 root disk 230, 224 Mar 26 23:48 /dev/zd224

 

建立 Zvol 分割區

透過 fdisk/dev/zd224 切一個分割區出來,因為 OMV 初始化硬碟會幫你切分割區,在這裡先切好把可能會出現的錯誤給避免掉:

 

Passthrough Zvol 到 LXC

# ls -al /dev/zd224*
brw-rw---- 1 root disk 230, 224 Mar 26 23:53 /dev/zd224
brw-rw---- 1 root disk 230, 225 Mar 26 23:53 /dev/zd224p1

 

LXC 關機後,編輯 LXC 設定檔,加入下面內容:

lxc.cgroup.devices.allow: b 230:224 rwm
lxc.cgroup.devices.allow: b 230:225 rwm
lxc.autodev: 1
lxc.hook.autodev: /var/lib/lxc/LXCID/mount-hook.sh

 

新增 Hook Script ,LXC 開機自動掛載 Zvol

使用編輯器建立 /var/lib/lxc/<strong>LXCID</strong>/mount-hook.sh ,內容如下:

#!/bin/sh
mknod -m 777 ${LXC_ROOTFS_MOUNT}/dev/sda b 230 224
mknod -m 777 ${LXC_ROOTFS_MOUNT}/dev/sda1 b 230 225

 

存檔後給予執行權限

chmod +x /var/lib/lxc/LXCID/mount-hook.sh

 

執行 LXC

可以把 LXC 開機囉!

 

建立檔案系統

登入 OpenMediaVault 後,將掛載的 Zvol 格式化,步驟如圖:

 

記得掛載檔案系統

啟動家目錄

照著圖設定,記得「套用變更」

 

啟動 Samba

 

整合 NextCloud

格式化完 Zvol 後,檔案不會存在 OMV 那個小小的 1GB 空間之中,只是用來欺騙 OMV 系統,真正的檔案是存在 PVE Host 的 ZFS Dataset 內,需要寫 Script 來掛載 PVE Host 的 ZFS Dataset。

新增 Dataset Mount Point

  1. 先關閉 OMV LXC、NextCloud LXC

  2. 在 PVE Host 建立一個 Dataset 讓 OMV、NextCloud可以共用資料

    # zfs create data/nas # Zpool 為 data、目的地資料集為 home

  3. 編輯 OMV、NextCloud 兩個 LXC 的設定檔:/etc/pve/lxc/<strong>LXCID</strong>.conf

  4. 分別加入這行以自動掛載 Dataset 到兩個 LXC 的 /home 之中:

    lxc.mount.entry: /data/nas home none bind,create=dir,optional 0 0

  5. OMV LXCID.conf:

NextCloud LXCID.conf

<p id="MjwovnL">
  <img loading="lazy" width="723" height="221" class="alignnone size-full wp-image-3321 " src="https://becoder.org/wp-content/uploads/2019/03/img_5c9b0740e0cf7.png" alt="" srcset="https://becoder.org/wp-content/uploads/2019/03/img_5c9b0740e0cf7.png 723w, https://becoder.org/wp-content/uploads/2019/03/img_5c9b0740e0cf7-300x92.png 300w" sizes="(max-width: 723px) 100vw, 723px" />
</p>
  1. 存檔後把兩個 LXC 都開機,可以看到已經順利掛載了

 

修改 NextCloud 儲存位置

進入 NextCloud,修改 conf/config.php,將:

'datadirectory' => '/var/www/html/data',

 

改為:

'datadirectory' => '/home',

 

再執行下面指令把原本的資料移動到新的位置:

# mv /var/www/html/data/* /home/
# mv /var/www/html/data/.htaccess /home/
# mv /var/www/html/data/.ocdata /home/
# chown -R www-data:www-data /home/
# chmod -R 775 /home/

 

新增群組修正 NextCloud 讀取權限

這個項目是為了 OMV 而作的,NextCloud 讀取 /home 時,必須讓 www-data 為檔案擁有者,為了讓 OMV 的一般使用者可以對 /home 讀寫,所以創一個群組 nasuser,將 www-data 加入 nasuser,並新增 Crontab 定時修正來權限,讓 NextCloud 可以順利讀寫來自 OMV 使用者的檔案,完成整合,這個部份到時候整合 OpenLDAP 後會更方便。

新增群組 nasuser_(註1)_ 並加入 www-data 使用者:(註1)

# addgroup nasuser 
# adduser www-data nasuser

 

撰寫 Shell Script 定時修正權限:

# touch /root/script/repair-permission.sh
# chmod +x /root/script/repair-permission.sh
# vim /root/script/repair-permission.sh

內容如下:

執行 crontab -e 寫入 crontab:

* * * * * /root/script/repair-permission.sh

 

後來發現這樣子做會瘋狂的讀寫硬碟,檔案太多實在是很吃資源,第一圈還沒繞完就又跑第二圈了,現在直接修改 NextCloud 的 apache 執行時的 group 以及 umask,在檔案透過 NextCloud 上傳的時候就會有正確的權限:

修改 NextCloud LXC 的 /etc/apache2/envvars :

export APACHE_RUN_GROUP=www-data

改為

export APACHE_RUN_GROUP=nasuser

如此一來 Apache 都會用這個群組來讀寫資料。

 

再來是權限的部份,一樣在 /etc/apache2/envvars ,於最下方新增一行:

umask 002

 

umask 相關資料可以參考這篇文章:umask 指令

最後重啟 Apache 即可:

systemctl restart apache2

 

如果想修正原先的權限,可以參考我的另外一個小站的筆記:快速修正檔案權限、資料夾權限

 

修改 OpenMediaVault 5 Samba 設定

重頭戲來囉!這是在改版成 saltstack 後,和之前 omv4 時修改的部份都不一樣了,找了很久才找到這些設定的位置..QQ

修改 homes.j2

編輯 /srv/salt/omv/deploy/samba/files/homes.j2

第 3 行(OMV_SAMBA_HOMES_CREATEMASK)、
第 4 行(OMV_SAMBA_HOMES_FORCECREATEMODE)、
第 5 行(OMV_SAMBA_HOMES_DIRECTORYMASK)、
第 6 行(OMV_SAMBA_HOMES_FORCEDIRECTORYMODE

把數值 0600 改為 0775

在第 13 行 comment = {{ comment }}

下面新增:

path = /home/%S/files

成果如下:

 

修改 shares.j2

再編輯 /srv/salt/omv/deploy/samba/files/shares.j2

修改:

第 17 行  OMV_SAMBA_SHARE_FORCECREATEMODE
第 18 行 OMV_SAMBA_SHARE_DIRECTORYMASK

的 0664 改成 0775:

 

存檔後,執行這個指令,把設定檔部署到 SAMBA 中:

omv-salt deploy run samba

 

測試整合成果

先進入 OpenMediaVault,把群組 nasuser_(註1)_ 創好:

# addgroup nasuser -gid 1000

 

先在 NextCloud 、OMV 建立使用者,使用同一組使用者帳號密碼:

 

 

 

先登入 NextCloud,讓 NextCloud 產生使用者資料夾:

 

再登入 SAMBA:

 

可以看到一樣的內容:

 

測試上傳 ISO 檔案:

 

NextCloud 上面也可以看到這個檔案了:

 

註1:

nasuser 這個群組到時候整合 OpenLDAP 時就不需要建立了,直接把 www-data 加入 LDAP 中的群組(adduser www-data $gidNumber),將所有的 nasuser 取代為 LDAP 中的 $gidNumber  即可。


See also

comments powered by Disqus