mumble-voip / mumble

Mumble is an open-source, low-latency, high quality voice chat software.
https://www.mumble.info
Other
6.39k stars 1.12k forks source link

Provide official Docker image for murmur #3688

Closed gclawes closed 5 years ago

gclawes commented 5 years ago

It would be nice to have an official image of murmur for containerized deployments. I can take a crack at this if I get some guidance for what version to target (1.2.x or 1.3.x)

davidebeatrici commented 5 years ago

We should target 1.3.x, feel free to ask if you have any questions regarding the build process.

gclawes commented 5 years ago

Thanks! A few things to clarify to start with:

davidebeatrici commented 5 years ago

You're welcome!

gclawes commented 5 years ago

I'll try a multistage build, compiling a static binary in fedora:30 and installing to alpine to keep the image size small.

davidebeatrici commented 5 years ago

Sounds good!

gclawes commented 5 years ago

ICE isn't available on fedora anymore, going with ubuntu:disco

davidebeatrici commented 5 years ago

No problem.

gclawes commented 5 years ago

It looks like for static builds, src/murmur/murmur_ice/murmur_ice.pro always expects slice2cpp to be at /opt/Ice-3.3/bin/slice2cpp, throwing an error when it isn't there. Is there a reason for static builds hard-coding this?

Step 7/7 : RUN make release
 ---> Running in a159492cb0ff
cd src/mumble_proto/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /root/mumble/src/mumble_proto/mumble_proto.pro CONFIG+=no-client CONFIG+=grpc CONFIG+=static ) && make -f Makefile release
make[1]: Entering directory '/root/mumble/src/mumble_proto'
make -f Makefile.Release
make[2]: Entering directory '/root/mumble/src/mumble_proto'
/usr/bin/protoc --cpp_out=. -I. -I.. -I.. ../Mumble.proto
g++ -c -pipe -fvisibility=hidden -Wall -Wextra -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -O2 -fPIC -std=gnu++1z -w -pthread -DRESTRICT=__restrict__ -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o ../../release/.obj/mumble_proto/Mumble.pb.o Mumble.pb.cc
rm -f ../../release/libmumble_proto.a
ar cqs ../../release/libmumble_proto.a ../../release/.obj/mumble_proto/Mumble.pb.o
make[2]: Leaving directory '/root/mumble/src/mumble_proto'
make[1]: Leaving directory '/root/mumble/src/mumble_proto'
cd src/murmur/murmur_ice/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /root/mumble/src/murmur/murmur_ice/murmur_ice.pro CONFIG+=no-client CONFIG+=grpc CONFIG+=static ) && make -f Makefile release
make[1]: Entering directory '/root/mumble/src/murmur/murmur_ice'
make -f Makefile.Release
make[2]: Entering directory '/root/mumble/src/murmur/murmur_ice'
/opt/Ice-3.3/bin/slice2cpp --checksum -I/opt/Ice-3.3/slice ../Murmur.ice
make[2]: /opt/Ice-3.3/bin/slice2cpp: Command not found
make[2]: *** [Makefile.Release:188: Murmur.cpp] Error 127
make[2]: Leaving directory '/root/mumble/src/murmur/murmur_ice'
make[1]: Leaving directory '/root/mumble/src/murmur/murmur_ice'
make[1]: *** [Makefile:42: release] Error 2
make: *** [Makefile:451: sub-src-murmur-murmur_ice-release_ordered] Error 2
The command '/bin/sh -c make release' returned a non-zero code: 2

Ubuntu installs it at /usr/bin/slice2cpp

gclawes commented 5 years ago

This is configured here as well: https://github.com/mumble-voip/mumble/blob/master/src/murmur/murmur.pro#L139

davidebeatrici commented 5 years ago

Feel free to delete those lines, they were added more than a decade ago in commit f4064dfe8d076bab5c16d5b93983e0ec1c3a269a (a dedicated project for Ice was created later, in d8889f8bde96d1d998e5c25af6886aede5986889).

gclawes commented 5 years ago

Thanks, will do.

