[LON-CAPA-cvs] cvs: doc /loncapafiles updatequery.piml

raeburn raeburn at source.lon-capa.org
Thu Sep 3 19:03:15 EDT 2026


raeburn		Thu Sep  3 23:03:15 2026 EDT

  Modified files:              
    /doc/loncapafiles	updatequery.piml 
  Log:
  - If "Accessibility Checking Available" set to 'Y' during configuration:
    - For ubuntu 18 LTS use ubuntu_nodejs repo to install node.js 18.
    - Rename &enable_nodesource() as &enable_custom_repo() and use it to
      enable repos for google-chrome-stable (ubuntu 18, 22, 24 & 26; debian 10)
      loncapa-nodejs repo (rhel/oracle/centOS/scientific linux 7), and
      ubuntu_nodejs repo (ubuntu 18) -- last two hosted at install.loncapa.org.
  
  
-------------- next part --------------
Index: doc/loncapafiles/updatequery.piml
diff -u doc/loncapafiles/updatequery.piml:1.106 doc/loncapafiles/updatequery.piml:1.107
--- doc/loncapafiles/updatequery.piml:1.106	Fri Aug 28 06:28:39 2026
+++ doc/loncapafiles/updatequery.piml	Thu Sep  3 23:03:15 2026
@@ -1,6 +1,6 @@
 <!-- updatequery.piml -->
 
-<!-- $Id: updatequery.piml,v 1.106 2026/08/28 06:28:39 raeburn Exp $ -->
+<!-- $Id: updatequery.piml,v 1.107 2026/09/03 23:03:15 raeburn Exp $ -->
 
 <!--
 
@@ -45,6 +45,7 @@
 use Locale::Country;
 use IPC::Cmd qw(can_run);
 use Cwd;
