delete all the alpine

This commit is contained in:
diginc 2018-01-03 20:09:47 -06:00
parent d9fa9b1016
commit 615af98eab
32 changed files with 19 additions and 533 deletions

View File

@ -9,7 +9,7 @@ Options:
--no-build Skip building the docker images
--no-cache Build without using any cache data
--no-generate Skip generating Dockerfiles from template
--os=<os> What OS(s) to build [default: alpine debian]
--os=<os> What OS(s) to build [default: debian]
--arch=<arch> What Architecture(s) to build [default: amd64 armhf aarch64]
-v Print docker's command output [default: False]
@ -35,10 +35,6 @@ os_base_vars = {
'php_env_config': '/etc/lighttpd/conf-enabled/15-fastcgi-php.conf',
'php_error_log': '/var/log/lighttpd/error.log'
},
'alpine': {
'php_env_config': '/etc/php5/fpm.d/envs.conf',
'php_error_log': '/var/log/nginx/error.log'
}
}
images = {
@ -55,21 +51,6 @@ images = {
'base': 'multiarch/debian-debootstrap:arm64-jessie-slim',
'arch': 'aarch64'
}
],
'alpine': [
{
'base': 'alpine:edge',
'arch': 'amd64'
},
{
'base': 'multiarch/alpine:armhf-edge',
'arch': 'armhf'
},
# Impossible combo :(
# {
# 'base': 'multiarch/alpine:aarch64-edge',
# 'arch': 'aarch64'
# }
]
}

View File