gclawes commented 5 years ago

I'm running into an issue building the GRPC support:

 ---> Running in bc9370b71c51
cd src/mumble_proto/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /root/mumble/src/mumble_proto/mumble_proto.pro 'CONFIG+=no-client grpc static' ) && make -f Makefile
make[1]: Entering directory '/root/mumble/src/mumble_proto'
make -f Makefile.Release
make[2]: Entering directory '/root/mumble/src/mumble_proto'
/usr/bin/protoc --cpp_out=. -I. -I.. -I.. ../Mumble.proto
g++ -c -pipe -fvisibility=hidden -Wall -Wextra -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -O2 -fPIC -std=gnu++1z -w -pthread -DRESTRICT=__restrict__ -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o ../../release/.obj/mumble_proto/Mumble.pb.o Mumble.pb.cc
rm -f ../../release/libmumble_proto.a
ar cqs ../../release/libmumble_proto.a ../../release/.obj/mumble_proto/Mumble.pb.o
make[2]: Leaving directory '/root/mumble/src/mumble_proto'
make[1]: Leaving directory '/root/mumble/src/mumble_proto'
cd src/murmur/murmur_ice/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /root/mumble/src/murmur/murmur_ice/murmur_ice.pro 'CONFIG+=no-client grpc static' ) && make -f Makefile
make[1]: Entering directory '/root/mumble/src/murmur/murmur_ice'
make -f Makefile.Release
make[2]: Entering directory '/root/mumble/src/murmur/murmur_ice'
slice2cpp --checksum -I/usr/local/share/Ice -I/usr/share/Ice/slice -I/usr/share/ice/slice -I/usr/share/slice -I/usr/share/Ice-3.7.2/slice/ ../Murmur.ice
g++ -c -pipe -fvisibility=hidden -Wall -Wextra -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -O2 -fPIC -std=gnu++1z -w -DRESTRICT=__restrict__ -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o ../../../release/.obj/murmur_ice/Murmur.o Murmur.cpp
rm -f ../../../release/libmurmur_ice.a
ar cqs ../../../release/libmurmur_ice.a ../../../release/.obj/murmur_ice/Murmur.o
make[2]: Leaving directory '/root/mumble/src/murmur/murmur_ice'
make[1]: Leaving directory '/root/mumble/src/murmur/murmur_ice'
cd src/murmur_grpcwrapper_protoc_plugin/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /root/mumble/src/murmur_grpcwrapper_protoc_plugin/murmur_grpcwrapper_protoc_plugin.pro 'CONFIG+=no-client grpc static' ) && make -f Makefile
make[1]: Entering directory '/root/mumble/src/murmur_grpcwrapper_protoc_plugin'
make -f Makefile.Release
make[2]: Entering directory '/root/mumble/src/murmur_grpcwrapper_protoc_plugin'
g++ -c -pipe -fvisibility=hidden -Wall -Wextra -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -I../mumble_proto -isystem ../mumble_proto -O2 -std=gnu++1z -pthread -Wall -W -D_REENTRANT -fPIC -DRESTRICT=__restrict__ -DMUMBLE_VERSION_STRING=1.3.0 -I. -I../../src -I. -I../mumble_proto -I../../3rdparty/arc4random-src -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o ../../release/.obj/murmur_grpcwrapper_protoc_plugin/main.o main.cpp
g++ -Wl,-z,relro -Wl,-z,now -Wl,-O1 -o ../../release/protoc-gen-murmur-grpcwrapper ../../release/.obj/murmur_grpcwrapper_protoc_plugin/main.o   -L/root/mumble/release -L/usr/lib/x86_64-linux-gnu/c++11 -lprotoc -lssl -lcrypto -ldl -lprotobuf -pthread -lz -lpthread
make[2]: Leaving directory '/root/mumble/src/murmur_grpcwrapper_protoc_plugin'
make[1]: Leaving directory '/root/mumble/src/murmur_grpcwrapper_protoc_plugin'
cd src/murmur/murmur_grpc/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /root/mumble/src/murmur/murmur_grpc/murmur_grpc.pro 'CONFIG+=no-client grpc static' ) && make -f Makefile
make[1]: Entering directory '/root/mumble/src/murmur/murmur_grpc'
make -f Makefile.Release
make[2]: Entering directory '/root/mumble/src/murmur/murmur_grpc'
/usr/bin/protoc --cpp_out=. -I. -I.. ../MurmurRPC.proto
/usr/bin/protoc --grpc_out=. --plugin=protoc-gen-grpc= -I. -I.. ../MurmurRPC.proto
: program not found or is not executable
--grpc_out: protoc-gen-grpc: Plugin failed with status code 1.
make[2]: *** [Makefile.Release:208: MurmurRPC.grpc.pb.cc] Error 1
make[2]: Leaving directory '/root/mumble/src/murmur/murmur_grpc'
make[1]: Leaving directory '/root/mumble/src/murmur/murmur_grpc'
make[1]: *** [Makefile:42: release] Error 2
make: *** [Makefile:180: sub-src-murmur-murmur_grpc-make_first-ordered] Error 2
The command '/bin/sh -c make' returned a non-zero code: 2

