如何构建自己的内核,为修订号版本增加+1?

我在使用Trusty的Linux 3.13遇到了一些困难,但这是另一个话题(http://www.mail-archive.com/ubuntu-server@lists.ubuntu.com/msg06775.html),所以我决定将Linux 3.16从Utopic回溯。
此外,我需要用我的GPG密钥签署我的Linux版本,并稍后将其上传到我的PPA,但首先,我无法将+1提升到Linux revision版本...有人能帮我吗?!
以下是手动回溯的步骤(不需要将+1提升到revision版本):
来源于:https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel 1- 将Utopic的deb-src添加到Trusty的sources.list中:
deb-src http://us.archive.ubuntu.com/ubuntu/ utopic main restricted universe multiverse

2- 运行以下命令:
mkdir ~/linux/source -p
cd ~/linux/source
sudo apt-get install fakeroot
sudo apt-get build-dep linux
apt-get source linux
cd linux-3.16.0/
debuild -uc -us
cd ..
sudo dpkg -i linux-headers-3.16.0-4_3.16.0-4.9_all.deb linux-headers-3.16.0-4-generic_3.16.0-4.9_amd64.deb linux-image-3.16.0-4-generic_3.16.0-4.9_amd64.deb linux-image-extra-3.16.0-4-generic_3.16.0-4.9_amd64.deb

3- 完成了!从Utopic编译和安装到Trusty的Linux 3.16!第一阶段完成...
但是现在,我需要将其“修订”版本提升到类似于“3.16.0-5.0”的形式。然后用我的GPG签名并上传到我的PPA。
为了实现这个目标,在编译和打包之前,我编辑了“debian changelog”文件:
cd linux-3.16.0/
vi debian.master/changelog

...要补充的是:

linux (3.16.0-5.0) trusty; urgency=low

  [ Thiago Martins ]

  * Backporting it to Trusty

 -- Thiago Martins <thiagocmartinsc@gmail.com.br>  Sat, 19 Jul 2014 20:42:13 -0300

现在,命令debuild无法打包它,进程接近结束时出现以下错误:
debuild
...
Use of uninitialized value $filename in concatenation (.) or string at /usr/share/perl5/Debian/Debhelper/Dh_Lib.pm line 410.
dh_systemd_start
Can't stat debian/linux-tools-3.16.0-5: No such file or directory
 at /usr/bin/dh_systemd_start line 127.
Can't stat debian/linux-cloud-tools-3.16.0-5: No such file or directory
 at /usr/bin/dh_systemd_start line 127.
Can't stat debian/linux-image-3.16.0-5-generic: No such file or directory
 at /usr/bin/dh_systemd_start line 127.
Can't stat debian/linux-image-extra-3.16.0-5-generic: No such file or directory
...
...
Can't stat debian/vlan-modules-3.16.0-5-generic-di: No such file or directory
 at /usr/bin/dh_systemd_start line 127.
Can't stat debian/ipmi-modules-3.16.0-5-generic-di: No such file or directory
 at /usr/bin/dh_systemd_start line 127.
Debug: install-indep
Debug: binary-indep
dh_installchangelogs -i
dh_installdocs -i
dh_compress -i
dh_fixperms -i
dh_installdeb -i
flock -w 60 /home/tmartins/linux/source/linux-3.16.0/debian/.LOCK dh_gencontrol -i
dh_md5sums -i
dh_builddeb -i
dpkg-deb: building package `linux-source-3.16.0' in `../linux-source-3.16.0_3.16.0-5.0_all.deb'.
dpkg-deb: building package `linux-doc' in `../linux-doc_3.16.0-5.0_all.deb'.
dpkg-deb: building package `linux-headers-3.16.0-5' in `../linux-headers-3.16.0-5_3.16.0-5.0_all.deb'.
dpkg-deb: building package `linux-tools-common' in `../linux-tools-common_3.16.0-5.0_all.deb'.
dpkg-deb: building package `linux-cloud-tools-common' in `../linux-cloud-tools-common_3.16.0-5.0_all.deb'.
Debug: install-perarch
# Add the tools.
...
...
dpkg-deb: building package `linux-tools-3.16.0-5' in `../linux-tools-3.16.0-5_3.16.0-5.0_amd64.deb'.
dh_strip -plinux-cloud-tools-3.16.0-5
dh_installchangelogs -plinux-cloud-tools-3.16.0-5
dh_installdocs -plinux-cloud-tools-3.16.0-5
dh_compress -plinux-cloud-tools-3.16.0-5
dh_fixperms -plinux-cloud-tools-3.16.0-5
dh_shlibdeps -plinux-cloud-tools-3.16.0-5
dh_installdeb -plinux-cloud-tools-3.16.0-5
flock -w 60 /home/tmartins/linux/source/linux-3.16.0/debian/.LOCK dh_gencontrol -plinux-cloud-tools-3.16.0-5
dh_md5sums -plinux-cloud-tools-3.16.0-5
dh_builddeb -plinux-cloud-tools-3.16.0-5
dpkg-deb: building package `linux-cloud-tools-3.16.0-5' in `../linux-cloud-tools-3.16.0-5_3.16.0-5.0_amd64.deb'.
Debug: module-check-generic
install -d /home/tmartins/linux/source/linux-3.16.0/debian.master/abi/3.16.0-5.0/amd64
find /home/tmartins/linux/source/linux-3.16.0/debian/build/build-generic/ -name \*.ko | \
                sed -e 's/.*\/\([^\/]*\)\.ko/\1/' | sort > /home/tmartins/linux/source/linux-3.16.0/debian.master/abi/3.16.0-5.0/amd64/generic.modules
II: Checking modules for generic...previous or current modules file missing!
   /home/tmartins/linux/source/linux-3.16.0/debian.master/abi/3.16.0-5.0/amd64/generic.modules
   /home/tmartins/linux/source/linux-3.16.0/debian.master/abi/3.16.0-4.9/amd64/generic.modules
make: *** [module-check-generic] Error 1
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2
debuild: fatal error at line 1364:
dpkg-buildpackage -rfakeroot -D -us -uc failed

我还需要做哪些改动才能将我的Linux发行版本从4.9提升到5.0?这样,debuild过程就能顺利完成了…我觉得可能与abi有关,但我不是Ubuntu Linux内核维护者(或者程序员),所以不知道该如何继续下一步...

非常感谢任何帮助!

提前致谢!


看到这些错误,我猜问题的一半可能是源代码所在的目录名可能会被称为*3.16.0-4,而不是根据你的更改期望的*3.16.0-5版本。另一个可能的问题是*3.16.0-5将需要与该版本匹配的依赖项,这些依赖项可能不存在或不兼容... 注意:使用Utopic的现有软件包可能有效 - 我曾经在Fedora 19中成功安装了Fedora 20内核(但不适用于Ubuntu)。 - Wilf
你绝对需要做一个+1吗?你可以改为附加~1~被认为小于任何东西),这样版本字符串就会变成3.16.0-4.9~1。你还可以查看ubuntu-dev-tools软件包中的backportpackage工具,它自动化了将软件包回溯的过程,调整版本号使新软件包位于Trusty和Utopic之间,并将其上传到PPA(如果你愿意的话)。在本地保存源代码包的语法将是backportpackage -s utopic -d trusty -w . --dont-sign linux - saiarcot895
好的观点!我现在正在尝试4.9.1...我会看一下ubuntu-dev-tools...谢谢!^_^ - ThiagoCMC
将其升级到“4.9.1”也没有成功,现在尝试使用“4.9~1”...接下来,我将尝试“backportpackage -b -s utopic -d trusty -w . linux”。 - ThiagoCMC
将其调整为"4.9~1"也没有起作用... :-( - ThiagoCMC
2个回答

构建在模块检查时失败,我认为是因为/home/tmartins/linux/source/linux-3.16.0/debian.master/abi/3.16.0-4.9不存在。您可以通过使用skipmodule=true参数跳过检查。当我使用fakeroot debian/rules进行构建时,我会这样做:
$ fakeroot debian/rules binary-headers binary-generic skipmodule=true

这个参数也应该适用于debuild
但是在后期阶段,构建可能会再次在ABI检查时失败,所以你还需要使用skipabi=true,完整的命令将变成:
$ fakeroot debian/rules binary-headers binary-generic skipmodule=true skipabi=true

尝试构建自己的Ubuntu内核时,我遇到了相同的错误。
我已经更新了debian.master/changelog为:
linux (3.13.0-107.154+studog-01) trusty; urgency=low

构建失败(改述,我丢失了原始输出):
find /home/studog/linux-3.16.0/debian/build/build-generic/ -name \*.ko | \
            sed -e 's/.*\/\([^\/]*\)\.ko/\1/' | sort > /home/studog/linux-3.16.0/debian.master/abi/3.16.0-studog-0.0/amd64/generic.modules
II: Checking modules for generic...previous or current modules file missing!

注意,尽管正确的路径(debian.master/abi/3.13.0-107.154+studog-01)确实存在,但在尝试的路径引用中,外向性并不完全正确。我将更改日志为以下内容。
linux (3.13.0-107.154+studog01) trusty; urgency=low

而且它起作用了。看起来构建系统不喜欢包含破折号的额外版本。
Anthony Wong的解决方法,使用skipmodule和skipabi也可以纠正这个问题,但我更喜欢改变额外版本。