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'а
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