mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			267 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			267 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#! /bin/sh
 | 
						|
 | 
						|
# Copyright (C) 2009  Citrix Systems Inc.
 | 
						|
#
 | 
						|
# This program 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.
 | 
						|
#
 | 
						|
# This program 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 this program; if not, write to the Free Software
 | 
						|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 | 
						|
 | 
						|
# Script to write information about the current distribution to stdout or a file.
 | 
						|
# Information collected:
 | 
						|
#   - Distribution name
 | 
						|
#   - Distribution version (major and minor)
 | 
						|
#   - Kernel version (uname)
 | 
						|
 | 
						|
LANG="C"
 | 
						|
export LANG
 | 
						|
 | 
						|
 | 
						|
write_to_output()
 | 
						|
{
 | 
						|
    local distro="$1"
 | 
						|
    local major="$2"
 | 
						|
    local minor="$3"
 | 
						|
    local name="$4"
 | 
						|
    local uname=$(uname -r)
 | 
						|
 | 
						|
    if [ -n "${TEST_RESULT}" ] ; then
 | 
						|
	MAJOR=$major
 | 
						|
	MINOR=$minor
 | 
						|
	DISTRO=$distro
 | 
						|
	UNAME=$uname
 | 
						|
	return 0
 | 
						|
    fi
 | 
						|
 | 
						|
    echo "os_distro=\"${distro}\""
 | 
						|
    echo "os_majorver=\"${major}\""
 | 
						|
    echo "os_minorver=\"${minor}\""
 | 
						|
    echo "os_uname=\"${uname}\""
 | 
						|
    echo "os_name=\"${name}\""
 | 
						|
 | 
						|
    return 0
 | 
						|
}
 | 
						|
 | 
						|
identify_debian()
 | 
						|
{
 | 
						|
    local debian_version="$1"
 | 
						|
    local major
 | 
						|
    local minor
 | 
						|
 | 
						|
    # 3.1
 | 
						|
    # 4.0
 | 
						|
    # Ignores testing and unstable which contain ".*/sid".
 | 
						|
 | 
						|
    if [ ! -f "${debian_version}" ] ; then
 | 
						|
	return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    eval $(awk -F. '/^[0-9]*\.[0-9]*/ \
 | 
						|
                        { print "major="$1 ; print "minor="$2 ; exit 0 }' \
 | 
						|
                   "${debian_version}")
 | 
						|
    
 | 
						|
    if [ -z "${major}" ] && [ -z "${minor}" ] && ! grep -q /sid "${debian_version}" ; then
 | 
						|
	return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    write_to_output "debian" "${major}" "${minor}" "Debian $(head -n 1 $debian_version)"
 | 
						|
 | 
						|
    return 0
 | 
						|
}
 | 
						|
 | 
						|
