--- loncom/debugging_tools/modify_config_files.pl 2009/07/14 03:05:59 1.9 +++ loncom/debugging_tools/modify_config_files.pl 2021/12/21 13:57:47 1.22 @@ -2,7 +2,7 @@ # # The LearningOnline Network # -# $Id: modify_config_files.pl,v 1.9 2009/07/14 03:05:59 raeburn Exp $ +# $Id: modify_config_files.pl,v 1.22 2021/12/21 13:57:47 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -37,15 +37,20 @@ B =head1 SYNOPSIS This script modifies /etc/my.cnf and one of: /etc/yum.conf -(for Fedora/CentOS/Scientific Linux/RHEL5), /etc/apt/sources.list -(for Debian/Ubuntu) and /etc/sysconfig/rhn/sources (for RHEL4). +(for CentOS/Scientific Linux/RHEL >=5 and <8), /etc/apt/sources.list +(for Debian/Ubuntu), /etc/sysconfig/rhn/sources (for RHEL4), +and /etc/yum.repos.d/loncapa.repo (Fedora >= 21; Oracle Linux; +CentOS/RHEL >= 8). =head1 DESCRIPTION -This script modifies /etc/my.cnf and /etc/yum.conf or /etc/apt/sources -or /etc/sysconfig/rhn/sources to ensure certain parameters are set -properly. The LON-CAPA yum repositories are added to /etc/yum.conf or -/etc/sysconfig/rhn/sources and the LON-CAPA apt repositories are added to +This script modifies /etc/my.cnf, /etc/yum.conf, /etc/yum.repos.d/loncapa.repo, +/etc/apt/sources, or /etc/sysconfig/rhn/sources to ensure certain +parameters are set properly. + +The LON-CAPA yum repositories are added to /etc/yum.conf, +/etc/yum.repos.d/loncapa.repo, /etc/sysconfig/rhn/sources +and the LON-CAPA apt repositories are added to /etc/apt/sources.list. The /etc/my.cnf file is modified to set the wait_timeout to 1 year. Backup @@ -69,25 +74,31 @@ my $yum_status; my $loninst = 'http://install.loncapa.org'; my $loninst_re = 'http://install\.loncapa\.org'; if ($dist =~ /^fedora(\d+)$/) { + my $file = '/etc/yum.conf'; my $ver = $1; - my $gpgchk = 0; + my $gpgchk = '0'; my $gpg = "$loninst/versions/fedora/RPM-GPG-KEY-loncapa"; + my $nobackup; if ($ver > 6) { - $gpgchk = 1; + $gpgchk = '1'; + } + if ($ver >= 21) { + $file = '/etc/yum.repos.d/loncapa.repo'; + $nobackup = 1; } $yum_status = - &update_file('/etc/yum.conf', - [{section => 'loncapa-updates-$basearch', + &update_file($file, + [{section => 'loncapa-updates-basearch', key => 'name=', value => 'Fedora Core $releasever LON-CAPA $basearch Updates', - }, {section => 'loncapa-updates-$basearch', + }, {section => 'loncapa-updates-basearch', key => 'baseurl=', value => $loninst.'/fedora/linux/loncapa/$releasever/$basearch', - }, {section => 'loncapa-updates-$basearch', + }, {section => 'loncapa-updates-basearch', key => 'gpgcheck=', value => $gpgchk, - }, {section => 'loncapa-updates-$basearch', - key => 'gpg=', + }, {section => 'loncapa-updates-basearch', + key => 'gpgkey=', value => $gpg, }, {section => 'loncapa-updates-noarch', key => 'name=', @@ -99,19 +110,23 @@ if ($dist =~ /^fedora(\d+)$/) { key => 'gpgcheck=', value => $gpgchk, }, {section => 'loncapa-updates-noarch', - key => 'gpg=', + key => 'gpgkey=', value => $gpg, - }]); -} elsif ($dist =~ /^(rhes|centos|scientific)(\d+)$/) { + }],$nobackup); +} elsif ($dist =~ /^(rhes|centos|scientific|oracle|rocky|alma)(\d+)(|\-stream)$/) { my $type = $1; my $ver = $2; + my $stream = $3; my $longver = $ver; + my $nobackup; if ($type eq 'rhes') { if ($ver == 4) { $longver = '4ES'; } elsif ($ver == 5) { $longver = '5Server'; } + } elsif ($type eq 'centos') { + $type .= $stream; } my %info = ( rhes => { @@ -132,21 +147,55 @@ if ($dist =~ /^fedora(\d+)$/) { gpg => 'versions/scientific/RPM-GPG-KEY-loncapa', gpgchk => 1, }, + oracle => { + title => 'Oracle Linux', + path => 'oracle/loncapa', + gpg => 'versions/oracle/RPM-GPG-KEY-loncapa', + gpgchk => 1, + }, + rocky => { + title => 'Rocky Linux', + path => 'rocky/loncapa', + gpg => 'versions/rocky/RPM-GPG-KEY-loncapa', + gpgchk => 1, + }, + alma => { + title => 'AlmaLinux', + path => 'alma/loncapa', + gpg => 'versions/alma/RPM-GPG-KEY-loncapa', + gpgchk => 1, + }, + centos-stream => { + title => 'CentOS Stream', + path => 'centos/loncapa', + gpg => 'versions/centos/RPM-GPG-KEY-loncapa', + gpgchk => 1, + }, ); if (ref($info{$type}) eq 'HASH') { if ($ver > 4) { + my $file = '/etc/yum.conf'; + if (($ver > 7) || ($type eq 'oracle') || ($type eq 'rocky') || + ($type eq 'alma') || ($type eq 'centos-stream')) { + $file = '/etc/yum.repos.d/loncapa.repo'; + $nobackup = 1; + } + my $release = '$releasever'; + if ($type eq 'centos-stream') { + $release .= '-stream'; + } $yum_status = - &update_file('/etc/yum.conf', + &update_file($file, [{section => 'loncapa-updates-basearch', key => 'name=', value => $info{$type}{title}.' $releasever LON-CAPA $basearch Updates', }, {section => "loncapa-updates-basearch", key => 'baseurl=', - value => "$loninst/$info{$type}{path}/".'$releasever/$basearch', + value => "$loninst/$info{$type}{path}/$release/".'$basearch', }, {section => 'loncapa-updates-basearch', key => 'gpgcheck=', - value => $info{$type}{gpchk}, - }, {section => 'loncapa-updates-$basearch', + value => $info{$type}{gpgchk}, + }, {section => 'loncapa-updates-basearch', key => 'gpgkey=', value => "$loninst/$info{$type}{gpg}", }, {section => 'loncapa-updates-noarch', @@ -154,14 +203,14 @@ if ($dist =~ /^fedora(\d+)$/) { value => $info{$type}{title}.' $releasever LON-CAPA noarch Updates', }, {section => 'loncapa-updates-noarch', key => 'baseurl=', - value => "$loninst/$info{$type}{path}/".'$releasever/noarch', + value => "$loninst/$info{$type}{path}/$release/noarch", }, {section => 'loncapa-updates-noarch', key => 'gpgcheck=', - value => $info{$type}{gpchk}, + value => $info{$type}{gpgchk}, }, {section => 'loncapa-updates-noarch', key => 'gpgkey=', value => "$loninst/$info{$type}{gpg}", - }]); + }],$nobackup); } elsif (($type eq 'rhes') && ($ver == 4)) { my %rhn = ( basearch => { @@ -179,17 +228,41 @@ if ($dist =~ /^fedora(\d+)$/) { } elsif ($dist =~ /^(debian|ubuntu)\d+$/) { my %apt_get_source = ( debian5 => { - regexp => '\s*deb\s+'.$loninst_re.'/debian/\s+lenny\s+main', - text => "deb $loninst/debian/ lenny main", + regexp => '\s*deb\s+'.$loninst_re.'/debian/?\s+lenny\s+main', + text => "deb $loninst/debian lenny main", }, ubuntu6 => { - regexp => '\s*deb\s+'.$loninst_re.'/ubuntu/\s+dapper\s+main', - text => "deb $loninst/ubuntu/ dapper main", + regexp => '\s*deb\s+'.$loninst_re.'/ubuntu/?\s+dapper\s+main', + text => "deb $loninst/ubuntu dapper main", }, ubuntu8 => { - regexp => '\s*deb\s+'.$loninst_re.'/ubuntu/\s+hardy\s+main', - text => "deb $loninst/ubuntu/ hardy main", + regexp => '\s*deb\s+'.$loninst_re.'/ubuntu/?\s+hardy\s+main', + text => "deb $loninst/ubuntu hardy main", }, + ubuntu10 => { + regexp => '\s*deb\s+'.$loninst_re.'/ubuntu/?\s+lucid\s+main', + text => "deb $loninst/ubuntu lucid main", + }, + ubuntu12 => { + regexp => '\s*deb\s+'.$loninst_re.'/ubuntu/?\s+precise\s+main', + text => "deb $loninst/ubuntu precise main", + }, + ubuntu14 => { + regexp => '\s*deb\s+'.$loninst_re.'/ubuntu/?\s+trusty\s+main', + text => "deb $loninst/ubuntu trusty main", + }, + ubuntu16 => { + regexp => '\s*deb\s+'.$loninst_re.'/ubuntu/?\s+xenial\s+main', + text => "deb $loninst/ubuntu xenial main", + }, + ubuntu18 => { + regexp => '\s*deb\s+'.$loninst_re.'/ubuntu/?\s+bionic\s+main', + text => "deb $loninst/ubuntu bionic main", + }, + ubuntu20 => { + regexp => '\s*deb\s+'.$loninst_re.'/ubuntu/?\s+focal\s+main', + text => "deb $loninst/ubuntu focal main", + }, ); my $apt_status; if (defined($apt_get_source{$dist})) { @@ -197,11 +270,30 @@ if ($dist =~ /^fedora(\d+)$/) { } } -my $mysql_global_status = - &update_file('/etc/my.cnf', - [{section =>'mysqld', - key =>'set-variable=wait_timeout=', - value =>'31536000', }]); +my $mysqlfile = '/etc/my.cnf'; +my $mysqlconf = [{section =>'mysqld', + key =>'wait_timeout=', + value =>'31536000'}]; +if ($dist =~ /^ubuntu(\d+)$/) { + my $version = $1; + $mysqlfile = '/etc/mysql/my.cnf'; + if ($version > 14) { + $mysqlfile = '/etc/mysql/mysql.conf.d/mysqld.cnf'; + if ($version < 20) { + push(@{$mysqlconf}, + {section =>'mysqld', + key =>'sql_mode=', + value =>'"STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"'}); + } else { + push(@{$mysqlconf}, + {section =>'mysqld', + key =>'sql_mode=', + value =>'"STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"'}); + } + } +} + +my $mysql_global_status = &update_file($mysqlfile,$mysqlconf); my $local_my_cnf = '/home/www/.my.cnf'; if (! -e $local_my_cnf) { @@ -225,12 +317,14 @@ exit $exitvalue; sub update_file { - my ($file,$newdata) = @_; + my ($file,$newdata,$nobackup) = @_; return 1 if (! -e $file); - my $backup = $file.'.backup'; - if (! copy($file,$backup)) { - warn "**** Error: Unable to make backup of $file"; - return 0; + unless ($nobackup) { + my $backup = $file.'.backup'; + if (! copy($file,$backup)) { + warn "**** Error: Unable to make backup of $file"; + return 0; + } } my ($filedata) = &parse_config_file($file); if (! ref($filedata)) { warn "**** Error: $filedata"; return 0;} @@ -327,7 +421,7 @@ sub write_config_file { if (! defined($structure) || ! ref($structure)) { return 'Bad subroutine inputs'; } - open(OUTPUT,'>'.$file) || return('Unable to open '.$file.' for writing'); + open(OUTPUT,'>',$file) || return('Unable to open '.$file.' for writing'); for (my $i=0;$i[$i]; chomp($line); @@ -470,7 +564,7 @@ sub update_rhn_source { } my $result = 0; my $fh; - if (open($fh,"<$file")) { + if (open($fh,'<',$file)) { my $total = 0; my %found; foreach my $item (keys(%{$rhn_items})) { @@ -492,7 +586,7 @@ sub update_rhn_source { } close($fh); if ($total < 2) { - if (open($fh,">>$file")) { + if (open($fh,'>>',$file)) { foreach my $item (keys(%{$rhn_items})) { unless ($found{$item}) { if (ref($rhn_items->{$item}) eq 'HASH') { @@ -547,7 +641,7 @@ sub update_apt_source { } my $result = 0; my $fh; - if (open($fh,"<$file")) { + if (open($fh,'<',$file)) { my $found = 0; my $pattern = $deb_row->{regexp}; while(<$fh>) { @@ -558,7 +652,7 @@ sub update_apt_source { } close($fh); if (!$found) { - if (open($fh,">>$file")) { + if (open($fh,'>>',$file)) { print $fh "\n".$deb_row->{text}."\n"; close($fh); $result = 1;