lilalo
annotate lm-install @ 25:ba4d6515b8fd
Выполнен шаг (3) в плане (N05) по построению распределённой системы lilalo.
Агент l3-агент в реальном времени анализирует скрипты в указанном ему
каталоге и по мере обнаружения новых завершённых команд записывает их
в кэш-файл.
Данные о том, докуда разобран каждый скрипт-файл сохраняются во временном
файле, для того чтобы при перезапуске агента он мог продолжить разбор
с того места, где он был остановлен в прошлый раз, а не копировал
данные в кэш-файл повторно.
Агент запускается для каждого пользователя системы.
Если агент обнаружил свою копию работающую от имени того же пользователя,
он автоматически завершается.
Поиск копии агента выполняется так:
просматривается pid-файл агента - если его нет, считается, что и агент не запущен
(Внимание! Не удаляйте pid-файл!! Работа нескольких агентов от имени одного
пользователя может быть некорректной!)
Если он есть, выполняется проверка, действительно ли процесс с таким идентификатором
это l3-агент текущего пользователя. Если нет, pid-файл удаляется, и агент запускается.
Нормальное завершение агента, работающего в режиме демона, выполняется
с помощью сигнала TERM. При завершении агент автоматически стирает свой pid-файл.
Добавлены атрибуты команды, хранящие информацию о участке бинарного файла скрипта,
соответствующей команды:
raw_start - начало блока команды
raw_output_start - начало вывода команды
raw_end - окончание вывода
raw_file - имя бинарного файла
Файлы:
(могут меняться с помощью конфигурационных параметров)
~/.labmaker/.cache.dat
~/.labmaker/cache.xml
~/.labmaker/l3-agent.pid
Конфигурационные параметры:
cache_stat Имя файла с информацией о текущей позиции разбора
в каждом файле
mode Режим, в котором работает агент.
Допустимые значения:
daemon - в режиме непрерывного опроса каталога
Программа не завершается после окончания анализа,
а ждёт появления новых данных
normal - однократный анализ каталога.
Программа завершается после окончания анализа данных
daemon_sleep_interval Интервал через который агент просматривает каталог скриптов
в поисках новых данных
detach Нужно ли выполнять отключение от терминала при работе в режиме демона?
(строго говоря, если процесс не отключился от терминала,
то и в режиме демона он работать не может. Здесь имеется в виду
режим непрерывного опроса каталога)
agent_pidfile Путь к файлу, который будет хранить идентификатор процесса агента.
l3-agent Имя, под которым будет известен процесс l3-agent
Незначительные исправления:
* убрана отладочная информация о new_commands и new_files из frontend'а
Агент l3-агент в реальном времени анализирует скрипты в указанном ему
каталоге и по мере обнаружения новых завершённых команд записывает их
в кэш-файл.
Данные о том, докуда разобран каждый скрипт-файл сохраняются во временном
файле, для того чтобы при перезапуске агента он мог продолжить разбор
с того места, где он был остановлен в прошлый раз, а не копировал
данные в кэш-файл повторно.
Агент запускается для каждого пользователя системы.
Если агент обнаружил свою копию работающую от имени того же пользователя,
он автоматически завершается.
Поиск копии агента выполняется так:
просматривается pid-файл агента - если его нет, считается, что и агент не запущен
(Внимание! Не удаляйте pid-файл!! Работа нескольких агентов от имени одного
пользователя может быть некорректной!)
Если он есть, выполняется проверка, действительно ли процесс с таким идентификатором
это l3-агент текущего пользователя. Если нет, pid-файл удаляется, и агент запускается.
Нормальное завершение агента, работающего в режиме демона, выполняется
с помощью сигнала TERM. При завершении агент автоматически стирает свой pid-файл.
Добавлены атрибуты команды, хранящие информацию о участке бинарного файла скрипта,
соответствующей команды:
raw_start - начало блока команды
raw_output_start - начало вывода команды
raw_end - окончание вывода
raw_file - имя бинарного файла
Файлы:
(могут меняться с помощью конфигурационных параметров)
~/.labmaker/.cache.dat
~/.labmaker/cache.xml
~/.labmaker/l3-agent.pid
Конфигурационные параметры:
cache_stat Имя файла с информацией о текущей позиции разбора
в каждом файле
mode Режим, в котором работает агент.
Допустимые значения:
daemon - в режиме непрерывного опроса каталога
Программа не завершается после окончания анализа,
а ждёт появления новых данных
normal - однократный анализ каталога.
Программа завершается после окончания анализа данных
daemon_sleep_interval Интервал через который агент просматривает каталог скриптов
в поисках новых данных
detach Нужно ли выполнять отключение от терминала при работе в режиме демона?
(строго говоря, если процесс не отключился от терминала,
то и в режиме демона он работать не может. Здесь имеется в виду
режим непрерывного опроса каталога)
agent_pidfile Путь к файлу, который будет хранить идентификатор процесса агента.
l3-agent Имя, под которым будет известен процесс l3-agent
Незначительные исправления:
* убрана отладочная информация о new_commands и new_files из frontend'а
| author | devi | 
|---|---|
| date | Thu Nov 03 17:49:56 2005 +0200 (2005-11-03) | 
| parents | 37d701f903ec | 
| children | 098664cf339c | 
| rev | line source | 
|---|---|
| devi@0 | 1 #!/bin/sh | 
| devi@0 | 2 | 
| devi@0 | 3 # Use -d to deinstall labmaker | 
| devi@0 | 4 # You can specify directory list to install LabMaker as command line parameters | 
| devi@0 | 5 # or set it in $users_to_install variable | 
| devi@0 | 6 | 
| devi@0 | 7 # CONFIGURABLE SECTION start | 
| devi@0 | 8 #users_to_install="/home/your-user-here /root" | 
| devi@0 | 9 # CONFIGURABLE SECTION stop | 
| devi@0 | 10 | 
| devi@0 | 11 first_lab=T1 | 
| devi@0 | 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' | 
| devi@0 | 13 temp_file=/tmp/lm-install-$$ | 
| devi@0 | 14 arg=$@ | 
| devi@0 | 15 | 
| devi@0 | 16 show_usage() | 
| devi@0 | 17 { | 
| devi@0 | 18 cat << USAGE | 
| devi@0 | 19 | 
| devi@0 | 20 $0 [-d] path... | 
| devi@0 | 21 | 
| devi@0 | 22 * Use -d to deinstall labmaker | 
| devi@0 | 23 * You can specify directory list to install LabMaker as command line parameters | 
| devi@0 | 24 or set it in \$users_to_install variable in the script | 
| devi@0 | 25 | 
| devi@0 | 26 Example: | 
| devi@0 | 27 | 
| devi@0 | 28 Command | 
| devi@0 | 29 # $0 /root /home/user | 
| devi@0 | 30 installs labmaker to /root and /home/user directories | 
| devi@0 | 31 | 
| devi@0 | 32 USAGE | 
| devi@0 | 33 } | 
| devi@0 | 34 | 
| devi@0 | 35 install_to_profile() | 
| devi@0 | 36 { | 
| devi@0 | 37 profile=$1 | 
| devi@0 | 38 cat $profile \ | 
| devi@0 | 39 | sed '/LabMaker:START/,/LabMaker:END/ d' \ | 
| devi@0 | 40 > $temp_file | 
| devi@0 | 41 cat <<'LM_bash_profile' >> $temp_file | 
| devi@0 | 42 # LabMaker:START | 
| devi@0 | 43 #LMHOME=~/.labmaker | 
| devi@0 | 44 #mkdir -p ${LMHOME} | 
| devi@0 | 45 #TTY=`tty` | 
| devi@0 | 46 #flush="-f" | 
| devi@0 | 47 #exec script $flush -q $LMHOME/${TTY##*/}-$$.script | 
| devi@0 | 48 # LabMaker:END | 
| devi@0 | 49 LM_bash_profile | 
| devi@0 | 50 cat $temp_file > $profile | 
| devi@0 | 51 rm $temp_file | 
| devi@0 | 52 } | 
| devi@0 | 53 | 
| devi@0 | 54 uninstall_from_profile() | 
| devi@0 | 55 { | 
| devi@0 | 56 profile=$1 | 
| devi@0 | 57 cat $profile \ | 
| devi@0 | 58 | sed '/LabMaker:START/,/LabMaker:END/ d' \ | 
| devi@0 | 59 > $temp_file | 
| devi@0 | 60 cat $temp_file > $profile | 
| devi@0 | 61 rm $temp_file | 
| devi@0 | 62 } | 
| devi@0 | 63 | 
| devi@0 | 64 install_to_bashrc() | 
| devi@0 | 65 { | 
| devi@0 | 66 profile=$1 | 
| devi@0 | 67 cat $profile \ | 
| devi@0 | 68 | sed '/LabMaker:START/,/LabMaker:END/ d' \ | 
| devi@0 | 69 > $temp_file | 
| devi@0 | 70 cat <<'LM_bash_profile' >> $temp_file | 
| devi@0 | 71 # LabMaker:START | 
| devi@0 | 72 TTY=`tty` | 
| devi@0 | 73 | 
| devi@17 | 74 uname -a | grep -qi bsd && bsd=yes | 
| devi@17 | 75 | 
| devi@0 | 76 this_term=`w | grep "${TTY##/dev/}" | awk '{print $8;}'` | 
| devi@0 | 77 # freeBSD: | 
| devi@17 | 78 [ -n "$bsd" ] && this_term=`w | grep "${TTY##/dev/tty}" | awk '{print $6;}'` | 
| devi@17 | 79 | 
| devi@16 | 80 | 
| devi@16 | 81 | 
| devi@16 | 82 LMHOME=~/.labmaker | 
| devi@16 | 83 mkdir -p ${LMHOME} | 
| devi@16 | 84 flush="-f" #linux | 
| devi@17 | 85 [ -n "$bsd" ] && flush="-t 0" #freebsd | 
| devi@16 | 86 export PS1='\[` a="$?"; | 
| devi@16 | 87 HIDDEN=$([ "$a" = 0 ] || echo -n ^"$a")$(echo -n _${UID}_)$(echo -n _$$_)$(date\ | 
| devi@16 | 88 +"%j$(cat ~/.labmaker/lab 2>/dev/null) %H:%M:%S"); | 
| devi@16 | 89 echo $HIDDEN`\033[50D\033[K\][\u@\h:\W]\$ ' | 
| devi@16 | 90 | 
| devi@0 | 91 if [ -n "$this_term" ] && echo $this_term | grep -qv script | 
| devi@0 | 92 then | 
| devi@0 | 93 exec script $flush -q $LMHOME/${TTY##*/}-$$.script | 
| devi@0 | 94 fi | 
| devi@16 | 95 # LabMaker:END | 
| devi@0 | 96 LM_bash_profile | 
| devi@0 | 97 cat $temp_file > $profile | 
| devi@0 | 98 rm $temp_file | 
| devi@0 | 99 } | 
| devi@0 | 100 | 
| devi@0 | 101 uninstall_from_bashrc() | 
| devi@0 | 102 { | 
| devi@0 | 103 profile=$1 | 
| devi@0 | 104 cat $profile \ | 
| devi@0 | 105 | sed '/LabMaker:START/,/LabMaker:END/ d' \ | 
| devi@0 | 106 > $temp_file | 
| devi@0 | 107 cat $temp_file > $profile | 
| devi@0 | 108 rm $temp_file | 
| devi@0 | 109 } | 
| devi@0 | 110 | 
| devi@0 | 111 install_editor() | 
| devi@0 | 112 { | 
| devi@0 | 113 editor=$1 | 
| devi@0 | 114 [ -e $editor.orig ] && cp $editor.orig $editor | 
| devi@0 | 115 cp $editor $editor.orig | 
| devi@0 | 116 cat <<'editor_wrapper' | sed "s@EDITOR@$editor@" > $editor | 
| devi@0 | 117 #!/bin/sh | 
| devi@0 | 118 | 
| devi@0 | 119 LMHOME=~/.labmaker | 
| devi@0 | 120 if [ "${1#-}" = "$1" -a -d "$LMHOME" ] | 
| devi@0 | 121 then | 
| devi@0 | 122 LAB=`cat $LMHOME/lab` | 
| devi@0 | 123 TIME="`date +%j${LAB}_%H:%M:%S`" | 
| devi@0 | 124 DIR="" | 
| devi@0 | 125 [ "${1#/}" = "$1" ] && DIR=$PWD/ | 
| devi@0 | 126 DIFFNAME=$PPID_${TIME}_`echo $DIR$1| sed s@_@__@ | sed 's@/@_@g'`.diff | 
| devi@0 | 127 tmp="/tmp/lm-saved-$$" | 
| devi@0 | 128 touch $1 | 
| devi@0 | 129 cp -- "$1" $tmp 2> /dev/null | 
| devi@0 | 130 EDITOR.orig "$@" || ERR=1 | 
| devi@0 | 131 diff $tmp $1 > $LMHOME/$DIFFNAME 2> /dev/null | 
| devi@0 | 132 rm $tmp 2> /dev/null | 
| devi@0 | 133 if [ "$ERR" = 1 ] | 
| devi@0 | 134 then | 
| devi@0 | 135 false | 
| devi@0 | 136 else | 
| devi@0 | 137 true | 
| devi@0 | 138 fi | 
| devi@0 | 139 else | 
| devi@0 | 140 exec EDITOR.orig "$@" | 
| devi@0 | 141 fi | 
| devi@0 | 142 editor_wrapper | 
| devi@0 | 143 | 
| devi@0 | 144 } | 
| devi@0 | 145 | 
| devi@0 | 146 | 
| devi@0 | 147 uninstall_editor() | 
| devi@0 | 148 { | 
| devi@0 | 149 editor=$1 | 
| devi@0 | 150 [ -e $editor.orig ] && mv $editor.orig $editor | 
| devi@0 | 151 } | 
| devi@0 | 152 | 
| devi@0 | 153 if [ "$1" != "-d" ] | 
| devi@0 | 154 then | 
| devi@0 | 155 # INSTALLING LM | 
| devi@0 | 156 if [ $# -gt 0 ] | 
| devi@0 | 157 then | 
| devi@0 | 158 users_to_install="$*" | 
| devi@0 | 159 fi | 
| devi@0 | 160 | 
| devi@0 | 161 if [ -z "$users_to_install" ] | 
| devi@0 | 162 then | 
| devi@0 | 163 show_usage | 
| devi@0 | 164 exit | 
| devi@0 | 165 fi | 
| devi@0 | 166 | 
| devi@8 | 167 for home in $users_to_install | 
| devi@0 | 168 do | 
| devi@8 | 169 # fix this! | 
| devi@8 | 170 user=${home%/} | 
| devi@8 | 171 user=${user##*/} | 
| devi@0 | 172 mkdir -p $home/.labmaker | 
| devi@0 | 173 echo $first_lab > $home/.labmaker/lab | 
| devi@8 | 174 chown -R $user $home/.labmaker | 
| devi@0 | 175 | 
| devi@8 | 176 #if [ ! -e $home/.bash_profile ] | 
| devi@8 | 177 #then | 
| devi@8 | 178 # echo '. ~/.bashrc' >> ~/.bash_profile | 
| devi@8 | 179 #fi | 
| devi@8 | 180 #[ -e $home/.bash_profile ] \ | 
| devi@8 | 181 # && install_to_profile $home/.bash_profile \ | 
| devi@8 | 182 # && echo LabMaker is installed to $home/.bash_profile | 
| devi@8 | 183 | 
| devi@8 | 184 echo Don\'t forget to check .bash_profile for .bashrc call | 
| devi@0 | 185 | 
| devi@0 | 186 [ -e $home/.profile ] && install_to_profile $home/.profile \ | 
| devi@0 | 187 && install_to_profile $home/.profile \ | 
| devi@0 | 188 && echo LabMaker is installed to $home/.profile | 
| devi@0 | 189 | 
| devi@0 | 190 touch $home/.bashrc | 
| devi@0 | 191 [ -e $home/.bashrc ] && install_to_bashrc $home/.bashrc \ | 
| devi@0 | 192 && install_to_bashrc $home/.bashrc \ | 
| devi@0 | 193 && echo LabMaker is installed to $home/.bashrc | 
| devi@0 | 194 done | 
| devi@0 | 195 | 
| devi@0 | 196 for editor in $editors_to_install | 
| devi@0 | 197 do | 
| devi@0 | 198 [ -e $editor ] \ | 
| devi@0 | 199 && install_editor $editor \ | 
| devi@0 | 200 && echo LabMaker is installed to $editor | 
| devi@0 | 201 done | 
| devi@0 | 202 else | 
| devi@0 | 203 # UNINSTALLING LM | 
| devi@0 | 204 shift | 
| devi@0 | 205 users_to_install="$*" | 
| devi@0 | 206 for user in $users_to_install | 
| devi@0 | 207 do | 
| devi@0 | 208 home=$user | 
| devi@0 | 209 mkdir -p $home/.labmaker | 
| devi@0 | 210 echo $first_lab > $home/.labmaker/lab | 
| devi@0 | 211 chown -R ${user##*/} $home/.labmaker | 
| devi@0 | 212 | 
| devi@8 | 213 #if [ ! -e $home/.bash_profile ] | 
| devi@8 | 214 #then | 
| devi@8 | 215 # echo '. ~/.bashrc' >> ~/.bash_profile | 
| devi@8 | 216 #fi | 
| devi@8 | 217 #[ -e $home/.bash_profile ] \ | 
| devi@8 | 218 # && uninstall_from_profile $home/.bash_profile \ | 
| devi@8 | 219 # && echo LabMaker is uninstalled from $home/.bash_profile | 
| devi@0 | 220 | 
| devi@0 | 221 [ -e $home/.profile ] && uninstall_from_profile $home/.profile \ | 
| devi@0 | 222 && uninstall_from_profile $home/.profile \ | 
| devi@0 | 223 && echo LabMaker is uninstalled from $home/.profile | 
| devi@0 | 224 | 
| devi@0 | 225 touch $home/.bashrc | 
| devi@0 | 226 [ -e $home/.bashrc ] && uninstall_from_bashrc $home/.bashrc \ | 
| devi@0 | 227 && uninstall_from_bashrc $home/.bashrc \ | 
| devi@0 | 228 && echo LabMaker is uninstalled from $home/.bashrc | 
| devi@0 | 229 done | 
| devi@0 | 230 | 
| devi@0 | 231 for editor in $editors_to_install | 
| devi@0 | 232 do | 
| devi@0 | 233 [ -e $editor ] \ | 
| devi@0 | 234 && uninstall_editor $editor \ | 
| devi@0 | 235 && echo LabMaker is uninstalled from $editor | 
| devi@0 | 236 done | 
| devi@0 | 237 fi | 
