本版
查看: 9089|回复: 2

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

[复制链接]

[Lv.6]大萝卜

楼主(1#)
发表于 2021-1-1 05:26:17 | 只看该作者 |只看大图 |倒序浏览 |阅读模式
本帖最后由 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。
11.跑脚本的过程异常漫长,期间不要关闭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
回复

支持 | 反对  0 支持 / 0 反对 评分 举报

[Lv.6]大萝卜

沙发(2#)
 楼主| 发表于 2021-1-1 05:29:15 | 只看该作者

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


  1. #!/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) =~ [a-c]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


[Lv.7]特大萝卜

此用户太懒,什么都没写

板凳(3#)
发表于 2021-1-1 16:33:28 | 只看该作者
棒呆

[Lv.5]胡萝卜

固态U盘爱好者

地板(4#)
发表于 2021-7-27 09:46:34 | 只看该作者

联系我们(Contact)|手机版|萝卜头IT论坛 ( 苏ICP备15050961号-1 )

GMT+8, 2026-10-19 06:07 , Processed in 0.07 second(s), 20 queries , Gzip On.

快速回复 返回顶部 返回列表