It looks like it can't find the protoc-gen-grpc plugin.

For reference, here's the Dockerfile I'm currently using:

FROM ubuntu:disco

# needed to install tzdata in disco
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
    build-essential \
    pkg-config \
    qt5-default \
    libboost-dev \
    libasound2-dev \
    libssl-dev \
    libspeechd-dev \
    libzeroc-ice-dev \
    libpulse-dev \
    libcap-dev \
    libprotobuf-dev \
    protobuf-compiler \
    libprotoc-dev \
    libogg-dev \
    libavahi-compat-libdnssd-dev \
    libsndfile1-dev \
    libgrpc++-dev \
    libxi-dev \
    qtcreator

COPY . /root/mumble
WORKDIR /root/mumble

RUN qmake -recursive main.pro CONFIG+="no-client grpc static"
RUN make

I had to add libprotoc-dev to the dependency list (originally from https://wiki.mumble.info/wiki/BuildingLinux#1.3.x).

gclawes commented 5 years ago

Fixed by installing protobuf-compiler-grpc

gclawes commented 5 years ago

Latest issue is related to building a static binary:

...
usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/libIce.a(DynamicLibrary.o): in function `IceInternal::DynamicLibrary::load(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
(.text+0x195): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: cannot find -lcares
/usr/bin/ld: cannot find -lQt5Network
/usr/bin/ld: cannot find -lQt5Sql
/usr/bin/ld: cannot find -lQt5Xml
/usr/bin/ld: cannot find -lQt5DBus
/usr/bin/ld: cannot find -lQt5Core
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile.Release:359: ../../release/murmurd] Error 1
make[2]: Leaving directory '/root/mumble/src/murmur'
make[1]: *** [Makefile:42: release] Error 2
make[1]: Leaving directory '/root/mumble/src/murmur'
make: *** [Makefile:223: sub-src-murmur-make_first-ordered] Error 2
The command '/bin/sh -c make' returned a non-zero code: 2
davidebeatrici commented 5 years ago

Unfortunately Ubuntu doesn't provide a statically built version of Qt, however there's a Docker Hub image available which provides it on top of the latest version of Ubuntu: https://hub.docker.com/r/fffaraz/qt

gclawes commented 5 years ago

In that case, I think I'll give up on the static build for now and stick with upstream ubuntu, it's still a fairly small image. I looked at alpine, and it looks like it doesn't have packages for ice or libspeechd (and probably others), so building with that would be tough.

davidebeatrici commented 5 years ago

Indeed.

gclawes commented 5 years ago

Interestingly, alpine builds with a bunch of features disabled: https://git.alpinelinux.org/aports/tree/community/mumble/APKBUILD

CONFIG+="no-speechd no-g15 no-update no-ice bundled-celt no-embed-qt-translations no-bundled-speex"

I'm guessing we want a more full-featured build for the official image.

davidebeatrici commented 5 years ago

The Alpine build is missing Ice, G15 and speechd.

The other options are there because it's a distribution package and thus it should use the system components (e.g. Speex), aside from bundled-celt which is not required because it's the default (opposite of no-bundled-celt).

gclawes commented 5 years ago

Gotcha. I'm using this config to build: CONFIG+="no-client grpc". From what I can tell G15 doesn't even come into play for a server-only build.

Getting towards the finish line here. It looks like make install isn't actually doing anything:

root@43196fac1061:~/mumble# make install
cd src/mumble_proto/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /root/mumble/src/mumble_proto/mumble_proto.pro 'CONFIG+=no-client grpc' ) && make -f Makefile install
make[1]: Entering directory '/root/mumble/src/mumble_proto'
make -f Makefile.Release install
make[2]: Entering directory '/root/mumble/src/mumble_proto'
make[2]: Nothing to be done for 'install'.
make[2]: Leaving directory '/root/mumble/src/mumble_proto'
make[1]: Leaving directory '/root/mumble/src/mumble_proto'
cd src/murmur/murmur_ice/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /root/mumble/src/murmur/murmur_ice/murmur_ice.pro 'CONFIG+=no-client grpc' ) && make -f Makefile install
make[1]: Entering directory '/root/mumble/src/murmur/murmur_ice'
make -f Makefile.Release install
make[2]: Entering directory '/root/mumble/src/murmur/murmur_ice'
make[2]: Nothing to be done for 'install'.
make[2]: Leaving directory '/root/mumble/src/murmur/murmur_ice'
make[1]: Leaving directory '/root/mumble/src/murmur/murmur_ice'
cd src/murmur_grpcwrapper_protoc_plugin/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /root/mumble/src/murmur_grpcwrapper_protoc_plugin/murmur_grpcwrapper_protoc_plugin.pro 'CONFIG+=no-client grpc' ) && make -f Makefile install
make[1]: Entering directory '/root/mumble/src/murmur_grpcwrapper_protoc_plugin'
make -f Makefile.Release install
make[2]: Entering directory '/root/mumble/src/murmur_grpcwrapper_protoc_plugin'
make[2]: Nothing to be done for 'install'.
make[2]: Leaving directory '/root/mumble/src/murmur_grpcwrapper_protoc_plugin'
make[1]: Leaving directory '/root/mumble/src/murmur_grpcwrapper_protoc_plugin'
cd src/murmur/murmur_grpc/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /root/mumble/src/murmur/murmur_grpc/murmur_grpc.pro 'CONFIG+=no-client grpc' ) && make -f Makefile install
make[1]: Entering directory '/root/mumble/src/murmur/murmur_grpc'
make -f Makefile.Release install
make[2]: Entering directory '/root/mumble/src/murmur/murmur_grpc'
make[2]: Nothing to be done for 'install'.
make[2]: Leaving directory '/root/mumble/src/murmur/murmur_grpc'
make[1]: Leaving directory '/root/mumble/src/murmur/murmur_grpc'
cd src/murmur/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /root/mumble/src/murmur/murmur.pro 'CONFIG+=no-client grpc' ) && make -f Makefile install
make[1]: Entering directory '/root/mumble/src/murmur'
make -f Makefile.Release install
make[2]: Entering directory '/root/mumble/src/murmur'
make[2]: Nothing to be done for 'install'.
make[2]: Leaving directory '/root/mumble/src/murmur'
make[1]: Leaving directory '/root/mumble/src/murmur'

What from the release/ directory actually needs to be installed? I'll copy that over to a clean build stage.

root@43196fac1061:~/mumble# ls -l release/
total 13139
-rw-r--r-- 1 root root  761012 May  8 01:13 libmumble_proto.a
-rw-r--r-- 1 root root 3813224 May  8 01:13 libmurmur_grpc.a
-rw-r--r-- 1 root root 2184568 May  8 01:13 libmurmur_ice.a
-rwxr-xr-x 1 root root 6386336 May  8 01:15 murmurd
-rwxr-xr-x 1 root root   47120 May  8 01:13 protoc-gen-murmur-grpcwrapper
davidebeatrici commented 5 years ago

From what I can tell G15 doesn't even come into play for a server-only build.

Correct, it's only for the client. It provides support for the LCD of certain Logitech devices, such as the G15 keyboard.

What from the release/ directory actually needs to be installed? I'll copy that over to a clean build stage.

Just murmurd.

gclawes commented 5 years ago

Got it running:

gclawes@enterprise ~/development/gclawes/mumble git:(docker*) $ docker run -it --rm murmur-test
<W>2019-05-08 03:44:52.450 SSL: OpenSSL version is 'OpenSSL 1.1.1b  26 Feb 2019'
<W>2019-05-08 03:44:52.451 Initializing settings from /home/murmur/.murmurd/murmur.ini (basepath /home/murmur/.murmurd)
<W>2019-05-08 03:44:52.482 MetaParams: TLS cipher preference is "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:AES256-SHA:AES128-SHA"
<W>2019-05-08 03:44:52.484 ServerDB: Opened SQLite database /home/murmur/murmur.sqlite
<W>2019-05-08 03:44:52.484 ServerDB: Using SQLite's default rollback journal.
<W>2019-05-08 03:44:53.688 Performed initial PBKDF2 benchmark. Will use 16000 iterations as default
<W>2019-05-08 03:44:53.688 Generating new tables...
<W>2019-05-08 03:44:53.719 OSInfo: Failed to execute lsb_release
<W>2019-05-08 03:44:53.719 Murmur 1.3.0 (Compiled by User) running on X11: Linux 4.20.14-gentoo-r1: Booting servers
<W>2019-05-08 03:44:53.758 1 => Password for 'SuperUser' set to 'tjxbJYKHQyE2'
<W>2019-05-08 03:44:53.788 1 => Server listening on 0.0.0.0:64738
<W>2019-05-08 03:44:53.793 1 => Failed to set IPV6_RECVPKTINFO for 0.0.0.0:64738
<W>2019-05-08 03:44:53.838 1 => Generating new server certificate.
<W>2019-05-08 03:44:53.875 1 => Announcing server via bonjour
<W>2019-05-08 03:44:53.884 1 => Not registering server as public

What's the best way to configure the default directories (for murmur.ini, sqlite db, etc)?

davidebeatrici commented 5 years ago

You can specify the path to the configuration file with the -ini parameter.

gclawes commented 5 years ago

I'll set that in the default CMD for the container.

gclawes commented 5 years ago

Opened PR. Once it's merged, can an official DockerHub repository be created?

davidebeatrici commented 5 years ago

Of course!

gclawes commented 5 years ago

Cool. My recommendation would be to use the :latest docker tag to mean "latest tagged release". If you want a docker tag for the latest commit to master, :snapshot or :edge is usually the pattern I've seen for that. We should probably manually push the first images then let DockerHub Builds handle any subsequent releases.

Once this is merged into master, this can be done with these commands:

$ git checkout 1.3.0-rc1
$ git checkout master -- Dockerfile
$ docker build -t mumble-voip/murmur:1.3.0-rc1 -t mumble-voip/murmur:latest .
$ docker push mumble-voip/murmur:1.3.0-rc1
$ docker push mumble-voip/murmur:latest

If you want to make me a collaborator on the DockerHub project (same username, gclawes), I can take care of this.

davidebeatrici commented 5 years ago

Thank you very much!

I created an organization and invited you, unfortunately I had to call it mumblevoip because mumble was already taken and only alphanumeric characters are allowed.

gclawes commented 5 years ago

Interesting. It looks like the mumble organization links to http://mumble.info/.

Does it make sense to rename the image to mumblevoip/murmur to indicate that it's the server component only?

davidebeatrici commented 5 years ago

Definitely, maybe renaming it to mumblevoip/mumble-server would be even better.

gclawes commented 5 years ago

Can you also link the dockerhub repo (mumblevoip/mumble-server) to the mumblevoip/mumble GitHub account so I can configure auto-builds? I think that makes more sense than linking to my personal account.

davidebeatrici commented 5 years ago

I created a dedicated account and connected it to the Docker Hub organization.

gclawes commented 5 years ago

I see MumbleDockerBot connected to the docker repo, but it doesn't seem to have access to the github repo to pull for builds:

Capture

davidebeatrici commented 5 years ago

It seems to be a Docker Hub issue, even with my GitHub account it doesn't show any repositories.

gclawes commented 5 years ago

I'll push the images for mumblevoip/mumble:1.3.0-rc1/mumblevoip/mumble:latest manually for now

gclawes commented 5 years ago

I think this may be the procedure to grant DockerHub access to the mumble-voip GitHub organization: https://docs.docker.com/docker-hub/builds/link-source/#grant-access-to-a-github-organization

davidebeatrici commented 5 years ago

I granted access to the organization, but the issue persists.

gclawes commented 5 years ago

I'm not seeing the mumble-voip organization available in the builds menu, just MumbleDockerBot:

Screen Shot 2019-05-10 at 1 40 13 PM
davidebeatrici commented 5 years ago

xM8WVqaG commented 5 years ago

Was any attempt made to claim the mumble organisation? Looking at the Docker Terms of Service under 4. Usernames they might be able to give you the handle:

4.1 We reserve the right to reclaim usernames on behalf of businesses or individuals that hold legal claim or trademark to those usernames. Accounts using business names and/or logos that may be considered misleading to others may be permanently suspended. We also reserve the right to reclaim usernames using Docker trademarks or usernames that violate the Docker Trademark Guidelines (the “Trademark Guidelines”), which are hereby incorporated into these Terms by reference.

4.3 Username Squatting. You may not and may not allow any third party to engage in username squatting. Accounts that are inactive for more than six months may be terminated at our discretion and without further notice. We take into account several factors when determining what conduct is considered to be username squatting including, without limitation: a. The number of accounts created b. Creating accounts for the purpose of preventing others from using those account names c. Creating accounts for the purpose of selling those accounts

Seeing as the account doesn't have any public repos it doesn't look like it's active.

krono-i2 commented 4 years ago

How can I find the official docker repo? Thank you

Krzmbrzl commented 4 years ago

@krono86 the Dockerfile is here: https://github.com/mumble-voip/mumble/blob/master/Dockerfile

Is that what you meant?

Avatat commented 4 years ago

@krono86, we don't have an official Docker repository. As @Krzmbrzl mentioned - you can use Dockerfile from Mumble's git repository, to build Docker image.

@Krzmbrzl, @davidebeatrici, @Kissaki, we should think about adding an official Murmur image to Docker Hub. I could try to do that.

krono-i2 commented 4 years ago

An official Murmur image to Docker Hub would be great!

krono-i2 commented 4 years ago

I'm traying to create the container using docker-compose.

Here my Dockerfile:

FROM ubuntu:latest

# needed to install tzdata in disco
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
    build-essential \
    pkg-config \
    qt5-default \
    libboost-dev \
    libasound2-dev \
    libssl-dev \
    libspeechd-dev \
    libzeroc-ice-dev \
    libpulse-dev \
    libcap-dev \
    libprotobuf-dev \
    protobuf-compiler \
    protobuf-compiler-grpc \
    libprotoc-dev \
    libogg-dev \
    libavahi-compat-libdnssd-dev \
    libsndfile1-dev \
    libgrpc++-dev \
    libxi-dev \
    libbz2-dev \
    qtcreator

COPY . /root/mumble
WORKDIR /root/mumble

RUN qmake -recursive main.pro CONFIG+="no-client grpc"
RUN make release

# Clean distribution stage
FROM ubuntu:latest

RUN adduser murmur
RUN apt-get update && apt-get install -y \
    libcap2 \
    libzeroc-ice3.7 \
    '^libprotobuf[0-9]+$' \
    '^libgrpc[0-9]+$' \
    libgrpc++1 \
    libavahi-compat-libdnssd1 \
    libqt5core5a \
    libqt5network5 \
    libqt5sql5 \
    libqt5xml5 \
    libqt5dbus5 \
    && rm -rf /var/lib/apt/lists/*

COPY --from=0 /root/mumble/release/murmurd /usr/bin/murmurd
COPY --from=0 /root/mumble/scripts/murmur.ini /etc/murmur/murmur.ini

RUN mkdir /var/lib/murmur && \
    chown murmur:murmur /var/lib/murmur && \
    sed -i 's/^database=$/database=\/var\/lib\/murmur\/murmur.sqlite/' /etc/murmur/murmur.ini

EXPOSE 64738/tcp 64738/udp 50051
USER murmur

CMD /usr/bin/murmurd -v -fg -ini /etc/murmur/murmur.ini

and my docker-compose.yml:

version: '3'
services:
  mumble:
    build: .
    ports:
      - "64738:64738/tcp"
      - "64738:64738/udp"
      - "50051:50051"

I obtain an error:

Building mumble
Step 1/16 : FROM ubuntu:latest
 ---> 4e5021d210f6
Step 2/16 : ENV DEBIAN_FRONTEND=noninteractive
 ---> Using cache
 ---> 208d15024546
Step 3/16 : RUN apt-get update && apt-get install -y    build-essential     pkg-config  qt5-default     libboost-dev    libasound2-dev  libssl-dev  libspeechd-dev  libzeroc-ice-dev    libpulse-dev    libcap-dev  libprotobuf-dev     protobuf-compiler   protobuf-compiler-grpc  libprotoc-dev   libogg-dev  libavahi-compat-libdnssd-dev    libsndfile1-dev     libgrpc++-dev   libxi-dev   libbz2-dev  qtcreator
 ---> Using cache
 ---> ccdab6adcbc0
Step 4/16 : COPY . /root/mumble
 ---> 9012aafe26c0
Step 5/16 : WORKDIR /root/mumble
 ---> Running in 1efdf1ceabcb
Removing intermediate container 1efdf1ceabcb
 ---> 81ff8e0cbb71
Step 6/16 : RUN qmake -recursive main.pro CONFIG+="no-client grpc"
 ---> Running in a580d5b9625b
Cannot find file: main.pro.
ERROR: Service 'mumble' failed to build: The command '/bin/sh -c qmake -recursive main.pro CONFIG+="no-client grpc"' returned a non-zero code: 2

It seams that main.pro is not found. What's happening?

Krzmbrzl commented 4 years ago

It seams that main.pro is not found. What's happening?

I assume that a) the source tree isn't present or b) the qmake command is not run from the root of the Mumble-repo

krono-i2 commented 4 years ago

Ok, it there was a problem with the rights. Now I have an other error:

Makefile:453: recipe for target 'sub-src-murmur-release_ordered' failed
{standard input}: Assembler messages:
{standard input}:153802: Warning: end of file not at end of a line; newline inserted
{standard input}:154356: Error: invalid operands (*UND* and .gcc_except_table sections) for `-'
{standard input}:154372: Error: invalid operands (.text and *UND* sections) for `-'
g++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-7/README.Bugs> for instructions.
make[2]: *** [../../release/.obj/murmur/MurmurGRPCImpl.o] Error 4
make[1]: *** [release] Error 2
make: *** [sub-src-murmur-release_ordered] Error 2
ERROR: Service 'mumble' failed to build: The command '/bin/sh -c make release' returned a non-zero code: 2
Krzmbrzl commented 4 years ago

g++: internal compiler error: Killed (program cc1plus) Please submit a full bug report, with preprocessed source if appropriate.

I guess you should do just that. Seems like you have encountered a bug in gcc

toby63 commented 3 years ago

@Krzmbrzl

Edit: Ok the Dockerfile exists...so I guess someone would only need to upload it...

It gets stranger, there is a user that kind of claims to be you: https://hub.docker.com/u/mumblevoip

If thats the case, you could just update the file, I guess.

Krzmbrzl commented 3 years ago

@davidebeatrici what's the status of the Docker bot that is mentioned further up?