lilalo

view lm-install @ 27:098664cf339c

Выполнены шаги 4,5 в плане N05 по построению распределённой системы lilalo.
Шаг <6> в настоящее время не является необходимым.


Введено понятие сеанса.
Сеансом считается процедура работы с системой, начинающаяся с регистрации
в ней и зазаканчивающаяся разрегистрацией, и сопровождающаяся ведением одного
файла скрипта.
Одновременно с созданием скрипта (.script) создаётся соответствующий ему
файл с информацией о сеансе (.info).
Каждый сеанс имеет уникальный в пределах хоста идентификатор,
~local_session_id~, который впоследствии позволяет определить,
какие команды относятся к какому сеансу.

Добавлен backend-сервер, который получает данные от агентов и записывает
из в backend (в настойщий момент - в XML-файл).
Данные передаются по tcp-соединениям.
(Одновременно может работать несколько серверов.
Блокировка файла при записи пока что не выполняется ОСТОРОЖНО!!!!!!)

Агент периодически пытается отправить backend-серверу содержимое своего кэш-файла,
и если ему это удаётся, кэш файл очищается -- данные теперь хранятся в backend'е.

Взаимодействие агентов, backend-сервера и frontend'а
сейчас выполнеятся так:


+-------+
| |
| cache |
| |
+-^---+-+
| |
. ^ v . ^^ . +---------+ . ^^ .
/ \ tcp / \ | | / \ CGI
( agent )----->( backend- )-->| backend |-->( frontend )----->
\ / \ сервер / | | \ /
' . ' ' .. ' +---------+ ' .. '
^
|
+----+----+
| |
|*.script |
| *.info |
| |
+---------+

l3-frontend:
Теперь может выдавать результат работы на стандартный поток вывода.
Вместо имени файла нужно указать символ -

Добавлены файлы:

l3-backend - backend-сервер
l3-cgi - CGI-обвязка для l3-frontend'а

Новые конфигурационные параметры:
frontend_css Путь к файлу CSS, используемому в HTML-странице, которую генерирует frontend
frontend_google_ico Путь к иконке google
frontend_linux_ico Путь к иконке linux
frontend_freebsd_ico Путь к иконке freebsd
frontend_opennet_ico Путь к иконке opennet
frontend_local_ico Путь к иконке локальной документации

