Arch Linux 简易打包指南
本文时代久远,请参阅更可靠的:Arch User Repository (简体中文) - 分享和维护软件包
这两天给 Kreogist µ 打 Arch Linux 包,照着 wiki 跟着搞,同时在肥猫和 Wicast C 及暴君还有 jimmy66 等强力大腿及小伙伴的支持下,几番折腾终于打好了,也算是入了个门。
搞完过来发现也算简单,总体来说其实就是一个 PKGBUILD
文件的编写。就着给 µ 打的这个包写个简单指南。在写的时候实在太不知道怎么写的地方还可以直接参考一下其他软件包的 PKGBUILD 是怎么写的我才不会说呢。
编写 PKGBUILD
在最开头,复制一份原型: /usr/share/pacman/PKGBUILD.proto
(同目录下也有其他特别类型的原型),之后就从这个文件开始编写啦。
先读完文件开头那段注释,然后删掉它~
Maintainer
最开头一行注释是维护者的信息,按照它提供的格式填写上有效的信息即可。
pkgname
软件包的名字。只能用 小写字母、数字和@ . _ + -
这些字符,且不允许用.
或者-
作开头。
另外不要和 AUR 甚至是官方仓库里面的软件包重名了(´・ω・`)
pkgver
软件包的版本,就是你打包的那个软件的版本。可以使用数字和小数点,以及其它字符。进一步的规则可参考:VCS package guidelines - ArchWiki
pkgrel
软件包发行号,一般设为 1,如果你因为某些原因给同版本号的软件进行反复打包,那么每次打包的时候 pkgrel 就应该在原基础上递增一个数字,而在打包新的版本的时候,应该重新设为 1。
epoch
强行干涉包的新旧关系,拥有更大的 epoch 值的包会被认做更新的包(此时无视版本号),可以用在如版本号风格改变等需要的时候。默认值为 0,取值为正整数。一般不会用到。
pkgdesc
软件包的描述信息,最好一句话,且不包含软件的名字。
arch
表示支持的 Arch Linux 的架构,比如 i686
、x86_64
,如果包与平台无关的话就填 any
。
url
与软件包相关的链接,一般是项目首页什么的。
license
软件发布协议,如果是常见的 GPL 的话可以对照下面填写:
- (L)GPL - (L)GPLv2 及更新版本。
- (L)GPL2 - 仅 (L)GPL2
- (L)GPL3 - (L)GPL3 及更新版本
depends
这是非常重要的一项,需要正确填写上软件的依赖。
对于直接发布可执行程序的话,可以通过 ldd 来看程序连接了哪些库文件,结合搜索判断出具体依赖是什么软件包。你可以用谷歌在 https://www.archlinux.org 上搜索具体库的文件名,一般都能够找到对应的软件包。
如果你已经用 makepkg 打出了 .tar.xz 的包,也可以用 Namcap 来检查依赖是否存在问题,它会提供一些有用的信息帮助修正依赖。对于他的输出含义可以直接参考 ArchWiki。
多测试多测试,确保依赖真的没问题。
source
构建软件包需要的文件。可以是一个本地文件,也可以是一个远程文件。 makepkg 会在构建包的时候自动下载填写的远程文件,并且会自动解包压缩文件。
md5sums
对应的 source 里面文件的 md5 校验码。
package()
在构架包的时候执行的函数。你需要把安装软件对应的操作写在这里。函数会在一个 fakeroot
环境下执行,对应的 root 目录就是 $pkgdir
,比如你有一个可执行文件名为 $pkgname
要安装到 /usr/bin
下面,对应的命令就可以类似这么写:
install -m=775 $pkgname "${pkgdir}/usr/bin"
-m
选项表示目标文件的权限,和 chmod
参数同理。
常用目录
目录 | 用途 |
---|---|
/etc | 系统关键配置文件,如果件有多个,应该创建合适的子目录来存放 |
/usr/bin | 二进制文件 |
/usr/lib | 库 |
/usr/include | 头文件 |
/usr/lib/{pkg} | 模块,插件等 |
/usr/share/doc/{pkg} | 应用程序文档 |
/usr/share/info | GNU Info 系统文件 |
/usr/share/man | 手册 |
/usr/share/{pkg} | 程序数据 |
/var/lib/{pkg} | 应用持久数据 |
/etc/{pkg} | {pkg}的配置文件 |
/opt/{pkg} | 大的独立程序,例如 Java |
/usr/share/applications/ | Desktop Entry (.desktop) 文件 |
/usr/share/icons/ | 图标,存在该目录下对应子目录位置 |
不该碰的目录:
- /dev
- /home
- /srv
- /media
- /mnt
- /proc
- /root
- /selinux
- /sys
- /tmp
- /var/tmp
构建/调试包
在 PKGBUILD 所在目录下执行 makepkg 可以构建出对应的软件包,推荐用 namcap
检测一下构建出来的包有没有更显著的问题。
然后你可以用 pacman -U
命令安装它,看看会不会发生什么奇怪的事情,以及软件是否正常等。
当然还有可能因为 PKGBUILD 没写好,直接就报错不干了,这个时候需要顺着错误信息去修正 PKGBUILD。
发布到 AUR
在 PKGBUILD 所在目录执行 makepkg --source
,会生成 .src.tar.gz
源码包,这就是需要上传到 AUR 的东西,注意不要把任何二进制文件加入源码包。
在 AUR (Arch User Repository) 注册(登入)帐号。进入 Submit 页面,选择好软件包对应的分类,然后添加源码包上传即可。
即使你是要更新一个包,也只需要直接在 Submit 页面上传,包的信息 AUR 会自己处理。
如果觉得每次上传太麻烦,你可以尝试一下 aurupload 来简化发布。
参考文档/维基
需要更详尽的内容以及更复杂的打包请参考以下。
- PKGBUILD(5) Manual Page
- Creating packages - ArchWiki
- Arch packaging standards - ArchWiki
- Namcap - ArchWiki
- VCS package guidelines - ArchWiki
Arch Linux 简易打包指南的更多相关文章
- 在 VirtualBox 虚拟机中安装 Arch Linux 系统指南
How to install Arch Linux on VirtualBox 在 VirtualBox 虚拟机中安装 Arch Linux 系统指南 本文导航 1.Arch Linux 软件仓库2. ...
- Linux 桌面玩家指南:20. 把 Linux 系统装入 U 盘打包带走
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- linux内核调试指南
linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 ...
- Linux Kernel - Debug Guide (Linux内核调试指南 )
http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级 ...
- Arch Linux 安装过程
在VM中装了Arch,由于过程较为曲折,现写博客一篇聊以慰藉. 1.新建虚拟机,将下载好的archlinux-2016.03.01-dual.iso挂到虚拟机设置的CD/DVD 2.进入Arch安装界 ...
- Linux 桌面玩家指南:18. 使用 Docker 隔离自己的开发环境和部署环境
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- Linux 桌面玩家指南:07. Linux 中的 Qemu、KVM、VirtualBox、Xen 虚拟机体验
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- Arch Linux 独特的包管理器相关名词解释及用法对照
https://wiki.archlinux.org/index.php/PacmanPacman包管理器是Arch Linux的主要特色之一.它结合了简单的二进制包格式和易于使用的构建系统.pacm ...
- Arch Linux 的AUR用户软件仓库
==== Arch 官方软件仓库, 共10998个(20190325), 使用pacman搜索安装. https://www.archlinux.org/packages/ Core 核心软件包, 2 ...
随机推荐
- [python]获取文件夹下所有文件名
#---picknames.py---import os filenames = os.listdir(os.getcwd()) for name in filenames: print(name)
- HDOJ(2056)&HDOJ(1086)
Rectangles HDOJ(2056) http://acm.hdu.edu.cn/showproblem.php?pid=2056 题目描述:给2条线段,分别构成2个矩形,求2个矩形相交面 ...
- 删除ubuntu后无法进入windows
一天,脑袋一热想装个ubuntu学习学习,结果装的ubuntu版本比较老,没有集成我笔记本的网卡驱动,在ubuntu下上不了网,心想上不了网学习起来不是很不方便,于是就直接在win7下将ubuntu的 ...
- cef3 获得js 返回值, 以及js 指挥delphi 函数的 总结参考
cef3 如何加载 本地html 文件. 请教老师[吐槽]常忘<run_fan@qq.com> 22:21:45@lazarus 下载cef3中的范例中就有 [吐槽]常忘< ...
- IOS系列swift语言之课时八
这节课需要讲的就是可选链,内存管理,引用计数,unowned解决 //: Playground - noun: a place where people can play import UIKit / ...
- linux下redis的安装与部署及基础命令
<1>下载安装文件:redis-3.2.5.tar.gz 放在opt目录下 <2> tar -zxvf redis-3.2.5.tar.gz,备份redis.conf到自己的目 ...
- JavaScript中的事件
1.冒泡事件:事件按照特定的的事件目标到最不特定的事件目标顺序触发(它是按照DOM的层次节后依次做出的反应) 2.捕获事件:事件从不确定的对象document 开始触发然后到最精确(也可以在窗口级别捕 ...
- spring mvc 4.3.2 + mybatis 3.4.1 + mysql 5.7.14 +shiro 幼儿园收费系统 之 消息管理
- 图解直方图均衡化及其Python实现
在理解直方图均衡化的过程中,参考了一些书籍和博客,让人困惑的是,笔者对于直方图的理解还是停留在表面,并没有深入理解其内涵.因此,本文拟结合图片对直方图的概念进行阐述,并给出其Python实现,最后对她 ...
- MLA Handbook for Writers of Research Papers笔记
MLA Handbook for Writers of Research Papers.7th ed.New York:MLA,2009.print.还有一本,留待阅读MLA Style Manual ...