Compare commits

...

393 Commits
v2.4 ... v2.7.1

Author SHA1 Message Date
Dan Schaper
caaee40889 Hosts-file.net moved to https 2016-06-23 17:38:26 -07:00
Jacob Salmela
2ce47f49b1 forgot to remove the old donation stuff 2016-06-20 15:55:23 -05:00
Jacob Salmela
0250e03b86 simplified donation section 2016-06-20 15:47:05 -05:00
Adam Warner
3c4a305976 Update README.md 2016-06-17 16:05:17 +01:00
Jacob Salmela
9ccf9d57a8 updated dashboard pic 2016-06-13 06:49:03 -05:00
Jacob Salmela
366fcf76f6 simplified and new additions
I tried to simplify the readme page a bit.  I also added some new links to some helper videos and added some screenshots of the whitelist editor.
2016-06-11 15:05:11 -05:00
Jacob Salmela
72e8ec7d93 Merge pull request #515 from pi-hole/development
Next Release 2.7
2016-06-11 13:53:58 -05:00
Jacob Salmela
13a479a9f6 tell user to run as root
since you can't install sudo as a non-root user, the script needs to be
run as root in order to install it.
2016-06-11 13:21:08 -05:00
Jacob Salmela
1194e48bd8 install sudo
sudo is needed for the sudoers file to work, which is how the Web
interface executes the pihole commands.
2016-06-11 13:08:43 -05:00
Jacob Salmela
1e0666d1ef make folder so file can be deployed 2016-06-10 18:51:38 -05:00
Jacob Salmela
1c53ad6876 mcat is smarter than me
He already added this.
2016-06-10 18:20:53 -05:00
Jacob Salmela
dc2a537f6b copy sudoers file
necessary for Web interface white/black list functionality.
2016-06-10 17:47:27 -05:00
Adam Warner
a5d3022e9f Merge pull request #522 from crazy-max/development
Update URL for Windows 10 Telemetry list
2016-06-03 16:22:58 +01:00
crazy-max
4541da1f17 Update URL for Windows 10 Telemetry list 2016-06-03 17:10:36 +02:00
Mcat12
a16cd9aef7 Merge pull request #469 from pi-hole/web-sudo
Give WebUI permissions to run pihole commands
2016-05-26 18:45:04 -04:00
Mcat12
6cf446032f Show web interface URL after install 2016-05-25 18:55:36 -04:00
Mcat12
3fda2d9ac3 Fix helpfunc not found error 2016-05-25 17:07:12 -04:00
Mcat12
c03268707a Merge pull request #489 from pi-hole/development
Next Release
2016-05-22 20:46:40 -04:00
Mcat12
7829e907c9 Merge pull request #511 from crazy-max/development
Update URL for Windows 10 Telemetry list
2016-05-22 20:23:04 -04:00
crazy-max
b5529e5138 Update URL for Windows 10 Telemetry list 2016-05-22 01:30:32 +02:00
Adam Warner
d601afcebc Merge pull request #509 from crazy-max/development
New URL for Windows 10 Telemetry list.
2016-05-15 20:12:49 +01:00
crazy-max
892a90bf51 New URL for Windows 10 Telemetry list. 2016-05-15 13:51:35 +02:00
Mcat12
d52a8f08ed Merge pull request #501 from davidtorcivia/development
Fix basic install for Proxmox LXC
2016-05-11 19:12:37 -04:00
David Torcivia
b7e27bf6b4 Fix basic install for Proxmox LXC
Fixed basic installer to properly bind to eth0 when install to a Proxmox LXC.
2016-05-11 18:24:43 -04:00
Mcat12
9ee96d6176 Merge pull request #500 from yoosi/remove-toilet
Replace toilet with echo in chronometer.sh
2016-05-11 16:53:38 -04:00
Carter Maxwell
c0e1772e21 Replace toilet with echo 2016-05-07 11:44:18 -07:00
Mcat12
62dc160c65 Merge pull request #491 from pi-hole/dont-frame-me
Make sure web interface can't be loaded into a frame
2016-05-06 14:30:13 -04:00
Mcat12
f03303e5aa Add X-Pi-hole header 2016-05-03 11:58:13 -04:00
Mcat12
7bc2844b9d Remove X-Pi-hole header
Also adds `X-Frame-Options: DENY` for the admin directory, so that
an ad can't load it into a frame
2016-05-02 18:51:02 -04:00
Mcat12
ba283755be Merge pull request #472 from jim-liu/development
Save custom IP
2016-05-02 09:32:35 -04:00
Jacob Salmela
2209beff8a adding links to optimal.com
Also added image of Pi-hole's stats from Optimal.com and a bitcoin donation address per some user requests.
2016-04-29 21:09:41 -05:00
Jim Liu
00cc480bc1 Update basic-install.sh 2016-04-26 16:10:51 +08:00
Jacob Salmela
d7de5b2afa link to pihole menubar 2016-04-23 15:56:14 -05:00
Jim Liu
221b72439b Update basic-install.sh 2016-04-22 01:46:27 +08:00
Jim Liu
08e6f60941 Update blacklist.sh 2016-04-22 01:42:43 +08:00
Jim Liu
10066209e7 Update whitelist.sh
Change piholeIPfile to a permanent location.
2016-04-22 01:41:11 +08:00
Jim Liu
08e95ed606 Update gravity.sh
Change piholeIPfile to a permanent location.
2016-04-22 01:40:42 +08:00
Jim Liu
a5ad48aa18 Update gravity.sh 2016-04-21 23:40:44 +08:00
Jim Liu
81fdfcba22 Update whitelist.sh 2016-04-21 23:40:38 +08:00
Mcat12
24de6d6fc9 Allow sudoers file to be uninstalled 2016-04-20 21:43:01 -04:00
Mcat12
aec6fcd00b Merge branch 'BugFix463' into development 2016-04-20 15:55:26 -04:00
Mcat12
619082dbed Merge branch 'development' into BugFix463
Conflicts:
	advanced/Scripts/blacklist.sh
	advanced/Scripts/whitelist.sh
2016-04-20 15:54:58 -04:00
Mcat12
09cdf5081c Install sudoer file 2016-04-17 23:03:12 -04:00
Mcat12
d7abbbfac4 Change mode of sudoer file 2016-04-17 22:49:47 -04:00
Mcat12
c714196647 Add Sudoer file for WebUI 2016-04-17 22:46:06 -04:00
Adam Warner
b702c1d9a8 Merge pull request #468 from mayurkr/mayur-bugfix
fixed non execution of the function helpFunc
2016-04-17 17:32:56 +01:00
Mayur Raiturkar
56ac04c48e fixed helpFunc 2 2016-04-17 18:22:06 +05:30
Mayur Raiturkar
b58519b974 fixed helpFunc 1 2016-04-17 18:21:32 +05:30
Promofaux
ad574f5e90 Replace kill with killall 2016-04-16 15:52:38 +01:00
Promofaux
4941a657bf remove -s switch, as it turns out it worked afterall. 2016-04-16 12:59:40 +01:00
Promofaux
3d4bff9414 Add -s switch to kill command to increase compatability 2016-04-16 10:56:49 +01:00
Adam Warner
2d03616c10 Merge pull request #460 from pi-hole/LighttpdDebugLogging
Added lighttpd error.log to debug output
2016-04-15 21:56:58 +01:00
Adam Warner
fcb9ba08a8 Merge pull request #452 from notracking/patch-2
Added hosts-blocklists lists
2016-04-15 21:56:23 +01:00
Adam Warner
77f4126f9b add root check to whitelist script 2016-04-13 15:51:48 +01:00
Adam Warner
4c890ab202 Add root check to blacklist script 2016-04-13 15:50:48 +01:00
Adam Warner
d10e9b1b6e add pihole/webui version numbers 2016-04-12 08:47:30 +01:00
Adam Warner
a6bee76581 add location of debug log output file! 2016-04-12 08:24:34 +01:00
nate
2f4f5a6ad2 Added lighttpd error.log to debug output 2016-04-11 18:35:44 -05:00
Adam Warner
3853997295 Merge pull request #451 from pi-hole/development
Development of Next release
2016-04-11 12:54:15 +01:00
Adam Warner
76899c9ac5 Merge pull request #459 from pi-hole/BugFix409
remove all mentions of spinner
2016-04-11 12:41:42 +01:00
Adam Warner
99a5b3a98a remove all mentions of spinner 2016-04-11 11:29:14 +01:00
Adam Warner
219aff9a93 Merge pull request #457 from pi-hole/BigFix453
Fix whitespace
2016-04-10 21:44:26 +01:00
Promofaux
b6e1b3bff0 Last one, promise! tabs are behaving strangely here... 2016-04-10 21:43:12 +01:00
Promofaux
1ce888e828 more whitespace fixes...... 2016-04-10 21:41:46 +01:00
Promofaux
1c10a801dc Fix whitespace... 2016-04-10 21:39:44 +01:00
Promofaux
48fa83c9ac Fix whitespace 2016-04-10 21:36:33 +01:00
Adam Warner
31ea3a2757 Merge pull request #456 from pi-hole/BigFix453
Fixes issue #453
2016-04-10 21:20:46 +01:00
Promofaux
05e0003555 Fixes issue #453 2016-04-10 21:17:58 +01:00
notracking
be79281418 Added hosts-blocklists lists
The hosts-blocklist is a semi-automatically updated list, based on various well known public sources, for more details read: https://github.com/notracking/hosts-blocklists/

Please be aware that one file is for domain blocking and the other file for hostname based blocking, these lists are complimentary and should therefore be used simultaneously.
2016-04-10 16:12:40 +08:00
Adam Warner
01f53f6d6c Merge pull request #450 from pi-hole/SmallFixesToWhitelistBlacklist
Small fixes to whitelist blacklist
2016-04-08 23:03:30 +01:00
Promofaux
107e0404de Move exit 1 outside of if block on verbose check to stop dnsmasq reloading 2016-04-08 23:01:13 +01:00
Promofaux
ab99e80333 indent 2016-04-08 23:00:46 +01:00
Promofaux
3154a378a6 Remove clear in DisplayWlist and force verbose to false to tidy up output. 2016-04-08 20:12:30 +01:00
Promofaux
8e04f1c03e Remove clear in DisplayBlist and forse verbose to false to tidy up output. 2016-04-08 20:11:39 +01:00
Promofaux
c0aadeab3d fix spelling in name of variable ($versbose -> $verbose) 2016-04-08 20:10:27 +01:00
Promofaux
6c87698f1a fix spelling in name of variable ($versbose -> $verbose) 2016-04-08 20:10:10 +01:00
Adam Warner
db2e9f8bf3 Merge pull request #447 from 7h3ju57/issue#442
Add list option to blacklist and whitelist
2016-04-08 20:07:24 +01:00
Justin Theberge
9a4c5cef86 fix indentations 2016-04-08 10:14:17 -04:00
Justin Theberge
bdfc86f850 fix formatting 2016-04-07 21:58:57 -04:00
Justin Theberge
70dadfba28 add list options requested from issue#442 2016-04-07 21:52:47 -04:00
Adam Warner
01e1e34874 Merge pull request #441 from pi-hole/development
Pihole v2.6.1.2. Closes #439
2016-04-06 09:44:04 +01:00
Adam Warner
28a3cbfa87 Merge pull request #440 from pi-hole/Bugfix439
fixes #439
2016-04-06 09:42:07 +01:00
Adam Warner
0b480c2d3f remove redundant else, add ! to if logic. 2016-04-06 09:36:41 +01:00
Adam Warner
391dea445a Move help output to function, add -h argument 2016-04-06 09:34:05 +01:00
Adam Warner
e074c72130 Move help output to function helpFunc, add -h argument. 2016-04-06 09:32:36 +01:00
Adam Warner
96f3f863e5 Clean up output. Commented out un-needed root/sudo notification 2016-04-06 09:28:24 +01:00
Adam Warner
3877f6fd94 Fix arguments not being passed through to chronometer.sh 2016-04-06 09:27:46 +01:00
Adam Warner
cbbc6df05a Merge pull request #425 from PiHoleController
Fixes spacing issues in whiptail dialogs
2016-04-05 22:26:02 +01:00
Adam Warner
32ff7fb321 Merge pull request #437 from pi-hole/development
Hotfix 2.6.1.1 - closes #434
2016-04-05 14:32:32 +01:00
Adam Warner
5537e57eec Merge pull request #436 from pi-hole/2611Hotfix
Fixes #432. Thanks to @VDRrulez and @jradwan for pointing it out...
2016-04-05 14:30:16 +01:00
Promofaux
9c94af04cc Fixes #432. Thanks to @VDRrulez and @jradwan for pointing it out... 2016-04-05 14:22:10 +01:00
Adam Warner
3f0b15902d Merge pull request #432 from pi-hole/development
Hotfix 2.6.1
2016-04-05 08:56:28 +01:00
Adam Warner
4d3835dde2 Merge pull request #431 from pi-hole/261Hotfix
Correct variable name (Missing capital letter! whoops!)
2016-04-05 08:55:34 +01:00
Promofaux
8514f42d0d Correct variable name (Missing capital letter! whoops!) 2016-04-05 08:53:52 +01:00
Adam Warner
6d9fbe8d41 Merge pull request #392 from pi-hole/development
Pi-hole v2.6
2016-04-05 00:30:20 +01:00
Promofaux
849185d3c9 Fix incorrect echo 2016-04-05 00:03:49 +01:00
Promofaux
47cc757ed0 Fix incorrect echo 2016-04-05 00:03:24 +01:00
Adam Warner
f6edd435af Merge pull request #429 from pi-hole/white-black-piholeconf
Ensure all scripts honour pihole.conf

