/
usr
/
local
/
bin
/
/usr/local/bin
mkdir
upload
Name
Size
Mode
Actions
config_data
7138
0555
edit
dl
rm
crc32
1043
0555
edit
dl
rm
crontab
3320736
0755
edit
dl
rm
drush
6138646
0755
edit
dl
rm
drush.phar
6138646
0755
edit
dl
rm
ea-php72
5815400
0755
edit
dl
rm
ea-php73
5647288
0755
edit
dl
rm
ea-php74
6383296
0755
edit
dl
rm
ea-php80
7986080
0755
edit
dl
rm
ea-php81
8098952
0755
edit
dl
rm
ea_convert_php_ini
40811
0755
edit
dl
rm
ea_current_to_profile
11519
0755
edit
dl
rm
ea_install_profile
7274
0755
edit
dl
rm
ea_sync_user_phpini_settings
6888
0755
edit
dl
rm
htmltree
1173
0555
edit
dl
rm
instmodsh
4194
0555
edit
dl
rm
ipcount
3724
0555
edit
dl
rm
iptab
982
0555
edit
dl
rm
json_pp
3828
0555
edit
dl
rm
json_xs
7013
0555
edit
dl
rm
lsphp
937
0755
edit
dl
rm
lwp-download
8635
0555
edit
dl
rm
lwp-dump
2797
0555
edit
dl
rm
lwp-mirror
2478
0555
edit
dl
rm
lwp-request
15059
0555
edit
dl
rm
mech-dump
4623
0555
edit
dl
rm
passwd
3768664
0755
edit
dl
rm
pear
935
0755
edit
dl
rm
php
933
0755
edit
dl
rm
php-config
6384
0755
edit
dl
rm
prove
13457
0555
edit
dl
rm
ptar
3456
0555
edit
dl
rm
ptardiff
2535
0555
edit
dl
rm
ptargrep
4299
0555
edit
dl
rm
shasum
9287
0555
edit
dl
rm
tpage
8923
0555
edit
dl
rm
ttree
39234
0555
edit
dl
rm
wp
6928461
0755
edit
dl
rm
wp-cli.phar
6928461
0755
edit
dl
rm
zipdetails
48366
0555
edit
dl
rm
Edit:
/usr/local/bin/ea_install_profile
(7274B)
#!/usr/local/cpanel/3rdparty/bin/perl # cpanel - ea_install_profile Copyright(c) 2016 cPanel, Inc. # All rights Reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cPanel license. Unauthorized copying is prohibited package ea_install_profile; use strict; use Cpanel::JSON; use Cpanel::PackMan; use Cpanel::Config::Httpd; use Data::Dumper; use Path::Tiny 'path'; sub usage { my ($msg) = @_; print "Error: $msg\n" if defined $msg; print "usage: ea_install_profile [--firstinstall|--install] profile_file\n"; print "\n"; print " With no flags, $0 will only do conflict resolution on the profile.\n"; print "\n"; print " --install: Resolve conflicts and install the profile.\n"; print " --firstinstall: Attempt to do the install without conflict resolution and fallback\n"; print " to doing --install if it fails. This is only intended to be used\n"; print " on a fresh cPanel install.\n"; print "\n"; exit( $msg ? 1 : 0 ); } sub script { my (@args) = @_; die "May only be run if you are using EasyApache 4" if ( !Cpanel::Config::Httpd::is_ea4() ); my $profile; my $install = 0; my $firstinstall = 0; my $idx = 0; if ( $args[$idx] eq "--firstinstall" ) { $idx++; $firstinstall = 1; } if ( $args[$idx] eq "--install" ) { $idx++; $install = 1; } usage() if ( !defined $args[$idx] ); $profile = $args[$idx]; if ( !-f $profile ) { $profile = "/etc/cpanel/ea4/profiles/custom/" . $profile; usage("Cannot find profile") if !-f $profile; } my @addl_prefixes = eval { map { $_->basename } path("/etc/cpanel/ea4/additional-pkg-prefixes/")->children; }; print "Loading profile …\n"; my %server_pkgs; @server_pkgs{ Cpanel::PackMan->instance->list( 'prefix' => 'ea-' ) } = (); for my $prefix (@addl_prefixes) { @server_pkgs{ Cpanel::PackMan->instance->list( 'prefix' => "$prefix-" ) } = (); } my $data = Cpanel::JSON::LoadFile($profile); # 1. Fix ea-apachae24 package names with underscores for Ubuntu and with dashes for RHEL if needed (See ZC-11501 for why this is necessary) my $pkgmgr = -x '/usr/bin/apt' ? 'deb' : 'rpm'; my $changed = 0; if ( $pkgmgr eq 'deb' ) { foreach my $pkg ( @{ $data->{pkgs} } ) { my $new_pkg = _normalize_pkg_for_ubuntu($pkg); if ( $new_pkg ne $pkg ) { $pkg = $new_pkg; $changed = 1; } } } elsif ( $pkgmgr eq 'rpm' ) { foreach my $pkg ( @{ $data->{pkgs} } ) { my $new_pkg = _normalize_pkg_for_rhel( $pkg, \%server_pkgs ); if ( $new_pkg ne $pkg ) { $pkg = $new_pkg; $changed = 1; } } } else { die "How did we get here? `pkgmgr` is neither `rpm` nor `deb` ($pkgmgr)\n"; } path($profile)->spew( Cpanel::JSON::pretty_dump($data) ) if $changed; # 2. detect any packages in the profile that do not exist on the server my %not_on_server = ( map { !exists $server_pkgs{$_} ? ( $_ => undef ) : () } @{ $data->{pkgs} } ); # 3. remove %not_on_server from $profile->{pkgs} $data->{pkgs} = [ grep { !exists $not_on_server{$_} } @{ $data->{pkgs} } ]; # 4. Tell them about the ones we are ignoring my $derps = 0; for my $derppkg ( sort keys %not_on_server ) { warn " * Warning! ignored package: $derppkg. It is in the profile’s package list but does not exist on this server.\n"; $derps++; } print "\n" if $derps; if ( $data->{pre} ) { print "Installing prereqs …\n"; my $sys = Cpanel::PackMan->instance->sys; $sys->install( @{ $data->{pre} } ); # apt, yum, and dnf’s `install` will install if its not installed, upgrade if its old, noop if its already the latest $sys->cache; # this is needed in case a new package repo was put in place print " … prereqs done!\n\n"; } if ($firstinstall) { print "The system is running in first install mode and will install the requested packages without resolving conflicts …\n"; local $@; eval { Cpanel::PackMan->instance->sys->install( @{ $data->{pkgs} } ); }; print " … done!\n"; if ($@) { warn "First install method failed ($@)."; warn "The system will fall back to doing a full install."; $install = 1; } else { return 0; } } print "The system is resolving package dependencies and conflicts. This may take some time …\n"; my $resolve_method = defined &Cpanel::PackMan::resolve_multi_op_ns ? 'resolve_multi_op_ns' : 'resolve_multi_op'; my $res = Cpanel::PackMan->instance->$resolve_method( $data->{'pkgs'}, 'ea' ); for my $prefix (@addl_prefixes) { my $prefix_res = eval { Cpanel::PackMan->instance->$resolve_method( $data->{'pkgs'}, $prefix ) }; if ($@) { if ( $@ =~ m/Unknown namespace/ ) { warn "!!!! Your system is not new enough to support EA4 pkg prefixes besides `ea-`, other prefixes will be left out !!\n"; last; } else { chomp $@; warn "!!!! There was a problem with the additional-pkg-prefix “$prefix”, it will be left out !!\n\tError: $@\n"; next; } } for my $field (qw(uninstall unaffected upgrade install)) { push @{ $res->{$field} }, @{ $prefix_res->{$field} }; } } print " … done!\n"; if ($install) { print "Installing …\n"; my $actions = Cpanel::PackMan->instance->multi_op($res); if ( !$actions ) { print " … nothing to do.\n"; } else { print " … done!\n"; } } else { print Dumper($res); } return 0; } sub _normalize_pkg_for_ubuntu { my ($pkg) = @_; $pkg =~ s/_/-/g; return $pkg; } sub _normalize_pkg_for_rhel { my ( $orig_pkg, $server_pkgs_hr ) = @_; # Short-circuit if there is an exact match: return $orig_pkg if exists $server_pkgs_hr->{$orig_pkg}; my $pkg = $orig_pkg; my $prefix = 'ea-apache24-mod'; if ( $pkg =~ m/^($prefix)(.*)/ ) { my $name = $2; $name =~ s/-/_/g; # Apache module packages tend to use underscores, so start with that. $pkg = $prefix . $name; # If that also fails, search through the entire list: if ( !exists $server_pkgs_hr->{$pkg} ) { my $re_pkg = $prefix . ( $name =~ s/_/[-_]/gr ); my @results = grep { m/^$re_pkg$/ } keys %$server_pkgs_hr; $pkg = $results[0] if scalar @results > 0; warn "!!!! Multiple inexact matches for '$orig_pkg' when treating underscores and dashes as equivalent; using '$pkg'!" if scalar @results > 1; } } return $pkg; } exit( script(@ARGV) ) unless caller(); 1;
Save
cmd:
run