Openmediavault 編譯與安裝過程 Openmediavault 編譯與安裝過程

Openmediavault 編譯與安裝過程

Openmediavault,簡稱OMV,是開源NAS解決方案的不二之選,更是黑羣暉之外的最佳選擇。基於Debian的靈活性,以及低資源佔用,使得它能夠在各種架構的操作系統上大放異彩,這其中也包括我的上古賽揚D(Celeron D)處理器。

然而,OMV固然好用,它的文檔卻是個巨坑:教程奇少無比,因爲官方都在推薦用他們做好的鏡像,對手動安裝的專業用戶非常不友好;而根據源碼編譯的教程更是空白,全靠用戶自己猜!

於是,在踩了N個坑,失敗N次之後,我決定,不要讓這空白再繼續坑害新入坑的OMV用戶了!這篇編譯和安裝二合一的教程,應運而生。

準備

  • 系統:Debian 10 Buster,不帶任何桌面環境的基礎版本
  • 處理器架構:OMV官方推薦的AMD64、ARM、ARM64,以及i386
    • 官方不提供i386架構的ISO鏡像,但我們仍可以在Debian x86的系統上手動安裝。
  • 磁盤空間:至少2GB(要安裝大量的依賴包)
  • 內存:至少512MB,推薦1GB及以上

提示:

  • 爲了便於操作,下文所有的命令都在root用戶下進行。

    • 本地用戶,請使用sudo -isudo su來切換到root用戶。
    • SSH登入遠程服務器,可直接以root身份登錄。
  • Debian的基礎版本鏡像可從我母校——華中科技大學的鏡像源下載:http://mirrors.hust.edu.cn/debian-cd/current/

OMV的本質是什麼?

OMV的本質,就是建構在Nginx、PHP、Python等底層系統應用上的大型Web服務程序,類似於高知名度的寶塔平臺。它本身不包含任何二進制文件和源碼,所有有效的程序代碼均爲解釋型語言,這使得它天生具有跨平臺性——理論上,只要目標架構支持Debian、Dpkg,以及OMV的依賴程序,OMV就能在任意架構上的操作系統運行。

OMV基於Debian而構建,它的源代碼編譯後生成的是跨平臺、無架構(noarch)的Deb程序包,整個編譯過程並不會調用編譯器生成平臺專用的二進制文件。因此,OMV能夠在任何一個Debian操作系統實例上安裝。

注:理論上Debian系、採用Dpkg的操作系統均可安裝,比如Ubuntu。但筆者未進行測試。

克隆源代碼

下載

OMV的源代碼發佈在GitHub上,可直接克隆下來。我們將源碼下載到omv目錄中。

# 安裝Git和pip
apt install git python3-pip
# 克隆源碼,放到omv目錄下
git clone https://github.com/openmediavault/openmediavault.git omv

進入源碼目錄

OMV的核心源碼放在deb子目錄中:

cd omv/deb

編譯過程

OMV的編譯流程是個巨坑,不僅缺乏文檔,更坑的是,它的Makefile寫法並不規範,若不仔細研讀,是很難找出真正的編譯目標的。好在,經過總結後,它的編譯過程相當簡單。

安裝編譯所需工具

make install

開始編譯

make binary

編譯完成後,omv/deb目錄下會生成若干個deb安裝包。一般如下所示。

$ ls *.deb
openmediavault-clamav_5.0-1_all.deb
openmediavault-diskstats_5.0-1_all.deb
openmediavault-forkeddaapd_5.0-1_all.deb
openmediavault-keyring_1.0_all.deb
openmediavault-ldap_4.0.6-1_all.deb
openmediavault-lvm2_5.0.1-1_all.deb
openmediavault-nut_5.0-1_all.deb
openmediavault-shairport_5.0-1_all.deb
openmediavault-snmp_5.0-1_all.deb
openmediavault-tftp_5.0-1_all.deb
openmediavault-usbbackup_5.0.1-1_all.deb
openmediavault_5.0.11_all.deb

坑:默認編譯目標的問題

