0%

ubuntu打包

1. Introduction to Ubuntu Development — Ubuntu Packaging Guide

先读一遍

总之ubuntu各种软件包,一部分是 code 一部分是 meta,meta包含各种信息。所以要上传到 luanch pad 服务器去build?

upstream:并非 ubuntu 写的,由其他社区出品整合到正统的东西,ubuntu最大的上游是debian

去贡献不可怕,可是我真的好害怕qwq

设置环境

$ sudo apt install gnupg pbuilder ubuntu-dev-tools apt-file

安装这一堆,然后就可以搞密钥了……我总算知道那个utility是干嘛的了

具体看那边怎么说嗯

gen 一个 gpg key $ gpg --gen-key

然后发送

1
2
3
4
pub   4096R/43CDE61D 2010-12-06
Key fingerprint = 5C28 0144 FB08 91C0 2CF3 37AC 6F0B F90F 43CD E61D
uid Daniel Holbach <dh@mailempfang.de>
sub 4096R/51FBE68C 2010-12-06

43CDE61D 是 KEY ID

$ gpg --send-keys --keyserver keyserver.ubuntu.com <KEY ID>

然后ubuntu 的 utility 会自动帮你同步来着……不知道到底存储到哪里了hhh

之后使用 pbuilder 创建最小干净的环境

$ pbuilder-dist <release> create

pbuilder-dist focal create 这样就是创造一个20.04的环境

上传 gpg key

嘛,然后查看 gpg 的签名,一般来说用 utility 里面的 passwords and keys 就可以,也可以这样

gpg --fingerprint email@address.com

然后在OpenID transaction in progress 上传fingerprint,会给你的邮箱发出需要解密的邮件,thunderbird 安装 Enigmail plugin

The Enigmail add-on was replaced with built-in support for OpenPGP in Thunderbird 78.

哦已经内嵌 support 了,好耶

然后顺便上传 ssh,https://launchpad.net/~/+editsshkeys,跟 github 一样,上传 ~/.ssh/id_rsa.pub 的公钥

设置环境变量
1
2
export DEBFULLNAME="Bob Dobbs"
export DEBEMAIL="subgenius@example.com"

像这个样子,修改 ~/.bashrc 文件

打包软件

再等等,似乎要先创建 pbuilder 的环境,不过先打包一次试试看好了

拓展:bzr 是什么呢? canonical 的文件管理系统

下载来自上游的tar(我们将软件作者叫作上游)然后编译。

所以要复习一下 c 程序的编译嘞

1
2
3
4
5
6
7
8
9
10
11
$ ./configure

Now you can compile the source:

$ make

If compilation completes successfully you can install and run the program:

$ sudo make install

$ hello

然后开始打包,首先使用 bzr-builddeb

我就说不会那么简单的,首先要说你是谁

brz whoami "name <email addr>" 这样

bzr dh-make hello 2.10 hello-2.10.tar.gz

执行这个然后可能会出现 brz: ERROR: Either run the command from an existing branch of upstream, or move hello aside and a new branch will be created there.

这是因为它要展开后面的tar,但是当前目录下已经有了 hello-2.10,所以把这个hello-2.10 删掉就可以了.

选择type s

然后进入 hello/debian 选择 changelog,修改成这样

1
2
3
4
5
6
hello (2.10-11ubuntu20.04) focal; urgency=medium

* Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP>

-- acyanbird <acyanbird@gmail.com> Mon, 18 Jul 2022 00:54:26 +0100

嗯,变括号里面的版本号,11是debian版本,然后 ubstable 变成 focal

然后改depends,更改 control 文件

Build-Depends: debhelper (>= 9), texinfo

然后记录修改,感觉和 git 差不多来着

1
2
$ bzr add debian/source/format
$ bzr commit -m "Initial commit of Debian packaging."

嗯遇到了一系列问题,首先是 textinfo unmet,那么就安装依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/make -f
# See debhelper(7) (uncomment to enable)
# output every command that modifies files on the build system.
#export DH_VERBOSE = 1


# see FEATURE AREAS in dpkg-buildflags(1)
#export DEB_BUILD_MAINT_OPTIONS = hardening=+all

# see ENVIRONMENT in dpkg-buildflags(1)
# package maintainers to append CFLAGS
#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic
# package maintainers to append LDFLAGS
#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed


%:
dh $@


# dh_make generated override targets
# This is example for Cmake (See https://bugs.debian.org/641051 )
#override_dh_auto_configure:
# dh_auto_configure -- # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH
#)

override_dh_auto_clean:
[ -f Makefile ] || ./configure
dh_auto_clean

把 override 加上去,前面是一个 tab

然后打包 bzr builddeb -- -us -uc ,之后你能在上一个目录找到它,就可以尝试安装了

sudo dpkg --install hello_2.10-0ubuntu1_amd64.deb

通过这俩检查 package 是否正常,dsc 是 metadata file

1
2
$ lintian hello_2.10-0ubuntu1.dsc
$ lintian hello_2.10-0ubuntu1_amd64.deb

后面加上 –info 可以看具体报错,lintian-info 似乎出错了来着……看能否报告bug

然后就是把要改的template好好修改一下

bzr builddeb -- -us -uc 这个应该要在根目录,也就是 hello 下面,再 加上nc not clean,这次更快一点

糟糕,图省事在 hello 下面直接 commit,这下变成了生产环境了……完蛋,重来罢