viploser 发表于 2021-1-1 05:26:17

基于树莓派3b+和OpenMedaiVault的网络存储系统搭建

本帖最后由 viploser 于 2021-1-1 05:40 编辑

手里有个树莓派3b+,在我手里很久了,刚出品的时候买的(话说现在都出到4b了是吧),一直没怎么用起来,很心疼,我一直都主张善待设备的。

然后想起了我一直以来的独立网盘梦,我之前用这个树莓派搭建过给予owncloud的网盘,但是因为技术有限吧,每次硬件重启之后需要ssh进去手动重新搭建(严格说只是再执行一次搭建代码,文件检测之后就启动服务了、并不是真的彻底重新搭建),自动重启服务的方法尝试多次都失败了,这个owncloud并没有没有真正用起来,我也就没发帖。这个owncloud服务搭建起来的并不是NAS,而是类似网盘那种东西,借助网页上传下载(还没有割韭菜时代的百度网盘大家知道吧,就是那种东西),并没有ftp和smb。

这次我准备搭建一个支持ftp和smb的网盘。我一直用网盘这个词,帖子标题也说的是网络存储系统,而不是NAS,因为我搭建的东西并不是NAS,无论是空间、速度、稳定性、RAID系统内数据自我热备份,哪个角度来说,我这套东西都不是NAS。只是一个配置了ftp+smb的私人网盘而已,一个可以用Finder.app(访达)或者Explorer.exe(资源管理器)做客户端做磁盘映射的网络存储。对我个人来说,我不需要共享、不需要协作、不需要版本管理、不需要hTB级的存储空间、不需要冗余备份、不需要流媒体解码、不需要macOS Time Machine接口,只需要服务器和文件完全在我自己手里。仅此而已。

OpenMedaiVault平台我之前就听说过,我第一次着手看文档的时候恰逢官方下架了所有针对树莓派的img包,取消了img刷机的安装方法,新的安装方法又没有正式发布。我就一直在观望,半个月前,我又找到了官方手册,用了5个小时搭建成功,这十几天来一直稳定运行。今天恰逢新年,图个新气象,就写了这个东西。

硬件上:我用的是树莓派3b+,一张128GB闪迪U1C10的TF卡,电源用的是5V3A的官方电源。我是有外界屏幕和外接键鼠的。


下面开搞。

