mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	Signed-off-by: Chip Childers <chip.childers@gmail.com> I've assumed that Gavin's commit is appropriate, based on an assumption that we will keep these files in the source tree. If https://issues.apache.org/jira/browse/LEGAL-146 results in a different opionion from the members, then we will end up having to do something more drastic anyway.
		
			
				
	
	
		
			268 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			268 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #! /bin/sh
 | |
| 
 | |
| # Licensed to the Apache Software Foundation (ASF) under one
 | |
| # or more contributor license agreements.  See the NOTICE file
 | |
| # distributed with this work for additional information
 | |
| # regarding copyright ownership.  The ASF licenses this file
 | |
| # to you under the Apache License, Version 2.0 (the
 | |
| # "License"); you may not use this file except in compliance
 | |
| # with the License.  You may obtain a copy of the License at
 | |
| #
 | |
| #   http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing,
 | |
| # software distributed under the License is distributed on an
 | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | |
| # KIND, either express or implied.  See the License for the
 | |
| # specific language governing permissions and limitations
 | |
| # under the License.
 | |
| 
 | |
| # 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
 |