diff mbox series

[3/5] tools/build-docs-container: add CentOS Stream 9 support

Message ID 20251205-build-docs-container-tlmgr-v1-3-de30623e664d@bootlin.com
State New
Headers show
Series Add missing CentOS Stream / RockyLinux distros to the system-requirements.rst doc | expand

Commit Message

Antonin Godard Dec. 5, 2025, 2:51 p.m. UTC
Add support for building the docs in CentOS Stream 9. As there are no
official images for CentOS Stream, use tgagor/centos from dockerhub
which is actively updated.

The centosstream_essential.sh centosstream_docs.sh files are based on
the almalinux files.

Introduce a new installation script: tlmgr_docs_pdf.sh. As I wasn't able
to locate all the necessary tex packages to build the documentation in a
PDF format, I resorted to using what is used on the Autobuilder: a local
installation of texlive packages through tlmgr.

This will allow us to provide a way of building the docs as PDF for the
distros that lack this support at the moment.

Use a new Containerfile.stream file as it needs TEXTOOLDIR exported for
installing the texlive tools in a known directory (we assume the base
dnf Containerfile does not need it, as it is currently the case for
Fedora).

Signed-off-by: Antonin Godard <antonin.godard@bootlin.com>
---
 documentation/ref-manual/system-requirements.rst   | 31 ++++++++++++++++++++
 documentation/tools/build-docs-container           |  9 ++++++
 .../tools/containerfiles/Containerfile.apt         |  5 +++-
 .../tools/containerfiles/Containerfile.dnf         |  5 +++-
 .../tools/containerfiles/Containerfile.stream      | 34 ++++++++++++++++++++++
 .../tools/containerfiles/Containerfile.zypper      |  5 +++-
 documentation/tools/containerfiles/entrypoint      |  6 ++++
 .../host_packages_scripts/centosstream_docs.sh     |  1 +
 .../centosstream_essential.sh                      |  5 ++++
 .../tools/host_packages_scripts/tlmgr_docs_pdf.sh  |  7 +++++
 10 files changed, 105 insertions(+), 3 deletions(-)

Comments

Quentin Schulz Dec. 5, 2025, 3:29 p.m. UTC | #1
Hi Antonin,

On 12/5/25 3:51 PM, Antonin Godard via lists.yoctoproject.org wrote:

[...]

> diff --git a/documentation/tools/build-docs-container b/documentation/tools/build-docs-container
> index 7d25b15b9..d753e2153 100755
> --- a/documentation/tools/build-docs-container
> +++ b/documentation/tools/build-docs-container
> @@ -41,6 +41,7 @@ $0 OCI_IMAGE [make arguments...]
>        - fedora:42
>        - leap:15.5
>        - leap:15.6
> +     - tgagor/centos:stream9

quay.io/centos/centos:stream9 is probably better?

We would need to remove the docker.io prefix from the ARG_FROM and make 
it configurable but that should be easy to do.

[...]

> diff --git a/documentation/tools/containerfiles/entrypoint b/documentation/tools/containerfiles/entrypoint
> new file mode 100644
> index 000000000..97ee93c29
> --- /dev/null
> +++ b/documentation/tools/containerfiles/entrypoint
> @@ -0,0 +1,6 @@
> +#!/usr/bin/env sh
> +
> +tldir=/opt/docs-build-tex-tools/tl/bin/x86_64-linux
> +[ -d $tldir ] && export PATH="$PATH:$tldir"
> +
> +make -C documentation/ "$@"

Doesn't

ENV PATH="$PATH:$TEXTOOLDIR/tl/bin/x86_64-linux"

in Containerfile.stream work just fine instead of having to go through 
an ENTRYPOINT?

This also makes the instructions x86_64-only. I have no clue if one can 
run the current instructions on Aarch64 and make it work, but this for 
sure won't help.