01.在树莓派官网下载Respberry Pi OS,地址https://www.raspberrypi.org/software/operating-systems/,这个系统分三个版本:如果派不仅仅用来做OpenMedaiVault还偶尔当个arm的linux电脑用一用建议下载Raspberry Pi OS with desktop and recommended software,这里面有全套办公软件还有各种IDE;如果只是当作OpenMedaiVault而且有外接的显示屏和键鼠建议下载Raspberry Pi OS with desktop,有图形界面在树莓派初始设置会简单很多;如果只是当作OpenMedaiVault而且没有外接屏幕建议下载Raspberry Pi OS Lite,当然就需要有一些ssh技能并且熟悉Debian了。浏览器下载系统镜像速度会很慢,这个是可以用torrent或者迅雷的,而且速度还不错。下载后记得用Hash校验一下。
02.下载写卡工具BalenaEtcher,地址https://www.balena.io/etcher/。Windows和macOS都有对应版本。不需要担心macOS下搞Linux会不会出问题,放心,我全程macOS下操作没有出问题。
03.写卡,BalenaEtcher就三个按钮,选择镜像,选择目标硬件,烧写。下载的Respberry Pi OS是有可能是tz文件的,并不需要手动做两次解压,BalenaEtcher已经很智能了。
04.写卡之后macOS下会识别一个boot磁盘,弹出即可;Windows下会提示磁盘需要格式化,不要格式化;然后把卡拿下来。
下面的操作我先按照有显示屏的来写,后面我会补充没有显示屏的操作。
05.把TF卡插在树莓派里,树莓派连好HDMI显示屏,连好键盘鼠标,最后插电。
06.开机选择地区(China)、语言(Chinese Simplified)、时区(Shanghai GMT+8.00)、键盘布局(US Keyboard),连接Wi-Fi或者LAN(注意连接网络的时候跳过系统更新),重设密码,分辨率(图像外是否有黑框);然后重启。
07.重启进入桌面后左上角树莓logo——Preference——Raspberry Pi Configuration,进入树莓派高级设置,在Interfaces将SSH设置为Enable(就是打开SSH)。
08.菜单栏点击Terminal,输入sudo -i,切换到root账户。输入apt-get update,拉取更新列表。输入apt-get upgrade更新当前软件。
09.根据更新情况,必要时重启树莓派。
10.在Terminal输入sudo -i,切换到root账户。输入wget -O - https://github.com/OpenMediaVaul ... /raw/master/install | sudo bash。
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash11.跑脚本的过程异常漫长,期间不要关闭Terminal,不要打开新的Terminal窗口,不要断电。坐和放宽。
12.跑完脚本会有一个DONE,然后出新可以输入命令的行。这时候脚本的输出会建议重启树莓派,不要重启!
13.从路由器拉取当前树莓派的IP地址,并将MAC和IP实现DHCP内的绑定。
14.从和树莓派同局域网段的电脑访问树莓派IP地址,弹出OpenMedaiVault管理界面,语言下拉菜单选择简体中文,登陆用户名admin,密码openmedaivault,登陆后进入左侧“访问权限管理——用户”选项卡,在右侧详情中新建用户。在“常规”面板名称不能是pi、不能是admin、必须为英文,设置并确认密码,Shell选择/bin/bash,取消勾选“不允许用户修其他账户”;在“用户组”中全选所有的系统账户,不勾选用户账户pi;在“公钥”面板不做处理;新建账户。在上方拉出的“配置已经改变,你必须应用才能使他们生效。”条中选择“应用”建立新账户。
/*我看到过两条视频都说此处要删除原有的“pi”用户,但是删除pi之后会导致树莓派重启后无法登陆SSH、omv也无法加载或维护,树莓派无法进行任何后期维护。所以,pi账户一定要保留。*/
15.在树莓派里按脚本提示重启树莓派,可能需要输入yes,可能需要输入reboot手动重启(脚本也在更新)。
16.从和树莓派同局域网段的电脑访问树莓派IP地址,用第14步新建的用户名登陆。(登陆后应该是和admin一样的管理页面,如果不是,则是“不允许用户修其他账户”没有勾选。)登陆后进入左侧“系统——插件”选项卡安装“openmediavault-sharerootfs”插件。这个插件可以在树莓派系统所在的TF卡里建立共享文件夹,而不是仅能在外接磁盘建立共享文件夹。
17.进入左侧“访问权限管理——共享文件夹”选项卡,右侧点击“添加”,“名称”建议设置为英文,“设备”选择rootfs,“路径”保持不动(默认为系统TF卡非引导分区根目录),“权限”设为根据需要来设置,“其他”代表不登陆时文件的读写权限。添加共享文件夹后选中,在“特权”菜单中勾选第14步所建用户的读写权限。(如果着套东西只是一人用的话,“权限”建议设为“管理员:读/写,用户:无权限,其它:无权限”更为安全)(如果添加共享文件夹时权限设置不满意,修改在“ACL”按钮下)
18.进入左侧“服务——FTP”选项卡,右侧“设置”下点击“启用”,“共享”下添加第17步建立的共享文件夹。
19.进入左侧“服务——SMB/CIFS”选项卡,右侧“设置”下点击“启用”,“共享”下添加第17步建立的共享文件夹。
20.在上方拉出的“配置已经改变,你必须应用才能使他们生效。”条中选择“应用”建立新账户。之后退出当前账户,进入admin账户,修改密码。
21.在浏览器中输入ftp://树莓派IP,查看是否可以访问。
22.Windows系统下进入“网络”或者“网上邻居”可以查看到RESPBERRYPI设备,在“这台电脑”、“计算机”或者“我的电脑”右键调出映射网络驱动器选项,地址为ftp://树莓派IP/第17步建立的共享文件夹名称。之后输入第14步的用户名和密码登录。
23.macOS系统下用Safari浏览器访问ftp://树莓派IP/,会提示在Finder访达中打开,输入第14步的用户名和密码登录。特别注意,macOS内Finder对ftp是只读的,是macOS的权限问题,不是omv的问题。


