Last active
February 9, 2023 01:10
-
-
Save wbchn/a95b991bf911e3a2e62f7b2ace27c19f to your computer and use it in GitHub Desktop.
DONNOT USING. bbr install script for linux
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# | |
# Auto install latest kernel for TCP BBR | |
# | |
# System Required: CentOS 6+, Debian7+, Ubuntu12+ | |
# | |
# Copyright (C) 2016-2017 Teddysun <i@teddysun.com> | |
# | |
# URL: https://teddysun.com/489.html | |
# | |
echo "old script for note, please vist https://github.com/teddysun/across/, it will exit now" | |
exit 1 | |
red='\033[0;31m' | |
green='\033[0;32m' | |
yellow='\033[0;33m' | |
plain='\033[0m' | |
[[ $EUID -ne 0 ]] && echo -e "${red}Error:${plain} This script must be run as root!" && exit 1 | |
[[ -d "/proc/vz" ]] && echo -e "${red}Error:${plain} Your VPS is based on OpenVZ, not be supported." && exit 1 | |
if [ -f /etc/redhat-release ]; then | |
release="centos" | |
elif cat /etc/issue | grep -Eqi "debian"; then | |
release="debian" | |
elif cat /etc/issue | grep -Eqi "ubuntu"; then | |
release="ubuntu" | |
elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; then | |
release="centos" | |
elif cat /proc/version | grep -Eqi "debian"; then | |
release="debian" | |
elif cat /proc/version | grep -Eqi "ubuntu"; then | |
release="ubuntu" | |
elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; then | |
release="centos" | |
fi | |
get_latest_version() { | |
latest_version=$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/ | awk -F'\"v' '/v[4-9]./{print $2}' | cut -d/ -f1 | grep -v - | sort -V | tail -1) | |
[ -z ${latest_version} ] && return 1 | |
if [[ `getconf WORD_BIT` == "32" && `getconf LONG_BIT` == "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) | |
deb_kernel_url="http://kernel.ubuntu.com/~kernel-ppa/mainline/v${latest_version}/${deb_name}" | |
deb_kernel_name="linux-image-${latest_version}-amd64.deb" | |
else | |
deb_name=$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${latest_version}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/i386.deb/{print $2}' | cut -d'<' -f1 | head -1) | |
deb_kernel_url="http://kernel.ubuntu.com/~kernel-ppa/mainline/v${latest_version}/${deb_name}" | |
deb_kernel_name="linux-image-${latest_version}-i386.deb" | |
fi | |
[ ! -z ${deb_name} ] && return 0 || return 1 | |
} | |
get_opsy() { | |
[ -f /etc/redhat-release ] && awk '{print ($1,$3~/^[0-9]/?$3:$4)}' /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 | |
} | |
opsy=$( get_opsy ) | |
arch=$( uname -m ) | |
lbit=$( getconf LONG_BIT ) | |
kern=$( uname -r ) | |
get_char() { | |
SAVEDSTTY=`stty -g` | |
stty -echo | |
stty cbreak | |
dd if=/dev/tty bs=1 count=1 2> /dev/null | |
stty -raw | |
stty echo | |
stty $SAVEDSTTY | |
} | |
getversion() { | |
if [[ -s /etc/redhat-release ]]; then | |
grep -oE "[0-9.]+" /etc/redhat-release | |
else | |
grep -oE "[0-9.]+" /etc/issue | |
fi | |
} | |
centosversion() { | |
if [ "${release}" == "centos" ]; then | |
local code=$1 | |
local version="$(getversion)" | |
local main_ver=${version%%.*} | |
if [ "$main_ver" == "$code" ]; then | |
return 0 | |
else | |
return 1 | |
fi | |
else | |
return 1 | |
fi | |
} | |
check_bbr_status() { | |
local param=$(sysctl net.ipv4.tcp_available_congestion_control | awk '{print $3}') | |
if uname -r | grep -Eqi "4.10."; then | |
if [[ "${param}" == "bbr" ]]; then | |
return 0 | |
else | |
return 1 | |
fi | |
else | |
return 1 | |
fi | |
} | |
install_elrepo() { | |
if centosversion 5; then | |
echo -e "${red}Error:${plain} not supported CentOS 5." | |
exit 1 | |
fi | |
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org | |
if centosversion 6; then | |
rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm | |
elif centosversion 7; then | |
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm | |
fi | |
if [ ! -f /etc/yum.repos.d/elrepo.repo ]; then | |
echo -e "${red}Error:${plain} Install elrepo failed, please check it." | |
exit 1 | |
fi | |
} | |
install_config() { | |
if [[ "${release}" == "centos" ]]; then | |
if centosversion 6; then | |
if [ ! -f "/boot/grub/grub.conf" ]; then | |
echo -e "${red}Error:${plain} /boot/grub/grub.conf not found, please check it." | |
exit 1 | |
fi | |
sed -i 's/^default=.*/default=0/g' /boot/grub/grub.conf | |
elif centosversion 7; then | |
if [ ! -f "/boot/grub2/grub.cfg" ]; then | |
echo -e "${red}Error:${plain} /boot/grub2/grub.cfg not found, please check it." | |
exit 1 | |
fi | |
grub2-set-default 0 | |
fi | |
elif [[ "${release}" == "debian" || "${release}" == "ubuntu" ]]; then | |
/usr/sbin/update-grub | |
fi | |
sed -i '/net.core.default_qdisc/d' /etc/sysctl.conf | |
sed -i '/net.ipv4.tcp_congestion_control/d' /etc/sysctl.conf | |
echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf | |
echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf | |
sysctl -p >/dev/null 2>&1 | |
} | |
install_bbr() { | |
check_bbr_status | |
if [ $? -eq 0 ]; then | |
echo | |
echo -e "${green}Info:${plain} TCP BBR has been successfully installed. nothing to do..." | |
exit | |
fi | |
if [[ "${release}" == "centos" ]]; then | |
install_elrepo | |
yum --enablerepo=elrepo-kernel -y install kernel-ml kernel-ml-devel | |
if [ $? -ne 0 ]; then | |
echo -e "${red}Error:${plain} Install latest kernel failed, please check it." | |
exit 1 | |
fi | |
elif [[ "${release}" == "debian" || "${release}" == "ubuntu" ]]; then | |
[[ ! -e "/usr/bin/wget" ]] && apt-get -y update && apt-get -y install wget | |
get_latest_version | |
[ $? -ne 0 ] && echo -e "${red}Error:${plain} Get latest kernel version failed." && exit 1 | |
wget -c -t3 -T60 -O ${deb_kernel_name} ${deb_kernel_url} | |
if [ $? -ne 0 ]; then | |
echo -e "${red}Error:${plain} Download ${deb_kernel_name} failed, please check it." | |
exit 1 | |
fi | |
dpkg -i ${deb_kernel_name} | |
rm -fv ${deb_kernel_name} | |
else | |
echo -e "${red}Error:${plain} OS is not be supported, please change to CentOS/Debian/Ubuntu and try again." | |
exit 1 | |
fi | |
install_config | |
} | |
clear | |
echo "---------- System Information ----------" | |
echo " OS : $opsy" | |
echo " Arch : $arch ($lbit Bit)" | |
echo " Kernel : $kern" | |
echo "----------------------------------------" | |
echo " Auto install latest kernel for TCP BBR" | |
echo | |
echo " URL: https://teddysun.com/489.html" | |
echo "----------------------------------------" | |
echo | |
echo "Press any key to start...or Press Ctrl+C to cancel" | |
char=`get_char` | |
install_bbr | |
echo | |
read -p "Info: The system needs to be restart. Do you want to reboot? [y/n]" is_reboot | |
if [[ ${is_reboot} == "y" || ${is_reboot} == "Y" ]]; then | |
reboot | |
else | |
exit | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I'm so sorry about that, this is a old script many years ago, some repo are outdate, if you need it, pls goto https://github.com/teddysun/across/ for new script.
i'll add disable this script to prevent others from using it, sorry again.