backend_address IP-адрес интерфейса, на котором работает backend-сервер
backend_port Порт, который слушает backend-сервер
backend_pidfile Путь к файлу, который хранит идентификатор процесса backend-сервера
backend_datafile Путь к файлу хранилищу (файлу backend)
author devi
date Mon Nov 07 11:24:49 2005 +0200 (2005-11-07)
parents 05d496f33d76
children 4d252e7dd478
line source
1 #!/bin/sh
3 # Use -d to deinstall labmaker
4 # You can specify directory list to install LabMaker as command line parameters
5 # or set it in $users_to_install variable
7 # CONFIGURABLE SECTION start
8 #users_to_install="/home/your-user-here /root"
9 # CONFIGURABLE SECTION stop
11 first_lab=T1
12 editors_to_install='/bin/vi /usr/bin/vi /usr/bin/vim /bin/ee /usr/bin/ee /usr/bin/pico /usr/bin/nano /usr/local/bin/vim'
13 temp_file=/tmp/lm-install-$$
14 arg=$@
16 show_usage()
17 {
18 cat << USAGE
20 $0 [-d] path...
22 * Use -d to deinstall labmaker
23 * You can specify directory list to install LabMaker as command line parameters
24 or set it in \$users_to_install variable in the script
26 Example:
28 Command
29 # $0 /root /home/user
30 installs labmaker to /root and /home/user directories
32 USAGE
33 }
35 install_to_profile()
36 {
37 profile=$1
38 cat $profile \
39 | sed '/LabMaker:START/,/LabMaker:END/ d' \
40 > $temp_file
41 cat <<'LM_bash_profile' >> $temp_file
42 # LabMaker:START
43 #LMHOME=~/.labmaker
44 #mkdir -p ${LMHOME}
45 #TTY=`tty`
46 #flush="-f"
47 #exec script $flush -q $LMHOME/${TTY##*/}-$$.script
48 # LabMaker:END
49 LM_bash_profile
50 cat $temp_file > $profile
51 rm $temp_file
52 }
54 uninstall_from_profile()
55 {
56 profile=$1
57 cat $profile \
58 | sed '/LabMaker:START/,/LabMaker:END/ d' \
59 > $temp_file
60 cat $temp_file > $profile
61 rm $temp_file
62 }
64 install_to_bashrc()
65 {
66 profile=$1
67 cat $profile \
68 | sed '/LabMaker:START/,/LabMaker:END/ d' \
69 > $temp_file
70 cat <<'LM_bash_profile' >> $temp_file
71 # LabMaker:START
72 LMHOME=~/.labmaker
73 mkdir -p ${LMHOME}
75 uname -a | grep -qi bsd && bsd=yes
76 flush="-f" #linux
77 [ -n "$bsd" ] && flush="-t 0" #freebsd
79 tty=`tty`
80 this_term=`w | grep "${tty##/dev/}" | awk '{print $8;}'`
81 # freeBSD:
82 [ -n "$bsd" ] && this_term=`w | grep "${tty##/dev/tty}" | awk '{print $6;}'`
85 export PS1='\[`
86 a="$?";
87 HIDDEN=$([ "$a" = 0 ] || echo -n ^"$a")$(echo -n _${UID}_)$(echo -n _$$_)$(date\
88 +"%j$(cat ${LMHOME}/lab 2>/dev/null) %H:%M:%S");
89 echo $HIDDEN`\033[50D\033[K\][\u@\h:\W]\$ '
91 if [ -n "$this_term" ] && echo $this_term | grep -qv script
92 then
93 session_id=${tty##*/}-$$
94 parent=`cat /proc/$PPID/cmdline 2> /dev/null`
95 system=`uname -rs`
96 login_from=`who | grep "${tty##/dev/}" | awk '{print $6;}' | tr -d '()'`
97 [ -n "$bsd" ] && login_from="" #FIXME!
98 start_time=`date +%s`
99 hostname=`hostname -f`
101 cat <<INFO > $LMHOME/${session_id}.info
102 <session>
103 <session_id>$session_id</session_id>
104 <hostname>$hostname</hostname>
105 <user>$USER</user>
106 <login_from>$login_from</login_from>
107 <tty>$tty</tty>
108 <system>$system</system>
109 <parent>$parent</parent>
110 <ppid>$PPID</ppid>
111 <pid>$$</pid>
112 <start_time>$start_time</start_time>
113 </session>
114 INFO
116 exec script $flush -q $LMHOME/${session_id}.script
117 fi
118 # LabMaker:END
119 LM_bash_profile
120 cat $temp_file > $profile
121 rm $temp_file
122 }
124 uninstall_from_bashrc()
125 {
126 profile=$1
127 cat $profile \
128 | sed '/LabMaker:START/,/LabMaker:END/ d' \
129 > $temp_file
130 cat $temp_file > $profile
131 rm $temp_file
132 }
134 install_editor()
135 {
136 editor=$1
137 [ -e $editor.orig ] && cp $editor.orig $editor
138 cp $editor $editor.orig
139 cat <<'editor_wrapper' | sed "s@EDITOR@$editor@" > $editor
140 #!/bin/sh
142 LMHOME=~/.labmaker
143 if [ "${1#-}" = "$1" -a -d "$LMHOME" ]
144 then
145 LAB=`cat $LMHOME/lab`
146 TIME="`date +%j${LAB}_%H:%M:%S`"
147 DIR=""
148 [ "${1#/}" = "$1" ] && DIR=$PWD/
149 DIFFNAME=$PPID_${TIME}_`echo $DIR$1| sed s@_@__@ | sed 's@/@_@g'`.diff
150 tmp="/tmp/lm-saved-$$"
151 touch $1
152 cp -- "$1" $tmp 2> /dev/null
153 EDITOR.orig "$@" || ERR=1
154 diff $tmp $1 > $LMHOME/$DIFFNAME 2> /dev/null
155 rm $tmp 2> /dev/null
156 if [ "$ERR" = 1 ]
157 then
158 false
159 else
160 true
161 fi
162 else
163 exec EDITOR.orig "$@"
164 fi
165 editor_wrapper
167 }
170 uninstall_editor()
171 {
172 editor=$1
173 [ -e $editor.orig ] && mv $editor.orig $editor
174 }
176 if [ "$1" != "-d" ]
177 then
178 # INSTALLING LM
179 if [ $# -gt 0 ]
180 then
181 users_to_install="$*"
182 fi
184 if [ -z "$users_to_install" ]
185 then
186 show_usage
187 exit
188 fi
190 for home in $users_to_install
191 do
192 # fix this!
193 user=${home%/}
194 user=${user##*/}
195 mkdir -p $home/.labmaker
196 echo $first_lab > $home/.labmaker/lab
197 chown -R $user $home/.labmaker
199 #if [ ! -e $home/.bash_profile ]
200 #then
201 # echo '. ~/.bashrc' >> ~/.bash_profile
202 #fi
203 #[ -e $home/.bash_profile ] \
204 # && install_to_profile $home/.bash_profile \
205 # && echo LabMaker is installed to $home/.bash_profile
207 echo Don\'t forget to check .bash_profile for .bashrc call
209 [ -e $home/.profile ] && install_to_profile $home/.profile \
210 && install_to_profile $home/.profile \
211 && echo LabMaker is installed to $home/.profile
213 touch $home/.bashrc
214 [ -e $home/.bashrc ] && install_to_bashrc $home/.bashrc \
215 && install_to_bashrc $home/.bashrc \
216 && echo LabMaker is installed to $home/.bashrc
217 done
219 for editor in $editors_to_install
220 do
221 [ -e $editor ] \
222 && install_editor $editor \
223 && echo LabMaker is installed to $editor
224 done
225 else
226 # UNINSTALLING LM
227 shift
228 users_to_install="$*"
229 for user in $users_to_install
230 do
231 home=$user
232 mkdir -p $home/.labmaker
233 echo $first_lab > $home/.labmaker/lab
234 chown -R ${user##*/} $home/.labmaker
236 #if [ ! -e $home/.bash_profile ]
237 #then
238 # echo '. ~/.bashrc' >> ~/.bash_profile
239 #fi
240 #[ -e $home/.bash_profile ] \
241 # && uninstall_from_profile $home/.bash_profile \
242 # && echo LabMaker is uninstalled from $home/.bash_profile
244 [ -e $home/.profile ] && uninstall_from_profile $home/.profile \
245 && uninstall_from_profile $home/.profile \
246 && echo LabMaker is uninstalled from $home/.profile
248 touch $home/.bashrc
249 [ -e $home/.bashrc ] && uninstall_from_bashrc $home/.bashrc \
250 && uninstall_from_bashrc $home/.bashrc \
251 && echo LabMaker is uninstalled from $home/.bashrc
252 done
254 for editor in $editors_to_install
255 do
256 [ -e $editor ] \
257 && uninstall_editor $editor \
258 && echo LabMaker is uninstalled from $editor
259 done
260 fi