对于没有外接屏幕和键鼠的用户,只是需要通过SSH访问并操作树莓派。
a.下载系统和写卡操作不变。写卡后在TF卡的boot分区新建一个ssh文件(一个没有内容没有扩展名的的ssh文件),Windows下可以用新建文本文档改成ssh,macOS下可以用文本编辑器新建一个空文档。
b.从macOS连接到树莓派不需要其他软件,macOS自带的Terminal支持SSH;从Windows连接到树莓派建议用PuTTY或者XShell(我自己的Surface Go+Win10_20H2里cmd支持SSH,但我部署过Git所以我不确定是否是系统支持)。
c.SSH连接到树莓派需要先从路由器拉取树莓派的IP地址,之后在Terminal或者PuTTY输入ssh pi@树莓派IP,提示当前密钥,输入yes(完整的yes而不是y)接入,登陆初始密码是respberry。
d.因为没有图形界面进行树莓派初始设置。需要在SSH内完成。登陆进树莓派后输入sudo -i切换为root用户。输入raspi-config进入高级设置。这个界面类似早期没有图形化操作的BIOS,全键盘操作。需要完成地区、时区、网络接入方式的设置。pi用户的密码也在raspi-config中修改。
e.OpenMedaiVault安装脚本的命令也是需要在SSH输入的。
不要把SSH想的很复杂,你就把电脑上的SSH界面理解成树莓派接入显示器键盘鼠标后的Terminal界面就可以了。唯一的不同就是需要用“ssh pi@树莓派IP”的命令建立连接,仅此而已。


关于公网访问的问题。不要在树莓派里设置ddns!正确做法是在路由器设置ddns和端口转发。然后公网访问的地址就是指定端口号的ftp了。
这个应该不需要解释了吧。路由器里的ddns是哪家的就去看哪家的官网;自己挑一个顺眼的小众端口转发到树莓派内网IP的21端口即可。


多唠叨两句。apt-get update和apt-get upgrade更新速度非常慢,但是我不建议换软件源,换源后update和upgrade确实快了,但是OpenMedaiVault依赖的东西不一定源里都有。树莓派的Raspberry Pi OS是基于Debian的,哪怕是全图形界面也是需要一定的Linux基础的,全小白很难上手,或者说是学习曲线很陡。我自己虽然把Ubuntu当作主力系统用过半年多,也是很依赖图形界面的,并没有太高的代码水平,我主业工作也不是程序员或者网络工程,所以我自己也不是Linux水平多高的人。这个东西是我自己的一个分享,也是摸着石头过河,我过来了,便写下来了。太高深的我也不懂、太刁钻的我也回答不上来。大家共同进步。


今天是2021年第一天。愿诸事顺利,诸神护佑。



viploser
https://arcice.org
UTC+8.00 2021-01-01 05:40

viploser 发表于 2021-1-1 05:29:15


脚本我贴在这 大家一起学习


#!/bin/bash
#
# shellcheck disable=SC1090,SC1091,SC1117,SC2016,SC2046,SC2086,SC2174
#
# Copyright (c) 2015-2020 OpenMediaVault Plugin Developers
# Copyright (c) 2017-2020 Armbian Developers
#
# This file is licensed under the terms of the GNU General Public
# License version 2. This program is licensed "as is" without any
# warranty of any kind, whether express or implied.
#
# Ideas/code used from:
# https://github.com/armbian/config/blob/master/debian-software
# https://forum.openmediavault.org/index.php/Thread/25062-Install-OMV5-on-Debian-10-Buster/
#
# version: 1.2.11
#

