huangcm
2025-07-01 2af87f2bbd5ba07d377b5a7f0ee0e96053f2d424
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/bin/sh
#
#    Answer the question: what distro are we installing.
#
#    Copyright (C) 2010, Cisco 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.
#
# Ngie Cooper, January 2010
#
#
 
error() {
   echo "${0##*/}: ERROR: $*" >&2
}
 
destdir=
omit_redhat_minor_version=0
 
while getopts "d:m" opt; do
 
   case "$opt" in
   d)
       if [ ! -d "$OPTARG" ] ; then
           error "$OPTARG doesn't exist"
           exit 1
       fi
       destdir=$OPTARG
       ;;
   m)
       omit_redhat_minor_version=1
       ;;
   esac
done
 
etc_dir="$destdir/etc"
 
if [ ! -d "$etc_dir" ] ; then
   error "$etc_dir doesn't exist"
   exit 1
fi
 
#
# Precedence list for files to look through for version info...
#
# XXX (garrcoop): add more..
#
for i in gentoo-release redhat-release; do
   if [ -f "$etc_dir/$i" ] ; then
       DISTRO_RELEASE_FILE="$i"
       break
   fi
done
 
if [ "x$DISTRO_RELEASE_FILE" = x ] ; then
   error "Couldn't determine distro release file"
   error "Please send an email with your distro's details, if you believe this is in error"
   exit 1
else
   DISTRO_RELEASE_ABS_FILE="$etc_dir/$DISTRO_RELEASE_FILE"
 
   case "$i" in
   gentoo-release)
       DISTRO=gentoo
       RELEASE_FORMAT_FILE=1
       ;;
   redhat-release)
       RELEASE_FORMAT_FILE=1
       if grep -q '^Red Hat' "$DISTRO_RELEASE_ABS_FILE"; then
           DISTRO=redhat
       elif grep -q '^Fedora' "$DISTRO_RELEASE_ABS_FILE"; then
           DISTRO=fedora
       else
           RELEASE_FORMAT_FILE=0
       fi
       ;;
   esac
 
   if [ $RELEASE_FORMAT_FILE -eq 1 ] ; then
 
       set -- $(cat "$DISTRO_RELEASE_ABS_FILE")
 
       while [ 1 ] ; do
           shift
           if [ $# -eq 0 -o "x$1" = "xrelease" ] ; then
               if [ "x$1" = "xrelease" ] ; then
                   shift
               fi
               break
           fi
       done
 
       case "$DISTRO" in
       gentoo)
           VERSION=$1
           ;;
       fedora|redhat)
           MAJOR_VER=$1
           if [ $omit_redhat_minor_version -eq 0 ] && echo "$@" | grep -q '\(.*Update.*\)'; then
               MINOR_VER=$(echo "$@" | sed -e 's/[\(\)]//g' -e 's/.*Update //')
           fi
           VERSION="$MAJOR_VER${MINOR_VER:+.${MINOR_VER}}"
           ;;
       esac
 
   fi
 
   if [ "x$VERSION" = x ] ; then
       error "Bad release file: $etc_dir/$DISTRO_RELEASE_FILE"
       exit 2
   else
       echo "$DISTRO-$VERSION"
   fi
 
fi