“华梦“全国大学生开源软件技术创意大赛

 找回密码
 立即注册
搜索
查看: 5045|回复: 0

Linux 系统定制开发之软件打包----PKGBUILD

[复制链接]

18

主题

1

好友

256

积分

版主

Rank: 7Rank: 7Rank: 7

发表于 2014-9-14 00:23:07 |显示全部楼层
本帖最后由 di.wu 于 2014-9-15 14:53 编辑

本帖最后由 di.wu 2014-9-4 15:51 编辑


1. PKGBUILD 简介


PKGBUILD是一种 Arch Linux 创建软件包时使用的包构建描述文件。其本质是一个shell脚本。

Arch Linux 中,创建包时要用到 makepkg 和放在 PKGBUILD 文件里的描述信息。当 makepkg 运行时,它会在当前目录寻找 PKGBUILD 文件,并依照其中的指令去获取依赖文件,之后编译出 pkgname.pkg.tar.xz 文件。生成的包内有二进制文件和安装指令,可以使用 pacman 指令安装它了。


2. 使用方法,常用变量


下面是一些在 PKGBUILD 文件里使用的变量。pkgnamepkgverpkgrelarch是必须出现的


###pkgname

    软件包的名称,名称由小写字母、数字和任意以下字符组成:@ . _ + - (at 符号, , 下划线, 加号, 连字符)。字母均为小写且不能以连字符开头。为了保证一致性,pkgname 应该匹配源文件 tar 包的名称,比如:源文件包名为 foobar-2.5.tar.gz,那么 pkgname 的值应该是 foobar。除此之处,PKGBUILD 文件所在工作目录也应该与 pkgname 想匹配。


###pkgver

    软件包的版本号,应该与软件原作者发布的版本号一致。它由字母、数字和'.'组成,但不能包含连字符'-',如果原作者在他的版本号中使用了连字符'-',那么用下划线'_'来替代。举个例子:原版本号“0.99-10”,改写成“0.99_10”。在之后的 PKGBUILD 指令中 pkgver 中的下划线可以用下面这个方法替代为连接符:

   source=("$pkgname-${pkgver//_/-}.tar.gz")


pkgrel
软件包对 Arch Linux 的释出号。这个值可以用来区分同一版本软件的多次构建。当软件包第一次发布时,释出号为1,随着 PKGBUILD 的调整与优化,软件包再次发布,释出号递增 1。而当这个软件包发布一个新版本时,释出号重置为 1


pkgdir
该变量展示(设置)包中文件的根目录。它经常在make DESTDIR="$pkgdir" install中使用。