if [[ $(id -u) -ne 0 ]]; then
echo "This script must be executed as root or using sudo."
exit 99
fi

systemd="$(ps --no-headers -o comm 1)"
if [ ! "${systemd}" = "systemd" ]; then
echo "This system is not running systemd.Exiting..."
exit 100
fi

declare -i cfg=0
declare -i ipv6=0
declare -i skipFlash=0
declare -i skipNet=0
declare -i version

declare -l codename
declare -l omvCodename
declare -l omvInstall=""
declare -l omvextrasInstall=""

cpuFreqDef="/etc/default/cpufrequtils"
crda="/etc/default/crda"
defaultGovSearch="^CONFIG_CPU_FREQ_DEFAULT_GOV_"
forceIpv4="/etc/apt/apt.conf.d/99force-ipv4"
ioniceCron="/etc/cron.d/make_nas_processes_faster"
ioniceScript="/usr/sbin/omv-ionice"
keyserver="hkp://keyserver.ubuntu.com:80"
omvKey="/etc/apt/trusted.gpg.d/openmediavault-archive-keyring.asc"
omvRepo="http://packages.openmediavault.org/public"
omvSources="/etc/apt/sources.list.d/openmediavault.list"
rfkill="/usr/sbin/rfkill"
smbOptions="min receivefile size = 16384\nwrite cache size = 524288\ngetwd cache = yes\nsocket options = TCP_NODELAY IPTOS_LOWDELAY"
url="https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/"
wpaConf="/etc/wpa_supplicant/wpa_supplicant.conf"

export DEBIAN_FRONTEND=noninteractive
export APT_LISTCHANGES_FRONTEND=none
export LANG=C.UTF-8

if [ -f /etc/armbian-release ]; then
. /etc/armbian-release
fi

while getopts "fhin" opt; do
echo "option ${opt}"
case "${opt}" in
    f)
      skipFlash=1
      ;;
    h)
      echo "Use the following flags:"
      echo "-f"
      echo "    to skip the installation of the flashmemory plugin"
      echo "-i"
      echo "    enable using IPv6 for apt"
      echo "-n"
      echo "    to skip the network setup"
      echo ""
      echo "Examples:"
      echo "install"
      echo "install -f"
      echo "install -n"
      exit 100
      ;;
    i)
      ipv6=1
      ;;
    n)
      skipNet=1
      ;;
    \?)
      echo "Invalid option: -${OPTARG}"
      ;;
esac
done

# Fix permissions on / if wrong
echo "Current / permissions = $(stat -c %a /)"
chmod g-w,o-w /
echo "New / permissions = $(stat -c %a /)"

# if ipv6 is not enabled, create apt config file to force ipv4
if [ ${ipv6} -ne 1 ]; then
echo "Forcing IPv4 only for apt..."
echo 'Acquire::ForceIPv4 "true";' > ${forceIpv4}
fi

echo "Updating repos before installing..."
apt-get update

echo "Installing lsb_release..."
apt-get --yes --no-install-recommends --reinstall install lsb-release

arch="$(dpkg --print-architecture)"
codename="$(lsb_release --codename --short)"

case ${codename} in
stretch)
    confCmd="omv-mkconf"
    network="interfaces"
    ntp="ntp"
    omvCodename="arrakis"
    phpfpm="php-fpm"
    version=4
    ;;
buster)
    confCmd="omv-salt deploy run"
    network="systemd-networkd"
    ntp="chrony"
    omvCodename="usul"
    phpfpm="phpfpm"
    version=5
    ;;
*)
    echo "Unsupported version.Exiting..."
    exit 1
