基于树莓派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
脚本我贴在这 大家一起学习
#!/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
棒呆 {:06:}
页:
[1]