OMV的默認編譯目標,也就是不帶參數運行make時進行的編譯過程,竟然不是編譯Deb包,而是對各個子目錄執行清理!這一點要格外小心,筆者已經無力吐槽了ε=(´ο`*)))。。。

安裝OMV

添加OMV官方源

OMV的少部分依賴,在Debian的官方源中是沒有的,因此必須添加OMV源。

首先,將以下代碼添加到/etc/apt/sources.list的末尾:

# Openmediavault official repository
deb http://packages.openmediavault.org/public usul main

接着,安裝OMV源密鑰環:

# 安裝我們自己編譯的版本
cd omv/deb
dpkg -i openmediavault-keyring_1.0_all.deb

# 當然,你也可以在線安裝
wget http://packages.openmediavault.org/public/pool/main/o/openmediavault-keyring/openmediavault-keyring_1.0_all.deb
dpkg -i openmediavault-keyring_1.0_all.deb

然後,更新軟件源:

apt update

安裝基礎依賴

# Debian 10 提供的軟件包
apt install php-fpm php-json php-cgi php-cli php-mbstring ethtool python3-dialog acl xfsprogs jfsutils ntfs-3g sdparm postfix bsd-mailx cpufrequtils smartmontools uuid nfs-kernel-server proftpd-basic sshpass samba samba-common-bin rsync avahi-daemon libnss-mdns beep php-bcmath gdisk rrdtool collectd anacron cron-apt quota php-xml quotatool lvm2 watchdog libjson-perl liblocale-po-perl proftpd-mod-vroot libjavascript-minifier-xs-perl xmlstarlet socat rrdcached nginx wpasupplicant btrfs-progs samba-vfs-modules python3-pyudev python3-natsort jq chrony python3-netifaces python3-lxml salt-minion php-yaml python-click python3-click

# Debian 10 不提供的軟件包,在OMV源中提供
apt install monit php-pam libjs-extjs6 wsdd

此時會發生依賴關係錯誤。接着運行:

apt --fix-broken install

再重複運行之前的那一長串apt install,即可正常安裝。

安裝OMV主程序包

爲了方便安裝,OMV的開發者將所有安裝過程都整合在了一個包中,不需要再零零散散安裝大量的包。

安裝官方版本

OMV可由官方源直接安裝:

apt install postfix openmediavault

期間會出現大量的日誌,耐心等待,直到成功完成。要注意,一旦出現任何一種錯誤,OMV都是沒法用的

安裝我們編譯的版本

# 重新進入到源碼目錄
cd omv/deb
# 然後開始安裝
dpkg -i openmediavault-keyring_1.0_all.deb     # 源密鑰環
dpkg -i openmediavault_5.0.11_all.deb          # 主安裝包

填坑:解決Unit file is masked問題

在某些機器(如VPS)上手動安裝OMV時,常常會出現Unit file is masked的問題。該問題非常致命,會中斷OMV後續的安裝進程。

Failed to preset unit: Unit file /etc/systemd/system/openmediavault-cleanup-php.service is masked.
/usr/bin/deb-systemd-helper: error: systemctl preset failed on openmediavault-cleanup-php.service: No such file or directory
dpkg: error processing package openmediavault (--configure):
 installed openmediavault package post-installation script subprocess returned error exit status 1 
Errors were encountered while processing:
 openmediavault
E: Sub-process /usr/bin/dpkg returned an error code (1)

實際上,瞭解systemd對服務的管理機制,就不難得知,這裏的“mask”是系統服務的一個狀態,相當於被“屏蔽”。據此,解決辦法很簡單,但凡有一個服務提示被masked,就運行下面的命令來unmask,然後重新安裝,直到安裝過程能夠順利繼續

# systemctl unmask <被報錯的服務名>,例如:
systemctl unmask openmediavault-cleanup-php.service

啓動OMV

運行以下命令即可啓動。事實上,新版本OMV直接配置成了系統服務,可以自動啓動:

omv-run

在瀏覽器中輸入主機的IP地址,即可打開OMV的登錄頁面。默認的憑據如下:

憑據
默認用戶名 admin
默認密碼 openmediavault

添加OMVExtras插件庫

OMVExtras插件庫是官方所提供的插件源,建議添加,這樣我們就能夠用上更多強悍的插件。

開發者提供了一鍵安裝方法:

wget -O - http://omv-extras.org/install | bash

要是不能下載腳本,則把下面該腳本的內容保存爲install.shchmod 755後運行:

#!/bin/bash

declare -i version

url="https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/"

version=$(dpkg -l openmediavault | awk '$2 == "openmediavault" { print substr($3,1,1) }')

echo ${version}

if [ ${version} -eq 5 ]; then
  echo "Downloading omv-extras.org plugin for openmediavault 5.x ..."
  file="openmediavault-omvextrasorg_latest_all5.deb"
elif [ ${version} -eq 4 ]; then
  echo "Downloading omv-extras.org plugin for openmediavault 4.x ..."
  file="openmediavault-omvextrasorg_latest_all4.deb"
elif [ ${version} -eq 3 ]; then
  echo "Downloading omv-extras.org plugin for openmediavault 3.x ..."
  file="openmediavault-omvextrasorg_latest_all3.deb"
elif [ ${version} -eq 2 ]; then
  echo "Downloading omv-extras.org plugin for openmediavault 2.x ..."
  file="openmediavault-omvextrasorg_latest_all.deb"
else
  echo "Unsupported version of openmediavault"
  exit 0
fi

if [ -f "${file}" ]; then
  rm ${file}
fi
wget --no-check-certificate ${url}/${file}
if [ -f "${file}" ]; then
  dpkg -i ${file}

  if [ $? -gt 0 ]; then
    echo "Installing other dependencies ..."
    apt-get -f install
  fi

  echo "Updating repos ..."
  apt-get update
else
  echo "There was a problem downloading the package."
fi

exit 0

安裝完成後,刷新瀏覽器,即可看到OMV的左欄中多出了一個“OMV-Extras”入口

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章