我尝试执行以下操作。首先,我安装一个可重定位的 perl,例如:
% perlbrew -Duserelocatableinc -j4 -n --as perl-5.28.1-fresh_src 5.28.1
然后,每当我需要一个新的一次性全新安装的 perl 来测试时,我会:
% cp -la ~/perl5/perlbrew/perls/perl-5.28.1-fresh{_src,1}
% perlbrew switch 5.28.1-fresh1
(然后会根据需要创建 fresh2
、 fresh3
等等;当我想扔掉它们时,我只是 rm -rf ~/perl5/perlbrew/perls/*fresh1
等等。)
然而,有些东西(cpanm?EUMM?)仍然很困惑。从 CPAN 安装的脚本在其 shebang 行中仍然具有原始的 perl 路径(在本例中为 /home/USER/perl5/perlbrew/perls/perl-5.28.1-fresh_src/bin
)。
对上述问题的任何提示,或快速创建全新的一次性 perl 安装的替代方法,我们都表示赞赏。另外,-l
会吗? ( --link
) cp
的选项在上面的命令中导致问题(除了 perllocal.pod
被附加并且将包含 perl 安装的安装记录,这对我来说很好)?
最佳答案
它不完全相同,但我发现 docker
可以工作,如果我需要为某些测试场景进行全新安装 - 构建一个基础镜像和一个干净的 perl 安装,启动容器并运行“随便”。
您需要 root 访问权限并能够安装软件包(例如 docker),因此它并不适合所有用例。
https://buildlogs.centos.org/centos/7/docker/有一个基础镜像,你可以用它来构建一个“干净的”CentOS(或者坦率地说,使用你喜欢的任何操作系统——大多数都有容器版本)
FROM scratch
ADD CentOS-7-20140625-x86_64-docker_01.img.tar.xz
LABEL name="CentOS Base Image"
CMD ["/bin/bash"]
在工作目录中:
docker build -t mycentos .
这将为您提供一个非常基本的图像:
然后是你的 perl dockerfile:
FROM mycentos
COPY local.repo /etc/yum.repos.d/local.repo
RUN yum clean all
RUN yum install --nogpgcheck -y make gcc tar
ADD perl-5.28.1.tar.gz /build/
RUN cd /build/perl-5.28.1 && ./Configure -de
RUN cd /build/perl-5.28.1 && make && make test && make install
COPY MyConfig.pm /root/.cpan/CPAN/MyConfig.pm
RUN cpan install Bundle::CPAN
CMD ["/bin/bash"]
您可以使用例如docker run
并使用 /usr/local/bin/perl
调用脚本。
这并不完全符合您的要求,但您可以根据需要启动和丢弃您的基本镜像 - 您也可以为几个不同的操作系统和 perl 组合维护镜像。
关于perl - 使用 perlbrew 创建一个全新的、一次性安装的 perl 的最快、最便宜的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55357004/