我在 CentOS 环境中工作,并在本地设置 perlbrew (App::perlbrew/0.87)。我基本上一直在遵循以下步骤这里。我以前也以类似的方式设置过 perlbrew,没有出现任何问题,但现在遇到了一个奇怪的问题。值得注意的是,我能够在同一台机器、同一环境中为不同的用户本地设置 perlbrew 并安装 perl。
问题是这样的,安装了 perlbrew,但无法安装任何版本的 perl,因为下载 dist 后无法提取 tar.gz。
以下是有关安装的一些信息。Perlbrew 和 cpanm 似乎已安装到位并运行良好。
-bash-4.1$ env | grep PERL
PERLBREW_SHELLRC_VERSION=0.87
PERLBREW_ROOT=/my/home/dir/perl5/perlbrew
PERLBREW_HOME=/my/home/dir/.perlbrew
-bash-4.1$ env | grep perl
OLDPWD=/my/home/dir/perl5/perlbrew
PERLBREW_ROOT=/my/home/dir/perl5/perlbrew
PATH=/my/home/dir/perl5/perlbrew/bin:/usr/local/bin:/bin:...
PWD=/my/home/dir/perl5/perlbrew/dists
PERLBREW_HOME=/my/home/dir/.perlbrew
-bash-4.1$ which perlbrew
~/perl5/perlbrew/bin/perlbrew
My .bash_profile contains only:
source ~/perl5/perlbrew/etc/bashrc
-bash-4.1$ perlbrew available
perl-5.31.6
perl-5.30.1
perl-5.28.2
perl-5.26.3
perl-5.24.4
...
然而,当我尝试安装时,我开始收到来自 tar 的错误。
-bash-4.1$ perlbrew install perl-5.30.1
tar: perl-5.30.1/.dir-locals.el: Cannot close: Permission denied
tar: perl-5.30.1/.dir-locals.el: Cannot utime: Permission denied
tar: perl-5.30.1/.lgtm.yml: Cannot close: Permission denied
tar: perl-5.30.1/.lgtm.yml: Cannot utime: Permission denied
...
it goes on and on for every file.
我认为这里的关键输出是:
Failed to extract /my/home/dir/perl5/perlbrew/dists/perl-5.30.1.tar.gz at /my/home/dir/perl5/perlbrew/bin/perlbrew line 1631
如果我导航到 perlbrew 下载 dist 的位置并尝试手动提取它,则会失败。
-bash-4.1$ cd /my/home/dir/perl5/perlbrew/dists/
-bash-4.1$ ll
total 17308
drwxrwxrwx. 4 myUserID myGroup 11776 Dec 2 15:10 perl-5.30.1
-rwxrwxrwx. 1 myUserID myGroup 17712574 Nov 25 14:46 perl-5.30.1.tar.gz
-bash-4.1$ tar -xvf perl-5.30.1.tar.gz
perl-5.30.1/
perl-5.30.1/.dir-locals.el
tar: perl-5.30.1/.dir-locals.el: Cannot close: Permission denied
tar: perl-5.30.1/.dir-locals.el: Cannot utime: Permission denied
perl-5.30.1/.lgtm.yml
tar: perl-5.30.1/.lgtm.yml: Cannot close: Permission denied
tar: perl-5.30.1/.lgtm.yml: Cannot utime: Permission denied
perl-5.30.1/.metaconf-exclusions.txt
perl-5.30.1 目录已创建,文件也已生成,但实际上并未提取。所有内容都应该在目录里,但里面却全是 0kb 文件。
我已经通过从我创建的文件创建 tarball 并进行压缩和解压缩等操作测试了 tar,一切似乎都运行良好。所有文件都归我的用户/组所有,所以我不明白为什么我无法提取此文件。
有谁知道造成这种行为的原因是什么?
编辑:事实证明,这是在以相同方式配置的另一台机器上完成的!
我想再次指出,我能够在同一台机器上使用相同方法对不同的用户成功执行安装,并且没有遇到此问题。
一位用户 @DavidMitchell 评论说 ls -lZ 显示的附加权限可能会影响某些事情。请注意,我在这台机器上使用 SGE,并且必须使用 qlogin 来处理大多数任务。
qlogins 之前和之后:
In the perl/dist folder before qlogin.
-bash-4.1$ ls -lZ
-rwxrwxrwx. myUser myGroup system_u:object_r:nfs_t:s0 perl-5.30.1.tar.gz
AFTER qlogin
-bash-4.2$ ls -lZ
-rwxrwxrwx myUser MyGroup ? perl-5.30.1.tar.gz
所以那里有一个“?”,这很有趣。我检查了另一台安装成功的机器和用户,似乎也显示了同样的事情,所以也许这不是问题所在。我会继续深入研究,感谢您的进一步建议!