ansible-devops/scripts/system_optimize.sh

220 lines
6.9 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 颜色定义
GREEN='\033[1;32m'
RED='\033[1;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # 重置颜色
# 日志函数 - 绿色输出
log_info() {
echo -e "${GREEN}[INFO] $1${NC}"
}
# 错误函数 - 红色输出
log_error() {
echo -e "${RED}[ERROR] $1${NC}"
}
# 警告函数 - 黄色输出
log_warning() {
echo -e "${YELLOW}[WARNING] $1${NC}"
}
# 安装系统常用工具
install_sysadmin_tools() {
log_info "[01]-安装系统常用工具包"
apt update &>/dev/null;
NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive apt install net-tools ipmitool lrzsz iotop iftop zip unzip jq build-essential lldpd nfs-common -y &>/dev/null;
log_info "[01]-常用工具包安装---------------------已完成!"
}
# 禁用apt的定期更新
disable_apt_periodic_updates() {
log_info "[02]-禁用Apt定期更新功能"
# 修改10periodic配置文件将所有的1改为0禁用自动更新检查
sed -i 's/1/0/g' /etc/apt/apt.conf.d/10periodic &>/dev/null;
# 修改20auto-upgrades配置文件将所有的1改为0禁用自动升级
sed -i 's/1/0/g' /etc/apt/apt.conf.d/20auto-upgrades &>/dev/null;
log_info "[02]-禁用Apt定期更新功能----------------已完成!"
}
# 设置系统时区为上海
set_timezone_to_shanghai() {
log_info "[03]-设置系统时区为上海时区"
# 使用timedatectl命令设置系统时区为Asia/Shanghai
timedatectl set-timezone Asia/Shanghai
log_info "[03]-设置系统时区为上海时区-------------已完成!"
}
# 同步硬件时钟和系统时钟
synchronize_hardware_clock() {
log_info "[04]-同步系统硬件时钟操作中"
# 使用hwclock命令将系统时间同步到硬件时钟
hwclock --systohc
log_info "[04]-同步系统硬件时钟操作中-------------已完成!"
}
#关闭休眠
off_sleep(){
log_info "[05]-执行关闭系统休眠操作"
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target &>> /tmp/2.log
log_info "[05]-执行关闭系统休眠操作---------------已完成!"
}
# 删除"ubuntu"用户
remove_ubuntu_user() {
log_info "[11]-删除'ubuntu'用户..."
# 使用userdel命令删除ubuntu用户并递归删除其主目录
# # &> /dev/null用于忽略可能的错误输出例如用户不存在的情况
pkill -9 -u ubuntu &> /dev/null
userdel -r ubuntu &> /dev/null
log_info "[11]-删除'ubuntu'用户----------------已完成!"
}
#锁定版本号
lock_current_kernel(){
log_info "[06]-执行系统内核锁定操作"
# 自动锁定当前运行的内核版本
CURRENT_KERNEL=$(uname -r)
GRUB_FILE="/etc/default/grub"
# 检查是否已锁定
if ! grep -q "GRUB_DEFAULT=.*$CURRENT_KERNEL" "$GRUB_FILE"; then
# 备份并修改GRUB配置
cp -f "$GRUB_FILE" "${GRUB_FILE}.bak"
sed -i '/GRUB_DEFAULT=/c\GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux '${CURRENT_KERNEL}'"' "$GRUB_FILE"
update-grub &>/dev/null
log_info "[06]-执行系统内核锁定操作---------------已完成!"
else
log_info "[06]-执行系统内核锁定操作---------------已完成!"
fi
}
# 自动扩展根逻辑卷至最大可用空间
extend_root_volume() {
log_info "[07]-执行根分区扩容操作"
local root_lv=$(df / | tail -1 | awk '{print $1}')
# 检查是否为LVM逻辑卷
if ! echo "$root_lv" | grep -q '/dev/mapper/'; then
echo "[07]-错误当前根分区不是LVM逻辑卷" >&2
return 1
fi
# 扩展逻辑卷并调整文件系统
#log_info "扩展逻辑卷: $root_lv"
if lvresize --extents +100%FREE --resizefs "$root_lv" &>/dev/null; then
root_lvsize=$(df -h / | awk 'NR==2 {print "磁盘磁盘根分区大小:",$2}')
log_info "[07]-执行根分区扩容操作-----------------已完成!"
else
log_info "[07]]-执行根分区扩容操作-----------------失败!"
return 1
fi
}
# 禁止显卡驱动
disable_nouveau_driver() {
log_info "[08]-禁止nouveau显卡驱动"
# 创建blacklist-nouveau.conf文件添加禁止nouveau驱动的配置
cat > /etc/modprobe.d/blacklist-nouveau.conf << EOF
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
EOF
# 创建nouveau-kms.conf文件禁用nouveau的KMS内核模式设置
cat > /etc/modprobe.d/nouveau-kms.conf << EOF
options nouveau modeset=0
EOF
# 更新initramfs使驱动禁用配置生效
update-initramfs -u &> /dev/null
log_info "[08]-禁止nouveau显卡驱动----------------已完成!"
}
# 更改GRUB配置并更新
update_grub_configuration() {
log_info "[09]-配置 GRUB 网络接口命名"
# 检查GRUB配置中是否已存在所需的网络接口命名设置
if ! grep -q 'GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1 biosdevname=0"' /etc/default/grub; then
# 如果不存在则注释掉原有的GRUB_CMDLINE_LINUX_DEFAULT行
sed -i '/GRUB_CMDLINE_LINUX_DEFAULT=.*/s/^/#/' /etc/default/grub
# 添加新的GRUB_CMDLINE_LINUX_DEFAULT行启用传统网络接口命名
sed -i '/GRUB_CMDLINE_LINUX_DEFAULT=.*/a\GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1 biosdevname=0"' /etc/default/grub
fi
# 再次检查配置是否已成功添加
if grep -q 'GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1 biosdevname=0"' /etc/default/grub; then
log_info "[09]-配置 GRUB 网络接口命名-------------已完成!"
else
log_error "[09]-GRUB 网络接口命名配置失败"
exit 1
fi
# 更新GRUB引导加载程序配置
update-grub &> /dev/null
}
#修改主机名
rename_hostname(){
log_info "[09]-修改主机名称"
IP=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}' | grep `ip route | grep default | awk '{print $3}' | awk -F. '{print $1"."$2}' | head -1` | head -1 | sed 's/\./-/g')
hostnamectl set-hostname ${IP}
log_info "[09]-主机名称修改操作-------------------已完成!"
}
#清理历史命令
clear_history(){
log_info "[10]-执行清理历史命令"
> ~/.bash_history
history -c
log_info "[10]-执行清理历史命令-------------------已完成!"
}
# 主函数:按顺序执行所有配置步骤
main() {
log_info "|#################开始系统配置#################|"
install_sysadmin_tools
disable_apt_periodic_updates
set_timezone_to_shanghai
synchronize_hardware_clock
off_sleep
lock_current_kernel
extend_root_volume
disable_nouveau_driver
update_grub_configuration
rename_hostname
remove_ubuntu_user
clear_history
log_info "|##############################################|"
log_info "|操作完成后,请通过以下命令重启系统!"
log_info "|ipmitool chassis power cycle"
log_info "|#################系统配置完成!###############|"
}
# 执行主函数
main