ansible-devops/scripts/system_optimize.sh

220 lines
6.5 KiB
Bash
Raw 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 "[1]-安装系统常用工具包..."
apt update &>/dev/null;
apt install net-tools ipmitool lrzsz iotop iftop zip unzip jq build-essential util-linux-extra -y &>/dev/null;
log_info "[1]-常用工具包安装完成!"
}
# 禁用apt的定期更新
disable_apt_periodic_updates() {
log_info "[2]-禁用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 "[2]-Apt定期更新已禁用!"
}
# 设置系统时区为上海
set_timezone_to_shanghai() {
log_info "[3]-设置系统时区为上海..."
# 使用timedatectl命令设置系统时区为Asia/Shanghai
timedatectl set-timezone Asia/Shanghai
log_info "[3]-系统时区已设置为上海"
}
# 同步硬件时钟和系统时钟
synchronize_hardware_clock() {
log_info "[4]-同步系统硬件时钟..."
# 使用hwclock命令将系统时间同步到硬件时钟
hwclock --systohc
log_info "[4]-系统硬件时钟已同步!"
}
#关闭休眠
off_sleep(){
log_info "[5]-关闭系统休眠..."
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target &>> /tmp/2.log
log_info "[5]-系统休眠已关闭!"
}
# 删除"ubuntu"用户
#remove_ubuntu_user() {
# log_info "删除'ubuntu'用户..."
# # 使用userdel命令删除ubuntu用户并递归删除其主目录
# # &> /dev/null用于忽略可能的错误输出例如用户不存在的情况
# userdel -r ubuntu &> /dev/null
# log_info "已尝试删除'ubuntu'用户(如果存在)"
#}
#锁定版本号
lock_current_kernel(){
log_info "[6]-锁定系统内核..."
# 自动锁定当前运行的内核版本
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 "[6]-系统内核已锁定!"
else
log_info "内核版本 $CURRENT_KERNEL 已锁定,无需操作"
fi
}
# 自动扩展根逻辑卷至最大可用空间
extend_root_volume() {
log_info "[7]-根分区扩容..."
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
# 扩展逻辑卷并调整文件系统
#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 "[7]-根分区扩容成功!"
else
log_info "逻辑卷扩展失败!"
root_lvsize=$(df -h / | awk 'NR==2 {print "磁盘磁盘根分区大小:",$2}')
log_info "${root_lvsize}"
return 1
fi
}
# 禁止显卡驱动
disable_nouveau_driver() {
log_info "[8]-禁止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 "[8]-nouveau显卡驱动已被禁止"
}
# 更改GRUB配置并更新
update_grub_configuration() {
log_info "[9]-配置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 "[9]-配置GRUB网络接口命名已完成!"
else
log_error "[9]-配置GRUB网络接口命名失败!"
exit 1
fi
# 更新GRUB引导加载程序配置
update-grub &> /dev/null
}
#修改主机名
rename_hostname(){
log_info "[9]-修改主机名称..."
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 "[9]-主机名已修改!"
}
#清理历史命令
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
lock_current_kernel
extend_root_volume
synchronize_hardware_clock
disable_nouveau_driver
update_grub_configuration
off_sleep
rename_hostname
clear_history
log_info "|###############################################|"
log_info "|操作完成后,请通过以下命令重启系统!"
log_info "|ipmitool chassis power cycle"
log_info "|#################系统配置完成!#################|"
}
# 执行主函数
main