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