Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added ubuntu 22.04 support & Fix mysql connection problem && Fix permission problem #99

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions release/ubuntu22.04/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
FROM ubuntu:22.04
MAINTAINER Rayfalling Wang <[email protected]>

# Update base packages
RUN apt update && apt upgrade --assume-yes

# Install pre-reqs
RUN apt install --assume-yes --no-install-recommends software-properties-common gpg gpg-agent

# Configure Zoneminder PPA
RUN add-apt-repository ppa:iconnor/zoneminder-1.36 \
&& apt update

# Install zoneminder
RUN DEBIAN_FRONTEND=noninteractive apt install --assume-yes zoneminder \
&& a2enconf zoneminder \
&& a2enmod rewrite cgi \
&& service apache2 restart

# Setup Volumes
VOLUME /var/cache/zoneminder/events /var/cache/zoneminder/images /var/lib/mysql /var/log/zm

# Expose http port
EXPOSE 80

# Configure entrypoint
COPY utils/entrypoint.sh /usr/local/bin/
RUN chmod 755 /usr/local/bin/entrypoint.sh
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
18 changes: 18 additions & 0 deletions release/ubuntu22.04/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Usage

The Docker images is not current available from the Docker Hub
You should build it yourself

```bash
docker run -d -t -p 1080:80 \
-e TZ='Europe/London' \
-v ~/zoneminder/events:/var/cache/zoneminder/events \
-v ~/zoneminder/images:/var/cache/zoneminder/images \
-v ~/zoneminder/mysql:/var/lib/mysql \
-v ~/zoneminder/logs:/var/log/zm \
--shm-size="512m" \
--name zoneminder \
zoneminderhq/zoneminder:latest-ubuntu22.04
```

Once the container is running you will need to browse to http://hostname:port/zm to access the Zoneminder interface.
12 changes: 12 additions & 0 deletions utils/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,11 @@ start_zoneminder () {
fi
}

correct_permission () {
# warn log: Cannot write to event folder /var/cache/zoneminder/events. Check that it exists and is owned by the web account user.
chown -R www-data:www-data /var/cache/zoneminder/events /var/cache/zoneminder/images /var/log/zm
}

cleanup () {
echo " * SIGTERM received. Cleaning up before exiting..."
kill $mysqlpid > /dev/null 2>&1
Expand Down Expand Up @@ -405,13 +410,17 @@ else

mysql -u root -e "CREATE USER 'zmuser'@'localhost' IDENTIFIED BY 'zmpass';"
mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'zmuser'@'localhost';"
mysql -u root -e "ALTER USER 'zmuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'zmpass';"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why? mysql_native_password is deprecated in modern mysql.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

Because if the use of mysql_native_password is not allowed, Mysql will fail to initialize the connection.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe you should update database connection code in zoneminder?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html seems like the now-default auth mechanism requires either a TLS connection or RSA-based auth, neither of which are worth it at all for a connection to a DB server inside the same container. It makes sense to switch it back to mysql_native_password imo to keep things simple.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mysql_native_password is DEPRECATED. If you use it with modern mysql your logs will be spammed endlessly about it.


if [ "$(zm_db_exists)" -eq "0" ]; then
echo " * First run of mysql in the container, creating ZoneMinder dB."
mysql -u root < $ZMCREATE
else
echo " * ZoneMinder dB already exists, skipping table creation."
fi

# This fix connection failed for tcp connection to mysql
sed -i -e "s/ZM_DB_HOST=.*$/ZM_DB_HOST=127.0.0.1/g" $ZMCONF
fi

# Ensure we shutdown our services cleanly when we are told to stop
Expand All @@ -423,5 +432,8 @@ start_http
# Start ZoneMinder
start_zoneminder

# Update permission
correct_permission

# tail logs while running
tail -F /var/log/zoneminder/zm*.log /var/log/zm/zm*.log