Server : Apache System : Linux copper.netcy.com 2.6.32-754.27.1.el6.centos.plus.x86_64 #1 SMP Thu Jan 30 13:54:25 UTC 2020 x86_64 User : montcaro ( 581) PHP Version : 7.4.28 Disable Function : NONE Directory : /scripts/ |
#!/usr/local/cpanel/3rdparty/bin/perl # cpanel - scripts/installpostgres Copyright 2019 cPanel, L.L.C. # All rights reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cPanel license. Unauthorized copying is prohibited package scripts::installpostgres; use strict; use warnings; use Cpanel::SafeRun::Simple (); use Cpanel::Sys::OS::Check (); use Cpanel::SysPkgs (); use Cpanel::Chkservd::Manage (); use Cpanel::PostgresUtils (); use Cpanel::PostgresUtils::PgPass (); use Whostmgr::Postgres (); run(@ARGV) unless caller(); sub prompt { my ( $message, @args ) = @_; chomp $message; print $message; if ( !@args || $args[0] !~ /\-\-yes/ ) { my $res = <STDIN>; if ( $res !~ /^y/i ) { print "Exiting...\n"; exit(); } } return; } sub run { my @args = @_; if ( -d "/root/.cpupdates" ) { system("rm -f /root/.cpupdates/*"); } my $minversion = Cpanel::Sys::OS::Check::has_systemd() ? q{9.2.x} : q{7.4.x}; my $restart_instruction; if ( Cpanel::Sys::OS::Check::has_systemd() ) { $restart_instruction = "\tsystemctl restart postgresql"; } else { $restart_instruction = "\t/sbin/service postgresql stop\n" . "\t/sbin/service postgresql start\n"; } if ( my $old_pg_home = Cpanel::PostgresUtils::find_pgsql_home() ) { my $notice = <<"EOS"; This script installs PostgreSQL $minversion or later. If your system runs an older version of PostgreSQL, you must dump your databases to a file, and then restore them after installation. PostgreSQL $minversion is NOT backwards compatible. If no PostgreSQL databases exist on your system, run the following command to force the creation of a PostgreSQL $minversion -style setup: \tmv $old_pg_home $old_pg_home.old $restart_instruction Do not run this command if databases exist that you wish to keep! Are you certain that you wish to proceed? [y/(n)]: EOS prompt( $notice, @args ); } else { my $notice = <<"EOS"; This script installs PostgreSQL $minversion or later. Are you certain that you wish to proceed? [y/(n)]: EOS prompt( $notice, @args ); } print "Installing Postgres...\n"; my $syspkgobj = Cpanel::SysPkgs->new(); if ( !$syspkgobj ) { die print "The system could not create the SysPkgs object.\n"; } my @pkgs = ( "rh-postgresql", "rh-postgresql-devel", "rh-postgresql-libs", "rh-postgresql-server", "postgresql", "postgresql-devel", "postgresql-libs", "postgresql-server" ); $syspkgobj->install( 'pkglist' => \@pkgs ); my $pg_user = Cpanel::PostgresUtils::PgPass::getpostgresuser(); my $pg_home = Cpanel::PostgresUtils::find_pgsql_home( 'user' => $pg_user ); my $pg_data = Cpanel::PostgresUtils::find_pgsql_data( 'home' => $pg_home ); if ( Cpanel::Sys::OS::Check::has_systemd() ) { if ( !-e "$pg_data/global" ) { Cpanel::SafeRun::Simple::saferunnoerror( '/usr/bin/postgresql-setup', 'initdb' ); } Cpanel::SafeRun::Simple::saferunnoerror( '/usr/local/cpanel/scripts/setpostgresconfig', '--force' ); } else { if ( !-e "/etc/rc.d/init.d/postgresql" && -e "/etc/rc.d/init.d/rhdb" ) { symlink( "rhdb", "/etc/rc.d/init.d/postgresql" ); } if ( !-e "$pg_data/global" ) { Cpanel::SafeRun::Simple::saferunnoerror(qw{/sbin/service postgresql initdb}); Cpanel::SafeRun::Simple::saferunnoerror( '/usr/local/cpanel/scripts/setpostgresconfig', '--force' ); } } Cpanel::SafeRun::Simple::saferun( '/usr/local/cpanel/scripts/cpservice', 'postgresql', 'enable', '35' ); my ( $status, $message ); ( $status, $message ) = Whostmgr::Postgres::update_config(); print $message. "\n"; Cpanel::SafeRun::Simple::saferunnoerror('/usr/local/cpanel/scripts/restartsrv_postgres'); my $install_ok = $? == 0 ? 1 : 0; if ($install_ok) { ( $status, $message ) = Whostmgr::Postgres::create_dbowners_for_cpusers(); print $message. "\n"; $install_ok &&= $status; if ($install_ok) { print q{ The PostgreSQL packages successfully installed. To configure PostgreSQL, set your password, and enable PostgreSQL for user accounts, navigate to WHM's Configure PostgreSQL interface (Home >> SQL Services >> Configure PostgreSQL). }; print "Setting a random password for the PostgreSQL database user.\n"; Cpanel::SafeRun::Simple::saferun( '/usr/local/cpanel/bin/postgrescheck', '--check-auth', '--reset-pass-on-fail' ); Cpanel::SafeRun::Simple::saferun('/usr/local/cpanel/bin/cpsessetup'); # If PostgreSQL has never been listed under chkservd, enable monitoring for it. # (This might happen if the service was uninstalled manually but reinstalled with this script.) # Doing this prevents /scripts/check_unmonitored_enabled_services from complaining to the admin # who is installing PostgreSQL for the first time on this system. my %MONITORED = Cpanel::Chkservd::Manage::getmonitored(); Cpanel::Chkservd::Manage::enable('postgresql') unless exists $MONITORED{'postgresql'}; } } # install_ok value can change in the previous block if ( !$install_ok ) { print STDERR qq{The PostgreSQL installation failed.\n}; } system '/usr/local/cpanel/bin/build_global_cache'; # reset haspostgres exit( $install_ok ? 0 : 1 ); } 1;