首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示权限被拒绝的Aur包

显示权限被拒绝的Aur包
EN

Stack Overflow用户
提问于 2020-05-21 17:53:37
回答 1查看 1.2K关注 0票数 0

我正在为arch linux制作一个AUR包,我已经通过各种YouTube视频和博客文章以及正式的AUR打包文档制作了PKGBUILD文件,我想要的只是将python脚本移动到/usr/bin/目录,但是它抛出的权限错误被拒绝了。

这是我的用于AUR包的PKGBUILD文件

代码语言:javascript
复制
# Maintainer: Ashwini Sahu <ashwinisahu990@gmail.com>

_pkgname=hbhc
pkgname=${_pkgname}-git
pkgver=r15.e5f7975
pkgrel=1
pkgdesc="A fast and Open Source Home Baked Hash Cracker for linux Written in Python3"
arch=('any')
url="https://github.com/ASHWIN990/${_pkgname}/sssssssss"
license=('GPL3')
depends=(python3)
makedepends=(git)
source=("git://github.com/ASHWIN990/hbhc.git")
md5sums=('SKIP')

pkgver() {
        cd "$_pkgname"
        printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}

package() {
        cd "$_pkgname"
        install -m 644 ".man/hbhc.1.gz" "/usr/local/share/man/man1/"
        cp sha* /usr/bin/ | echo -e "MOVING THE PYTHON SCRIPTS IN /usr/bin"
        cp md5* /usr/bin/
        cp hbhc /usr/bin/
        cp .man/hbhc.1.gz /usr/local/share/man/man1/hbhc.1.gz
}

这是我在制作包时遇到的错误:

代码语言:javascript
复制
┌─[ashwinisahu@ashwini-main]─[~/Other/build]
└──╼ $makepkg
==> Making package: hbhc-git r15.e5f7975-1 (Friday 22 May 2020 01:45:52 AM)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
  -> Cloning hbhc git repo...
Cloning into bare repository '/home/ashwinisahu/Other/build/hbhc'...
remote: Enumerating objects: 68, done.
remote: Counting objects: 100% (68/68), done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 68 (delta 37), reused 49 (delta 28), pack-reused 0
Receiving objects: 100% (68/68), 15.20 MiB | 1.11 MiB/s, done.
Resolving deltas: 100% (37/37), done.
==> Validating source files with md5sums...
    hbhc ... Skipped
==> Extracting sources...
  -> Creating working copy of hbhc git repo...
Cloning into 'hbhc'...
done.
==> Starting pkgver()...
==> Entering fakeroot environment...
==> Starting package()...
install: cannot create regular file '/usr/local/share/man/man1/hbhc.1.gz': Permission denied
==> ERROR: A failure occurred in package().
    Aborting...

我的新PKGBUILD文件如下所示,它运行时没有任何错误:

代码语言:javascript
复制
# Maintainer: Ashwini Sahu <ashwinisahu990@gmail.com>

_pkgname=hbhc
pkgname=${_pkgname}-git
pkgver=r17.82d9453
pkgrel=1
pkgdesc="A fast and Open Source Home Baked Hash Cracker for linux Written in Python3"
arch=('any')
url="https://github.com/ASHWIN990/${_pkgname}"
license=('GPL3')
depends=('python3')
makedepends=('git')
provides=('hbhc')
source=("git+https://github.com/ASHWIN990/hbhc.git")
md5sums=('SKIP')

pkgver() {
    cd "$_pkgname"
    printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}

package() {
    cd "$srcdir/${_pkgname}"
        install -Dm775 sha* -t ${pkgdir}/usr/bin/ | echo -e "MOVING THE PYTHON SCRIPTS IN /usr/bin"
        install -Dm775 md5* -t ${pkgdir}/usr/bin/
        install -Dm775 hbhc -t ${pkgdir}/usr/bin/
    install -Dm644 ${PWD}/.man/hbhc.1.gz -t ${pkgdir}/usr/share/man/man1/

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-21 21:39:53

(只是提醒一下,我不使用Arch,我也从未为此编写过PKGBUILD。我是Fedora的人,但是一个类似的错误经常咬我。)

代码语言:javascript
复制
package() {
        cd "$_pkgname"
        install -m 644 ".man/hbhc.1.gz" "/usr/local/share/man/man1/"
        cp sha* /usr/bin/ | echo -e "MOVING THE PYTHON SCRIPTS IN /usr/bin"
        cp md5* /usr/bin/
        cp hbhc /usr/bin/
        cp .man/hbhc.1.gz /usr/local/share/man/man1/hbhc.1.gz
}

此代码是在构建包时执行的,而不是在安装时执行的。这不是作为根用户运行的,而是作为包构建用户运行的(我不确定它在Arch上是什么)。作为非根用户,您试图将包复制到只有root才能写入的路径(如/usr/...)。这是不允许的,并导致权限问题:

代码语言:javascript
复制
==> Starting package()...
install: cannot create regular file '/usr/local/share/man/man1/hbhc.1.gz': Permission denied
==> ERROR: A failure occurred in package().

但是你也不想以根用户的身份运行。您需要做的是安装到特殊位置$pkgdirhttps://wiki.archlinux.org/index.php/Creating_packages#Defining_PKGBUILD_variables。这个特殊的位置看起来像/,但是您可以写信给它。$pkgdir中的所有内容都成为您正在构建的包的一部分。然后,当您安装刚刚构建的包时,从$pkgdir/的所有内容都会被复制到/中。

换句话说,在构建包时,您可以将一些东西安装到$pkgdir/usr/bin/foo中。当安装该包时,该文件将被放置在/usr/bin/foo

代码语言:javascript
复制
package() {
        cd "$_pkgname"
        install -m 644 ".man/hbhc.1.gz" "$pkgdir/usr/local/share/man/man1/"
        cp sha* "$pkgdir/usr/bin/"
        cp md5* "$pkgdir/usr/bin/"
        cp hbhc "$pkgdir/usr/bin/"
        cp .man/hbhc.1.gz "$pkgdir/usr/local/share/man/man1/hbhc.1.gz"
}

这种想法也被称为DESTDIR,它通常被记录在各种make和类似工具中:

希望这能帮你解决问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61940741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档