> diff --git a/documentation/tools/host_packages_scripts/centosstream_docs.sh b/documentation/tools/host_packages_scripts/centosstream_docs.sh
> new file mode 100644
> index 000000000..9202afc5b
> --- /dev/null
> +++ b/documentation/tools/host_packages_scripts/centosstream_docs.sh
> @@ -0,0 +1 @@
> +sudo dnf install -y git glibc-locale-source librsvg2-tools make python3-pip which
> diff --git a/documentation/tools/host_packages_scripts/centosstream_essential.sh b/documentation/tools/host_packages_scripts/centosstream_essential.sh
> new file mode 100644
> index 000000000..e38fa93c2
> --- /dev/null
> +++ b/documentation/tools/host_packages_scripts/centosstream_essential.sh
> @@ -0,0 +1,5 @@
> +sudo dnf install -y epel-release
> +sudo yum install -y dnf-plugins-core
> +sudo dnf config-manager --set-enabled crb
> +sudo dnf makecache
> +sudo dnf install -y bzip2 ccache chrpath cpio cpp diffstat diffutils gawk gcc gcc-c++ git glibc-devel glibc-langpack-en gzip libacl make patch perl perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue python3 python3-GitPython python3-jinja2 python3-pexpect python3-pip rpcgen socat tar texinfo unzip wget which xz zstd
> diff --git a/documentation/tools/host_packages_scripts/tlmgr_docs_pdf.sh b/documentation/tools/host_packages_scripts/tlmgr_docs_pdf.sh
> new file mode 100644
> index 000000000..f3b81da3e
> --- /dev/null
> +++ b/documentation/tools/host_packages_scripts/tlmgr_docs_pdf.sh
> @@ -0,0 +1,7 @@
> +textooldir=${TEXTOOLDIR:-"./docs-build-tex-tools"}
> +mkdir -p "$textooldir"/tl
> +wget https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz -O "$textooldir"/install-tl-unx.tar.gz
> +zcat < "$textooldir"/install-tl-unx.tar.gz | tar xf - -C "$textooldir"

Can't this simply be

tar xzf "$textooldir"/install-tl-unx.tar.gz -C "$textooldir"

?

Cheers,
Quentin
diff mbox series

Patch

diff --git a/documentation/ref-manual/system-requirements.rst b/documentation/ref-manual/system-requirements.rst
index 9ed29a1df..02b6a0cb9 100644
--- a/documentation/ref-manual/system-requirements.rst
+++ b/documentation/ref-manual/system-requirements.rst
@@ -266,6 +266,37 @@  documentation in PDF format:
 .. literalinclude:: ../tools/host_packages_scripts/almalinux_docs_pdf.sh
    :language: shell
 
+CentOS Stream Packages
+----------------------
+
+Here are the packages needed to build an image on a headless system
+with a supported CentOS Stream distribution:
+
+.. literalinclude:: ../tools/host_packages_scripts/centosstream_essential.sh
+   :language: shell
+
+Here are the packages needed to build Project documentation manuals:
+
+.. literalinclude:: ../tools/host_packages_scripts/centosstream_docs.sh
+   :language: shell
+
+.. literalinclude:: ../tools/host_packages_scripts/pip3_docs.sh
+   :language: shell
+
+In addition to the previous packages, the following TeX Live packages
+are needed to build the documentation in PDF format and can be installed with
+the `TeX Live package manager <https://tug.org/texlive/tlmgr.html>`__:
+
+.. literalinclude:: ../tools/host_packages_scripts/tlmgr_docs_pdf.sh
+   :language: shell
+
+Before building the documentation PDF, setup the ``PATH`` to use the installed
+packages:
+
+.. code-block:: console
+
+   $ export PATH="${PATH}:${textooldir}/tl/bin/x86_64-linux"
+
 .. _system-requirements-buildtools:
 
 Required Git, tar, Python, make and gcc Versions
diff --git a/documentation/tools/build-docs-container b/documentation/tools/build-docs-container
index 7d25b15b9..d753e2153 100755
--- a/documentation/tools/build-docs-container
+++ b/documentation/tools/build-docs-container
@@ -41,6 +41,7 @@  $0 OCI_IMAGE [make arguments...]
      - fedora:42
      - leap:15.5
      - leap:15.6
+     - tgagor/centos:stream9
      - ubuntu:22.04
      - ubuntu:24.04
      - ubuntu:25.04
@@ -119,6 +120,13 @@  main ()
       docs_pdf=opensuse_docs_pdf.sh
       pip3=pip3_docs.sh
       ;;
+    "tgagor/centos:stream9"*)
+      containerfile=Containerfile.stream
+      essential=centosstream_essential.sh
+      docs=centosstream_docs.sh
+      docs_pdf=tlmgr_docs_pdf.sh
+      pip3=pip3_docs.sh
+      ;;
     "ubuntu:22.04"*|\
     "ubuntu:24.04"*|\
     "ubuntu:25.04"*|\
