Diff for /loncom/debugging_tools/modify_config_files.pl between versions 1.23 and 1.26

version 1.23, 2021/12/21 15:43:57 version 1.26, 2024/07/09 14:18:16
Line 36  B<modify_config_files.pl> Line 36  B<modify_config_files.pl>
   
 =head1 SYNOPSIS  =head1 SYNOPSIS
   
 This script modifies /etc/my.cnf and one of: /etc/yum.conf   This script modifies local MySQL configuration file(s), which will be:
 (for CentOS/Scientific Linux/RHEL >=5 and <8), /etc/apt/sources.list  /home/www/.my.cnf and, depending on distro/version also one of:
 (for Debian/Ubuntu), /etc/sysconfig/rhn/sources (for RHEL4),  /etc/my.cnf, /etc/mysql/my.cnf, /etc/mysql/mysql.conf.d/mysqld.cnf,
 and /etc/yum.repos.d/loncapa.repo (Fedora >= 21; Oracle Linux;   or /etc/mysql/mariadb.conf.d/50-server.cnf, and also the file used to 
 CentOS/RHEL >= 8).  store information about the LON-CAPA package repositories located at
   install.loncapa.org. which provide rpm or deb packages created for the  
   Linux distro/version being used.  The file to modify will be one of:
   /etc/yum.conf (for CentOS/Scientific Linux/RHEL >=5 and <8), 
   /etc/apt/sources.list (for Debian < 10 and Ubuntu < 22), or
   /etc/apt/sources.list.d/loncapa.list (for Debian >= 10 and Ubuntu > 20),
   /etc/sysconfig/rhn/sources (for RHEL4), or /etc/yum.repos.d/loncapa.repo
   (for Fedora >= 21; Oracle Linux; AlmaLinux; RockyLinux; CentOS/RHEL >= 8).
   
   The script also modifies /home/www/.inputrc on Linux distros which have 
   readline 8.1 or newer, i.e., CentOS/Scientific Linux/RHEL >= 9,
   Ubuntu >= 22, Debian >= 12, and Fedora >= 34.
   
 =head1 DESCRIPTION  =head1 DESCRIPTION
   
 This script modifies /etc/my.cnf, /etc/yum.conf, /etc/yum.repos.d/loncapa.repo,  This script will modify /etc/my.cnf, /etc/mysql/my.cnf, 
 /etc/apt/sources, or /etc/sysconfig/rhn/sources to ensure certain  /etc/mysql/mysql.conf.d/mysqld.cnf, or
 parameters are set properly.  /etc/mysql/mariadb.conf.d/50-server.cnf,
   and /etc/yum.conf, /etc/yum.repos.d/loncapa.repo,
   /etc/apt/sources.list, /etc/apt/sources.list.d/loncapa.list or 
   /etc/sysconfig/rhn/sources and /home/www/.inputrc to ensure 
   certain parameters are set properly.
   
 The LON-CAPA yum repositories are added to /etc/yum.conf,   The LON-CAPA yum repositories are added to /etc/yum.conf, 
 /etc/yum.repos.d/loncapa.repo, /etc/sysconfig/rhn/sources  /etc/yum.repos.d/loncapa.repo, or /etc/sysconfig/rhn/sources
 and the LON-CAPA apt repositories are added to   and the LON-CAPA apt repositories are added to 
 /etc/apt/sources.list.  /etc/apt/sources.list or /etc/apt/sources.list.d/loncapa.list.
   
 The /etc/my.cnf file is modified to set the wait_timeout to 1 year.  Backup  The /etc/my.cnf, /etc/mysql/my.cnf /etc/mysql/mysql.conf.d/mysqld.cnf
 copies of each file are made in /etc, /etc/apt, and /etc/sysconfig/rhn, as   or /etc/mysql/mariadb.conf.d/50-server.cnf file is modified to set the 
 appropriate.  wait_timeout to 1 year.  Backup copies of each file are made in
   /etc, /etc/apt, and /etc/sysconfig/rhn, as appropriate.
   
 =cut  =cut
   
