Introduction
这里主要介绍一下自己遇到的编译安装NetworkManager的一些问题,当然也适用于其他的源码包(可以通过 apt下载安装的)。
首先介绍一下我的目的吧。
我遇到的问题是,NetworkManager 在使用WiFi功能时是依赖于wpa_supplicant(WiFi连接认证管理软件)的,但是NetworkManager在调用wpa_suppliant是没有指定wpa_supplicant的配置文件路径,导致有一些功能无法使用。
所以现在需要修改NetworkManager的代码使其传递配置文件路径给wpa_supplicant。
Requirements
我所使用的环境是WSL Ubuntu 20.04 (验证环境, 实际问题是发生在在18.04物理机上)。
因此本文介绍的编译方法是基于(适用于)Debian 发行版的。
首先安装编译源码所依赖的一些工具包:
sudo apt install build-essential fakeroot devscripts
为了下载源码,我们需要将源码的镜像源(source repositories )添加到apt的仓库列表中:
编辑 /etc/apt/sources.list 文件:
将 deb-src 开头的行取消注释
long@Son:~$ cat /etc/apt/sources.list
# 默认注释了源码镜像(deb-src)以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
我这里将镜像源替换成了清华的。
修改之后更新一下镜像源列表
sudo apt update
Download Source Code
可以直接通过以下命令下载源码包
apt source network-manager
这将下载最新版本的源码包并解压
执行完命令后在当前文件夹将会生成三个文件(构成了一个debian源码包)以及一个文件夹(根据源码包解压得到的)
drwxr-xr-x 20 long long 4096 Jul 9 09:21 network-manager-1.22.10
-rw-r--r-- 1 long long 70812 Jan 19 03:24 network-manager_1.22.10-1ubuntu2.3.debian.tar.xz
-rw-r--r-- 1 long long 3374 Jan 19 03:24 network-manager_1.22.10-1ubuntu2.3.dsc
-rw-r--r-- 1 long long 4754868 Mar 13 2020 network-manager_1.22.10.orig.tar.xz
- network-manager-1.22.10 即为解压后的源码文件夹
- .orig.tar.* 原始代码压缩包(upstream tarball)
- .debian.tar* / .diff.gz 对upstream 修改的一个记录文件
- .dsc 描述文件,描述里源码包的一些参数信息以及两外两个文件的校验和
另外也可以通过 dget 和 debcheckout/origtargz 的方式进行安装指定版本的源码包,这里不详细介绍,感兴趣请参考Debian文档BuildingTutorial - Debian Wiki
Modify Source Code
进入解压后的源码目录,并修改源码。
cd network-manager-1.22.10
# 这里修改具体的代码
vim src/supplicant/nm-supplicant-interface.c
该源码包是通过 quilt 构建的(通过.dsc 文件中 “Format: 3.0 (quilt)” 字段确定),因此可以直接修改源码。(一开始使用dpatch出错,[SOLVED] dpatch-edit-patch problem - Debian User Forums)
然后通过以下命令(dpkg-source --commit)制作patch文件(如果是第一次执行会让你选择使用的编辑器)
根据提示输入patch的名字,然后就会跳转至patch文件的编辑界面,手动修改后保存退出即可。
此时patch已经生成在debian/patch目录下,并且自动添加在了debian/patches/series文件末尾以在编译时应用该patch。
long@Son:~/network-manager-1.22.10$ dpkg-source --commit
dpkg-source: info: using patch list from debian/patches/series
dpkg-source: info: local changes detected, the modified files are:
network-manager-1.22.10/src/supplicant/nm-supplicant-interface.c
Enter the desired patch name: haha.patch
dpkg-source: info: local changes have been recorded in a new patch: network-manager-1.22.10/debian/patches/haha.patch
Build deb package
安装编译依赖的库
sudo apt build-dep network-manager
通过以下命令将会在编译源码并构建出可以安装的deb软件包(位置在上一级目录下)
debuild -us -uc