@@ -143,6 +151,7 @@  main ()
     --build-arg DOCS="host_packages_scripts/$docs" \
     --build-arg DOCS_PDF="host_packages_scripts/$docs_pdf" \
     --build-arg PIP3="host_packages_scripts/${pip3:-}" \
+    --build-arg ENTRY="containerfiles/entrypoint" \
     --file "$SCRIPT_DIR/containerfiles/$containerfile" \
     "$SCRIPT_DIR"
 
diff --git a/documentation/tools/containerfiles/Containerfile.apt b/documentation/tools/containerfiles/Containerfile.apt
index a573786f0..c3e1660a6 100644
--- a/documentation/tools/containerfiles/Containerfile.apt
+++ b/documentation/tools/containerfiles/Containerfile.apt
@@ -5,6 +5,7 @@  ARG INCLUDE_ESSENTIAL_PACKAGES=0
 ARG ESSENTIAL=ubuntu_essential.sh
 ARG DOCS=ubuntu_docs.sh
 ARG DOCS_PDF=ubuntu_docs_pdf.sh
+ARG ENTRY=entrypoint
 
 ENV DEBIAN_FRONTEND=noninteractive
 ARG TZ=Europe/Vienna
@@ -26,5 +27,7 @@  RUN ln -fs "/usr/share/zoneinfo/$TZ" /etc/localtime \
 
 RUN git config --global --add safe.directory /docs
 
-ENTRYPOINT ["/usr/bin/env", "make", "-C", "documentation/"]
+COPY --chmod=777 $ENTRY /entrypoint
+
+ENTRYPOINT ["/entrypoint"]
 CMD ["publish"]
diff --git a/documentation/tools/containerfiles/Containerfile.dnf b/documentation/tools/containerfiles/Containerfile.dnf
index 65c526705..d00bb5adc 100644
--- a/documentation/tools/containerfiles/Containerfile.dnf
+++ b/documentation/tools/containerfiles/Containerfile.dnf
@@ -6,6 +6,7 @@  ARG ESSENTIAL=fedora_essential.sh
 ARG DOCS=fedora_docs.sh
 ARG DOCS_PDF=fedora_docs_pdf.sh
 ARG PIP3=pip3_docs.sh
+ARG ENTRY=entrypoint
 
 # relative to the location of the dockerfile
 COPY --chmod=777 ${ESSENTIAL} /temp/host_packages_essential.sh
@@ -25,5 +26,7 @@  RUN dnf update -y \
 
 RUN git config --global --add safe.directory /docs
 
-ENTRYPOINT ["/usr/bin/env", "make", "-C", "documentation/"]
+COPY --chmod=777 $ENTRY /entrypoint
+
+ENTRYPOINT ["/entrypoint"]
 CMD ["publish"]
diff --git a/documentation/tools/containerfiles/Containerfile.stream b/documentation/tools/containerfiles/Containerfile.stream
new file mode 100644
index 000000000..5968f94ba
--- /dev/null
+++ b/documentation/tools/containerfiles/Containerfile.stream
@@ -0,0 +1,34 @@ 
+ARG ARG_FROM=fedora:40 # default value to avoid warning
+FROM $ARG_FROM
+
+ARG INCLUDE_ESSENTIAL_PACKAGES=0
+ARG ESSENTIAL=fedora_essential.sh
+ARG DOCS=fedora_docs.sh
+ARG DOCS_PDF=fedora_docs_pdf.sh
+ARG PIP3=pip3_docs.sh
+ARG ENTRY=entrypoint
+
+ENV TEXTOOLDIR=/opt/docs-build-tex-tools
+
+# relative to the location of the dockerfile
+COPY --chmod=777 ${ESSENTIAL} /temp/host_packages_essential.sh
+COPY --chmod=777 ${DOCS} /temp/host_packages_docs.sh
+COPY --chmod=777 ${DOCS_PDF} /temp/host_packages_docs_pdf.sh
+COPY --chmod=777 ${PIP3} /temp/pip3_docs.sh
+
+RUN dnf update -y \
+ && dnf install -y sudo \
+ && if [ "$INCLUDE_ESSENTIAL_PACKAGES" = "1" ]; then yes | /temp/host_packages_essential.sh; fi \
+ && yes | /temp/host_packages_docs.sh \
+ && yes | /temp/host_packages_docs_pdf.sh \
+ && yes | /temp/pip3_docs.sh \
+ && dnf autoremove -y \
+ && dnf clean all -y \
+ && rm -rf /temp
+
+RUN git config --global --add safe.directory /docs
+
+COPY --chmod=777 $ENTRY /entrypoint
+
+ENTRYPOINT ["/entrypoint"]
+CMD ["publish"]
diff --git a/documentation/tools/containerfiles/Containerfile.zypper b/documentation/tools/containerfiles/Containerfile.zypper
index 3850b9ff9..d7302ef6f 100644
--- a/documentation/tools/containerfiles/Containerfile.zypper
+++ b/documentation/tools/containerfiles/Containerfile.zypper
@@ -6,6 +6,7 @@  ARG ESSENTIAL=opensuse_essential.sh
 ARG DOCS=opensuse_docs.sh
 ARG DOCS_PDF=opensuse_docs_pdf.sh
 ARG PIP3=pip3_docs.sh
