summaryrefslogtreecommitdiff
path: root/docker/Dockerfile
blob: 8598b80821df4f59f4dcf9153caaf651e0498061 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# Must be run with --privileged flag
# Recommended to run the container with a volume mapped
# in order to easy exprort images built to "external" world
FROM debian:12
LABEL authors="VyOS Maintainers <maintainers@vyos.io>"

ENV DEBIAN_FRONTEND noninteractive

# Standard shell should be bash not dash
RUN echo "dash dash/sh boolean false" | debconf-set-selections && \
    dpkg-reconfigure dash

RUN apt-get update && apt-get install -y \
    vim \
    nano \
    git \
    mc \
    make \
    python3-pip \
    latexmk \
    texlive-latex-recommended \
    texlive-fonts-recommended \
    texlive-latex-extra \
    sudo \
    gosu \
    graphviz \
    curl \
    dos2unix

# PDF-build toolchain extras, installed with --no-install-recommends (Trivy
# DS-0029) on a separate line — the texlive line above deliberately keeps
# recommends, which carry font packages LaTeX needs:
# - imagemagick + librsvg2-bin: sphinx.ext.imgconverter via docker/im-convert.sh
# - poppler-utils: pdfinfo for the docs-build workflow's page-count validation
RUN apt-get update && apt-get install -y --no-install-recommends \
    imagemagick \
    librsvg2-bin \
    poppler-utils

RUN pip3 install --break-system-packages \
    Sphinx \
    sphinx-rtd-theme \
    sphinx-autobuild \
    sphinx-notfound-page \
    lxml \
    myst-parser \
    sphinx_design \
    sphinx_llms_txt \
    sphinx_sitemap

# Cleanup
RUN rm -rf /var/lib/apt/lists/*

EXPOSE 8000

# Allow password-less 'sudo' for all users in group 'sudo'
RUN sed "s/^%sudo.*/%sudo\tALL=(ALL) NOPASSWD:ALL/g" -i /etc/sudoers

COPY entrypoint.sh /usr/local/bin/entrypoint.sh

# We need to convert the entrypoint with appropriate line endings, else
# there will be an error:
#     standard_init_linux.go:175: exec user process caused
#     "no such file or directory"
RUN dos2unix /usr/local/bin/entrypoint.sh

# sphinx.ext.imgconverter's `image_converter` command (docs/conf.py sets
# image_converter = 'im-convert'). Routes .svg sources to rsvg-convert
# directly, since Debian's imagemagick package is built --without-rsvg and
# its built-in SVG coder can't handle embedded base64 raster <image>
# elements. See docker/im-convert.sh for the full rationale.
COPY im-convert.sh /usr/local/bin/im-convert
RUN dos2unix /usr/local/bin/im-convert && chmod +x /usr/local/bin/im-convert

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]