@ -13,52 +13,18 @@ ENV setupVars /etc/pihole/setupVars.conf
ENV PIHOLE_INSTALL /tmp/ph_install.sh
ENV S6OVERLAY_RELEASE https://github.com/just-containers/s6-overlay/releases/download/{{ pihole.s6_version }}/s6-overlay-{{ pihole.arch }}.tar.gz
{% if pihole.os == 'alpine' %}
# TODO Re-enable upgrade after php5 packages use the latest greatest libressl packages, conflicts are breaking build 2017-11-14
#RUN apk update && \
RUN apk upgrade --update && \
apk add bind-tools wget curl bash libcap ncurses shadow && \
usermod -s bash root && \
{% else %}
RUN apt-get update && \
apt-get install -y wget curl net-tools cron && \
{% endif %}
curl -L -s $S6OVERLAY_RELEASE \
| tar xvzf - -C / && \
docker-install.sh && \
{% if pihole.os == 'alpine' %}
rm -rf /var/cache/apk/*
{% else %}
rm -rf /var/cache/apt/archives /var/lib/apt/lists/*
{% endif %}
ENTRYPOINT [ "/init" ]
ADD s6/{{ pihole.os }}-root /
COPY s6/service /usr/local/bin/service
{% if pihole.os == 'alpine' %}
# Things installer did and fix alpine+nginx differences
ENV WEBLOGDIR /var/log/nginx
ENV PHP_CONFIG '/etc/php5/php-fpm.conf'
RUN mkdir -p /etc/pihole/ && \
mkdir -p /var/www/html/pihole && \
mkdir -p /var/www/html/admin/ && \
chown nginx:nginx /var/www/html && \
touch ${WEBLOGDIR}/access.log ${WEBLOGDIR}/error.log && \
chown -R nginx:nginx ${WEBLOGDIR} && \
sed -i 's|^user\s*=.*$|user = nginx|' $PHP_CONFIG && \
sed -i '/^;pid/ s|^;||' $PHP_CONFIG && \
chmod 775 /var/www/html && \
touch /var/log/pihole.log && \
chmod 644 /var/log/pihole.log && \
chown dnsmasq:root /var/log/pihole.log && \
sed -i "s/@INT@/eth0/" /etc/dnsmasq.d/01-pihole.conf && \
setcap CAP_NET_BIND_SERVICE=+eip `which dnsmasq` && \
echo 'Done!'
COPY s6/timeout /usr/local/bin/timeout
{% endif %}
# php config start passes special ENVs into
ENV PHP_ENV_CONFIG '{{ pihole.php_env_config }}'
ENV PHP_ERROR_LOG '{{ pihole.php_error_log }}'
@ -66,9 +32,6 @@ COPY ./start.sh /
COPY ./bash_functions.sh /
# IPv6 disable flag for networks/devices that do not support it
{% if pihole.os == 'debian' %}
# not fully supported in debian yet
{% endif %}
ENV IPv6 True
EXPOSE 53 53/udp

View File

@ -1,64 +0,0 @@
FROM multiarch/alpine:aarch64-edge
LABEL image="diginc/pi-hole:alpine_aarch64"
LABEL maintainer="adam@diginc.us"
LABEL url="https://www.github.com/diginc/docker-pi-hole"
ENV TAG alpine
ENV ARCH aarch64
ENV PATH /opt/pihole:${PATH}
COPY install.sh /usr/local/bin/docker-install.sh
ENV setupVars /etc/pihole/setupVars.conf
ENV PIHOLE_INSTALL /tmp/ph_install.sh
ENV S6OVERLAY_RELEASE https://github.com/just-containers/s6-overlay/releases/download/v1.20.0.0/s6-overlay-aarch64.tar.gz
RUN apk upgrade --update && \
apk add bind-tools wget curl bash libcap && \
curl -L -s $S6OVERLAY_RELEASE \
| tar xvzf - -C / && \
docker-install.sh && \
rm -rf /var/cache/apk/*
ENTRYPOINT [ "/init" ]
ADD s6/alpine-root /
COPY s6/service /usr/local/bin/service
# Things installer did and fix alpine+nginx differences
ENV WEBLOGDIR /var/log/nginx
ENV PHP_CONFIG '/etc/php5/php-fpm.conf'
RUN mkdir -p /etc/pihole/ && \
mkdir -p /var/www/html/pihole && \
mkdir -p /var/www/html/admin/ && \
chown nginx:nginx /var/www/html && \
touch ${WEBLOGDIR}/access.log ${WEBLOGDIR}/error.log && \
chown -R nginx:nginx ${WEBLOGDIR} && \
sed -i 's|^user\s*=.*$|user = nginx|' $PHP_CONFIG && \
sed -i '/^;pid/ s|^;||' $PHP_CONFIG && \
chmod 775 /var/www/html && \
touch /var/log/pihole.log && \
chmod 644 /var/log/pihole.log && \
chown dnsmasq:root /var/log/pihole.log && \
sed -i "s/@INT@/eth0/" /etc/dnsmasq.d/01-pihole.conf && \
setcap CAP_NET_BIND_SERVICE=+eip `which dnsmasq` && \
cp -f /usr/bin/list.sh /opt/pihole/list.sh && \
echo 'Done!'
# php config start passes special ENVs into
ENV PHP_ENV_CONFIG '/etc/php5/fpm.d/envs.conf'
ENV PHP_ERROR_LOG '/var/log/nginx/error.log'
COPY ./start.sh /
COPY ./bash_functions.sh /
# IPv6 disable flag for networks/devices that do not support it
ENV IPv6 True
EXPOSE 53 53/udp
EXPOSE 80
ENV S6_LOGGING 0
ENV S6_KEEP_ENV 1
ENV S6_BEHAVIOUR_IF_STAGE2_FAILS 2
SHELL ["/bin/bash", "-c"]

View File

@ -1,67 +0,0 @@
FROM alpine:edge
LABEL image="diginc/pi-hole:alpine_amd64"
LABEL maintainer="adam@diginc.us"
LABEL url="https://www.github.com/diginc/docker-pi-hole"
ENV TAG alpine
ENV ARCH amd64
ENV PATH /opt/pihole:${PATH}
COPY install.sh /usr/local/bin/docker-install.sh
ENV setupVars /etc/pihole/setupVars.conf
ENV PIHOLE_INSTALL /tmp/ph_install.sh
ENV S6OVERLAY_RELEASE https://github.com/just-containers/s6-overlay/releases/download/v1.21.2.1/s6-overlay-amd64.tar.gz
# TODO Re-enable upgrade after php5 packages use the latest greatest libressl packages, conflicts are breaking build 2017-11-14
#RUN apk update && \
RUN apk upgrade --update && \
apk add bind-tools wget curl bash libcap ncurses shadow && \
usermod -s bash root && \
curl -L -s $S6OVERLAY_RELEASE \
| tar xvzf - -C / && \
docker-install.sh && \
rm -rf /var/cache/apk/*
ENTRYPOINT [ "/init" ]
ADD s6/alpine-root /
COPY s6/service /usr/local/bin/service
# Things installer did and fix alpine+nginx differences
ENV WEBLOGDIR /var/log/nginx
ENV PHP_CONFIG '/etc/php5/php-fpm.conf'
RUN mkdir -p /etc/pihole/ && \
mkdir -p /var/www/html/pihole && \
mkdir -p /var/www/html/admin/ && \
chown nginx:nginx /var/www/html && \
touch ${WEBLOGDIR}/access.log ${WEBLOGDIR}/error.log && \
chown -R nginx:nginx ${WEBLOGDIR} && \
sed -i 's|^user\s*=.*$|user = nginx|' $PHP_CONFIG && \
sed -i '/^;pid/ s|^;||' $PHP_CONFIG && \
chmod 775 /var/www/html && \
touch /var/log/pihole.log && \
chmod 644 /var/log/pihole.log && \
chown dnsmasq:root /var/log/pihole.log && \
sed -i "s/@INT@/eth0/" /etc/dnsmasq.d/01-pihole.conf && \
setcap CAP_NET_BIND_SERVICE=+eip `which dnsmasq` && \
echo 'Done!'
COPY s6/timeout /usr/local/bin/timeout
# php config start passes special ENVs into
ENV PHP_ENV_CONFIG '/etc/php5/fpm.d/envs.conf'
ENV PHP_ERROR_LOG '/var/log/nginx/error.log'
COPY ./start.sh /
COPY ./bash_functions.sh /
# IPv6 disable flag for networks/devices that do not support it
ENV IPv6 True
EXPOSE 53 53/udp
EXPOSE 80
ENV S6_LOGGING 0
ENV S6_KEEP_ENV 1
ENV S6_BEHAVIOUR_IF_STAGE2_FAILS 2
SHELL ["/bin/bash", "-c"]

View File

@ -1,67 +0,0 @@
FROM multiarch/alpine:armhf-edge
LABEL image="diginc/pi-hole:alpine_armhf"
LABEL maintainer="adam@diginc.us"
LABEL url="https://www.github.com/diginc/docker-pi-hole"
ENV TAG alpine
ENV ARCH armhf
ENV PATH /opt/pihole:${PATH}
COPY install.sh /usr/local/bin/docker-install.sh
ENV setupVars /etc/pihole/setupVars.conf
ENV PIHOLE_INSTALL /tmp/ph_install.sh
ENV S6OVERLAY_RELEASE https://github.com/just-containers/s6-overlay/releases/download/v1.21.2.1/s6-overlay-armhf.tar.gz
# TODO Re-enable upgrade after php5 packages use the latest greatest libressl packages, conflicts are breaking build 2017-11-14
#RUN apk update && \
RUN apk upgrade --update && \
apk add bind-tools wget curl bash libcap ncurses shadow && \
usermod -s bash root && \
curl -L -s $S6OVERLAY_RELEASE \
| tar xvzf - -C / && \
docker-install.sh && \
rm -rf /var/cache/apk/*
ENTRYPOINT [ "/init" ]
ADD s6/alpine-root /
COPY s6/service /usr/local/bin/service
# Things installer did and fix alpine+nginx differences
ENV WEBLOGDIR /var/log/nginx
ENV PHP_CONFIG '/etc/php5/php-fpm.conf'
RUN mkdir -p /etc/pihole/ && \
mkdir -p /var/www/html/pihole && \
mkdir -p /var/www/html/admin/ && \
chown nginx:nginx /var/www/html && \
touch ${WEBLOGDIR}/access.log ${WEBLOGDIR}/error.log && \
chown -R nginx:nginx ${WEBLOGDIR} && \
sed -i 's|^user\s*=.*$|user = nginx|' $PHP_CONFIG && \
sed -i '/^;pid/ s|^;||' $PHP_CONFIG && \
chmod 775 /var/www/html && \
touch /var/log/pihole.log && \
chmod 644 /var/log/pihole.log && \
chown dnsmasq:root /var/log/pihole.log && \
sed -i "s/@INT@/eth0/" /etc/dnsmasq.d/01-pihole.conf && \
setcap CAP_NET_BIND_SERVICE=+eip `which dnsmasq` && \
echo 'Done!'
COPY s6/timeout /usr/local/bin/timeout
# php config start passes special ENVs into
ENV PHP_ENV_CONFIG '/etc/php5/fpm.d/envs.conf'
ENV PHP_ERROR_LOG '/var/log/nginx/error.log'
COPY ./start.sh /
COPY ./bash_functions.sh /
# IPv6 disable flag for networks/devices that do not support it
ENV IPv6 True
EXPOSE 53 53/udp
EXPOSE 80
ENV S6_LOGGING 0
ENV S6_KEEP_ENV 1
ENV S6_BEHAVIOUR_IF_STAGE2_FAILS 2
SHELL ["/bin/bash", "-c"]

View File

@ -25,7 +25,6 @@ ENTRYPOINT [ "/init" ]
ADD s6/debian-root /
COPY s6/service /usr/local/bin/service
# php config start passes special ENVs into
ENV PHP_ENV_CONFIG '/etc/lighttpd/conf-enabled/15-fastcgi-php.conf'
ENV PHP_ERROR_LOG '/var/log/lighttpd/error.log'
@ -33,7 +32,6 @@ COPY ./start.sh /
COPY ./bash_functions.sh /
# IPv6 disable flag for networks/devices that do not support it
# not fully supported in debian yet
ENV IPv6 True
EXPOSE 53 53/udp

View File

@ -25,7 +25,6 @@ ENTRYPOINT [ "/init" ]
ADD s6/debian-root /
COPY s6/service /usr/local/bin/service
# php config start passes special ENVs into
ENV PHP_ENV_CONFIG '/etc/lighttpd/conf-enabled/15-fastcgi-php.conf'
ENV PHP_ERROR_LOG '/var/log/lighttpd/error.log'
@ -33,7 +32,6 @@ COPY ./start.sh /
COPY ./bash_functions.sh /
# IPv6 disable flag for networks/devices that do not support it
# not fully supported in debian yet
ENV IPv6 True
EXPOSE 53 53/udp

View File

@ -25,7 +25,6 @@ ENTRYPOINT [ "/init" ]
ADD s6/debian-root /
COPY s6/service /usr/local/bin/service
# php config start passes special ENVs into
ENV PHP_ENV_CONFIG '/etc/lighttpd/conf-enabled/15-fastcgi-php.conf'
ENV PHP_ERROR_LOG '/var/log/lighttpd/error.log'
@ -33,7 +32,6 @@ COPY ./start.sh /
COPY ./bash_functions.sh /
# IPv6 disable flag for networks/devices that do not support it
# not fully supported in debian yet
ENV IPv6 True
EXPOSE 53 53/udp

View File

@ -29,7 +29,7 @@ docker run -d \
-e ServerIP="${IP}" \
-e ServerIPv6="${IPv6}" \
--restart=always \
diginc/pi-hole:alpine
diginc/pi-hole:latest
```
**This is just an example and might need changing.** Volumes are stored in the directory $DOCKER_CONFIGS and aren't required but are recommended for persisting data across docker re-creations for updating images. As mentioned on line 2, the auto IP_LOOKUP variable may not work for VPN tunnel interfaces.
@ -87,23 +87,15 @@ The primary docker tags / versions are explained in the following table. [Click
| tag | architecture | description | Dockerfile |
| --- | ------------ | ----------- | ---------- |
| `alpine` / `latest` | x86 | Alpine x86 image, small size container running nginx and dnsmasq | [Dockerfile](https://github.com/diginc/docker-pi-hole/blob/master/alpine.docker) |
| `debian` | x86 | Debian x86 image, container running lighttpd and dnsmasq | [Dockerfile](https://github.com/diginc/docker-pi-hole/blob/master/debian.docker) |
| `arm` | ARM | Debian ARM image, container running lighttpd and dnsmasq built for ARM | [Dockerfile](https://github.com/diginc/docker-pi-hole/blob/master/debian-armhf.docker) |
### `diginc/pi-hole:alpine` [![](https://images.microbadger.com/badges/image/diginc/pi-hole:alpine.svg)](https://microbadger.com/images/diginc/pi-hole "Get your own image badge on microbadger.com") [![](https://images.microbadger.com/badges/version/diginc/pi-hole:alpine.svg)](https://microbadger.com/images/diginc/pi-hole "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/version/diginc/pi-hole:latest.svg)](https://microbadger.com/images/diginc/pi-hole "Get your own version badge on microbadger.com")
Alpine is also the default, aka `latest` tag. If you don't specify a tag you will get this version. This is only an x86 version and will not work on Raspberry Pi's ARM architecture. Use this if you like a small image.
| `debian` / `latest` | x86 | Debian x86 image, container running lighttpd and dnsmasq | [Dockerfile](https://github.com/diginc/docker-pi-hole/blob/master/debian.docker) |
### `diginc/pi-hole:debian` [![](https://images.microbadger.com/badges/image/diginc/pi-hole:debian.svg)](https://microbadger.com/images/diginc/pi-hole "Get your own image badge on microbadger.com") [![](https://images.microbadger.com/badges/version/diginc/pi-hole:debian.svg)](https://microbadger.com/images/diginc/pi-hole "Get your own version badge on microbadger.com")
This version of the docker aims to be as close to a standard pi-hole installation by using the same base OS and the exact configs and scripts (minimally modified to get them working). This serves as a stable baseline for merging and testing upstream repository pi-hole changes. Use this if you don't care about image size and want as stable of a product as possible.
### `diginc/pi-hole:arm` [![](https://images.microbadger.com/badges/image/diginc/pi-hole:arm.svg)](https://microbadger.com/images/diginc/pi-hole "Get your own image badge on microbadger.com") [![](https://images.microbadger.com/badges/version/diginc/pi-hole:arm.svg)](https://microbadger.com/images/diginc/pi-hole "Get your own version badge on microbadger.com")
### `diginc/pi-hole:alpine` [![](https://images.microbadger.com/badges/image/diginc/pi-hole:alpine.svg)](https://microbadger.com/images/diginc/pi-hole "Get your own image badge on microbadger.com") [![](https://images.microbadger.com/badges/version/diginc/pi-hole:alpine.svg)](https://microbadger.com/images/diginc/pi-hole "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/version/diginc/pi-hole:latest.svg)](https://microbadger.com/images/diginc/pi-hole "Get your own version badge on microbadger.com")
Same as the debian image, but cross compiled for ARM architecture hardware through [resin.io's awesome Qemu wrapper](https://resin.io/blog/building-arm-containers-on-any-x86-machine-even-dockerhub/).
Alpine doesn't have an arm cross compilable image at this time.
**DEPRECATED** - no longer supported
## Upgrading, Persistence, and Customizations
@ -111,7 +103,7 @@ The standard pi-hole customization abilities apply to this docker, but with dock
### Upgrading
**If you try to use pihole's built in updater it is not guaranteed to work**; it almost assuredly won't work for alpine but debian may. The preferred 'docker way' to upgrade is:
`pihole -up` is disabled. Upgrad ethe docker way instead please. Long living docker containers are an not the docker way.
1. Download the latest version of the image: `docker pull diginc/pi-hole`
2. Throw away your container: `docker rm -f pihole`
@ -136,7 +128,7 @@ We install all pihole utilities so the the built in [pihole commands](https://di
The webserver and DNS service inside the container can be customized if necessary. Any configuration files you volume mount into `/etc/dnsmasq.d/` will be loaded by dnsmasq when the container starts or restarts or if you need to modify the pi-hole config it is located at `/etc/dnsmasq.d/01-pihole.conf`. The docker start scripts runs a config test prior to starting so it will tell you about any errors in the docker log.
Similarly for the webserver you can customize configs in /etc/nginx (*:alpine* tag) and /etc/lighttpd (*:debian* tag).
Similarly for the webserver you can customize configs in /etc/lighttpd (*:debian* tag).
### Systemd init script
@ -150,9 +142,7 @@ NOTE: After initial run you may need to manually stop the docker container with
| tag | architecture | description | Dockerfile |
| --- | ------------ | ----------- | ---------- |
| `alpine_dev` | x86 | Alpine x86 image, small size container running nginx and dnsmasq | [Dockerfile](https://github.com/diginc/docker-pi-hole/blob/dev/alpine.docker) |
| `debian_dev` | x86 | Debian x86 image, container running lighttpd and dnsmasq | [Dockerfile](https://github.com/diginc/docker-pi-hole/blob/dev/debian.docker) |
| `arm_dev` | ARM | Debian ARM image, container running lighttpd and dnsmasq built for ARM | [Dockerfile](https://github.com/diginc/docker-pi-hole/blob/dev/debian-armhf.docker) |
# User Feedback

View File

@ -14,8 +14,8 @@ To run the Dockerfile templating, image build, and tests all in one command just
Docker images built by `tox` or `python Dockerfile.py` are named the same but stripped of the `diginc/` docker repository namespace.
e.g. `pi-hole:debian_amd64` or `pi-hole-multiarch:alpine_aarch64`
e.g. `pi-hole:debian_amd64` or `pi-hole-multiarch:debian_aarch64`
You can run the multiarch images on an amd64 development system if you [enable binfmt-support as described in the multiarch image docs](https://hub.docker.com/r/multiarch/alpine/)
You can run the multiarch images on an amd64 development system if you [enable binfmt-support as described in the multiarch image docs](https://hub.docker.com/r/multiarch/multiarch/debian-debootstrap/)
`docker run --rm --privileged multiarch/qemu-user-static:register --reset`

View File

@ -17,9 +17,6 @@ validate_env() {
# Debian
nc_error='Name or service not known'
if [[ "$TAG" == 'alpine' ]] ; then
nc_error='bad address'
fi;
# Required ServerIP is a valid IP
if nc -w1 -z "$ServerIP" 53 2>&1 | grep -q "$nc_error" ; then
@ -147,7 +144,6 @@ setup_lighttpd_bind() {
setup_php_env() {
case $TAG in
"debian") setup_php_env_debian ;;
"alpine") setup_php_env_alpine ;;
esac
}
@ -171,24 +167,6 @@ setup_php_env_debian() {
grep -E '(VIRTUAL_HOST|ServerIP|PHP_ERROR_LOG)' "$PHP_ENV_CONFIG"
}
setup_php_env_alpine() {
# Intentionally tabs, required by HEREDOC de-indentation (<<-)
cat <<-EOF > "$PHP_ENV_CONFIG"
[www]
env[PATH] = ${PATH}
env[PHP_ERROR_LOG] = ${PHP_ERROR_LOG}
env[ServerIP] = ${ServerIP}
EOF
if [ -z "$VIRTUAL_HOST" ] ; then
VIRTUAL_HOST="$ServerIP"
fi;
echo "env[VIRTUAL_HOST] = ${VIRTUAL_HOST}" >> "$PHP_ENV_CONFIG";
echo "Added ENV to php:"
cat "$PHP_ENV_CONFIG"
}
setup_web_port() {
local warning="WARNING: Custom WEB_PORT not used"
# Quietly exit early for empty or default
@ -209,9 +187,6 @@ setup_web_port() {
case $TAG in
"debian")
sed -i '/server.port\s*=\s*80\s*$/ s/80/'$WEB_PORT'/g' /etc/lighttpd/lighttpd.conf ;;
"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 ;;
esac
}
@ -237,7 +212,6 @@ setup_ipv4_ipv6() {
ip_versions="IPv4"
case $TAG in
"debian") sed -i '/use-ipv6.pl/ d' /etc/lighttpd/lighttpd.conf ;;
"alpine") sed -i '/listen \[::\]:80/ d' /etc/nginx/nginx.conf ;;
esac
fi;
echo "Using $ip_versions"
@ -246,7 +220,6 @@ setup_ipv4_ipv6() {
test_configs() {
case $TAG in
"debian") test_configs_debian ;;
"alpine") test_configs_alpine ;;
esac
}
@ -260,18 +233,6 @@ test_configs_debian() {
echo "::: All config checks passed, starting ..."
}
test_configs_alpine() {
set -e
echo -n '::: Testing DNSmasq config: '
dnsmasq --test -7 /etc/dnsmasq.d
echo -n '::: Testing PHP-FPM config: '
php-fpm5 -t
echo -n '::: Testing NGINX config: '
nginx -t
set +e
echo "::: All config checks passed, starting ..."
}
test_framework_stubbing() {
if [ -n "$PYTEST" ] ; then
echo ":::::: Tests are being ran - stub out ad list fetching and add a fake ad block"
@ -288,10 +249,6 @@ docker_main() {
TAG="$1"
case $TAG in # Setup webserver
"alpine")
php-fpm5
nginx
;;
"debian")
service lighttpd start
;;

View File

@ -1,18 +0,0 @@
#!/bin/bash -e
docker build -f alpine.docker -t diginc/pi-hole:alpine .
docker tag diginc/pi-hole:alpine diginc/pi-hole:latest
docker build -f debian.docker -t diginc/pi-hole:debian .
IP_LOOKUP="$(ip route get 8.8.8.8 | awk '{ print $NF; exit }')" # May not work for VPN / tun0
IP="${IP:-$IP_LOOKUP}" # use $IP, if set, otherwise IP_LOOKUP
# Alternative ports to not conflict with my real instance
# shellcheck disable=SC2068
docker run -it --rm --cap-add=NET_ADMIN \
-p 5053:53/tcp \
-p 5053:53/udp \
-p 5080:80 \
-e ServerIP="$IP" \
-e VIRTUAL_HOST='pihole.diginc.lan:5080' \
$@ \
diginc/pi-hole:"${image:-alpine}"

View File

@ -16,6 +16,6 @@ docker run -d \
-e ServerIP="${IP:-$(ip route get 8.8.8.8 | awk '{ print $NF; exit }')}" \
-e ServerIPv6="${IPv6:-$(ip -6 route get 2001:4860:4860::8888 | awk '{ print $10; exit }')}" \
--restart=always \
diginc/pi-hole:alpine
diginc/pi-hole:latest
docker logs pihole 2> /dev/null | grep 'password:'

View File

@ -1,17 +0,0 @@
version: "3"
services:
pihole:
image: diginc/pi-hole:alpine
environment:
# enter your docker host IP here
ServerIP:
# IPv6 Address if your network supports it
#ServerIPv6: 192.168.1.55
volumes:
- "./pihole/:/etc/pihole/"
- "./dnsmasq.d/:/etc/dnsmasq.d/"
ports:
- "53:53/tcp"
- "53:53/udp"
- "80:80/tcp"
restart: always

View File

@ -1,7 +1,7 @@
version: "3"
services:
pihole:
image: diginc/pi-hole:alpine
image: diginc/pi-hole:latest
ports:
- "53:53/tcp"
- "53:53/udp"

View File

@ -14,25 +14,6 @@ mv "$(which debconf-apt-progress)" /bin/no_debconf-apt-progress
# Get the install functions
wget -O "$PIHOLE_INSTALL" https://raw.githubusercontent.com/pi-hole/pi-hole/${CORE_TAG}/automated%20install/basic-install.sh
if [[ "$TAG" == 'alpine' ]] ; then
sed -i '/OS distribution not supported/ i\ echo "Hi Alpine"' "$PIHOLE_INSTALL"
sed -i '/OS distribution not supported/,+1d' "$PIHOLE_INSTALL"
sed -i 's#nologin pihole#nologin pihole 2>/dev/null || adduser -S -s /sbin/nologin pihole#g' "$PIHOLE_INSTALL"
# shellcheck disable=SC2016
sed -i '/usermod -a -G/ s#$# 2> /dev/null || addgroup pihole ${LIGHTTPD_GROUP}#g' "$PIHOLE_INSTALL"
sed -i 's/www-data/nginx/g' "$PIHOLE_INSTALL"
sed -i '/LIGHTTPD_CFG/d' "${PIHOLE_INSTALL}"
sed -i '/etc\/cron.d\//d' "${PIHOLE_INSTALL}"
# For new FTL install lines
sed -i 's/sha1sum --status --quiet/sha1sum -s/g' "${PIHOLE_INSTALL}"
sed -i 's/install -T/install /g' "${PIHOLE_INSTALL}"
# shellcheck disable=SC2016
sed -i '/FTLinstall/ s/${binary}/pihole-FTL-musl-linux-x86_64/g' "${PIHOLE_INSTALL}"
LIGHTTPD_USER="nginx" # shellcheck disable=SC2034
LIGHTTPD_GROUP="nginx" # shellcheck disable=SC2034
LIGHTTPD_CFG="lighttpd.conf.debian" # shellcheck disable=SC2034
DNSMASQ_USER="dnsmasq" # shellcheck disable=SC2034
fi
PH_TEST=true . "${PIHOLE_INSTALL}"
# Run only what we need from installer
@ -45,15 +26,6 @@ if [[ "$TAG" == 'debian' ]] ; then
sed -i "/sleep 2/ d" /etc/init.d/dnsmasq # SLOW
# IPv6 support for nc openbsd better than traditional
apt-get install -y --force-yes netcat-openbsd
elif [[ "$TAG" == 'alpine' ]] ; then
apk add -U \
dnsmasq \
nginx \
ca-certificates \
php5-fpm php5-json php5-openssl php5-zip php5-sockets libxml2 \
bc bash curl perl sudo git
# S6 service like to be blocking/foreground
sed -i 's|^;daemonize = yes|daemonize = no|' /etc/php5/php-fpm.conf
fi
piholeGitUrl="${piholeGitUrl}"
@ -84,15 +56,6 @@ tmpLog="/tmp/pihole-install.log"
installLogLoc="${installLogLoc}"
installPihole | tee "${tmpLog}"
sed -i 's/readonly //g' /opt/pihole/webpage.sh
if [[ "$TAG" == 'alpine' ]] ; then
cp /etc/.pihole/advanced/pihole.cron /etc/crontabs/pihole
# More chewing gum patching, post installPihole dnsmasq replacement seems to work probably due to dnsmasq uid missing
apk del dnsmasq && apk add dnsmasq-dnssec
# Fix hostname bug on block page
sed -i "s/\$_SERVER\['SERVER_NAME'\]/\$_SERVER\['HTTP_HOST'\]/" /var/www/html/pihole/index.php
fi
mv "${tmpLog}" "${instalLogLoc}"
touch /.piholeFirstBoot

View File

@ -9,7 +9,7 @@ applist:
restart: always
pihole:
image: diginc/pi-hole:alpine
image: diginc/pi-hole:latest
ports:
- '53:53/tcp'
- '53:53/udp'

View File

@ -1,11 +0,0 @@
#!/bin/sh -e
supportedTags='^(alpine|debian)$'
if ! (echo "$1" | grep -Pq "$supportedTags") ; then
echo "$1 is not a supported tag"; exit 1;
fi
unlink docker-compose.yml
unlink Dockerfile
ln -s "doco-${1}.yml" docker-compose.yml
ln -s "${1}.docker" Dockerfile

View File

@ -1,15 +0,0 @@
#!/usr/bin/with-contenv bash
bashCmd='bash'
if [ "${PH_VERBOSE:-0}" -gt 0 ] ; then
set -x ;
bashCmd='bash -x'
fi
# Early DNS Startup for the gravity list process to use
dnsmasq -7 /etc/dnsmasq.d
$bashCmd /start.sh
$bashCmd gravity.sh
# Done with DNS, let s6 services start up properly configured dns now
killall -9 dnsmasq

View File

@ -1 +0,0 @@
/etc/resolv.conf false doesntexist,0:1000 0664 0664

View File

@ -1,45 +0,0 @@
worker_processes 1;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
# PHP SERVER_NAME is empty unless set, which can bug out ipv6less setups
server_name _;
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index pihole/index.php index.php;
error_page 404 =200 /pihole/index.php;
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location /*.js {
index pihole/index.js
error_page 404 =200 /pihole/index.js;
}
location ~ ^/admin/ {
add_header X-Pi-hole "The Pi-hole Web interface is working!";
}
location / {
add_header X-Pi-hole "A black hole for Internet advertisements." always;
}
}
}

View File

@ -1,5 +0,0 @@
#!/usr/bin/with-contenv bash
s6-echo "Starting crond"
exec -c
fdmove -c 2 1 /usr/sbin/crond -f -L /var/log/cron -l 0 -c /etc/crontabs

View File

@ -1,3 +0,0 @@
#!/usr/bin/with-contenv bash
kill -9 $(pgrep dnsmasq)

View File

@ -1,5 +0,0 @@
#!/usr/bin/with-contenv bash
s6-echo "Starting dnsmasq"
s6-setuidgid root dnsmasq -7 /etc/dnsmasq.d --no-daemon

View File

@ -1,6 +0,0 @@
#!/usr/bin/with-contenv bash
s6-svwait -u -t 5000 /var/run/s6/services/php-fpm
s6-echo "Starting nginx"
nginx -g "daemon off;"

View File

@ -1,5 +0,0 @@
#!/usr/bin/with-contenv bash
s6-echo "Starting php-fpm"
php-fpm5 -d daemonize=no

View File

@ -1,4 +0,0 @@
#!/usr/bin/with-contenv bash
s6-echo "Starting pihole-FTL"
pihole-FTL no-daemon

View File

@ -1,10 +0,0 @@
#!/usr/bin/with-contenv sh
#
# This script will determine the network IP of the container.
#
# Return format should be a single IP address.
#
# Default to using the value of the $HOSTNAME ENV variable.
getent hosts ${1:-$HOSTNAME} | awk '{print $1}'

View File

@ -1,12 +0,0 @@
#!/usr/bin/execlineb -S0
if { s6-test $# -eq 2 }
backtick -in FILENAME {
pipeline { s6-echo "${1}" }
tr "a-z" "A-Z"
}
import -u FILENAME
redirfd -w 1 /var/run/s6/container_environment/${FILENAME}
s6-echo -n -- ${2}

View File

@ -58,12 +58,11 @@ def args(request):
def arch(request):
return request.param
@pytest.fixture(params=['debian', 'alpine'])
@pytest.fixture(params=['debian'])
def os(request):
return request.param
@pytest.fixture()
@pytest.mark.skipif((os == 'alpine' and arch == 'aarch64'), 'musl does not have aarch64 yet')
def tag(request, os, arch):
return '{}_{}'.format(os, arch)
@ -90,7 +89,7 @@ def persist_arch(request):
'''amd64 only, dnsmasq will not start under qemu-user-static :('''
return request.param
@pytest.fixture(scope='module', params=['debian', 'alpine'])
@pytest.fixture(scope='module', params=['debian'])
def persist_os(request):
return request.param
@ -98,7 +97,6 @@ def persist_os(request):
def persist_args(request):
return '-e ServerIP="127.0.0.1" -e ServerIPv6="::1"'
@pytest.mark.skipif((persist_os == 'alpine' and persist_arch == 'aarch64'), 'musl does not have aarch64 yet')
@pytest.fixture(scope='module')
def persist_tag(request, persist_os, persist_arch):
return '{}_{}'.format(persist_os, persist_arch)

View File

@ -11,10 +11,8 @@ DEFAULTARGS = '-e ServerIP="127.0.0.1" '
])
def test_IPv6_not_True_removes_ipv6(Docker, os, args, expected_ipv6, expected_stdout):
''' When a user overrides IPv6=True they only get IPv4 listening webservers '''
IPV6_LINE = { 'alpine': 'listen [::]:80 default_server',
'debian': 'use-ipv6.pl' }
WEB_CONFIG = { 'alpine': '/etc/nginx/nginx.conf',
'debian': '/etc/lighttpd/lighttpd.conf' }
IPV6_LINE = { 'debian': 'use-ipv6.pl' }
WEB_CONFIG = { 'debian': '/etc/lighttpd/lighttpd.conf' }
function = Docker.run('. /bash_functions.sh ; setup_ipv4_ipv6')
assert "Using {}".format(expected_stdout) in function.stdout
@ -24,11 +22,8 @@ def test_IPv6_not_True_removes_ipv6(Docker, os, args, expected_ipv6, expected_st
@pytest.mark.parametrize('args', [DEFAULTARGS + '-e "WEB_PORT=999"'])
def test_overrides_default_WEB_PORT(Docker, os, args):
''' When a --net=host user sets WEB_PORT to avoid synology's 80 default IPv4 and or IPv6 ports are updated'''
CONFIG_LINES = { 'alpine': ['listen 999 default_server',
'listen\s*\[::\]:999\s*default_server;'],
'debian': ['server.port\s*=\s*999'] }
WEB_CONFIG = { 'alpine': '/etc/nginx/nginx.conf',
'debian': '/etc/lighttpd/lighttpd.conf' }
CONFIG_LINES = { 'debian': ['server.port\s*=\s*999'] }
WEB_CONFIG = { 'debian': '/etc/lighttpd/lighttpd.conf' }
function = Docker.run('. /bash_functions.sh ; eval `grep setup_web_port /start.sh`')
assert "Custom WEB_PORT set to 999" in function.stdout

View File

@ -2,7 +2,7 @@ import pytest
import time
''' conftest.py provides the defaults through fixtures '''
''' Note, testinfra builtins don't seem fully compatible with
docker containers (esp. alpine) stripped down nature '''
docker containers (esp. musl based OSs) stripped down nature '''
def test_pihole_default_run_command(Docker, tag):
expected_proc = '/sbin/tini -- /start.sh'