From e2aee45ff1569b7122efca679bc26f8e3545d25c Mon Sep 17 00:00:00 2001 From: zeaslity Date: Mon, 13 Nov 2023 16:50:50 +0800 Subject: [PATCH] =?UTF-8?q?[init]=20=E4=BF=AE=E6=94=B9=E5=A4=A7=E9=87=8F?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/dataSources.local.xml | 2 +- Public/init-script-wdd.sh | 115 ++++++++++++++------ Public/lib/wdd-lib-env.sh | 210 +++++++++++++++++++++++++----------- Public/lib/wdd-lib-sys.sh | 4 +- 4 files changed, 236 insertions(+), 95 deletions(-) diff --git a/.idea/dataSources.local.xml b/.idea/dataSources.local.xml index 339453d..44fd8ec 100644 --- a/.idea/dataSources.local.xml +++ b/.idea/dataSources.local.xml @@ -1,6 +1,6 @@ - + #@ diff --git a/Public/init-script-wdd.sh b/Public/init-script-wdd.sh index 54ad6ae..14a5a79 100644 --- a/Public/init-script-wdd.sh +++ b/Public/init-script-wdd.sh @@ -9,6 +9,7 @@ oss_url_prefix="https://oss-s1.107421.xyz" modify_ssh_port=22333 octopus_agent_path=/usr/local/etc/octpus-agent octopus_agent_url=https://happybirthday.107421.xyz/octopus-agent +agent_config_url=https://happybirthday.107421.xyz/agent-config echo "" echo "" @@ -73,7 +74,7 @@ install_demand_softwares() { # Globals: # BLUE # GREEN -# LinuxReleaseVersion +# linux_release_version # Arguments: # None ####################################### @@ -85,15 +86,15 @@ shutdown_firewall() { systemctl disable firewalld SplitBlue - if [ "${LinuxReleaseVersion}" = "centos" ]; then - colorEchoGreen "当前系统的发行版为-- ${LinuxReleaseVersion}!!" + if [ "${linux_release_version}" = "centos" ]; then + colorEchoGreen "当前系统的发行版为-- ${linux_release_version}!!" SplitGreen log "开始关闭SELinux……" setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config colorEchoGreen " SELinux关闭完成 " else - colorEchoGreen "当前系统的发行版为-- ${LinuxReleaseVersion}!!" + colorEchoGreen "当前系统的发行版为-- ${linux_release_version}!!" systemctl stop ufw systemctl disable ufw colorEchoGreen "无需关闭SELinux,现在 跳过" @@ -112,7 +113,7 @@ shutdown_firewall() { add_octopus_host() { FunctionStart "添加Octopus自定义Hosts!" - cat >/etc/hosts</etc/hosts <>/etc/hosts - if grep -q "140.238" >~/.ssh/authorized_keys @@ -744,45 +743,75 @@ modify_ssh_login() { common_tool_install() { FunctionStart "安装Linux常用工具" - colorEchoGreen "当前系统的发行版为-- ${LinuxReleaseVersion} !!" - colorEchoGreen "当前系统的发行版为-- ${LinuxReleaseVersion} !!" - colorEchoGreen "当前系统的发行版为-- ${LinuxReleaseVersion} !!" + colorEchoGreen "当前系统的发行版为-- ${linux_release_version} !!" + colorEchoGreen "当前系统的发行版为-- ${linux_release_version} !!" + colorEchoGreen "当前系统的发行版为-- ${linux_release_version} !!" echo "" - if [[ ${LinuxReleaseVersion} == "centos" ]]; then + if [[ ${linux_release_version} == "centos" ]]; then local centos_common_tool=(deltarpm net-tools iputils bind-utils lsof curl wget vim mtr htop) install_demand_softwares ${centos_common_tool[@]} - elif [[ ${LinuxReleaseVersion} == "ubuntu" ]] || [[ ${LinuxReleaseVersion} == "debian" ]]; then + elif [[ ${linux_release_version} == "ubuntu" ]] || [[ ${linux_release_version} == "debian" ]]; then local ubuntu_common_tool=(iputils-ping net-tools dnsutils lsof curl wget mtr-tiny vim htop lrzsz) install_demand_softwares ${ubuntu_common_tool[@]} fi FunctionEnd } -remove_octopus_agent(){ +####################################### +# description +# Globals: +# octopus_agent_path +# Arguments: +# None +# Returns: +# 0 ... +####################################### +remove_octopus_agent() { FunctionStart "清理Octopus Agent" - if not systemctl status octopus-agent.service; then - log "octopus agent 没有安装! 直接返回" + local systemd_config_path=("/lib/systemd/system/" "/etc/systemd/system/") + + local systemd_config_file + local agent_installed=0 + for systemd_config_file in ${systemd_config_path[@]}; do + if ls "${systemd_config_file}"* | grep -q octopus-agent.service; then + agent_installed=1 + fi + done + + if [[ $agent_installed -eq 0 ]]; then + log "octopus agent 没有安装! 卸载成功!" return 0 fi # 关闭服务 + log "开始关闭OctopusAgent的服务!" systemctl stop octopus-agent.service sleep 2 SplitLine systemctl disable octopus-agent.service SplitLine + + log "删除OctopusAgent的守护进程配置文件!" rm -rf /etc/systemd/system/octopus-agent.service sleep 1 systemctl daemon-reload # 删除残留 SplitLine + log "删除OctopusAgent的文件残留!" rm -rf ${octopus_agent_path} + rm -rf "${octopus_agent_path}/lib" FunctionEnd - } -daemon_octopus_agent(){ +####################################### +# description +# Globals: +# octopus_agent_path +# Arguments: +# None +####################################### +daemon_octopus_agent() { # https://www.baeldung.com/linux/run-java-application-as-service FunctionStart "[守护]-开始设置Agent的守护进程" @@ -818,11 +847,23 @@ EOF FunctionEnd } -install_octopus_agent(){ +####################################### +# description +# Globals: +# agent_config_url +# file_array +# linux_release +# octopus_agent_path +# octopus_agent_url +# oss_url_prefix +# Arguments: +# None +####################################### +install_octopus_agent() { FunctionStart "安装 Octopus Agent" colorEchoBlue "开始检查最新的版本!" - local latest_version=$(curl $octopus_agent_url | grep -v h1 | grep "a href=" | head -1 | awk '{print$2}' | cut -d">" -f2 | cut -d"<" -f1 | cut -d"_" -f4-) + local latest_version=$(curl "$octopus_agent_url/" | grep -v h1 | grep "a href=" | head -1 | awk '{print$2}' | cut -d">" -f2 | cut -d"<" -f1 | cut -d"_" -f4-) log "查询得到的Octopus Agent的最新版本为 => ${latest_version}" SplitBlue @@ -832,17 +873,28 @@ install_octopus_agent(){ log "开始下载最新版本的Octopus Agent !" wget "${octopus_agent_url}/${agent_latest_version}" -qO "${octopus_agent_path}/${agent_latest_version}" - SplieGreen - cp "$agent_latest_version" octopus-agent - chmod +x octopus-agent + SplitGreen + cp "${octopus_agent_path}/$agent_latest_version" "${octopus_agent_path}/octopus-agent" + chmod +x "${octopus_agent_path}/octopus-agent" echo "" colorEchoBlue "---------------- ls the ${octopus_agent_path} ----------------------" ls ${octopus_agent_path} | grep octopus-agent echo "" log "开始下载 Octopus Agent Config !" - wget "${oss_url_prefix}/octopus-agent.yaml" -qO "${octopus_agent_path}/octopus-agent.yaml" - echo "" + rm -rf index.html + + local agentConfigFileList=$(curl "$agent_config_url/" | grep -v h1 | grep "a href=" | awk '{print$2}' | cut -d">" -f2 | cut -d"<" -f1 | cut -d"_" -f4- | tr "\n" " ") + + IFS=" " read -ra file_array <<<"$agentConfigFileList" + + local agent_config + for agent_config in "${file_array[@]}"; do + colorEchoBlue "agent config file is => $agent_config" + wget -q "$agent_config_url/$agent_config" -qO "${octopus_agent_path}/$agent_config" + echo "" + done + colorEchoBlue "---------------- ls the ${octopus_agent_path} ----------------------" ls ${octopus_agent_path} | grep ".yaml" echo "" @@ -851,9 +903,10 @@ install_octopus_agent(){ rm -rf "$octopus_agent_path/lib/wdd-lib-env.sh" wget "${oss_url_prefix}/wdd-lib-env.sh" -qO "${octopus_agent_path}/lib/wdd-lib-env.sh" SplitGreen - log "开始手机Agent主机的信息!" + log "开始收集Agent主机的信息!" echo "" - ${octopus_agent_path}/lib/wdd-lib-env.sh + chmod +x "${octopus_agent_path}/lib/wdd-lib-env.sh" + bash "${octopus_agent_path}/lib/wdd-lib-env.sh" echo "" SplitGreen diff --git a/Public/lib/wdd-lib-env.sh b/Public/lib/wdd-lib-env.sh index 5e06799..d64f5e7 100644 --- a/Public/lib/wdd-lib-env.sh +++ b/Public/lib/wdd-lib-env.sh @@ -1,10 +1,11 @@ #!/bin/bash -. ./wdd-lib-log.sh -. ./wdd-lib-sys.sh +octopus_agent_path=/usr/local/etc/octpus-agent +. "$octopus_agent_path/lib/wdd-lib-log.sh" +. "$octopus_agent_path/lib/wdd-lib-sys.sh" host_arch_version="" -host_arch="" +cpu_arch="" #### CollectSystemInfo #### server_name="" server_ip_pb_v4="" @@ -27,9 +28,10 @@ io_speed="" machine_id="" arch_info="" agent_version="" +os_bit="" ### tmp usage -io_avg="" +io_speed="" public_ipv4="" inner_ipv4="" public_ipv6="" @@ -37,7 +39,7 @@ inner_ipv6="" country="" region="" city="" -org="" +net_provider="" manage_port="" machine_number="" l_bit="" @@ -52,6 +54,60 @@ io_test() { (LANG=C dd if=/dev/zero of=benchtest_$$ bs=512k count=$1 conv=fdatasync && rm -f benchtest_$$) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' } +####### 获取系统版本及64位或32位信息 +check_sys() { + local sys_bit + sys_bit=$(uname -m) + case $sys_bit in + i[36]86) + os_bit="32" + cpu_arch="386" + ;; + x86_64) + os_bit="64" + cpu_arch="amd64" + ;; + *armv6*) + os_bit="arm" + cpu_arch="arm6" + ;; + *armv7*) + os_bit="arm" + cpu_arch="arm7" + ;; + *aarch64* | *armv8*) + os_bit="arm64" + cpu_arch="arm64" + ;; + *) + error " + 哈哈……这个 辣鸡脚本 不支持你的系统。 (-_-) \n + 备注: 仅支持 Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统 + " && exit 1 + ;; + esac + ## 判定Linux的发行版本 + if [ -f /etc/redhat-release ]; then + host_arch_version="centos" + elif cat /etc/issue | grep -Eqi "debian"; then + host_arch_version="debian" + elif cat /etc/issue | grep -Eqi "ubuntu"; then + host_arch_version="ubuntu" + elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; then + host_arch_version="centos" + elif cat /proc/version | grep -Eqi "debian"; then + host_arch_version="debian" + elif cat /proc/version | grep -Eqi "ubuntu"; then + host_arch_version="ubuntu" + elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; then + host_arch_version="centos" + else + host_arch_version="" + fi + + return 0 +} + ####################################### # description # Arguments: @@ -94,9 +150,11 @@ calc_size() { ####################################### get_host_arch_info() { FunctionStart "开始获取系统架构信息!" + [ -f /etc/redhat-release ] && awk '{print $0}' /etc/redhat-release && return [ -f /etc/os-release ] && awk -F'[= "]' '/PRETTY_NAME/{print $3,$4,$5}' /etc/os-release && return [ -f /etc/lsb-release ] && awk -F'[="]+' '/DESCRIPTION/{print $2}' /etc/lsb-release && return + FunctionEnd } @@ -137,8 +195,8 @@ start_io_test() { ioraw3=$(echo $io3 | awk 'NR==1 {print $1}') [ "$(echo $io3 | awk 'NR==1 {print $2}')" == "GB/s" ] && ioraw3=$(awk 'BEGIN{print '$ioraw3' * 1024}') ioall=$(awk 'BEGIN{print '$ioraw1' + '$ioraw2' + '$ioraw3'}') - io_avg=$(awk 'BEGIN{printf "%.1f", '$ioall' / 3}') - log "I/O Speed(average) : $io_avg MB/s)" + io_speed=$(awk 'BEGIN{printf "%.1f", '$ioall' / 3}') + log "I/O Speed(average) : $io_speed MB/s)" else echo " $(_red "Not enough space for I/O Speed test!")" fi @@ -254,7 +312,7 @@ get_manage_port() { # Globals: # city # country -# org +# net_provider # public_ipv4 # region # Arguments: @@ -265,7 +323,7 @@ get_ipv4_info() { FunctionStart "开始收集服务器IP信息!" # public ip info - org="$(wget -q -T10 -O- ipinfo.io/org)" + net_provider="$(wget -q -T10 -O- ipinfo.io/org)" city="$(wget -q -T10 -O- ipinfo.io/city)" country="$(wget -q -T10 -O- ipinfo.io/country)" region="$(wget -q -T10 -O- ipinfo.io/region)" @@ -281,17 +339,29 @@ get_ipv4_info() { fi # inner ipinfo - local interface_prefix=("[[:space:]]eth[0-9]{1,2}" "[[:space:]]ens[0-9]{1,3}" "[[:space:]]eno[0-9]{1,3}" "[[:space:]]enp[0-9]{1,2}") + local interface_prefix=("eth[0-9]{1,2}" "ens[0-9]{1,3}" "eno[0-9]{1,3}" "enp[0-9]{1,2}" "enp[0-9]{1,2}s[0-9]{1,2}") local real_interface="eth90" local interface - for interface in "${interface_prefix[@]}"; do - if ip link show | grep -oE "${interface}" | head -1; then - real_interface=$(ip link show | grep -oE "${interface}" | head -1 | cut -d" " -f2) - echo "当前主机的真实内网网卡为 => [$real_interface]" + + if command_exists ifconfig; then + log "使用ifconfig检测内部IP地址信息!" + for interface in "${interface_prefix[@]}"; do + if ifconfig | grep -oqE "${interface}:"; then + real_interface=$(ifconfig | grep -E "${interface}:" | cut -d ":" -f1) break - fi - done + fi + done + else + log "使用 ip link show检测内部IP地址信息!" + for interface in "${interface_prefix[@]}"; do + if ip link show | grep -oqE "${interface}:"; then + real_interface=$(ip link show | grep -oE "${interface}:" | head -1 | cut -d" " -f2) + break + fi + done + fi + echo "当前主机的真实内网网卡为 => [$real_interface]" # 提取IPv4地址(CIDR格式) local ipv4_regex="inet[[:space:]](25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/[0-9]{1,2}" @@ -300,11 +370,11 @@ get_ipv4_info() { local ipv6_regex="inet6[[:space:]]([0-9a-fA-F]{0,4}(:[0-9a-fA-F]{0,4}){1,7})\/[0-9]{1,3}" # 查找IPv4地址 - inner_ipv4=$(ip addr show "$real_interface" | grep -oE "$ipv4_regex" | cut -d" " -f2) + inner_ipv4=$(ip addr show "$real_interface" | grep -oE "$ipv4_regex" | grep -v 127 | cut -d" " -f2) echo "Interface: $real_interface, IPv4 Address: $inner_ipv4" # 查找IPv6地址 - inner_ipv6=$(ip addr show "$real_interface" | grep -oE "$ipv6_regex" | cut -d" " -f2) + inner_ipv6=$(ip addr show "$real_interface" | grep -oE "$ipv6_regex" | grep -v "::1" | cut -d" " -f2) echo "Interface: $real_interface, IPv4 Address: $inner_ipv6" FunctionEnd @@ -323,14 +393,14 @@ get_ipv4_info() { # cpu_virt # disk_total_size # disk_used_size -# freq -# kern +# cpu_freq +# kernel_info # lbit # load -# opsy +# os_info # swap # tcp_ctrl -# tram +# mem_total # unused_ram # unused_swap # up @@ -338,24 +408,24 @@ get_ipv4_info() { # None ####################################### collect_system_info() { - FunctionStart "开始收集系统信息!" + FunctionStart "开始收集系统信息!" - check_sys + check_sys cpu_name=$(awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//') cores=$(awk -F: '/processor/ {core++} END {print core}' /proc/cpuinfo) - freq=$(awk -F'[ :]' '/cpu MHz/ {print $4;exit}' /proc/cpuinfo) + cpu_freq=$(awk -F'[ :]' '/cpu MHz/ {print $4;exit}' /proc/cpuinfo) local c_cache local cpu_aes local cpu_virt c_cache=$(awk -F: '/cache size/ {cache=$2} END {print cache}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//') cpu_aes=$(grep -i 'aes' /proc/cpuinfo) cpu_virt=$(grep -Ei 'vmx|svm' /proc/cpuinfo) - tram=$( + mem_total=$( LANG=C free | awk '/Mem/ {print $2}' ) - tram=$(calc_size "$tram") + mem_total=$(calc_size "$mem_total") local unused_ram unused_ram=$( LANG=C @@ -388,7 +458,7 @@ collect_system_info() { uptime | head -1 | awk -F'load average:' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//' ) fi - opsy=$(get_host_arch_info) + os_info=$(get_host_arch_info) arch=$(uname -m) local l_bit if command_exists "getconf"; then @@ -396,7 +466,7 @@ collect_system_info() { else echo "${arch}" | grep -q "64" && l_bit="64" || l_bit="32" fi - kern=$(uname -r) + kernel_info=$(uname -r) disk_total_size=$( LANG=C df -t simfs -t ext2 -t ext3 -t ext4 -t btrfs -t xfs -t vfat -t ntfs -t swap --total 2>/dev/null | grep total | awk '{ print $2 }' @@ -409,7 +479,6 @@ collect_system_info() { disk_used_size=$(calc_size "$disk_used_size") tcp_ctrl=$(sysctl net.ipv4.tcp_congestion_control | awk -F ' ' '{print $3}') - local machine_number="" if [[ $(cut -d"-" -f 3 ${agent_version}" + for file in "${octopus_agent_path}"/*; do + if [[ ! -d ${file} ]]; then + if echo "$file" | grep "octopus-agent_linux_amd64_"; then + agent_version=$(echo "${file}" | cut -d "_" -f4-) + break + fi fi done + if [[ $agent_version -eq "" ]]; then + agent_version=2011-11-11-11-11-11 + fi + + log "获取到的Agent版本信息为 => ${agent_version}" + FunctionEnd } @@ -458,22 +535,22 @@ get_agent_version() { # cpu_name # disk_total_size # disk_used_size -# freq -# host_arch +# cpu_freq +# cpu_arch # inner_ipv4 # inner_ipv6 -# io_avg -# kern +# io_speed +# kernel_info # lbit # machine_number # manage_port -# opsy -# org +# os_info +# net_provider # public_ipv4 # public_ipv6 # region # tcp_ctrl -# tram +# mem_total # virt # Arguments: # None @@ -482,6 +559,8 @@ main() { # todo # start_iotest + check_sys + get_manage_port collect_system_info @@ -492,34 +571,43 @@ main() { get_agent_version - local agent_server_info_file="/octopus-agent/octopus-agent.conf" + local agent_server_info_file="$octopus_agent_path/octopus-agent.conf" + touch "$agent_server_info_file" cat >"$agent_server_info_file" < $agent_server_info_file" + echo "" + + SplitGreen "查看Agent的环境信息!" + cat - 1>&2 < $linux_release_version" + log "系统参数信息如下: linux_release_version => $linux_release_version" # 判断系统的包管理工具 apt, yum, or zypper get_package_manage_tool() {