1 #!/bin/sh 2 # 3 # Answer the question: what distro are we installing. 4 # 5 # Copyright (C) 2010, Cisco Systems Inc. 6 # 7 # This program is free software; you can redistribute it and/or modify 8 # it under the terms of the GNU General Public License as published by 9 # the Free Software Foundation; either version 2 of the License, or 10 # (at your option) any later version. 11 # 12 # This program is distributed in the hope that it will be useful, 13 # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 # GNU General Public License for more details. 16 # 17 # You should have received a copy of the GNU General Public License along 18 # with this program; if not, write to the Free Software Foundation, Inc., 19 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 20 # 21 # Ngie Cooper, January 2010 22 # 23 # 24 25 error() { 26 echo "${0##*/}: ERROR: $*" >&2 27 } 28 29 destdir= 30 omit_redhat_minor_version=0 31 32 while getopts "d:m" opt; do 33 34 case "$opt" in 35 d) 36 if [ ! -d "$OPTARG" ] ; then 37 error "$OPTARG doesn't exist" 38 exit 1 39 fi 40 destdir=$OPTARG 41 ;; 42 m) 43 omit_redhat_minor_version=1 44 ;; 45 esac 46 done 47 48 etc_dir="$destdir/etc" 49 50 if [ ! -d "$etc_dir" ] ; then 51 error "$etc_dir doesn't exist" 52 exit 1 53 fi 54 55 # 56 # Precedence list for files to look through for version info... 57 # 58 # XXX (garrcoop): add more.. 59 # 60 for i in gentoo-release redhat-release; do 61 if [ -f "$etc_dir/$i" ] ; then 62 DISTRO_RELEASE_FILE="$i" 63 break 64 fi 65 done 66 67 if [ "x$DISTRO_RELEASE_FILE" = x ] ; then 68 error "Couldn't determine distro release file" 69 error "Please send an email with your distro's details, if you believe this is in error" 70 exit 1 71 else 72 DISTRO_RELEASE_ABS_FILE="$etc_dir/$DISTRO_RELEASE_FILE" 73 74 case "$i" in 75 gentoo-release) 76 DISTRO=gentoo 77 RELEASE_FORMAT_FILE=1 78 ;; 79 redhat-release) 80 RELEASE_FORMAT_FILE=1 81 if grep -q '^Red Hat' "$DISTRO_RELEASE_ABS_FILE"; then 82 DISTRO=redhat 83 elif grep -q '^Fedora' "$DISTRO_RELEASE_ABS_FILE"; then 84 DISTRO=fedora 85 else 86 RELEASE_FORMAT_FILE=0 87 fi 88 ;; 89 esac 90 91 if [ $RELEASE_FORMAT_FILE -eq 1 ] ; then 92 93 set -- $(cat "$DISTRO_RELEASE_ABS_FILE") 94 95 while [ 1 ] ; do 96 shift 97 if [ $# -eq 0 -o "x$1" = "xrelease" ] ; then 98 if [ "x$1" = "xrelease" ] ; then 99 shift 100 fi 101 break 102 fi 103 done 104 105 case "$DISTRO" in 106 gentoo) 107 VERSION=$1 108 ;; 109 fedora|redhat) 110 MAJOR_VER=$1 111 if [ $omit_redhat_minor_version -eq 0 ] && echo "$@" | grep -q '\(.*Update.*\)'; then 112 MINOR_VER=$(echo "$@" | sed -e 's/[\(\)]//g' -e 's/.*Update //') 113 fi 114 VERSION="$MAJOR_VER${MINOR_VER:+.${MINOR_VER}}" 115 ;; 116 esac 117 118 fi 119 120 if [ "x$VERSION" = x ] ; then 121 error "Bad release file: $etc_dir/$DISTRO_RELEASE_FILE" 122 exit 2 123 else 124 echo "$DISTRO-$VERSION" 125 fi 126 127 fi 128