Skip to content

Commit

Permalink
# v1.0.10 新增下载/安装内核时可以安装自定义版本(升级/降级)
Browse files Browse the repository at this point in the history
  • Loading branch information
Toyo authored Apr 25, 2017
1 parent 7d29b2b commit 80f1194
Showing 1 changed file with 42 additions and 36 deletions.
78 changes: 42 additions & 36 deletions bbr.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,16 @@ export PATH
#=================================================
# System Required: Debian/Ubuntu
# Description: TCP-BBR
# Version: 1.0.9
# Version: 1.0.10
# Author: Toyo
# Blog: https://doub.io/wlzy-16/
#=================================================

Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m"
Info="${Green_font_prefix}[信息]${Font_color_suffix}"
Error="${Red_font_prefix}[错误]${Font_color_suffix}"
Tip="${Green_font_prefix}[注意]${Font_color_suffix}"

#检查系统
check_sys(){
if [[ -f /etc/redhat-release ]]; then
Expand All @@ -29,14 +34,21 @@ check_sys(){
fi
}
# 本段代码来源自: https://teddysun.com/489.html
Set_latest_new_version(){
echo "请输入 要下载安装的Linux内核版本(BBR) [ 格式: x.xx.xx ,例如: 4.10.12 ]
${Tip} 内核版本列表请去这里获取:[ http://kernel.ubuntu.com/~kernel-ppa/mainline/ ]"
stty erase '^H' && read -p "(默认回车,自动获取最新版本):" latest_version
[[ -z "${latest_version}" ]] && get_latest_new_version
echo
}
get_latest_new_version(){
echo -e "\033[42;37m[信息]\033[0m 检测内核最新版本中..."
latest_version=$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/ | awk -F'\"v' '/v[4-9].[0-9][0-9].[0-9]/{print $2}' | cut -d/ -f1 | sort -V | tail -1)
echo -e "${Info} 检测内核最新版本中..."
latest_version=$(wget -qO- "http://kernel.ubuntu.com/~kernel-ppa/mainline/" | awk -F'\"v' '/v[4-9].[0-9][0-9].[0-9]/{print $2}' | cut -d/ -f1 | sort -V | tail -1)
[[ -z ${latest_version} ]] && echo -e "\033[41;37m [错误] \033[0m 检测内核最新版本失败 !" && exit 1
echo -e "\033[42;37m[信息]\033[0m 当前内核最新版本为 : ${latest_version}"
echo -e "${Info} 当前内核最新版本为 : ${latest_version}"
}
get_latest_version(){
get_latest_new_version
Set_latest_new_version
bit=`uname -m`
if [[ ${bit} == "x86_64" ]]; then
deb_name=$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${latest_version}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/amd64.deb/{print $2}' | cut -d'<' -f1 | head -1)
Expand All @@ -47,7 +59,7 @@ get_latest_version(){
deb_kernel_url="http://kernel.ubuntu.com/~kernel-ppa/mainline/v${latest_version}/${deb_name}"
deb_kernel_name="linux-image-${latest_version}-i386.deb"
else
echo -e "\033[41;37m[错误]\033[0m 不支持 ${bit} !" && exit 1
echo -e "${Error} 不支持 ${bit} !" && exit 1
fi
}
#检查内核是否满足
Expand All @@ -56,34 +68,34 @@ check_deb_off(){
deb_ver=`dpkg -l|grep linux-image | awk '{print $2}' | awk -F '-' '{print $3}' | grep '[4-9].[0-9]*.'`
if [[ "${deb_ver}" != "" ]]; then
if [[ "${deb_ver}" == "${latest_version}" ]]; then
echo -e "\033[42;37m[信息]\033[0m 检测到 内核版本 已满足要求,继续..."
echo -e "${Info} 检测到 内核版本 已满足要求,继续..."
else
echo -e "\033[42;37m[错误]\033[0m 检测到 内核版本 不是最新版本,建议使用\033[32m bash bbr.sh \033[0m来升级内核 !"
echo -e "\033[42;37m[错误]\033[0m 检测到 内核版本 不是最新版本,建议使用${Green_font_prefix} bash bbr.sh ${Font_color_suffix}来升级内核 !"
fi
else
echo -e "\033[41;37m[错误]\033[0m 检测到 内核版本 不支持开启BBR,请使用\033[32m bash bbr.sh install \033[0m来更换最新内核 !" && exit 1
echo -e "${Error} 检测到 内核版本 不支持开启BBR,请使用${Green_font_prefix} bash bbr.sh ${Font_color_suffix}来更换最新内核 !" && exit 1
fi
}
# 删除其余内核
del_deb(){
deb_total=`dpkg -l | grep linux-image | awk '{print $2}' | grep -v "${latest_version}" | wc -l`
if [ "${deb_total}" > "1" ]; then
echo -e "\033[42;37m[信息]\033[0m 检测到 ${deb_total} 个其余内核,开始卸载..."
echo -e "${Info} 检测到 ${deb_total} 个其余内核,开始卸载..."
for((integer = 1; integer <= ${deb_total}; integer++))
do
deb_del=`dpkg -l|grep linux-image | awk '{print $2}' | grep -v "${latest_version}" | head -${integer}`
echo -e "\033[42;37m[信息]\033[0m 开始卸载 ${deb_del} 内核..."
echo -e "${Info} 开始卸载 ${deb_del} 内核..."
apt-get purge -y ${deb_del}
echo -e "\033[42;37m[信息]\033[0m 卸载 ${deb_del} 内核卸载完成,继续..."
echo -e "${Info} 卸载 ${deb_del} 内核卸载完成,继续..."
done
deb_total=`dpkg -l|grep linux-image | awk '{print $2}' | grep -v "${latest_version}" | wc -l`
if [ "${deb_total}" = "0" ]; then
echo -e "\033[42;37m[信息]\033[0m 内核卸载完毕,继续..."
echo -e "${Info} 内核卸载完毕,继续..."
else
echo -e "\033[41;37m[错误]\033[0m 内核卸载异常,请检查 !" && exit 1
echo -e "${Error} 内核卸载异常,请检查 !" && exit 1
fi
else
echo -e "\033[41;37m[错误]\033[0m 检测到 内核 数量不正确,请检查 !" && exit 1
echo -e "${Error} 检测到 内核 数量不正确,请检查 !" && exit 1
fi
}
del_deb_over(){
Expand All @@ -103,77 +115,73 @@ installbbr(){
check_sys
if [[ ${release} != "debian" ]]; then
if [[ ${release} != "ubuntu" ]]; then
echo -e "\033[41;37m[错误]\033[0m 本脚本不支持当前系统 !" && exit 1
echo -e "${Error} 本脚本不支持当前系统 !" && exit 1
fi
fi
get_latest_version
deb_ver=`dpkg -l|grep linux-image | awk '{print $2}' | awk -F '-' '{print $3}' | grep '[4-9].[0-9]*.'`
if [ "${deb_ver}" != "" ]; then
if [ "${deb_ver}" == "${latest_version}" ]; then
echo -e "\033[42;37m[信息]\033[0m 检测到 当前内核版本 已是最新版本,无需继续安装 !"
echo -e "${Info} 检测到 当前内核版本 已是最新版本,无需继续安装 !"
deb_total=`dpkg -l|grep linux-image | awk '{print $2}' | grep -v "${latest_version}" | wc -l`
if [ "${deb_total}" != "0" ]; then
echo -e "\033[41;37m[信息]\033[0m 检测到内核数量异常,存在多余内核,开始删除..."
echo -e "${Red_background_prefix}[信息]${Font_color_suffix} 检测到内核数量异常,存在多余内核,开始删除..."
del_deb_over
else
exit 1
fi
else
echo -e "\033[42;37m[信息]\033[0m 检测到 当前内核版本 不是最新版本,升级内核..."
echo -e "${Info} 检测到 当前内核版本 不是最新版本,升级(或降级)内核..."
fi
else
echo -e "\033[42;37m[信息]\033[0m 检测到 当前内核版本 不支持开启BBR,开始安装..."
echo -e "${Info} 检测到 当前内核版本 不支持开启BBR,开始安装..."
virt=`virt-what`
if [[ ${virt} = "" ]]; then
apt-get update && apt-get install virt-what -y
virt=`virt-what`
fi
if [[ ${virt} = "openvz" ]]; then
echo -e "\033[41;37m[错误]\033[0m BBR 不支持 OpenVZ 虚拟化 !" && exit 1
echo -e "${Error} BBR 不支持 OpenVZ 虚拟化 !" && exit 1
fi
fi
#修改DNS为8.8.8.8
echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf

wget -O ${deb_kernel_name} "${deb_kernel_url}"
if [ -s ${deb_kernel_name} ]; then
echo -e "\033[42;37m[信息]\033[0m 内核文件下载成功,开始安装内核..."
echo -e "${Info} 内核文件下载成功,开始安装内核..."
dpkg -i ${deb_kernel_name}
rm -rf ${deb_kernel_name}
else
echo -e "\033[41;37m[错误]\033[0m 内核文件下载失败,请检查 !" && exit 1
echo -e "${Error} 内核文件下载失败,请检查 !" && exit 1
fi
#判断内核是否安装成功
deb_ver=`dpkg -l | grep linux-image | awk '{print $2}' | awk -F '-' '{print $3}' | grep "${latest_version}"`
if [ "${deb_ver}" != "" ]; then
echo -e "\033[42;37m[信息]\033[0m 检测到 内核 已安装成功,开始卸载其余内核..."
echo -e "${Info} 检测到 内核 已安装成功,开始卸载其余内核..."
del_deb_over
else
echo -e "\033[41;37m[错误]\033[0m 检测到 内核版本 安装失败,请检查 !" && exit 1
echo -e "${Error} 检测到 内核版本 安装失败,请检查 !" && exit 1
fi
}
bbrstatus(){
check_bbr_status_on=`sysctl net.ipv4.tcp_available_congestion_control | awk '{print $3}'`
if [ "${check_bbr_status_on}" = "bbr" ]; then
echo -e "\033[42;37m[信息]\033[0m 检测到 BBR 已开启 !"
echo -e "${Info} 检测到 BBR 已开启 !"
# 检查是否启动BBR
check_bbr_status_off=`lsmod | grep bbr`
if [ "${check_bbr_status_off}" = "" ]; then
echo -e "\033[41;37m[错误]\033[0m 检测到 BBR 已开启但未正常启动,请检查 !"
echo -e "${Error} 检测到 BBR 已开启但未正常启动,请检查 !"
else
echo -e "\033[42;37m[信息]\033[0m 检测到 BBR 已开启并已正常启动 !"
echo -e "${Info} 检测到 BBR 已开启并已正常启动 !"
fi
exit 1
fi
}
# 开启BBR
startbbr(){
# 检查是否安装
check_deb_off
# 检查是否开启BBR
bbrstatus
# 如果原来添加的有全部删除
sed -i '/net\.core\.default_qdisc=fq/d' /etc/sysctl.conf
sed -i '/net\.ipv4\.tcp_congestion_control=bbr/d' /etc/sysctl.conf

Expand All @@ -182,11 +190,10 @@ startbbr(){
sysctl -p
sleep 1s
bbrstatus
echo -e "\033[41;37m[错误]\033[0m BBR 启动失败,请检查 !"
echo -e "${Error} BBR 启动失败,请检查 !"
}
# 关闭BBR
stopbbr(){
# 检查是否安装
check_deb_off
sed -i '/net\.core\.default_qdisc=fq/d' /etc/sysctl.conf
sed -i '/net\.ipv4\.tcp_congestion_control=bbr/d' /etc/sysctl.conf
Expand All @@ -202,10 +209,9 @@ stopbbr(){
}
# 查看BBR状态
statusbbr(){
# 检查是否安装
check_deb_off
bbrstatus
echo -e "\033[41;37m[错误]\033[0m BBR 未开启 !"
echo -e "${Error} BBR 未开启 !"
}

action=$1
Expand Down

0 comments on commit 80f1194

Please sign in to comment.