TOA安装文档
背景
生产环境中客户走TCP转发的时候,有需要获取客户真实IP,这时候源站需要安装TOA模块
安装准备
- 准备TOA的模块的包。 TOA下载
- 确认内核与内核开发包是否一致。开发包下载 对应的系统版本进去路径为/7.4.1708/os/x86_64/Packages/kernel-devel-3.10.0-693.el7.x86_64.rpm
- 获取root权限或者sudo
安装步骤
- 查看自己的linux的版本已经内核版本
涉及的命令cat /etc/redhat-release
- 涉及的命令
unmae -r
- 首先把需要的包上传到源站。
涉及到的命令如下:
rz TCP_option_address-master.zip
unzip TCP_option_address-master.zip (解压模块包)
yum -y install make gcc (安装需要的依赖)
看到上面TCP_option的解压出来的包之后
开发包上传之后可以直接用yum安装rpm包
rz kernel-devel-3.10.0-693.el7.x86_64.rpm yum -y install kernel-devel-3.10.0-693.el7.x86_64.rpm (这个仅供参考不同的内核后缀不一样)
/usr/src/kernels/
下能看到你安装的内核开发包的文件夹
- 确保
/lib/modules/3.10.0-693.el7.x86_64/build
的软链接目录有效,无效操作如下
sudo ln -sv /usr/src/kernels/$(uname -r) ./build (例子:sudo ln -sv /usr/src/kernels/3.10.0-693.el7.x86_64 ./build)

- 接下来进入TCP_option_address-master这个文件夹中看到里面的`src`这个文件夹

进去之后会看到

在之后make即可

上图表示安装完毕,在`ls`一下会发现多出很多文件出来

我们主要看toa.ko即可,在当前文件夹上输入`insmod toa.ko` 之后`lsmod | grep toa`

看到上图 可以确定TOA安装成功。
## 出现的问题以及解决方式
- #### 错误1
加载TOA模块时出现以下错误 `insmod :error inserting './toa.ko': -1 Unknown symbol in module`
- ##### 解决:
- 获取kallsysms 值
key=$(grep sock_def_readable /proc/kallsyms | awk '{print $1}')
- 替换`toa.c`文件中`sk_data_ready_addr`变量(365行)的值
sk_data_ready_addr = 0x${key};
- 重新编译
make
- #### 错误2:编译时出现No such file or directory. Stop.就要注意/usr/src/kernels/$(name -r)是否存在对应的内核开发包