utermux,TermuxWiki

阅前必看

如果你是个小白,建议直接去提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

可用包的控制字段表

顺序变量是否需要描述
1TERMUX_PKG_HOMEPAGEyes包主页URL
2TERMUX_PKG_DESCRIPTIONyes一行,简短的描述
3TERMUX_PKG_LICENSEyes包许可证
4TERMUX_PKG_LICENSE_FILEno许可证文件名, 如果没有找到许可证文件就要指定
5TERMUX_PKG_MAINTAINERno包维护者
6TERMUX_PKG_API_LEVELno指定Android API级别
7TERMUX_PKG_VERSIONyes原始包脚本
8TERMUX_PKG_REVISIONno包修订, 每次包重建时都要修改。
9TERMUX_PKG_SKIP_SRC_EXTRACTno跳过源码包解压 默认是false
10TERMUX_PKG_SRCURLnot, 如果跳过下载源代码源代码的下载URL,或者以.git结尾的URL
11TERMUX_PKG_SHA256not, 如果源代码URL没有设置SHA 256校验和
12TERMUX_PKG_GIT_BRANCHno指定要git的分支 默认是v$TERMUX_PKG_VERSION
13TERMUX_PKG_METAPACKAGEno是否将包视为元包 默认是false.
14TERMUX_PKG_DEPENDSno包依赖列表,用英文逗号分隔
15TERMUX_PKG_BUILD_DEPENDSno构建包时需要的依赖列表,也是用英文逗号分隔
16TERMUX_PKG_BREAKSno与当前包不兼容的包的列表,也是用英文逗号分隔
17TERMUX_PKG_CONFLICTSno文件名与当前文件名冲突的包的列表,也是用英文逗号分隔
18TERMUX_PKG_REPLACESno由当前文件包替换的文件包列表,也是用英文逗号分隔
19TERMUX_PKG_PROVIDESno当前软件包提供的虚拟软件包列表,也是用英文逗号分隔
20TERMUX_PKG_RECOMMENDSno以英文逗号分隔的非绝对依赖项列表-包通常与当前包一起使用
21TERMUX_PKG_SUGGESTSno与当前包相关或可以增强当前包的列表,也是用英文逗号分隔
22TERMUX_PKG_ESSENTIALno是否将无法按常规方式卸载的软件包并且视为必需软件包,默认是false.
23TERMUX_PKG_NO_STATICSPLITno是否将静态库拆分为子包, 默认是false.
24TERMUX_PKG_STATICSPLIT_EXTRA_PATTERNSno要包含在静态包中的额外模式,它必须与$TERMUX_PREFIX相关,栗子: 包含来自 $TERMUX_PREFIX/lib*.h 文件,指定 lib/*.h,可以使用bash-globstar模式递归子目录
25TERMUX_PKG_IS_HASKELL_LIBno包是否为haskell库,默认是false
26TERMUX_PKG_BUILD_IN_SRCno是否在源代码目录中执行构建,默认是false
27TERMUX_PKG_HAS_DEBUGno包是否可以Debug,默认是true.
28TERMUX_PKG_PLATFORM_INDEPENDENTno是否无视架构是否将包视为独立平台,默认是false
29TERMUX_PKG_BLACKLISTED_ARCHESno架构黑名单,指定哪些架构不能跑这个软件包
30TERMUX_PKG_HOSTBUILDno包是否需要为“主机构建”,默认是false.
31TERMUX_PKG_FORCE_CMAKEno强制使用CMake,默认是false.
32TERMUX_PKG_EXTRA_CONFIGURE_ARGSno传递给构建系统配置程序的额外参数
33TERMUX_PKG_EXTRA_HOSTBUILD_CONFIGURE_ARGSno执行主机构建时传递给生成系统配置程序的额外参数
34TERMUX_PKG_EXTRA_MAKE_ARGSno传递给make的额外参数
35TERMUX_PKG_MAKE_INSTALL_TARGETno等效于安装过程中传递给实用程序makeinstall参数
36TERMUX_PKG_RM_AFTER_INSTALLno安装过程后要删除的文件列表
37TERMUX_PKG_CONFFILESno以空格或换行符分隔的包配置文件列表,更新时不应覆盖这些文件
38TERMUX_PKG_SERVICE_SCRIPTno偶数长度的数组,包含用于termux-services/runit的守护进程名称和脚本

可用的构建步骤覆盖表

所有构建步骤的完整参考可在Building packages中找到。

顺序函数名描述
1termux_step_get_source获取包源代码并将其保存到$TERMUX_PKG_SRCDIR
2termux_step_post_get_source钩子在获得源代码后立刻运行的命令
3termux_step_handle_host_build确定是否需要主机构建。
4termux_step_host_build执行主机构建
5termux_step_pre_configure钩子在configure配置之前运行的命令
6termux_step_configure配置configure,默认情况下,它会自动确定构建系统
7termux_step_post_configure钩子在配置后立刻运行的命令
8termux_step_make构建源代码
9termux_step_make_install安装构建之后的程序
10termux_step_post_make_install钩子在安装后立刻运行的命令
11termux_step_install_license将特定于软件包的许可证链接或复制到 ./share/doc/$TERMUX_PKG_NAME.
12termux_step_post_massage创建*.deb文件之前的最后一个钩子
13termux_step_create_debscripts在此步骤中,你可以创建 ./preinst, ./postinst, ./prerm 或 ./postrm 将在包安装或删除期间执行的脚本

编写子包脚本

子包定义通常用于将安装的可选部分移动到一个单独的包。例如,一些库附带的实用程序可能一些用户不需要使用。因此,我们可以将这些实用程序移动到一个单独的包中。并且在lib包作为依赖项安装的情况下减小安装尺寸。

最小的子包脚本由以下字段组成:

TERMUX_SUBPKG_DESCRIPTION= # 描述
TERMUX_SUBPKG_INCLUDE="" # 要包含在子包中的文件列表(空格或换行符分隔)

由于包含列表可能很长,因此优选上述顺序。

子包脚本必须与build.sh和文件位于同一目录中。
名称的格式如下:

{子包名称}.subpackage.sh

请注意,其名称不能与父包的名称相同。

关于子包的其他说明:

  • 子包的版本跟父包一样。
  • 静态库的子包是自动创建的。

子包控制字段表

顺序变量是否需要描述
1TERMUX_SUBPKG_DESCRIPTIONyes一行,简短的描述
2TERMUX_SUBPKG_DEPEND_ON_PARENTno指定子包依赖于父包的方式。见 子包依赖 获取更多信息
3TERMUX_SUBPKG_DEPENDSno子包依赖项,用英文逗号分隔
4TERMUX_SUBPKG_BREAKSno与当前包不兼容的包,用英文逗号分隔
5TERMUX_SUBPKG_CONFLICTSno文件名与当前文件名冲突的包,用英文逗号分隔
6TERMUX_SUBPKG_REPLACESno由当前包替换的包,用英文逗号分隔
7TERMUX_SUBPKG_ESSENTIALno是否将子包视为无法以常规方式卸载的基本包, 默认是 false.
8TERMUX_SUBPKG_PLATFORM_INDEPENDENTno是否将子包视为平台无关, 默认是 false.
9TERMUX_SUBPKG_INCLUDEyes要包含在子包中的文件,用空格或换行符分隔
10TERMUX_SUBPKG_CONFFILESno子包配置文件列表,用空格或换行符分隔,更新时不应覆盖这些文件

子包依赖

默认情况下,子包仅取决于当前版本的父包。通过设置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中搜索。

扫描二维码,在手机上阅读!
支付宝支付

支付宝支付

评论

icon_question.gificon_razz.gificon_sad.gificon_evil.gificon_exclaim.gificon_smile.gificon_redface.gificon_biggrin.gificon_surprised.gificon_eek.gificon_confused.gificon_cool.gificon_lol.gificon_mad.gificon_twisted.gificon_rolleyes.gificon_wink.gificon_idea.gificon_arrow.gificon_neutral.gificon_cry.gificon_mrgreen.gif

  1. 冰糖葫芦 冰糖葫芦
    Firefox 102

    我竟然摸到了这里……
    话说怎么在termux里整中文输入法啊,想在termuxicon_mad.gif11里用,希望得到指点,感谢

    1. 2096779623 2096779623
      Chrome 98

      在Linux容器里?
      vnc用系统自带键盘它不香吗 icon_lol.gif

      1. 2096779623 2096779623
        Chrome 98

        换vnc吧

      2. 冰糖葫芦 冰糖葫芦
        Firefox 102

        不是容器,就是原生的termux里,想用里面的texlive写东西,图形界面用的

        https://github.com/termux/termux-x11

        就按上面的方式配置的,一切都准备就绪了,最后发现竟然没法输入中文。这里没办法用安卓的输入法,库里面也没有fcitx之类的输入法,也不知道有啥解决办法了。

    2. 冰糖葫芦 冰糖葫芦
      Firefox 102

      草,termux: x11让转换成表情了

This is just a placeholder img.