
일부 코드를 기반으로이 블로그그리고 댓글에서 나는 Puppet에 대한 몇 가지 간단한 CPAN 설치 기능을 정의하려고 하며 다음을 시도하고 있습니다.
class perl {
define install-cpan () {
exec { "cpan_load_${name}":
command => "perl -I.cpan -MCPAN -e '\$ENV{PERL_MM_USE_DEFAULT}=1; install $name'",
cwd => "/root",
path => "/usr/bin:/usr/sbin:/bin:/sbin",
unless => "perl -M$name -e 1",
}
}
package { 'perl': ensure => installed }
}
perl::install-cpan { "Bundle::CPAN": }
하지만 다음 오류가 발생합니다.
err: Could not retrieve catalog from remote server: Could not intern
from pson: Could not convert from pson: Could not find relationship
target "Perl::Install-cpan[Bundle::CPAN]"
이는 무엇을 의미하며 어떻게 해결합니까?
답변1
나는 실제로 cpan 대신 cpanminus를 사용하기로 결정했으며 다음을 사용하고 있습니다.
# perl/manifests/init.pp
class perl {
define installCPAN () {
exec { "cpanLoad${title}":
command => "cpanm $name",
path => "/usr/bin:/usr/sbin:/bin:/sbin",
unless => "perl -I.cpan -M$title -e 1",
timeout => 600,
require => Exec["initCPAN"],
}
}
package { "perl": ensure => installed, require => Class["common"] }
exec { "initCPAN":
command => "wget -O - http://cpanmin.us | perl - --self-upgrade",
path => "/usr/bin:/usr/sbin:/bin:/sbin",
creates => "/bin/cpanm",
require => [ Class["common"], Package["perl"] ],
}
# E.g.
installCPAN { "JSON": }
installCPAN { "JSON::XS": }
}
답변2
주요 오류는 "install-cpan" 이름의 "-"인 것 같습니다. 다음은 작동하지만 INIT_CPAN 명령은 다음에서 찾을 수 있습니다.CPAN 구성을 자동화하려면 어떻게 해야 합니까?.
# perl/manifests/init.pp
class perl {
define installCPAN () {
exec { "cpanLoad${title}":
command => "perl -MCPAN -e 'install(q[$name])'",
cwd => "/root",
path => "/usr/bin:/usr/sbin:/bin:/sbin",
unless => "perl -I.cpan -M$name -e 1",
timeout => 600,
environment => [
"PERL_MM_USE_DEFAULT=1",
"PERL_MM_NONINTERACTIVE=1",
"AUTOMATED_TESTING=1",
],
}
}
package { "perl": ensure => installed, require => Class["common"] }
file { "initCPANcmd":
source => "puppet://puppet/perl/INIT_CPAN",
path => "/root/INIT_CPAN",
owner => "root",
mode => 700,
}
exec { "initCPAN":
command => "/root/INIT_CPAN",
cwd => "/root",
path => "/usr/bin:/usr/sbin:/bin:/sbin",
creates => "/root/.cpan/CPAN/MyConfig.pm",
require => [ File["initCPANcmd"], Package["perl"] ],
}
perl::installCPAN { "Bundle::CPAN": require => Exec["initCPAN"] }
}