add firstboot marker allow setup of servers if they are passed in but never again

This commit is contained in:
diginc
2017-11-19 23:15:44 -06:00
parent e484f79e85
commit eb7b0a1fd7
5 changed files with 69 additions and 14 deletions

View File

@@ -48,12 +48,27 @@ setup_dnsmasq_dns() {
local DNS2="${2:-8.8.4.4}" local DNS2="${2:-8.8.4.4}"
local dnsType='default' local dnsType='default'
if [ "$DNS1" != '8.8.8.8' ] || [ "$DNS2" != '8.8.4.4' ] ; then if [ "$DNS1" != '8.8.8.8' ] || [ "$DNS2" != '8.8.4.4' ] ; then
dnsType='custom' dnsType='custom'
fi; fi;
if [ ! -f /.piholeFirstBoot ] ; then
local setupDNS1="$(grep 'PIHOLE_DNS_1' ${setupVars})"
local setupDNS2="$(grep 'PIHOLE_DNS_2' ${setupVars})"
if [[ -n "$DNS1" && -n "$setupDNS1" ]] || \
[[ -n "$DNS2" && -n "$setupDNS2" ]] ; then
echo "Docker DNS variables not used"
fi
echo "Existing DNS servers used"
return
fi
echo "Using $dnsType DNS servers: $DNS1 & $DNS2" echo "Using $dnsType DNS servers: $DNS1 & $DNS2"
[ -n "$DNS1" ] && change_setting "PIHOLE_DNS_1" "${DNS1}" if [[ -n "$DNS1" && -z "$setupDNS1" ]] ; then
[ -n "$DNS2" ] && change_setting "PIHOLE_DNS_2" "${DNS2}" change_setting "PIHOLE_DNS_1" "${DNS1}"
fi
if [[ -n "$DNS2" && -z "$setupDNS2" ]] ; then
change_setting "PIHOLE_DNS_2" "${DNS2}"
fi
} }
setup_dnsmasq_interface() { setup_dnsmasq_interface() {
@@ -193,10 +208,10 @@ setup_web_port() {
echo "INFO: Without proper router DNAT forwarding to $ServerIP:$web_port, you may not get any blocked websites on ads" echo "INFO: Without proper router DNAT forwarding to $ServerIP:$web_port, you may not get any blocked websites on ads"
case $TAG in case $TAG in
"debian") "debian")
sed -i '/server.port\s*=\s*80\s*$/ s/80/'$web_port'/g' /etc/lighttpd/lighttpd.conf ;; sed -i '/server.port\s*=\s*80\s*$/ s/80/'$WEB_PORT'/g' /etc/lighttpd/lighttpd.conf ;;
"alpine") "alpine")
sed -i '/^\s*listen \[::\]:80 default_server/ s/80/'$web_port'/g' /etc/nginx/nginx.conf sed -i '/^\s*listen \[::\]:80 default_server/ s/80/'$WEB_PORT'/g' /etc/nginx/nginx.conf
sed -i '/^\s*listen 80 default_server/ s/80/'$web_port'/g' /etc/nginx/nginx.conf ;; sed -i '/^\s*listen 80 default_server/ s/80/'$WEB_PORT'/g' /etc/nginx/nginx.conf ;;
esac esac
} }

View File

@@ -84,8 +84,8 @@ if [[ "$TAG" == 'alpine' ]] ; then
sed -i "s/\$_SERVER\['SERVER_NAME'\]/\$_SERVER\['HTTP_HOST'\]/" /var/www/html/pihole/index.php sed -i "s/\$_SERVER\['SERVER_NAME'\]/\$_SERVER\['HTTP_HOST'\]/" /var/www/html/pihole/index.php
fi fi
mv "${tmpLog}" "${instalLogLoc}" mv "${tmpLog}" "${instalLogLoc}"
touch /.piholeFirstBoot
# Fix dnsmasq in docker # Fix dnsmasq in docker
grep -q '^user=root' || echo -e '\nuser=root' >> /etc/dnsmasq.conf grep -q '^user=root' || echo -e '\nuser=root' >> /etc/dnsmasq.conf

View File

@@ -33,4 +33,6 @@ test_configs
test_framework_stubbing test_framework_stubbing
echo "::: Docker start setup complete - beginning s6 services" echo "::: Docker start setup complete - beginning s6 services"
[ -f /.piholeFirstBoot ] && rm /.piholeFirstBoot
# s6's init takes care of running services now, no more main start services function # s6's init takes care of running services now, no more main start services function

View File

