Ubuntu 下从源码编译 NetworkManager (打 patch)

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

Reference

BuildingTutorial - Debian Wiki

[SOLVED] dpatch-edit-patch problem - Debian User Forums

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值