depends
软件的运行时依赖列表。可以使用比较运算符来描述版本限制,如:depends=('foobar>=1.8.0')。如有多重限制,你可以重复设置它们[1],像这样:depends=('foobar>=1.8.0''foobar<2.0.0') 你并不一定要限制依赖包的版本。且并不需要列出你的软件包的二次依赖——你的软件及它所依赖的软件共同依赖的软件包。比如说:gtk2依赖{{pkg|glib2}glibc;然而glib2本就依赖于glibc,那么在gtk2中就不需要把glibc加入 depends 列表。


makedepends
软件编译时需要,但运行时并不依赖的包序列。可以像depends序列里提到的一样指定最小版本依赖。


options
这个变量允许你重置makepkg的部分默认(定义在/etc/makepkg.conf中的)行为。要设置一个选项必须指定选项名。要反转一个默认行为,在选项前加上! 参见man PKGBUILD以获取所有可用选项。


install
.install 脚本的名称。pacman 可以在安装、卸载或升级一个软件包时存储及执行一些特定的脚本。在不同的情况下,脚本会执行下面几个函数。
pre_install - 安装前运行的脚本,可以传递版本号为参数。
post_install - 安装后运行的脚本,可以传递版本号为参数。
pre_upgrade - 升级前运行的脚本,可以按新版本号,旧版本号的顺序传递参数。
post_upgrade - 升级后运行的脚本,可以按新版本号,旧版本号的顺序传递参数。
pre_remove - 卸载前运行的脚本,可以传递版本号为参数。
post_remove - 卸载后运行的脚本,可以传递版本号为参数。


changelog
软件包 changelog 的名称,要查看安装软件的 changelog


source
构建软件包时需要的文件列表。它必须包含软件源的位置信息,大多数情况下是一个完整的 HTTP FTP 地址。可以在软件源信息中很好的调用前面提到的变量 pkgname pkgver( source=("https://example.com/$pkgname-$pkgver.tar.gz"))


sha1sums
SHA-1 160位校验和序列。它是上面所说的md5sums 之外的一个选择。为了启用sha-1,请在 /etc/makepkg.conf 设置 INTEGRITY_CHECK 选项。参见 man makepkg.conf




3. 范例分析

pkgname=foo
pkgver=10.0.2
pkgrel=2
pkgdesc="Foo is an example package forthis PKGBUILD file."
url="http://www.foo.tld"
arch=('x86_64' 'i686')
license=('GPLv3')
depends=('php' 'mysql')
optdepends=('java-runtime')
makedepends=()
conflicts=()
replaces=()
backup=()
install='foo.install'
source=("http://www.server.tld/${pkgname}-${pkgver}.tar.gz"
       "foo.desktop")
md5sums=('a0afa52d60cea6c0363a2a8cb39a4095'
        'a0afa52d60cea6c0363a2a8cb39a4095')

build() {
  cd"${srcdir}/${pkgname}-${pkgver}"
cmake ./ -DCMAKE_INSTALL_PREFIX=/usr
make
}

package() {
  cd"${srcdir}/${pkgname}-${pkgver}"
make DESTDIR="${pkgdir}" install
install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING"
}

# vim:set ts=2 sw=2 et:



##plymouth-themes  PKGBUILD
pkgname="plymouth-theme-cetc"
pkgver=0.1
pkgrel=3
url="http://gnome-look.org/content/show.php/Arch-logo+plymouth?content=141697"
pkgdesc="default theme forplymouth"
arch=('any')
license=('GPL')
depends=('plymouth')
options=('')
source=('http://ftp.isoft.zhcn.cc/other/aboutos/plymouth-cetc.tar.gz')


install=plymouth-theme-cetc.install
md5sums=('daa4050a35c8edd6d64ea47dd5429616')

package() {
   cd $srcdir/cetc
   mkdir -p $pkgdir/usr/share/plymouth/themes/cetc
   install -Dm644 * $pkgdir/usr/share/plymouth/themes/cetc
}



##postal-update-sp1 PKGBUILD
pkgver=1.0
pkgrel=2
pkgdesc="RedFlag linux for Postalupdate sp1"
arch=('i686' 'x86_64')
url="http://www.redflag-linux.com"
license=('GPL')
source=('rf-taskbar-recover''rf-taskbar-recover.desktop' 'pospasswd.desktop' 'pospasswd')
install=install
depends=('postal-update-sp2')

package() {

   install -d -m755 "${pkgdir}"/usr/share/desktop-link/
   install -d -m755 "${pkgdir}"/usr/share/desktop-root/
   install -d -m755 "${pkgdir}"/usr/share/desktop-kde/
   install -d -m755 "${pkgdir}"/usr/bin/
   install -d -m755 "${pkgdir}"/etc/xdg/autostart/

   install -m755 rf-taskbar-recover.desktop"${pkgdir}"/usr/share/desktop-link/rf-taskbar-recover.desktop

   ln -sf /usr/share/desktop-link/rf-taskbar-recover.desktop"${pkgdir}"/usr/share/desktop-kde/rf-taskbar-recover.desktop

   ln -sf /usr/share/desktop-link/rf-taskbar-recover.desktop"${pkgdir}"/usr/share/desktop-kde/rf-taskbar-recover.desktop

   install -m755  rf-taskbar-recover"${pkgdir}"/usr/bin/rf-taskbar-recover

   install -m755 pospasswd.desktop "${pkgdir}"/etc/xdg/autostart/
    install -m755 pospasswd  "${pkgdir}"/usr/bin/
}


##postal-update-sp1 install
post_install() {

   echo -e"10.3.13.0/24\n10.3.58.0/24\n211.156.198.0/24\n211.156.219.0/24\n127.0.0.1"> /etc/iptables/white.lst

for home in `ls -d /home/*`
   do

   cp -af /usr/share/desktop-kde/* ${home}/桌面/ ||cp -af/usr/share/desktop-kde/* ${home}/Desktop/

   done


}

post_upgrade() {

   post_install

}



postal-update-sp1 dir

├── install
├── PKGBUILD
├── pospasswd
├── pospasswd.desktop
├── rf-taskbar-recover
└── rf-taskbar-recover.desktop


参考资源:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|“华梦“全国大学生开源软件技术创意大赛

GMT+8, 2018-6-22 16:57 , Processed in 0.056858 second(s), 20 queries .

Powered by Discuz! X2.5

“华梦“全国大学生开源软件技术创意大赛

回顶部