|
楼主 |
发表于 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) =~ [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
复制代码
|
|