From 83c8295c2a7a8f93917f7c1271c3870a25e56f50 Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Tue, 28 May 2024 05:00:40 +0800 Subject: [PATCH] added experimental sage image --- .gitea/workflows/build-jupyter-ganymede.yaml | 36 +++++++++++++ .../{build.yaml => build-jupyter-python.yaml} | 19 ++----- .gitea/workflows/build-jupyter-sage.yaml | 36 +++++++++++++ jupyter-sage/Dockerfile | 36 +++++++++++++ jupyter-sage/build.sh | 51 +++++++++++++++++++ 5 files changed, 164 insertions(+), 14 deletions(-) create mode 100644 .gitea/workflows/build-jupyter-ganymede.yaml rename .gitea/workflows/{build.yaml => build-jupyter-python.yaml} (62%) create mode 100644 .gitea/workflows/build-jupyter-sage.yaml create mode 100644 jupyter-sage/Dockerfile create mode 100644 jupyter-sage/build.sh diff --git a/.gitea/workflows/build-jupyter-ganymede.yaml b/.gitea/workflows/build-jupyter-ganymede.yaml new file mode 100644 index 0000000..01b1e96 --- /dev/null +++ b/.gitea/workflows/build-jupyter-ganymede.yaml @@ -0,0 +1,36 @@ +name: CI +on: + push: + branches: [ master ] + paths: + - 'jupyter-ganymede/*' + - '.gitea/workflows/build-jupyter-ganymede.yaml' +jobs: + "Build Jupyter Ganymede docker images": + runs-on: woryzen + steps: + - + name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + driver: docker-container + - + name: Login to Gitea container registry + uses: docker/login-action@v3 + with: + registry: gitea.woggioni.net + username: woggioni + password: ${{ secrets.PUBLISHER_TOKEN }} + - + name: Build and push jupyter-ganymede image + uses: docker/build-push-action@v5.3.0 + with: + context: "{{defaultContext}}:jupyter-ganymede" + platforms: linux/amd64,linux/arm64 + push: true + tags: gitea.woggioni.net/woggioni/jupyter-ganymede:latest + cache-from: type=registry,ref=gitea.woggioni.net/woggioni/jupyter-ganymede:buildx + cache-to: type=registry,mode=max,compression=zstd,image-manifest=true,oci-mediatypes=true,ref=gitea.woggioni.net/woggioni/jupyter-ganymede:buildx diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build-jupyter-python.yaml similarity index 62% rename from .gitea/workflows/build.yaml rename to .gitea/workflows/build-jupyter-python.yaml index 2e9ea36..39a289f 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build-jupyter-python.yaml @@ -2,8 +2,11 @@ name: CI on: push: branches: [ master ] + paths: + - 'jupyter-python/*' + - '.gitea/workflows/build-jupyter-python.yaml' jobs: - "Build docker images": + "Build Jupyter python Docker images": runs-on: woryzen steps: - @@ -30,16 +33,4 @@ jobs: push: true tags: gitea.woggioni.net/woggioni/jupyter-python:latest cache-from: type=registry,ref=gitea.woggioni.net/woggioni/jupyter-python:buildx - cache-to: type=registry,mode=max,compression=zstd,image-manifest=true,oci-mediatypes=true,ref=gitea.woggioni.net/woggioni/jupyter-python:buildx - - - - name: Build and push jupyter-ganymede image - uses: docker/build-push-action@v5.3.0 - with: - context: "{{defaultContext}}:jupyter-ganymede" - platforms: linux/amd64 - push: true - tags: gitea.woggioni.net/woggioni/jupyter-ganymede:latest - cache-from: type=registry,ref=gitea.woggioni.net/woggioni/jupyter-ganymede:buildx - cache-to: type=registry,mode=max,compression=zstd,image-manifest=true,oci-mediatypes=true,ref=gitea.woggioni.net/woggioni/jupyter-ganymede:buildx - + cache-to: type=registry,mode=max,compression=zstd,image-manifest=true,oci-mediatypes=true,ref=gitea.woggioni.net/woggioni/jupyter-python:buildx diff --git a/.gitea/workflows/build-jupyter-sage.yaml b/.gitea/workflows/build-jupyter-sage.yaml new file mode 100644 index 0000000..b098a22 --- /dev/null +++ b/.gitea/workflows/build-jupyter-sage.yaml @@ -0,0 +1,36 @@ +name: CI +on: + push: + branches: [ master ] + paths: + - 'jupyter-sage/*' + - '.gitea/workflows/build-jupyter-sage.yaml' +jobs: + "Build Jupyter Sage docker images": + runs-on: woryzen + steps: + - + name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + driver: docker-container + - + name: Login to Gitea container registry + uses: docker/login-action@v3 + with: + registry: gitea.woggioni.net + username: woggioni + password: ${{ secrets.PUBLISHER_TOKEN }} + - + name: Build and push jupyter-sage image + uses: docker/build-push-action@v5.3.0 + with: + context: "{{defaultContext}}:jupyter-sage" + platforms: linux/amd64,linux/arm64 + push: true + tags: gitea.woggioni.net/woggioni/jupyter-sage:latest + cache-from: type=registry,ref=gitea.woggioni.net/woggioni/jupyter-sage:buildx + cache-to: type=registry,mode=max,compression=zstd,image-manifest=true,oci-mediatypes=true,ref=gitea.woggioni.net/woggioni/jupyter-sage:buildx diff --git a/jupyter-sage/Dockerfile b/jupyter-sage/Dockerfile new file mode 100644 index 0000000..102bd4d --- /dev/null +++ b/jupyter-sage/Dockerfile @@ -0,0 +1,36 @@ +FROM debian:latest +RUN apt-get update && apt-get upgrade +RUN apt-get install bc binutils bzip2 ca-certificates cliquer cmake curl \ + ecl eclib-tools fflas-ffpack g++ gap gcc gengetopt gfan gfortran \ + glpk-utils gmp-ecm lcalc libatomic-ops-dev libboost-dev \ + libbraiding-dev libbrial-dev libbrial-groebner-dev libbz2-dev \ + libcdd-dev libcdd-tools libcliquer-dev libcurl4-openssl-dev libec-dev \ + libecm-dev libffi-dev libflint-dev libfplll-dev libfreetype-dev \ + libgap-dev libgc-dev libgd-dev libgf2x-dev libgiac-dev libgivaro-dev \ + libglpk-dev libgmp-dev libgsl-dev libhomfly-dev libiml-dev \ + liblfunction-dev liblinbox-dev liblrcalc-dev liblzma-dev libm4ri-dev \ + libm4rie-dev libmpc-dev libmpfi-dev libmpfr-dev libncurses5-dev \ + libntl-dev libopenblas-dev libpari-dev libplanarity-dev libppl-dev \ + libprimesieve-dev libpython3-dev libqhull-dev libreadline-dev \ + librw-dev libsingular4-dev libsqlite3-dev libssl-dev \ + libsuitesparse-dev libsymmetrica2-dev libz-dev libzmq3-dev m4 make \ + maxima maxima-sage meson nauty ninja-build openssl palp pari-doc \ + pari-elldata pari-galdata pari-galpol pari-gp2c pari-seadata patch \ + patchelf perl pkg-config planarity ppl-dev python3 python3-setuptools \ + python3-venv singular singular-doc sqlite3 sympow tachyon tar texinfo \ + tox xcas xz-utils git +RUN apt-get install default-jdk dvipng ffmpeg fonts-freefont-otf \ + imagemagick latexmk libavdevice-dev libjpeg-dev pandoc tex-gyre \ + texlive-fonts-recommended texlive-lang-cyrillic texlive-lang-english \ + texlive-lang-european texlive-lang-french texlive-lang-german \ + texlive-lang-italian texlive-lang-japanese texlive-lang-polish \ + texlive-lang-portuguese texlive-lang-spanish texlive-latex-extra \ + texlive-luatex texlive-xetex xindy +RUN useradd jovyan -u 1000 -s /bin/bash -m -h /home/jovyan +USER jovyan +WORKDIR /home/jovyan +COPY build.sh build.sh +RUN git clone -c core.symlinks=true --filter blob:none \ + --origin upstream --branch master --tags \ + https://github.com/sagemath/sage.git +RUN export srcdir=/home/jovyan/sage source build.sh && prepare && build diff --git a/jupyter-sage/build.sh b/jupyter-sage/build.sh new file mode 100644 index 0000000..b1401b3 --- /dev/null +++ b/jupyter-sage/build.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env sh + +pkgs=(standard + bliss + coxeter3 + mcqd + meataxe + sirocco + tdlib) + +prepare(){ + cd sage +# use correct latte-count binary name +# patch -p1 -i ../latte-count.patch +# update to tdlib 0.9 (Fedora) +# patch -p1 -i ../sagemath-tdlib-0.9.patch +# Adapt to Singular changes +# patch -p1 -i ../singular-4.4.patch +# Fix build with GCC 14 +# git cherry-pick -n e87fd8466d10c21d8f16bd08187c11b4dc116020 +# git cherry-pick -n cec595ef953bb9e180aadee8583ad5a2fa5577d3 + ./bootstrap +} + +build() { + export SAGE_NUM_THREADS=$(($(nproc)/2)) + export PYTHONPATH="$PWD"/sage/pkgs/sage-setup + + for _pkg in ${_pkgs[@]}; do + cd "$srcdir"/sage/pkgs/sagemath-$_pkg + python setup.py build + done +} + +package() { + for _pkg in ${_pkgs[@]}; do + cd "$srcdir"/sage/pkgs/sagemath-$_pkg + python setup.py install --root="$pkgdir" --optimize=1 + done + +# fix symlinks to assets +# _pythonpath=`python -c "from sysconfig import get_path; print(get_path('platlib'))"` +# for _i in $(ls "$srcdir"/sage/src/sage/ext_data/notebook-ipython); do +# rm "$pkgdir"/usr/share/jupyter/kernels/sagemath/$_i +# ln -s $_pythonpath/sage/ext_data/notebook-ipython/$_i "$pkgdir"/usr/share/jupyter/kernels/sagemath/ +# done + +# adjust threejs version +# rm "$pkgdir"$_pythonpath/sage/ext_data/threejs/threejs-version.txt +# ln -s /usr/share/threejs-sage/version "$pkgdir"$_pythonpath/sage/ext_data/threejs/threejs-version.txt +}