LedgerSMB-Installer
view release on metacpan or search on metacpan
lib/LedgerSMB/Installer/OS/linux/debian.pm view on Meta::CPAN
$log->error( "Error: Modules skipped while mapping to packages: " . join(', ', @skipped ) );
push @unmapped, @skipped;
}
return (\%pkgs, \@unmapped);
}
sub pkg_can_install($self) {
return ($EFFECTIVE_USER_ID == 0);
}
sub pkg_install($self, $pkgs) {
$pkgs //= [];
my $apt_get = $self->have_cmd( 'apt-get' );
my @cmd;
@cmd = ($apt_get, qw( update -q -y ));
do {
local $ENV{DEBIAN_FRONTEND} = 'noninteractive';
$log->debug( "system(): " . join(' ', map { "'$_'" } @cmd ) );
system(@cmd) == 0
or croak $log->fatal( "Unable to update 'apt-get' package index: $!" );
};
@cmd = ($apt_get, qw( install -q -y ), $pkgs->@*);
do {
local $ENV{DEBIAN_FRONTEND} = 'noninteractive';
$log->debug( "system(): " . join(' ', map { "'$_'" } @cmd ) );
system(@cmd) == 0
or croak $log->fatal( "Unable to install required packages through apt-get: $!" );
};
}
sub pkg_uninstall($self, $pkgs) {
$pkgs //= [];
my $apt_get = $self->have_cmd( 'apt-get' );
my @cmd = ($apt_get, qw(autoremove --purge -q -y), $pkgs->@*);
do {
local $ENV{DEBIAN_FRONTEND} = 'noninteractive';
$log->debug( "system(): " . join(' ', map { "'$_'" } @cmd ) );
system(@cmd) == 0
or croak $log->fatal( "Unable to uninstall packages through apt-get: $!" );
};
}
sub cleanup_env($self, $config, %args) {
$self->pkg_uninstall( [ $config->pkgs_for_cleanup ] );
}
sub prepare_builder_env($self, $config) {
my ($have_build_essential, ) = capture_stdout {
system( qw( dpkg-query -W build-essential ) );
};
unless (grep { m/build-essential/ } split( /\n/, $have_build_essential )) {
$config->mark_pkgs_for_cleanup( [ 'build-essential' ] );
$self->pkg_install( [ 'build-essential' ] );
}
}
sub prepare_extraction_env($self, $config) {
my ($have_deps, ) = capture_stdout {
system( qw( dpkg-query -W tar gzip gpg ) );
};
my @pkgs;
unless (grep { m/tar/ } split(/\n/, $have_deps)) {
push @pkgs, 'tar';
}
unless (grep { m/gzip/ } split(/\n/, $have_deps)) {
push @pkgs, 'gzip';
}
if ($config->verify_sig) {
unless (grep { m/gpg/ } split(/\n/, $have_deps)) {
push @pkgs, 'gpg';
}
}
if (@pkgs) {
$config->mark_pkgs_for_cleanup( \@pkgs );
$self->pkg_install( \@pkgs );
}
$self->SUPER::prepare_extraction_env( $config );
}
sub prepare_installer_env($self, $config) {
my ($have_make, ) = capture_stdout {
system( qw( dpkg-query -W make ) );
};
unless (grep { m/make/ } split(/\n/, $have_make)) {
$config->mark_pkgs_for_cleanup( [ 'make' ] );
$self->pkg_install( [ 'make' ] );
}
$self->SUPER::prepare_installer_env( $config );
}
sub prepare_pkg_resolver_env($self, $config) {
my @new_pkgs;
my ($have_dh_make_perl, ) = capture_stdout {
system( qw( dpkg-query -W dh-make-perl ) );
};
unless (grep { m/dh-make-perl/ } split( /\n/, $have_dh_make_perl)) {
push @new_pkgs, 'dh-make-perl';
}
my ($have_apt_file, ) = capture_stdout {
system( qw( dpkg-query -W apt-file ) );
};
unless (grep { m/apt-file/ } split( /\n/, $have_apt_file)) {
push @new_pkgs, 'apt-file';
}
if ($config->effective_prepare_env) {
$config->mark_pkgs_for_cleanup( \@new_pkgs );
$self->pkg_install( \@new_pkgs );
}
$self->have_cmd( 'apt-file', $config->effective_compute_deps );
$self->have_cmd( 'dh-make-perl', $config->effective_compute_deps );
}
sub _rm_installed($pkgs) {
my %pkgs = map {
$_ => 1
} $pkgs->@*;
my @cmd = (qw(dpkg-query -W), $pkgs->@*);
my ($installed, ) = capture_stdout {
system( @cmd );
};
delete $pkgs{$_} for (
map {
my ($pkg) = split( /\t/, $_ );
$pkg =~ s/:.*$//r;
} split( /\n/, $installed )
);
return [ keys %pkgs ];
}
( run in 1.010 second using v1.01-cache-2.11-cpan-df04353d9ac )