Parcourir la source

Update pihole

Bob Mottram il y a 8 ans
Parent
révision
6e01a43df6
1 fichiers modifiés avec 171 ajouts et 34 suppressions
  1. 171
    34
      src/freedombone-app-pihole

+ 171
- 34
src/freedombone-app-pihole Voir le fichier

@@ -31,11 +31,11 @@
31 31
 # You should have received a copy of the GNU Affero General Public License
32 32
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
33 33
 
34
-VARIANTS=''
34
+VARIANTS='full full-vim adblocker'
35 35
 
36 36
 PIHOLE_IFACE=eth0
37
-PIHOLE_DNS1='8.8.8.8'
38
-PIHOLE_DNS2='8.8.4.4'
37
+PIHOLE_DNS1='85.214.73.63'
38
+PIHOLE_DNS2='213.73.91.35'
39 39
 
40 40
 piholeBasename=pihole
41 41
 piholeDir=/etc/$piholeBasename
@@ -51,6 +51,16 @@ pihole_variables=(ONION_ONLY
51 51
                   PIHOLE_DNS1
52 52
                   PIHOLE_DNS2)
53 53
 
54
+function pihole_copy_files {
55
+    cp $INSTALL_DIR/pihole/adlists.default $piholeDir/adlists.default
56
+    if [ ! -f $PIHOLE_ADLIST ]; then
57
+        cp $INSTALL_DIR/pihole/adlists.default $PIHOLE_ADLIST
58
+    fi
59
+    cp $INSTALL_DIR/pihole/advanced/Scripts/* /opt/$piholeBasename
60
+    cp $INSTALL_DIR/pihole/advanced/01-pihole.conf /etc/dnsmasq.d/01-pihole.conf
61
+    cp $INSTALL_DIR/pihole/advanced/pihole.cron /etc/cron.d/pihole
62
+}
63
+
54 64
 function pihole_update {
55 65
     if [ ! -f /usr/local/bin/gravity.sh ]; then
56 66
         return
@@ -67,12 +77,138 @@ function pihole_update {
67 77
     echo "piholeDNS1=${PIHOLE_DNS1}" >> ${setupVars}
68 78
     echo "piholeDNS2=${PIHOLE_DNS1}" >> ${setupVars}
69 79
 
70
-    /usr/local/bin/gravity.sh
80
+    echo 'domain-needed' > /etc/dnsmasq.conf
81
+    echo 'bogus-priv' >> /etc/dnsmasq.conf
82
+    echo 'no-resolv' >> /etc/dnsmasq.conf
83
+    echo "server=${PIHOLE_DNS1}" >> /etc/dnsmasq.conf
84
+    echo "server=${PIHOLE_DNS2}" >> /etc/dnsmasq.conf
85
+    echo "interface=${PIHOLE_IFACE}" >> /etc/dnsmasq.conf
86
+    echo 'listen-address=127.0.0.1' >> /etc/dnsmasq.conf
87
+    echo 'cache-size=10000' >> /etc/dnsmasq.conf
88
+    echo 'log-queries' >> /etc/dnsmasq.conf
89
+    echo 'log-facility=/var/log/pihole.log' >> /etc/dnsmasq.conf
90
+    echo 'local-ttl=300' >> /etc/dnsmasq.conf
91
+    echo 'log-async' >> /etc/dnsmasq.conf
92
+
93
+    systemctl reload dnsmasq
94
+
95
+    pihole -g
96
+}
97
+
98
+function pihole_change_upstream_dns {
99
+    data=$(tempfile 2>/dev/null)
100
+    trap "rm -f $data" 0 1 2 5 15
101
+    dialog --backtitle $"Ad Blocker Upstream DNS" \
102
+           --radiolist $"Pick a domain name service (DNS):" 25 50 16 \
103
+           1 $"Digital Courage" on \
104
+           2 $"German Privacy Foundation 1" off \
105
+           3 $"German Privacy Foundation 2" off \
106
+           4 $"Chaos Computer Club" off \
107
+           5 $"ClaraNet" off \
108
+           6 $"OpenNIC 1" off \
109
+           7 $"OpenNIC 2" off \
110
+           8 $"OpenNIC 3" off \
111
+           9 $"OpenNIC 4" off \
112
+           10 $"OpenNIC 5" off \
113
+           11 $"OpenNIC 6" off \
114
+           12 $"OpenNIC 7" off \
115
+           13 $"PowerNS" off \
116
+           14 $"ValiDOM" off \
117
+           15 $"Freie Unzensierte" off \
118
+           16 $"Google" off 2> $data
119
+    sel=$?
120
+    case $sel in
121
+        1) exit 1;;
122
+        255) exit 1;;
123
+    esac
124
+    case $(cat $data) in
125
+        1) PIHOLE_DNS1='85.214.73.63'
126
+           PIHOLE_DNS2='213.73.91.35'
127
+           ;;
128
+        2) PIHOLE_DNS1='87.118.100.175'
129
+           PIHOLE_DNS2='94.75.228.29'
130
+           ;;
131
+        3) PIHOLE_DNS1='85.25.251.254'
132
+           PIHOLE_DNS2='2.141.58.13'
133
+           ;;
134
+        4) PIHOLE_DNS1='213.73.91.35'
135
+           PIHOLE_DNS2='85.214.73.63'
136
+           ;;
137
+        5) PIHOLE_DNS1='212.82.225.7'
138
+           PIHOLE_DNS2='212.82.226.212'
139
+           ;;
140
+        6) PIHOLE_DNS1='58.6.115.42'
141
+           PIHOLE_DNS2='58.6.115.43'
142
+           ;;
143
+        7) PIHOLE_DNS1='119.31.230.42'
144
+           PIHOLE_DNS2='200.252.98.162'
145
+           ;;
146
+        8) PIHOLE_DNS1='217.79.186.148'
147
+           PIHOLE_DNS2='81.89.98.6'
148
+           ;;
149
+        9) PIHOLE_DNS1='78.159.101.37'
150
+           PIHOLE_DNS2='203.167.220.153'
151
+           ;;
152
+        10) PIHOLE_DNS1='82.229.244.191'
153
+            PIHOLE_DNS2='82.229.244.191'
154
+            ;;
155
+        11) PIHOLE_DNS1='216.87.84.211'
156
+            PIHOLE_DNS2='66.244.95.20'
157
+            ;;
158
+        12) PIHOLE_DNS1='207.192.69.155'
159
+            PIHOLE_DNS2='72.14.189.120'
160
+            ;;
161
+        13) PIHOLE_DNS1='194.145.226.26'
162
+            PIHOLE_DNS2='77.220.232.44'
163
+            ;;
164
+        14) PIHOLE_DNS1='78.46.89.147'
165
+            PIHOLE_DNS2='88.198.75.145'
166
+            ;;
167
+        15) PIHOLE_DNS1='85.25.149.144'
168
+            PIHOLE_DNS2='87.106.37.196'
169
+            ;;
170
+        16) PIHOLE_DNS1='8.8.8.8'
171
+            PIHOLE_DNS2='4.4.4.4'
172
+            ;;
173
+        255) exit 1;;
174
+    esac
175
+    write_config_param "PIHOLE_DNS1" "$PIHOLE_DNS1"
176
+    write_config_param "PIHOLE_DNS2" "$PIHOLE_DNS2"
177
+    pihole_update
71 178
 }
72 179
 
73 180
 function configure_interactive_pihole {
74
-    echo -n ''
75
-    # TODO allow editing of blacklist
181
+    while true
182
+    do
183
+        data=$(tempfile 2>/dev/null)
184
+        trap "rm -f $data" 0 1 2 5 15
185
+        dialog --backtitle $"Freedombone Control Panel" \
186
+               --title $"Ad Blocker" \
187
+               --radiolist $"Choose an operation:" 14 70 5 \
188
+               1 $"Edit ads list" off \
189
+               2 $"Edit blacklisted domain names" off \
190
+               3 $"Edit whitelisted domain names" off \
191
+               4 $"Change upstream DNS servers" off \
192
+               5 $"Exit" on 2> $data
193
+        sel=$?
194
+        case $sel in
195
+            1) exit 1;;
196
+            255) exit 1;;
197
+        esac
198
+        case $(cat $data) in
199
+            1) editor $PIHOLE_ADLIST
200
+               pihole_update
201
+               ;;
202
+            2) editor $PIHOLE_BLACKLIST
203
+               pihole_update
204
+               ;;
205
+            3) editor $PIHOLE_WHITELIST
206
+               pihole_update
207
+               ;;
208
+            4) pihole_change_upstream_dns;;
209
+            5) break;;
210
+        esac
211
+    done
76 212
 }
77 213
 
78 214
 function install_interactive_pihole {
@@ -88,23 +224,31 @@ function reconfigure_pihole {
88 224
 }
89 225
 
90 226
 function upgrade_pihole {
227
+    function_check set_repo_commit
228
+    set_repo_commit $INSTALL_DIR/pihole "pihole commit" "$PIHOLE_COMMIT" $PIHOLE_REPO
229
+
230
+    pihole_copy_files
91 231
     pihole_update
92 232
 }
93 233
 
94 234
 function backup_local_pihole {
95
-    echo -n ''
235
+    function_check backup_directory_to_usb
236
+    backup_directory_to_usb $piholeDir pihole
96 237
 }
97 238
 
98 239
 function restore_local_pihole {
99
-    echo -n ''
240
+    function_check restore_directory_from_usb
241
+    restore_directory_from_usb / pihole
100 242
 }
101 243
 
102 244
 function backup_remote_pihole {
103
-    echo -n ''
245
+    function_check backup_directory_to_friend
246
+    backup_directory_to_friend $piholeDir pihole
104 247
 }
105 248
 
106 249
 function restore_remote_pihole {
107
-    echo -n ''
250
+    function_check restore_directory_from_friend
251
+    restore_directory_from_friend / pihole
108 252
 }
109 253
 
110 254
 function remove_pihole {
@@ -146,17 +290,22 @@ function install_pihole {
146 290
     adduser --disabled-login --gecos 'pi-hole' pihole
147 291
     usermod -a -G www-data pihole
148 292
 
293
+    systemctl enable dnsmasq
294
+
149 295
     if [ ! -d $INSTALL_DIR ]; then
150 296
         mkdir -p $INSTALL_DIR
151 297
     fi
152 298
 
153
-    cd $INSTALL_DIR
154
-    git_clone $PIHOLE_REPO pihole
155 299
     if [ ! -d $INSTALL_DIR/pihole ]; then
156
-        exit 523925
300
+        cd $INSTALL_DIR
301
+        git_clone $PIHOLE_REPO pihole
302
+        if [ ! -d $INSTALL_DIR/pihole ]; then
303
+            exit 523925
304
+        fi
305
+        cd $INSTALL_DIR/pihole
306
+        git checkout $PIHOLE_COMMIT -b $PIHOLE_COMMIT
307
+        set_completion_param "pihole commit" "$PIHOLE_COMMIT"
157 308
     fi
158
-    cd $INSTALL_DIR/pihole
159
-    git checkout $PIHOLE_COMMIT -b $PIHOLE_COMMIT
160 309
 
161 310
     if [ ! -d /var/www/pihole/htdocs ]; then
162 311
         mkdir -p /var/www/pihole/htdocs
@@ -168,25 +317,16 @@ function install_pihole {
168 317
     echo '</body>' >> /var/www/pihole/htdocs/index.html
169 318
     echo '</html>' >> /var/www/pihole/htdocs/index.html
170 319
 
171
-    echo 'domain-needed' > /etc/dnsmasq.conf
172
-    echo 'bogus-priv' >> /etc/dnsmasq.conf
173
-    echo 'no-resolv' >> /etc/dnsmasq.conf
174
-    echo "server=${PIHOLE_DNS1}" >> /etc/dnsmasq.conf
175
-    echo "server=${PIHOLE_DNS2}" >> /etc/dnsmasq.conf
176
-    echo "interface=${PIHOLE_IFACE}" >> /etc/dnsmasq.conf
177
-    echo 'listen-address=127.0.0.1' >> /etc/dnsmasq.conf
178
-    echo 'cache-size=10000' >> /etc/dnsmasq.conf
179
-    echo 'log-queries' >> /etc/dnsmasq.conf
180
-    echo 'log-facility=/var/log/pihole.log' >> /etc/dnsmasq.conf
181
-    echo 'local-ttl=300' >> /etc/dnsmasq.conf
182
-    echo 'log-async' >> /etc/dnsmasq.conf
183
-
184 320
     if [ ! -f $INSTALL_DIR/pihole/gravity.sh ]; then
185 321
         exit 26738
186 322
     fi
187 323
     cp $INSTALL_DIR/pihole/gravity.sh /usr/local/bin/gravity.sh
188
-    cp $INSTALL_DIR/pihole/pihole /usr/local/bin/pihole
189 324
     chmod 755 /usr/local/bin/gravity.sh
325
+
326
+    if [ ! -f $INSTALL_DIR/pihole/pihole ]; then
327
+        exit 52935
328
+    fi
329
+    cp $INSTALL_DIR/pihole/pihole /usr/local/bin/pihole
190 330
     chmod 755 /usr/local/bin/pihole
191 331
 
192 332
     if [ ! -d $piholeDir ]; then
@@ -195,12 +335,9 @@ function install_pihole {
195 335
     if [ ! -d /opt/pihole ]; then
196 336
         mkdir -p /opt/pihole
197 337
     fi
198
-    cp $INSTALL_DIR/pihole/adlists.default $piholeDir/adlists.default:
199
-    cp $INSTALL_DIR/pihole/advanced/Scripts/* /opt/$piholeBasename
200
-    cp $INSTALL_DIR/pihole/advanced/01-pihole.conf /etc/dnsmasq.d/01-pihole.conf
201
-    cp $INSTALL_DIR/pihole/advanced/pihole.cron /etc/cron.d/pihole
202 338
 
203
-    systemctl enable dnsmasq
339
+    pihole_copy_files
340
+
204 341
     chown -R www-data:www-data /var/www/pihole/htdocs
205 342
 
206 343
     pihole_update