ubuntu是开源系统,系统里的所有package也都是开源的,如何方便的获取package的source code?
1. 修改/etc/apt/sources.list,打开deb-src (默认是注释掉的)
2. 更新src source的源
$sudo apt update
3. 获取package 名字
在获取source code之前,你需要知道package的名字,可以通过dpkg -l的方式查看。如果你不知道包名,只知道包安装以后文件的位置,可以先通过这些文件获取包名。这些文件可以是so,bin,甚至是头文件。举几个例子,比如我们想获取Xserver的package名字:
a) 通过dpkg -l查看
$dpkg -l | grep xserver
可以看到xserver-xorg-core-hwe-16.04,这个就是包名
b)通过命令查找包名
$which Xorg
/usr/bin/Xorg
$dpkg -S /usr/bin/Xorg
xserver-xorg-core-hwe-16.04: /usr/bin/Xorg
你甚至可以通过头文件来找到对应的package,比如:
$dpkg -S /usr/include/drm/drm.h
linux-libc-dev:amd64:/usr/include/drm/drm.h
输出:
linux-libc-dev就是package 名字。
4. 根据package名字获取source code
$apt source xserver-xorg-core-hwe-16.04
通过这种方式获取的source code会自动帮你解压。
如果apt source这种方法有问题,那么可以手动去发行版的网站上下载package的source code,这里仍然以ubuntu 16.04的xserver为例。ubuntu的source code都在launchpad上:
package直接搜索xserver-xorg,找到后进入:
https://launchpad.net/ubuntu/+source/xorg-server
ubuntu 16.04的发行版代号是 xenial,目前的最新版是1.18.4,点进去
https://launchpad.net/ubuntu/+source/xorg-server/2:1.18.4-0ubuntu0.8
Downloads那里就可以下载source code了,注意要下载三个文件,一个都不能少。
File | Size | SHA-256 Checksum |
---|---|---|
xorg-server_1.18.4.orig.tar.gz | 8.0 MiB | 4ba0e6c2c96650f1d1606572196143054005eb88d31c33b15a81d50886f26713 |
xorg-server_1.18.4-0ubuntu0.8.diff.gz | 316.3 KiB | bc2ae3f1f64796688f1c0c4166fc04a5a0a196936dbda3f753bdb8b5508dab68 |
xorg-server_1.18.4-0ubuntu0.8.dsc | 5.0 KiB | 348252eff7d774c35712a1e142929d7c7efe86f7be0d1c6bf0ea31ecbfa85bfc |
下载完以后,进入文件目录,运行命令解压source code:
$dpkg-source -x *.dsc
效果和apt source是一样的。
拿到source code以后你可能需要修改source code并重新生成包。发行版对应的source code都是用quilt来管理,所以需要通过quilt来修改code,具体方法可以参考这篇文章。