ansible-devops/scripts/system_optimize.sh

220 lines
6.5 KiB
Bash
Raw Normal View History

2025-07-05 15:49:53 +08:00
#!/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}"
}
2025-07-18 16:46:40 +08:00
# 安装系统常用工具
install_sysadmin_tools() {
log_info "[1]-安装系统常用工具包..."
2025-07-18 18:07:48 +08:00
apt update &>/dev/null;
apt install net-tools ipmitool lrzsz iotop iftop zip unzip jq build-essential util-linux-extra -y &>/dev/null;
2025-07-18 16:46:40 +08:00
log_info "[1]-常用工具包安装完成!"
}
2025-07-05 15:49:53 +08:00
# 禁用apt的定期更新
disable_apt_periodic_updates() {
2025-07-18 18:12:41 +08:00
log_info "[2]-禁用Apt的定期更新..."
2025-07-05 15:49:53 +08:00
# 修改10periodic配置文件将所有的1改为0禁用自动更新检查
2025-07-18 18:16:42 +08:00
sed -i 's/1/0/g' /etc/apt/apt.conf.d/10periodic &>/dev/null;
2025-07-05 15:49:53 +08:00
# 修改20auto-upgrades配置文件将所有的1改为0禁用自动升级
2025-07-18 18:16:42 +08:00
sed -i 's/1/0/g' /etc/apt/apt.conf.d/20auto-upgrades &>/dev/null;
2025-07-18 18:12:41 +08:00
log_info "[2]-Apt定期更新已禁用!"
2025-07-05 15:49:53 +08:00
}
2025-07-18 16:46:40 +08:00
2025-07-05 15:49:53 +08:00
# 设置系统时区为上海
set_timezone_to_shanghai() {
2025-07-18 16:46:40 +08:00
log_info "[3]-设置系统时区为上海..."
2025-07-05 15:49:53 +08:00
# 使用timedatectl命令设置系统时区为Asia/Shanghai
timedatectl set-timezone Asia/Shanghai
2025-07-18 16:46:40 +08:00
log_info "[3]-系统时区已设置为上海"
2025-07-05 15:49:53 +08:00
}
2025-07-18 16:46:40 +08:00
2025-07-05 15:49:53 +08:00
# 同步硬件时钟和系统时钟
synchronize_hardware_clock() {
2025-07-18 16:46:40 +08:00
log_info "[4]-同步系统硬件时钟..."
2025-07-05 15:49:53 +08:00
# 使用hwclock命令将系统时间同步到硬件时钟
2025-07-16 12:48:17 +08:00
hwclock --systohc
2025-07-18 16:46:40 +08:00
log_info "[4]-系统硬件时钟已同步!"
2025-07-05 15:49:53 +08:00
}
2025-07-16 13:10:31 +08:00
#关闭休眠
off_sleep(){
2025-07-18 16:46:40 +08:00
log_info "[5]-关闭系统休眠..."
2025-07-16 13:10:31 +08:00
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target &>> /tmp/2.log
2025-07-18 16:46:40 +08:00
log_info "[5]-系统休眠已关闭!"
2025-07-16 13:10:31 +08:00
}
2025-07-05 15:49:53 +08:00
# 删除"ubuntu"用户
#remove_ubuntu_user() {
# log_info "删除'ubuntu'用户..."
# # 使用userdel命令删除ubuntu用户并递归删除其主目录
# # &> /dev/null用于忽略可能的错误输出例如用户不存在的情况
# userdel -r ubuntu &> /dev/null
# log_info "已尝试删除'ubuntu'用户(如果存在)"
#}
2025-07-15 16:36:18 +08:00
#锁定版本号
lock_current_kernel(){
2025-07-18 16:46:40 +08:00
log_info "[6]-锁定系统内核..."
2025-07-15 16:36:18 +08:00
# 自动锁定当前运行的内核版本
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
2025-07-18 16:46:40 +08:00
log_info "[6]-系统内核已锁定!"
2025-07-15 16:36:18 +08:00
else
2025-07-16 12:48:17 +08:00
log_info "内核版本 $CURRENT_KERNEL 已锁定,无需操作"
2025-07-15 16:36:18 +08:00
fi
}
2025-07-15 16:58:56 +08:00
# 自动扩展根逻辑卷至最大可用空间
extend_root_volume() {
2025-07-18 16:46:40 +08:00
log_info "[7]-根分区扩容..."
2025-07-15 16:58:56 +08:00
local root_lv=$(df / | tail -1 | awk '{print $1}')
# 检查是否为LVM逻辑卷
if ! echo "$root_lv" | grep -q '/dev/mapper/'; then
echo "错误当前根分区不是LVM逻辑卷" >&2
return 1
fi
# 扩展逻辑卷并调整文件系统
2025-07-18 16:46:40 +08:00
#log_info "扩展逻辑卷: $root_lv"
2025-07-15 17:15:17 +08:00
if lvresize --extents +100%FREE --resizefs "$root_lv" &>/dev/null; then
2025-07-16 13:01:24 +08:00
root_lvsize=$(df -h / | awk 'NR==2 {print "磁盘磁盘根分区大小:",$2}')
2025-07-18 18:12:41 +08:00
log_info "[7]-根分区扩容成功!"
2025-07-15 17:15:17 +08:00
else
log_info "逻辑卷扩展失败!"
2025-07-16 13:01:24 +08:00
root_lvsize=$(df -h / | awk 'NR==2 {print "磁盘磁盘根分区大小:",$2}')
2025-07-18 18:12:41 +08:00
log_info "${root_lvsize}"
2025-07-15 17:15:17 +08:00
return 1
fi
}
2025-07-15 16:58:56 +08:00
2025-07-05 15:49:53 +08:00
# 禁止显卡驱动
disable_nouveau_driver() {
2025-07-18 16:46:40 +08:00
log_info "[8]-禁止nouveau显卡驱动..."
2025-07-05 15:49:53 +08:00
# 创建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
2025-07-18 16:46:40 +08:00
log_info "[8]-nouveau显卡驱动已被禁止"
2025-07-05 15:49:53 +08:00
}
# 更改GRUB配置并更新
update_grub_configuration() {
2025-07-18 16:46:40 +08:00
log_info "[9]-配置GRUB网络接口命名..."
2025-07-05 15:49:53 +08:00
# 检查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
2025-07-18 16:46:40 +08:00
log_info "[9]-配置GRUB网络接口命名已完成!"
2025-07-05 15:49:53 +08:00
else
2025-07-18 16:46:40 +08:00
log_error "[9]-配置GRUB网络接口命名失败!"
2025-07-05 15:49:53 +08:00
exit 1
fi
# 更新GRUB引导加载程序配置
update-grub &> /dev/null
2025-07-18 16:46:40 +08:00
2025-07-05 15:49:53 +08:00
}
2025-07-15 17:28:43 +08:00
#修改主机名
rename_hostname(){
2025-07-18 16:46:40 +08:00
log_info "[9]-修改主机名称..."
2025-07-15 17:28:43 +08:00
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}
2025-07-18 16:46:40 +08:00
log_info "[9]-主机名已修改!"
2025-07-15 17:28:43 +08:00
}
2025-07-18 16:46:40 +08:00
2025-07-16 13:22:09 +08:00
#清理历史命令
clear_history(){
2025-07-18 16:46:40 +08:00
log_info "[10]-开始历史命令..."
2025-07-16 13:22:09 +08:00
> ~/.bash_history
history -c
2025-07-18 16:46:40 +08:00
log_info "[10]-历史命令已清理!"
2025-07-16 13:22:09 +08:00
}
2025-07-15 17:28:43 +08:00
2025-07-05 15:49:53 +08:00
# 主函数:按顺序执行所有配置步骤
main() {
2025-07-18 16:46:40 +08:00
log_info "|#################开始系统配置#################"
install_sysadmin_tools
2025-07-05 15:49:53 +08:00
disable_apt_periodic_updates
set_timezone_to_shanghai
2025-07-15 16:36:18 +08:00
lock_current_kernel
2025-07-15 16:58:56 +08:00
extend_root_volume
2025-07-05 15:49:53 +08:00
synchronize_hardware_clock
disable_nouveau_driver
update_grub_configuration
2025-07-16 13:10:31 +08:00
off_sleep
2025-07-15 17:28:43 +08:00
rename_hostname
2025-07-16 13:22:09 +08:00
clear_history
2025-07-18 16:46:40 +08:00
log_info "|-----------------------------------------------"
log_inf "|操作完成后,请通过以下命令重启系统!"
log_info "|ipmitool chassis power cycle"
log_info "|#################系统配置完成!#################"
2025-07-05 15:49:53 +08:00
}
# 执行主函数
main