-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsetup.sh
executable file
·136 lines (105 loc) · 3.21 KB
/
setup.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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/bin/bash
# Covenience script for setting up wildcard DNS resolver on OSX
# https://github.com/beslovas/dnsmasq4dev
#
# Copyright (c) 2022 beslovas. Released under the MIT License.
[[ ! $OSTYPE == "darwin"* ]] && \
echo "Not supported OS: $OSTYPE" && \
exit 1
DNSMASQ_CONF=/etc/dnsmasq.conf
PROCEED=
usage()
{
cat << USAGE >&2
dnsmasq4dev.sh --domain <domain>
--domain -d <domain> Domain to setup wildcard support
-h --help Show this help dialog
USAGE
exit 1
}
ask_user_confirmation()
{
[[ -z $1 ]] && 1="Do you want to proceed?"
while true;
do
echo "$1 [y/n]"
read
case $REPLY in
y )
export PROCEED=true
break
;;
n )
break
;;
* )
echo -e "\nUnknown answer."
;;
esac
done
}
while [ "${1:-}" != "" ]; do
case "$1" in
--domain | -d )
shift
DOMAIN=$1
;;
-h | --help | * )
usage
exit 1
;;
esac
shift
done
[[ -z $DOMAIN ]] && usage
if [[ ! `which brew` ]]; then
echo "✗ Homebrew is not installed."
ask_user_confirmation "Do you want to install it?"
[[ -n $PROCEED ]] \
&& /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" \
&& PROCEED="" \
|| echo "Quitting." \
|| exit 0
fi
DNSMASQ_CONF="$(brew --prefix)$DNSMASQ_CONF"
if [[ ! `brew list | grep dnsmasq` ]]; then
HOMEBREW_NO_ENV_HINTS=1 brew install dnsmasq
[[ -f $DNSMASQ_CONF ]] && mv $DNSMASQ_CONF $DNSMASQ_CONF.example
[[ ! -f `brew list dnsmasq | grep /homebrew.mxcl.dnsmasq.plist` ]]
sudo cp $(brew list dnsmasq | grep /homebrew.mxcl.dnsmasq.plist$) /Library/LaunchDaemons/ && \
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
else
echo "✓ dnsmasq is already installed with brew."
fi
[[ ! `brew list dnsmasq` ]] \
&& echo "✗ Installation of dnsmasq is corrupt. Quitting." \
&& exit 1
[[ -f $DNSMASQ_CONF ]] \
&& echo "✓ File /usr/local/etc/dnsmasq.conf already exist." \
|| touch $DNSMASQ_CONF
if [[ -z $(cat $DNSMASQ_CONF) ]]; then
PROCEED=true
else
[[ ! $(grep '^listen-address=127.0.0.1' $DNSMASQ_CONF) ]] \
&& echo "Its configuration will be updated and it can change dnsmasq behaviour." \
&& ask_user_confirmation \
|| echo "✓ $DNSMASQ_CONF is already configured."
fi
[[ -n $PROCEED ]] \
&& echo "listen-address=127.0.0.1" >> $DNSMASQ_CONF
[[ ! $(grep "^address=/$DOMAIN/127.0.0.1" $DNSMASQ_CONF) ]] \
&& echo "address=/$DOMAIN/127.0.0.1" >> $DNSMASQ_CONF \
|| echo "✓ $DNSMASQ_CONF configuration for address '$DOMAIN' already exists"
sudo brew services restart dnsmasq
[ -d /etc/resolver ] || sudo mkdir -p /etc/resolver
sudo tee /etc/resolver/$DOMAIN > /dev/null <<EOF
nameserver 127.0.0.1
domain $DOMAIN
search_order 1
EOF
sudo killall -HUP mDNSResponder
sudo killall mDNSResponderHelper
sudo dscacheutil -flushcache
echo -e "\n✓ dnsmasq setup with configuration for address '*.$DOMAIN' is finished.\n"
echo -e "Try to 'ping dnsmasq4dev.$DOMAIN' :)\n"
exit 0