fixed small bug where source lists were being updated on every run of gravity
2016-04-04 23:52:11 +01:00
Promofaux
0c0dd914f7 Fix source lists not being skipped if they are already up to date 2016-04-04 23:48:34 +01:00
Promofaux
c6405bc93b Ensure addn-hosts value is updated in /etc/dnsmasq.d/01-pihole.conf if user has a custom value set in pihole.conf 2016-04-04 23:38:46 +01:00
Promofaux
cdffdfbded merge master > development 2016-04-04 22:18:53 +01:00
Promofaux
0bbfb323b1 make whitelist honour pihole.conf file 2016-04-04 21:08:56 +01:00
Promofaux
4f08359786 Make blacklist honour pihole.conf file 2016-04-04 21:08:45 +01:00
Adam Warner
7efb17537a Merge pull request #427 from pi-hole/SystemctlDebugLogging
Write verbose status of processes to debug log & Minor UI Fixes
2016-04-04 14:59:22 +01:00
nate
7e06769d44 Double quoting 2016-04-04 01:03:05 -05:00
nate
5347ee4896 Write verbose status of processes to debug log & Minor UI Fixes 2016-04-04 00:59:24 -05:00
nate
834bf30a10 Merged branch development into PiHoleController 2016-04-03 18:05:19 -05:00
nate
22ea384ac8 Fix whiptail spacing 2016-04-03 18:05:11 -05:00
Adam Warner
3e6dd9ea9e Merge pull request #424 from pi-hole/PiHoleController
Indentation fix
2016-04-03 23:28:03 +01:00
nate
10f363e9e7 Merged branch development into PiHoleController 2016-04-03 17:26:37 -05:00
nate
69e8c014c3 Indentation fix 2016-04-03 17:25:48 -05:00
Adam Warner
dbb40e1dda Merge pull request #416 from pi-hole/PiHoleController
Add in Pi hole controller
2016-04-03 23:15:00 +01:00
Promofaux
d710b97276 Fix issue raised in #421 (Use variable instead of hardcoded path, do not delete user created pihole.conf!) 2016-04-03 22:10:04 +01:00
Promofaux
0e6e8040ba Change spinstr to match install and uninstall scripts 2016-04-03 21:54:16 +01:00
Promofaux
c6fb0bad4b change spinstr to match spinstr in basic-install.sh 2016-04-03 21:45:00 +01:00
Promofaux
2d08217173 Tidy up For loops, clean up whitespace 2016-04-03 21:43:36 +01:00
Promofaux
36645d9335 Add check for existing files in /usr/local/bin left over from previous version, as those scripts are replaced with pihole <command> script. 2016-04-03 18:39:22 +01:00
Promofaux
97d3aedba1 Add some output to the log flush 2016-04-03 18:27:18 +01:00
Promofaux
5976b20aec Fix spelling mistake, remove unaccessed function. 2016-04-03 18:25:39 +01:00
Promofaux
ad8573c739 Pedantic change, stops my editor from treating all of the code as one long sting in ' ' (as the ' was escaped with \) 2016-04-03 18:10:50 +01:00
nate
7f9410fd34 Added uninstall option to bash-completion 2016-04-02 19:45:44 -05:00
nate
71133f6b59 Spelling error fix... 2016-04-02 19:42:33 -05:00
nate
5d5d6c2c70 handle case where parent directories do not exist 2016-04-02 19:31:26 -05:00
nate
37fa462db5 Erraneous call to SUDO removed 2016-04-02 19:24:19 -05:00
nate
1a2046a7eb Added uninstall option to pihole command. Minor fixes 2016-04-02 19:20:54 -05:00
nate
3dff7e80fc Fixed path to /etc/bash_completion.d/ 2016-04-02 18:52:03 -05:00
nate
6eea9239a7 Merged branch development into PiHoleController 2016-04-02 18:41:36 -05:00
nate
75f1969bd2 Set executable permissions of pihole and changed installer to invoke sudo for gravity.sh.
Note: We invoke gravity.sh with sudo in other places, so ignore the removed comment.
2016-04-02 18:39:09 -05:00
Mcat12
e97755eb91 Fix missing cats 2016-04-02 19:28:30 -04:00
Mcat12
b938949cdb Merge pull request #419 from pi-hole/piholeDebugInstallFix
Fixed missing `cp` of `piholeDebug.sh` to /opt/pihole
2016-04-02 19:20:41 -04:00
nate
447af208b3 Fixed missing cp of piholeDebug.sh to /opt/pihole 2016-04-02 17:59:59 -05:00
nate
d47fbbbe96 Mcat12 requests. Added bash-completion support 2016-04-02 17:58:10 -05:00
nate
767b72fbfa Merged branch development into PiHoleController 2016-04-02 17:34:41 -05:00
Adam Warner
b94a8da9d6 Merge pull request #418 from gitter-badger/gitter-badge
Add a Gitter chat badge to README.md
2016-04-02 14:44:24 +01:00
The Gitter Badger
12b5be239b Add Gitter badge 2016-04-02 13:31:49 +00:00
Mcat12
0fbf72bb09 Change dummy domain and show device's hostname in ping
* Change dummy domain
Allows users to access Pi-hole console with my.pi-hole.net instead of the IP address

* Cleaned up formatting

* Put device hostname at the top of the list
Changed my.pi-hole.net to pi.hole and placed it under the device hostname. This way, ping will return the device hostname but you still can access the web interface with pi.hole/admin
2016-04-01 20:19:47 -04:00
Adam Warner
ae2117ff5a Merge pull request #411 from nate-ubiquisoft/development
debugPihole.sh, uninstall.sh bug fixes and improvements, script cleanup
2016-04-01 20:36:45 +01:00
nate
b80821c4b7 Merged branch development into PiHoleController 2016-04-01 12:17:41 -05:00
nate
cf01b5a002 Readded cat calls to fix permission issue 2016-04-01 12:17:05 -05:00
nate
bb66d559e7 Merge branch 'development'
Conflicts:
	gravity.sh
2016-04-01 11:08:46 -05:00
nate
7b8fa3b922 Permissions changed for /etc/pihole and cleaned up some output 2016-04-01 01:11:59 -05:00
nate
777676b525 Made uninstall.sh and pihole.sh executable. 2016-03-31 20:33:15 -05:00
nate
28f2a1309e Merge branch 'development'
Conflicts:
	automated install/uninstall.sh
2016-03-31 20:25:54 -05:00
nate
4b0a7c2252 Added 01-pihole.conf to be removed on uninstall regardless of removing dnsmasq 2016-03-30 20:23:24 -05:00
nate
2625d9f7fe Made piholeDebug.sh +x 2016-03-30 20:09:19 -05:00
nate
45f24c8a85 Readded cats that were originally considered UUOC 2016-03-30 19:56:11 -05:00
nate
5f7c11f495 Sudo added to ifconfig to ensure it runs if debug not run as root 2016-03-30 19:51:09 -05:00
nate
ec4d2d65a6 PromoFaux request: Detailed adlists.list output
Now tells user (and logs to pihole_Debug.log) that the adlists.default file is in use
2016-03-30 19:49:39 -05:00
nate
3e20f5dd3c Merged branch development into development 2016-03-29 17:04:43 -05:00
Mcat12
7014b5a150 Reverted password for web interface
Work will continue in the secure-web-interface branch
2016-03-29 17:45:00 -04:00
nate
f8427ab789 Merge remote-tracking branch 'refs/remotes/pi-hole/development'
Conflicts:
	README.md
	advanced/Scripts/blacklist.sh
	advanced/Scripts/whitelist.sh
	automated install/basic-install.sh
	gravity.sh
2016-03-29 12:57:22 -05:00
Nate
31fc2bfeb7 Modified gravity.sh to point to new file locations and fixed permission issue 2016-03-29 00:25:40 -05:00
Nate
fb5bc16c83 Call gravity.sh in it's new location 2016-03-29 00:14:56 -05:00
Mcat12
724075e448 Merge pull request #413 from pi-hole/fix-template-team-link
fix template team link
2016-03-28 23:03:32 -04:00
Mcat12
45cb9a2e80 fix template team link 2016-03-28 22:51:54 -04:00
nate
456eee05f2 Added pihole.sh to /usr/local/bin
Uninstall.sh will handle removing the file
2016-03-28 18:55:37 -05:00
nate
23872f77a8 Merged branch development into PiHoleController 2016-03-28 18:46:21 -05:00
nate
37c1999965 Merged branch ScriptCleanup-Dev into development 2016-03-28 18:46:08 -05:00
nate
86dd4dd784 New spinner for gravity.sh
Spinner in gravity.sh now matches basic-install.sh and uninstall.sh
2016-03-28 18:45:55 -05:00
nate
00b65abd09 Minor changes to reflect new tool usage
Removed symlink of scripts to u/l/b
Added copy for setupLCD to /opt/pihole/
New spinner added to gravity.sh to reflect new spinner in basic-install.sh and uninstall.sh
2016-03-28 18:44:54 -05:00
nate
fee55fa642 Added gravity.sh to the list of options 2016-03-28 18:37:49 -05:00
nate
76ea1962be Controller script, pihole.sh added
Syntax changes for user output to be consistent
2016-03-28 18:31:21 -05:00
nate
df3cf72d29 Merged branch ScriptCleanup-Dev into development 2016-03-28 17:08:28 -05:00
nate
32dd594f06 Check if lighttpd has been uninstalled before removing conf files
If is still installed, then restore the original lighttpd.conf file.
2016-03-28 17:08:19 -05:00
nate
ba0ba1de94 Merged branch ScriptCleanup-Dev into development 2016-03-28 17:02:43 -05:00
nate
660e71f032 Added blacklist.sh to be removed on uninstall from u/l/b 2016-03-28 16:32:42 -05:00
nate
169e6fdba4 Merged branch ScriptCleanup-Dev into development 2016-03-28 16:25:32 -05:00
nate
138aeaf8c7 Added uninstall.sh and updateDashboard.sh to be removed on uninstall from u/l/b 2016-03-28 16:25:12 -05:00
nate
33669793b7 Merged branch ScriptCleanup-Dev into development 2016-03-28 16:21:33 -05:00
nate
80f4bf9475 Bug fixes
Fixed DONE! to done!
Fixed symlinking user scripts
Fixed /n to \n
2016-03-28 16:20:23 -05:00
nate
bed869b08e .DS_Store banished! 2016-03-28 16:02:36 -05:00
nate
f2150ee7e1 Merge conflict resolution 2016-03-28 13:07:51 -05:00
nate
eaf89995ee Merge conflict resolution 2016-03-28 12:59:45 -05:00
nate
2311b42bca Merge branch 'ScriptCleanup-Dev'
Conflicts:
	README.md
	advanced/Scripts/blacklist.sh
	advanced/Scripts/piholeDebug.sh
	advanced/Scripts/whitelist.sh
	automated install/basic-install.sh
	gravity.sh
2016-03-28 12:58:44 -05:00
nate
a4fbccac9b Merge conflict resolution 2016-03-28 12:53:21 -05:00
nate
a0cf93a7ca Merge branch 'PiholeDebug'
Conflicts:
	README.md
2016-03-28 12:22:42 -05:00
nate
f444c7d4a5 Merge resolution 2016-03-28 12:21:49 -05:00
nate
8ef4c12f97 Merge branch 'ScriptCleanup'
Conflicts:
	README.md
	advanced/Scripts/blacklist.sh
	advanced/Scripts/whitelist.sh
	automated install/basic-install.sh
	gravity.sh
2016-03-28 12:21:18 -05:00
nate
c520c55ff4 Addressed UAT issues and moved scripts to /opt/pihole
Symlinks now include the /etc/pihole scripts in the user's PATH.
2016-03-28 10:24:13 -05:00
nate
6145748bfb Change single echo to printf to forrect \t interpretation 2016-03-27 20:36:31 -05:00
nate
1a1026b367 Consistent stdout to match basic-install.sh and uninstall.sh 2016-03-27 14:44:42 -05:00
Nate
8c45bd32b7 Loop through dependencies for future expansion.
Syntax of uninstall script now matches basic-install.sh.
More error handling of missing default files.
Force user prompt for removing packages when uninstalling.
2016-03-27 12:31:05 -05:00
Nate
2b5cee05e6 Check for existing directory before trying to perform operations on it. 2016-03-27 10:59:09 -05:00
Nate
5442954db6 Prompt user to remove each dependent package if they do choose to remove packages at all. 2016-03-27 10:58:48 -05:00
nate
5ee382c8eb Roll back addition of piholeDebug.sh (production master base) 2016-03-26 17:00:52 -05:00
Nate
901cb44f5e Added /etc/.pihole/ and /var/log/*pihole* to uninstall as well as fixed missing call to removeNoPurge. 2016-03-26 16:57:34 -05:00
Nate
7388461ede Modularized uninstall for cleanliness and robust usability. 2016-03-26 16:57:27 -05:00
nate
5223627b71 read locks echos... reordered to warn user 2016-03-26 16:57:22 -05:00
nate
646c4a3ccc Newline not read correctly in prompt 2016-03-26 16:57:17 -05:00
nate
0b9e78df2c Cleaned code and added prompt for purge on uninstall 2016-03-26 16:57:01 -05:00
nate
a9c24b456d Bug fixes and logging improvements
Finalized for production deployment. Next release targeting a tarball of config files plus additional logging.
2016-03-25 19:04:03 -05:00
nate
b4463bf42c Added test for nslookup
Checks the TESTURL for nslookup is not whitelisted
2016-03-25 16:42:17 -05:00
nate
8f8dc66c70 Ignore whitespace when writing config files 2016-03-24 18:50:53 -05:00
Nate
b746250e71 Made all advanced/Scripts/ executable for consistency. 2016-03-24 18:29:13 -05:00
Promofaux
26b7e7ec8e Merge lighttpd JS changes into development 2016-03-24 23:21:11 +00:00
Promofaux
bc09760c84 Grab changes by @rosskevin. (#386 - lighttpd changes to handle JS files) 2016-03-24 23:19:44 +00:00
Promofaux
ceb229c6ac Merge branch 'master' into development 2016-03-24 23:18:40 +00:00
Promofaux
1e6ac33ef1 Fix merge conflicts 2016-03-24 23:18:14 +00:00
nate
86eafe7a33 Added comparison of gravity.list with Whitelist.txt and Blacklist.txt.
Added additional echos to help read the debug file.
TODO: testNslookup function
2016-03-24 16:21:29 -05:00
nate
00f46dc149 Added Pi 3B to README.md 2016-03-23 14:56:27 -05:00
Jacob Salmela
396c7ab9ee link to tekthing mention
tekthing mentioned us again as one of 5 easy projects for the Raspberry Pi.
2016-03-22 21:21:08 -05:00
Jacob Salmela
fa2cef6395 link to get LED alerts article
added a link to a cool project that makes an LED blink for each ad that gets blocked.
2016-03-21 08:29:19 -05:00
nate
04638c9065 Added 01-pihole.conf from /etc/dnsmasq.d/ to log
Write 01-pihole.conf to debug log
2016-03-20 18:21:35 -05:00
Adam Warner
02bb5b6742 Revert previous change
Reopens #384
2016-03-20 20:50:31 +00:00
Adam Warner
fad5fafa32 Increase disk space to verify...
.. was missing a couple of zeros, and not verifying enough space!

Fixes  #384
2016-03-20 13:26:02 +00:00
nate
b0dd231018 Modified description in header
Removed copied header description from piholeLogFlush.sh and replaced with relevant description.
2016-03-19 21:34:02 -05:00
nate
0b5f005a5d Added piholeDebug.sh script for advanced debugging
Script piholeDebug.sh added to /usr/local/bin to generate a detailed log file for debugging/troubleshooting.
2016-03-19 20:32:11 -05:00
Mcat12
babca8d47b Merge pull request #389 from pi-hole/feature/httpsPull
Secure Pulls now with HTTPS
2016-03-16 08:19:39 -04:00
Dan Schaper
eb462955fe Secure Pulls now with HTTPS
Closes #310
2016-03-16 05:06:03 -07:00
Kevin Ross
b79db36336 no need for the X- header prefix in the string 2016-03-14 22:59:38 -05:00
Kevin Ross
404ea0ce6d copy both the html and js stubs during install 2016-03-14 22:54:45 -05:00
Kevin Ross
d3971b26e4 add a valid js stub 2016-03-14 22:52:02 -05:00
Kevin Ross
a44a201f00 rewrite js files to a valid stub 2016-03-14 22:51:16 -05:00
Mcat12
1d80fdddd4 Merge pull request #372 from Morlok8k/development
fix for older versions of uptime, on development branch.
2016-03-11 15:51:18 -05:00
Mcat12
f09745b4ad Update README.md 2016-03-08 16:28:45 -05:00
Morlok8k
d13ae0610e fix for older versions of uptime, on development branch. 2016-03-08 10:19:01 -08:00
Dan Schaper
3eaa447323 Merge pull request #369 from jpsingleton/development
Optionally block the BBC Breaking News banner
2016-03-08 00:28:18 -08:00
Mcat12
604506da10 Merge pull request #370 from stejoo/development
Fix URL for Windows 10 Telemetry list.
2016-03-07 18:31:56 -05:00
Stefan Joosten
122ce11381 Fix URL for Windows 10 Telemetry list. 2016-03-08 00:23:39 +01:00
James Singleton
8cbd9f7f08 Optionally block the BBC Breaking News banner 2016-03-07 13:31:50 +00:00
Dan Schaper
7c41e5bafc Merge pull request #367 from yoosi/fix-trailling-whitespace
Fix trailing whitespace
2016-03-05 23:17:31 -08:00
Carter Maxwell
4452f784a8 remove trailing whitespace basic-install.sh 2016-03-05 21:16:23 -08:00
Carter Maxwell
ced0ae0d65 remove trailing whitespace whitelist.sh 2016-03-05 21:15:53 -08:00
Carter Maxwell
876c51302a remove trailing whitespace updateDashboard.sh 2016-03-05 21:15:36 -08:00
Carter Maxwell
a6877e7c13 remove trailing whitespace chronometer.sh 2016-03-05 21:15:11 -08:00
Carter Maxwell
f633d1fa5b remove trailing whitespace blacklist.sh 2016-03-05 21:14:56 -08:00
Carter Maxwell
4f90b41343 remove trailing whitespace dnsmasq.conf.original 2016-03-05 21:14:17 -08:00
Carter Maxwell
e4ddf8bc33 remove trailing whitespace gravity.sh 2016-03-05 21:13:43 -08:00
Carter Maxwell
613ab9febc remove trailing whitespace adlists.default 2016-03-05 21:13:23 -08:00
Carter Maxwell
e92cceecc1 remove trailing whitespace README.md 2016-03-05 21:12:58 -08:00
Jacob Salmela
3283f3ed7d Show off our pretty dashboard 2016-03-04 12:07:29 -06:00
Jacob Salmela
0ed30b802d adafruit blog mention 2016-03-04 11:52:19 -06:00
Dan Schaper
beefff8cce Merge pull request #362 from pi-hole/Social-README
Add social addresses
2016-03-04 04:41:54 -08:00
Dan Schaper
b1554d6a89 Add links 2016-03-04 04:38:31 -08:00
Mcat12
4230b03884 Update README.md 2016-03-04 07:34:17 -05:00
Dan Schaper
2182b8339e Add social addresses 2016-03-04 04:22:54 -08:00
Mcat12
b07b77c58f Update README.md 2016-02-29 20:09:49 -05:00
Mcat12
6542407fa3 Merge pull request #344 from ChadBHowell/CBH-Update_README.md
Update README.md
2016-02-29 20:08:57 -05:00
Mcat12
ebf995536b Merge pull request #354 from pi-hole/protectTheLists
Protect the lists
2016-02-29 20:07:20 -05:00
Mcat12
adcd7f10ee Fixed password input 2016-02-28 15:24:38 -05:00
Mcat12
af83936047 Added password to install
Saves in password.txt
2016-02-28 15:18:48 -05:00
Chad Howell
c3b5b97a41 Update README.md
Changed wording per @PromoFaux recommendations.
2016-02-25 19:42:43 -05:00
Mcat12
6c58ea18dc Update README.md 2016-02-24 12:02:18 -05:00
Chad Howell
830b287e5d Update README.md
Add NTC CHIP and Debian based distros
2016-02-23 00:08:50 -05:00
Adam Warner
52549d51ab Update adlists.default
Add extra warning regarding mahakala.is list. See comment by @leichterleben in #341
2016-02-22 09:24:17 +00:00
Adam Warner
fe05ed13e5 Merge pull request #314 from pi-hole/development
Pi-hole v2.5.3
2016-02-21 21:04:16 +00:00
Adam Warner
3a46e7fc0a Merge pull request #338 from pi-hole/auto-chronometer-lcd-setup
Auto chronometer lcd setup
2016-02-21 20:48:46 +00:00
Adam Warner
88674e21cf Update gravity.sh
Clear out `pihole.*` files from `/etc/pihole` as they are no longer needed.
2016-02-21 20:45:56 +00:00
Adam Warner
a0673c7028 Update basic-install.sh
Increase required free bytes.
2016-02-21 20:38:05 +00:00
Mcat12
592af80659 Update adlists.default 2016-02-21 14:19:57 -05:00
Adam Warner
3ec9b3b021 Merge pull request #327 from pi-hole/slamanna212-development
Additional upstream DNS choices, plus ability to add custom upstream DNS
2016-02-21 18:40:34 +00:00
Promofaux
ca2d3a192c add double bracket notation to lines 396, 399, 403 . Fixes error raised by @jacobsalmela 2016-02-21 18:38:34 +00:00
Adam Warner
209bf7d746 Merge pull request #339 from pi-hole/adlist-changes
Adlist.default changes
2016-02-21 18:32:14 +00:00
Promofaux
13777cc1aa update default list to include StevenBlack's amalgamated list (remove seperate lists included in that list). Take advantage of new support for commenting and blank lines 2016-02-21 18:12:57 +00:00
Promofaux
bffc77e478 Add support for comments and blank lines in adlists.default/adlists.list 2016-02-21 17:45:25 +00:00
Promofaux
0ebb7eecdb Verify Custom DNS IP is a valid IP address 2016-02-20 17:33:20 +00:00
Jacob Salmela
99863bb799 pihole on ubuntu 14.04
Also moved a link from "coverage" into "projects" as it was more appropriate
2016-02-20 10:33:04 -06:00
Promofaux
800d2f0859 Add back in whiptail dialog to verifyFreeDiskSpace() 2016-02-20 16:17:29 +00:00
Promofaux
f397844603 Remove conflicted merge markup. Not sure how that got through. 2016-02-20 16:08:02 +00:00
Promofaux
2d895f328c Fix merge conflicts 2016-02-20 15:38:39 +00:00
Promofaux
b14b182084 change regex to test for one or more numbers, not 0 or more numbers. 2016-02-20 15:17:57 +00:00
Promofaux
8687d25d88 make prepopulation of freetext on custom DNS provider a bit more intelligent 2016-02-20 15:12:13 +00:00
Promofaux
7001edcd1d Change 'Other' to 'Custom', add explanation to whiptail. Convert spaces to tabs. 2016-02-20 15:00:03 +00:00
Mcat12
4a1e88f4bf Fixed Pi-hole user not being created 2016-02-20 09:48:06 -05:00
Promofaux
b41608d40b Include fix for regex in verifyFreeDiskSpace() 2016-02-20 14:44:56 +00:00
jacobsalmela
c5d45edf2d consoleblank=0
This makes sure the LCD screen does not go blank after a set period of
time.
2016-02-20 01:15:14 -06:00
jacobsalmela
0116b6341c updated script
Added links to where code was borrowed from
added reboot at the end
also added a few things commented out that might be useful for some
people to learn.
2016-02-20 01:14:48 -06:00
Adam Warner
3e7ecda80f Merge pull request #242 from ChadBHowell/CBH---pihole-system-user-v2
Add user pihole if user does not exsist
2016-02-19 09:31:41 +00:00
jacobsalmela
f0e5b2b6f9 Merge branch 'master' into auto-chronometer-lcd-setup 2016-02-18 16:45:47 -06:00
Jacob Salmela
5976ec9323 Merge pull request #330 from fayetted/Issue_322
Account for CHIP pc not having root on '/'
2016-02-17 17:42:32 -06:00
Adam Warner
eb3463fad1 Merge pull request #331 from pi-hole/master
Update Dev from master
2016-02-17 22:24:27 +00:00
Adam Warner
5f9e5869e9 Create ISSUE_TEMPLATE.md 2016-02-17 22:23:01 +00:00
Adam Warner
950480bb77 Update PULL_REQUEST_TEMPLATE.md 2016-02-17 22:20:01 +00:00
Adam Warner
6530ec58c7 Update PULL_REQUEST_TEMPLATE.md 2016-02-17 22:18:43 +00:00
Adam Warner
b1515c5e3f Rename PULL_REQUEST_TEMPLATE to PULL_REQUEST_TEMPLATE.md 2016-02-17 22:17:20 +00:00
Adam Warner
6581f119fd Update PULL_REQUEST_TEMPLATE 2016-02-17 22:16:04 +00:00
Adam Warner
9ad7c12710 Create PULL_REQUEST_TEMPLATE 2016-02-17 22:15:33 +00:00
Daniel Fayette
8e289215b4 Account for CHIP pc not having root on '/' 2016-02-17 10:00:36 -06:00
Adam Warner
3718c3be56 Merge pull request #328 from Hippyjake/development
closes #325
2016-02-17 12:51:03 +00:00
Adam Warner
c3c051385c Update basic-install.sh
Corrected mistake in previous commit
2016-02-17 12:42:31 +00:00
Hippyjake
21c688a8a8 add uptime -p to chrono script 2016-02-16 18:06:49 -07:00
Promofaux
668b883651 Merge branch 'fayetted-Issue_309' into slamanna212-development 2016-02-17 00:08:48 +00:00
Promofaux
c396aeed52 Correct miss-spelled variables on lines 398 and 403 2016-02-17 00:07:14 +00:00
Adam Warner
40f541bc31 update verifyFreeDiskSpace()...
addresses #322. Will now check free space on the first file system output by 'df- lkP`, as opposed to `/` to make pi-hole more compatible with other distros.
2016-02-16 23:00:48 +00:00
Daniel Fayette
44974f98a0 Merge remote-tracking branch 'upstream/development' into Issue_309 2016-02-16 16:57:04 -06:00
Adam Warner
b7cb3df9bc Merge pull request #305 from fayetted/Issue_304
Set file permisions on `/etc/pihole` directory. fixes #304
2016-02-16 22:54:54 +00:00
Daniel Fayette
432e6d5395 Cleaned up output, Fixed Cancel button 2016-02-16 16:47:36 -06:00
Daniel Fayette
fdf805bc7b Merged with @slamanna212 code to add 3 new DNS providers. 2016-02-16 16:38:06 -06:00
Promofaux
73e13f3875 Merge branch 'development' of https://github.com/slamanna212/pi-hole into slamanna212-development 2016-02-16 22:22:59 +00:00
slamanna212
da959e1296 Increased Size Of Whiptail Dialog
Increased Size of Whiptail Dialog to 5 to show all 5 DNS choices
2016-02-15 17:55:14 -05:00
slamanna212
94600c54cb Added Default State for New DNS Options
Added default state of off for 3 new DNS options to better match existing code
2016-02-15 17:54:17 -05:00
Mcat12
c4fc2e089d Removed dead list
Fixes #316
2016-02-15 17:36:59 -05:00
slamanna212
06444c1c27 Add 3 More DNS Server Choices Durring Install
Added Level 3 , Norton, and Comodo DNS Choices
2016-02-15 17:31:31 -05:00
Adam Warner
f8897942f3 Update adlists.default
Remove 'securemecca.com` list, as they block other content, not just ads and malware.

Pi-hole is about ad-blocking and privacy, not about censoring content.
See :https://www.reddit.com/r/pihole/comments/45xuh8/slug/d00xg02
2016-02-15 19:26:39 +00:00
Adam Warner
4d0b4cfb36 Update basic-install.sh
Do not stop dnsmasq when installing. Instead run `service dnsmasq restart` once installation is complete.
This may have been the cause of issues outlined in #218
2016-02-14 23:44:23 +00:00
Promofaux
7116634739 Merge branch 'development' for release 2.5.2 2016-02-14 23:09:09 +00:00
Promofaux
36492f4857 Merge branch 'master' into development 2016-02-14 23:08:48 +00:00
Adam Warner
3a887af513 Addresses #313
path to white and blacklist scripts moved to variables and updated to include full path
2016-02-14 22:24:21 +00:00
jacobsalmela
3142992c57 update 2016-02-14 10:53:13 -06:00
Jacob Salmela
68a9b88b58 docker container for Pi-hole 2016-02-14 10:20:02 -06:00
Adam Warner
3c801e5b91 Merge pull request #301 from fayetted/Issue_163-2
Check for 25mb of free disk space before install
2016-02-14 13:29:07 +00:00
Daniel Fayette
ecd46f8560 Allow installer to specify own DNS servers
Offers "other" option.
Gives Installer chance to review settings before continuing.
2016-02-13 22:36:24 -06:00
Adam Warner
dee8ce587d Merge pull request #306 from pi-hole/IPv6-Killer
Fixes IPv6 surviving a reinstall
2016-02-14 03:03:56 +00:00
Promofaux
4c24186911 Fixes divide by zero error. 2016-02-14 02:58:09 +00:00
Mcat12
af360a1a20 Merge pull request #298 from fayetted/Issue_297
Fixes gravity_transport variable interpretation.
2016-02-10 20:10:05 -05:00
Mcat12
b5406240c6 Fixes IPv6 surviving a reinstall 2016-02-10 19:07:48 -05:00
Daniel Fayette
73bfbba5f7 Set file permisions on /etc/pihole
Ensures file permisions on $piholeDir before reload/restart of dnsmasq
2016-02-10 15:07:31 -06:00
Daniel Fayette
46d7bfecdb Check for 25mb of free disk space before install
Function will check the free space of / (root)

If the free space is less than 25MB it will give directions
  on how to expand the disk.

Fixes #163
2016-02-10 09:34:06 -06:00
Daniel Fayette
a734927591 Fixes gravity_transport variable interpretation.
Adding (") around Variables passed to function ensures
  spaces are handled and that missing arguments are
  accounted for.
2016-02-09 19:51:03 -06:00
Promofaux
255706e173 Bring dev branch up to date with master bug fixes 2016-02-09 20:44:49 +00:00
Promofaux
b2fbf46e60 Added more adlists to the defaults. By default we now block ~ 155,600 ad and tracker domains. Includes NoTrack's tracker list. 2016-02-09 20:43:45 +00:00
Mcat12
e37495d80b Merge pull request #294 from soukron/master
Replaced 'sudo' with $SUDO variable
2016-02-08 16:56:42 -05:00
Sergio G
beb6b950f7 Replaced 'sudo' with 2016-02-08 22:26:41 +01:00
Promofaux
2d1c0be24e fix reference to install log location. #282 2016-02-06 13:04:54 +00:00
Promofaux
9941651b3c Addresses changes as requested by @jacobsalmela in #282 2016-02-06 13:02:21 +00:00
Mcat12
31fda124f3 Add to contributor info 2016-02-05 17:29:38 +00:00
Adam Warner
b7f6498a5c Create CONTRIBUTING.md
Initial commit. Basic list, could probably do with some work....
2016-02-05 17:29:19 +00:00
Mcat12
282da1c2b6 Add to contributor info 2016-02-05 12:22:23 -05:00
Adam Warner
8e6ec6ef0c Create CONTRIBUTING.md
Initial commit. Basic list, could probably do with some work....
2016-02-05 15:50:15 +00:00
Adam Warner
704b3ee673 Merge pull request #286 from pi-hole/docsAPlusSupport
Add A+ to Raspberry Pi Platforms
2016-02-04 13:27:12 +00:00
Dan Schaper
c18a1c3eca Add A+ to Raspberry Pi Platforms
A+ Supported
2016-02-04 01:17:00 -08:00
Adam Warner
4e1870197e Merge pull request #285 from pi-hole/altInstallDocs
Add alternative installation method
2016-02-03 20:41:45 +00:00
Dan Schaper
3bf61cce95 Add alternative installation method
Add installation method for non-pipe installs
2016-02-03 10:53:23 -08:00
Jacob Salmela
68889b0544 Merge pull request #280 from CDeeRON/patch-1
ATV Hulu domain add
2016-02-02 11:46:13 -06:00
CDeeRON
8a90a47fc2 ATV Hulu domain add
added ads-e-darwin.hulu.com which I found to be used when serving ADs on ATV.
2016-02-02 12:20:30 -05:00
Adam Warner
c93c4cc5e6 Update basic-install.sh
ahem
2016-02-01 22:28:35 +00:00
Promofaux
06cba7defd Fix script output around new changes 2016-02-01 22:25:28 +00:00
Promofaux
8b76bbe51d Merge github.com:pi-hole/pi-hole 2016-02-01 22:19:37 +00:00
Promofaux
aa1d3a4c2e Fix logic in versionCheckDNSmasq, as dnsmasq.conf was being overwritten every time install was run. Fixes @kmr2319 's concern in #98 2016-02-01 22:19:17 +00:00
Adam Warner
66817411f9 Merge pull request #275 from pi-hole/development
Release 2.5
2016-02-01 09:53:25 +00:00
Adam Warner
23c3196935 Merge pull request #277 from pi-hole/cosmeticFix
Upstream DNS Whiptail changes
2016-02-01 07:55:52 +00:00
Dan Schaper
38e73a188a Fix array selection 2016-02-01 02:11:55 +00:00
Dan Schaper
3fdf588cc9 Costmetic fixes, change DynDNS to OpenDNS 2016-02-01 02:09:11 +00:00
Adam Warner
9412fe8a0a Delete version.txt
@mcat12 said it's not needed anymore.
2016-01-31 21:01:13 +00:00
Adam Warner
c6450e60e1 Update version.txt
Change version number to 2.5
2016-01-31 20:58:11 +00:00
Promofaux
8126e9f4b1 Merge branch 'master' into development 2016-01-31 20:48:19 +00:00
Promofaux
70e4104c17 Merge remote-tracking branch 'origin/development' 2016-01-31 20:47:10 +00:00
Promofaux
29e0e1760b Fixes #154 #269. No need for PR #214 any more. 2016-01-31 20:39:12 +00:00
Dan Schaper
442b7b4c4d Merge pull request #267 from pi-hole/CBH/UpstreamDNS
Upstream DNS is now user configurable. Configuration files are now stored in sub-directories instead of as replacements to the package configs.
2016-01-30 18:09:00 -08:00
Dan Schaper
548153fd5e Merge pull request #270 from ChadBHowell/patch-1
Add error checking for grep and correct typos
2016-01-30 17:53:20 -08:00
Chad Howell
5060ed8970 Add error checking for grep and correct typos 2016-01-30 20:51:28 -05:00
Dan Schaper
d18e064d21 Remove no longer needed change to config file
Config file moved, no longer needed command removed.
2016-01-30 16:30:38 -08:00
Mcat12
0cfb3c7ab4 Fixed config issue 2016-01-30 19:21:31 -05:00
Mcat12
2e0c2f2e77 Merge pull request #268 from pi-hole/licenseUpdate
Updated License
2016-01-30 15:21:53 -05:00
Mcat12
48f9a61ff0 Updated License 2016-01-30 15:12:40 -05:00
Mcat12
0042e3ae02 Merge branch 'development' into CBH/UpstreamDNS
Conflicts:
	automated install/basic-install.sh
2016-01-30 13:28:01 -05:00
Jacob Salmela
a1204cf246 splunk app 2016-01-30 12:36:56 -05:00
Mcat12
fc499d9e7c Merge pull request #266 from pi-hole/coverage
splunk app
2016-01-30 12:31:55 -05:00
Jacob Salmela
b83704dac2 splunk app 2016-01-30 10:20:01 -06:00
Adam Warner
b93e46de14 Update basic-install.sh 2016-01-30 14:55:02 +00:00
Promofaux
3c49aa9d9d Merge remote-tracking branch 'origin/master' into development 2016-01-30 14:38:49 +00:00
Promofaux
a448b48eaf Merge remote-tracking branch 'origin/master' 2016-01-30 14:38:33 +00:00
Adam Warner
3c6551f202 Merge pull request #259 from pi-hole/CBH/Bugfix/Formatting
Cbh/bugfix/formatting
2016-01-30 14:37:02 +00:00
Promofaux
9e0c7ed29a Merging from CBH bugfix 2016-01-30 14:34:12 +00:00
Promofaux
677293f3a9 Merge branch 'CBH/Bugfix/Formatting' 2016-01-30 14:29:52 +00:00
Promofaux
34bd7ce3a7 Merge branch 'master' into CBH/Bugfix/Formatting 2016-01-30 14:29:01 +00:00
Adam Warner
21a07e7419 Merge pull request #263 from pi-hole/newVersioning
New versioning system
2016-01-29 20:47:10 +00:00
Adam Warner
6b50ea6504 Merge pull request #249 from pi-hole/OperationBlockListFromGravity
Seperate blocklist sources from gravity.sh to allow users to manage their own list of blocklists that persists through installs/upgrades
2016-01-29 19:39:11 +00:00
Mcat12
895647b908 Don't copy version to install dir 2016-01-29 12:32:58 -05:00
Mcat12
0ece58b9cb Add version 2016-01-29 12:23:03 -05:00
Mcat12
49a56cf131 Start on new versioning 2016-01-29 08:25:35 -05:00
PromoFaux
5fa0d798e2 Update README.md
Add link to segment on MSDN/Channel 9's Defrag Show
2016-01-28 10:13:55 +00:00
Dan Schaper
cadc506aa5 Remove extraneous whitespace from basic-install.sh 2016-01-28 09:25:00 +00:00
Chad Howell
eee0ccef8c Merge remote-tracking branch 'refs/remotes/pi-hole/master' into CBH---pihole-system-user-v2 2016-01-27 22:44:14 -05:00
Chad Howell
088bd632ab Merge remote-tracking branch 'refs/remotes/pi-hole/master' into CBH---Descrition-for-pi-hole-v1-back-function
# Conflicts:
#	automated install/basic-install.sh
2016-01-27 22:43:43 -05:00
Promofaux
52b5d7143b Merge branch 'development' 2016-01-27 23:48:24 +00:00
PromoFaux
60bf14d4dd Merge pull request #255 from pi-hole/Bugfix/InstallScriptFix
Force apt-get update if it has not been run today. This will stop dependency errors on a fresh install.
2016-01-27 23:43:38 +00:00
Promofaux
c00fb44cee Do not force apt-get upgrade on the user. Instead, advise them. We only need to make sure apt-get update has been run 2016-01-27 23:28:36 +00:00
Promofaux
5111880edf remove erroneous -o 2016-01-27 22:35:52 +00:00
Promofaux
3d78b44a8e Changes as in #253, but with less commits to keep the repo tidy 2016-01-27 22:32:08 +00:00
Promofaux
f2d71d41a8 Merge branch 'OperationBlockListFromGravity' of github.com:pi-hole/pi-hole into OperationBlockListFromGravity
Conflicts:
	automated install/basic-install.sh
2016-01-27 21:16:35 +00:00
Promofaux
b75b290351 adlists.default copied on each run of gravity. In case it has been overwritten 2016-01-27 21:14:23 +00:00
Promofaux
701ae06e4a Move copying of adlists.default to gravity.sh 2016-01-27 21:14:06 +00:00
PromoFaux
edd0b809b7 Merge pull request #254 from pi-hole/master
a
2016-01-27 15:47:54 +00:00
PromoFaux
98a0d17431 Update basic-install.sh
Emergency Bug fix. I take the blame for this one, it got lost in a merge!
2016-01-27 15:28:40 +00:00
PromoFaux
b1bd56cd51 Update basic-install.sh 2016-01-27 09:47:28 +00:00
Chad Howell
ae336da7a1 Fix formatting, use consistent style, add comments
Fix formatting, use consistent style, add comments
2016-01-27 01:11:38 -05:00
PromoFaux
4a61b80dd6 Update adlists.default
Add new line to end of file.. Github was complaining
2016-01-26 23:14:38 +00:00
Promofaux
ef99fe2d18 Add line to copy default ad list into /etc/pihole 2016-01-26 20:33:49 +00:00
Promofaux
352ebc3193 outsource list of adlists to a file in /etc/pihole/. 2016-01-26 20:26:09 +00:00
Promofaux
556799428c Contains default adlists. 2016-01-26 20:22:29 +00:00
Chad Howell
d74c8261aa dnsFile2="/etc/dnsmasq.conf.orig"
added .orig
2016-01-25 01:38:41 -05:00
Chad Howell
ac373545d0 versionCheckDNSmasq() fixups
versionCheckDNSmasq() fixups per dschaper's suggestions.
2016-01-25 01:27:10 -05:00
Chad Howell
a21948d2c6 Typo fix
Typo fix
2016-01-25 01:09:45 -05:00
Chad Howell
940480effe Revert "Fix backup to use new 01-pihole.conf location"
This reverts commit 0c444e6f2b.
2016-01-25 00:57:36 -05:00
Chad Howell
29c593b8b0 Add user pihole if user does not exsist
Check if user pihole exist and add if not.  This will give pihole its
own system user without a login or home directory that is not system
dependent.
2016-01-25 00:28:53 -05:00
Chad Howell
0c444e6f2b Fix backup to use new 01-pihole.conf location
Fix backup to use new 01-pihole.conf location
2016-01-25 00:12:51 -05:00
Chad Howell
6cf6e16d22 Add ability to choose upstream DNS servers
Give the user the ability to choose between Google and DynDNS upstream
servers.  Then insert the chosen DNS servers in to
/etc/dnsmasq.d/01-pihole.conf.  Todo: extend choices to include manually
entered DNS servers.
2016-01-25 00:11:00 -05:00
Chad Howell
abef758ff6 Get ready for user selected DNSs
Prep for using sed to insert user selected DNSs into 01-pihole.conf.
Selections will come from dialog during install script containing the
following choices: Google, DynDNS, and eventually 2 custom DNS servers.
2016-01-25 00:05:17 -05:00
Chad Howell
e5f9663a0e Move dnsmasq.conf to dnsmasq.d/01-pihole.conf
Check if /etc/dnsmasq.conf is from pihole.  If so, replace with an
original and install new in .d directory.  Add and unmolested version of
dnsmasq.conf to the ./advanced directory.
2016-01-25 00:04:02 -05:00
Chad Howell
ff5ed561cc Rename dnsmasq.conf to 01-pihole.conf
Rename dnsmasq.conf to 01-pihole.conf to prepare for move to
/etc/dnsmasq.d/ per the normal way of modding configs on Debian based
systems.
2016-01-24 23:54:00 -05:00
jacobsalmela
71fd32b1f4 script to set everything up 2016-01-23 12:56:27 -06:00
jacobsalmela
fcf3b4e4e2 file to set lcd font size 2016-01-23 11:48:12 -06:00
29 changed files with 2502 additions and 637 deletions

7
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,7 @@
##### Expected Behaviour:
##### Actual Behaviour:
##### Steps to reproduce this issue:

11
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,11 @@
Fixes #[issue number] .
Changes proposed in this pull request:
-
-
-
@pi-hole/gravity

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.DS_Store

8
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,8 @@
This is a basic checklist for now, We will update it in the future.
* Fork the repo and create your new branch based on the `development` branch.
* Commit Unix line endings
* If you want, try to keep to the theme of black holes/gravity. This can add some fun to your submission.
* Submit Pull Requests to the development branch only.
* Before Submitting your Pull Request, merge `development` with your new branch and fix any conflicts. (Make sure you don't break anything in development!)
* Be patient. We will review all submitted pull requests, but our focus is on stability.. please don't be offended if we reject your PR, or it appears we're doing nothing with it! We'll get around to it..

108
README.md
View File

@@ -1,63 +1,69 @@
# Automated Install
##### Designed For Raspberry Pi B, B+, 2, and Zero (with an Ethernet adapter)
##### Designed For Raspberry Pi A+, B, B+, 2, Zero, and 3B (with an Ethernet/Wi-Fi adapter) (Works on most Debian distributions!)
1. Install Raspbian
2. Run the command below
### ```curl -L install.pi-hole.net | bash```
2. Run the command below (downloads [this script](https://github.com/pi-hole/pi-hole/blob/master/automated%20install/basic-install.sh) in case you want to read over it first!)
### ```curl -L https://install.pi-hole.net | bash```
#### Alternative Semi-Automated install ####
```
wget -O basic-install.sh https://install.pi-hole.net
chmod +x basic-install.sh
./basic-install.sh
```
If you wish to read over the script before running it, then after the `wget` command, do `nano basic-install.sh` to open a text viewer
Once installed, [configure your router to have **DHCP clients use the Pi as their DNS server**](http://pi-hole.net/faq/can-i-set-the-pi-hole-to-be-the-dns-server-at-my-router-so-i-dont-have-to-change-settings-for-my-devices/) and then any device that connects to your network will have ads blocked without any further configuration. Alternatively, you can manually set each device to [use the Raspberry Pi as its DNS server](http://pi-hole.net/faq/how-do-i-use-the-pi-hole-as-my-dns-server/).
## Pi-hole Is Free, But Powered By Your Donations
[![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif "Free, but powered by donations")](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3J2L3Z4DHW9UY "Donate")
## How To Install Pi-hole
[![60-second install tutorial](http://i.imgur.com/lVyNWTC.png)](https://www.youtube.com/watch?v=TzFLJqUeirA)
## How Does It Work?
**Watch the 60-second video below to get a quick overview**
[![Pi-hole exlplained](http://i.imgur.com/qNybJDX.png)](https://vimeo.com/135965232)
[![Pi-hole exlplained](http://i.imgur.com/qNybJDX.png)](https://youtu.be/L2iVKs0v0Tk)
## Pi-hole Projects
- [Pi-hole Chrome extension](https://chrome.google.com/webstore/detail/pi-hole-list-editor/hlnoeoejkllgkjbnnnhfolapllcnaglh) ([open source](https://github.com/packtloss/pihole-extension))
- [Go Bananas for CHiP-hole ad blocking](https://www.hackster.io/jacobsalmela/chip-hole-network-wide-ad-blocker-98e037)
- [Sky-Hole](http://dlaa.me/blog/post/skyhole)
- [Pi-hole in the Cloud!](http://blog.codybunch.com/2015/07/28/Pi-Hole-in-the-cloud/)
- [unRaid-hole](https://github.com/spants/unraidtemplates/blob/master/Spants/unRaid-hole.xml#L13)--[Repo and more info](http://lime-technology.com/forum/index.php?PHPSESSID=c0eae3e5ef7e521f7866034a3336489d&topic=38486.0)
- [Pi-hole on/off button](http://thetimmy.silvernight.org/pages/endisbutton/)
- [Minibian Pi-hole](http://munkjensen.net/wiki/index.php/See_my_Pi-Hole#Minibian_Pi-hole)
## Pi-hole Is Free, But Powered By Your Donations
Send a one-time donation or sign up for Optimal.com's service using our link below to provide us with a small portion of the montly fee.
* ![Paypal](http://i.imgur.com/3muNfxu.png) : [Donate](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3J2L3Z4DHW9UY)
* ![Flattr](http://i.imgur.com/ZFceFRu.png) : [Donate](https://flattr.com/submit/auto?user_id=jacobsalmela&url=https://github.com/pi-hole/pi-hole)
* ![Bitcoin](http://i.imgur.com/FIlmOMG.png) : 1GKnevUnVaQM2pQieMyeHkpr8DXfkpfAtL
* ![Optimal.com](http://i.imgur.com/d4EAYrw.png) : [Optimal.com](http://api.optimal.com/partner/v1.0/bmV0d29ya3xkbnN8OlJhc3BiZXJyeSBQaS1Ib2xl/subscribe?redirect=https%3A%2F%2Fpi-hole.net%2Fthank-you%2F) (we get a small comission)
## Coverage
- [MacObserver Podcast 585](http://www.macobserver.com/tmo/podcast/macgeekgab-585)
- [Medium: Block All Ads For $53](https://medium.com/@robleathern/block-ads-on-all-home-devices-for-53-18-a5f1ec139693#.gj1xpgr5d)
- [MakeUseOf: Adblock Everywhere, The Pi-hole Way](http://www.makeuseof.com/tag/adblock-everywhere-raspberry-pi-hole-way/)
- [Lifehacker: Turn Your Pi Into An Ad Blocker With A Single Command](http://lifehacker.com/turn-a-raspberry-pi-into-an-ad-blocker-with-a-single-co-1686093533)!
- [Pi-hole on TekThing](https://youtu.be/8Co59HU2gY0?t=2m)
- [Pi-hole on Security Now! Podcast](http://www.youtube.com/watch?v=p7-osq_y8i8&t=100m26s)
- [Foolish Tech Show](https://youtu.be/bYyena0I9yc?t=2m4s)
- [Pi-hole on Ubuntu](http://www.boyter.org/2015/12/pi-hole-ubuntu-14-04/)
- [Catchpoint: iOS 9 Ad Blocking](http://blog.catchpoint.com/2015/09/14/ad-blocking-apple/)
## Partnering With Optimal.com
## Get Help Or Connect With Us On The Web
Pi-hole will be teaming up with [Rob Leathern's subscription service to avoid ads](https://medium.com/@robleathern/block-ads-on-all-home-devices-for-53-18-a5f1ec139693#.gj1xpgr5d). This service is unique and will help content-creators and publishers [still make money from visitors who are using an ad ablocker](http://techcrunch.com/2015/12/17/the-new-optimal/).
- [@The_Pi_Hole](https://twitter.com/The_Pi_Hole)
- [/r/pihole](https://www.reddit.com/r/pihole/)
- [Pi-hole YouTube channel](https://www.youtube.com/channel/UCT5kq9w0wSjogzJb81C9U0w)
- [Wiki](https://github.com/pi-hole/pi-hole/wiki/Customization)
- [FAQs](https://pi-hole.net/help/)
- [![Join the chat at https://gitter.im/pi-hole/pi-hole](https://badges.gitter.im/pi-hole/pi-hole.svg)](https://gitter.im/pi-hole/pi-hole?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
## Technical Details
The Pi-hole is an **advertising-aware DNS/Web server**. If an ad domain is queried, a small Web page or GIF is delivered in place of the advertisement. You can also [replace ads with any image you want](http://pi-hole.net/faq/is-it-possible-to-change-the-blank-page-that-takes-place-of-the-ads-to-something-else/) since it is just a simple Webpage taking place of the ads.
A more detailed explanation of the installation can be found [here](http://jacobsalmela.com/block-millions-ads-network-wide-with-a-raspberry-pi-hole-2-0).
## Gravity
### Gravity
The [gravity.sh](https://github.com/pi-hole/pi-hole/blob/master/gravity.sh) does most of the magic. The script pulls in ad domains from many sources and compiles them into a single list of [over 1.6 million entries](http://jacobsalmela.com/block-millions-ads-network-wide-with-a-raspberry-pi-hole-2-0) (if you decide to use the [mahakala list](https://github.com/pi-hole/pi-hole/commit/963eacfe0537a7abddf30441c754c67ca1e40965)).
## Whitelist and blacklist
Domains can be whitelisted and blacklisted using two pre-installed scripts. See [the wiki page](https://github.com/pi-hole/pi-hole/wiki/Whitelisting-and-Blacklisting) for more details
## Web Interface
The [Web interface](https://github.com/jacobsalmela/AdminLTE#pi-hole-admin-dashboard) will be installed automatically so you can view stats and change settings. You can find it at:
`http://192.168.1.x/admin/index.php`
`http://192.168.1.x/admin/index.php` or `http://pi.hole/admin`
### API
![Pi-hole Advanced Stats Dashboard](http://i.imgur.com/CQlEnDy.png)
### Whitelist and blacklist
Domains can be whitelisted and blacklisted using two pre-installed scripts. See [the wiki page](https://github.com/pi-hole/pi-hole/wiki/Whitelisting-and-Blacklisting) for more details
![Whitelist editor in the Web interface](http://i.imgur.com/Anj1GzO.png)
## API
A basic read-only API can be accessed at `/admin/api.php`. It returns the following JSON:
```JSON
@@ -70,16 +76,38 @@ A basic read-only API can be accessed at `/admin/api.php`. It returns the follow
```
The same output can be acheived on the CLI by running `chronometer.sh -j`
![Web](http://i.imgur.com/m114SCn.png)
## Real-time Statistics
You can view [real-time stats](http://pi-hole.net/faq/install-the-real-time-lcd-monitor-chronometer/) via `ssh` or on an [2.8" LCD screen](http://amzn.to/1P0q1Fj). This is accomplished via [`chronometer.sh`](https://github.com/pi-hole/pi-hole/blob/master/advanced/Scripts/chronometer.sh).
![Pi-hole LCD](http://i.imgur.com/nBEqycp.jpg)
## Help
- See the [Wiki](https://github.com/pi-hole/pi-hole/wiki/Customization) entry for more details
- There is also an [FAQ section on pi-hole.net](http://pi-hole.net)
## Pi-hole Projects
- [Pi-hole stats in your Mac's menu bar](https://getbitbar.com/plugins/Network/pi-hole.1m.py)
- [Get LED alerts for each blocked ad](http://www.stinebaugh.info/get-led-alerts-for-each-blocked-ad-using-pi-hole/)
- [Pi-hole on Ubuntu 14.04 on VirtualBox](http://hbalagtas.blogspot.com/2016/02/adblocking-with-pi-hole-and-ubuntu-1404.html)
- [x86 Docker container that runs Pi-hole](https://hub.docker.com/r/diginc/pi-hole/)
- [Splunk: Pi-hole Visualizser](https://splunkbase.splunk.com/app/3023/)
- [Pi-hole Chrome extension](https://chrome.google.com/webstore/detail/pi-hole-list-editor/hlnoeoejkllgkjbnnnhfolapllcnaglh) ([open source](https://github.com/packtloss/pihole-extension))
- [Go Bananas for CHiP-hole ad blocking](https://www.hackster.io/jacobsalmela/chip-hole-network-wide-ad-blocker-98e037)
- [Sky-Hole](http://dlaa.me/blog/post/skyhole)
- [Pi-hole in the Cloud!](http://blog.codybunch.com/2015/07/28/Pi-Hole-in-the-cloud/)
- [unRaid-hole](https://github.com/spants/unraidtemplates/blob/master/Spants/unRaid-hole.xml#L13)--[Repo and more info](http://lime-technology.com/forum/index.php?PHPSESSID=c0eae3e5ef7e521f7866034a3336489d&topic=38486.0)
- [Pi-hole on/off button](http://thetimmy.silvernight.org/pages/endisbutton/)
- [Minibian Pi-hole](http://munkjensen.net/wiki/index.php/See_my_Pi-Hole#Minibian_Pi-hole)
## Coverage
- [TekThing: 5 fun, easy projects for a Raspberry Pi](https://youtu.be/QwrKlyC2kdM?t=1m42s)
- [Pi-hole on Adafruit's blog](https://blog.adafruit.com/2016/03/04/pi-hole-is-a-black-hole-for-internet-ads-piday-raspberrypi-raspberry_pi/)
- [The Defrag Show - MSDN/Channel 9](https://channel9.msdn.com/Shows/The-Defrag-Show/Defrag-Endoscope-USB-Camera-The-Final-HoloLens-Vote-Adblock-Pi-and-more?WT.mc_id=dlvr_twitter_ch9#time=20m39s)
- [MacObserver Podcast 585](http://www.macobserver.com/tmo/podcast/macgeekgab-585)
- [Medium: Block All Ads For $53](https://medium.com/@robleathern/block-ads-on-all-home-devices-for-53-18-a5f1ec139693#.gj1xpgr5d)
- [MakeUseOf: Adblock Everywhere, The Pi-hole Way](http://www.makeuseof.com/tag/adblock-everywhere-raspberry-pi-hole-way/)
- [Lifehacker: Turn Your Pi Into An Ad Blocker With A Single Command](http://lifehacker.com/turn-a-raspberry-pi-into-an-ad-blocker-with-a-single-co-1686093533)!
- [Pi-hole on TekThing](https://youtu.be/8Co59HU2gY0?t=2m)
- [Pi-hole on Security Now! Podcast](http://www.youtube.com/watch?v=p7-osq_y8i8&t=100m26s)
- [Foolish Tech Show](https://youtu.be/bYyena0I9yc?t=2m4s)
- [Pi-hole on Ubuntu](http://www.boyter.org/2015/12/pi-hole-ubuntu-14-04/)
- [Catchpoint: iOS 9 Ad Blocking](http://blog.catchpoint.com/2015/09/14/ad-blocking-apple/)
## Other Operating Systems
This script will work for other UNIX-like systems with some slight **modifications**. As long as you can install `dnsmasq` and a Webserver, it should work OK. The automated install only works for a clean install of Raspiban right now since that is how the project originated.
This script will work for other UNIX-like systems with some slight **modifications**. As long as you can install `dnsmasq` and a Webserver, it should work OK. The automated install is only for a clean install of a Debian based system, such as the Raspberry Pi.

53
adlists.default Normal file
View File

@@ -0,0 +1,53 @@
## Pi-hole ad-list default sources. Updated 22/05/2016 #########################
# #
# To make changes to this file: #
# 1. run `cp /etc/pihole/adlists.default /etc/pihole/adlists.list` #
# 2. run `nano /etc/pihole/adlists.list` #
# 3. Uncomment or comment any of the below lists #
# #
# Know of any other lists? Feel free to let us know about them, or add them #
# to this file! #
################################################################################
# The below list amalgamates several lists we used previously.
# See `https://github.com/StevenBlack/hosts` for details
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
# Other lists we consider safe:
http://adblock.gjtech.net/?format=unix-hosts
http://mirror1.malwaredomains.com/files/justdomains
http://sysctl.org/cameleon/hosts
https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist
https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt
https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
# hosts-file.net list. Updated frequently, but has been known to block legitimate sites.
https://hosts-file.net/ad_servers.txt
# Mahakala list. Has been known to block legitimage domains including the entire .com range.
# Warning: Due to the sheer size of this list, the web admin console will be unresponsive.
#http://adblock.mahakala.is/
# ADZHOSTS list. Has been known to block legitimate domains
#http://optimate.dl.sourceforge.net/project/adzhosts/HOSTS.txt
# Windows 10 telemetry list
#https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/win10/spy.txt
# Securemecca.com list - Also blocks "adult" sites (pornography/gambling etc)
#http://securemecca.com/Downloads/hosts.txt
# Quidsup's tracker list
https://raw.githubusercontent.com/quidsup/notrack/master/trackers.txt
# Block the BBC News website Breaking News banner
#https://raw.githubusercontent.com/BreakingTheNews/BreakingTheNews.github.io/master/hosts
# Untested Lists:
#https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt
#http://spam404bl.com/spam404scamlist.txt
#http://malwaredomains.lehigh.edu/files/domains.txt
# Following two lists should be used simultaneously: (readme https://github.com/notracking/hosts-blocklists/)
#https://raw.github.com/notracking/hosts-blocklists/master/hostnames.txt
#https://raw.github.com/notracking/hosts-blocklists/master/domains.txt

View File

@@ -1,3 +1,14 @@
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# dnsmasq config for Pi-hole
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
# If you want dnsmasq to read another file, as well as /etc/hosts, use
# this.
addn-hosts=/etc/pihole/gravity.list
@@ -20,8 +31,8 @@ no-resolv
# Add other name servers here, with domain specs if they are for
# non-public domains.
server=8.8.8.8
server=8.8.4.4
server=@DNS1@
server=@DNS2@
# If you want dnsmasq to listen for DHCP and DNS requests only on
# specified interfaces (and the loopback) give the name of the

192
advanced/Scripts/blacklist.sh Normal file → Executable file
View File

@@ -1,60 +1,97 @@
#!/usr/bin/env bash
# (c) 2015 by Jacob Salmela
# This file is part of Pi-hole.
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# Blacklists domains
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#rootcheck
if [[ $EUID -eq 0 ]];then
echo "::: You are root."
else
echo "::: sudo will be used."
# Check if it is actually installed
# If it isn't, exit because the install cannot complete
if [[ $(dpkg-query -s sudo) ]];then
export SUDO="sudo"
else
echo "::: Please install sudo or run this script as root."
exit 1
fi
fi
function helpFunc()
{
echo "::: Immediately blacklists one or more domains in the hosts file"
echo ":::"
echo ":::"
echo "::: Usage: pihole -b domain1 [domain2 ...]"
echo "::: Options:"
echo "::: -d, --delmode Remove domains from the blacklist"
echo "::: -nr, --noreload Update blacklist without refreshing dnsmasq"
echo "::: -f, --force Force updating of the hosts files, even if there are no changes"
echo "::: -q, --quiet output is less verbose"
echo "::: -h, --help Show this help dialog"
echo "::: -l, --list Display your blacklisted domains"
exit 1
}
if [[ $# = 0 ]]; then
echo "Immediately blacklists one or more domains in the hosts file"
echo " "
echo "Usage: blacklist.sh domain1 [domain2 ...]"
echo " "
echo "Options:"
echo " -d, --delmode Remove domains from the blacklist"
echo " -nr, --noreload Update blacklist without refreshing dnsmasq"
echo " -f, --force Force updating of the hosts files, even if there are no changes"
echo " -q, --quiet output is less verbose"
exit 1
helpFunc
fi
#globals
blacklist=/etc/pihole/blacklist.txt
adList=/etc/pihole/gravity.list
basename=pihole
piholeDir=/etc/$basename
adList=$piholeDir/gravity.list
blacklist=$piholeDir/blacklist.txt
reload=true
addmode=true
force=false
versbose=true
verbose=true
domList=()
domToRemoveList=()
piholeIPfile=/tmp/piholeIP
piholeIPfile=/etc/pihole/piholeIP
piholeIPv6file=/etc/pihole/.useIPv6
# Otherwise, the IP address can be taken directly from the machine, which will happen when the script is run by the user and not the installation script
IPv4dev=$(ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}')
piholeIPCIDR=$(ip -o -f inet addr show dev $IPv4dev | awk '{print $4}' | awk 'END {print}')
piholeIP=${piholeIPCIDR%/*}
if [[ -f $piholeIPfile ]];then
# If the file exists, it means it was exported from the installation script and we should use that value instead of detecting it in this script
piholeIP=$(cat $piholeIPfile)
#rm $piholeIPfile
else
# Otherwise, the IP address can be taken directly from the machine, which will happen when the script is run by the user and not the installation script
IPv4dev=$(ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}')
piholeIPCIDR=$(ip -o -f inet addr show dev "$IPv4dev" | awk '{print $4}' | awk 'END {print}')
piholeIP=${piholeIPCIDR%/*}
fi
modifyHost=false
# After setting defaults, check if there's local overrides
if [[ -r $piholeDir/pihole.conf ]];then
echo "::: Local calibration requested..."
. $piholeDir/pihole.conf
fi
if [[ -f $piholeIPv6file ]];then
# If the file exists, then the user previously chose to use IPv6 in the automated installer
piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }')
fi
function HandleOther(){
function HandleOther(){
#check validity of domain
validDomain=$(echo $1 | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/')
validDomain=$(echo "$1" | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/')
if [ -z "$validDomain" ]; then
echo $1 is not a valid argument or domain name
else
echo "::: $1 is not a valid argument or domain name"
else
domList=("${domList[@]}" $validDomain)
fi
}
@@ -63,13 +100,12 @@ function PopBlacklistFile(){
#check blacklist file exists, and if not, create it
if [[ ! -f $blacklist ]];then
touch $blacklist
fi
for dom in "${domList[@]}"
do
if $addmode; then
AddDomain $dom
fi
for dom in "${domList[@]}"; do
if "$addmode"; then
AddDomain "$dom"
else
RemoveDomain $dom
RemoveDomain "$dom"
fi
done
}
@@ -80,69 +116,66 @@ function AddDomain(){
grep -Ex -q "$1" $blacklist || bool=true
if $bool; then
#domain not found in the blacklist file, add it!
if $versbose; then
if $verbose; then
echo -n "::: Adding $1 to blacklist file..."
fi
echo $1 >> $blacklist
echo "$1" >> $blacklist
modifyHost=true
echo " done!"
else
if $versbose; then
echo "::: $1 already exists in blacklist.txt! No need to add"
if $verbose; then
echo "::: $1 already exists in $blacklist! No need to add"
fi
fi
}
function RemoveDomain(){
bool=false
grep -Ex -q "$1" $blacklist || bool=true
if $bool; then
#Domain is not in the blacklist file, no need to Remove
if $versbose; then
if $verbose; then
echo "::: $1 is NOT blacklisted! No need to remove"
fi
else
#Domain is in the blacklist file, add to a temporary array
if $versbose; then
if $verbose; then
echo "::: Un-blacklisting $dom..."
fi
domToRemoveList=("${domToRemoveList[@]}" $1)
modifyHost=true
fi
domToRemoveList=("${domToRemoveList[@]}" $1)
modifyHost=true
fi
}
function ModifyHostFile(){
function ModifyHostFile(){
if $addmode; then
#add domains to the hosts file
if [[ -r $blacklist ]];then
numberOf=$(cat $blacklist | sed '/^\s*$/d' | wc -l)
plural=; [[ "$numberOf" != "1" ]] && plural=s
echo ":::"
echo -n "::: Modifying HOSTS file to blacklist $numberOf domain${plural}..."
if [[ -n $piholeIPv6 ]];then
cat $blacklist | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList
else
cat $blacklist | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList
fi
echo -n "::: Modifying HOSTS file to blacklist $numberOf domain${plural}..."
if [[ -n $piholeIPv6 ]];then
cat $blacklist | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList
else
cat $blacklist | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList
fi
fi
else
echo ":::"
for dom in "${domToRemoveList[@]}"
do
#we need to remove the domains from the blacklist file and the host file
echo "::: $dom"
echo -n "::: removing from HOSTS file..."
echo $dom | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /[^.]'{}'(?!.)/;' $adList
echo " done!"
echo -n "::: removing from blackist.txt..."
echo $dom | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' $blacklist
echo " done!"
done
fi
for dom in "${domToRemoveList[@]}"
do
#we need to remove the domains from the blacklist file and the host file
echo "::: $dom"
echo -n "::: removing from HOSTS file..."
echo "$dom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /[^.]'{}'(?!.)/;' $adList
echo " done!"
echo -n "::: removing from blackist.txt..."
echo "$dom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' $blacklist
echo " done!"
done
fi
}
function Reload() {
@@ -154,34 +187,47 @@ function Reload() {
if [[ $dnsmasqPid ]]; then
# service already running - reload config
sudo kill -HUP $dnsmasqPid
$SUDO killall -s HUP dnsmasq
else
# service not running, start it up
sudo service dnsmasq start
$SUDO service dnsmasq start
fi
echo " done!"
}
function DisplayBlist() {
verbose=false
echo -e " Displaying Gravity Affected Domains \n"
count=1
while IFS= read -r AD
do
echo "${count}: $AD"
count=$((count+1))
done < "$blacklist"
}
###################################################
for var in "$@"
do
case "$var" in
"-nr"| "--noreload" ) reload=false;;
"-nr"| "--noreload" ) reload=false;;
"-d" | "--delmode" ) addmode=false;;
"-f" | "--force" ) force=true;;
"-q" | "--quiet" ) versbose=false;;
* ) HandleOther $var;;
"-q" | "--quiet" ) verbose=false;;
"-h" | "--help" ) helpFunc;;
"-l" | "--list" ) DisplayBlist;;
* ) HandleOther "$var";;
esac
done
PopBlacklistFile
if $modifyHost || $force; then
if $modifyHost || $force; then
ModifyHostFile
else
if $versbose; then
echo "::: No changes need to be made"
if $verbose; then
echo "::: No changes need to be made"
fi
exit 1
fi

View File

@@ -1,6 +1,9 @@
#!/usr/bin/env bash
# (c) 2015 by Jacob Salmela
# This file is part of Pi-hole.
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# Calculates stats and displays to an LCD
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -48,9 +51,13 @@ function CalcblockedToday(){
function CalcPercentBlockedToday(){
if [ "$queriesToday" != "Err." ] && [ "$blockedToday" != "Err." ]; then
#scale 2 rounds the number down, so we'll do scale 4 and then trim the last 2 zeros
percentBlockedToday=$(echo "scale=4; $blockedToday/$queriesToday*100" | bc)
percentBlockedToday=$(sed 's/.\{2\}$//' <<< "$percentBlockedToday")
if [ "$queriesToday" != 0 ]; then #Fixes divide by zero error :)
#scale 2 rounds the number down, so we'll do scale 4 and then trim the last 2 zeros
percentBlockedToday=$(echo "scale=4; $blockedToday/$queriesToday*100" | bc)
percentBlockedToday=$(sed 's/.\{2\}$//' <<< "$percentBlockedToday")
else
percentBlockedToday=0
fi
fi
}
@@ -66,9 +73,9 @@ function outputJSON(){
CalcQueriesToday
CalcblockedToday
CalcPercentBlockedToday
CalcBlockedDomains
printf '{"domains_being_blocked":"%s","dns_queries_today":"%s","ads_blocked_today":"%s","ads_percentage_today":"%s"}\n' "$blockedDomainsTotal" "$queriesToday" "$blockedToday" "$percentBlockedToday"
}
@@ -77,47 +84,53 @@ function normalChrono(){
do
clear
# Displays a colorful Pi-hole logo
toilet -f small -F gay Pi-hole
echo " ___ _ _ _"
echo "| _ (_)___| |_ ___| |___"
echo "| _/ |___| ' \/ _ \ / -_)"
echo "|_| |_| |_||_\___/_\___|"
echo ""
echo " $(ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -d':' -f2)"
echo ""
uptime | cut -d' ' -f11-
#uptime -p #Doesn't work on all versions of uptime
uptime | awk -F'( |,|:)+' '{if ($7=="min") m=$6; else {if ($7~/^day/) {d=$6;h=$8;m=$9} else {h=$6;m=$7}}} {print d+0,"days,",h+0,"hours,",m+0,"minutes."}'
echo "-------------------------------"
# Uncomment to continually read the log file and display the current domain being blocked
#tail -f /var/log/pihole.log | awk '/\/etc\/pihole\/gravity.list/ {if ($7 != "address" && $7 != "name" && $7 != "/etc/pihole/gravity.list") print $7; else;}'
#uncomment next 4 lines to use original query count calculation
#today=$(date "+%b %e")
#todaysQueryCount=$(cat /var/log/pihole.log | grep "$today" | awk '/query/ {print $7}' | wc -l)
#todaysQueryCountV4=$(cat /var/log/pihole.log | grep "$today" | awk '/query/ && /\[A\]/ {print $7}' | wc -l)
#todaysQueryCountV6=$(cat /var/log/pihole.log | grep "$today" | awk '/query/ && /\[AAAA\]/ {print $7}' | wc -l)
CalcQueriesToday
CalcblockedToday
CalcPercentBlockedToday
CalcBlockedDomains
echo "Blocking: $blockedDomainsTotal"
#below commented line does not add up to todaysQueryCount
#echo "Queries: $todaysQueryCountV4 / $todaysQueryCountV6"
echo "Queries: $queriesToday" #same total calculation as dashboard
echo "Pi-holed: $blockedToday ($percentBlockedToday%)"
sleep 5
done
}
function displayHelp(){
echo "Displays stats about your piHole!"
echo " "
echo "Usage: chronometer.sh [optional:-j]"
echo "Note: If no option is passed, then stats are displayed on screen, updated every 5 seconds"
echo " "
echo "Options:"
echo " -j, --json output stats as JSON formatted string"
echo " -h, --help display this help text"
echo "::: Displays stats about your piHole!"
echo ":::"
echo "::: Usage: sudo pihole -c [optional:-j]"
echo "::: Note: If no option is passed, then stats are displayed on screen, updated every 5 seconds"
echo ":::"
echo "::: Options:"
echo "::: -j, --json output stats as JSON formatted string"
echo "::: -h, --help display this help text"
exit 1
}
@@ -129,7 +142,7 @@ for var in "$@"
do
case "$var" in
"-j" | "--json" ) outputJSON;;
"-h" | "--help" ) displayHelp;;
"-h" | "--help" ) displayHelp;;
* ) exit 1;;
esac
done

339
advanced/Scripts/piholeDebug.sh Executable file
View File

@@ -0,0 +1,339 @@
#!/usr/bin/env bash
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# Generates pihole_debug.log in /var/log/ to be used for troubleshooting.
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
# Nate Brandeburg
# nate@ubiquisoft.com
# 3/24/2016
######## GLOBAL VARS ########
DEBUG_LOG="/var/log/pihole_debug.log"
DNSMASQFILE="/etc/dnsmasq.conf"
PIHOLECONFFILE="/etc/dnsmasq.d/01-pihole.conf"
LIGHTTPDFILE="/etc/lighttpd/lighttpd.conf"
LIGHTTPDERRFILE="/var/log/lighttpd/error.log"
GRAVITYFILE="/etc/pihole/gravity.list"
HOSTSFILE="/etc/hosts"
WHITELISTFILE="/etc/pihole/whitelist.txt"
BLACKLISTFILE="/etc/pihole/blacklist.txt"
ADLISTSFILE="/etc/pihole/adlists.list"
PIHOLELOG="/var/log/pihole.log"
WHITELISTMATCHES="/tmp/whitelistmatches.list"
######## FIRST CHECK ########
# Must be root to debug
if [[ $EUID -eq 0 ]]; then
echo "::: You are root... Beginning debug!"
else
echo "::: Sudo will be used for debugging."
# Check if sudo is actually installed
if [[ $(dpkg-query -s sudo) ]]; then
export SUDO="sudo"
else
echo "::: Please install sudo or run this as root."
exit 1
fi
fi
# Ensure the file exists, create if not, clear if exists.
if [ ! -f "$DEBUG_LOG" ]; then
$SUDO touch $DEBUG_LOG
$SUDO chmod 644 $DEBUG_LOG
$SUDO chown "$USER":root $DEBUG_LOG
else
truncate -s 0 $DEBUG_LOG
fi
### Private functions exist here ###
function versionCheck {
echo "#######################################" >> $DEBUG_LOG
echo "########## Versions Section ###########" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
TMP=$(cd /etc/.pihole/ && git describe --tags --abbrev=0)
echo "Pi-hole Version: $TMP" >> $DEBUG_LOG
TMP=$(cd /var/www/html/admin && git describe --tags --abbrev=0)
echo "WebUI Version: $TMP" >> $DEBUG_LOG
echo >> $DEBUG_LOG
}
function compareWhitelist {
if [ ! -f "$WHITELISTMATCHES" ]; then
$SUDO touch $WHITELISTMATCHES
$SUDO chmod 644 $WHITELISTMATCHES
$SUDO chown "$USER":root $WHITELISTMATCHES
else
truncate -s 0 $WHITELISTMATCHES
fi
echo "#######################################" >> $DEBUG_LOG
echo "######## Whitelist Comparison #########" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
while read -r line; do
TMP=$(grep -w ".* $line$" "$GRAVITYFILE")
if [ ! -z "$TMP" ]; then
echo "$TMP" >> $DEBUG_LOG
echo "$TMP" >> $WHITELISTMATCHES
fi
done < "$WHITELISTFILE"
echo >> $DEBUG_LOG
}
function compareBlacklist {
echo "#######################################" >> $DEBUG_LOG
echo "######## Blacklist Comparison #########" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
while read -r line; do
if [ ! -z "$line" ]; then
grep -w ".* $line$" "$GRAVITYFILE" >> $DEBUG_LOG
fi
done < "$BLACKLISTFILE"
echo >> $DEBUG_LOG
}
function testNslookup {
TESTURL="doubleclick.com"
echo "#######################################" >> $DEBUG_LOG
echo "############ NSLookup Test ############" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
# Find a blocked url that has not been whitelisted.
if [ -s "$WHITELISTMATCHES" ]; then
while read -r line; do
CUTURL=${line#*" "}
if [ "$CUTURL" != "Pi-Hole.IsWorking.OK" ]; then
while read -r line2; do
CUTURL2=${line2#*" "}
if [ "$CUTURL" != "$CUTURL2" ]; then
TESTURL="$CUTURL"
break 2
fi
done < "$WHITELISTMATCHES"
fi
done < "$GRAVITYFILE"
fi
echo "NSLOOKUP of $TESTURL from PiHole:" >> $DEBUG_LOG
nslookup "$TESTURL" >> $DEBUG_LOG
echo >> $DEBUG_LOG
echo "NSLOOKUP of $TESTURL from 8.8.8.8:" >> $DEBUG_LOG
nslookup "$TESTURL" 8.8.8.8 >> $DEBUG_LOG
echo >> $DEBUG_LOG
}
function checkProcesses {
echo "#######################################" >> $DEBUG_LOG
echo "########### Processes Check ###########" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
echo ":::"
echo "::: Logging status of lighttpd and dnsmasq..."
PROCESSES=( lighttpd dnsmasq )
for i in "${PROCESSES[@]}"
do
echo "" >> $DEBUG_LOG
echo -n "$i" >> "$DEBUG_LOG"
echo " processes status:" >> $DEBUG_LOG
$SUDO systemctl -l status "$i" >> "$DEBUG_LOG"
done
}
function debugLighttpd {
echo "::: Writing lighttpd to debug log..."
echo "#######################################" >> $DEBUG_LOG
echo "############ lighttpd.conf ############" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
if [ -e "$LIGHTTPDFILE" ]
then
while read -r line; do
if [ ! -z "$line" ]; then
[[ "$line" =~ ^#.*$ ]] && continue
echo "$line" >> $DEBUG_LOG
fi
done < "$LIGHTTPDFILE"
echo >> $DEBUG_LOG
else
echo "No lighttpd.conf file found!" >> $DEBUG_LOG
printf ":::\tNo lighttpd.conf file found\n"
fi
if [ -e "$LIGHTTPDERRFILE" ]
then
echo "#######################################" >> $DEBUG_LOG
echo "######### lighttpd error.log ##########" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
cat "$LIGHTTPDERRFILE" >> $DEBUG_LOG
else
echo "No lighttpd error.log file found!" >> $DEBUG_LOG
printf ":::\tNo lighttpd error.log file found\n"
fi
echo >> $DEBUG_LOG
}
### END FUNCTIONS ###
### Check Pi internet connections ###
# Log the IP addresses of this Pi
IPADDR=$($SUDO ifconfig | perl -nle 's/dr:(\S+)/print $1/e')
echo "::: Writing local IPs to debug log"
echo "IP Addresses of this Pi:" >> $DEBUG_LOG
echo "$IPADDR" >> $DEBUG_LOG
echo >> $DEBUG_LOG
# Check if we can connect to the local gateway
GATEWAY_CHECK=$(ping -q -w 1 -c 1 "$(ip r | grep default | cut -d ' ' -f 3)" > /dev/null && echo ok || echo error)
echo "Gateway check:" >> $DEBUG_LOG
echo "$GATEWAY_CHECK" >> $DEBUG_LOG
echo >> $DEBUG_LOG
versionCheck
compareWhitelist
compareBlacklist
testNslookup
checkProcesses
debugLighttpd
echo "::: Writing dnsmasq.conf to debug log..."
echo "#######################################" >> $DEBUG_LOG
echo "############### Dnsmasq ###############" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
if [ -e "$DNSMASQFILE" ]
then
#cat $DNSMASQFILE >> $DEBUG_LOG
while read -r line; do
if [ ! -z "$line" ]; then
[[ "$line" =~ ^#.*$ ]] && continue
echo "$line" >> $DEBUG_LOG
fi
done < "$DNSMASQFILE"
echo >> $DEBUG_LOG
else
echo "No dnsmasq.conf file found!" >> $DEBUG_LOG
printf ":::\tNo dnsmasq.conf file found!\n"
fi
echo "::: Writing 01-pihole.conf to debug log..."
echo "#######################################" >> $DEBUG_LOG
echo "########### 01-pihole.conf ############" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
if [ -e "$PIHOLECONFFILE" ]
then
while read -r line; do
if [ ! -z "$line" ]; then
[[ "$line" =~ ^#.*$ ]] && continue
echo "$line" >> $DEBUG_LOG
fi
done < "$PIHOLECONFFILE"
echo >> $DEBUG_LOG
else
echo "No 01-pihole.conf file found!" >> $DEBUG_LOG
printf ":::\tNo 01-pihole.conf file found\n"
fi
echo "::: Writing size of gravity.list to debug log..."
echo "#######################################" >> $DEBUG_LOG
echo "############ gravity.list #############" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
if [ -e "$GRAVITYFILE" ]
then
wc -l "$GRAVITYFILE" >> $DEBUG_LOG
echo >> $DEBUG_LOG
else
echo "No gravity.list file found!" >> $DEBUG_LOG
printf ":::\tNo gravity.list file found\n"
fi
# Write the hostname output to compare against entries in /etc/hosts, which is logged next
echo "Hostname of this pihole is: " >> $DEBUG_LOG
hostname >> $DEBUG_LOG
echo "::: Writing hosts file to debug log..."
echo "#######################################" >> $DEBUG_LOG
echo "################ Hosts ################" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
if [ -e "$HOSTSFILE" ]
then
cat "$HOSTSFILE" >> $DEBUG_LOG
echo >> $DEBUG_LOG
else
echo "No hosts file found!" >> $DEBUG_LOG
printf ":::\tNo hosts file found!\n"
fi
### PiHole application specific logging ###
echo "::: Writing whitelist to debug log..."
echo "#######################################" >> $DEBUG_LOG
echo "############## Whitelist ##############" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
if [ -e "$WHITELISTFILE" ]
then
cat "$WHITELISTFILE" >> $DEBUG_LOG
echo >> $DEBUG_LOG
else
echo "No whitelist.txt file found!" >> $DEBUG_LOG
printf ":::\tNo whitelist.txt file found!\n"
fi
echo "::: Writing blacklist to debug log..."
echo "#######################################" >> $DEBUG_LOG
echo "############## Blacklist ##############" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
if [ -e "$BLACKLISTFILE" ]
then
cat "$BLACKLISTFILE" >> $DEBUG_LOG
echo >> $DEBUG_LOG
else
echo "No blacklist.txt file found!" >> $DEBUG_LOG
printf ":::\tNo blacklist.txt file found!\n"
fi
echo "::: Writing adlists.list to debug log..."
echo "#######################################" >> $DEBUG_LOG
echo "############ adlists.list #############" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
if [ -e "$ADLISTSFILE" ]
then
cat "$ADLISTSFILE" >> $DEBUG_LOG
echo >> $DEBUG_LOG
else
echo "No adlists.list file found... using adlists.default!" >> $DEBUG_LOG
printf ":::\tNo adlists.list file found... using adlists.default!\n"
fi
# Continuously append the pihole.log file to the pihole_debug.log file
function dumpPiHoleLog {
trap '{ echo -e "\n::: Finishing debug write from interrupt... Quitting!" ; exit 1; }' INT
echo -e "::: Writing current pihole traffic to debug log...\n:::\tTry loading any/all sites that you are having trouble with now... \n:::\t(Press ctrl+C to finish)"
echo "#######################################" >> $DEBUG_LOG
echo "############# pihole.log ##############" >> $DEBUG_LOG
echo "#######################################" >> $DEBUG_LOG
if [ -e "$PIHOLELOG" ]
then
while true; do
tail -f "$PIHOLELOG" >> $DEBUG_LOG
echo >> $DEBUG_LOG
done
else
echo "No pihole.log file found!" >> $DEBUG_LOG
printf ":::\tNo pihole.log file found!\n"
fi
}
# Anything to be done after capturing of pihole.log terminates
function finalWork {
echo "::: Finshed debugging!"
echo "::: Debug log can be found at : /var/log/pihole_debug.log"
}
trap finalWork EXIT
### Method calls for additional logging ###
dumpPiHoleLog

View File

@@ -1,11 +1,15 @@
#!/usr/bin/env bash
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# Flushes /var/log/pihole.log
# (c) 2015 by Jacob Salmela
# This file is part of Pi-hole.
#
#Pi-hole is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation, either version 2 of the License, or
#(at your option) any later version.
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
echo -n "::: Flushing /var/log/pihole.log ..."
truncate -s 0 /var/log/pihole.log
echo "... done!"

89
advanced/Scripts/setupLCD.sh Executable file
View File

@@ -0,0 +1,89 @@
#!/usr/bin/env bash
# Pi-hole: A black hole for Internet advertisements
# (c) 2015 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# Automatically configures the Pi to use the 2.8 LCD screen to display stats on it (also works over ssh)
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
############ FUNCTIONS ###########
# Run this script as root or under sudo
echo ":::"
if [[ $EUID -eq 0 ]];then
echo "::: You are root."
else
echo "::: sudo will be used."
# Check if it is actually installed
# If it isn't, exit because the install cannot complete
if [[ $(dpkg-query -s sudo) ]];then
export SUDO="sudo"
else
echo "::: Please install sudo or run this script as root."
exit 1
fi
fi
# Borrowed from adafruit-pitft-helper < borrowed from raspi-config
# https://github.com/adafruit/Adafruit-PiTFT-Helper/blob/master/adafruit-pitft-helper#L324-L334
getInitSys() {
if command -v systemctl > /dev/null && systemctl | grep -q '\-\.mount'; then
SYSTEMD=1
elif [ -f /etc/init.d/cron ] && [ ! -h /etc/init.d/cron ]; then
SYSTEMD=0
else
echo "Unrecognised init system"
return 1
fi
}
# Borrowed from adafruit-pitft-helper:
# https://github.com/adafruit/Adafruit-PiTFT-Helper/blob/master/adafruit-pitft-helper#L274-L285
autoLoginPiToConsole() {
if [ -e /etc/init.d/lightdm ]; then
if [ $SYSTEMD -eq 1 ]; then
$SUDO systemctl set-default multi-user.target
$SUDO ln -fs /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
else
$SUDO update-rc.d lightdm disable 2
$SUDO sed /etc/inittab -i -e "s/1:2345:respawn:\/sbin\/getty --noclear 38400 tty1/1:2345:respawn:\/bin\/login -f pi tty1 <\/dev\/tty1 >\/dev\/tty1 2>&1/"
fi
fi
}
######### SCRIPT ###########
# Set pi to log in automatically
getInitSys
autoLoginPiToConsole
# Set chronomter to run automatically when pi logs in
echo /usr/local/bin/chronometer.sh >> /home/pi/.bashrc
# OR
#$SUDO echo /usr/local/bin/chronometer.sh >> /etc/profile
# Set up the LCD screen based on Adafruits instuctions:
# https://learn.adafruit.com/adafruit-pitft-28-inch-resistive-touchscreen-display-raspberry-pi/easy-install
curl -SLs https://apt.adafruit.com/add-pin | $SUDO bash
$SUDO apt-get -y install raspberrypi-bootloader
$SUDO apt-get -y install adafruit-pitft-helper
$SUDO adafruit-pitft-helper -t 28r
# Download the cmdline.txt file that prevents the screen from going blank after a period of time
$SUDO mv /boot/cmdline.txt /boot/cmdline.orig
$SUDO curl -o /boot/cmdline.txt https://raw.githubusercontent.com/pi-hole/pi-hole/master/advanced/cmdline.txt
# Back up the original file and download the new one
$SUDO mv /etc/default/console-setup /etc/default/console-setup.orig
$SUDO curl -o /etc/default/console-setup https://raw.githubusercontent.com/pi-hole/pi-hole/master/advanced/console-setup
# Instantly apply the font change to the LCD screen
$SUDO setupcon
$SUDO reboot
# Start showing the stats on the screen by running the command on another tty:
# http://unix.stackexchange.com/questions/170063/start-a-process-on-a-different-tty
#setsid sh -c 'exec /usr/local/bin/chronometer.sh <> /dev/tty1 >&0 2>&1'

21
advanced/Scripts/updateDashboard.sh Normal file → Executable file
View File

@@ -1,15 +1,14 @@
#!/usr/bin/env bash
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# Updates the Pi-hole web interface
#
# this script will update the pihole web interface files.
#
# if this is the first time running this script after an
# existing installation, the existing web interface files
# will be removed and replaced with the latest master
# branch from github. subsequent executions of this script
# will pull the latest version of the web interface.
#
# @TODO: add git as requirement to basic-install.sh
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
WEB_INTERFACE_GIT_URL="https://github.com/pi-hole/AdminLTE.git"
WEB_INTERFACE_DIR="/var/www/html/admin"
@@ -64,7 +63,7 @@ make_repo() {
update_repo() {
# pull the latest commits
cd "$WEB_INTERFACE_DIR"
git pull
git pull
}
main

View File

@@ -1,59 +1,96 @@
#!/usr/bin/env bash
# (c) 2015 by Jacob Salmela
# This file is part of Pi-hole.
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# Whitelists domains
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#rootcheck
if [[ $EUID -eq 0 ]];then
echo "::: You are root."
else
echo "::: sudo will be used."
# Check if it is actually installed
# If it isn't, exit because the install cannot complete
if [[ $(dpkg-query -s sudo) ]];then
export SUDO="sudo"
else
echo "::: Please install sudo or run this script as root."
exit 1
fi
fi
function helpFunc()
{
echo "::: Immediately whitelists one or more domains in the hosts file"
echo ":::"
echo "::: Usage: pihole -w domain1 [domain2 ...]"
echo ":::"
echo "::: Options:"
echo "::: -d, --delmode Remove domains from the whitelist"
echo "::: -nr, --noreload Update Whitelist without refreshing dnsmasq"
echo "::: -f, --force Force updating of the hosts files, even if there are no changes"
echo "::: -q, --quiet output is less verbose"
echo "::: -h, --help Show this help dialog"
echo "::: -l, --list Display your whitelisted domains"
exit 1
}
if [[ $# = 0 ]]; then
echo "Immediately whitelists one or more domains in the hosts file"
echo " "
echo "Usage: whitelist.sh domain1 [domain2 ...]"
echo " "
echo "Options:"
echo " -d, --delmode Remove domains from the whitelist"
echo " -nr, --noreload Update Whitelist without refreshing dnsmasq"
echo " -f, --force Force updating of the hosts files, even if there are no changes"
echo " -q, --quiet output is less verbose"
exit 1
helpFunc
fi
#globals
whitelist=/etc/pihole/whitelist.txt
adList=/etc/pihole/gravity.list
basename=pihole
piholeDir=/etc/$basename
adList=$piholeDir/gravity.list
whitelist=$piholeDir/whitelist.txt
reload=true
addmode=true
force=false
versbose=true
verbose=true
domList=()
domToRemoveList=()
piholeIPfile=/tmp/piholeIP
piholeIPfile=/etc/pihole/piholeIP
piholeIPv6file=/etc/pihole/.useIPv6
# Otherwise, the IP address can be taken directly from the machine, which will happen when the script is run by the user and not the installation script
IPv4dev=$(ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}')
piholeIPCIDR=$(ip -o -f inet addr show dev $IPv4dev | awk '{print $4}' | awk 'END {print}')
piholeIP=${piholeIPCIDR%/*}
if [[ -f $piholeIPfile ]];then
# If the file exists, it means it was exported from the installation script and we should use that value instead of detecting it in this script
piholeIP=$(cat $piholeIPfile)
#rm $piholeIPfile
else
# Otherwise, the IP address can be taken directly from the machine, which will happen when the script is run by the user and not the installation script
IPv4dev=$(ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}')
piholeIPCIDR=$(ip -o -f inet addr show dev "$IPv4dev" | awk '{print $4}' | awk 'END {print}')
piholeIP=${piholeIPCIDR%/*}
fi
modifyHost=false
# After setting defaults, check if there's local overrides
if [[ -r $piholeDir/pihole.conf ]];then
echo "::: Local calibration requested..."
. $piholeDir/pihole.conf
fi
if [[ -f $piholeIPv6file ]];then
# If the file exists, then the user previously chose to use IPv6 in the automated installer
piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }')
fi
function HandleOther(){
function HandleOther(){
#check validity of domain
validDomain=$(echo $1 | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/')
validDomain=$(echo "$1" | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/')
if [ -z "$validDomain" ]; then
echo "::: $1 is not a valid argument or domain name"
else
else
domList=("${domList[@]}" $validDomain)
fi
}
@@ -62,13 +99,13 @@ function PopWhitelistFile(){
#check whitelist file exists, and if not, create it
if [[ ! -f $whitelist ]];then
touch $whitelist
fi
fi
for dom in "${domList[@]}"
do
do
if $addmode; then
AddDomain $dom
AddDomain "$dom"
else
RemoveDomain $dom
RemoveDomain "$dom"
fi
done
}
@@ -76,45 +113,45 @@ function PopWhitelistFile(){
function AddDomain(){
#| sed 's/\./\\./g'
bool=false
grep -Ex -q "$1" $whitelist || bool=true
if $bool; then
#domain not found in the whitelist file, add it!
if $versbose; then
echo -n "::: Adding $1 to whitelist.txt..."
if $verbose; then
echo -n "::: Adding $1 to $whitelist..."
fi
echo $1 >> $whitelist
echo "$1" >> $whitelist
modifyHost=true
if $versbose; then
if $verbose; then
echo " done!"
fi
else
if $versbose; then
echo "::: $1 already exists in whitelist.txt, no need to add!"
if $verbose; then
echo "::: $1 already exists in $whitelist, no need to add!"
fi
fi
}
function RemoveDomain(){
bool=false
grep -Ex -q "$1" $whitelist || bool=true
if $bool; then
#Domain is not in the whitelist file, no need to Remove
if $versbose; then
if $verbose; then
echo "::: $1 is NOT whitelisted! No need to remove"
fi
else
#Domain is in the whitelist file, add to a temporary array and remove from whitelist file
#if $versbose; then
#if $verbose; then
#echo "::: Un-whitelisting $dom..."
#fi
domToRemoveList=("${domToRemoveList[@]}" $1)
modifyHost=true
fi
modifyHost=true
fi
}
function ModifyHostFile(){
function ModifyHostFile(){
if $addmode; then
#remove domains in from hosts file
if [[ -r $whitelist ]];then
@@ -123,36 +160,36 @@ function ModifyHostFile(){
plural=; [[ "$numberOf" != "1" ]] && plural=s
echo ":::"
echo -n "::: Modifying HOSTS file to whitelist $numberOf domain${plural}..."
awk -F':' '{print $1}' $whitelist | while read line; do echo "$piholeIP $line"; done > /etc/pihole/whitelist.tmp
awk -F':' '{print $1}' $whitelist | while read line; do echo "$piholeIPv6 $line"; done >> /etc/pihole/whitelist.tmp
awk -F':' '{print $1}' $whitelist | while read -r line; do echo "$piholeIP $line"; done > /etc/pihole/whitelist.tmp
awk -F':' '{print $1}' $whitelist | while read -r line; do echo "$piholeIPv6 $line"; done >> /etc/pihole/whitelist.tmp
echo "l" >> /etc/pihole/whitelist.tmp
grep -F -x -v -f /etc/pihole/whitelist.tmp /etc/pihole/gravity.list > /etc/pihole/gravity.tmp
rm /etc/pihole/gravity.list
mv /etc/pihole/gravity.tmp /etc/pihole/gravity.list
rm /etc/pihole/whitelist.tmp
grep -F -x -v -f $piholeDir/whitelist.tmp $adList > $piholeDir/gravity.tmp
rm $adList
mv $piholeDir/gravity.tmp $adList
rm $piholeDir/whitelist.tmp
echo " done!"
fi
else
#we need to add the removed domains to the hosts file
echo ":::"
echo "::: Modifying HOSTS file to un-whitelist domains..."
for rdom in "${domToRemoveList[@]}"
do
do
if [[ -n $piholeIPv6 ]];then
echo -n "::: Un-whitelisting $rdom on IPv4 and IPv6..."
echo $rdom | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList
echo "$rdom" | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList
echo " done!"
else
echo -n "::: Un-whitelisting $rdom on IPv4"
echo $rdom | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList
echo "$rdom" | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList
echo " done!"
fi
echo -n "::: Removing $rdom from whitelist.txt..."
echo $rdom| sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' $whitelist
echo -n "::: Removing $rdom from $whitelist..."
echo "$rdom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' $whitelist
echo " done!"
done
fi
fi
}
function Reload() {
@@ -163,24 +200,37 @@ function Reload() {
if [[ $dnsmasqPid ]]; then
# service already running - reload config
sudo kill -HUP $dnsmasqPid
$SUDO killall -s HUP dnsmasq
else
# service not running, start it up
sudo service dnsmasq start
$SUDO service dnsmasq start
fi
echo " done!"
}
function DisplayWlist() {
verbose=false
echo -e " Displaying Gravity Resistant Domains \n"
count=1
while IFS= read -r RD
do
echo "${count}: $RD"
count=$((count+1))
done < "$whitelist"
}
###################################################
for var in "$@"
do
case "$var" in
"-nr"| "--noreload" ) reload=false;;
"-nr"| "--noreload" ) reload=false;;
"-d" | "--delmode" ) addmode=false;;
"-f" | "--force" ) force=true;;
"-q" | "--quiet" ) versbose=false;;
* ) HandleOther $var;;
"-q" | "--quiet" ) verbose=false;;
"-h" | "--help" ) helpFunc;;
"-l" | "--list" ) DisplayWlist;;
* ) HandleOther "$var";;
esac
done
@@ -189,11 +239,11 @@ PopWhitelistFile
if $modifyHost || $force; then
ModifyHostFile
else
if $versbose; then
echo ":::"
echo "::: No changes need to be made"
exit 1
if $verbose; then
echo ":::"
echo "::: No changes need to be made"
fi
exit 1
fi
if $reload; then

View File

@@ -0,0 +1,12 @@
_pihole()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="whitelist blacklist debug flush updateDashboard updateGravity setupLCD chronometer uninstall help"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
}
complete -F _pihole pihole

1
advanced/cmdline.txt Normal file
View File

@@ -0,0 +1 @@
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait fbcon=map:10 fbcon=font:VGA8x8 consoleblank=0

17
advanced/console-setup Normal file
View File

@@ -0,0 +1,17 @@
# CONFIGURATION FILE FOR SETUPCON
# Consult the console-setup(5) manual page.
ACTIVE_CONSOLES="/dev/tty[1-6]"
CHARMAP="UTF-8"
# For best results with the Adafruit 2.8 LCD and Pi-hole's chronometer
CODESET="guess"
FONTFACE="Terminus"
FONTSIZE="10x20"
VIDEOMODE=
# The following is an example how to use a braille font
# FONT='lat9w-08.psf.gz brl-8x8.psf'

View File

@@ -0,0 +1,648 @@
# Configuration file for dnsmasq.
#
# Format is one option per line, legal options are the same
# as the long options legal on the command line. See
# "/usr/sbin/dnsmasq --help" or "man 8 dnsmasq" for details.
# Listen on this specific port instead of the standard DNS port
# (53). Setting this to zero completely disables DNS function,
# leaving only DHCP and/or TFTP.
#port=5353
# The following two options make you a better netizen, since they
# tell dnsmasq to filter out queries which the public DNS cannot
# answer, and which load the servers (especially the root servers)
# unnecessarily. If you have a dial-on-demand link they also stop
# these requests from bringing up the link unnecessarily.
# Never forward plain names (without a dot or domain part)
#domain-needed
# Never forward addresses in the non-routed address spaces.
#bogus-priv
# Uncomment these to enable DNSSEC validation and caching:
# (Requires dnsmasq to be built with DNSSEC option.)
#conf-file=%%PREFIX%%/share/dnsmasq/trust-anchors.conf
#dnssec
# Replies which are not DNSSEC signed may be legitimate, because the domain
# is unsigned, or may be forgeries. Setting this option tells dnsmasq to
# check that an unsigned reply is OK, by finding a secure proof that a DS
# record somewhere between the root and the domain does not exist.
# The cost of setting this is that even queries in unsigned domains will need
# one or more extra DNS queries to verify.
#dnssec-check-unsigned
# Uncomment this to filter useless windows-originated DNS requests
# which can trigger dial-on-demand links needlessly.
# Note that (amongst other things) this blocks all SRV requests,
# so don't use it if you use eg Kerberos, SIP, XMMP or Google-talk.
# This option only affects forwarding, SRV records originating for
# dnsmasq (via srv-host= lines) are not suppressed by it.
#filterwin2k
# Change this line if you want dns to get its upstream servers from
# somewhere other that /etc/resolv.conf
#resolv-file=
# By default, dnsmasq will send queries to any of the upstream
# servers it knows about and tries to favour servers to are known
# to be up. Uncommenting this forces dnsmasq to try each query
# with each server strictly in the order they appear in
# /etc/resolv.conf
#strict-order
# If you don't want dnsmasq to read /etc/resolv.conf or any other
# file, getting its servers from this file instead (see below), then
# uncomment this.
#no-resolv
# If you don't want dnsmasq to poll /etc/resolv.conf or other resolv
# files for changes and re-read them then uncomment this.
#no-poll
# Add other name servers here, with domain specs if they are for
# non-public domains.
#server=/localnet/192.168.0.1
# Example of routing PTR queries to nameservers: this will send all
# address->name queries for 192.168.3/24 to nameserver 10.1.2.3
#server=/3.168.192.in-addr.arpa/10.1.2.3
# Add local-only domains here, queries in these domains are answered
# from /etc/hosts or DHCP only.
#local=/localnet/
# Add domains which you want to force to an IP address here.
# The example below send any host in double-click.net to a local
# web-server.
#address=/double-click.net/127.0.0.1
# --address (and --server) work with IPv6 addresses too.
#address=/www.thekelleys.org.uk/fe80::20d:60ff:fe36:f83
# Add the IPs of all queries to yahoo.com, google.com, and their
# subdomains to the vpn and search ipsets:
#ipset=/yahoo.com/google.com/vpn,search
# You can control how dnsmasq talks to a server: this forces
# queries to 10.1.2.3 to be routed via eth1
# server=10.1.2.3@eth1
# and this sets the source (ie local) address used to talk to
# 10.1.2.3 to 192.168.1.1 port 55 (there must be a interface with that
# IP on the machine, obviously).
# server=10.1.2.3@192.168.1.1#55
# If you want dnsmasq to change uid and gid to something other
# than the default, edit the following lines.
#user=
#group=
# If you want dnsmasq to listen for DHCP and DNS requests only on
# specified interfaces (and the loopback) give the name of the
# interface (eg eth0) here.
# Repeat the line for more than one interface.
#interface=
# Or you can specify which interface _not_ to listen on
#except-interface=
# Or which to listen on by address (remember to include 127.0.0.1 if
# you use this.)
#listen-address=
# If you want dnsmasq to provide only DNS service on an interface,
# configure it as shown above, and then use the following line to
# disable DHCP and TFTP on it.
#no-dhcp-interface=
# On systems which support it, dnsmasq binds the wildcard address,
# even when it is listening on only some interfaces. It then discards
# requests that it shouldn't reply to. This has the advantage of
# working even when interfaces come and go and change address. If you
# want dnsmasq to really bind only the interfaces it is listening on,
# uncomment this option. About the only time you may need this is when
# running another nameserver on the same machine.
#bind-interfaces
# If you don't want dnsmasq to read /etc/hosts, uncomment the
# following line.
#no-hosts
# or if you want it to read another file, as well as /etc/hosts, use
# this.
#addn-hosts=/etc/banner_add_hosts
# Set this (and domain: see below) if you want to have a domain
# automatically added to simple names in a hosts-file.
#expand-hosts
# Set the domain for dnsmasq. this is optional, but if it is set, it
# does the following things.
# 1) Allows DHCP hosts to have fully qualified domain names, as long
# as the domain part matches this setting.
# 2) Sets the "domain" DHCP option thereby potentially setting the
# domain of all systems configured by DHCP
# 3) Provides the domain part for "expand-hosts"
#domain=thekelleys.org.uk
# Set a different domain for a particular subnet
#domain=wireless.thekelleys.org.uk,192.168.2.0/24
# Same idea, but range rather then subnet
#domain=reserved.thekelleys.org.uk,192.68.3.100,192.168.3.200
# Uncomment this to enable the integrated DHCP server, you need
# to supply the range of addresses available for lease and optionally
# a lease time. If you have more than one network, you will need to
# repeat this for each network on which you want to supply DHCP
# service.
#dhcp-range=192.168.0.50,192.168.0.150,12h
# This is an example of a DHCP range where the netmask is given. This
# is needed for networks we reach the dnsmasq DHCP server via a relay
# agent. If you don't know what a DHCP relay agent is, you probably
# don't need to worry about this.
#dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h
# This is an example of a DHCP range which sets a tag, so that
# some DHCP options may be set only for this network.
#dhcp-range=set:red,192.168.0.50,192.168.0.150
# Use this DHCP range only when the tag "green" is set.
#dhcp-range=tag:green,192.168.0.50,192.168.0.150,12h
# Specify a subnet which can't be used for dynamic address allocation,
# is available for hosts with matching --dhcp-host lines. Note that
# dhcp-host declarations will be ignored unless there is a dhcp-range
# of some type for the subnet in question.
# In this case the netmask is implied (it comes from the network
# configuration on the machine running dnsmasq) it is possible to give
# an explicit netmask instead.
#dhcp-range=192.168.0.0,static
# Enable DHCPv6. Note that the prefix-length does not need to be specified
# and defaults to 64 if missing/
#dhcp-range=1234::2, 1234::500, 64, 12h
# Do Router Advertisements, BUT NOT DHCP for this subnet.
#dhcp-range=1234::, ra-only
# Do Router Advertisements, BUT NOT DHCP for this subnet, also try and
# add names to the DNS for the IPv6 address of SLAAC-configured dual-stack
# hosts. Use the DHCPv4 lease to derive the name, network segment and
# MAC address and assume that the host will also have an
# IPv6 address calculated using the SLAAC alogrithm.
#dhcp-range=1234::, ra-names
# Do Router Advertisements, BUT NOT DHCP for this subnet.
# Set the lifetime to 46 hours. (Note: minimum lifetime is 2 hours.)
#dhcp-range=1234::, ra-only, 48h
# Do DHCP and Router Advertisements for this subnet. Set the A bit in the RA
# so that clients can use SLAAC addresses as well as DHCP ones.
#dhcp-range=1234::2, 1234::500, slaac
# Do Router Advertisements and stateless DHCP for this subnet. Clients will
# not get addresses from DHCP, but they will get other configuration information.
# They will use SLAAC for addresses.
#dhcp-range=1234::, ra-stateless
# Do stateless DHCP, SLAAC, and generate DNS names for SLAAC addresses
# from DHCPv4 leases.
#dhcp-range=1234::, ra-stateless, ra-names
# Do router advertisements for all subnets where we're doing DHCPv6
# Unless overriden by ra-stateless, ra-names, et al, the router
# advertisements will have the M and O bits set, so that the clients
# get addresses and configuration from DHCPv6, and the A bit reset, so the
# clients don't use SLAAC addresses.
#enable-ra
# Supply parameters for specified hosts using DHCP. There are lots
# of valid alternatives, so we will give examples of each. Note that
# IP addresses DO NOT have to be in the range given above, they just
# need to be on the same network. The order of the parameters in these
# do not matter, it's permissible to give name, address and MAC in any
# order.
# Always allocate the host with Ethernet address 11:22:33:44:55:66
# The IP address 192.168.0.60
#dhcp-host=11:22:33:44:55:66,192.168.0.60
# Always set the name of the host with hardware address
# 11:22:33:44:55:66 to be "fred"
#dhcp-host=11:22:33:44:55:66,fred
# Always give the host with Ethernet address 11:22:33:44:55:66
# the name fred and IP address 192.168.0.60 and lease time 45 minutes
#dhcp-host=11:22:33:44:55:66,fred,192.168.0.60,45m
# Give a host with Ethernet address 11:22:33:44:55:66 or
# 12:34:56:78:90:12 the IP address 192.168.0.60. Dnsmasq will assume
# that these two Ethernet interfaces will never be in use at the same
# time, and give the IP address to the second, even if it is already
# in use by the first. Useful for laptops with wired and wireless
# addresses.
#dhcp-host=11:22:33:44:55:66,12:34:56:78:90:12,192.168.0.60
# Give the machine which says its name is "bert" IP address
# 192.168.0.70 and an infinite lease
#dhcp-host=bert,192.168.0.70,infinite
# Always give the host with client identifier 01:02:02:04
# the IP address 192.168.0.60
#dhcp-host=id:01:02:02:04,192.168.0.60
# Always give the host with client identifier "marjorie"
# the IP address 192.168.0.60
#dhcp-host=id:marjorie,192.168.0.60
# Enable the address given for "judge" in /etc/hosts
# to be given to a machine presenting the name "judge" when
# it asks for a DHCP lease.
#dhcp-host=judge
# Never offer DHCP service to a machine whose Ethernet
# address is 11:22:33:44:55:66
#dhcp-host=11:22:33:44:55:66,ignore
# Ignore any client-id presented by the machine with Ethernet
# address 11:22:33:44:55:66. This is useful to prevent a machine
# being treated differently when running under different OS's or
# between PXE boot and OS boot.
#dhcp-host=11:22:33:44:55:66,id:*
# Send extra options which are tagged as "red" to
# the machine with Ethernet address 11:22:33:44:55:66
#dhcp-host=11:22:33:44:55:66,set:red
# Send extra options which are tagged as "red" to
# any machine with Ethernet address starting 11:22:33:
#dhcp-host=11:22:33:*:*:*,set:red
# Give a fixed IPv6 address and name to client with
# DUID 00:01:00:01:16:d2:83:fc:92:d4:19:e2:d8:b2
# Note the MAC addresses CANNOT be used to identify DHCPv6 clients.
# Note also the they [] around the IPv6 address are obilgatory.
#dhcp-host=id:00:01:00:01:16:d2:83:fc:92:d4:19:e2:d8:b2, fred, [1234::5]
# Ignore any clients which are not specified in dhcp-host lines
# or /etc/ethers. Equivalent to ISC "deny unknown-clients".
# This relies on the special "known" tag which is set when
# a host is matched.
#dhcp-ignore=tag:!known
# Send extra options which are tagged as "red" to any machine whose
# DHCP vendorclass string includes the substring "Linux"
#dhcp-vendorclass=set:red,Linux
# Send extra options which are tagged as "red" to any machine one
# of whose DHCP userclass strings includes the substring "accounts"
#dhcp-userclass=set:red,accounts
# Send extra options which are tagged as "red" to any machine whose
# MAC address matches the pattern.
#dhcp-mac=set:red,00:60:8C:*:*:*
# If this line is uncommented, dnsmasq will read /etc/ethers and act
# on the ethernet-address/IP pairs found there just as if they had
# been given as --dhcp-host options. Useful if you keep
# MAC-address/host mappings there for other purposes.
#read-ethers
# Send options to hosts which ask for a DHCP lease.
# See RFC 2132 for details of available options.
# Common options can be given to dnsmasq by name:
# run "dnsmasq --help dhcp" to get a list.
# Note that all the common settings, such as netmask and
# broadcast address, DNS server and default route, are given
# sane defaults by dnsmasq. You very likely will not need
# any dhcp-options. If you use Windows clients and Samba, there
# are some options which are recommended, they are detailed at the
# end of this section.
# Override the default route supplied by dnsmasq, which assumes the
# router is the same machine as the one running dnsmasq.
#dhcp-option=3,1.2.3.4
# Do the same thing, but using the option name
#dhcp-option=option:router,1.2.3.4
# Override the default route supplied by dnsmasq and send no default
# route at all. Note that this only works for the options sent by
# default (1, 3, 6, 12, 28) the same line will send a zero-length option
# for all other option numbers.
#dhcp-option=3
# Set the NTP time server addresses to 192.168.0.4 and 10.10.0.5
#dhcp-option=option:ntp-server,192.168.0.4,10.10.0.5
# Send DHCPv6 option. Note [] around IPv6 addresses.
#dhcp-option=option6:dns-server,[1234::77],[1234::88]
# Send DHCPv6 option for namservers as the machine running
# dnsmasq and another.
#dhcp-option=option6:dns-server,[::],[1234::88]
# Ask client to poll for option changes every six hours. (RFC4242)
#dhcp-option=option6:information-refresh-time,6h
# Set the NTP time server address to be the same machine as
# is running dnsmasq
#dhcp-option=42,0.0.0.0
# Set the NIS domain name to "welly"
#dhcp-option=40,welly
# Set the default time-to-live to 50
#dhcp-option=23,50
# Set the "all subnets are local" flag
#dhcp-option=27,1
# Send the etherboot magic flag and then etherboot options (a string).
#dhcp-option=128,e4:45:74:68:00:00
#dhcp-option=129,NIC=eepro100
# Specify an option which will only be sent to the "red" network
# (see dhcp-range for the declaration of the "red" network)
# Note that the tag: part must precede the option: part.
#dhcp-option = tag:red, option:ntp-server, 192.168.1.1
# The following DHCP options set up dnsmasq in the same way as is specified
# for the ISC dhcpcd in
# http://www.samba.org/samba/ftp/docs/textdocs/DHCP-Server-Configuration.txt
# adapted for a typical dnsmasq installation where the host running
# dnsmasq is also the host running samba.
# you may want to uncomment some or all of them if you use
# Windows clients and Samba.
#dhcp-option=19,0 # option ip-forwarding off
#dhcp-option=44,0.0.0.0 # set netbios-over-TCP/IP nameserver(s) aka WINS server(s)
#dhcp-option=45,0.0.0.0 # netbios datagram distribution server
#dhcp-option=46,8 # netbios node type
# Send an empty WPAD option. This may be REQUIRED to get windows 7 to behave.
#dhcp-option=252,"\n"
# Send RFC-3397 DNS domain search DHCP option. WARNING: Your DHCP client
# probably doesn't support this......
#dhcp-option=option:domain-search,eng.apple.com,marketing.apple.com
# Send RFC-3442 classless static routes (note the netmask encoding)
#dhcp-option=121,192.168.1.0/24,1.2.3.4,10.0.0.0/8,5.6.7.8
# Send vendor-class specific options encapsulated in DHCP option 43.
# The meaning of the options is defined by the vendor-class so
# options are sent only when the client supplied vendor class
# matches the class given here. (A substring match is OK, so "MSFT"
# matches "MSFT" and "MSFT 5.0"). This example sets the
# mtftp address to 0.0.0.0 for PXEClients.
#dhcp-option=vendor:PXEClient,1,0.0.0.0
# Send microsoft-specific option to tell windows to release the DHCP lease
# when it shuts down. Note the "i" flag, to tell dnsmasq to send the
# value as a four-byte integer - that's what microsoft wants. See
# http://technet2.microsoft.com/WindowsServer/en/library/a70f1bb7-d2d4-49f0-96d6-4b7414ecfaae1033.mspx?mfr=true
#dhcp-option=vendor:MSFT,2,1i
# Send the Encapsulated-vendor-class ID needed by some configurations of
# Etherboot to allow is to recognise the DHCP server.
#dhcp-option=vendor:Etherboot,60,"Etherboot"
# Send options to PXELinux. Note that we need to send the options even
# though they don't appear in the parameter request list, so we need
# to use dhcp-option-force here.
# See http://syslinux.zytor.com/pxe.php#special for details.
# Magic number - needed before anything else is recognised
#dhcp-option-force=208,f1:00:74:7e
# Configuration file name
#dhcp-option-force=209,configs/common
# Path prefix
#dhcp-option-force=210,/tftpboot/pxelinux/files/
# Reboot time. (Note 'i' to send 32-bit value)
#dhcp-option-force=211,30i
# Set the boot filename for netboot/PXE. You will only need
# this is you want to boot machines over the network and you will need
# a TFTP server; either dnsmasq's built in TFTP server or an
# external one. (See below for how to enable the TFTP server.)
#dhcp-boot=pxelinux.0
# The same as above, but use custom tftp-server instead machine running dnsmasq
#dhcp-boot=pxelinux,server.name,192.168.1.100
# Boot for Etherboot gPXE. The idea is to send two different
# filenames, the first loads gPXE, and the second tells gPXE what to
# load. The dhcp-match sets the gpxe tag for requests from gPXE.
#dhcp-match=set:gpxe,175 # gPXE sends a 175 option.
#dhcp-boot=tag:!gpxe,undionly.kpxe
#dhcp-boot=mybootimage
# Encapsulated options for Etherboot gPXE. All the options are
# encapsulated within option 175
#dhcp-option=encap:175, 1, 5b # priority code
#dhcp-option=encap:175, 176, 1b # no-proxydhcp
#dhcp-option=encap:175, 177, string # bus-id
#dhcp-option=encap:175, 189, 1b # BIOS drive code
#dhcp-option=encap:175, 190, user # iSCSI username
#dhcp-option=encap:175, 191, pass # iSCSI password
# Test for the architecture of a netboot client. PXE clients are
# supposed to send their architecture as option 93. (See RFC 4578)
#dhcp-match=peecees, option:client-arch, 0 #x86-32
#dhcp-match=itanics, option:client-arch, 2 #IA64
#dhcp-match=hammers, option:client-arch, 6 #x86-64
#dhcp-match=mactels, option:client-arch, 7 #EFI x86-64
# Do real PXE, rather than just booting a single file, this is an
# alternative to dhcp-boot.
#pxe-prompt="What system shall I netboot?"
# or with timeout before first available action is taken:
#pxe-prompt="Press F8 for menu.", 60
# Available boot services. for PXE.
#pxe-service=x86PC, "Boot from local disk"
# Loads <tftp-root>/pxelinux.0 from dnsmasq TFTP server.
#pxe-service=x86PC, "Install Linux", pxelinux
# Loads <tftp-root>/pxelinux.0 from TFTP server at 1.2.3.4.
# Beware this fails on old PXE ROMS.
#pxe-service=x86PC, "Install Linux", pxelinux, 1.2.3.4
# Use bootserver on network, found my multicast or broadcast.
#pxe-service=x86PC, "Install windows from RIS server", 1
# Use bootserver at a known IP address.
#pxe-service=x86PC, "Install windows from RIS server", 1, 1.2.3.4
# If you have multicast-FTP available,
# information for that can be passed in a similar way using options 1
# to 5. See page 19 of
# http://download.intel.com/design/archives/wfm/downloads/pxespec.pdf
# Enable dnsmasq's built-in TFTP server
#enable-tftp
# Set the root directory for files available via FTP.
#tftp-root=/var/ftpd
# Make the TFTP server more secure: with this set, only files owned by
# the user dnsmasq is running as will be send over the net.
#tftp-secure
# This option stops dnsmasq from negotiating a larger blocksize for TFTP
# transfers. It will slow things down, but may rescue some broken TFTP
# clients.
#tftp-no-blocksize
# Set the boot file name only when the "red" tag is set.
#dhcp-boot=tag:red,pxelinux.red-net
# An example of dhcp-boot with an external TFTP server: the name and IP
# address of the server are given after the filename.
# Can fail with old PXE ROMS. Overridden by --pxe-service.
#dhcp-boot=/var/ftpd/pxelinux.0,boothost,192.168.0.3
# If there are multiple external tftp servers having a same name
# (using /etc/hosts) then that name can be specified as the
# tftp_servername (the third option to dhcp-boot) and in that
# case dnsmasq resolves this name and returns the resultant IP
# addresses in round robin fasion. This facility can be used to
# load balance the tftp load among a set of servers.
#dhcp-boot=/var/ftpd/pxelinux.0,boothost,tftp_server_name
# Set the limit on DHCP leases, the default is 150
#dhcp-lease-max=150
# The DHCP server needs somewhere on disk to keep its lease database.
# This defaults to a sane location, but if you want to change it, use
# the line below.
#dhcp-leasefile=/var/lib/misc/dnsmasq.leases
# Set the DHCP server to authoritative mode. In this mode it will barge in
# and take over the lease for any client which broadcasts on the network,
# whether it has a record of the lease or not. This avoids long timeouts
# when a machine wakes up on a new network. DO NOT enable this if there's
# the slightest chance that you might end up accidentally configuring a DHCP
# server for your campus/company accidentally. The ISC server uses
# the same option, and this URL provides more information:
# http://www.isc.org/files/auth.html
#dhcp-authoritative
# Run an executable when a DHCP lease is created or destroyed.
# The arguments sent to the script are "add" or "del",
# then the MAC address, the IP address and finally the hostname
# if there is one.
#dhcp-script=/bin/echo
# Set the cachesize here.
#cache-size=150
# If you want to disable negative caching, uncomment this.
#no-negcache
# Normally responses which come from /etc/hosts and the DHCP lease
# file have Time-To-Live set as zero, which conventionally means
# do not cache further. If you are happy to trade lower load on the
# server for potentially stale date, you can set a time-to-live (in
# seconds) here.
#local-ttl=
# If you want dnsmasq to detect attempts by Verisign to send queries
# to unregistered .com and .net hosts to its sitefinder service and
# have dnsmasq instead return the correct NXDOMAIN response, uncomment
# this line. You can add similar lines to do the same for other
# registries which have implemented wildcard A records.
#bogus-nxdomain=64.94.110.11
# If you want to fix up DNS results from upstream servers, use the
# alias option. This only works for IPv4.
# This alias makes a result of 1.2.3.4 appear as 5.6.7.8
#alias=1.2.3.4,5.6.7.8
# and this maps 1.2.3.x to 5.6.7.x
#alias=1.2.3.0,5.6.7.0,255.255.255.0
# and this maps 192.168.0.10->192.168.0.40 to 10.0.0.10->10.0.0.40
#alias=192.168.0.10-192.168.0.40,10.0.0.0,255.255.255.0
# Change these lines if you want dnsmasq to serve MX records.
# Return an MX record named "maildomain.com" with target
# servermachine.com and preference 50
#mx-host=maildomain.com,servermachine.com,50
# Set the default target for MX records created using the localmx option.
#mx-target=servermachine.com
# Return an MX record pointing to the mx-target for all local
# machines.
#localmx
# Return an MX record pointing to itself for all local machines.
#selfmx
# Change the following lines if you want dnsmasq to serve SRV
# records. These are useful if you want to serve ldap requests for
# Active Directory and other windows-originated DNS requests.
# See RFC 2782.
# You may add multiple srv-host lines.
# The fields are <name>,<target>,<port>,<priority>,<weight>
# If the domain part if missing from the name (so that is just has the
# service and protocol sections) then the domain given by the domain=
# config option is used. (Note that expand-hosts does not need to be
# set for this to work.)
# A SRV record sending LDAP for the example.com domain to
# ldapserver.example.com port 389
#srv-host=_ldap._tcp.example.com,ldapserver.example.com,389
# A SRV record sending LDAP for the example.com domain to
# ldapserver.example.com port 389 (using domain=)
#domain=example.com
#srv-host=_ldap._tcp,ldapserver.example.com,389
# Two SRV records for LDAP, each with different priorities
#srv-host=_ldap._tcp.example.com,ldapserver.example.com,389,1
#srv-host=_ldap._tcp.example.com,ldapserver.example.com,389,2
# A SRV record indicating that there is no LDAP server for the domain
# example.com
#srv-host=_ldap._tcp.example.com
# The following line shows how to make dnsmasq serve an arbitrary PTR
# record. This is useful for DNS-SD. (Note that the
# domain-name expansion done for SRV records _does_not
# occur for PTR records.)
#ptr-record=_http._tcp.dns-sd-services,"New Employee Page._http._tcp.dns-sd-services"
# Change the following lines to enable dnsmasq to serve TXT records.
# These are used for things like SPF and zeroconf. (Note that the
# domain-name expansion done for SRV records _does_not
# occur for TXT records.)
#Example SPF.
#txt-record=example.com,"v=spf1 a -all"
#Example zeroconf
#txt-record=_http._tcp.example.com,name=value,paper=A4
# Provide an alias for a "local" DNS name. Note that this _only_ works
# for targets which are names from DHCP or /etc/hosts. Give host
# "bert" another name, bertrand
#cname=bertand,bert
# For debugging purposes, log each DNS query as it passes through
# dnsmasq.
#log-queries
# Log lots of extra information about DHCP transactions.
#log-dhcp
# Include another lot of configuration options.
#conf-file=/etc/dnsmasq.more.conf
#conf-dir=/etc/dnsmasq.d
# Include all the files in a directory except those ending in .bak
#conf-dir=/etc/dnsmasq.d,.bak
# Include all files in a directory which end in .conf
#conf-dir=/etc/dnsmasq.d/*.conf

View File

@@ -1 +1,12 @@
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# Swap file config
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
CONF_SWAPSIZE=500

1
advanced/index.js Normal file
View File

@@ -0,0 +1 @@
var x = "Pi-hole: A black hole for Internet advertisements."

View File

@@ -1,3 +1,14 @@
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# lighttpd config for Pi-hole
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
server.modules = (
"mod_access",
"mod_accesslog",
@@ -35,11 +46,16 @@ include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
# If the URL starts with /admin, it is the Web interface
$HTTP["url"] =~ "^/admin/" {
# Create a response header for debugging using curl -I
setenv.add-response-header = ( "X-Pi-hole" => "The Pi-hole Web interface is working!" )
setenv.add-response-header = (
"X-Pi-hole" => "The Pi-hole Web interface is working!",
"X-Frame-Options" => "DENY"
)
}
# If the URL does not start with /admin, then it is a query for an ad domain
$HTTP["url"] =~ "^(?!/admin)/.*" {
# Create a response header for debugging using curl -I
setenv.add-response-header = ( "X-Pi-hole" => "A black hole for Internet advertisements." )
# Create a response header for debugging using curl -I
setenv.add-response-header = ( "X-Pi-hole" => "A black hole for Internet advertisements." )
# rewrite only js requests
url.rewrite = ("(.*).js" => "pihole/index.js")
}

View File

@@ -1,15 +1,26 @@
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# Updates ad sources every week
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
# Pi-hole: Update the ad sources once a week on Sunday at 01:59
# Download any updates from the ad lists
59 1 * * 7 root /usr/local/bin/gravity.sh
# Download any updates from the adlists
59 1 * * 7 root /usr/local/bin/pihole updateGravity
# Pi-hole: Update the Web interface shortly after gravity runs
# This should also update the version number if it is changed in the dashboard repo
30 2 * * 7 root /usr/local/bin/updateDashboard.sh
30 2 * * 7 root /usr/local/bin/pihole updateDashboard
# Pi-hole: Parse the log file before it is flushed and save the stats to a database
# This will be used for a historical view of your Pi-hole's performance
#50 23 * * * root /usr/local/bin/dailyLog.sh
#50 23 * * * root /usr/local/bin/dailyLog.sh # note: this is outdated
# Pi-hole: Flush the log daily at 11:58 so it doesn't get out of control
# Stats will be viewable in the Web interface thanks to the cron job above
58 23 * * * root /usr/local/bin/piholeLogFlush.sh
58 23 * * * root /usr/local/bin/pihole flush

12
advanced/pihole.sudo Normal file
View File

@@ -0,0 +1,12 @@
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# Allows the WebUI to use Pi-hole commands
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
www-data ALL=NOPASSWD: /usr/local/bin/pihole

View File

@@ -1,22 +1,24 @@
#!/usr/bin/env bash
# Pi-hole: A black hole for Internet advertisements
# by Jacob Salmela
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
#
# (c) 2015 by Jacob Salmela
# This file is part of Pi-hole.
# http://pi-hole.net
# Installs Pi-hole
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
# pi-hole.net/donate
#
# Install with this command (from your Pi):
#
# curl -L install.pi-hole.net | bash
######## VARIABLES #########
tmpLog=/tmp/pihole-install.log
instalLogLoc=/etc/pihole/install.log
@@ -34,12 +36,14 @@ columns=$(tput cols)
r=$(( rows / 2 ))
c=$(( columns / 2 ))
# Find IP used to route to outside world
IPv4dev=$(ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}')
IPv4addr=$(ip -o -f inet addr show dev $IPv4dev | awk '{print $4}' | awk 'END {print}')
IPv4addr=$(ip -o -f inet addr show dev "$IPv4dev" | awk '{print $4}' | awk 'END {print}')
IPv4gw=$(ip route get 8.8.8.8 | awk '{print $3}')
availableInterfaces=$(ip -o link | awk '{print $2}' | grep -v "lo" | cut -d':' -f1)
availableInterfaces=$(ip -o link | awk '{print $2}' | grep -v "lo" | cut -d':' -f1 | cut -d'@' -f1)
dhcpcdFile=/etc/dhcpcd.conf
######## FIRST CHECK ########
@@ -54,69 +58,86 @@ else
if [[ $(dpkg-query -s sudo) ]];then
export SUDO="sudo"
else
echo "::: Please install sudo or run this as root."
echo "::: sudo is needed for the Web interface to run pihole commands. Please run this script as root and it will be automatically installed."
exit 1
fi
fi
if [ -f "/etc/dnsmasq.d/01-pihole.conf" ]; then
#Likely an existing install
upgrade=true
else
upgrade=false
fi
####### FUNCTIONS ##########
###All credit for the below function goes to http://fitnr.com/showing-a-bash-spinner.html
spinner(){
local pid=$1
spin='-\|/'
i=0
while $SUDO kill -0 $pid 2>/dev/null
do
i=$(( (i+1) %4 ))
printf "\b${spin:$i:1}"
sleep .1
done
printf "\b"
spinner()
{
local pid=$1
local delay=0.50
local spinstr='/-\|'
while [ "$(ps a | awk '{print $1}' | grep "$pid")" ]; do
local temp=${spinstr#?}
printf " [%c] " "$spinstr"
local spinstr=$temp${spinstr%"$temp"}
sleep $delay
printf "\b\b\b\b\b\b"
done
printf " \b\b\b\b"
}
backupLegacyPihole(){
backupLegacyPihole() {
# This function detects and backups the pi-hole v1 files. It will not do anything to the current version files.
if [[ -f /etc/dnsmasq.d/adList.conf ]];then
echo "Original Pi-hole detected. Initiating sub space transport"
echo "::: Original Pi-hole detected. Initiating sub space transport"
$SUDO mkdir -p /etc/pihole/original/
$SUDO mv /etc/dnsmasq.d/adList.conf /etc/pihole/original/adList.conf.$(date "+%Y-%m-%d")
$SUDO mv /etc/dnsmasq.conf /etc/pihole/original/dnsmasq.conf.$(date "+%Y-%m-%d")
$SUDO mv /etc/resolv.conf /etc/pihole/original/resolv.conf.$(date "+%Y-%m-%d")
$SUDO mv /etc/lighttpd/lighttpd.conf /etc/pihole/original/lighttpd.conf.$(date "+%Y-%m-%d")
$SUDO mv /var/www/pihole/index.html /etc/pihole/original/index.html.$(date "+%Y-%m-%d")
$SUDO mv /usr/local/bin/gravity.sh /etc/pihole/original/gravity.sh.$(date "+%Y-%m-%d")
$SUDO mv /etc/dnsmasq.d/adList.conf /etc/pihole/original/adList.conf."$(date "+%Y-%m-%d")"
$SUDO mv /etc/dnsmasq.conf /etc/pihole/original/dnsmasq.conf."$(date "+%Y-%m-%d")"
$SUDO mv /etc/resolv.conf /etc/pihole/original/resolv.conf."$(date "+%Y-%m-%d")"
$SUDO mv /etc/lighttpd/lighttpd.conf /etc/pihole/original/lighttpd.conf."$(date "+%Y-%m-%d")"
$SUDO mv /var/www/pihole/index.html /etc/pihole/original/index.html."$(date "+%Y-%m-%d")"
if [ ! -d /opt/pihole ]; then
$SUDO mkdir /opt/pihole
$SUDO chown "$USER":root /opt/pihole
$SUDO chmod u+srwx /opt/pihole
fi
$SUDO mv /opt/pihole/gravity.sh /etc/pihole/original/gravity.sh."$(date "+%Y-%m-%d")"
else
:
fi
}
welcomeDialogs(){
welcomeDialogs() {
# Display the welcome dialog
whiptail --msgbox --backtitle "Welcome" --title "Pi-hole automated installer" "This installer will transform your Raspberry Pi into a network-wide ad blocker!" $r $c
# Support for a part-time dev
whiptail --msgbox --backtitle "Plea" --title "Free and open source" "The Pi-hole is free, but powered by your donations: http://pi-hole.net/donate" $r $c
# Explain the need for a static address
whiptail --msgbox --backtitle "Initating network interface" --title "Static IP Needed" "The Pi-hole is a SERVER so it needs a STATIC IP ADDRESS to function properly.
In the next section, you can choose to use your current network settings (DHCP) or to manually edit them." $r $c
whiptail --msgbox --backtitle "Initating network interface" --title "Static IP Needed" "The Pi-hole is a SERVER so it needs a STATIC IP ADDRESS to function properly.
In the next section, you can choose to use your current network settings (DHCP) or to manually edit them." $r $c
}
chooseInterface(){
# Turn the available interfaces into an array so it can be used with a whiptail dialog
verifyFreeDiskSpace() {
# 50MB is the minimum space needed (45MB install (includes web admin bootstrap/jquery libraries etc) + 5MB one day of logs.)
requiredFreeBytes=51200
existingFreeBytes=$(df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1)
if ! [[ "$existingFreeBytes" =~ ^([0-9])+$ ]]; then
existingFreeBytes=$(df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1)
fi
if [[ $existingFreeBytes -lt $requiredFreeBytes ]]; then
whiptail --msgbox --backtitle "Insufficient Disk Space" --title "Insufficient Disk Space" "\nYour system appears to be low on disk space. pi-hole recomends a minimum of $requiredFreeBytes Bytes.\nYou only have $existingFreeBytes Free.\n\nIf this is a new install you may need to expand your disk.\n\nTry running:\n 'sudo raspi-config'\nChoose the 'expand file system option'\n\nAfter rebooting, run this installation again.\n\ncurl -L install.pi-hole.net | bash\n" $r $c
echo "$existingFreeBytes is less than $requiredFreeBytes"
echo "Insufficient free space, exiting..."
exit 1
fi
}
chooseInterface() {
# Turn the available interfaces into an array so it can be used with a whiptail dialog
interfacesArray=()
firstloop=1
while read -r line
do
mode="OFF"
@@ -126,75 +147,96 @@ chooseInterface(){
fi
interfacesArray+=("$line" "available" "$mode")
done <<< "$availableInterfaces"
# Find out how many interfaces are available to choose from
interfaceCount=$(echo "$availableInterfaces" | wc -l)
chooseInterfaceCmd=(whiptail --separate-output --radiolist "Choose An Interface" $r $c $interfaceCount)
chooseInterfaceOptions=$("${chooseInterfaceCmd[@]}" "${interfacesArray[@]}" 2>&1 >/dev/tty)
for desiredInterface in $chooseInterfaceOptions
do
piholeInterface=$desiredInterface
echo "::: Using interface: $piholeInterface"
echo ${piholeInterface} > /tmp/piholeINT
done
if [[ $? = 0 ]]; then
for desiredInterface in $chooseInterfaceOptions
do
piholeInterface=$desiredInterface
echo "::: Using interface: $piholeInterface"
echo "${piholeInterface}" > /tmp/piholeINT
done
else
echo "::: Cancel selected, exiting...."
exit 1
fi
}
cleanupIPv6() {
# Removes IPv6 indicator file if we are not using IPv6
if [ -f "/etc/pihole/.useIPv6" ] && [ ! "$useIPv6" ]; then
rm /etc/pihole/.useIPv6
fi
}
use4andor6(){
use4andor6() {
# Let use select IPv4 and/or IPv6
cmd=(whiptail --separate-output --checklist "Select Protocols" $r $c 2)
cmd=(whiptail --separate-output --checklist "Select Protocols (press space to select)" $r $c 2)
options=(IPv4 "Block ads over IPv4" on
IPv6 "Block ads over IPv6" off)
choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
for choice in $choices
do
case $choice in
IPv4 ) useIPv4=true;;
IPv6 ) useIPv6=true;;
esac
done
if [ $useIPv4 ] && [ ! $useIPv6 ]; then
getStaticIPv4Settings
setStaticIPv4
echo "::: Using IPv4 on $IPv4addr"
echo "::: IPv6 will NOT be used."
fi
if [ ! $useIPv4 ] && [ $useIPv6 ]; then
useIPv6dialog
echo "::: IPv4 will NOT be used."
echo "::: Using IPv6 on $piholeIPv6"
fi
if [ $useIPv4 ] && [ $useIPv6 ]; then
getStaticIPv4Settings
setStaticIPv4
useIPv6dialog
echo "::: Using IPv4 on $IPv4addr"
echo "::: Using IPv6 on $piholeIPv6"
fi
if [ ! $useIPv4 ] && [ ! $useIPv6 ]; then
echo "::: Cannot continue, neither IPv4 or IPv6 selected"
echo "::: Exiting"
if [[ $? = 0 ]];then
for choice in $choices
do
case $choice in
IPv4 ) useIPv4=true;;
IPv6 ) useIPv6=true;;
esac
done
if [ $useIPv4 ] && [ ! $useIPv6 ]; then
getStaticIPv4Settings
setStaticIPv4
echo "::: Using IPv4 on $IPv4addr"
echo "::: IPv6 will NOT be used."
fi
if [ ! $useIPv4 ] && [ $useIPv6 ]; then
useIPv6dialog
echo "::: IPv4 will NOT be used."
echo "::: Using IPv6 on $piholeIPv6"
fi
if [ $useIPv4 ] && [ $useIPv6 ]; then
getStaticIPv4Settings
setStaticIPv4
useIPv6dialog
echo "::: Using IPv4 on $IPv4addr"
echo "::: Using IPv6 on $piholeIPv6"
fi
if [ ! $useIPv4 ] && [ ! $useIPv6 ]; then
echo "::: Cannot continue, neither IPv4 or IPv6 selected"
echo "::: Exiting"
exit 1
fi
cleanupIPv6
else
echo "::: Cancel selected. Exiting..."
exit 1
fi
}
useIPv6dialog(){
useIPv6dialog() {
# Show the IPv6 address used for blocking
piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }')
whiptail --msgbox --backtitle "IPv6..." --title "IPv6 Supported" "$piholeIPv6 will be used to block ads." $r $c
$SUDO mkdir -p /etc/pihole/
$SUDO touch /etc/pihole/.useIPv6
}
getStaticIPv4Settings(){
getStaticIPv4Settings() {
# Ask if the user wants to use DHCP settings as their static IP
if (whiptail --backtitle "Calibrating network interface" --title "Static IP Address" --yesno "Do you want to use your current network settings as a static address?
IP address: $IPv4addr
Gateway: $IPv4gw" $r $c) then
IP address: $IPv4addr
Gateway: $IPv4gw" $r $c) then
# If they choose yes, let the user know that the IP address will not be available via DHCP and may cause a conflict.
whiptail --msgbox --backtitle "IP information" --title "FYI: IP Conflict" "It is possible your router could still try to assign this IP to a device, which would cause a conflict. But in most cases the router is smart enough to not do that.
If you are worried, either manually set the address, or modify the DHCP reservation pool so it does not include the IP you want.
It is also possible to use a DHCP reservation, but if you are going to do that, you might as well set a static address." $r $c
If you are worried, either manually set the address, or modify the DHCP reservation pool so it does not include the IP you want.
It is also possible to use a DHCP reservation, but if you are going to do that, you might as well set a static address." $r $c
#piholeIP is saved to a permanent file so gravity.sh can use it when updating
echo "${IPv4addr%/*}" > /etc/pihole/piholeIP
# Nothing else to do since the variables are already set above
else
# Otherwise, we need to ask the user to input their desired settings.
@@ -203,198 +245,371 @@ getStaticIPv4Settings(){
until [[ $ipSettingsCorrect = True ]]
do
# Ask for the IPv4 address
IPv4addr=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 address" --inputbox "Enter your desired IPv4 address" $r $c $IPv4addr 3>&1 1>&2 2>&3)
IPv4addr=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 address" --inputbox "Enter your desired IPv4 address" $r $c "$IPv4addr" 3>&1 1>&2 2>&3)
if [[ $? = 0 ]];then
echo "Your static IPv4 address: $IPv4addr"
# Ask for the gateway
IPv4gw=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 gateway (router)" --inputbox "Enter your desired IPv4 default gateway" $r $c $IPv4gw 3>&1 1>&2 2>&3)
if [[ $? = 0 ]];then
echo "Your static IPv4 gateway: $IPv4gw"
# Give the user a chance to review their settings before moving on
if (whiptail --backtitle "Calibrating network interface" --title "Static IP Address" --yesno "Are these settings correct?
IP address: $IPv4addr
Gateway: $IPv4gw" $r $c)then
# If the settings are correct, then we need to set the piholeIP
# Saving it to a temporary file us to retrieve it later when we run the gravity.sh script
echo ${IPv4addr%/*} > /tmp/piholeIP
echo $piholeInterface > /tmp/piholeINT
# After that's done, the loop ends and we move on
ipSettingsCorrect=True
else
# If the settings are wrong, the loop continues
ipSettingsCorrect=False
fi
echo "::: Your static IPv4 address: $IPv4addr"
# Ask for the gateway
IPv4gw=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 gateway (router)" --inputbox "Enter your desired IPv4 default gateway" $r $c "$IPv4gw" 3>&1 1>&2 2>&3)
if [[ $? = 0 ]];then
echo "::: Your static IPv4 gateway: $IPv4gw"
# Give the user a chance to review their settings before moving on
if (whiptail --backtitle "Calibrating network interface" --title "Static IP Address" --yesno "Are these settings correct?
IP address: $IPv4addr
Gateway: $IPv4gw" $r $c)then
# If the settings are correct, then we need to set the piholeIP
# Saving it to a temporary file us to retrieve it later when we run the gravity.sh script. piholeIP is saved to a permanent file so gravity.sh can use it when updating
echo "${IPv4addr%/*}" > /etc/pihole/piholeIP
echo "$piholeInterface" > /tmp/piholeINT
# After that's done, the loop ends and we move on
ipSettingsCorrect=True
else
# Cancelling gateway settings window
# If the settings are wrong, the loop continues
ipSettingsCorrect=False
echo "User canceled."
exit
fi
else
# Cancelling IPv4 settings window
# Cancelling gateway settings window
ipSettingsCorrect=False
echo "User canceled."
exit
echo "::: Cancel selected. Exiting..."
exit 1
fi
else
# Cancelling IPv4 settings window
ipSettingsCorrect=False
echo "::: Cancel selected. Exiting..."
exit 1
fi
done
# End the if statement for DHCP vs. static
# End the if statement for DHCP vs. static
fi
}
setDHCPCD(){
#Append these lines to dhcpcd.conf to enable a static IP
echo "interface $piholeInterface
setDHCPCD() {
# Append these lines to dhcpcd.conf to enable a static IP
echo "::: interface $piholeInterface
static ip_address=$IPv4addr
static routers=$IPv4gw
static domain_name_servers=$IPv4gw" | $SUDO tee -a $dhcpcdFile >/dev/null
}
setStaticIPv4(){
if grep -q $IPv4addr $dhcpcdFile; then
setStaticIPv4() {
# Tries to set the IPv4 address
if grep -q "$IPv4addr" $dhcpcdFile; then
# address already set, noop
:
else
setDHCPCD
$SUDO ip addr replace dev $piholeInterface $IPv4addr
echo "Setting IP to $IPv4addr. You may need to restart after the install is complete."
$SUDO ip addr replace dev "$piholeInterface" "$IPv4addr"
echo ":::"
echo "::: Setting IP to $IPv4addr. You may need to restart after the install is complete."
echo ":::"
fi
}
installScripts(){
function valid_ip()
{
local ip=$1
local stat=1
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
OIFS=$IFS
IFS='.'
ip=($ip)
IFS=$OIFS
[[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
&& ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
stat=$?
fi
return $stat
}
setDNS(){
DNSChoseCmd=(whiptail --separate-output --radiolist "Select Upstream DNS Provider. To use your own, select Custom." $r $c 6)
DNSChooseOptions=(Google "" on
OpenDNS "" off
Level3 "" off
Norton "" off
Comodo "" off
Custom "" off)
DNSchoices=$("${DNSChoseCmd[@]}" "${DNSChooseOptions[@]}" 2>&1 >/dev/tty)
if [[ $? = 0 ]];then
case $DNSchoices in
Google)
echo "::: Using Google DNS servers."
piholeDNS1="8.8.8.8"
piholeDNS2="8.8.4.4"
;;
OpenDNS)
echo "::: Using OpenDNS servers."
piholeDNS1="208.67.222.222"
piholeDNS2="208.67.220.220"
;;
Level3)
echo "::: Using Level3 servers."
piholeDNS1="4.2.2.1"
piholeDNS2="4.2.2.2"
;;
Norton)
echo "::: Using Norton ConnectSafe servers."
piholeDNS1="199.85.126.10"
piholeDNS2="199.85.127.10"
;;
Comodo)
echo "::: Using Comodo Secure servers."
piholeDNS1="8.26.56.26"
piholeDNS2="8.20.247.20"
;;
Custom)
until [[ $DNSSettingsCorrect = True ]]
do
strInvalid="Invalid"
if [ ! $piholeDNS1 ]; then
if [ ! $piholeDNS2 ]; then
prePopulate=""
else
prePopulate=", $piholeDNS2"
fi
elif [ $piholeDNS1 ] && [ ! $piholeDNS2 ]; then
prePopulate="$piholeDNS1"
elif [ $piholeDNS1 ] && [ $piholeDNS2 ]; then
prePopulate="$piholeDNS1, $piholeDNS2"
fi
piholeDNS=$(whiptail --backtitle "Specify Upstream DNS Provider(s)" --inputbox "Enter your desired upstream DNS provider(s), seperated by a comma.\n\nFor example '8.8.8.8, 8.8.4.4'" $r $c "$prePopulate" 3>&1 1>&2 2>&3)
if [[ $? = 0 ]];then
piholeDNS1=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$1}')
piholeDNS2=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$2}')
if ! valid_ip "$piholeDNS1" || [ ! "$piholeDNS1" ]; then
piholeDNS1=$strInvalid
fi
if ! valid_ip "$piholeDNS2" && [ "$piholeDNS2" ]; then
piholeDNS2=$strInvalid
fi
else
echo "::: Cancel selected, exiting...."
exit 1
fi
if [[ $piholeDNS1 == "$strInvalid" ]] || [[ $piholeDNS2 == "$strInvalid" ]]; then
whiptail --msgbox --backtitle "Invalid IP" --title "Invalid IP" "One or both entered IP addresses were invalid. Please try again.\n\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c
if [[ $piholeDNS1 == "$strInvalid" ]]; then
piholeDNS1=""
fi
if [[ $piholeDNS2 == "$strInvalid" ]]; then
piholeDNS2=""
fi
DNSSettingsCorrect=False
else
if (whiptail --backtitle "Specify Upstream DNS Provider(s)" --title "Upstream DNS Provider(s)" --yesno "Are these settings correct?\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c) then
DNSSettingsCorrect=True
else
# If the settings are wrong, the loop continues
DNSSettingsCorrect=False
fi
fi
done
;;
esac
else
echo "::: Cancel selected. Exiting..."
exit 1
fi
}
versionCheckDNSmasq(){
# Check if /etc/dnsmasq.conf is from pihole. If so replace with an original and install new in .d directory
dnsFile1="/etc/dnsmasq.conf"
dnsFile2="/etc/dnsmasq.conf.orig"
dnsSearch="addn-hosts=/etc/pihole/gravity.list"
defaultFile="/etc/.pihole/advanced/dnsmasq.conf.original"
newFileToInstall="/etc/.pihole/advanced/01-pihole.conf"
newFileFinalLocation="/etc/dnsmasq.d/01-pihole.conf"
if [ -f $dnsFile1 ]; then
echo -n "::: Existing dnsmasq.conf found..."
if grep -q $dnsSearch $dnsFile1; then
echo " it is from a previous pi-hole install."
echo -n "::: Backing up dnsmasq.conf to dnsmasq.conf.orig..."
$SUDO mv -f $dnsFile1 $dnsFile2
echo " done."
echo -n "::: Restoring default dnsmasq.conf..."
$SUDO cp $defaultFile $dnsFile1
echo " done."
else
echo " it is not a pi-hole file, leaving alone!"
fi
else
echo -n "::: No dnsmasq.conf found.. restoring default dnsmasq.conf..."
$SUDO cp $defaultFile $dnsFile1
echo " done."
fi
echo -n "::: Copying 01-pihole.conf to /etc/dnsmasq.d/01-pihole.conf..."
$SUDO cp $newFileToInstall $newFileFinalLocation
echo " done."
$SUDO sed -i "s/@INT@/$piholeInterface/" $newFileFinalLocation
if [[ "$piholeDNS1" != "" ]]; then
$SUDO sed -i "s/@DNS1@/$piholeDNS1/" $newFileFinalLocation
else
$SUDO sed -i '/^server=@DNS1@/d' $newFileFinalLocation
fi
if [[ "$piholeDNS2" != "" ]]; then
$SUDO sed -i "s/@DNS2@/$piholeDNS2/" $newFileFinalLocation
else
$SUDO sed -i '/^server=@DNS2@/d' $newFileFinalLocation
fi
}
installScripts() {
# Install the scripts from /etc/.pihole to their various locations
$SUDO echo ":::"
$SUDO echo -n "::: Installing scripts..."
$SUDO cp /etc/.pihole/gravity.sh /usr/local/bin/gravity.sh
$SUDO cp /etc/.pihole/advanced/Scripts/chronometer.sh /usr/local/bin/chronometer.sh
$SUDO cp /etc/.pihole/advanced/Scripts/whitelist.sh /usr/local/bin/whitelist.sh
$SUDO cp /etc/.pihole/advanced/Scripts/blacklist.sh /usr/local/bin/blacklist.sh
$SUDO cp /etc/.pihole/advanced/Scripts/piholeLogFlush.sh /usr/local/bin/piholeLogFlush.sh
$SUDO cp /etc/.pihole/advanced/Scripts/updateDashboard.sh /usr/local/bin/updateDashboard.sh
$SUDO chmod 755 /usr/local/bin/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard}.sh
$SUDO echo -n "::: Installing scripts to /opt/pihole..."
if [ ! -d /opt/pihole ]; then
$SUDO mkdir /opt/pihole
$SUDO chown "$USER":root /opt/pihole
$SUDO chmod u+srwx /opt/pihole
fi
$SUDO cp /etc/.pihole/gravity.sh /opt/pihole/gravity.sh
$SUDO cp /etc/.pihole/advanced/Scripts/chronometer.sh /opt/pihole/chronometer.sh
$SUDO cp /etc/.pihole/advanced/Scripts/whitelist.sh /opt/pihole/whitelist.sh
$SUDO cp /etc/.pihole/advanced/Scripts/blacklist.sh /opt/pihole/blacklist.sh
$SUDO cp /etc/.pihole/advanced/Scripts/piholeDebug.sh /opt/pihole/piholeDebug.sh
$SUDO cp /etc/.pihole/advanced/Scripts/piholeLogFlush.sh /opt/pihole/piholeLogFlush.sh
$SUDO cp /etc/.pihole/advanced/Scripts/updateDashboard.sh /opt/pihole/updateDashboard.sh
$SUDO cp /etc/.pihole/automated\ install/uninstall.sh /opt/pihole/uninstall.sh
$SUDO cp /etc/.pihole/advanced/Scripts/setupLCD.sh /opt/pihole/setupLCD.sh
$SUDO chmod 755 /opt/pihole/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,uninstall,setupLCD}.sh
$SUDO cp /etc/.pihole/pihole /usr/local/bin/pihole
$SUDO chmod 755 /usr/local/bin/pihole
$SUDO cp /etc/.pihole/advanced/bash-completion/pihole /etc/bash_completion.d/pihole
. /etc/bash_completion.d/pihole
#Tidy up /usr/local/bin directory if installing over previous install.
oldFiles=( gravity chronometer whitelist blacklist piholeLogFlush updateDashboard uninstall setupLCD piholeDebug)
for i in "${oldFiles[@]}"; do
if [ -f "/usr/local/bin/$i.sh" ]; then
$SUDO rm /usr/local/bin/"$i".sh
fi
done
$SUDO echo " done."
}
installConfigs(){
installConfigs() {
# Install the configs from /etc/.pihole to their various locations
$SUDO echo ":::"
$SUDO echo -n "::: Installing configs..."
$SUDO mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
$SUDO mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig
$SUDO cp /etc/.pihole/advanced/dnsmasq.conf /etc/dnsmasq.conf
$SUDO cp /etc/.pihole/advanced/lighttpd.conf /etc/lighttpd/lighttpd.conf
$SUDO sed -i "s/@INT@/$piholeInterface/" /etc/dnsmasq.conf
$SUDO echo " done."
$SUDO echo "::: Installing configs..."
versionCheckDNSmasq
if [ ! -d "/etc/lighttpd" ]; then
$SUDO mkdir /etc/lighttpd
$SUDO chown "$USER":root /etc/lighttpd
$SUDO mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig
fi
$SUDO cp /etc/.pihole/advanced/lighttpd.conf /etc/lighttpd/lighttpd.conf
}
stopServices(){
stopServices() {
# Stop dnsmasq and lighttpd
$SUDO echo ":::"
$SUDO echo -n "::: Stopping services..."
$SUDO service dnsmasq stop & spinner $! || true
$SUDO service lighttpd stop & spinner $! || true
#$SUDO service dnsmasq stop & spinner $! || true
$SUDO service lighttpd stop & spinner $! || true
$SUDO echo " done."
}
checkForDependencies(){
#Running apt-get update/upgrade with minimal output can cause some issues with
#requiring user input (e.g password for phpmyadmin see #218)
#We'll change the logic up here, to check to see if there are any updates availible and
# if so, advise the user to run apt-get update/upgrade at their own discretion
today=$(date "+%b %e")
echo ":::"
echo -n "::: Checking apt-get for upgraded packages...."
updatesToInstall=$(sudo apt-get -s -o Debug::NoLocking=true upgrade | grep -c ^Inst) & spinner $!
echo " done!"
checkForDependencies() {
#Running apt-get update/upgrade with minimal output can cause some issues with
#requiring user input (e.g password for phpmyadmin see #218)
#We'll change the logic up here, to check to see if there are any updates availible and
# if so, advise the user to run apt-get update/upgrade at their own discretion
#Check to see if apt-get update has already been run today
# it needs to have been run at least once on new installs!
timestamp=$(stat -c %Y /var/cache/apt/)
timestampAsDate=$(date -d @"$timestamp" "+%b %e")
today=$(date "+%b %e")
if [ ! "$today" == "$timestampAsDate" ]; then
#update package lists
echo ":::"
if [ $updatesToInstall > 0 ]; then
echo "::: There are $updatesToInstall updates availible for your pi!"
echo "::: Please consider running 'sudo apt-get update', followed by 'sudo apt-get upgrade'"
echo "::: after pi-hole has finished installing."
echo ":::"
#add in a prompt to give users the option to quit installation or continue
echo -n "::: Would you like to continue with the pi-hole installation? (Y/n):"
read answer
case "$answer" in
[yY][eE][sS]|[yY] ) echo "::: Continuing!";;
* ) echo "::: Quitting install, please run 'curl -L install.pi-hole.net | bash' after updating packages!"
exit 0;;
esac
else
echo "::: Your pi is up to date! Continuing with pi-hole installation..."
fi
echo ":::"
echo -n "::: apt-get update has not been run today. Running now..."
$SUDO apt-get -qq update & spinner $!
echo " done!"
fi
echo ":::"
echo -n "::: Checking apt-get for upgraded packages...."
updatesToInstall=$($SUDO apt-get -s -o Debug::NoLocking=true upgrade | grep -c ^Inst)
echo " done!"
echo ":::"
if [[ $updatesToInstall -eq "0" ]]; then
echo "::: Your pi is up to date! Continuing with pi-hole installation..."
else
echo "::: There are $updatesToInstall updates availible for your pi!"
echo "::: We recommend you run 'sudo apt-get upgrade' after installing Pi-Hole! "
echo ":::"
fi
echo ":::"
echo "::: Checking dependencies:"
dependencies=( dnsutils bc toilet figlet dnsmasq lighttpd php5-common php5-cgi php5 git curl unzip wget )
for i in "${dependencies[@]}"
do
:
echo -n "::: Checking for $i..."
if [ $(dpkg-query -W -f='${Status}' $i 2>/dev/null | grep -c "ok installed") -eq 0 ]; then
echo -n " Not found! Installing...."
$SUDO apt-get -y -qq install $i > /dev/null & spinner $!
echo " done!"
else
echo " already installed!"
fi
done
dependencies=( dnsutils bc dnsmasq lighttpd php5-common php5-cgi php5 git curl unzip wget sudo)
for i in "${dependencies[@]}"; do
echo -n "::: Checking for $i..."
if [ "$(dpkg-query -W -f='${Status}' "$i" 2>/dev/null | grep -c "ok installed")" -eq 0 ]; then
echo -n " Not found! Installing...."
$SUDO apt-get -y -qq install "$i" > /dev/null & spinner $!
echo " done!"
else
echo " already installed!"
fi
done
}
getGitFiles(){
echo ":::"
getGitFiles() {
# Setup git repos for base files and web admin
echo ":::"
echo "::: Checking for existing base files..."
if is_repo $piholeFilesDir; then
make_repo $piholeFilesDir $piholeGitUrl
else
update_repo $piholeFilesDir
fi
echo ":::"
echo "::: Checking for existing web interface..."
if is_repo $webInterfaceDir; then
make_repo $webInterfaceDir $webInterfaceGitUrl
else
update_repo $webInterfaceDir
fi
if is_repo $piholeFilesDir; then
make_repo $piholeFilesDir $piholeGitUrl
else
update_repo $piholeFilesDir
fi
echo ":::"
echo "::: Checking for existing web interface..."
if is_repo $webInterfaceDir; then
make_repo $webInterfaceDir $webInterfaceGitUrl
else
update_repo $webInterfaceDir
fi
}
is_repo() {
echo -n "::: Checking $1 is a repo..."
# if the directory does not have a .git folder
# it is not a repo
if [ -d "$1/.git" ]; then
echo " OK!"
return 1
fi
echo " not found!!"
return 0
# If the directory does not have a .git folder it is not a repo
echo -n "::: Checking $1 is a repo..."
if [ -d "$1/.git" ]; then
echo " OK!"
return 1
fi
echo " not found!!"
return 0
}
make_repo() {
# remove the non-repod interface and clone the interface
# Remove the non-repod interface and clone the interface
echo -n "::: Cloning $2 into $1..."
$SUDO rm -rf $1
$SUDO rm -rf "$1"
$SUDO git clone -q "$2" "$1" > /dev/null & spinner $!
echo " done!"
}
update_repo() {
# pull the latest commits
# Pull the latest commits
echo -n "::: Updating repo in $1..."
cd "$1"
cd "$1" || exit
$SUDO git pull -q > /dev/null & spinner $!
echo " done!"
}
CreateLogFile(){
CreateLogFile() {
# Create logfiles if necessary
echo ":::"
$SUDO echo -n "::: Creating log file and changing owner to dnsmasq..."
if [ ! -f /var/log/pihole.log ]; then
@@ -405,80 +620,107 @@ CreateLogFile(){
else
$SUDO echo " already exists!"
fi
}
installPiholeWeb(){
installPiholeWeb() {
# Install the web interface
$SUDO echo ":::"
$SUDO echo -n "::: Installing pihole custom index page..."
if [ -d "/var/www/html/pihole" ]; then
$SUDO echo " Existing page detected, not overwriting"
else
$SUDO mkdir /var/www/html/pihole
$SUDO mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig
$SUDO cp /etc/.pihole/advanced/index.html /var/www/html/pihole/index.html
if [ -f /var/www/html/index.lighttpd.html ]; then
$SUDO mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig
else
printf "\n:::\tNo default index.lighttpd.html file found... not backing up"
fi
$SUDO cp /etc/.pihole/advanced/index.* /var/www/html/pihole/.
$SUDO echo " done!"
fi
# Install Sudoer file
echo -n "::: Installing sudoer file..."
$SUDO mkdir -p /etc/sudoers.d/
$SUDO cp /etc/.pihole/advanced/pihole.sudo /etc/sudoers.d/pihole
$SUDO chmod 0440 /etc/sudoers.d/pihole
echo " done!"
}
installCron(){
installCron() {
# Install the cron job
$SUDO echo ":::"
$SUDO echo -n "::: Installing latest Cron script..."
$SUDO cp /etc/.pihole/advanced/pihole.cron /etc/cron.d/pihole
$SUDO echo " done!"
}
runGravity(){
runGravity() {
# Rub gravity.sh to build blacklists
$SUDO echo ":::"
$SUDO echo "::: Preparing to run gravity.sh to refresh hosts..."
if ls /etc/pihole/list* 1> /dev/null 2>&1; then
echo "::: Cleaning up previous install (preserving whitelist/blacklist)"
$SUDO rm /etc/pihole/list.*
fi
#Don't run as SUDO, this was causing issues
echo "::: Running gravity.sh"
echo ":::"
/usr/local/bin/gravity.sh
$SUDO /opt/pihole/gravity.sh
}
setUser(){
# Check if user pihole exists and create if not
echo "::: Checking if user 'pihole' exists..."
if id -u pihole > /dev/null 2>&1; then
echo "::: User 'pihole' already exists"
else
echo "::: User 'pihole' doesn't exist. Creating..."
$SUDO useradd -r -s /usr/sbin/nologin pihole
fi
}
installPihole(){
installPihole() {
# Install base files and web interface
checkForDependencies # done
stopServices
setUser
$SUDO mkdir -p /etc/pihole/
if [ ! -d "/var/www/html" ]; then
$SUDO mkdir -p /var/www/html
fi
$SUDO chown www-data:www-data /var/www/html
$SUDO chmod 775 /var/www/html
$SUDO usermod -a -G www-data pi
$SUDO usermod -a -G www-data pihole
$SUDO lighty-enable-mod fastcgi fastcgi-php > /dev/null
getGitFiles
getGitFiles
installScripts
installConfigs
#installWebAdmin
CreateLogFile
installPiholeWeb
installCron
runGravity
}
displayFinalMessage(){
whiptail --msgbox --backtitle "Make it so." --title "Installation Complete!" "Configure your devices to use the Pi-hole as their DNS server using:
displayFinalMessage() {
# Final completion message to user
whiptail --msgbox --backtitle "Make it so." --title "Installation Complete!" "Configure your devices to use the Pi-hole as their DNS server using:
$IPv4addr
$piholeIPv6
IPv4: ${IPv4addr%/*}
IPv6: $piholeIPv6
If you set a new IP address, you should restart the Pi.
The install log is in /etc/pihole." $r $c
The install log is in /etc/pihole.
View the web interface at http://pi.hole/admin or http://${IPv4addr%/*}/admin" $r $c
}
######## SCRIPT ############
# Start the installer
$SUDO mkdir -p /etc/pihole/
welcomeDialogs
# Verify there is enough disk space for the install
verifyFreeDiskSpace
# Just back up the original Pi-hole right away since it won't take long and it gets it out of the way
backupLegacyPihole
# Find interfaces and let the user choose one
@@ -486,7 +728,8 @@ chooseInterface
# Let the user decide if they want to block ads over IPv4 and/or IPv6
use4andor6
# Decide what upstream DNS Servers to use
setDNS
# Install and log everything to a file
installPihole | tee $tmpLog
@@ -496,5 +739,18 @@ $SUDO mv $tmpLog $instalLogLoc
displayFinalMessage
$SUDO service dnsmasq start
echo -n "::: Restarting services..."
# Start services
$SUDO service dnsmasq restart
$SUDO service lighttpd start
echo " done."
echo ":::"
echo "::: Installation Complete! Configure your devices to use the Pi-hole as their DNS server using:"
echo "::: ${IPv4addr%/*}"
echo "::: $piholeIPv6"
echo ":::"
echo "::: If you set a new IP address, you should restart the Pi."
echo ":::"
echo "::: The install log is located at: /etc/pihole/install.log"
echo "::: View the web interface at http://pi.hole/admin or http://${IPv4addr%/*}/admin"

172
automated install/uninstall.sh Normal file → Executable file
View File

@@ -1,7 +1,9 @@
#!/usr/bin/env bash
# Completely uninstalls the Pi-hole
# (c) 2015 by Jacob Salmela
# This file is part of Pi-hole.
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# Completely uninstalls Pi-hole
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -10,62 +12,136 @@
# Must be root to uninstall
if [[ $EUID -eq 0 ]];then
echo "You are root."
echo "::: You are root."
else
echo "sudo will be used for the install."
echo "::: Sudo will be used for the uninstall."
# Check if it is actually installed
# If it isn't, exit because the unnstall cannot complete
if [[ $(dpkg-query -s sudo) ]];then
export SUDO="sudo"
else
echo "Please install sudo or run this as root."
echo "::: Please install sudo or run this as root."
exit 1
fi
fi
spinner()
{
local pid=$1
local delay=0.50
local spinstr='/-\|'
while [ "$(ps a | awk '{print $1}' | grep "$pid")" ]; do
local temp=${spinstr#?}
printf " [%c] " "$spinstr"
local spinstr=$temp${spinstr%"$temp"}
sleep $delay
printf "\b\b\b\b\b\b"
done
printf " \b\b\b\b"
}
function removeAndPurge {
# Purge dependencies
echo ":::"
# Nate 3/28/2016 - Removed `php5-cgi` and `php5` as they are removed with php5-common
dependencies=( dnsutils bc dnsmasq lighttpd php5-common git curl unzip wget )
for i in "${dependencies[@]}"; do
if [ "$(dpkg-query -W --showformat='${Status}\n' "$i" 2> /dev/null | grep -c "ok installed")" -eq 1 ]; then
while true; do
read -rp "::: Do you wish to remove $i from your system? [y/n]: " yn
case $yn in
[Yy]* ) printf ":::\tRemoving %s..." "$i"; $SUDO apt-get -y remove --purge "$i" &> /dev/null & spinner $!; printf "done!\n"; break;;
[Nn]* ) printf ":::\tSkipping %s" "$i\n"; break;;
* ) printf "::: You must answer yes or no!\n";;
esac
done
else
printf ":::\tPackage %s not installed... Not removing.\n" "$i"
fi
done
# Remove dependency config files
echo "::: Removing dnsmasq config files..."
$SUDO rm /etc/dnsmasq.conf /etc/dnsmasq.conf.orig /etc/dnsmasq.d/01-pihole.conf &> /dev/null
# Take care of any additional package cleaning
printf "::: Auto removing remaining dependencies..."
$SUDO apt-get -y autoremove &> /dev/null & spinner $!; printf "done!\n";
printf "::: Auto cleaning remaining dependencies..."
$SUDO apt-get -y autoclean &> /dev/null & spinner $!; printf "done!\n";
# Call removeNoPurge to remove PiHole specific files
removeNoPurge
}
function removeNoPurge {
echo ":::"
# Only web directories/files that are created by pihole should be removed.
echo "::: Removing the Pi-hole Web server files..."
$SUDO rm -rf /var/www/html/admin &> /dev/null
$SUDO rm -rf /var/www/html/pihole &> /dev/null
$SUDO rm /var/www/html/index.lighttpd.orig &> /dev/null
# If the web directory is empty after removing these files, then the parent html folder can be removed.
if [ -d "/var/www/html" ]; then
if [[ ! "$(ls -A /var/www/html)" ]]; then
$SUDO rm -rf /var/www/html &> /dev/null
fi
fi
# Attempt to preserve backwards compatibility with older versions
# to guarantee no additional changes were made to /etc/crontab after
# the installation of pihole, /etc/crontab.pihole should be permanently
# preserved.
if [[ -f /etc/crontab.orig ]]; then
echo "::: Initial Pi-hole cron detected. Restoring the default system cron..."
$SUDO mv /etc/crontab /etc/crontab.pihole
$SUDO mv /etc/crontab.orig /etc/crontab
$SUDO service cron restart
fi
# Attempt to preserve backwards compatibility with older versions
if [[ -f /etc/cron.d/pihole ]];then
echo "::: Removing cron.d/pihole..."
$SUDO rm /etc/cron.d/pihole &> /dev/null
fi
echo "::: Removing config files and scripts..."
if [ ! "$(dpkg-query -W --showformat='${Status}\n' lighttpd 2> /dev/null | grep -c "ok installed")" -eq 1 ]; then
$SUDO rm -rf /etc/lighttpd/ &> /dev/null
else
if [ -f /etc/lighttpd/lighttpd.conf.orig ]; then
$SUDO mv /etc/lighttpd/lighttpd.conf.orig /etc/lighttpd/lighttpd.conf
fi
fi
$SUDO rm /etc/dnsmasq.d/adList.conf &> /dev/null
$SUDO rm /etc/dnsmasq.d/01-pihole.conf &> /dev/null
$SUDO rm -rf /var/log/*pihole* &> /dev/null
$SUDO rm -rf /etc/pihole/ &> /dev/null
$SUDO rm -rf /etc/.pihole/ &> /dev/null
$SUDO rm -rf /opt/pihole/ &> /dev/null
$SUDO rm /usr/local/bin/pihole &> /dev/null
$SUDO rm /etc/bash_completion.d/pihole &> /dev/null
$SUDO rm /etc/sudoers.d/pihole &> /dev/null
echo ":::"
printf "::: Finished removing PiHole from your system. Sorry to see you go!\n"
printf "::: Reach out to us at https://github.com/pi-hole/pi-hole/issues if you need help\n"
printf "::: Reinstall by simpling running\n:::\n:::\tcurl -L https://install.pi-hole.net | bash\n:::\n::: at any time!\n:::\n"
printf "::: PLEASE RESET YOUR DNS ON YOUR ROUTER/CLIENTS TO RESTORE INTERNET CONNECTIVITY!\n"
}
######### SCRIPT ###########
$SUDO apt-get -y remove --purge dnsutils bc toilet
$SUDO apt-get -y remove --purge dnsmasq
$SUDO apt-get -y remove --purge lighttpd php5-common php5-cgi php5
echo "::: Preparing to remove packages, be sure that each may be safely removed depending on your operating system."
echo "::: (SAFE TO REMOVE ALL ON RASPBIAN)"
while true; do
read -rp "::: Do you wish to purge PiHole's dependencies from your OS? (You will be prompted for each package) [y/n]: " yn
case $yn in
[Yy]* ) removeAndPurge; break;;
[Nn]* ) removeNoPurge; break;;
esac
done
# Only web directories/files that are created by pihole should be removed.
echo "Removing the Pi-hole Web server files..."
$SUDO rm -rf /var/www/html/admin
$SUDO rm -rf /var/www/html/pihole
$SUDO rm /var/www/html/index.lighttpd.orig
# If the web directory is empty after removing these files, then the parent html folder can be removed.
if [[ ! "$(ls -A /var/www/html)" ]]; then
$SUDO rm -rf /var/www/html
fi
echo "Removing dnsmasq config files..."
$SUDO rm /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
# Attempt to preserve backwards compatibility with older versions
# to guarantee no additional changes were made to /etc/crontab after
# the installation of pihole, /etc/crontab.pihole should be permanently
# preserved.
if [[ -f /etc/crontab.orig ]]; then
echo "Initial Pi-hole cron detected. Restoring the default system cron..."
$SUDO mv /etc/crontab /etc/crontab.pihole
$SUDO mv /etc/crontab.orig /etc/crontab
$SUDO service cron restart
fi
# Attempt to preserve backwards compatibility with older versions
if [[ -f /etc/cron.d/pihole ]];then
echo "Removing cron.d/pihole..."
$SUDO rm /etc/cron.d/pihole
fi
echo "Removing config files and scripts..."
$SUDO rm /etc/dnsmasq.conf
$SUDO rm -rf /etc/lighttpd/
$SUDO rm /var/log/pihole.log
$SUDO rm /usr/local/bin/gravity.sh
$SUDO rm /usr/local/bin/chronometer.sh
$SUDO rm /usr/local/bin/whitelist.sh
$SUDO rm /usr/local/bin/piholeLogFlush.sh
$SUDO rm -rf /etc/pihole/

View File

@@ -1,3 +1,14 @@
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# Lighttpd config file for Pi-hole
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
server.modules = (
"mod_access",
"mod_alias",
@@ -27,6 +38,6 @@ include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
$HTTP["host"] =~ "ads.hulu.com|ads-v-darwin.hulu.com" {
$HTTP["host"] =~ "ads.hulu.com|ads-v-darwin.hulu.com|ads-e-darwin.hulu.com" {
url.redirect = ( ".*" => "http://192.168.1.101:8200/MediaItems/19.mov")
}

View File

@@ -1,6 +1,17 @@
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# MiniDLNA config file for Pi-hole
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
media_dir=V,/var/lib/minidlna/videos/
port=8200
friendly_name=pihole
serial=12345678
model_number=1
inotify=yes
inotify=yes

View File

@@ -12,31 +12,37 @@
# Run this script as root or under sudo
echo ":::"
if [[ $EUID -eq 0 ]];then
echo "::: You are root."
else
echo "::: sudo will be used."
# Check if it is actually installed
# If it isn't, exit because the install cannot complete
if [[ $(dpkg-query -s sudo) ]];then
# Check if it is actually installed
# If it isn't, exit because the install cannot complete
if [[ $(dpkg-query -s sudo) ]];then
export SUDO="sudo"
else
else
echo "::: Please install sudo or run this script as root."
exit 1
fi
exit 1
fi
fi
piholeIPfile=/tmp/piholeIP
piholeIPfile=/etc/pihole/piholeIP
piholeIPv6file=/etc/pihole/.useIPv6
adListFile=/etc/pihole/adlists.list
adListDefault=/etc/pihole/adlists.default
whitelistScript=/opt/pihole/whitelist.sh
blacklistScript=/opt/pihole/blacklist.sh
if [[ -f $piholeIPfile ]];then
# If the file exists, it means it was exported from the installation script and we should use that value instead of detecting it in this script
piholeIP=$(cat $piholeIPfile)
rm $piholeIPfile
#rm $piholeIPfile
else
# Otherwise, the IP address can be taken directly from the machine, which will happen when the script is run by the user and not the installation script
IPv4dev=$(ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}')
piholeIPCIDR=$(ip -o -f inet addr show dev $IPv4dev | awk '{print $4}' | awk 'END {print}')
piholeIPCIDR=$(ip -o -f inet addr show dev "$IPv4dev" | awk '{print $4}' | awk 'END {print}')
piholeIP=${piholeIPCIDR%/*}
fi
@@ -45,32 +51,20 @@ if [[ -f $piholeIPv6file ]];then
piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }')
fi
# Ad-list sources--one per line in single quotes
# The mahakala source is commented out due to many users having issues with it blocking legitimate domains.
# Uncomment at your own risk
sources=('https://adaway.org/hosts.txt'
'http://adblock.gjtech.net/?format=unix-hosts'
#'http://adblock.mahakala.is/'
'http://hosts-file.net/ad_servers.txt'
'http://www.malwaredomainlist.com/hostslist/hosts.txt'
'http://pgl.yoyo.org/adservers/serverlist.php?'
'http://someonewhocares.org/hosts/hosts'
'http://winhelp2002.mvps.org/hosts.txt'
'http://mirror1.malwaredomains.com/files/justdomains')
# Variables for various stages of downloading and formatting the list
## Nate 3/26/2016 - Commented unused variables
basename=pihole
piholeDir=/etc/$basename
adList=$piholeDir/gravity.list
blacklist=$piholeDir/blacklist.txt
whitelist=$piholeDir/whitelist.txt
latentWhitelist=$piholeDir/latentWhitelist.txt
#blacklist=$piholeDir/blacklist.txt
#whitelist=$piholeDir/whitelist.txt
#latentWhitelist=$piholeDir/latentWhitelist.txt
justDomainsExtension=domains
matterandlight=$basename.0.matterandlight.txt
supernova=$basename.1.supernova.txt
eventHorizon=$basename.2.eventHorizon.txt
accretionDisc=$basename.3.accretionDisc.txt
eyeOfTheNeedle=$basename.4.wormhole.txt
#eyeOfTheNeedle=$basename.4.wormhole.txt
# After setting defaults, check if there's local overrides
if [[ -r $piholeDir/pihole.conf ]];then
@@ -78,26 +72,39 @@ if [[ -r $piholeDir/pihole.conf ]];then
. $piholeDir/pihole.conf
fi
spinner(){
local pid=$1
local delay=0.001
local spinstr='/-\|'
spin='-\|/'
i=0
while $SUDO kill -0 $pid 2>/dev/null
do
i=$(( (i+1) %4 ))
printf "\b${spin:$i:1}"
sleep .1
done
printf "\b"
}
###########################
# collapse - begin formation of pihole
function gravity_collapse() {
echo -n "::: Neutrino emissions detected..."
echo "::: Neutrino emissions detected..."
echo ":::"
#Decide if we're using a custom ad block list, or defaults.
if [ -f $adListFile ]; then
#custom file found, use this instead of default
echo -n "::: Custom adList file detected. Reading..."
sources=()
while read -r line; do
#Do not read commented out or blank lines
if [[ $line = \#* ]] || [[ ! $line ]]; then
echo "" > /dev/null
else
sources+=($line)
fi
done < $adListFile
echo " done!"
else
#no custom file found, use defaults!
echo -n "::: No custom adlist file detected, reading from default file..."
sources=()
while read -r line; do
#Do not read commented out or blank lines
if [[ $line = \#* ]] || [[ ! $line ]]; then
echo "" > /dev/null
else
sources+=($line)
fi
done < $adListDefault
echo " done!"
fi
# Create the pihole resource directory if it doesn't exist. Future files will be stored here
if [[ -d $piholeDir ]];then
@@ -105,12 +112,12 @@ function gravity_collapse() {
# Will update later, needed for existing installs, new installs should
# create this directory as non-root
$SUDO chmod 777 $piholeDir
find "$piholeDir" -type f -exec $SUDO chmod 666 {} \; & spinner $!
echo "."
echo ":::"
echo "::: Existing pihole directory found"
else
echo -n "::: Creating pihole directory..."
mkdir $piholeDir & spinner $!
echo " done!"
echo "::: Creating pihole directory..."
mkdir $piholeDir
$SUDO chmod 777 $piholeDir
fi
}
@@ -122,7 +129,7 @@ function gravity_patternCheck() {
# Some of the blocklists are copyright, they need to be downloaded
# and stored as is. They can be processed for content after they
# have been saved.
cp $patternBuffer $saveLocation
cp "$patternBuffer" "$saveLocation"
echo " List updated, transport successful!"
else
# curl didn't download any host files, probably because of the date check
@@ -145,17 +152,16 @@ function gravity_transport() {
fi
# Silently curl url
curl -s $cmd_ext $heisenbergCompensator -A "$agent" $url > $patternBuffer
curl -s $cmd_ext $heisenbergCompensator -A "$agent" $url > $patternBuffer
# Check for list updates
gravity_patternCheck $patternBuffer
gravity_patternCheck "$patternBuffer"
# Cleanup
rm -f $patternBuffer
rm -f "$patternBuffer"
}
# spinup - main gravity function
function gravity_spinup() {
echo "::: "
echo ":::"
# Loop through domain list. Download each one and remove commented lines (lines beginning with '# 'or '/') and # blank lines
for ((i = 0; i < "${#sources[@]}"; i++))
do
@@ -174,99 +180,91 @@ function gravity_spinup() {
# Use a case statement to download lists that need special cURL commands
# to complete properly and reset the user agent when required
case "$domain" in
"adblock.mahakala.is")
agent='Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0'
cmd_ext="-e http://forum.xda-developers.com/"
;;
"adblock.mahakala.is")
agent='Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0'
cmd_ext="-e http://forum.xda-developers.com/"
;;
"pgl.yoyo.org")
cmd_ext="-d mimetype=plaintext -d hostformat=hosts"
;;
"pgl.yoyo.org")
cmd_ext="-d mimetype=plaintext -d hostformat=hosts"
;;
# Default is a simple request
*) cmd_ext=""
# Default is a simple request
*) cmd_ext=""
esac
gravity_transport $url $cmd_ext $agent
gravity_transport "$url" "$cmd_ext" "$agent"
done
}
# Schwarzchild - aggregate domains to one list and add blacklisted domains
function gravity_Schwarzchild() {
echo "::: "
echo "::: "
# Find all active domains and compile them into one file and remove CRs
echo -n "::: Aggregating list of domains..."
truncate -s 0 $piholeDir/$matterandlight & spinner $!
truncate -s 0 $piholeDir/$matterandlight
for i in "${activeDomains[@]}"
do
cat $i |tr -d '\r' >> $piholeDir/$matterandlight
cat "$i" | tr -d '\r' >> $piholeDir/$matterandlight
done
echo " done!"
}
function gravity_Blacklist(){
# Append blacklist entries if they exist
echo -n "::: Running blacklist script to update HOSTS file...."
blacklist.sh -f -nr -q > /dev/null & spinner $!
$blacklistScript -f -nr -q > /dev/null
numBlacklisted=$(wc -l < "/etc/pihole/blacklist.txt")
plural=; [[ "$numBlacklisted" != "1" ]] && plural=s
echo " $numBlacklisted domain${plural} blacklisted!"
echo " $numBlacklisted domain${plural} blacklisted!"
}
function gravity_Whitelist() {
echo ":::"
echo ":::"
# Prevent our sources from being pulled into the hole
plural=; [[ "${sources[@]}" != "1" ]] && plural=s
echo -n "::: Adding ${#sources[@]} ad list source${plural} to the whitelist..."
echo -n "::: Adding ${#sources[@]} adlist source${plural} to the whitelist..."
urls=()
for url in ${sources[@]}
for url in "${sources[@]}"
do
tmp=$(echo "$url" | awk -F '/' '{print $3}')
urls=("${urls[@]}" $tmp)
done
echo " done!"
echo -n "::: Running whitelist script to update HOSTS file...."
whitelist.sh -f -nr -q ${urls[@]} > /dev/null & spinner $!
$whitelistScript -f -nr -q "${urls[@]}" > /dev/null
numWhitelisted=$(wc -l < "/etc/pihole/whitelist.txt")
plural=; [[ "$numWhitelisted" != "1" ]] && plural=s
echo " $numWhitelisted domain${plural} whitelisted!"
echo " $numWhitelisted domain${plural} whitelisted!"
}
function gravity_unique() {
# Sort and remove duplicates
echo -n "::: Removing duplicate domains...."
sort -u $piholeDir/$supernova > $piholeDir/$eventHorizon & spinner $!
sort -u $piholeDir/$supernova > $piholeDir/$eventHorizon
echo " done!"
numberOf=$(wc -l < $piholeDir/$eventHorizon)
echo "::: $numberOf unique domains trapped in the event horizon."
}
function gravity_hostFormat() {
# Format domain list as "192.168.x.x domain.com"
# Format domain list as "192.168.x.x domain.com"
echo "::: Formatting domains into a HOSTS file..."
# If there is a value in the $piholeIPv6, then IPv6 will be used, so the awk command modified to create a line for both protocols
if [[ -n $piholeIPv6 ]];then
#Add dummy domain Pi-Hole.IsWorking.OK to the top of gravity.list to make ping result return a friendlier looking domain!
echo -e "$piholeIP Pi-Hole.IsWorking.OK \n$piholeIPv6 Pi-Hole.IsWorking.OK" > $piholeDir/$accretionDisc
cat $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $piholeDir/$accretionDisc
else
# Otherwise, just create gravity.list as normal using IPv4
#Add dummy domain Pi-Hole.IsWorking.OK to the top of gravity.list to make ping result return a friendlier looking domain!
echo -e "$piholeIP Pi-Hole.IsWorking.OK" > $piholeDir/$accretionDisc
cat $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >> $piholeDir/$accretionDisc
fi
hostname=$(</etc/hostname)
# If there is a value in the $piholeIPv6, then IPv6 will be used, so the awk command modified to create a line for both protocols
if [[ -n $piholeIPv6 ]];then
# Add hostname and dummy domain to the top of gravity.list to make ping result return a friendlier looking domain! Also allows for an easy way to access the Pi-hole admin console (pi.hole/admin)
echo -e "$piholeIP $hostname\n$piholeIPv6 $hostname\n$piholeIP pi.hole\n$piholeIPv6 pi.hole" > $piholeDir/$accretionDisc
cat $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $piholeDir/$accretionDisc
else
# Otherwise, just create gravity.list as normal using IPv4
# Add hostname and dummy domain to the top of gravity.list to make ping result return a friendlier looking domain! Also allows for an easy way to access the Pi-hole admin console (pi.hole/admin)
echo -e "$piholeIP $hostname\n$piholeIP pi.hole" > $piholeDir/$accretionDisc
cat $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >> $piholeDir/$accretionDisc
fi
# Copy the file over as /etc/pihole/gravity.list so dnsmasq can use it
cp $piholeDir/$accretionDisc $adList
}
@@ -277,49 +275,60 @@ function gravity_blackbody() {
for file in $piholeDir/*.$justDomainsExtension
do
# If list is in active array then leave it (noop) else rm the list
if [[ " ${activeDomains[@]} " =~ " ${file} " ]]; then
if [[ " ${activeDomains[@]} " =~ ${file} ]]; then
:
else
rm -f $file
rm -f "$file"
fi
done
}
function gravity_advanced() {
# Remove comments and print only the domain name
# Most of the lists downloaded are already in hosts file format but the spacing/formating is not contigious
# This helps with that and makes it easier to read
# It also helps with debugging so each stage of the script can be researched more in depth
echo -n "::: Formatting list of domains to remove comments...."
awk '($1 !~ /^#/) { if (NF>1) {print $2} else {print $1}}' $piholeDir/$matterandlight | sed -nr -e 's/\.{2,}/./g' -e '/\./p' > $piholeDir/$supernova & spinner $!
echo " done!"
awk '($1 !~ /^#/) { if (NF>1) {print $2} else {print $1}}' $piholeDir/$matterandlight | sed -nr -e 's/\.{2,}/./g' -e '/\./p' > $piholeDir/$supernova
echo " done!"
numberOf=$(wc -l < $piholeDir/$supernova)
echo "::: $numberOf domains being pulled in by gravity..."
gravity_unique
}
function gravity_reload() {
#Clear no longer needed files...
echo ":::"
echo -n "::: Cleaning up un-needed files..."
$SUDO rm $piholeDir/pihole.*.txt
echo " done!"
# Reload hosts file
echo ":::"
echo -n "::: Refresh lists in dnsmasq..."
#ensure /etc/dnsmasq.d/01-pihole.conf is pointing at the correct list!
#First escape forward slashes in the path:
adList=${adList//\//\\\/}
#Now replace the line in dnsmasq file
$SUDO sed -i "s/^addn-hosts.*/addn-hosts=$adList/" /etc/dnsmasq.d/01-pihole.conf
dnsmasqPid=$(pidof dnsmasq)
find "$piholeDir" -type f -exec $SUDO chmod 666 {} \;
if [[ $dnsmasqPid ]]; then
# service already running - reload config
$SUDO kill -HUP $dnsmasqPid & spinner $!
$SUDO killall -s HUP dnsmasq
else
# service not running, start it up
$SUDO service dnsmasq start & spinner $!
$SUDO service dnsmasq start
fi
echo " done!"
}
$SUDO cp /etc/.pihole/adlists.default /etc/pihole/adlists.default
gravity_collapse
gravity_spinup
gravity_Schwarzchild