identify_redhat()
 | 
						|
{
 | 
						|
    redhat_release="$1"
 | 
						|
    local distro
 | 
						|
    local major
 | 
						|
    local minor
 | 
						|
    local beta
 | 
						|
 | 
						|
    # distro=rhel
 | 
						|
    # Red Hat Enterprise Linux AS release 3 (Taroon Update 6)
 | 
						|
    # Red Hat Enterprise Linux AS release 3 (Taroon Update 8)
 | 
						|
    # Red Hat Enterprise Linux AS release 4 (Nahant)
 | 
						|
    # Red Hat Enterprise Linux AS release 4 (Nahant Update 1)
 | 
						|
    # Red Hat Enterprise Linux AS release 4 (Nahant Update 2)
 | 
						|
    # Red Hat Enterprise Linux AS release 4 (Nahant Update 3)
 | 
						|
    # Red Hat Enterprise Linux AS release 4 (Nahant Update 4)
 | 
						|
    # Red Hat Enterprise Linux Server release 4.92 (Tikanga)
 | 
						|
    # Red Hat Enterprise Linux Server release 5 (Tikanga)
 | 
						|
    # Red Hat Enterprise Linux Server release 5.1 Beta (Tikanga)
 | 
						|
 | 
						|
    # distro=xe-ddk
 | 
						|
    # \@PRODUCT_BRAND\@ DDK release \@PRODUCT_VERSION\@-\@BUILD_NUMBER\@ (\@PRODUCT_NAME\@)
 | 
						|
    # Rio DDK release 0.5.6-2991c (xenenterprise)
 | 
						|
 | 
						|
    # distro=xe-sdk
 | 
						|
    # \@PRODUCT_BRAND\@ SDK release \@PRODUCT_VERSION\@-\@BUILD_NUMBER\@ (\@PRODUCT_NAME\@)
 | 
						|
    # Rio SDK release 0.5.6-2991c (xenenterprise)
 | 
						|
 | 
						|
    # distro=fedora
 | 
						|
    # Fedora Core release 3 (Heidelberg)
 | 
						|
 | 
						|
    # distro=centos
 | 
						|
    # CentOS release 4.0 (Final)
 | 
						|
    # CentOS release 5 (Final)
 | 
						|
 | 
						|
    # distro=oracle
 | 
						|
    # Enterprise Linux Enterprise Linux Server release 5 (Carthage)
 | 
						|
    
 | 
						|
    if [ ! -f "${redhat_release}" ] ; then
 | 
						|
	return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    eval $(sed -n \
 | 
						|
               -e 's/^\(.*\) DDK release \(.*\)-\(.*\) (.*)$/distro=xe-ddk;major=\2;minor=\3/gp;' \
 | 
						|
               -e 's/^\(.*\) SDK release \(.*\)-\(.*\) (.*)$/distro=xe-sdk;major=\2;minor=\3/gp;' \
 | 
						|
               -e 's/^Red Hat Enterprise Linux .* release \([0-9]*\) (.* Update \(.*\))$/distro=rhel;major=\1;minor=\2/gp;'\
 | 
						|
               -e 's/^Red Hat Enterprise Linux .* release \([0-9]*\) (.*)$/distro=rhel;major=\1/gp;' \
 | 
						|
               -e 's/^Red Hat Enterprise Linux .* release \([0-9]*\)\.\([0-9]*\) \([Bb]eta \)\?(.*)$/distro=rhel;major=\1;minor=\2;beta=\3;/gp;' \
 | 
						|
               -e 's/^Fedora.*release \([0-9]*\) (.*)$/distro=fedora;major=\1/gp;' \
 | 
						|
               -e 's/^CentOS release \([0-9]*\)\.\([0-9]*\) (.*)/distro=centos;major=\1;minor=\2/gp;' \
 | 
						|
               -e 's/^CentOS release \([0-9]*\) (.*)/distro=centos;major=\1/gp;' \
 | 
						|
               -e 's/^Enterprise Linux Enterprise Linux .* release \([0-9]*\)\.\([0-9]*\) (.*)$/distro=oracle;major=\1;minor=\2;/gp;' \
 | 
						|
               -e 's/^Enterprise Linux Enterprise Linux .* release \([0-9]*\) (.*)$/distro=oracle;major=\1/gp;' \
 | 
						|
                         "${redhat_release}")
 | 
						|
 | 
						|
    if [ -z "${major}" -o -z "${distro}" ] ; then
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ -z "${minor}" ] ; then
 | 
						|
        minor=0
 | 
						|
    fi
 | 
						|
 | 
						|
    # HACK to handle RHEL betas
 | 
						|
    if [ "${distro}" == "rhel" ] && [ ${minor} -gt 90 ] ; then
 | 
						|
    	major=$(expr ${major} + 1 )
 | 
						|
	minor=0
 | 
						|
	beta=Beta
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ -n "${beta}" ] ; then
 | 
						|
	minor="${minor}beta"
 | 
						|
    fi
 | 
						|
 | 
						|
    write_to_output "${distro}" "${major}" "${minor}" "$(head -n 1 ${redhat_release})"
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
identify_sles()
 | 
						|
{
 | 
						|
    suse_release="$1"
 | 
						|
    local major
 | 
						|
    local minor
 | 
						|
    local _major
 | 
						|
 | 
						|
    # SUSE LINUX Enterprise Server 9 (i586)
 | 
						|
    # VERSION = 9
 | 
						|
    #
 | 
						|
    # SUSE LINUX Enterprise Server 9 (i586)
 | 
						|
    # VERSION = 9
 | 
						|
    # PATCHLEVEL = 2
 | 
						|
    #
 | 
						|
    # SUSE LINUX Enterprise Server 9 (i586)
 | 
						|
    # VERSION = 9
 | 
						|
    # PATCHLEVEL = 3
 | 
						|
    #
 | 
						|
    # SUSE Linux Enterprise Server 10 (i586)
 | 
						|
    # VERSION = 10
 | 
						|
    #
 | 
						|
    # SUSE Linux Enterprise Server 10 (i586)
 | 
						|
    # VERSION = 10
 | 
						|
    # PATCHLEVEL = 1
 | 
						|
    #
 | 
						|
    # SUSE Linux Enterprise Server 11 (i586)
 | 
						|
    # VERSION = 11
 | 
						|
    # PATCHLEVEL = 0
 | 
						|
 | 
						|
    if [ ! -f "${suse_release}" ] ; then
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    eval $(sed -n \
 | 
						|
               -e 's/^SUSE L\(inux\|INUX\) Enterprise Server \([0-9]*\) (.*)/_major=\2;/gp;' \
 | 
						|
               -e 's/^VERSION = \([0-9]*\)$/major=\1;/gp;' \
 | 
						|
               -e 's/^PATCHLEVEL = \([0-9]*\)$/minor=\1;/gp;' \
 | 
						|
               "${suse_release}")
 | 
						|
 | 
						|
    if [ -z "${major}" -o -z "${_major}" ] ; then
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ "${major}" != "${_major}" ] ; then
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ -z "${minor}" ] ; then
 | 
						|
        minor=0
 | 
						|
    fi
 | 
						|
 | 
						|
    write_to_output "sles" "${major}" "${minor}" "$(head -n 1 ${suse_release})"
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
identify_lsb()
 | 
						|
{
 | 
						|
    lsb_release="$1"
 | 
						|
 | 
						|
    if [ ! -x "${lsb_release}" ] ; then
 | 
						|
	saved_IFS=$IFS
 | 
						|
	IFS=:
 | 
						|
	for i in $PATH ; do
 | 
						|
	    if [ -x "${i}/${lsb_release}" ] ; then
 | 
						|
		lsb_release="${i}/${lsb_release}"
 | 
						|
		break
 | 
						|
	    fi
 | 
						|
	done
 | 
						|
	IFS=$saved_IFS
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ ! -x "${lsb_release}" ] ; then
 | 
						|
	return 1
 | 
						|
    fi
 | 
						|
    
 | 
						|
    distro=$(${lsb_release} --short --id | tr 'A-Z' 'a-z')
 | 
						|
    description=$(${lsb_release} --short --description | sed -e 's/^"\(.*\)"$/\1/g')
 | 
						|
    release=$(${lsb_release} --short --release)
 | 
						|
 | 
						|
    if [ -z "${distro}" -o -z "${release}" ] ; then
 | 
						|
	return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    eval $(echo $release | awk -F. -- '{ print "major=" $1 ; print "minor=" $2 }')
 | 
						|
 | 
						|
    if [ -z "${major}" -o -z "${distro}" ] ; then
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    write_to_output "${distro}" "${major}" "${minor}" "${description}"
 | 
						|
}
 | 
						|
 | 
						|
if [ $# -eq 1 ] ; then
 | 
						|
    exec 1>"$1"
 | 
						|
fi
 | 
						|
 | 
						|
if [ -z "${TEST}" ] ; then
 | 
						|
    identify_redhat /etc/redhat-release && exit 0
 | 
						|
    identify_sles   /etc/SuSE-release   && exit 0
 | 
						|
    identify_lsb    lsb_release         && exit 0
 | 
						|
    identify_debian /etc/debian_version && exit 0
 | 
						|
 | 
						|
    if [ $# -eq 1 ] ; then
 | 
						|
	rm -f "$1"
 | 
						|
    fi
 | 
						|
 | 
						|
    exit 1
 | 
						|
fi
 |