Appendix A – dockerfile_zixi_broadcaster.raspberry.txt
# Get Ubuntu 20.04 Docker image
FROM arm64v8/ubuntu:focal
# Below required for Videon Docker environment
RUN groupadd -g 3003 aid_inet && usermod -G nogroup -g aid_inet _apt
RUN groupadd -g 3004 net_raw && usermod -G net_raw root
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=America/Los_Angeles
# Variables EDIT ME WITH PROPER VERSION
ENV zixiversion 16.3.44466
# Install necessary Linux packages
RUN apt update --assume-yes
# minimal required packages below
RUN apt-get --assume-yes install tzdata ntp ethtool policycoreutils snmp wireless-tools net-tools dmidecode openssh-client iproute2 ipcalc xz-utils
# tzdata for time zone definitions
# ntp for ntp command
# ethtool for /etc/network/interfaces file
# policycoreutils for restorecon command
# snmp for snmpget command
# wireless-tools for iwconfig command
# net-tools for ifconfig command
# dmidecode for dmidecode command
# openssh-client for ssh commmand
# iproute2 for ip command
# ipcalc for ipcalc command
#RUN apt-get --assume-yes install tzdata policycoreutils inetutils-ping wireless-tools iptables ipcalc isc-dhcp-client dmidecode wakeonlan apt-utils net-tools snmp iproute2 ethtool ntp util-linux sysvinit-utils openssh-client openssh-server vim
# following packages not be available to use in the Ubuntu 20.04 Docker env
# network-manager rsyslog snmpd systemctl
RUN service ntp start
# Ubuntu Focal Fossa comes with the folder, but without the file.
RUN touch /etc/network/interfaces
RUN restorecon -v /etc/network/interfaces
# Copy Zixi installer to new image and extract files
COPY zixi_broadcaster-${zixiversion}.raspberry.tar.xz .
RUN tar xvf zixi_broadcaster-${zixiversion}.raspberry.tar.xz
# Copy files to proper folder - no systemd in Docker so need /debian/ scripts not /debian8/
RUN cp /zixi_broadcaster-raspberry/scripts/debian/* /zixi_broadcaster-raspberry/
# Create link to executable with no version for ENTRYPOINT command
RUN ln -s /zixi_broadcaster-raspberry/zixi_broadcaster-${zixiversion} /zixi_broadcaster-raspberry/zixi_broadcaster
# Informs Docker that the container listens on the specified ports
# These are relevant ports for Broadcaster but some may not be necessary depending on use case
# Ports that will be used need to published upon running the image for bridged mode
# Some other ports may need to be added for RTP/UDP streams.
# Web management UI, HTTP protocol
EXPOSE 4444/TCP
# Feeder push to Broadcaster, Zixi protocol
EXPOSE 2088/UDP
# Feeder push to Broadcaster, Zixi protocol with DTLS
EXPOSE 7088/UDP
# Receiver pull from Broadcaster, Zixi protocol
EXPOSE 2077/UDP
# Receiver pull from Broadcaster, Zixi protocol with DTLS
EXPOSE 7077/UDP
# Encoder push to Broadcaster, RTMP protocol
EXPOSE 1935/TCP
# HTTP streaming protocol - HLS or DASH when Broadcaster is origin server
EXPOSE 7777/TCP
# Create logs folder
RUN mkdir /zixi_broadcaster-raspberry/logs
# Create configs folder
RUN mkdir /zixi_broadcaster-raspberry/configs
# Preinstall a config file setting logs to be stored at zixi_broadcaster-raspberry/logs
# Put it in the configs folders and then symlink it to the location the Broadcaster is expecting
# Other settings for default behavior could be added to the config file as well
RUN ln -s /zixi_broadcaster-raspberry/configs/broadcaster-config.xml /zixi_broadcaster-raspberry
# Create the license file in the configs folder and symlink to the location the Broadcaster is expecting
RUN ln -s /zixi_broadcaster-raspberry/configs/broadcaster.lic /zixi_broadcaster-raspberry
# Create the info file in the configs folder and symlink to the location the Broadcaster is expecting
RUN ln -s /zixi_broadcaster-raspberry/configs/broadcaster-info.xml /zixi_broadcaster-raspberry
# Set final working directory
WORKDIR /zixi_broadcaster-raspberry
# Set the executable to start when the container is run
ENTRYPOINT ["./zixi_broadcaster", "--no-daemon"]