+ARG ENTRY=entrypoint
 
 # relative to the location of the dockerfile
 COPY --chmod=777 ${ESSENTIAL} /temp/host_packages_essential.sh
@@ -32,5 +33,7 @@  RUN zypper update -y \
 
 RUN git config --global --add safe.directory /docs
 
-ENTRYPOINT ["/usr/bin/env", "make", "-C", "documentation/"]
+COPY --chmod=777 $ENTRY /entrypoint
+
+ENTRYPOINT ["/entrypoint"]
 CMD ["publish"]
diff --git a/documentation/tools/containerfiles/entrypoint b/documentation/tools/containerfiles/entrypoint
new file mode 100644
index 000000000..97ee93c29
--- /dev/null
+++ b/documentation/tools/containerfiles/entrypoint
@@ -0,0 +1,6 @@ 
+#!/usr/bin/env sh
+
+tldir=/opt/docs-build-tex-tools/tl/bin/x86_64-linux
+[ -d $tldir ] && export PATH="$PATH:$tldir"
+
+make -C documentation/ "$@"
diff --git a/documentation/tools/host_packages_scripts/centosstream_docs.sh b/documentation/tools/host_packages_scripts/centosstream_docs.sh
new file mode 100644
index 000000000..9202afc5b
--- /dev/null
+++ b/documentation/tools/host_packages_scripts/centosstream_docs.sh
@@ -0,0 +1 @@ 
+sudo dnf install -y git glibc-locale-source librsvg2-tools make python3-pip which
diff --git a/documentation/tools/host_packages_scripts/centosstream_essential.sh b/documentation/tools/host_packages_scripts/centosstream_essential.sh
new file mode 100644
index 000000000..e38fa93c2
--- /dev/null
+++ b/documentation/tools/host_packages_scripts/centosstream_essential.sh
@@ -0,0 +1,5 @@ 
+sudo dnf install -y epel-release
+sudo yum install -y dnf-plugins-core
+sudo dnf config-manager --set-enabled crb
+sudo dnf makecache
+sudo dnf install -y bzip2 ccache chrpath cpio cpp diffstat diffutils gawk gcc gcc-c++ git glibc-devel glibc-langpack-en gzip libacl make patch perl perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue python3 python3-GitPython python3-jinja2 python3-pexpect python3-pip rpcgen socat tar texinfo unzip wget which xz zstd
diff --git a/documentation/tools/host_packages_scripts/tlmgr_docs_pdf.sh b/documentation/tools/host_packages_scripts/tlmgr_docs_pdf.sh
new file mode 100644
index 000000000..f3b81da3e
--- /dev/null
+++ b/documentation/tools/host_packages_scripts/tlmgr_docs_pdf.sh
@@ -0,0 +1,7 @@ 
+textooldir=${TEXTOOLDIR:-"./docs-build-tex-tools"}
+mkdir -p "$textooldir"/tl
+wget https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz -O "$textooldir"/install-tl-unx.tar.gz
+zcat < "$textooldir"/install-tl-unx.tar.gz | tar xf - -C "$textooldir"
+"$textooldir"/install-tl-*/install-tl --scheme=small --texdir="${textooldir}"/tl --no-interaction
+PATH="$PATH:${textooldir}/tl/bin/x86_64-linux" tlmgr install titlesec varwidth tabulary needspace upquote framed capt-of wrapfig fncychap gnu-freefont ctex latexmk nimbus15
+rm -r "$textooldir"/install-tl*