---
# System prepended metadata

title: BBR & BBRv2 安裝手冊 - ( 適用VMware workstation player Pro 17 - Ubuntu 22.04 )

---

# BBR & BBRv2 安裝手冊 - ( 適用VMware workstation player Pro 17 - Ubuntu 22.04 )
## **VM參數配備:**

CPU : 4 Core
RAM : 8 GB
DISK : 40GB
NET : NAT module
OS : ubuntu-22.04.2-desktop-amd64
Linux Kernel : 5.19.0-50-generic
VM Release : workstation player 17 pro
Update Linux Kernel : 5.13.12
Congestion control : reno cubic BBR BBRv2

## 1.安裝相依套件
#### 進入系統，先關掉惱人的螢幕保護程式
![](https://hackmd.io/_uploads/HymXGzui2.png)
![](https://hackmd.io/_uploads/BkxZ7fuoh.png)

#### 安裝需要的套件 
```
sudo apt install build-essential libncurses5-dev git screen -y
sudo apt build-dep linux -y
```
#### -------------------------------- 錯誤code解決方式 --------------------------------

#### 執行第二段code，出現了下圖的錯誤
![](https://hackmd.io/_uploads/BytK7MOo2.png)

#### 就跑這兩段code，就可以解決了。
```
sudo sed -i 's/#deb-src/deb-src/g' /etc/apt/sources.list
sudo sed -i 's/# deb-src/deb-src/g' /etc/apt/sources.list
```

#### 再跑一下更新。
```
sudo apt update && sudo apt upgrade -y
```
#### ------------------------------ 錯誤code解決方式-END -----------------------------

#### 再重新跑一次剛剛沒跑成功的code
```
sudo apt build-dep linux -y
```
## 2.下載BBRv2
#### 在安裝BBRv2的原始code下來，這邊示範以/home文件夾下進行

###### 由於在~$test底下使用，所以要打下面那行指令，才可以進入 /home (test為此次範例的使用者名稱)
```
cd ..
```
![](https://hackmd.io/_uploads/r1Yrlf_sh.png)
#### 接著，在安裝BBRv2的原始code下來

```
sudo git clone -o google-bbr -b v2alpha  https://github.com/google/bbr.git
```
#### 出現有顯示三個done就代表下載完成
![](https://hackmd.io/_uploads/HyPGBGOin.png)
#### 再來進去原始code的資料夾裡面，並查看是否有檔案
![](https://hackmd.io/_uploads/rkSEBM_ih.png)

## 3.編譯kernel

#### 接著執行下面的code，來開始編譯我們BBRv2的核心 (Kernel)
```
sudo make menuconfig
```
#### 就會看到這個介面，請用上下按鍵移動至圖上的位置，並用左右按鍵選取下方的控制按鍵，選取到<select>並按Enter進入
![](https://hackmd.io/_uploads/S10wHMujn.png)
#### 進到這裡請選取 Networking optinos ---> 一樣選取到<select>並按Enter
![](https://hackmd.io/_uploads/S1jtrzuj2.png)
#### 再往下找，找到 TCP: advanced congestion control，一樣選取到<select>並按Enter
![](https://hackmd.io/_uploads/BJbg8Gujn.png)
#### 選取到BBR TCP 和 BBR2 TCP ，即是這次要安裝的BBR與BBRv2。
#### 在對著目標按"兩下"空白鍵，看到 " * " 星星字號即可。
![](https://hackmd.io/_uploads/HknBUf_o2.png)
#### 選取到 Default TCP congestion control (cubic)，選取到<select>並按Enter。 
![](https://hackmd.io/_uploads/HklRIzOj2.png)
#### 選取到這次要安裝的BBR2，並按Enter，即可選取成功 。 
![](https://hackmd.io/_uploads/BJDNvzdjn.png)
#### 接著請按右方向鍵至 < save > ，進入儲存畫面 。 
![](https://hackmd.io/_uploads/B1_yuz_in.png)
#### 按Enter。 
![](https://hackmd.io/_uploads/rkv6wG_s3.png)
#### 看到右邊有 ( 100% )，代表OK了，在按Enter離開，就儲存完成了!!
![](https://hackmd.io/_uploads/BJWCDfOin.png)
#### 接著一直選取 < Exit > ，回到終端機 ( cmd )即可。
![](https://hackmd.io/_uploads/H1Ic_MOjn.png)
#### 回到這個畫面就代表已經離開編譯的config檔案裡了。
![](https://hackmd.io/_uploads/B1CjOzujn.png)
#### 再來輸入這兩行code，來關閉原始code的簽名檔。
##### ( 這兩行打完是不會有反應的~ 請放心)
```
sudo scripts/config --disable MODULE_SIG
sudo scripts/config --disable DEBUG_INFO
```
![](https://hackmd.io/_uploads/rJjdYGujh.png)

## 4.製作更改kernel所需的檔案

#####  (小提醒:j1後面的數字是CPU的核心數，建議先用1核心就可以了)
```
sudo make -j1 deb-pkg
```
#### 接著你就會看到他噴出錯誤資訊哈哈哈哈哈
![](https://hackmd.io/_uploads/S15hjf_oh.png)
#### 這時候~ 請先去安裝vim，安裝時請按Y
```
sudo apt install vim
```
![](https://hackmd.io/_uploads/r1TLhfds2.png)
#### 再用vim編輯 .config 文件
##### ( 小提醒 : 開啟時，請一定要在root模式開啟，不然會有問題。) 
##### vim小教學 :  i=輸入 ?=搜尋 : = 輸入指令 w = 儲存 q = 離開 ! = 強制執行 舉例:要強制儲存離開，要打 :wq!
```
vim .config
```
#### 修改CONFIG_SYSTEM_TRUSTED_KEYS
```
CONFIG_SYSTEM_TRUSTED_KEYS = "debian/canonical-certs.pem"
改成
CONFIG_SYSTEM_TRUSTED_KEYS = ""
```
#### 修改CONFIG_SYSTEM_REVOCATION_KEYS
```
CONFIG_SYSTEM_REVOCATION_KEYS = "debian/canonical-revoked-certs.pem"
改成
CONFIG_SYSTEM_REVOCATION_KEYS = ""
```
#### 修改前
![](https://hackmd.io/_uploads/SJc3LrKo2.png)
#### 修改後
![](https://hackmd.io/_uploads/B14pOUtin.png)
#### 在儲存返回即可~

#### 再重新編譯一次，這次我就會用4核心來跑~ (編譯過程中可能約三小時左右，請耐心等候) 
```
sudo make -j4 deb-pkg
```

##### 如果安裝過程中有看到這個，請一直按ENTER繼續下去即可。
![](https://hackmd.io/_uploads/SJbowrYsn.png)

#### 看到這個畫面，代表編譯完成。
![](https://hackmd.io/_uploads/ByhjfUYsh.png)
#### 這時請回到 /home 來查看有沒有Kernel的安裝包。
```
cd..
ls
```
#### 此時會看到帶有header & image檔名的檔案，就是要安裝的檔案。
##### ( 小提醒 : image檔案就是kernel的核心 ) 
![](https://hackmd.io/_uploads/H1qAMLYih.png)

#### 接著打入這四行指令，來打開編譯完後副檔名deb的壓縮檔。
##### ( 小提醒 : 由於bbrv2的kernel(內核)會升級，所以這檔案的版本也會不一樣，所以請依照編譯完出來的版本為主，來修改下面兩行有.deb副檔名的code 。 此範例為5.13.12版本。)
```
sudo dpkg -i linux-headers-5.13.12_5.13.12-1_amd64.deb
sudo dpkg -i linux-image-5.13.12_5.13.12-1_amd64.deb
sudo dpkg -l|grep linux-headers   | awk '{print $2}'
sudo dpkg -l|grep linux-image   | awk '{print $2}'
```
#### 完成後就會長這樣~
![](https://hackmd.io/_uploads/HJaH7LYsh.png)

## 5.替換成 BBRv2 Kernel

#### 執行下面兩行code，更改fq以及 congestion_control，來開啟BBRv2
```
echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control = bbr2" >> /etc/sysctl.conf
```
#### 查看一下是否有更改成功
##### ( 小提醒 :  congestion_control那行沒成功是正常，要更換kernel才會啟動 )
```
sysctl -p
```
![](https://hackmd.io/_uploads/B1db4UKi2.png)
#### 檢查一下電腦有幾個 image 檔案，並請記得舊的kernel版本。 ( 此範例版本為 linux-image-5.19.0-50-generic以及其他兩個版本)
```
dpkg --get-selections | grep linux-image
```
![](https://hackmd.io/_uploads/HJ4E4LKj3.png)
#### 順便確認現在使用的kernel版本
```
uname -r
```
![](https://hackmd.io/_uploads/S1P9V8Ysn.png)
#### 可以先重新啟動~
```
reboot
```
#### 重新開機完後，請刪除現在的kernel版本(如果不記得剛剛舊的版本，可以回去看上三行指令再看一次。[ 記得加sudo進入管理員權限 ] )
```
sudo apt-get purge linux-image-5.19.0-50-generic
```
#### 請打 " Y "
![](https://hackmd.io/_uploads/Sk9lrUYih.png)
#### 這畫面是問是否保留，請點選 < NO >
![](https://hackmd.io/_uploads/SykGrLFon.png)
#### 刪除完後長這樣
![](https://hackmd.io/_uploads/S1oKSIto3.png)
#### 再確認一下是否還有別的kernel~ ( 向這邊就還有，請一併刪除~ )
```
dpkg --get-selections | grep linux-image
```
![](https://hackmd.io/_uploads/SyThB8Yj3.png)
#### 刪除完後只會有自己編譯完後的kernel ( 此範例版本為 linux-image-5.13.12 )
![](https://hackmd.io/_uploads/rkeW88Ys2.png)
#### Kernel刪除完後，讓它安裝新的kernel，並重新啟動~
```
update-grub
reboot
```
![](https://hackmd.io/_uploads/SJpuL8Yon.png)
#### 再次重新開機後，請打下面的code來查看BBRv2是否有安裝成功且開啟。
```
sysctl net.ipv4.tcp_congestion_control
```
```
sysctl net.ipv4.tcp_available_congestion_control
```
![](https://hackmd.io/_uploads/SJwaU8Kj2.png)
#### 有看到 bbr 和 bbr2。
#### 順便檢查kernel版本，確定是要安裝的版本~
```
uname -r
```
![](https://hackmd.io/_uploads/HyHMvLYs2.png)

#### 這樣就安裝成功拉~

## 6. 開啟 ECN 

#### 輸入下面三行code，開啟ECN (請先進入root再輸入下面兩行)
```
sudo su
```
```
echo "net.ipv4.tcp_ecn = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_ecn_fallback = 1" >> /etc/sysctl.conf
```
#### 查看ECN 狀態 
```
sysctl -p
```
#### 看到顯示這個就代表成功瞜~
![](https://hackmd.io/_uploads/Syk6PLFon.png)

## 參考網址: 
1. Google TCP BBR V2从编译到食用完全指南 - https://ca-design.xyz/open-bbrv2/
2. 内核错误: No rule to make target ‘debian/canonical-certs.pem‘, needed by ‘certs/x509_certificate_list‘ - https://blog.csdn.net/qq_36393978/article/details/118157426
3.  Ubuntu 移除舊版本 Linux 核心 -
https://www.arthurtoday.com/2013/05/ubuntu-remove-all-older-linux-kernels.html
