Termux-Packages 创建一个新包 - 中文版
阅前必看
如果你是个小白,建议直接去提issues,查看这里了解如何提交包请求。
一般要求
- 没有需要root的操作
- 没有添加/删除/修改等操作
$TERMUX_PREFIX
目录之外的文件 - 脚本必须按照编码指南来编写
编写一个新的包脚本
包脚本(aka build.sh
)是一个Bash
脚本,其中包含元数据定义(如果有)和Termux 构建系统如何构建包的说明。这个脚本由内部使用./build-package.sh
并且不是独立的:https://github.com/termux/termux-packages/wiki/Building-packages#understanding-build-process
一个简单的栗子:
# 软件包主页,最好用https
TERMUX_PKG_HOMEPAGE=https://www.gnu.org/software/bc/
# 一行(最好),简短的描述,不需要末尾的 .(英文句号)
TERMUX_PKG_DESCRIPTION="Arbitrary precision numeric processing language"
# 开源许可证
TERMUX_PKG_LICENSE="GPL-3.0"
# 谁维护这个包
# 如果您想维护包裹,修复其错误等,清指定自己 (Github昵称, 或 你的名字 + 你的邮箱) ,否则就用默认的 "@termux".
# 请注意,不允许非官方存储库将@termux作为其维护者!
TERMUX_PKG_MAINTAINER="@termux"
# 包最新版本
TERMUX_PKG_VERSION=1.07.1
# 源代码的下载URL
TERMUX_PKG_SRCURL=https://mirrors.kernel.org/gnu/bc/bc-${TERMUX_PKG_VERSION}.tar.gz
# 源代码压缩包的SHA256
# Windows:certutil -hashfile 压缩包位置 SHA256
# Linux: sha256sum 压缩包位置
TERMUX_PKG_SHA256=62adfca89b0a1c0164c2cdca59ca210c1d44c3ffc46daf9931cf4942664cb02a
在提交PR的时候要把注释删掉!
请注意,上面显示的字段顺序是首选的。在上面的示例中,也没有预期的构建步骤覆盖,内部的步骤足以成功构建包。
./build-package.sh
可以自动检测以下构建系统:
- Autotools
- CMake
- Meson
- Haskell(或cabal)
如果你要打包Haskell编写的包,看这里:https://github.com/termux/termux-packages/wiki/Haskell-package-guidelines
如果您需要传递一些额外的参数,请使用TERMUX_PKG_EXTRA_CONFIGURE_ARGS
。
另外,请参考这个启用这个软件包的自动更新:https://github.com/termux/termux-packages/wiki/Auto-updating-packages
可用包的控制字段表
顺序 | 变量 | 是否需要 | 描述 |
---|---|---|---|
1 | TERMUX_PKG_HOMEPAGE | yes | 包主页URL |
2 | TERMUX_PKG_DESCRIPTION | yes | 一行,简短的描述 |
3 | TERMUX_PKG_LICENSE | yes | 包许可证 |
4 | TERMUX_PKG_LICENSE_FILE | no | 许可证文件名, 如果没有找到许可证文件就要指定 |
5 | TERMUX_PKG_MAINTAINER | no | 包维护者 |
6 | TERMUX_PKG_API_LEVEL | no | 指定Android API级别 |
7 | TERMUX_PKG_VERSION | yes | 原始包脚本 |
8 | TERMUX_PKG_REVISION | no | 包修订, 每次包重建时都要修改。 |
9 | TERMUX_PKG_SKIP_SRC_EXTRACT | no | 跳过源码包解压 默认是false |
10 | TERMUX_PKG_SRCURL | not, 如果跳过下载源代码 | 源代码的下载URL,或者以.git 结尾的URL |
11 | TERMUX_PKG_SHA256 | not, 如果源代码URL没有设置 | SHA 256校验和 |
12 | TERMUX_PKG_GIT_BRANCH | no | 指定要git的分支 默认是v$TERMUX_PKG_VERSION |
13 | TERMUX_PKG_METAPACKAGE | no | 是否将包视为元包 默认是false. |
14 | TERMUX_PKG_DEPENDS | no | 包依赖列表,用英文逗号分隔 |
15 | TERMUX_PKG_BUILD_DEPENDS | no | 构建包时需要的依赖列表,也是用英文逗号分隔 |
16 | TERMUX_PKG_BREAKS | no | 与当前包不兼容的包的列表,也是用英文逗号分隔 |
17 | TERMUX_PKG_CONFLICTS | no | 文件名与当前文件名冲突的包的列表,也是用英文逗号分隔 |
18 | TERMUX_PKG_REPLACES | no | 由当前文件包替换的文件包列表,也是用英文逗号分隔 |
19 | TERMUX_PKG_PROVIDES | no | 当前软件包提供的虚拟软件包列表,也是用英文逗号分隔 |
20 | TERMUX_PKG_RECOMMENDS | no | 以英文逗号分隔的非绝对依赖项列表-包通常与当前包一起使用 |
21 | TERMUX_PKG_SUGGESTS | no | 与当前包相关或可以增强当前包的列表,也是用英文逗号分隔 |
22 | TERMUX_PKG_ESSENTIAL | no | 是否将无法按常规方式卸载的软件包并且视为必需软件包,默认是false. |
23 | TERMUX_PKG_NO_STATICSPLIT | no | 是否将静态库拆分为子包, 默认是false. |
24 | TERMUX_PKG_STATICSPLIT_EXTRA_PATTERNS | no | 要包含在静态包中的额外模式,它必须与$TERMUX_PREFIX 相关,栗子: 包含来自 $TERMUX_PREFIX/lib 的 *.h 文件,指定 lib/*.h ,可以使用bash-globstar模式递归子目录 |
25 | TERMUX_PKG_IS_HASKELL_LIB | no | 包是否为haskell库,默认是false |
26 | TERMUX_PKG_BUILD_IN_SRC | no | 是否在源代码目录中执行构建,默认是false |
27 | TERMUX_PKG_HAS_DEBUG | no | 包是否可以Debug,默认是true. |
28 | TERMUX_PKG_PLATFORM_INDEPENDENT | no | |
29 | TERMUX_PKG_BLACKLISTED_ARCHES | no | 架构黑名单,指定哪些架构不能跑这个软件包 |
30 | TERMUX_PKG_HOSTBUILD | no | 包是否需要为“主机构建”,默认是false. |
31 | TERMUX_PKG_FORCE_CMAKE | no | 强制使用CMake,默认是false. |
32 | TERMUX_PKG_EXTRA_CONFIGURE_ARGS | no | 传递给构建系统配置程序的额外参数 |
33 | TERMUX_PKG_EXTRA_HOSTBUILD_CONFIGURE_ARGS | no | 执行主机构建时传递给生成系统配置程序的额外参数 |
34 | TERMUX_PKG_EXTRA_MAKE_ARGS | no | 传递给make 的额外参数 |
35 | TERMUX_PKG_MAKE_INSTALL_TARGET | no | 等效于安装过程中传递给实用程序make 的install 参数 |
36 | TERMUX_PKG_RM_AFTER_INSTALL | no | 安装过程后要删除的文件列表 |
37 | TERMUX_PKG_CONFFILES | no | 以空格或换行符分隔的包配置文件列表,更新时不应覆盖这些文件 |
38 | TERMUX_PKG_SERVICE_SCRIPT | no | 偶数长度的数组,包含用于termux-services/runit的守护进程名称和脚本 |
可用的构建步骤覆盖表
所有构建步骤的完整参考可在Building packages中找到。
顺序 | 函数名 | 描述 |
---|---|---|
1 | termux_step_get_source | 获取包源代码并将其保存到$TERMUX_PKG_SRCDIR |
2 | termux_step_post_get_source | 钩子在获得源代码后立刻运行的命令 |
3 | termux_step_handle_host_build | 确定是否需要主机构建。 |
4 | termux_step_host_build | 执行主机构建 |
5 | termux_step_pre_configure | 钩子在configure配置之前运行的命令 |
6 | termux_step_configure | 配置configure,默认情况下,它会自动确定构建系统 |
7 | termux_step_post_configure | 钩子在配置后立刻运行的命令 |
8 | termux_step_make | 构建源代码 |
9 | termux_step_make_install | 安装构建之后的程序 |
10 | termux_step_post_make_install | 钩子在安装后立刻运行的命令 |
11 | termux_step_install_license | 将特定于软件包的许可证链接或复制到 ./share/doc/$TERMUX_PKG_NAME . |
12 | termux_step_post_massage | 创建*.deb 文件之前的最后一个钩子 |
13 | termux_step_create_debscripts | 在此步骤中,你可以创建 ./preinst, ./postinst, ./prerm 或 ./postrm 将在包安装或删除期间执行的脚本 |
编写子包脚本
子包定义通常用于将安装的可选部分移动到一个单独的包。例如,一些库附带的实用程序可能一些用户不需要使用。因此,我们可以将这些实用程序移动到一个单独的包中。并且在lib包作为依赖项安装的情况下减小安装尺寸。
最小的子包脚本由以下字段组成:
TERMUX_SUBPKG_DESCRIPTION= # 描述
TERMUX_SUBPKG_INCLUDE="" # 要包含在子包中的文件列表(空格或换行符分隔)
由于包含列表可能很长,因此优选上述顺序。
子包脚本必须与build.sh
和文件位于同一目录中。
名称的格式如下:
{子包名称}.subpackage.sh
请注意,其名称不能与父包的名称相同。
关于子包的其他说明:
- 子包的版本跟父包一样。
- 静态库的子包是自动创建的。
子包控制字段表
顺序 | 变量 | 是否需要 | 描述 |
---|---|---|---|
1 | TERMUX_SUBPKG_DESCRIPTION | yes | 一行,简短的描述 |
2 | TERMUX_SUBPKG_DEPEND_ON_PARENT | no | 指定子包依赖于父包的方式。见 子包依赖 获取更多信息 |
3 | TERMUX_SUBPKG_DEPENDS | no | 子包依赖项,用英文逗号分隔 |
4 | TERMUX_SUBPKG_BREAKS | no | 与当前包不兼容的包,用英文逗号分隔 |
5 | TERMUX_SUBPKG_CONFLICTS | no | 文件名与当前文件名冲突的包,用英文逗号分隔 |
6 | TERMUX_SUBPKG_REPLACES | no | 由当前包替换的包,用英文逗号分隔 |
7 | TERMUX_SUBPKG_ESSENTIAL | no | 是否将子包视为无法以常规方式卸载的基本包, 默认是 false. |
8 | TERMUX_SUBPKG_PLATFORM_INDEPENDENT | no | 是否将子包视为平台无关, 默认是 false. |
9 | TERMUX_SUBPKG_INCLUDE | yes | 要包含在子包中的文件,用空格或换行符分隔 |
10 | TERMUX_SUBPKG_CONFFILES | no | 子包配置文件列表,用空格或换行符分隔,更新时不应覆盖这些文件 |
子包依赖
默认情况下,子包仅取决于当前版本的父包。通过设置TERMUX_SUBPKG_DEPEND_ON_PARENT
变量来改变这种行为。
允许的值为:
deps
- 子包将取决于父包的依赖项。unversioned
- 子包将取决于没有指定版本的父包。
包脚本中的保留变量
在上面列出的变量(即控制字段)中,某些变量具有特殊用途,由./build-package.sh
内部使用。它们不应该这样做,除非有充分的理由,否则不能在运行时修改。
TERMUX_ON_DEVICE_BUILD
- 如果设置了,则假设构建在设备上。TERMUX_BUILD_IGNORE_LOCK
- 如果设置为true
,则忽略生成进程锁。TERMUX_BUILD_LOCK_FILE
- 生成进程锁文件的路径。TERMUX_HOST_PLATFORM
- 主机平台定义。通常是$TERMUX_ARCH-linux-android
。TERMUX_PKG_BUILDDIR
- 当前包的生成目录的路径。TERMUX_PKG_BUILDER_DIR
- 当前包指向build.sh
所在目录的路径。TERMUX_PKG_BUILDER_SCRIPT
- 当前包build.sh
所在的路径。TERMUX_PKG_CACHEDIR
- 当前包的源代码缓存目录的路径。TERMUX_PKG_MASSAGEDIR
- 从$TERMUX_PREFIX
中提取包内容的目录路径TERMUX_PKG_PACKAGEDIR
- 指向将在其中创建当前包的*.deb
存档组件的目录的路径。TERMUX_PKG_SRCDIR
- 当前包的源代码目录的路径。TERMUX_PKG_TMPDIR
- 特定于当前包的临时目录的路径。TERMUX_COMMON_CACHEDIR
- 存储生成工具的全局缓存目录的路径。TERMUX_SCRIPTDIR
- 带有实用程序脚本的目录路径。TERMUX_PKG_NAME
- 当前包的名称。TERMUX_REPO_URL
- 如果./build-package.sh
有选项-i
或-I
,则将从中下载依赖项的APT存储库URL。TERMUX_REPO_DISTRIBUTION
- 分布名称数组,除了TERMUX_REPO_URL
。TERMUX_REPO_COMPONENT
-TERMUX_REPO_URL
存储库组件名称数组。TERMUX_PACKAGE_FORMAT
- 包输出格式
例子
在termux-packages中搜索。
Pay by AliPay
我竟然摸到了这里……
话说怎么在termux里整中文输入法啊,想在termux11里用,希望得到指点,感谢
在Linux容器里?
vnc用系统自带键盘它不香吗
换vnc吧
不是容器,就是原生的termux里,想用里面的texlive写东西,图形界面用的
就按上面的方式配置的,一切都准备就绪了,最后发现竟然没法输入中文。这里没办法用安卓的输入法,库里面也没有fcitx之类的输入法,也不知道有啥解决办法了。
草,termux: x11让转换成表情了