页次: 1
在 PKGBUILD 中,编译 php,预编译时不加 --prefix= 参数,在后续的 make install 时会默认安装到 /usr/local 目录下,即使使用了 DESTDIR=$pkgdir 参数也不行,make DESTDIR=$pkgdir install 时一样会安装到 /usr/local 目录,于是提示 "权限不足",生成 pkg.zst 时报错
如果在预编译时添加了 --prefix= 参数,即使用 ./configure --prefix=$pkgdir/usr/local/php 预编译,那么最终编译出来的 pkg.zst 包中,所有的 php 配置文件中的绝对路径都会变成 $pkgdir/usr/local/php/xxx ,例如在 /tmp 编译生成的 pkg.zst 包中,配置文件中的绝对路径是 /tmp/pkg/php/usr/local/php/xxx
那么应该如何才能让 php.pkg.zst 拥有我想要的路径例如 /usr/local/php ?
最近编辑记录 nibazshab (2022-10-12 15:48:09)
离线
直接填你想要安装的路径?./configure --prefix=/usr/local/php
pkgdir
This contains the directory where makepkg bundles the installed package. This directory will become the root directory of your built package. This variable should only be used in the package() function.
pkg只是一个打包用的目录,预先给包提供一个根目录,避免编译安装破坏实际根目录内容
离线
如果 DESTDIR 无效的话,说明这构建系统不遵循 GNU autotools 的惯例。我去看了一眼 Arch 的 PKGBUILD,是用的 INSTALL_ROOT。
离线
直接填你想要安装的路径?./configure --prefix=/usr/local/php
pkgdir
This contains the directory where makepkg bundles the installed package. This directory will become the root directory of your built package. This variable should only be used in the package() function.
pkg只是一个打包用的目录,预先给包提供一个根目录,避免编译安装破坏实际根目录内容
但是不放进 pkg 里就无法打包 pkg.zst,这样打包出来的只是一个空壳,什么都没有,软件是被 make install 安装进的系统而不是 pacman
离线
如果 DESTDIR 无效的话,说明这构建系统不遵循 GNU autotools 的惯例。我去看了一眼 Arch 的 PKGBUILD,是用的 INSTALL_ROOT。
可是在 nginx 的 make 里,是可以通过 DESTDIR 来指定位置的,php 的构建为啥就不可行呢,都是 PKGBUILD
最近编辑记录 nibazshab (2022-10-12 12:53:01)
离线
因为 PHP 的构建系统没有遵循惯例。
离线
依云 说:如果 DESTDIR 无效的话,说明这构建系统不遵循 GNU autotools 的惯例。我去看了一眼 Arch 的 PKGBUILD,是用的 INSTALL_ROOT。
可是在 nginx 的 make 里,是可以通过 DESTDIR 来指定位置的,php 的构建为啥就不可行呢,都是 PKGBUILD
哪个版本呢,搞一个编译下看看
我在aur里找的这个php80看起来没问题
最近编辑记录 Watermelon.Rei (2022-10-12 13:52:20)
离线
aur 的 php80 有 1529 行,我很多参数我看不明白,我是用的 php8.1.11 编译的,这是我写的 PKGBUILD
pkgname=php-mod
pkgver=8.1.11
pkgrel=1
pkgdesc='A general-purpose scripting language that is especially suited to web development | module: curl fpm'
arch=('x86_64')
url='https://www.php.net'
license=('PHP')
makedepends=('pkg-config')
source=("php-$pkgver.tar.xz::https://www.php.net/distributions/php-$pkgver.tar.xz")
sha256sums=('SKIP')
build() {
cd $srcdir/php-$pkgver
./configure --with-curl --enable-fpm --prefix=/usr/local/php
make -j4
}
package() {
cd $srcdir/php-$pkgver
make DESTDIR=$pkgdir install
}
最近编辑记录 nibazshab (2022-10-12 15:19:43)
离线
以解决,将 DESTDIR=$pkgdir 参数更换为 INSTALL_ROOT=$pkgdir 即可
离线
有8.1.11的aur啊,里面的命令大多是为了适配规范,你可以看到很多patch来源于此
https://sources.debian.org/patches/php8.1/8.1.7-1/
8.1.11的aur:https://aur.archlinux.org/packages/php81
离线
我是需要根据自己的需求对 php 源码带上一定的参数编译,但是又想让 pacman 管理,才自己写的 PKGBUILD,不然我直接用官方仓库的了
离线
页次: 1