Docker Alpine:latest build from Source ?
#1
Hello, i wan to compile Kodi from Source in alpine in docker container.
Here is my Dockerfile:
https://pastebin.com/DvAP6aUF
I know its messy, but it is a test.

It fails to:
Code:
Step 13/14 : RUN cd /tmp/src/kodi && make && make install
---> Running in 4cb3cc7f22a0
CPP     xbmc/cores/DllLoader/exports/emu_dummy.o
CPP     xbmc/cores/DllLoader/exports/emu_kernel32.o
CPP     xbmc/cores/DllLoader/exports/emu_msvcrt.o
In file included from emu_msvcrt.cpp:67:0:
emu_msvcrt.h:93:3: error: '__off64_t' does not name a type
   __off64_t dll_lseeki64(int fd, __off64_t lPos, int iWhence);
   ^~~~~~~~~
emu_msvcrt.h:94:3: error: '__off_t' does not name a type
   __off_t dll_lseek(int fd, __off_t lPos, int iWhence);
   ^~~~~~~
In file included from emu_msvcrt.cpp:70:0:
util/EmuFileWrapper.h:50:11: error: field 'file_emu' has incomplete type 'FILE {aka _IO_FILE}'
   FILE    file_emu;
           ^~~~~~~~
In file included from /usr/include/stdio.h:22:0,
                 from /usr/include/fortify/stdio.h:20,
                 from emu_msvcrt.cpp:22:
/usr/include/bits/alltypes.h:356:16: note: forward declaration of 'FILE {aka struct _IO_FILE}'
typedef struct _IO_FILE FILE;
                ^~~~~~~~
emu_msvcrt.cpp:668:3: error: '__off64_t' does not name a type
   __off64_t dll_lseeki64(int fd, __off64_t lPos, int iWhence)
   ^~~~~~~~~
emu_msvcrt.cpp:688:3: error: '__off_t' does not name a type
   __off_t dll_lseek(int fd, __off_t lPos, int iWhence)
   ^~~~~~~
emu_msvcrt.cpp: In function 'void dll_rewind(FILE*)':
emu_msvcrt.cpp:709:35: error: 'dll_lseeki64' was not declared in this scope
       dll_lseeki64(fd, 0, SEEK_SET);
                                   ^
emu_msvcrt.cpp: In function 'FILE* dll_fopen(const char*, const char*)':
emu_msvcrt.cpp:1218:26: error: 'MNTTAB' was not declared in this scope
     ||  strcmp(filename, MNTTAB) == 0)
                          ^~~~~~
emu_msvcrt.cpp: In function 'int dll_fseek64(FILE*, off_t, int)':
emu_msvcrt.cpp:1326:42: error: 'dll_lseeki64' was not declared in this scope
       if (dll_lseeki64(fd, offset, origin) != -1)
                                          ^
emu_msvcrt.cpp: In function 'int dll_fgetpos(FILE*, fpos_t*)':
emu_msvcrt.cpp:1628:10: error: 'fpos_t {aka union _G_fpos64_t}' has no member named '__pos'
     pos->__pos = (off_t)tmpPos.__pos;
          ^~~~~
emu_msvcrt.cpp:1628:32: error: 'fpos_t {aka union _G_fpos64_t}' has no member named '__pos'
     pos->__pos = (off_t)tmpPos.__pos;
                                ^~~~~
emu_msvcrt.cpp: In function 'int dll_fgetpos64(FILE*, fpos_t*)':
emu_msvcrt.cpp:1641:12: error: 'fpos_t {aka union _G_fpos64_t}' has no member named '__pos'
       pos->__pos = pFile->GetPosition();
            ^~~~~
emu_msvcrt.cpp: In function 'int dll_fsetpos64(FILE*, const fpos_t*)':
emu_msvcrt.cpp:1663:29: error: '__off64_t' was not declared in this scope
       if (dll_lseeki64(fd, (__off64_t)pos->__pos, SEEK_SET) >= 0)
                             ^~~~~~~~~
emu_msvcrt.cpp:1663:59: error: 'dll_lseeki64' was not declared in this scope
       if (dll_lseeki64(fd, (__off64_t)pos->__pos, SEEK_SET) >= 0)
                                                           ^
emu_msvcrt.cpp: In function 'int dll_fsetpos(FILE*, const fpos_t*)':
emu_msvcrt.cpp:1696:14: error: 'fpos_t {aka union _G_fpos64_t}' has no member named '__pos'
       tmpPos.__pos = (off64_t)(pos->__pos);
              ^~~~~
emu_msvcrt.cpp:1696:37: error: 'const fpos_t {aka const union _G_fpos64_t}' has no member named '__pos'
       tmpPos.__pos = (off64_t)(pos->__pos);
                                     ^~~~~
make[1]: *** [/tmp/src/kodi/Makefile.include:98: emu_msvcrt.o] Error 1
make: *** [Makefile:436: xbmc/cores/DllLoader/exports/exports.a] Error 2

I want to run Kodi as:
sudo docker run -it --env="DISPLAY=:0" --name=kodi --hostname=kodi --user=root --volume="/tmp/test:/home/$USER" --volume="/etc/group:/etc/group:ro" --device="/dev/dri/card0" --device="/dev/snd" --volume="/etc/passwd:/etc/passwd:ro" --volume="/etc/shadow:/etc/shadow:ro" --volume="/etc/sudoers.d:/etc/sudoers.d:ro" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" kodi

Will it even work in Docker container ? Or its nonsens and its better to run it on standalone host?
Thanks
Reply
#2
In general, while running kodi in a container might be possible, I'd advise against it as there will be issues with random stuff not working.
If you really want to try, you'd better use ubuntu as a base, since alpine is very bare bones and uses an alternative libc (iirc)
Reply

Logout Mark Read Team Forum Stats Members Help
Docker Alpine:latest build from Source ?0