--- loncom/build/distprobe 2003/04/15 15:25:51 1.3 +++ loncom/build/distprobe 2019/05/27 01:26:31 1.22 @@ -1,31 +1,150 @@ #!/usr/bin/perl - -# YEAR=2002 +# +# The LearningOnline Network with CAPA +# +# $Id: distprobe,v 1.22 2019/05/27 01:26:31 raeburn Exp $ +# +# Copyright Michigan State University Board of Trustees +# +# This file is part of the LearningOnline Network with CAPA (LON-CAPA). +# +# LON-CAPA is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# LON-CAPA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LON-CAPA; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# /home/httpd/html/adm/gpl.txt +# +# http://www.lon-capa.org/ +# my $dist='default'; +my $unknown; if (-e '/etc/redhat-release') { open(IN,'; chomp($versionstring); close(IN); - my $version=(split(/\s+/,$versionstring))[4]; - if ($version=~/^7\./) { - $dist='redhat7'; - } elsif ($version=~/^8\./) { - $dist='redhat8'; + if ($versionstring =~ /^Red Hat Linux release ([\d\.]+) /) { + $version = $1; + if ($version=~/^7\./) { + $dist='redhat7'; + } elsif ($version=~/^8\./) { + $dist='redhat8'; + } elsif ($version=~/^9/) { + $dist='redhat9'; + } + } elsif ($versionstring =~ /Fedora( Core)? release ([\d\.]+) /) { + my $version=$2; + if ($version - int($version) > .9) { + $dist = 'fedora'.(int($version)+1); + } else { + $dist = 'fedora'.int($version); + } + } elsif ($versionstring =~ /Red Hat Enterprise Linux [AE]S release ([\d\.]+) /) { + $dist = 'rhes'.$1; + } elsif ($versionstring =~ /Red Hat Enterprise Linux Server release (\d+)/) { + $dist = 'rhes'.$1; + } elsif ($versionstring =~ /Red Hat Enterprise Linux release (\d+)/) { + $dist = 'rhes'.$1; + } elsif ($versionstring =~ /CentOS(?:| Linux) release (\d+)/) { + $dist = 'centos'.$1; + } elsif ($versionstring =~ /Scientific Linux (?:SL )?release ([\d.]+) /) { + my $ver = $1; + $ver =~ s/\.\d+$//; + $dist = 'scientific'.$ver; + } else { + warn('Unable to interpret /etc/redhat-release '. + 'to determine system type'); + $unknown = 1; } -} -elsif (-e '/etc/debian_version') { +} elsif (-e '/etc/SuSE-release') { + open(IN,'; + chomp($versionstring); + close(IN); + if ($versionstring =~ /^SUSE LINUX Enterprise Server ([\d\.]+) /i) { + $dist='sles'.$1; + } elsif ($versionstring =~ /^SuSE Linux ([\d\.]+) /i) { + $dist = 'suse'.$1; + } elsif ($versionstring =~ /^openSUSE ([\d\.]+) /i) { + $dist = 'suse'.$1; + } else { + warn('Unable to interpret /etc/SuSE-release '. + 'to determine system type'); + $unknown = 1; + } +} elsif (-e '/etc/issue') { + open(IN,'; + chomp($versionstring); + close(IN); + if ($versionstring =~ /^Ubuntu (\d+)\.\d+/i) { + $dist = 'ubuntu'.$1; + } elsif ($versionstring =~ /^Debian\s+GNU\/Linux\s+(\d+)\.\d+/i) { + $dist = 'debian'.$1; + } elsif (-e '/etc/debian_version') { + open(IN,'; + chomp($version); + close(IN); + if ($version =~ /^(\d+)\.\d+\.?\d*/) { + $dist='debian'.$1; + } else { + warn('Unable to interpret /etc/debian_version '. + 'to determine system type'); + $unknown = 1; + } + } +} elsif (-e '/etc/debian_version') { open(IN,'; chomp($version); close(IN); - if ($version eq '2.2') { - $dist='debian2.2'; + if ($version =~ /^(\d+)\.\d+\.?\d*/) { + $dist='debian'.$1; + } else { + warn('Unable to interpret /etc/debian_version '. + 'to determine system type'); + $unknown = 1; } } -else { - warn('Unknown installation filesystem; expecting debian version 2.2 '. - 'or redhat 6.* or 7.*'); +if (($dist eq 'default') && (!$unknown)) { + if (-e '/etc/os-release') { + if (open(IN,'<','/etc/os-release')) { + my ($id,$version); + while() { + chomp(); + if (/^ID="(\w+)"/) { + $id=$1; + } elsif (/^VERSION_ID="([\d\.]+)"/) { + $version=$1; + } + } + close(IN); + if ($id eq 'sles') { + my ($major,$minor) = split(/\./,$version); + if ($major =~ /^\d+$/) { + $dist = $id.$major; + } + } + } + if ($dist eq 'default') { + warn('Unable to interpret /etc/os-release '. + 'to determine system type.'); + $unknown = 1; + } + } else { + warn('Unknown installation: expecting a debian, ubuntu, suse, sles, redhat, fedora or scientific linux system.')."\n"; + } } print $dist;