@@ -46,14 +46,18 @@ def test_bad_input_to_WEB_PORT(Docker, args, expected_error):
function = Docker.run('. /bash_functions.sh ; eval `grep setup_web_port /start.sh`') function = Docker.run('. /bash_functions.sh ; eval `grep setup_web_port /start.sh`')
assert expected_error in function.stdout assert expected_error in function.stdout
# DNS Environment Variable behavior in combinations of modified pihole LTE settings
@pytest.mark.parametrize('args, expected_stdout, dns1, dns2', [ @pytest.mark.parametrize('args, expected_stdout, dns1, dns2', [
('-e ServerIP="1.2.3.4"', 'default DNS', '8.8.8.8', '8.8.4.4' ), ('-e ServerIP="1.2.3.4"', 'default DNS', '8.8.8.8', '8.8.4.4' ),
('-e ServerIP="1.2.3.4" -e DNS1="1.2.3.4"', 'custom DNS', '1.2.3.4', '8.8.4.4' ), ('-e ServerIP="1.2.3.4" -e DNS1="1.2.3.4"', 'custom DNS', '1.2.3.4', '8.8.4.4' ),
('-e ServerIP="1.2.3.4" -e DNS2="1.2.3.4"', 'custom DNS', '8.8.8.8', '1.2.3.4' ), ('-e ServerIP="1.2.3.4" -e DNS2="1.2.3.4"', 'custom DNS', '8.8.8.8', '1.2.3.4' ),
('-e ServerIP="1.2.3.4" -e DNS1="1.2.3.4" -e DNS2="2.2.3.4"', 'custom DNS', '1.2.3.4', '2.2.3.4' ), ('-e ServerIP="1.2.3.4" -e DNS1="1.2.3.4" -e DNS2="2.2.3.4"', 'custom DNS', '1.2.3.4', '2.2.3.4' ),
]) ])
def test_DNS_Envs_override_defaults(Docker, args, expected_stdout, dns1, dns2): def test_override_default_servers_with_DNS_EnvVars(Docker, args, expected_stdout, dns1, dns2):
''' When DNS environment vars are passed in, they override default dns servers ''' ''' on first boot when DNS vars are NOT set explain default google DNS settings are used
or when DNS vars are set override the pihole DNS settings '''
assert Docker.run('test -f /.piholeFirstBoot').rc == 0
function = Docker.run('. /bash_functions.sh ; eval `grep setup_dnsmasq /start.sh`') function = Docker.run('. /bash_functions.sh ; eval `grep setup_dnsmasq /start.sh`')
assert expected_stdout in function.stdout assert expected_stdout in function.stdout
@@ -61,6 +65,40 @@ def test_DNS_Envs_override_defaults(Docker, args, expected_stdout, dns1, dns2):
expected_servers = 'server={}\nserver={}\n'.format(dns1, dns2) expected_servers = 'server={}\nserver={}\n'.format(dns1, dns2)
assert expected_servers == docker_dns_servers assert expected_servers == docker_dns_servers
@pytest.mark.parametrize('args, dns1, dns2, expected_stdout', [
('-e ServerIP="1.2.3.4"', '9.9.9.1', '9.9.9.2',
'Existing DNS servers used'),
('-e ServerIP="1.2.3.4" -e DNS1="1.2.3.4"', '9.9.9.1', '9.9.9.2',
'Docker DNS variables not used\nExisting DNS servers used'),
('-e ServerIP="1.2.3.4" -e DNS2="1.2.3.4"', '8.8.8.8', '1.2.3.4',
'Docker DNS variables not used\nExisting DNS servers used'),
('-e ServerIP="1.2.3.4" -e DNS1="1.2.3.4" -e DNS2="2.2.3.4"', '1.2.3.4', '2.2.3.4',
'Docker DNS variables not used\nExisting DNS servers used'),
])
def test_DNS_Envs_are_secondary_to_setupvars(Docker, args, expected_stdout, dns1, dns2):
''' on second boot when DNS vars are set just use pihole DNS settings
or when DNS vars and FORCE_DNS var are set override the pihole DNS settings '''
# Given we are not booting for the first time
assert Docker.run('rm /.piholeFirstBoot').rc == 0
# and a user already has custom pihole dns variables in setup vars
setupVars = '/etc/pihole/setupVars.conf'
Docker.run('sed -i "/^PIHOLE_DNS_1/ c\PIHOLE_DNS_1={}" {}'.format(dns1, setupVars))
Docker.run('sed -i "/^PIHOLE_DNS_2/ c\PIHOLE_DNS_2={}" {}'.format(dns2, setupVars))
# When we run setup dnsmasq during startup of the container
function = Docker.run('. /bash_functions.sh ; eval `grep setup_dnsmasq /start.sh`')
assert expected_stdout in function.stdout
expected_servers = 'server={}\nserver={}\n'.format(dns1, dns2)
servers = Docker.run('grep "^server=" /etc/dnsmasq.d/01-pihole.conf').stdout
searchDns1 = servers.split('\n')[0]
searchDns2 = servers.split('\n')[1]
# Then the servers are still what the user had customized if forced dnsmasq is not set
assert 'server={}'.format(dns1) == searchDns1
assert 'server={}'.format(dns2) == searchDns2
@pytest.mark.parametrize('args, expected_stdout, expected_config_line', [ @pytest.mark.parametrize('args, expected_stdout, expected_config_line', [
('-e ServerIP="1.2.3.4"', 'binding to default interface: eth0', 'interface=eth0' ), ('-e ServerIP="1.2.3.4"', 'binding to default interface: eth0', 'interface=eth0' ),
('-e ServerIP="1.2.3.4" -e INTERFACE="eth0"', 'binding to default interface: eth0', 'interface=eth0' ), ('-e ServerIP="1.2.3.4" -e INTERFACE="eth0"', 'binding to default interface: eth0', 'interface=eth0' ),

View File

@@ -5,5 +5,5 @@ envlist = py27
whitelist_externals = docker whitelist_externals = docker
deps = -rrequirements.txt deps = -rrequirements.txt
commands = docker run --rm --privileged multiarch/qemu-user-static:register --reset commands = docker run --rm --privileged multiarch/qemu-user-static:register --reset
./Dockerfile.py -v ./Dockerfile.py
pytest {posargs:-vv -n auto} ./test/ pytest {posargs:-vv -n auto} ./test/