《铜豌豆 Linux》是开源项目,所有内容全部开放源代码,欢迎参与开发。本页介绍提交源代码、参与打包和相关开发的信息。

提示

在参与开发之前,你想了解的问题可能已经有答案:可以浏览使用技巧常见问题,或者跟铜豌豆社群联系

代码仓库地址

项目开发在码云进行,项目首页:https://gitee.com/atzlinux/

内容 仓库地址
网站、一键安装脚本 https://gitee.com/atzlinux/www
软件包 https://gitee.com/atzlinux/软件包名称
iso 制作 https://gitee.com/atzlinux/debian-cn(目前使用 deb11、arm 分支)

2020-12-28,项目创建的第一个仓库在码云获赞超过 100 star,欢迎继续前往点赞加星

开发动态

  • 项目下所有仓库的动态(各软件包仓库的提交、Issue、Pull Request),看这里: https://gitee.com/organizations/atzlinux/events
  • 主仓库 debian-cn 的实时动态(Star / Fork 数、最新 Issue、最近提交、分支):

开发者与权限

以上 git 仓库,对积极的开发者都可以授予读写权限。码云仓库权限分为管理员、开发者等角色,铜豌豆项目成员相应分为两个角色:

  • 铜豌豆开发者:制作的软件包经过审核、符合 Debian 质量要求、上传到铜豌豆软件源后,制作者即成为「铜豌豆开发者」, 从而具备项目下所有仓库的「码云开发者」权限,可以对所有仓库提交代码修改。
  • 铜豌豆包维护者:在码云新建某个软件包仓库后,该开源项目的上游负责人及软件包制作者即「铜豌豆包维护者」,具备该仓库的「码云管理员」权限。

反馈问题与需求

  • 各个软件包、网站的问题与需求:请到各子仓库的 Issues 新建 Issue。
  • 系统整体性的问题与需求:请到主仓库 debian-cn 反馈,欢迎大家积极定位与解决已知问题。
  • 更复杂的情况,例如公益团体、校园团体、深入修改配适、商业服务合作定制等,欢迎向我们的开发者咨询

邮件列表也欢迎加入:[2020/11/08] 铜豌豆邮件列表开通

开发和发布的准备

请先在码云注册账号并关注你希望参与的仓库,然后安装 iso 版本的《铜豌豆 Linux》,再按下表安装开发工具。

安装各类开发工具(按 Debian 版本三选一)

通用命令:

bash
apt-get -y install --no-install-recommends -t buster-backports git git-buildpackage \
  dpkg-dev debhelper dh-make dh-runit devscripts dh-autoreconf quilt lintian lintian-brush \
  dh-exec dgit dupload debmake dh-make-perl pristine-tar debconf-utils debsums \
  build-essential:native dh-python libdistro-info-perl strace vim-scripts blhc reprotest \
  appstream-util apt-file libncurses-dev bison flex libssl-dev pkg-kde-tools reportbug licensecheck

在 Debian 11 下:

bash
apt-get -y install --no-install-recommends -t bullseye-backports git git-buildpackage \
  dpkg-dev debhelper dh-make dh-runit devscripts dh-autoreconf quilt lintian dh-exec dgit \
  dupload debmake pristine-tar debconf-utils debsums build-essential:native dh-python \
  libdistro-info-perl strace vim-scripts ubuntu-dev-tools blhc reprotest appstream-util \
  apt-file libncurses-dev bison flex libssl-dev pkg-kde-tools reportbug cmake licensecheck \
  libgit-wrapper-perl libstring-shellquote-perl atzlinux-deb-template tools-atzlinux-dev \
  libclass-inspector-perl wlc

在 Debian 12 下:

bash
apt-get -y install --no-install-recommends -t bookworm-backports git git-buildpackage \
  dpkg-dev debhelper dh-make dh-runit devscripts dh-autoreconf quilt lintian dh-exec dgit \
  dupload debmake pristine-tar debconf-utils debsums build-essential:native dh-python \
  libdistro-info-perl strace vim-scripts ubuntu-dev-tools blhc reprotest appstream-util \
  apt-file libncurses-dev bison flex libssl-dev pkg-kde-tools reportbug cmake licensecheck \
  libgit-wrapper-perl libstring-shellquote-perl atzlinux-deb-template tools-atzlinux-dev \
  tools-atzlinux tools-atzlinux-dev-conf libclass-inspector-perl wlc libsoap-lite-perl routine-update

制作与集成软件包

新增加的软件包需求,可以是第三方已经制作好的 deb 包(在《铜豌豆 Linux》上经测试能稳定运行、没有其他问题), 也可以是原先没有合适 deb 包、需要自行打包制作后再集成到铜豌豆生态的。

第三方软件包的控制与集成:请到 https://gitee.com/atzlinux/debian-cn/issues/I13NQT 按模板提需求。

本地制作软件包

软件包制作推荐参考以下文档:

以上 4 个文档均可在本地安装相应软件包阅读:

bash
apt -y install maint-guide-zh-cn debmake-doc debian-policy developers-reference

gbp 命令文档已随 git-buildpackage 软件包安装,路径为:

