[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