;;
esac
echo "${omvCodename} :: ${version}"

hostname=$(</etc/hostname)
tz=$(</etc/timezone)

# Add Debian signing keys to raspbian to prevent apt-get update failures
# when OMV adds security and/or backports repos
if grep -q raspberrypi.org /etc/apt/sources.list.d/*; then
echo "Adding Debian signing keys..."
for key in AA8E81B4331F7F50 112695A0E562B32A 04EE7237B7D453EC 648ACFD622F3D138; do
    apt-key adv --no-tty --keyserver ${keyserver} --recv-keys "${key}"
done
echo "Installing monit from raspberrypi repo..."
apt-get --yes --no-install-recommends install -t ${codename} monit
fi

echo "Install prerequisites..."
apt-get --yes --no-install-recommends install dirmngr gnupg

# install openmediavault if not installed already
omvInstall=$(dpkg -l | awk '$2 == "openmediavault" { print $1 }')
if [[ ! "${omvInstall}" == "ii" ]]; then
echo "Installing openmediavault required packages..."
if ! apt-get --yes --no-install-recommends install postfix; then
    echo "failed installing postfix"
    exit 2
fi

echo "Adding openmediavault repo and key..."
echo "deb ${omvRepo} ${omvCodename} main" > ${omvSources}
wget -O "${omvKey}" ${omvRepo}/archive.key
apt-key add "${omvKey}"

echo "Updating repos..."
if ! apt-get update; then
    echo "failed to update apt repos."
    exit 2
fi

echo "Install openmediavault-keyring..."
if ! apt-get --yes install openmediavault-keyring; then
    echo "failed to install openmediavault-keyring package."
    exit 2
fi

monitInstall=$(dpkg -l | awk '$2 == "monit" { print $1 }')
if [[ ! "${monitInstall}" == "ii" ]]; then
    if ! apt-get --yes --no-install-recommends install monit; then
      echo "failed installing monit"
      exit 2
    fi
fi

echo "Installing openmediavault..."
aptFlags="--yes --auto-remove --show-upgraded --allow-downgrades --allow-change-held-packages --no-install-recommends"
cmd="apt-get ${aptFlags} install openmediavault"
if ! ${cmd}; then
    echo "failed to install openmediavault package."
    exit 2
fi

if [ ${version} -gt 4 ]; then
    omv-confdbadm populate
else
    omv-initsystem
    omv-mkconf interfaces
    omv-mkconf issue
fi
fi

# check if openmediavault is install properly
omvInstall=$(dpkg -l | awk '$2 == "openmediavault" { print $1 }')
if [[ ! "${omvInstall}" == "ii" ]]; then
echo "openmediavault package failed to install or is in a bad state."
exit 3
fi

. /etc/default/openmediavault
. /usr/share/openmediavault/scripts/helper-functions

# remove backports from sources.list to avoid duplicate sources warning
sed -i "/\(stretch\|buster\)-backports/d" /etc/apt/sources.list

if [ "${codename}" = "eoan" ]; then
omv_set_default "OMV_APT_USE_KERNEL_BACKPORTS" false true
fi

# install omv-extras
echo "Downloading omv-extras.org plugin for openmediavault ${version}.x ..."
file="openmediavault-omvextrasorg_latest_all${version}.deb"

if [ -f "${file}" ]; then
rm ${file}
fi
wget ${url}/${file}
if [ -f "${file}" ]; then
if ! dpkg --install ${file}; then
    echo "Installing other dependencies ..."
    apt-get --yes --fix-broken install
    omvextrasInstall=$(dpkg -l | awk '$2 == "openmediavault-omvextrasorg" { print $1 }')
    if [[ ! "${omvextrasInstall}" == "ii" ]]; then
      echo "omv-extras failed to install correctly.Trying to fix with ${confCmd} ..."
      if ${confCmd} omvextras; then
      echo "Trying to fix apt ..."
      apt-get --yes --fix-broken install
      else
      echo "${confCmd} failed and openmediavault-omvextrasorg is in a bad state."
      exit 3
      fi
    fi
    omvextrasInstall=$(dpkg -l | awk '$2 == "openmediavault-omvextrasorg" { print $1 }')
    if [[ ! "${omvextrasInstall}" == "ii" ]]; then
      echo "openmediavault-omvextrasorg package failed to install or is in a bad state."
      exit 3
    fi
fi

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

# disable armbian log services if found
for service in log2ram armbian-ramlog armbian-zram-config; do
if systemctl list-units --full -all | grep ${service}; then
    systemctl stop ${service}
    systemctl disable ${service}
fi
done
rm -f /etc/cron.daily/armbian-ram-logging
if [ -f "/etc/default/armbian-ramlog" ]; then
sed -i "s/ENABLED=.*/ENABLED=false/g" /etc/default/armbian-ramlog
fi
if [ -f "/etc/default/armbian-zram-config" ]; then
sed -i "s/ENABLED=.*/ENABLED=false/g" /etc/default/armbian-zram-config
fi
if [ -f "/etc/systemd/system/logrotate.service" ]; then
rm -f /etc/systemd/system/logrotate.service
systemctl daemon-reload
fi