file:///usr/share/doc/git-buildpackage/manual-html/index.html

软件包在本地制作成功后,请用 lintian 命令检查 deb 包是否有各类问题。lintian 检查通过后, 请通知开发者进行进一步的测试验证,线下联系、邮件或者微信均可。

开发者将会在码云新建软件仓库并授予该仓库相关权限。从其它软件包仓库拷贝 debian 目录、 参照修改后,如果没有问题就会上传到 apt 软件源。

提示

可以安装 bullseye-backports 版本的 lintian 软件包,其版本比较新,有利于发现更多打包错误。

bash
apt -y install lintian/bullseye-backports
开源项目制作 deb 包

如果现有的中文桌面应用开源项目目前还没有 deb 包,也欢迎联系制作打包。在现有项目下增加一个 debian 目录,即可实现打包。

也可以把现有项目作为仓库上游,在铜豌豆码云仓库 Fork 一份,铜豌豆的仓库增加 debian 目录专门处理打包相关代码, 上游有新版本 merge 移植过来即可。

软件包命名规则

铜豌豆相关命名也尽量遵循 Debian 规则。一个常见的 deb 包,其文件名由软件包名、版本号、架构、类型组成,如:

v2ray_4.22.1-2020.02.07atzlinux_amd64.deb
按来源分类的命名规则(第三方 / 铜豌豆制作 / 原生 / Debian 官方)

第三方软件包

从其它发行版或者第三方直接收录的 deb 软件包。尽量不修改软件包文件名,对不符合 Debian 规范的部分可以最小限度地修改, 如将文件名改成以 _amd64.deb 结尾。

建议使用 dpkg-name 命令进行规范化改名。对于文件名中含有 latest 字符串来表示版本号的,可以将最新版本使用该名称, 历史版本恢复其版本号。

该类软件包不需要在 https://gitee.com/atzlinux/projects 创建 git 仓库。

铜豌豆制作软件包

软件项目原来没有 deb 格式的软件包,或者原有 deb 包需要做修改、重新打包后才可以在铜豌豆上使用的软件包。

在原有版本号后面加上后缀,规则如下:

  • ~日期atzlinux:英文波浪号 + 8 位年月日数字(中间不包含点或中划线)+ atzlinux 字符串。适合 Debian 官方软件包有 NMU 上传的情况。
  • .日期atzlinux:英文句号 + 8 位年月日数字 + atzlinux 字符串。适合 Debian 官方软件包没有 NMU 上传的情况。
  • -日期atzlinux:英文中划线 + 8 位年月日数字 + atzlinux 字符串。适合第三方软件包、铜豌豆率先制作的情况。

如果同一天有发布多个版本,可以在 atzlinux 后面加数字。

debian/source/format 文件内容为 3.0 (quilt),生成的源代码压缩包文件有两个:一个包含 orig 字样、以 orig.tar.xz 结尾, 另一个以 .debian.tar.xz 结尾。该类软件包需要在 https://gitee.com/atzlinux/projects 创建 git 仓库。

铜豌豆原生软件包

由铜豌豆项目自身新制作的软件包。

软件包名需要在最前面或者最后面有 atzlinux 字符串,和其它字符串中间用英文中划线 - 隔开;源代码包的包名可以不包含 atzlinux 字符串。

版本号从 1.0.0 开始(部分老软件是带点的日期)。因此类软件包的包名中已经有 atzlinux 字符串,所以版本号中不需要再包含。

debian/source/format 文件内容为 3.0 (native),生成的源代码压缩包文件只有一个,不含 orig 字样, 也没有以 .debian.tar.xz 结尾的压缩文件。

该类软件包需要在 https://gitee.com/organizations/atzlinux/projects 创建 git 仓库。打包制作过程中的问题可以在铜豌豆开发者群里面讨论。

Debian 官方软件包

由铜豌豆项目成员维护的 Debian 官方软件包,命名优先使用 Debian 官方规则,软件包名称或者版本号可以酌情带上 atz、atzlinux 字符串。

该类软件包不需要在 https://gitee.com/atzlinux/projects 创建 git 仓库,继续使用 Debian 的 salsa git 仓库即可。

对于铜豌豆软件源使用的 Debian 官方软件包有少量差异、需要重新打包的情况,在现有 salsa git 仓库里面创建 atzlinux/latest 分支进行维护。

源代码获取

铜豌豆自己打包的软件,其代码均按 Debian 规范公开放置,可以用 Debian 通用源代码获取工具下载。

/etc/apt/sources.list 添加铜豌豆软件包源代码下载源,然后运行 apt update

deb-src https://apt.atzlinux.com/atzlinux bullseye main contrib non-free
  • 下载软件包当前已发布版本源代码:apt source pkgname
  • 下载软件包最新 git 代码:debcheckout pkgname
  • 下载软件包最新 git 代码并设置好提交权限:debcheckout -a pkgname

Debian 官方软件包源代码可以通过以上类似方式获取,其源代码下载源建议使用 sid 代号:

deb-src https://mirrors.bfsu.edu.cn/debian sid main contrib non-free

相关开发命令及工具

说明

下列所提到的命令,均在 git 仓库检出的源代码目录下运行。

