-
Notifications
You must be signed in to change notification settings - Fork 27
/
bolt.sh
executable file
·117 lines (92 loc) · 2.8 KB
/
bolt.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env bash
# bolt — программа, которая следит за изменением папки с сайтами
# на Маке и добавляет сайты в конфиг Апача и в hosts
# Evgeny Stepanischev http://bolknote.ru Feb 2012
# Запуск: ./bolt.sh &
MYSITES=~/Sites/
HOSTS=/etc/hosts
HTTPDCONF=/etc/apache2/other/bolt-httpd.conf
MD5CURRENT=
MAGIC='# bolt' # mark regexp
MYIP='127.0.0.1'
HOSTPATT=$(/bin/cat <<PATTERN
\n
<VirtualHost *:80>\n
\tServerAdmin $(/usr/bin/whoami)@%host%\n
\tDocumentRoot "$MYSITES%host%"\n
\tServerName %host%\n
\tServerAlias www.%host%\n
</VirtualHost>\n
PATTERN
)
# вызывается, чтобы убрать из /etc/hosts старые хосты
function ClearHosts {
/usr/bin/sed -iE "/${MAGIC}$/d" "$HOSTS"
/usr/bin/sed -iE "/${MAGIC}-www$/d" "$HOSTS"
}
# скан папки Apache и высеивание того, что на имена доменов не тянет
function NewSites {
local host
for host in `/bin/ls -1d "$MYSITES"*/ 2>&- | /usr/bin/egrep -o '/([a-z0-9]+\.)*[a-z0-9]+/$'`; do
host="${host//\//}"
echo "$MYIP $host $MAGIC"
echo "$MYIP www.$host ${MAGIC}-www"
done
}
# Обновление файла hosts из папки Apache
function RenewHosts {
ClearHosts
NewSites >> "$HOSTS"
}
# Убиваем старую конфигурацию
function ClearConfig {
/bin/rm -f "$HTTPDCONF"
}
# Обновление конфигурации
function RenewConfigFromHosts {
local host
ClearConfig
echo 'NameVirtualHost *:80' > "$HTTPDCONF"
for host in `/usr/bin/awk "/$MAGIC$/ {print \\$2}" "$HOSTS"`; do
echo -e ${HOSTPATT//%host%/$host} >> "$HTTPDCONF"
done
}
# говорим Apache, что конфигурация изменилась
function TouchApache {
/usr/bin/killall -HUP httpd 2>&-
}
# Обновление всего
# вызывается, если в папке Apache изменились папки
function SmthChanged {
RenewHosts
RenewConfigFromHosts
TouchApache
}
# Подсчёт контрольной суммы папок в домашней папке Apache
function CheckNew {
/bin/ls -1d "$MYSITES"*/ 2>&- | /sbin/md5
}
# Убираем всё, что записали на выходе
function Restore {
ClearHosts
ClearConfig
TouchApache
}
# Подсчёт суммы в цикле и инициация события, если что-то сменилось
function CheckLoop {
local md5
while :; do
md5=$(CheckNew)
if [[ $md5 != "$MD5CURRENT" ]]; then
SmthChanged
MD5CURRENT=$md5
fi
/bin/sleep 1
done
}
if [[ `/usr/bin/whoami` == root ]]; then
trap Restore EXIT
CheckLoop
else
/usr/bin/sudo -b bash "$0"
fi