# install flashmemory plugin unless disabled
if [ ${skipFlash} -eq 1 ]; then
echo "Skipping installation of the flashmemory plugin."
else
echo "Install folder2ram..."
if apt-get --yes --fix-missing --no-install-recommends install folder2ram; then
    echo "Installed folder2ram."
else
    echo "Failed to install folder2ram."
fi
echo "Install flashmemory plugin..."
if apt-get --yes install openmediavault-flashmemory; then
    echo "Installed flashmemory plugin."
else
    echo "Failed to install flashmemory plugin."
    ${confCmd} flashmemory
    apt-get --yes --fix-broken install
fi
fi

# change default OMV settings
omv_config_update "/config/services/smb/extraoptions" "$(echo -e "${smbOptions}")"
omv_config_update "/config/services/ssh/enable" "1"
omv_config_update "/config/services/ssh/permitrootlogin" "1"
omv_config_update "/config/system/time/ntp/enable" "1"
omv_config_update "/config/system/time/timezone" "${tz}"
omv_config_update "/config/system/network/dns/hostname" "${hostname}"

# disable monitoring and apply changes
echo "Disabling data collection ..."
/usr/sbin/omv-rpc -u admin "perfstats" "set" '{"enable":false}'
/usr/sbin/omv-rpc -u admin "config" "applyChanges" '{ "modules": ["monit","rrdcached","collectd"],"force": true }'

# set min/max frequency and watchdog for RPi boards
if [[ $(awk '$1 == "Model" { print $3 }' /proc/cpuinfo) = "Raspberry" ]]; then
omv_set_default "OMV_WATCHDOG_DEFAULT_MODULE" "bcm2835_wdt"
omv_set_default "OMV_WATCHDOG_CONF_WATCHDOG_TIMEOUT" "14"

MIN_SPEED="$(</sys/devices/system/cpu/cpufreq/policy0/cpuinfo_min_freq)"
MAX_SPEED="$(</sys/devices/system/cpu/cpufreq/policy0/cpuinfo_max_freq)"
# Determine if RPi4 (for future use)
if [[ $(awk '$1 == "Revision" { print $3 }' /proc/cpuinfo) =~ 03111 ]]; then
    BOARD="rpi4"
fi
cat << EOF > ${cpuFreqDef}
GOVERNOR="ondemand"
MIN_SPEED="${MIN_SPEED}"
MAX_SPEED="${MAX_SPEED}"
EOF
fi

if [ -f "${cpuFreqDef}" ]; then
. ${cpuFreqDef}
else
# set cpufreq settings if no defaults
if [ -f "/proc/config.gz" ]; then
    defaultGov="$(zgrep "${defaultGovSearch}" /proc/config.gz | sed -e "s/${defaultGovSearch}\(.*\)=y/\1/")"