下面按「环境准备 → 打包命令 → 打包后检查」的顺序列出常用配置与命令,按需展开即可。

环境变量与 devscripts 配置

可以在用户目录的 .bashrc 文件里面增加 deb 包制作相关环境变量:

bash
DEBEMAIL="username@atzlinux.com"
DEBFULLNAME="姓名"
DEB_SIGN_KEYID="gpg id"
export DEBEMAIL DEBFULLNAME DEB_SIGN_KEYID

git、gpg 签名、debian/changelog 等地方需要用到的姓名、email 地址,请尽可能保持一致。

其它推荐设置:

bash
export EDITOR="vim"        # 设置 vi 默认使用 vi 增强版 vim 打开
export GPG_TTY=$(tty)      # 设置 gpg 终端,否则无法使用 git 签名提交等功能

因 devscripts 里给包签名的命令 debsign 不支持环境变量,需要在 /etc/devscripts.conf 或用户目录 ~/.devscripts 里设置:

DEBSIGN_ALWAYS_RESIGN=yes
DEBSIGN_KEYID="BB97304EFD6634C7D4D36AB62F338C7DC7909957"
注意

devscripts 在其配置文件里面的变量设置,和在用户目录 .bashrc 里面的环境变量设置不共享

devscripts 软件包里的工具会调用其配置文件中的变量;其它打包工具则会调用通过 .bashrc 等文件设置的变量。

git 与打包命令一览
命令 说明
apt-get build-dep source-package 安装源代码打包所需要的依赖包
apt build-dep . 进入源代码目录运行,直接安装该软件包打包所需要的依赖包
dpkg-source --before-build . 应用 debian 目录下的补丁,得到用于编译的源代码
dpkg-source --commit 修改源代码后,将代码改动直接制作为 debian 目录下的补丁文件
dpkg-buildpackage 打包命令,在 git 仓库检出目录下运行即可
dh_clean 清理打包过程中由 debhelper 系列脚本产生的文件
dh_auto_clean 调用 Makefile 的 distclean、realclean、clean 清理编译过程中的文件
debuild -- clean / debclean 调用 debian/rules clean 清理,并清理 debian/clean 中列出的文件
gbp buildpackage 使用 git-buildpackage 制作软件包,结束后自动调用 lintian 检查
gbp dch 把 git commit 日志自动记录到 debian/changelog,并生成新的版本号
gbp export-orig 对第三方软件包的 git 仓库,生成当前 git 仓库的源代码包
origtargz 自动尝试各种方式获取用于打包的上游源代码压缩包
apt download --print-uris pkgname 获取软件包在 apt 软件源上的信息、下载 URL、大小、校验和等
注意

最新版本的 deb 包制作相关文件、对上游源代码的修改等,全部放在 debian 目录下,均不直接修改上游代码文件。

这样做的好处是可以维持上游代码清晰、维持 Debian 的改动清晰,同时可以实现自动化跟踪上游版本的变化。

bash
git add debian/filename.patch
git commit debian/

请只提交 debian 目录下的相关文件,不需要直接修改 git 仓库根目录下的源代码文件,避免打包命令报源代码改动错误。

gbp.conf 配置与打包后清理

/etc/git-buildpackage/gbp.conf 的默认设置不会在打包前清理上次编译遗留的中间文件,导致 gbp buildpackage 报错。 在该配置文件里加上如下设置,让打包命令每次自动执行清理:

cleaner = fakeroot debian/rules clean
说明

一个软件包 git 仓库,在用 dpkg-buildpackage 制作完成 deb 包后,执行 dh_clean; dh_auto_clean 之后, 该目录应当恢复到刚 git pull 时的状态,git diffgit status 不应提示代码或文件变化。

如有未清理干净的文件和目录,可以用如下方式解决:

  • 给源代码 Makefile 打补丁增加 clean 条目
  • debian/rules 里使用 override_dh_clean:,直接用 rm 命令删除
  • debian/clean 里列出(推荐使用该方式)
lintian 详细输出

lintian 的默认配置输出不详细,可以这样获得更详细的检查结果。

在用户目录 .bashrc 里增加别名:

bash
alias lintian="lintian -I --pedantic -E"

或者在用户目录下增加 lintian 配置文件 .lintianrc(推荐使用该方式):

display-info = yes
display-experimental = yes
pedantic = yes

在打包完成后的源代码目录下可以直接运行 lintian 检查打包情况。lintian-explain-tags 命令可以显示 lintian 报错信息标签的详细描述。

vim debPlugin 插件(查看 deb 包内容)

vim 编辑器安装 debPlugin 插件后,可以直接打开查看 deb 软件包里面的内容。

bash
apt install vim-scripts
  • Debian 10apt install vim-addon-manager 安装插件管理软件包,vim-addons install debPlugin 在当前用户下安装插件, vim-addons -w install debPlugin 在整个系统安装插件。
  • Debian 11:手工修改用户目录下的 .vimrc 文件,添加 packadd! debPlugin

同时兼容 Debian 10 和 Debian 11 的写法:

vim
if version >= "802"
    packadd! debPlugin
endif
参考信息