114
pihole Executable file
View File

@@ -0,0 +1,114 @@
#!/bin/bash
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# Controller for all pihole scripts and functions.
#
# Pi-hole is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
# Must be root to use this tool
if [[ ! $EUID -eq 0 ]];then
#echo "::: You are root."
#else
#echo "::: Sudo will be used for this tool."
# Check if it is actually installed
# If it isn't, exit because the pihole cannot be invoked without privileges.
if [[ $(dpkg-query -s sudo) ]];then
export SUDO="sudo"
else
echo "::: Please install sudo or run this as root."
exit 1
fi
fi
function whitelistFunc {
shift
$SUDO /opt/pihole/whitelist.sh "$@"
exit 1
}
function blacklistFunc {
shift
$SUDO /opt/pihole/blacklist.sh "$@"
exit 1
}
function debugFunc {
$SUDO /opt/pihole/piholeDebug.sh
exit 1
}
function flushFunc {
$SUDO /opt/pihole/piholeLogFlush.sh
exit 1
}
function updateDashboardFunc {
$SUDO /opt/pihole/updateDashboard.sh
exit 1
}
function updateGravityFunc {
$SUDO /opt/pihole/gravity.sh
exit 1
}
function setupLCDFunction {
$SUDO /opt/pihole/setupLCD.sh
exit 1
}
function chronometerFunc {
shift
$SUDO /opt/pihole/chronometer.sh "$@"
exit 1
}
function uninstallFunc {
$SUDO /opt/pihole/uninstall.sh
exit 1
}
function helpFunc {
echo "::: Control all PiHole specific functions!"
echo ":::"
echo "::: Usage: pihole [options]"
echo "::: Add -h after -w (whitelist), -b (blacklist), or -c (chronometer) for more information on usage"
echo ":::"
echo "::: Options:"
echo "::: -w, whitelist Whitelist domains"
echo "::: -b, blacklist Blacklist domains"
echo "::: -d, debug Start a debugging session if having trouble"
echo "::: -f, flush Flush the pihole.log file"
echo "::: -u, updateDashboard Update the web dashboard manually"
echo "::: -g, updateGravity Update the list of ad-serving domains"
echo "::: -s, setupLCD Automatically configures the Pi to use the 2.8 LCD screen to display stats on it"
echo "::: -c, chronometer Calculates stats and displays to an LCD"
echo "::: -h, help Show this help dialog"
echo "::: uninstall Uninstall Pi-Hole from your system!"
exit 1
}
if [[ $# = 0 ]]; then
helpFunc
fi
# Handle redirecting to specific functions based on arguments
case "$1" in
"-w" | "whitelist" ) whitelistFunc "$@";;
"-b" | "blacklist" ) blacklistFunc "$@";;
"-d" | "debug" ) debugFunc;;
"-f" | "flush" ) flushFunc;;
"-u" | "updateDashboard" ) updateDashboardFunc;;
"-g" | "updateGravity" ) updateGravityFunc;;
"-s" | "setupLCD" ) setupLCDFunction;;
"-c" | "chronometer" ) chronometerFunc "$@";;
"-h" | "help" ) helpFunc;;
"uninstall" ) uninstallFunc;;
* ) helpFunc;;
esac