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