114 lines
3.9 KiB
Docker
114 lines
3.9 KiB
Docker
# currently where is no own frontend, so we have to take NanoKVM UI
|
|
FROM node:20-alpine as frontend
|
|
ENV PNPM_HOME="/pnpm"
|
|
ENV PATH="$PNPM_HOME/bin:$PATH"
|
|
RUN corepack enable
|
|
RUN apk add --update python3 make g++ git && rm -rf /var/cache/apk/*
|
|
COPY ./NanoKVM/web /web
|
|
RUN cd /web && pnpm install && pnpm build
|
|
RUN mv /web/dist /static
|
|
#RUN git clone -b rkkvm https://github.com/argakon/nanokvm
|
|
#RUN cd nanokvm/web && pnpm install && pnpm build
|
|
#RUN mv nanokvm/web/dist /static
|
|
|
|
FROM golang:alpine as backend
|
|
RUN apk add --no-cache git v4l-utils-dev build-base musl-dev gcc g++ make libc-dev linux-headers \
|
|
git cmake
|
|
RUN mkdir -p ~/dev && cd ~/dev && \
|
|
#git clone -b jellyfin-mpp --depth=1 https://github.com/nyanmisaka/mpp.git rkmpp && \
|
|
git clone --depth=1 https://github.com/rockchip-linux/mpp.git rkmpp && \
|
|
cd rkmpp && mkdir rkmpp_build && cd rkmpp_build && \
|
|
sed -i '/#include <errno.h>/a #include <cstdint>' ~/dev/rkmpp/mpp/vproc/vdpp/test/hwpq_test.cpp && \
|
|
cmake \
|
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DBUILD_SHARED_LIBS=ON \
|
|
-DBUILD_TEST=OFF \
|
|
-DVDPP_TEST=OFF \
|
|
.. && \
|
|
make -j $(nproc) && \
|
|
make install
|
|
COPY . /app
|
|
WORKDIR /app
|
|
RUN go mod download
|
|
RUN CGO_ENABLED=1 go build -o ./bin/ ./cmd/...
|
|
|
|
# we would use ffmpeg-rockchip from nyanmisaka with rockchip's mpp support
|
|
FROM alpine as ffmpeg
|
|
RUN apk add --no-cache \
|
|
autoconf \
|
|
automake \
|
|
g++ \
|
|
make \
|
|
gcc \
|
|
libc-dev \
|
|
libtool \
|
|
pkgconfig \
|
|
texinfo \
|
|
zlib-dev \
|
|
yasm \
|
|
coreutils \
|
|
nasm \
|
|
bash \
|
|
cmake \
|
|
git \
|
|
libdrm-dev ninja-build meson v4l-utils-dev wget build-base bsd-compat-headers musl-dev alsa-lib-dev libopusenc-dev
|
|
|
|
RUN mkdir -p ~/dev && cd ~/dev && \
|
|
#git clone -b jellyfin-mpp --depth=1 https://github.com/nyanmisaka/mpp.git rkmpp && \
|
|
git clone --depth=1 https://github.com/rockchip-linux/mpp.git rkmpp && \
|
|
cd rkmpp && mkdir rkmpp_build && cd rkmpp_build && \
|
|
sed -i '/#include <errno.h>/a #include <cstdint>' ~/dev/rkmpp/mpp/vproc/vdpp/test/hwpq_test.cpp && \
|
|
cmake \
|
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DBUILD_SHARED_LIBS=ON \
|
|
-DBUILD_TEST=OFF \
|
|
-DVDPP_TEST=OFF \
|
|
.. && \
|
|
make -j $(nproc) && \
|
|
make install
|
|
|
|
RUN mkdir -p ~/dev && cd ~/dev && \
|
|
git clone -b jellyfin-rga --depth=1 https://github.com/nyanmisaka/rk-mirrors.git rkrga && \
|
|
sed -i '/#include "im2d_api\/im2d.h"/a #define mmap64 mmap' rkrga/core/RockchipRga.cpp && \
|
|
meson setup rkrga rkrga_build \
|
|
--prefix=/usr \
|
|
--libdir=lib \
|
|
--buildtype=release \
|
|
--default-library=shared \
|
|
-Dcpp_args=-fpermissive \
|
|
-Dlibdrm=false \
|
|
-Dlibrga_demo=false && \
|
|
meson configure rkrga_build && \
|
|
ninja -C rkrga_build install
|
|
|
|
RUN mkdir -p ~/dev && cd ~/dev && \
|
|
git clone --depth=1 https://github.com/nyanmisaka/ffmpeg-rockchip.git ffmpeg && cd ffmpeg && \
|
|
./configure --prefix=/usr --enable-indev=v4l2 --enable-gpl --enable-version3 --enable-libdrm --enable-rkmpp --enable-rkrga --enable-alsa --enable-libopus \
|
|
&& \
|
|
make -j $(nproc) && make install
|
|
|
|
FROM pikvm/ustreamer:latest as ustreamer
|
|
|
|
FROM alpine
|
|
RUN apk add --no-cache portaudio alsa-utils \
|
|
libevent libjpeg-turbo libgpiod libbsd v4l-utils libdrm libopusenc
|
|
|
|
COPY --from=frontend /static /app/static
|
|
COPY --from=backend /app/bin/kvm /app/kvm
|
|
COPY --from=ustreamer /ustreamer/ustreamer /app/ustreamer
|
|
COPY --from=ffmpeg /usr/lib/librga.* /usr/lib
|
|
COPY --from=ffmpeg /usr/lib/librockchip_mpp.* /usr/lib
|
|
COPY --from=ffmpeg /usr/bin/ffmpeg /app/ffmpeg
|
|
COPY ./edid.hex /edid.hex
|
|
#COPY ./edid-audio.hex /edid.hex
|
|
#COPY ./edid-test.hex /edid.hex
|
|
#COPY ./edid-dell.hex /edid.hex NV24
|
|
COPY ./entry.sh /entry.sh
|
|
COPY ./hid.sh /hid.sh
|
|
RUN chmod +x /entry.sh && chmod +x /hid.sh
|
|
|
|
EXPOSE 8080
|
|
|
|
ENTRYPOINT ["/entry.sh"] |