mirror of
https://github.com/prurigro/buildhosts.git
synced 2024-11-23 22:24:10 -05:00
Change set/unset to build/revert and improve output
This commit is contained in:
parent
bf6d496e68
commit
f6f31c8a56
3 changed files with 40 additions and 39 deletions
12
README.md
12
README.md
|
@ -8,14 +8,14 @@ Build and maintain `/etc/hosts` while including lists imported from local and re
|
||||||
|
|
||||||
## Enable Remote Sources ##
|
## Enable Remote Sources ##
|
||||||
|
|
||||||
1. The first time you run the `set` command, `/etc/hosts` will be moved to `/etc/hosts.core`, and the file `/etc/hosts.sources` will be created using the default sources list. The `/etc/hosts` file will then be generated by combining `/etc/hosts.core` and the resulting contents of the downloaded sources in `/etc/hosts.sources`.
|
1. The first time you run the `build` command, `/etc/hosts` will be moved to `/etc/hosts.core`, and the file `/etc/hosts.sources` will be created using the default sources list. The `/etc/hosts` file will then be generated by combining `/etc/hosts.core` and the resulting contents of the downloaded sources in `/etc/hosts.sources`.
|
||||||
2. You can now open `/etc/hosts.sources` and remove or comment out (by adding `#` in front) any sources you don't wish to use, as well as add new ones. Sources can remote (ie: `http://adaway.org/hosts.txt`) as well as local (ie: `file:///etc/hosts.d/mylist.txt`).
|
2. You can now open `/etc/hosts.sources` and remove or comment out (by adding `#` in front) any sources you don't wish to use, as well as add new ones. Sources can remote (ie: `http://adaway.org/hosts.txt`) as well as local (ie: `file:///etc/hosts.d/mylist.txt`).
|
||||||
3. If you want to make any changes to the contents of what used to be `/etc/hosts`, you should now make them to `/etc/hosts.core`, and you'll need to rerun the `set` command to have them applied.
|
3. If you want to make any changes to the contents of what used to be `/etc/hosts`, you should now make them to `/etc/hosts.core`, and you'll need to rerun the `build` command to have them applied.
|
||||||
4. Once you're done customizing your configuration, run the `set` command again and the `/etc/hosts` file will be regenerated using the current list of sources and your up-to-date `/etc/hosts.core` file.
|
4. Once you're done customizing your configuration, run the `build` command again and the `/etc/hosts` file will be regenerated using the current list of sources and your up-to-date `/etc/hosts.core` file.
|
||||||
|
|
||||||
## Disable Remote Sources ##
|
## Disable Remote Sources ##
|
||||||
|
|
||||||
1. To disable the configured hosts lists, run the `unset` command and `/etc/hosts.core` will be moved back to `/etc/hosts`.
|
1. To disable the configured hosts lists, run the `revert` command and `/etc/hosts.core` will be moved back to `/etc/hosts`.
|
||||||
* The `/etc/hosts.sources` file will continue to exist until it's manually deleted, and it will be used again the next time remote sources are enabled.
|
* The `/etc/hosts.sources` file will continue to exist until it's manually deleted, and it will be used again the next time remote sources are enabled.
|
||||||
|
|
||||||
## Notes on /etc/hosts.sources ##
|
## Notes on /etc/hosts.sources ##
|
||||||
|
@ -27,8 +27,8 @@ Build and maintain `/etc/hosts` while including lists imported from local and re
|
||||||
|
|
||||||
## Commands ##
|
## Commands ##
|
||||||
|
|
||||||
* `buildhosts set`: generate `/etc/hosts` using `/etc/hosts.core` and the configured sources
|
* `buildhosts build`: generate `/etc/hosts` using `/etc/hosts.core` and the configured sources
|
||||||
* `buildhosts unset`: remove lists imported from hosts list sources and restore `/etc/hosts`
|
* `buildhosts revert`: remove lists imported from hosts list sources and restore `/etc/hosts`
|
||||||
* `buildhosts help`: display the help
|
* `buildhosts help`: display the help
|
||||||
|
|
||||||
## Extra ##
|
## Extra ##
|
||||||
|
|
55
buildhosts
55
buildhosts
|
@ -6,7 +6,7 @@
|
||||||
# Instructions (as root):
|
# Instructions (as root):
|
||||||
#
|
#
|
||||||
# Enable Remote Sources
|
# Enable Remote Sources
|
||||||
# 1. The first time you run the 'set' command, /etc/hosts will be
|
# 1. The first time you run the 'build' command, /etc/hosts will be
|
||||||
# moved to /etc/hosts.core, and the file /etc/hosts.sources will
|
# moved to /etc/hosts.core, and the file /etc/hosts.sources will
|
||||||
# be created using the default sources list. The /etc/hosts file
|
# be created using the default sources list. The /etc/hosts file
|
||||||
# will then be generated by combining /etc/hosts.core and the
|
# will then be generated by combining /etc/hosts.core and the
|
||||||
|
@ -16,14 +16,14 @@
|
||||||
# well as add new ones. Sources can remote as well as local.
|
# well as add new ones. Sources can remote as well as local.
|
||||||
# 3. If you want to make any changes to the contents of what used to
|
# 3. If you want to make any changes to the contents of what used to
|
||||||
# be /etc/hosts, you should now make them to /etc/hosts.core, and
|
# be /etc/hosts, you should now make them to /etc/hosts.core, and
|
||||||
# you'll need to rerun the 'set' command to have them applied.
|
# you'll need to rerun the 'build' command to have them applied.
|
||||||
# 4. Once you're done customizing your configuration, run the 'set'
|
# 4. Once you're done customizing your configuration, run the 'build'
|
||||||
# command again and the /etc/hosts file will be regenerated using
|
# command again and the /etc/hosts file will be regenerated using
|
||||||
# the current list of sources and your up-to-date /etc/hosts.core
|
# the current list of sources and your up-to-date /etc/hosts.core
|
||||||
# file.
|
# file.
|
||||||
#
|
#
|
||||||
# Disable Remote Sources
|
# Disable Remote Sources
|
||||||
# 1. To disable the configured hosts lists, run the 'unset' command
|
# 1. To disable the configured hosts lists, run the 'revert' command
|
||||||
# and /etc/hosts.core will be moved back to /etc/hosts.
|
# and /etc/hosts.core will be moved back to /etc/hosts.
|
||||||
# * The /etc/hosts.sources file will continue to exist until it's
|
# * The /etc/hosts.sources file will continue to exist until it's
|
||||||
# manually deleted, and it will be used again the next time remote
|
# manually deleted, and it will be used again the next time remote
|
||||||
|
@ -63,31 +63,32 @@ BUILDHOSTS_SCRIPT="$(basename $0)"
|
||||||
if [[ "$NOCOL" -eq 1 ]]; then
|
if [[ "$NOCOL" -eq 1 ]]; then
|
||||||
HEADINGCOL="|"
|
HEADINGCOL="|"
|
||||||
else
|
else
|
||||||
HEADINGCOL="\e[1;41m"
|
HEADINGCOL="\e[1;40m"
|
||||||
SUCCESSCOL="\e[1;40m"
|
SUCCESSCOL="\e[1;42m"
|
||||||
FAILCOL="\e[1;40m"
|
FAILCOL="\e[1;41m"
|
||||||
RESETCOL="\e[0m"
|
RESETCOL="\e[0m"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Help function: display help text
|
# Help function: display help text
|
||||||
function buildhosts_help(){
|
function buildhosts_help(){
|
||||||
echo -e "${HEADINGCOL} ${BUILDHOSTS_SCRIPT}:${RESETCOL} build and maintain /etc/hosts with local and remote hosts list files\n${HEADINGCOL} ${RESETCOL}"
|
echo -e "${BUILDHOSTS_SCRIPT}: build /etc/hosts with your hosts list sources"
|
||||||
echo -e "${HEADINGCOL} commands:${RESETCOL}"
|
echo -e "\nusage: ${BUILDHOSTS_SCRIPT} [COMMAND]"
|
||||||
echo -e "${HEADINGCOL} ${RESETCOL}${SUCCESSCOL} ${BUILDHOSTS_SCRIPT} set:${RESETCOL} add hosts lists to /etc/hosts"
|
echo -e "\ncommands:"
|
||||||
echo -e "${HEADINGCOL} ${RESETCOL}${SUCCESSCOL} ${BUILDHOSTS_SCRIPT} unset:${RESETCOL} remove hosts lists from /etc/hosts"
|
echo -e " build: add hosts lists to /etc/hosts"
|
||||||
echo -e "${HEADINGCOL} ${RESETCOL}${SUCCESSCOL} ${BUILDHOSTS_SCRIPT} help:${RESETCOL} display this help"
|
echo -e " revert: remove hosts lists from /etc/hosts"
|
||||||
|
echo -e " help: display this help"
|
||||||
[[ "$1" -eq 1 ]] && exit 0
|
[[ "$1" -eq 1 ]] && exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# Error function: display error then exit unsuccessfully
|
# Error function: display error then exit unsuccessfully
|
||||||
function buildhosts_error() {
|
function buildhosts_error() {
|
||||||
echo -e "${HEADINGCOL} ${RESETCOL}${FAILCOL} ! ERROR:${RESETCOL}${FAILCOL} ${1}${RESETCOL}"
|
echo -e "${HEADINGCOL} ${RESETCOL}${FAILCOL} ! ERROR:${RESETCOL}${FAILCOL} ${1}${RESETCOL}"
|
||||||
[[ "$2" -eq 1 ]] && echo -e "${HEADINGCOL} ${RESETCOL}" && buildhosts_help
|
[[ "$2" -eq 1 ]] && echo && buildhosts_help
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# The set function to generate or regenerate /etc/hosts using /etc/hosts.core and the list of sources
|
# The build function to generate or regenerate /etc/hosts using /etc/hosts.core and the list of sources
|
||||||
function buildhosts_set() {
|
function buildhosts_build() {
|
||||||
# If $HOSTS_SOURCES doesn't exist, generate one using the default list of sources
|
# If $HOSTS_SOURCES doesn't exist, generate one using the default list of sources
|
||||||
if [[ ! -f "$HOSTS_SOURCES" ]]; then
|
if [[ ! -f "$HOSTS_SOURCES" ]]; then
|
||||||
echo -e "${HEADINGCOL} Generating Default Sources:${RESETCOL} ${HOSTS_SOURCES}"
|
echo -e "${HEADINGCOL} Generating Default Sources:${RESETCOL} ${HOSTS_SOURCES}"
|
||||||
|
@ -103,7 +104,7 @@ function buildhosts_set() {
|
||||||
|
|
||||||
# If $HOSTS_CORE doesn't exist and $HOSTS_SYSTEM does, move $HOSTS_SYSTEM to $HOSTS_CORE
|
# If $HOSTS_CORE doesn't exist and $HOSTS_SYSTEM does, move $HOSTS_SYSTEM to $HOSTS_CORE
|
||||||
if [ -f "$HOSTS_SYSTEM" -a ! -f "$HOSTS_CORE" ]; then
|
if [ -f "$HOSTS_SYSTEM" -a ! -f "$HOSTS_CORE" ]; then
|
||||||
echo -e "${HEADINGCOL} Moving:${RESETCOL} ${HOSTS_SYSTEM} to ${HOSTS_CORE}"
|
echo -e "${HEADINGCOL} Moving: ${RESETCOL} ${HOSTS_SYSTEM} to ${HOSTS_CORE}"
|
||||||
cp "$HOSTS_SYSTEM" "$HOSTS_CORE"
|
cp "$HOSTS_SYSTEM" "$HOSTS_CORE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -111,7 +112,7 @@ function buildhosts_set() {
|
||||||
unset TMPHOSTS
|
unset TMPHOSTS
|
||||||
while read -r source; do
|
while read -r source; do
|
||||||
if [[ -n "$source" ]]; then
|
if [[ -n "$source" ]]; then
|
||||||
echo -e "${HEADINGCOL} Downloading:${RESETCOL} ${source}"
|
echo -e "${HEADINGCOL} Downloading: ${RESETCOL} ${source}"
|
||||||
|
|
||||||
# Download the the current source into $SRCDATA and fail if the result is empty
|
# Download the the current source into $SRCDATA and fail if the result is empty
|
||||||
SRCDATA=$(curl -C - -s "$source" | tr -d "\r")
|
SRCDATA=$(curl -C - -s "$source" | tr -d "\r")
|
||||||
|
@ -131,7 +132,7 @@ function buildhosts_set() {
|
||||||
s|^\ *[^1].*$||' <<< "$TMPHOSTS"))
|
s|^\ *[^1].*$||' <<< "$TMPHOSTS"))
|
||||||
|
|
||||||
# Add the system hosts file to the hosts list and warn if $HOSTS_CORE is missing
|
# Add the system hosts file to the hosts list and warn if $HOSTS_CORE is missing
|
||||||
echo -e "${HEADINGCOL} Writing:${RESETCOL} ${HOSTS_CORE} and $(wc -l <<< "$TMPHOSTS") host source entries to ${HOSTS_SYSTEM}"
|
echo -e "${HEADINGCOL} Writing: ${RESETCOL} ${HOSTS_CORE} and $(wc -l <<< "$TMPHOSTS") host source entries to ${HOSTS_SYSTEM}"
|
||||||
[[ -f "$HOSTS_CORE" ]] \
|
[[ -f "$HOSTS_CORE" ]] \
|
||||||
&& TMPHOSTS=$(cat "$HOSTS_CORE")$(echo -e "\n\n# Generated Host List (${BUILDHOSTS_SCRIPT})")${TMPHOSTS} \
|
&& TMPHOSTS=$(cat "$HOSTS_CORE")$(echo -e "\n\n# Generated Host List (${BUILDHOSTS_SCRIPT})")${TMPHOSTS} \
|
||||||
|| echo -e "${HEADINGCOL} ${RESETCOL}${FAILCOL} Warning:${RESETCOL} Core hosts file ${HOSTS_CORE} does not exist"
|
|| echo -e "${HEADINGCOL} ${RESETCOL}${FAILCOL} Warning:${RESETCOL} Core hosts file ${HOSTS_CORE} does not exist"
|
||||||
|
@ -139,21 +140,21 @@ function buildhosts_set() {
|
||||||
# Write $TMPHOSTS to $HOSTS_SYSTEM if it's not empty
|
# Write $TMPHOSTS to $HOSTS_SYSTEM if it's not empty
|
||||||
[[ -n "$TMPHOSTS" ]] && echo -e "$TMPHOSTS" > "$HOSTS_SYSTEM"
|
[[ -n "$TMPHOSTS" ]] && echo -e "$TMPHOSTS" > "$HOSTS_SYSTEM"
|
||||||
if [[ -n $(cat "$HOSTS_SYSTEM") ]]; then
|
if [[ -n $(cat "$HOSTS_SYSTEM") ]]; then
|
||||||
echo -e "${HEADINGCOL} ${RESETCOL}${SUCCESSCOL} Done!${RESETCOL}"
|
echo -e "${HEADINGCOL} ${RESETCOL}${SUCCESSCOL} Done! ${RESETCOL}"
|
||||||
else
|
else
|
||||||
echo -e "${HEADINGCOL} ${RESETCOL}${FAILCOL} Failed...${RESETCOL} (unseting to core hosts file)"
|
echo -e "${HEADINGCOL} ${RESETCOL}${FAILCOL} Failed... ${RESETCOL} (reverting hosts file)"
|
||||||
cp "$MAINHOSTS" "$HOSTS_SYSTEM"
|
cp "$MAINHOSTS" "$HOSTS_SYSTEM"
|
||||||
buildhosts_error "The generated hosts file @ ${HOSTS_SYSTEM} could not be created"
|
buildhosts_error "The generated hosts file @ ${HOSTS_SYSTEM} could not be created"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildhosts_unset() {
|
function buildhosts_revert() {
|
||||||
# Fail if $HOSTS_CORE doesn't exist
|
# Fail if $HOSTS_CORE doesn't exist
|
||||||
[[ -f "$HOSTS_CORE" ]] || buildhosts_error "The core file ${HOSTS_CORE} does not exist, cannot unset"
|
[[ -f "$HOSTS_CORE" ]] || buildhosts_error "The core file ${HOSTS_CORE} does not exist, cannot revert"
|
||||||
|
|
||||||
# Fail if $HOSTS_CORE is empty when all comments are removed
|
# Fail if $HOSTS_CORE is empty when all comments are removed
|
||||||
[[ -n $(sed 's|^\ *#.*$||' "$HOSTS_CORE" | tr -d "\n") ]] || buildhosts_error "The core file ${HOSTS_CORE} contains no information, cannot unset"
|
[[ -n $(sed 's|^\ *#.*$||' "$HOSTS_CORE" | tr -d "\n") ]] || buildhosts_error "The core file ${HOSTS_CORE} contains no information, cannot revert"
|
||||||
|
|
||||||
# Move $HOSTS_CORE to $HOSTS_SYSTEM
|
# Move $HOSTS_CORE to $HOSTS_SYSTEM
|
||||||
echo -e "${HEADINGCOL} Moving:${RESETCOL} ${HOSTS_CORE} to ${HOSTS_SYSTEM}"
|
echo -e "${HEADINGCOL} Moving:${RESETCOL} ${HOSTS_CORE} to ${HOSTS_SYSTEM}"
|
||||||
|
@ -169,11 +170,11 @@ function buildhosts_unset() {
|
||||||
[[ -n "$1" ]] || buildhosts_error "You must run ${BUILDHOSTS_SCRIPT} with a valid argument" 1
|
[[ -n "$1" ]] || buildhosts_error "You must run ${BUILDHOSTS_SCRIPT} with a valid argument" 1
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
set)
|
build)
|
||||||
buildhosts_set
|
buildhosts_build
|
||||||
;;
|
;;
|
||||||
unset)
|
revert)
|
||||||
buildhosts_unset
|
buildhosts_revert
|
||||||
;;
|
;;
|
||||||
help)
|
help)
|
||||||
buildhosts_help 1
|
buildhosts_help 1
|
||||||
|
|
12
buildhosts.1
12
buildhosts.1
|
@ -35,10 +35,10 @@
|
||||||
.SH "COMMANDS"
|
.SH "COMMANDS"
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBset\fR: generate \fB/etc/hosts\fR using \fB/etc/hosts\.core\fR and the configured sources
|
\fBbuild\fR: generate \fB/etc/hosts\fR using \fB/etc/hosts\.core\fR and the configured sources
|
||||||
.TP
|
.TP
|
||||||
.TP
|
.TP
|
||||||
\fBunset\fR: remove lists imported from hosts list sources and restore \fB/etc/hosts\fR
|
\fBrevert\fR: remove lists imported from hosts list sources and restore \fB/etc/hosts\fR
|
||||||
.TP
|
.TP
|
||||||
.TP
|
.TP
|
||||||
\fBhelp\fR: display the help
|
\fBhelp\fR: display the help
|
||||||
|
@ -49,7 +49,7 @@
|
||||||
.SS "Enable Remote Sources"
|
.SS "Enable Remote Sources"
|
||||||
.TP
|
.TP
|
||||||
.IP "1."
|
.IP "1."
|
||||||
The first time you run the \fBset\fR command, \fB/etc/hosts\fR will be moved to \fB/etc/hosts\.core\fR, and the file \fB/etc/hosts\.sources\fR will be created using the default sources list\. The \fB/etc/hosts\fR file will then be generated by combining \fB/etc/hosts\.core\fR and the resulting contents of the downloaded sources in \fB/etc/hosts\.sources\fR\.
|
The first time you run the \fBbuild\fR command, \fB/etc/hosts\fR will be moved to \fB/etc/hosts\.core\fR, and the file \fB/etc/hosts\.sources\fR will be created using the default sources list\. The \fB/etc/hosts\fR file will then be generated by combining \fB/etc/hosts\.core\fR and the resulting contents of the downloaded sources in \fB/etc/hosts\.sources\fR\.
|
||||||
.TP
|
.TP
|
||||||
.TP
|
.TP
|
||||||
.BR "2."
|
.BR "2."
|
||||||
|
@ -57,15 +57,15 @@ You can now open \fB/etc/hosts\.sources\fR and remove or comment out (by adding
|
||||||
.TP
|
.TP
|
||||||
.TP
|
.TP
|
||||||
.BR "3."
|
.BR "3."
|
||||||
If you want to make any changes to the contents of what used to be \fB/etc/hosts\fR, you should now make them to \fB/etc/hosts\.core\fR, and you\'ll need to rerun the \fBset\fR command to have them applied\.
|
If you want to make any changes to the contents of what used to be \fB/etc/hosts\fR, you should now make them to \fB/etc/hosts\.core\fR, and you\'ll need to rerun the \fBbuild\fR command to have them applied\.
|
||||||
.TP
|
.TP
|
||||||
.TP
|
.TP
|
||||||
.BR "4."
|
.BR "4."
|
||||||
Once you\'re done customizing your configuration, run the \fBset\fR command again and the \fB/etc/hosts\fR file will be regenerated using the current list of sources and your up\-to\-date \fB/etc/hosts\.core\fR file\.
|
Once you\'re done customizing your configuration, run the \fBbuild\fR command again and the \fB/etc/hosts\fR file will be regenerated using the current list of sources and your up\-to\-date \fB/etc/hosts\.core\fR file\.
|
||||||
.SS "Disable Remote Sources"
|
.SS "Disable Remote Sources"
|
||||||
.TP
|
.TP
|
||||||
.BR "1."
|
.BR "1."
|
||||||
To disable the configured hosts lists, run the \fBunset\fR command and \fB/etc/hosts\.core\fR will be moved back to \fB/etc/hosts\fR\.
|
To disable the configured hosts lists, run the \fBrevert\fR command and \fB/etc/hosts\.core\fR will be moved back to \fB/etc/hosts\fR\.
|
||||||
.TP
|
.TP
|
||||||
.TP
|
.TP
|
||||||
.BR "*"
|
.BR "*"
|
||||||
|
|
Loading…
Reference in a new issue