elif [ -f "/boot/config-$(uname -r)" ]; then
    defaultGov="$(grep "${defaultGovSearch}" /boot/config-$(uname -r) | sed -e "s/${defaultGovSearch}\(.*\)=y/\1/")"
fi
if [ -z "${DEFAULT_GOV}" ]; then
    defaultGov="ondemand"
fi
GOVERNOR=${defaultGov,,}
MIN_SPEED="0"
MAX_SPEED="0"
fi

# set defaults in /etc/default/openmediavault
omv_set_default "OMV_CPUFREQUTILS_GOVERNOR" "${GOVERNOR}"
omv_set_default "OMV_CPUFREQUTILS_MINSPEED" "${MIN_SPEED}"
omv_set_default "OMV_CPUFREQUTILS_MAXSPEED" "${MAX_SPEED}"

if [ ${version} -gt 4 ]; then
# update pillar default list - /srv/pillar/omv/default.sls
omv-salt stage run prepare
fi

# update config files
for service in nginx ${phpfpm} samba flashmemory ssh ${ntp} timezone monit rrdcached collectd cpufrequtils apt watchdog; do
${confCmd} ${service}
done

# create php directories if they don't exist
modDir="/var/lib/php/modules"
if [ ! -d "${modDir}" ]; then
mkdir --parents --mode=0755 ${modDir}
fi
sessDir="/var/lib/php/sessions"
if [ ! -d "${sessDir}" ]; then
mkdir --parents --mode=1733 ${sessDir}
fi

if [ -f "${forceIpv4}" ]; then
rm ${forceIpv4}
fi

if [ -f "/etc/init.d/proftpd" ]; then
systemctl disable proftpd.service
systemctl stop proftpd.service
fi

if [[ "${arch}" == "amd64" ]] || [[ "${arch}" == "i386" ]]; then
# skip ionice on x86 boards
echo "Done."
exit 0
fi

# Add a cron job to make NAS processes more snappy and silence rsyslog
cat << EOF > /etc/rsyslog.d/omv-armbian.conf
:msg, contains, "omv-ionice" ~
:msg, contains, "action " ~
:msg, contains, "netsnmp_assert" ~
:msg, contains, "Failed to initiate sched scan" ~
EOF
systemctl restart rsyslog

# add taskset to ionice cronjob for biglittle boards
case ${BOARD} in
odroidxu4|bananapim3|nanopifire3|nanopct3plus|nanopim3)
    taskset='; taskset -c -p 4-7 ${srv}'
    ;;
*rk3399*|*edge*|nanopct4|nanopim4|nanopineo4|renegade-elite|rockpi-4*|rockpro64|helios64)
    taskset='; taskset -c -p 4-5 ${srv}'
    ;;
odroidn2)
    taskset='; taskset -c -p 2-5 ${srv}'
    ;;
esac

# create ionice script
cat << EOF > ${ioniceScript}
#!/bin/sh
for srv in \$(pgrep "ftpd|nfsiod|smbd"); do
ionice -c1 -p \${srv} ${taskset};
done
EOF
chmod 755 ${ioniceScript}

# create ionice cronjob
cat << EOF > ${ioniceCron}
* * * * * root ${ioniceScript} >/dev/null 2>&1
EOF
chmod 600 ${ioniceCron}

# add pi user to ssh group if it exists
if getent passwd pi > /dev/null; then
echo "Adding pi user to ssh group ..."
usermod -a -G ssh pi
fi

# add user running the script to ssh group if not pi or root
if [ -n "${USER}" ] && [ ! "${USER}" = "root" ] && [ ! "${USER}" = "pi" ]; then
if getent passwd ${USER} > /dev/null; then
    echo "Adding ${USER} to the ssh group ..."
    usermod -a -G ssh ${USER}