+use File::Path();
 
 sub get_new_sslkeypass {
     my $sslkeypass;
@@ -669,13 +670,17 @@
 sub get_axe_status {
     my ($dist,$version,$statusref,$installref) =@_;
     return unless ((ref($statusref) eq 'HASH') && (ref($installref) eq 'HASH'));
-    my ($browser,$nodeversion,$npmversion,$npmmajor);
+    my ($browser,$nodeversion,$nodemajor,$npmversion,$npmmajor);
     my $nodejs = can_run('node');
     if ($nodejs) {
         if (open(my $pipe, '-|','node -v')) {
             $nodeversion = <$pipe>;
             chomp($nodeversion);
-            $statusref->{'nodejs'} = $nodeversion;
+            $nodeversion =~ s/^\s+|\s+$//g;
+            $nodeversion =~ s/^v//;
+            ($nodemajor,my $nodeminor) = split(/\./,$nodeversion);
+            $nodeversion = $nodemajor.'.'.$nodeminor;
+            $statusref->{'nodejs'} = $nodeversion + 0;
             close($pipe);
         }
     }
@@ -684,6 +689,7 @@
         if (open(my $pipe, '-|','npm -v')) {
             $npmversion = <$pipe>;
             chomp($npmversion);
+            $npmversion =~ s/^\s+|\s+$//g;
             $statusref->{'npm'} = $npmversion;
             ($npmmajor) = ($npmversion =~ /^(\d+)./);
             close($pipe);
@@ -694,31 +700,35 @@
             unless (($npm) && ($npmmajor >= 8)){
                 $installref->{'npm'} = 1;
             }
-            unless (($nodejs) && ($nodeversion >= 18)) {
+            unless (($nodejs) && ($nodemajor >= 18)) {
                 $installref->{'nodejs'} = 1;
             }
-        } else {
-            unless (($nodejs) && ($nodeversion >= 17)) {
+        } elsif ($version >= 18) {
+            unless (($nodejs) && ($nodemajor >= 18)) {
                 $installref->{'nodesource'} = 1;
             }
         }
-        if ($version >= 22) {
-            $browser = '/usr/bin/google-chrome-stable';
-        } elsif ($version == 20) {
+        if ($version == 20) {
             $browser = '/usr/bin/chromium';
+        } elsif ($version >= 18) {
+            $browser = '/usr/bin/google-chrome-stable';
         }
-    } elsif ($dist eq 'debian') { 
-        if ($version > 10) {
-            $browser = '/usr/bin/chromium';
+    } elsif ($dist eq 'debian') {
+        if ($version >= 10) {
+            if ($version == 10) {
+                $browser = '/usr/bin/google-chrome-stable';
+            } else {
+                $browser = '/usr/bin/chromium';
+            }
             if ($version > 11) {
                 unless (($npm) && ($npmmajor >= 9)) {
                     $installref->{'npm'} = 1;
                 }
-                unless (($nodejs) && ($nodeversion >= 18)) {
+                unless (($nodejs) && ($nodemajor >= 18)) {
                     $installref->{'nodejs'} = 1;
                 }
             } else {
-                unless (($nodejs) && ($nodeversion >= 24)) {
+                unless (($nodejs) && ($nodemajor >= 24)) {
                     $installref->{'nodesource'} = 1;
                 }
             }
@@ -726,12 +736,12 @@
     } elsif ($dist eq 'sles') {
         if ($version > 12) {
             $browser = '/usr/bin/chromium-browser';
-            unless (($nodejs) && ($nodeversion >= 24)) {
+            unless (($nodejs) && ($nodemajor >= 24)) {
                 $installref->{'nodejs24'} = 1;
             }
         } elsif ($version == 12) {
             $browser = '/usr/bin/firefox';
-            unless (($nodejs) && ($nodeversion >= 18)) {
+            unless (($nodejs) && ($nodemajor >= 18)) {
                 $installref->{'nodejs18'} = 1;
             }
         }
@@ -739,27 +749,27 @@
         if ($version > 7) {
             $browser = '/usr/bin/chromium-browser';
             if ($version < 10) {
-                unless (($nodejs) && ($nodeversion >= 24)) {
+                unless (($nodejs) && ($nodemajor >= 24)) {
                     $installref->{'nodejs'} = 1;
                 }
             } else {
-                unless (($nodejs) && ($nodeversion >= 22)) {
+                unless (($nodejs) && ($nodemajor >= 22)) {
                     $installref->{'nodejs'} = 1;
                 }
             }
         } elsif ($version == 7) {
             $browser = '/usr/bin/chromium-browser';
-            unless (($nodejs) && ($nodeversion >= 24)) {
+            unless (($nodejs) && ($nodemajor >= 24)) {
                 $installref->{'nodesource'} = 1;
             }
         }
     } elsif ($dist eq 'centos-stream') {
         if ($version < 10) {
-            unless (($nodejs) && ($nodeversion >= 24)) {
+            unless (($nodejs) && ($nodemajor >= 24)) {
                 $installref->{'nodejs'} = 1;
             }
         } else {
-            unless (($nodejs) && ($nodeversion >= 22)) {
+            unless (($nodejs) && ($nodemajor >= 22)) {
                 $installref->{'nodejs'} = 1;
             }
         }
@@ -767,7 +777,7 @@
     } elsif ($dist eq 'fedora') {
         if ($version > 39) {
             $browser = '/usr/bin/chromium-browser';
-            unless (($nodejs) && ($nodeversion >= 24)) {
+            unless (($nodejs) && ($nodemajor >= 24)) {
                 $installref->{'nodejs24'} = 1;
             }
         }
@@ -794,85 +804,110 @@
             }
         }
     }
+    return $browser;
 }
 
-sub enable_nodesource {
-    my ($dist,$version,$arch) = @_;
+sub enable_custom_repo {
+    my ($dist,$version,$arch,$repo) = @_;
     my $repo_enabled;
-    my ($sep,$title,$gottitle,$nodesource,$needtitle,$gpgkey, at keyorder, at currorder,
-        %expected,%actual,%origcase,%wrongvalue,%missing,%extra,%modifyextra);
+    my ($sep,$title,$gottitle,$repofile,$needtitle,$keysource,$gpgkey,$gpgkeydir, at keyorder,
+        @currorder,%expected,%actual,%origcase,%wrongvalue,%missing,%extra,%modifyextra);
     return unless($dist =~ /^(ubuntu|debian|fedora|rhes|oracle|alma|rocky|centos|centos\-stream|scientific)$/);
     if (($dist eq 'ubuntu') || ($dist eq 'debian')) {
         $sep = ':';
-        $nodesource = '/etc/apt/sources.list.d/nodesource.sources';
-        $gpgkey = '/etc/apt/keyrings/nodesource.gpg';
+        $gpgkeydir = '/etc/apt/keyrings';
         @keyorder = qw(Types URIs Suites Components Architectures Signed-By);
         %expected = (
-                       Types         => 'deb',
-                       URIs          => 'https://deb.nodesource.com/node_24.x',
-                       Suites        => 'nodistro',
-                       Components    => 'main',
-                       Architectures => 'amd64',
-                       SignedBy      => '/etc/apt/keyrings/nodesource.gpg',
+                       'Types'         => 'deb',
+                       'Components'    => 'main',
+                       'Architectures' => $arch,
                     );
-        unless (-e '/etc/apt/keyrings/nodesource.gpg') {
-            if (open(my $pipe, '-|',"curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg")) {
-                my $result = <$pipe>;
-                close($pipe);
+        if ($repo eq 'nodesource') {
+            if (($dist eq 'ubuntu') && ($version == 18)) {
+                $repofile = '/etc/apt/sources.list.d/loncapa_nodejs.sources';
+                $gpgkey = $gpgkeydir.'/loncapa.gpg';
+                $keysource = 'https://install.loncapa.org/versions/ubuntu/APT-GPG-KEY-loncapa.asc';
+                $expected{'Suites'} = 'bionic';
+                $expected{'URIs'} = 'https://install.loncapa.org/ubuntu_nodejs';
+            } else {
+                $repofile = '/etc/apt/sources.list.d/nodesource.sources';
+                $gpgkey = $gpgkeydir.'/nodesource.gpg';
+                $keysource = 'https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key';
+                $expected{'Suites'} = 'nodistro';
+                $expected{'URIs'} = 'https://deb.nodesource.com/node_24.x';
+            }
+        } elsif ($repo eq 'google-chrome-stable') {
+            $repofile = '/etc/apt/sources.list.d/google-chrome.sources';
+            $gpgkey = $gpgkeydir.'/google-chrome.gpg';
+            $keysource = 'https://dl.google.com/linux/linux_signing_key.pub';
+            $expected{'Suites'} = 'stable';
+            $expected{'URIs'} = 'https://dl.google.com/linux/chrome/deb/';
+        }
+        $expected{'Signed-By'} = $gpgkey;
+        unless (-e $gpgkey) {
+            unless (-d $gpgkeydir) {
+                my @created = File::Path::make_path($gpgkeydir,{ mode => 0755});
+            }
+            if (-d $gpgkeydir) {
+                if (open(my $pipe, '-|',"wget -q -O - $keysource | gpg --dearmor -o $gpgkey")) {
+                    my $result = <$pipe>;
+                    close($pipe);
+                }
             }
-        }   
-        $nodesource = '/etc/apt/sources.list.d/nodesource.sources';
+        }
     } elsif ($dist =~ /^(fedora|rhes|oracle|alma|rocky|centos|centos\-stream|scientific)$/) {
         $sep = '=';
         $gpgkey = '';
-        if ($version == 7) {
-            $nodesource = '/etc/yum.repos.d/loncapa-nodejs.repo';
-            $title = '[loncapa-nodejs-basearch]';
-            @keyorder = qw(name baseurl priority enabled gpgcheck gpgkey);
-            %expected = (
-                           name            => 'Node.js Package for EL7 -'.$arch,
-                           baseurl         => 'https://install.loncapa.org/el7/nodejs/'.$arch,
-                           priority        => 9,
-                           enabled         => 1,
-                           gpgcheck        => 1,
-                           gpgkey          => 'https://install.loncapa.org/versions/el7/RPM-GPG-KEY-loncapa',
-                        );
-            if (open(my $pipe, '-|',"rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} -- %{summary}\n'")) {
-                while (my $line = <$pipe>) {
-                    chomp($line);
-                    if ($line =~ /<certificate\@loncapa\.org>/) {
-                        if ($line =~ /^(\Qgpg-pubkey-\E[\S]+)\s+/) {
-                            $gpgkey = $1;
+        if ($repo eq 'nodesource') {
+            if ($version == 7) {
+                $repofile = '/etc/yum.repos.d/loncapa-nodejs.repo';
+                $title = '[loncapa-nodejs-basearch]';
+                @keyorder = qw(name baseurl priority enabled gpgcheck gpgkey);
+                %expected = (
+                           'name'     => 'Node.js Package for EL7 -'.$arch,
+                           'baseurl'  => 'https://install.loncapa.org/el7/nodejs/'.$arch,
+                           'priority' => 9,
+                           'enabled'  => 1,
+                           'gpgcheck' => 1,
+                           'gpgkey'   => 'https://install.loncapa.org/versions/el7/RPM-GPG-KEY-loncapa',
+                );
+                if (open(my $pipe, '-|',"rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} -- %{summary}\n'")) {
+                    while (my $line = <$pipe>) {
+                        chomp($line);
+                        if ($line =~ /<certificate\@loncapa\.org>/) {
+                            if ($line =~ /^(\Qgpg-pubkey-\E[\S]+)\s+/) {
+                                $gpgkey = $1;
+                            }
+                            last;
                         }
-                        last;
                     }
+                    close($pipe);
                 }
-                close($pipe);
-            }
-        } else {
-            $nodesource = '/etc/yum.repos.d/nodesource-nodejs.repo';
-            $title = '[nodesource-nodejs]';
-            @keyorder = qw(name baseurl priority enabled gpgcheck gpgkey module_hotfixes);
-            %expected = (
-                           name            => 'Node.js Packages for Linux RPM based distros -'.$arch,
-                           baseurl         => 'https://rpm.nodesource.com/pub_24.x/nodistro/nodejs/'.$arch,
-                           priority        => 9,
-                           enabled         => 1,
-                           gpgcheck        => 1, 
-                           gpgkey          => 'https://rpm.nodesource.com/gpgkey/ns-operations-public.key',
-                           module_hotfixes => 1,
-                    );
-            if (open(my $pipe, '-|',"rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} -- %{summary}\n'")) {
-                while (my $line = <$pipe>) {
-                    chomp($line);
-                    if ($line =~ /<operations\@nodesource\.com>/) {
-                        if ($line =~ /^(\Qgpg-pubkey-\E[\S]+)\s+/) {
-                            $gpgkey = $1;
+            } else {
+                $repofile = '/etc/yum.repos.d/nodesource-nodejs.repo';
+                $title = '[nodesource-nodejs]';
+                @keyorder = qw(name baseurl priority enabled gpgcheck gpgkey module_hotfixes);
+                %expected = (
+                           'name'            => 'Node.js Packages for Linux RPM based distros -'.$arch,
+                           'baseurl'         => 'https://rpm.nodesource.com/pub_24.x/nodistro/nodejs/'.$arch,
+                           'priority'        => 9,
+                           'enabled'         => 1,
+                           'gpgcheck'        => 1, 
+                           'gpgkey'          => 'https://rpm.nodesource.com/gpgkey/ns-operations-public.key',
+                           'module_hotfixes' => 1,
+                );
+                if (open(my $pipe, '-|',"rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} -- %{summary}\n'")) {
+                    while (my $line = <$pipe>) {
+                        chomp($line);
+                        if ($line =~ /<operations\@nodesource\.com>/) {
+                            if ($line =~ /^(\Qgpg-pubkey-\E[\S]+)\s+/) {
+                                $gpgkey = $1;
+                            }
+                            last;
                         }
-                        last;
                     }
+                    close($pipe);
                 }
-                close($pipe);
             }
         }
         unless ($gpgkey) {
@@ -884,8 +919,8 @@
             }
         }
     }
-    if (-e $nodesource) {
-        if (open(my $fh,'<',$nodesource)) {
+    if (-e $repofile) {
+        if (open(my $fh,'<',$repofile)) {
             while (my $line = <$fh>) {
                 chomp($line);
                 unless (($dist eq 'ubuntu') || ($dist eq 'debian')) {
@@ -929,7 +964,7 @@
                 $needtitle = $title;
             }
             if ((keys(%wrongvalue)) || (keys(%missing)) || (keys(%modifyextra)) || ($needtitle)) {
-                if (open(my $fh,'>',$nodesource)) {
+                if (open(my $fh,'>',$repofile)) {
                     if ($title ne '') {
                         print $fh "$title\n";
                     }
@@ -962,26 +997,29 @@
                     close($fh);
                     $repo_enabled = 1;
                 } else {
-                    print "Could not write to $nodesource\n";
+                    print "Could not write to $repofile\n";
                 }
             } else {
                 $repo_enabled = 1;
             }
         } else {
-            print "Could not open $nodesource\n";
+            print "Could not open $repofile\n";
         }
     } else {
-        if (open(my $fh,'>',$nodesource)) {
+        if (open(my $fh,'>',$repofile)) {
             if ($title ne '') {
                 print $fh "$title\n";
             }
+            if ($dist =~ /^(ubuntu|debian)/) {
+                $sep .= ' ';
+            }
             foreach my $key (@keyorder) {
                 print $fh $key.$sep.$expected{$key}."\n";
             }
             close($fh);
             $repo_enabled = 1;
         } else {
-            print "Could not open $nodesource\n";
+            print "Could not open $repofile\n";
         }
     }
     return $repo_enabled;
@@ -2608,6 +2646,11 @@
            $arch = $line;
        }
     }
+    if (($dist eq 'debian') || ($dist eq 'ubuntu')) {
+        if ($arch eq 'x86_64') {
+            $arch = 'amd64';
+        }
+    }
     my (%axestatus,%axeinstall);
     my $browser = &get_axe_status($dist,$version,\%axestatus,\%axeinstall);
     my $slesversion;
@@ -2644,15 +2687,21 @@
         if (@packages) {
             my $packagelist = join(' ', at packages);
             if ($axeinstall{'nodesource'}) {
-                my $repo_enabled = &enable_nodesource($dist,$version,$arch);
-                if ($repo_enabled) { 
+                my $repo_enabled = &enable_custom_repo($dist,$version,$arch,'nodesource');
+                if ($repo_enabled) {
                     my $command;
                     if ($dist =~ /^(ubuntu|debian)$/) {
+                        if (open(my $pipe, '-|','apt-get update')) {
+                            while (my $line = <$pipe>) {
+                                print $line;
+                            }
+                            close($pipe);
+                        }
                         $command = 'apt-get -y install nodejs';
                     } elsif (($dist =~ /^rhes|oracle|centos|scientific$/) && ($version <= 7)) {
                         $command = 'yum install nodejs -y';
                     } elsif ($dist =~ /^fedora|rhes|oracle|alma|rocky|centos|centos-stream$/) {
-                        $command = 'dnf install nodejs -y';
+                        $command = 'dnf --refresh install nodejs -y';
                     }
                     if ($command ne '') {
                         if (open(my $pipe, '-|',$command)) {
@@ -2660,6 +2709,14 @@
                                 print $line;
                             }
                             close($pipe);
+                            if (($dist eq 'ubuntu') && ($version == 18)) {
+                                my $npm = '/usr/lib/node_modules/npm/bin/npm-cli.js';
+                                if (-e $npm) {
+                                    my $currmode = (stat($npm))[2] & 07777;
+                                    my $newmode = $currmode | 0111;
+                                    chmod($newmode,$npm);
+                                }
+                            }
                         }
                     }
                 } else {
@@ -2719,6 +2776,8 @@
                             }
                             close($pipe);
                         }
+                    } else {
+                        print "Could not install $packagelist because required repo could not be added.\n";
                     }
                 }
             } elsif ($dist =~ /^(fedora|alma|rocky|centos|oracle|rhes|scientific)$/) {
@@ -2773,8 +2832,6 @@
                             }
                             close($pipe);
                         }
-                    } elsif ($version == 7) {
-                        my $command = 'yum';
                     }
                 }
             }
@@ -2787,7 +2844,12 @@
                     $browser_deb = 'chromium';
                 } else {
                     if ($browser eq '/usr/bin/google-chrome-stable') {
-                        $browser_deb = 'google-chrome-stable';
+                        my $repo_enabled = &enable_custom_repo($dist,$version,$arch,'google-chrome-stable');
+                        if ($repo_enabled) {
+                            $browser_deb = 'google-chrome-stable';
+                        } else {
+                            print "Could not install $browser because a googlechrome.sources file could not be created.\n";
+                        }
                     } elsif ($browser eq '/usr/bin/chromium') {
                         $browser_deb = 'chromium-browser'; 
                     }
@@ -2885,6 +2947,8 @@
                             close($pipe);
                         }
                     }
+                } else {
+                    print "Could not install web browser because repo could nor be added.\n";
                 }
             }
         }


More information about the LON-CAPA-cvs mailing list