您尚未登录。

#1 2022-10-12 09:13:17

nibazshab
会员
注册时间: 2022-02-04
帖子: 143

「已解决」configure 和 make 的路径指定问题

在 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)

离线

#2 2022-10-12 09:32:53

Watermelon.Rei
会员
注册时间: 2021-12-29
帖子: 114

Re: 「已解决」configure 和 make 的路径指定问题

直接填你想要安装的路径?./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只是一个打包用的目录,预先给包提供一个根目录,避免编译安装破坏实际根目录内容

离线

#3 2022-10-12 11:16:31

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,953
个人网站

Re: 「已解决」configure 和 make 的路径指定问题

如果 DESTDIR 无效的话,说明这构建系统不遵循 GNU autotools 的惯例。我去看了一眼 Arch 的 PKGBUILD,是用的 INSTALL_ROOT。

离线

#4 2022-10-12 12:41:34

nibazshab
会员
注册时间: 2022-02-04
帖子: 143

Re: 「已解决」configure 和 make 的路径指定问题

Watermelon.Rei 说:

直接填你想要安装的路径?./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

离线

#5 2022-10-12 12:42:54

nibazshab
会员
注册时间: 2022-02-04
帖子: 143

Re: 「已解决」configure 和 make 的路径指定问题

依云 说:

如果 DESTDIR 无效的话,说明这构建系统不遵循 GNU autotools 的惯例。我去看了一眼 Arch 的 PKGBUILD,是用的 INSTALL_ROOT。

可是在 nginx 的 make 里,是可以通过 DESTDIR 来指定位置的,php 的构建为啥就不可行呢,都是 PKGBUILD

最近编辑记录 nibazshab (2022-10-12 12:53:01)

离线

#6 2022-10-12 13:28:47

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,953
个人网站

Re: 「已解决」configure 和 make 的路径指定问题

因为 PHP 的构建系统没有遵循惯例。

离线

#7 2022-10-12 13:35:47

Watermelon.Rei
会员
注册时间: 2021-12-29
帖子: 114

Re: 「已解决」configure 和 make 的路径指定问题

nibazshab 说:
依云 说:

如果 DESTDIR 无效的话,说明这构建系统不遵循 GNU autotools 的惯例。我去看了一眼 Arch 的 PKGBUILD,是用的 INSTALL_ROOT。

可是在 nginx 的 make 里,是可以通过 DESTDIR 来指定位置的,php 的构建为啥就不可行呢,都是 PKGBUILD

哪个版本呢,搞一个编译下看看

843Cd.png
我在aur里找的这个php80看起来没问题

最近编辑记录 Watermelon.Rei (2022-10-12 13:52:20)

离线

#8 2022-10-12 15:19:04

nibazshab
会员
注册时间: 2022-02-04
帖子: 143

Re: 「已解决」configure 和 make 的路径指定问题

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)

离线

#9 2022-10-12 15:47:45

nibazshab
会员
注册时间: 2022-02-04
帖子: 143

Re: 「已解决」configure 和 make 的路径指定问题

以解决,将 DESTDIR=$pkgdir 参数更换为 INSTALL_ROOT=$pkgdir 即可

离线

#10 2022-10-12 16:06:34

Watermelon.Rei
会员
注册时间: 2021-12-29
帖子: 114

Re: 「已解决」configure 和 make 的路径指定问题

有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

离线

#11 2022-10-13 13:21:18

nibazshab
会员
注册时间: 2022-02-04
帖子: 143

Re: 「已解决」configure 和 make 的路径指定问题

我是需要根据自己的需求对 php 源码带上一定的参数编译,但是又想让 pacman 管理,才自己写的 PKGBUILD,不然我直接用官方仓库的了

离线

页脚