fi
fi

# remove networkmanager and dhcpcd5 then configure networkd
if [ ${version} -gt 4 ] && [ ${skipNet} -ne 1 ]; then

if [ "${BOARD}" = "helios64" ]; then
    echo -e '#!/bin/sh\n/usr/sbin/ethtool --offload eth1 rx off tx off' > /usr/lib/networkd-dispatcher/routable.d/10-disable-offloading
fi

defLink="/etc/systemd/network/99-default.link"
if [ -e "${defLink}" ]; then
    rm -fv "${defLink}"
fi

echo "Removing network-manager and dhcpcd5 ..."
apt-get -y --autoremove purge network-manager dhcpcd5

echo "Enable and start systemd-resolved ..."
systemctl enable systemd-resolved
systemctl start systemd-resolved
rm /etc/resolv.conf
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

if [ -f "${rfkill}" ]; then
    echo "Unblocking wifi with rfkill ..."
    ${rfkill} unblock all
fi

for nic in $(ls /sys/class/net | grep -vE "br-|docker|dummy|lo|tun|virbr"); do
    if grep -q "<devicename>${nic}</devicename>" ${OMV_CONFIG_FILE}; then
      echo "${nic} already found in database.Skipping..."
      continue
    fi

    if udevadm info /sys/class/net/${nic} | grep -q wlan; then
      if [ -f "${wpaConf}" ]; then
      country=$(awk -F'=' '/country=/{gsub(/["\r]/,""); print $NF}' ${wpaConf})
      wifiName=$(awk -F'=' '/ssid="/{st=index($0,"="); ssid=substr($0,st+1); gsub(/["\r]/,"",ssid); print ssid; exit}' ${wpaConf})
      wifiPass=$(awk -F'=' '/psk="/{st=index($0,"="); pass=substr($0,st+1); gsub(/["\r]/,"",pass); print pass; exit}' ${wpaConf})

      if [ -n "${country}" ] && [ -n "${wifiName}" ] && [ -n "${wifiPass}" ]; then
          if [ -f "${crda}" ]; then
            awk -i inplace -F'=' -v country="$country" '/REGDOMAIN=/{$0=$1"="country} {print $0}' ${crda}
          fi
          echo "Adding ${nic} to openmedivault database ..."
          jq --null-input --compact-output \
            "{uuid: \"${OMV_CONFIGOBJECT_NEW_UUID}\", devicename: \"${nic}\", type: \"wifi\", method: \"dhcp\", method6: \"dhcp\", wpassid: \"${wifiName}\", wpapsk: \"${wifiPass}\"}" | \
            omv-confdbadm update "conf.system.network.interface" -
          if grep -q "<devicename>${nic}</devicename>" ${OMV_CONFIG_FILE}; then
            cfg=1
          fi
      fi
      fi
    else
      echo "Adding ${nic} to openmedivault database ..."
      jq --null-input --compact-output \
      "{uuid: \"${OMV_CONFIGOBJECT_NEW_UUID}\", devicename: \"${nic}\", method: \"dhcp\", method6: \"dhcp\"}" | \
      omv-confdbadm update "conf.system.network.interface" -
      if grep -q "<devicename>${nic}</devicename>" ${OMV_CONFIG_FILE}; then
      cfg=1
      fi
    fi
done

if [ ${cfg} -eq 1 ]; then
    echo "IP address may change and you could lose connection if running this script via ssh."

    # create config files
    ${confCmd} ${network}

    echo "Network setup for DHCP.Rebooting..."
    reboot
else
    echo "It is recommended to reboot and then setup the network adapter in the openmediavault web interface."
fi

fi

exit 0

ZhanBE 发表于 2021-1-1 16:33:28

棒呆

sjjb6666 发表于 2021-7-27 09:46:34

{:06:}
页: [1]
查看完整版本: 基于树莓派3b+和OpenMedaiVault的网络存储系统搭建