我正在尝试使用 PKGBUILD 构建我自己的 mariaDB arch linux 包,我有要安装的二进制文件。我有bash脚本(arch linux PKGBUILD(,它运行fime并创建pkg.tar文件。当我尝试用吃豆人安装它时,我得到这个:-
%sudo pacman -U mariadb-bin-10.3.7-1-x86_64.pkg.tar :(
loading packages...
resolving dependencies...
looking for conflicting packages...
Packages (1) mariadb-bin-10.3.7-1
Total Installed Size: 539.71 MiB
:: Proceed with installation? [Y/n] y
(1/1) checking keys in keyring [########################################] 100%
(1/1) checking package integrity [########################################] 100%
(1/1) loading package files [########################################] 100%
(1/1) checking for file conflicts [########################################] 100%
error: failed to commit transaction (conflicting files)
mariadb-bin: /usr/lib64 exists in filesystem (owned by filesystem)
mariadb-bin: /usr/sbin exists in filesystem (owned by filesystem)
Errors occurred, no packages were upgraded.
这是我的PKGBUILD文件:-
# This is an example PKGBUILD file. Use this as a start to creating your own,
# and remove these comments. For more information, see 'man PKGBUILD'.
# NOTE: Please fill out the license field for your package! If it is unknown,
# then please put 'unknown'.
# Maintainer: Your Name <youremail@domain.com>
pkgname='mariadb-bin'
pkgver=10.3.7
pkgrel=1
pkgdesc="MariaDB for arch linux"
arch=('x86_64')
url="http://mirror.truenetwork.ru/mariadb/"
license=('GPL')
groups=()
depends=()
makedepends=()
checkdepends=()
optdepends=()
provides=("mariadb=${pkgver}")
conflicts=('mariadb')
replaces=()
backup=('etc/mysql/my.cnf',
'etc/mysql/wsrep.cnf')
options=()
install=mariadb-bin.install
changelog=
source=()
noextract=()
md5sums=()
validpgpkeys=()
prepare() {
echo "I am prepare fn";
pwd
}
build() {
echo "I am buid fn ";
pwd
}
check() {
echo "I am check fn";
pwd
}
package() {
echo "I am package fn";
cp ../usr ${pkgdir} -r
cp ../etc ${pkgdir} -r
pwd
cd ${pkgdir}
find ${pkgdir}/ -name *.so -exec chmod 777 {} ;
chmod 755 ${pkgdir}/usr/bin/*
}
我该怎么办?我知道这个问题更适合 arch 论坛,但由于我们可以询问 bash 和 shell 脚本,所以..
Arch Linux在 2013 年实现了 UsrMerge,从那时起,Arch Linux 软件包需要使用 libdir "/usr/lib" 和 sbindir "/usr/bin"。如果你不这样做,那么你尝试安装的文件将与磁盘上的符号链接冲突,这是pacman不允许的。
您需要修复package()
函数中的目录位置。
如您所见,这实际上与 bash 脚本无关,而与 pacman 的打包格式和策略的性质有关。 :)