]> git.pld-linux.org Git - projects/rc-scripts.git/blob - hwprofile
Merged patch by Tomasz Witek <tiwek@manta.univ.gda.pl>:
[projects/rc-scripts.git] / hwprofile
1 #!/bin/sh
2 # (C) 2001 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL>
3 # Hardware Profiles for rc-scripts TOTALNEW.
4 # $Id$
5
6 PROFDIR="/etc/sysconfig/hwprofiles"
7 QUIET=0
8
9 . /etc/rc.d/init.d/functions
10 . /etc/sysconfig/hwprof
11
12 [ -z "${EDITOR}" ] && EDITOR=vi
13
14 if [ "$(id -u)" != "0" ]; then
15         echo "Need superuser privileges. Can't continue!"
16         exit 1
17 fi
18
19 if [ ! -d ${PROFDIR} -o ! -d ${PROFDIR}/data ]; then
20         echo "${PROFDIR} or ${PROFDIR}/data not found. Can't continue!"
21         exit 1
22 fi
23
24 myecho()
25 {
26   if [ $QUIET -eq 0 ]; then
27     echo $@
28   fi
29 }
30
31 showhelp()
32 {
33 echo '
34 no opts         - show help
35 a               - add profile
36 d               - delete profile
37 r foo           - run specified profile or "default" if such exist
38 s               - save/update running profile
39 f               - find proper profile and run it
40 l               - list configured profiles
41 q               - be quiet (used only in few modes)
42
43 Please send all bug reports to:
44 pld-rc-scripts@pld-linux.org.
45 '
46 }
47
48 # This function probably must be enhanced.
49 md5sumgen()
50 {
51   ( \
52   grep -v "MHz" /proc/cpuinfo 2> /dev/null \
53   grep -v "Latency" /proc/pci 2> /dev/null \
54   ) | md5sum | awk ' { gsub(/ .*$/,NIL); print $0 } '
55 }
56
57 while getopts adflsqr: opt "$@"; do
58   case "$opt" in
59     a)
60         echo "Adding new profile..."
61         if [ -f /var/run/hwprofile ]; then
62           echo -n "Current profile is: "
63           cat /var/run/hwprofile
64         fi
65         PROFILE=
66         while [ -z "${PROFILE}" ]; do
67           echo -n "Enter profile name: "
68           read PROFILE
69           if [ -f ${PROFDIR}/${PROFILE}.md5 ]; then
70             echo "Profile ${PROFILE} exist. Try other name."
71             PROFILE=
72           fi
73         done
74         rm -rf ${PROFDIR}/${PROFILE}.* ${PROFDIR}/data/${PROFILE}/
75         md5sumgen > ${PROFDIR}/${PROFILE}.md5
76         LANG=C LC_ALL=C date > ${PROFDIR}/${PROFILE}.date
77         mkdir -p ${PROFDIR}/data/${PROFILE}/
78         chmod 700 ${PROFDIR}/data/${PROFILE}/
79         echo -n "Enter profile description (PROFDIR/${PROFILE}.desc): "
80         read DESCRIPTION
81         [ -z "${DESCRIPTION}" ] && DESCRIPTION="${PROFILE}"
82         echo "${DESCRIPTION}" > ${PROFDIR}/${PROFILE}.desc
83         echo "Now, editor will be started and you need to enter list of files"
84         echo "for this profile (later as ${EDITOR} ${PROFDIR}/${PROFILE}.files)."
85         echo "Press Enter."
86         read
87         if [ -f ${PROFDIR}/files -o ! -f ${PROFDIR}/${PROFILE}.files ]; then
88           cat ${PROFDIR}/files > ${PROFDIR}/${PROFILE}.files;
89         fi
90         ${EDITOR} ${PROFDIR}/${PROFILE}.files
91         FILES=
92         echo "Validating and copying valid files for this profile:"
93         for file in $(grep -v "^#" ${PROFDIR}/${PROFILE}.files); do
94           if [ ! -f ${file} -o "${file}" = "/etc/sysconfig/hwprof" ]; then
95             echo "${file}: invalid, skipping"
96             continue
97           fi
98           bfile=$(basename ${file})
99           echo "Copying ${file} to ${PROFDIR}/data/${PROFILE}/${file}..."
100           cp -dp --parents ${file} ${PROFDIR}/data/${PROFILE}/
101           FILES="${file}\n${FILES}"
102         done
103         echo -e "${FILES}" > ${PROFDIR}/${PROFILE}.files
104         rm -f ${PROFDIR}/${PROFILE}.*~
105         echo "New profile ready."
106         break
107         ;;
108     d)
109         echo "Deleting existing profile..."
110         PROFILE=
111         while [ -z ${PROFILE} ]; do
112           echo -n "Enter profile name: "
113           read PROFILE
114           if [ ! -f ${PROFDIR}/${PROFILE}.md5 ]; then
115             echo "Profile ${PROFILE} doesn't exist. Try other name."
116             PROFILE=
117           fi
118         done
119         echo -n "Are you sure? [t/N]: "
120         read YN
121         case "${YN}" in
122           y | t )
123                 # ok
124           ;;
125           *)
126                 echo "Exiting then."
127                 exit 1
128           ;;
129         esac
130         rm -rf ${PROFDIR}/${PROFILE}.* ${PROFDIR}/data/${PROFILE}/
131         echo "Done."
132         break
133         ;;
134     r)
135         PROFILE="${OPTARG}"
136         if [ -z "${PROFILE}" -o ! -f ${PROFDIR}/${PROFILE}.files ]; then
137           echo "Can't setup ${PROFILE}. No required data."
138           exit 1
139         fi
140         echo -n "Setting up profile \"${PROFILE}\" "
141         myecho "";
142         for file in $(grep -v "^#" ${PROFDIR}/${PROFILE}.files); do
143           if [ ! -f ${file} -o "${file}" = "/etc/sysconfig/hwprof" ]; then
144             myecho "${file}: invalid, skipping"
145             continue
146           fi
147           echo -n ".";
148           myecho "Copying ${PROFDIR}/data/${PROFILE}/${file} to ${file}..."
149           cp -dp ${PROFDIR}/data/${PROFILE}/${file} ${file} 2>/dev/null
150         done
151         echo ${PROFILE} > /var/run/hwprofile
152         echo " Done.";
153         myecho "Profile \"${PROFILE}\" running."
154         break
155         ;;
156     f)
157         PROFILE=
158         PROFILEMD5=$(md5sumgen)
159         myecho "Trying to find proper profile..."
160         for prof in $(ls -1 ${PROFDIR}/*.md5 2> /dev/null); do
161           prof=$(basename ${prof})
162           CURRENTMD5="$(cat ${PROFDIR}/${prof} 2> /dev/null)"
163                 # echo "$prof ${CURRENTMD5} ${PROFILEMD5}";
164           [ -z "${CURRENTMD5}" ] && continue
165           if [ "${CURRENTMD5}" = "${PROFILEMD5}" ]; then
166             PROFILE=$(echo ${prof} | awk ' { gsub(/\.md5/,NIL); print $0 } ')
167             break;
168           fi
169         done
170         if [ -z "${PROFILE}" ]; then
171           if is_yes "${ASKFORPROFILE}"; then
172             echo "Avialable profiles:";
173             PS3='Enter number profile: ';
174             LISTA=$(ls ${PROFDIR}/*.desc 2> /dev/null);
175             for i in ${LISTA};
176               do
177                 a=$(basename $i .desc);
178                 LISTA1="${a} ${LISTA1}";
179               done
180             LISTA1="${LISTA1} Default";
181         
182             select PROFILE in $LISTA1;
183             do
184                 if [ "${PROFILE}" ];
185                 then
186                         break
187                 fi
188             done
189             if [ "${PROFILE}" == "Default" ]; then
190               PROFILE=
191             fi
192           fi
193         fi
194         if [ -z "${PROFILE}" ]; then
195           if [ ! -f ${PROFDIR}/default.md5 ]; then
196                 echo "Valid profile not found. Starting with current files."
197                 exit 0
198             else
199                 echo "Valid profile not found. Starting with \"default\" profile."
200                 PROFILE=default
201           fi
202         fi
203
204         if [ ! -z "${PROFILE}" ]; then
205                 myecho "Found profile \"${PROFILE}\" with md5sum \"${PROFILEMD5}\"."
206                 if [ $QUIET -eq 0 ]; then
207                         $0 -r ${PROFILE};
208                 else
209                         $0 -qr ${PROFILE};
210                 fi
211         fi
212         break
213         ;;
214     s)
215         PROFILE=$(cat /var/run/hwprofile 2> /dev/null)
216         if [ -z "${PROFILE}" ]; then
217           echo "No profile currenty running."
218           exit 1
219         fi
220         if [ ! -f ${PROFDIR}/${PROFILE}.files ]; then
221           echo "${PROFILE}.files is missing. Can't continue."
222           exit 1
223         fi
224         echo  -n "Saving/updating current [${PROFILE}] profile "
225         md5sumgen > ${PROFDIR}/${PROFILE}.md5
226         myecho "";
227         for file in $(grep -v "^#" ${PROFDIR}/${PROFILE}.files); do
228           echo -n ".";
229           if [ ! -f ${file} -o "${file}" = "/etc/sysconfig/hwprof" ]; then
230             myecho "${file}: invalid, skipping"
231             continue
232           fi
233           myecho "Copying ${file} to ${PROFDIR}/data/${PROFILE}/${file}"
234           cp -dp --parents ${file} ${PROFDIR}/data/${PROFILE}/ 
235         done
236         echo " Done."
237         break
238         ;;
239     l)
240         echo "List of configured profiles:"
241         for prof in $(ls -1 ${PROFDIR}/*.md5 2> /dev/null); do
242           prof=$(basename ${prof})
243           profname=$(echo ${prof} | awk ' { gsub(/\.md5/,NIL); print $0 } ')
244           echo    "Name    : ${profname}"
245           echo -n "Desc    : "
246           if [ -f ${PROFDIR}/${profname}.md5 ]; then
247             cat ${PROFDIR}/${profname}.desc
248           else
249             echo "MISSING"
250           fi
251           echo -n "Created : "
252           if [ -f ${PROFDIR}/${profname}.date ]; then
253             cat ${PROFDIR}/${profname}.date
254           else
255             echo "MISSING"
256           fi
257           echo -n "md5sum  : "
258           if [ -f ${PROFDIR}/${profname}.md5 ]; then
259             cat ${PROFDIR}/${profname}.md5
260           else
261             echo "MISSING"
262           fi
263           echo -n "Files   : "
264           if [ -f ${PROFDIR}/${profname}.files ]; then
265             cat ${PROFDIR}/${profname}.files | xargs
266           else
267             echo "MISSING"
268           fi
269           echo
270         done
271         echo "End."
272         break
273         ;;
274     q)
275         QUIET=1; export QUIET;
276         ;;
277     *)
278         showhelp
279         exit 1
280         break
281         ;;
282   esac
283 done
284
285 if [ "$#" -le "0" ]; then
286   showhelp
287   exit 1
288 fi
289
290 exit 0
291
292 # This must be last line !
293 # vi:syntax=sh:tw=78:ts=2:sw=2
This page took 0.073423 seconds and 4 git commands to generate.