Line 225  if ($dist =~ /^fedora(\d+)$/) { Line 241  if ($dist =~ /^fedora(\d+)$/) {
             $yum_status = &update_rhn_source(\%rhn);               $yum_status = &update_rhn_source(\%rhn); 
         }          }
     }      }
 } elsif ($dist =~ /^(debian|ubuntu)\d+$/) {  } elsif ($dist =~ /^(debian|ubuntu)(\d+)$/) {
       my ($distname,$distver) = ($1,$2);
       if ((($distname eq 'ubuntu') && ($distver > 20)) ||
           (($distname eq 'debian') && ($distver >= 10))) {
           $loninst = 'https://install.loncapa.org';
           $loninst_re = 'https://install\.loncapa\.org';
       }
     my %apt_get_source = (      my %apt_get_source = (
                            debian5 => {                             debian5 => {
                                         regexp => '\s*deb\s+'.$loninst_re.'/debian/?\s+lenny\s+main',                                          regexp => '\s*deb\s+'.$loninst_re.'/debian/?\s+lenny\s+main',
                                         text   => "deb $loninst/debian lenny main",                                          text   => "deb $loninst/debian lenny main",
                                       },                                        },
                              debian6 => {
                                           regexp => '\s*deb\s+'.$loninst_re.'/debian/?\s+squeeze\s+main',
                                           text   => "deb $loninst/debian squeeze main",
                                         },
                              debian10 => {
                                           regexp => '\s*deb\s+\[signed\-by=/etc/apt/keyrings/loncapa\.gpg\]\s+'.$loninst_re.'/debian/?\s+buster\s+main',
                                           text   => "deb [signed-by=/etc/apt/keyrings/loncapa.gpg] $loninst/debian buster main",
                                         },
                              debian11 => {
                                           regexp => '\s*deb\s+\[signed\-by=/etc/apt/keyrings/loncapa\.gpg\]\s+'.$loninst_re.'/debian/?\s+bullseye\s+main',
                                           text   => "deb [signed-by=/etc/apt/keyrings/loncapa.gpg] $loninst/debian bullseye main",
                                         },
                              debian12 => {
                                           regexp => '\s*deb\s+\[signed\-by=/etc/apt/keyrings/loncapa\.gpg\]\s+'.$loninst_re.'/debian/?\s+bookworm\s+main',
                                           text   => "deb [signed-by=/etc/apt/keyrings/loncapa.gpg] $loninst/debian bookworm main",
                                         },
   
                            ubuntu6 => {                             ubuntu6 => {
                                         regexp => '\s*deb\s+'.$loninst_re.'/ubuntu/?\s+dapper\s+main',                                          regexp => '\s*deb\s+'.$loninst_re.'/ubuntu/?\s+dapper\s+main',
                                         text   => "deb $loninst/ubuntu dapper main",                                          text   => "deb $loninst/ubuntu dapper main",
Line 263  if ($dist =~ /^fedora(\d+)$/) { Line 302  if ($dist =~ /^fedora(\d+)$/) {
                                         regexp => '\s*deb\s+'.$loninst_re.'/ubuntu/?\s+focal\s+main',                                          regexp => '\s*deb\s+'.$loninst_re.'/ubuntu/?\s+focal\s+main',
                                         text   => "deb $loninst/ubuntu focal main",                                          text   => "deb $loninst/ubuntu focal main",
                                        },                                         },
                              ubuntu22 => {
                                           regexp => '\s*deb\s+\[signed\-by=/etc/apt/keyrings/loncapa\.gpg\]\s+'.$loninst_re.'/ubuntu/?\s+jammy\s+main',
                                           text   => "deb [signed-by=/etc/apt/keyrings/loncapa.gpg] $loninst/ubuntu jammy main",
                                          },
                              ubuntu24 => {
                                           regexp => '\s*deb\s+\[signed\-by=/etc/apt/keyrings/loncapa\.gpg\]\s+'.$loninst_re.'/ubuntu/?\s+noble\s+main',
                                           text   => "deb [signed-by=/etc/apt/keyrings/loncapa.gpg] $loninst/ubuntu noble main",
                                          },
                          );                           );
     my $apt_status;      my $apt_status;
     if (defined($apt_get_source{$dist})) {      if (defined($apt_get_source{$dist})) {
         $apt_status = &update_apt_source($apt_get_source{$dist},);          $apt_status = &update_apt_source($distname,$distver,$apt_get_source{$dist});
     }      }
 }  }
   
Line 274  my $mysqlfile = '/etc/my.cnf'; Line 321  my $mysqlfile = '/etc/my.cnf';
 my $mysqlconf = [{section =>'mysqld',  my $mysqlconf = [{section =>'mysqld',
                   key     =>'wait_timeout=',                    key     =>'wait_timeout=',
                   value   =>'31536000'}];                    value   =>'31536000'}];
   my $nomysqlbackup;
 if ($dist =~ /^ubuntu(\d+)$/) {  if ($dist =~ /^ubuntu(\d+)$/) {
     my $version = $1;      my $version = $1;
     $mysqlfile = '/etc/mysql/my.cnf';      $mysqlfile = '/etc/mysql/my.cnf';
     if ($version > 14) {      if ($version > 14) {
           $nomysqlbackup = 1;
         $mysqlfile = '/etc/mysql/mysql.conf.d/mysqld.cnf';          $mysqlfile = '/etc/mysql/mysql.conf.d/mysqld.cnf';
         if ($version < 20) {          if ($version < 20) {
             push(@{$mysqlconf},              push(@{$mysqlconf},
Line 291  if ($dist =~ /^ubuntu(\d+)$/) { Line 340  if ($dist =~ /^ubuntu(\d+)$/) {
                   value   =>'"STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"'});                    value   =>'"STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"'});
         }          }
     }      }
   } elsif ($dist =~ /^debian(\d+)$/) {
       my $version = $1;
       if ($version >= 10) {
           $mysqlfile = '/etc/mysql/mariadb.conf.d/50-server.cnf';
           $nomysqlbackup = 1;
       }
 }  }
   
 my $mysql_global_status = &update_file($mysqlfile,$mysqlconf);  my $mysql_global_status = &update_file($mysqlfile,$mysqlconf,$nomysqlbackup);
   
 my $local_my_cnf = '/home/www/.my.cnf';  my $local_my_cnf = '/home/www/.my.cnf';
 if (! -e $local_my_cnf) {  if (! -e $local_my_cnf) {
Line 309  my $mysql_www_status = Line 364  my $mysql_www_status =
                key     =>'password=',                 key     =>'password=',
                value   =>$loncapa_config->{'lonSqlAccess'}},]);                 value   =>$loncapa_config->{'lonSqlAccess'}},]);
   
   my $needs_inputrc_check;
   if ($dist  =~ /^debian(\d+)$/) {
       if ($1 >= 12) {
           $needs_inputrc_check = 1;
       }
   } elsif ($dist =~ /^ubuntu(\d+)$/) {
       if ($1 >= 22) {
           $needs_inputrc_check = 1;
       }
   } elsif ($dist =~ /^(?:redhat|oracle|alma|rocky|centos-stream)(\d+)$/) {
       if ($1 >= 9) {
           $needs_inputrc_check = 1;
       }
   } elsif ($dist =~ /^fedora(\d+)$/) {
       if ($1 >= 34) {
           $needs_inputrc_check = 1;
       }
   }
   
   if ($needs_inputrc_check) {
       my $bash_www_cnf = '/home/www/.inputrc';
       if (!-e $bash_www_cnf) {
           system("touch $bash_www_cnf");
           if (open(my $fh,'>',$bash_www_cnf)) {
               print $fh "set enable-bracketed-paste off\n";
               close($fh);
           } else {
               warn "**** Error: could not open $bash_www_cnf to add 'set enable-bracketed-paste to off'";
           }
           my $wwwuid = getpwnam('www');
           my $wwwgid = getgrnam('www');
           if ($wwwuid!=$<) {
               chown($wwwuid,$wwwgid,$bash_www_cnf);
           }
       } else {
           my ($bracketed_paste_on,$bracketed_paste_off,@preserve);
           if (open(my $fh,'<',$bash_www_cnf)) {
               while (my $line=<$fh>) {
                   chomp($line);
                   if ($line =~ /^\s*set\s+enable\-bracketed\-paste\s+(off|on)\s*$/) {
                       if ($1 eq 'off') {
                           $bracketed_paste_off = 1;
                       } else {
                           $bracketed_paste_on = 1;
                       }
                   } else {
                       push(@preserve,$line);
                   }
               }
               close($fh);
           }
           if ($bracketed_paste_on || !$bracketed_paste_off) {
               if (open(my $fh,'>',$bash_www_cnf)) {
                   print $fh "set enable-bracketed-paste off\n";
                   if (@preserve) {
                       foreach my $entry (@preserve) {
                           print $fh "$entry\n";
                       }
                   }
                   close($fh);
               } else {
                   warn "**** Error: could not open $bash_www_cnf to add 'set enable-bracketed-paste to off'";
               }
           }
       }
   }
   
 my $exitvalue = 0;  my $exitvalue = 0;
   
 if ($mysql_global_status) { $exitvalue = 1; }  if ($mysql_global_status) { $exitvalue = 1; }
   
 exit $exitvalue;  exit $exitvalue;
   
   #################################################################
   #################################################################
   
   =pod
   
   =over 4
   
   =item &update_file()
   
   Calls &parse_config_file for a file and then sends the 
   retrieved data to &modify_config_file, and checks if
   modificatione were made.
   
   Inputs: filename, newdata (reference to an array of hashed),
           nobackup 1, if no backup of existing file (.backup
           appended to filename) should be made.
   
   Output: 0 or 1; o if no modifications exist (and hence no file
   needed to be saved, or 1 if modifications made, and call to
   &write_config_file to save file, or if filename does not exist.
   
   =back
   
   =cut
   
   #################################################################
   #################################################################
   
   
 sub update_file {  sub update_file {
     my ($file,$newdata,$nobackup) = @_;      my ($file,$newdata,$nobackup) = @_;
Line 400  sub parse_config_file { Line 550  sub parse_config_file {
   
 =over 4  =over 4
   
 =item  =item &write_config_file()
   
 Write a configuration file out based on the internal data structure returned  Write a configuration file out based on the internal data structure returned
 by &parse_config_file  by &parse_config_file
Line 613  sub update_rhn_source { Line 763  sub update_rhn_source {
   
 =item &update_apt_source()  =item &update_apt_source()
   
 Modifies the source.list file which includes repositories used by apt-get  Modifies either the sources.list or sources.list.d/loncapa.list 
   file which include repositories used by apt-get.
   
 Inputs:  Inputs:
 $deb_row - a reference to containing the regular expression  $distname - distro (without version): debian or ubuntu
 to test for, and the text string to append to the file, if an entry for the  $distver - distro version, e.g., 12 or 24
 LON-CAPA Debian/ or Ubuntu repository is missing.  $deb_row - a reference to a hash containing the regular expression
   to test for, and the text string to append to the file, if an entry 
   for the LON-CAPA Debian/ or Ubuntu repository is missing.
   
 Returns: 0 or 1, indicating if the file was modified(1) or not(0).  Returns: 0 or 1, indicating if the file was modified(1) or not(0).
   
Line 629  Returns: 0 or 1, indicating if the file Line 782  Returns: 0 or 1, indicating if the file
 #################################################################  #################################################################
 #################################################################  #################################################################
 sub update_apt_source {  sub update_apt_source {
     my ($deb_row) = @_;      my ($distname,$distver,$deb_row) = @_;
     return 0 if (ref($deb_row) ne 'HASH');      return 0 if (ref($deb_row) ne 'HASH');
     return 0 if (($deb_row->{regexp} eq '') || ($deb_row->{text} eq ''));      return 0 if (($deb_row->{regexp} eq '') || ($deb_row->{text} eq ''));
     my $file = '/etc/apt/sources.list';      my $file = '/etc/apt/sources.list';
       my $nobackup;
       if ((($distname eq 'ubuntu') && ($distver > 20)) ||
           (($distname eq 'debian') && ($distver >= 10))) {
           $file = '/etc/apt/sources.list.d/loncapa.list';
           $nobackup = 1;
       }
     return 0 if (! -e $file);      return 0 if (! -e $file);
     my $backup = $file.'.backup';      unless ($nobackup) {
     if (! copy($file,$backup)) {          my $backup = $file.'.backup';
         warn "**** Error: Unable to make backup of $file";          if (! copy($file,$backup)) {
         return 0;              warn "**** Error: Unable to make backup of $file";
               return 0;
           }
     }      }
     my $result = 0;      my $result = 0;
     my $fh;      my $fh;

Removed from v.1.23  
changed lines
  Added in v.1.26


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>