Merge branch 'github'
This commit is contained in:
0
.gitignore
vendored
Normal file → Executable file
0
.gitignore
vendored
Normal file → Executable file
0
Dockerfile
Normal file → Executable file
0
Dockerfile
Normal file → Executable file
0
Dockerfile.jupyterhub
Normal file → Executable file
0
Dockerfile.jupyterhub
Normal file → Executable file
0
Dockerfile.jupyterhub.bak
Normal file → Executable file
0
Dockerfile.jupyterhub.bak
Normal file → Executable file
0
dhparam.pem
Normal file → Executable file
0
dhparam.pem
Normal file → Executable file
2
docker-compose.yml
Normal file → Executable file
2
docker-compose.yml
Normal file → Executable file
@@ -32,7 +32,7 @@ services:
|
||||
# All containers will join this network
|
||||
DOCKER_NETWORK_NAME: jupyterhub-network
|
||||
# JupyterHub will spawn this Notebook image for users
|
||||
DOCKER_NOTEBOOK_IMAGE: hotwa/notebook:latest
|
||||
DOCKER_NOTEBOOK_IMAGE: quay.io/hotwa/notebook:latest
|
||||
# Notebook directory inside user image
|
||||
DOCKER_NOTEBOOK_DIR: /home/jovyan/work
|
||||
|
||||
|
||||
5
jupyterhub_config.py
Normal file → Executable file
5
jupyterhub_config.py
Normal file → Executable file
@@ -70,9 +70,10 @@ if admin:
|
||||
# "environment": {"JUPYTER_ENABLE_LAB": "yes"}
|
||||
# })
|
||||
|
||||
# 启动jupyter时候增加跨域支持
|
||||
# 启动jupyter时候增加跨域支持, 否则反向代理的时候出现问题
|
||||
# --NotebookApp.iopub_data_rate_limit=10000000 给nglview使用
|
||||
c.DockerSpawner.extra_create_kwargs.update({
|
||||
"environment": {"NOTEBOOK_ARGS": "--NotebookApp.allow_origin='*'"}
|
||||
"environment": {"NOTEBOOK_ARGS": "--NotebookApp.allow_origin='*' --NotebookApp.iopub_data_rate_limit=10000000"}
|
||||
})
|
||||
|
||||
|
||||
|
||||
0
jupyterhub_config.py.bak
Normal file → Executable file
0
jupyterhub_config.py.bak
Normal file → Executable file
0
micromamba_install.sh
Normal file → Executable file
0
micromamba_install.sh
Normal file → Executable file
0
nginx-selfsigned.crt
Normal file → Executable file
0
nginx-selfsigned.crt
Normal file → Executable file
0
nginx-selfsigned.key
Normal file → Executable file
0
nginx-selfsigned.key
Normal file → Executable file
0
nginx.conf
Normal file → Executable file
0
nginx.conf
Normal file → Executable file
0
spawnerdockerfile/Dockerfile
Normal file → Executable file
0
spawnerdockerfile/Dockerfile
Normal file → Executable file
127
spawnerdockerfile/Dockerfile.base
Executable file
127
spawnerdockerfile/Dockerfile.base
Executable file
@@ -0,0 +1,127 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
# Copyright (c) Jupyter Development Team.
|
||||
# Distributed under the terms of the Modified BSD License.
|
||||
# https://github.com/jupyter/docker-stacks/blob/main/images/base-notebook/Dockerfile
|
||||
ARG REGISTRY=quay.io
|
||||
ARG OWNER=jupyter
|
||||
ARG BASE_CONTAINER=$REGISTRY/$OWNER/docker-stacks-foundation
|
||||
FROM $BASE_CONTAINER
|
||||
|
||||
LABEL maintainer="Jupyter Project <jupyter@googlegroups.com>"
|
||||
|
||||
# Fix: https://github.com/hadolint/hadolint/wiki/DL4006
|
||||
# Fix: https://github.com/koalaman/shellcheck/wiki/SC3014
|
||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
|
||||
USER root
|
||||
|
||||
# Install all OS dependencies for the Server that starts but lacks all
|
||||
# features (e.g., download as all possible file formats)
|
||||
RUN apt-get update --yes && \
|
||||
apt-get install --yes --no-install-recommends \
|
||||
fonts-liberation \
|
||||
# - pandoc is used to convert notebooks to html files
|
||||
# it's not present in the aarch64 Ubuntu image, so we install it here
|
||||
pandoc \
|
||||
# - run-one - a wrapper script that runs no more
|
||||
# than one unique instance of some command with a unique set of arguments,
|
||||
# we use `run-one-constantly` to support the `RESTARTABLE` option
|
||||
run-one && \
|
||||
apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
USER ${NB_UID}
|
||||
|
||||
# Install JupyterLab, Jupyter Notebook, JupyterHub and NBClassic
|
||||
# Generate a Jupyter Server config
|
||||
# Cleanup temporary files
|
||||
# Correct permissions
|
||||
# Do all this in a single RUN command to avoid duplicating all of the
|
||||
# files across image layers when the permissions change
|
||||
WORKDIR /tmp
|
||||
RUN mamba install --yes \
|
||||
'jupyterlab' \
|
||||
'notebook' \
|
||||
'jupyterhub' \
|
||||
'nbclassic' && \
|
||||
jupyter server --generate-config && \
|
||||
mamba clean --all -f -y && \
|
||||
npm cache clean --force && \
|
||||
jupyter lab clean && \
|
||||
rm -rf "/home/${NB_USER}/.cache/yarn" && \
|
||||
fix-permissions "${CONDA_DIR}" && \
|
||||
fix-permissions "/home/${NB_USER}"
|
||||
|
||||
ENV JUPYTER_PORT=8888
|
||||
EXPOSE $JUPYTER_PORT
|
||||
|
||||
# Configure container startup
|
||||
CMD ["start-notebook.py"]
|
||||
|
||||
# Copy local files as late as possible to avoid cache busting
|
||||
COPY start-notebook.py start-notebook.sh start-singleuser.py start-singleuser.sh /usr/local/bin/
|
||||
COPY jupyter_server_config.py docker_healthcheck.py /etc/jupyter/
|
||||
|
||||
# Fix permissions on /etc/jupyter as root
|
||||
USER root
|
||||
RUN fix-permissions /etc/jupyter/
|
||||
|
||||
# HEALTHCHECK documentation: https://docs.docker.com/engine/reference/builder/#healthcheck
|
||||
# This healtcheck works well for `lab`, `notebook`, `nbclassic`, `server`, and `retro` jupyter commands
|
||||
# https://github.com/jupyter/docker-stacks/issues/915#issuecomment-1068528799
|
||||
HEALTHCHECK --interval=5s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD /etc/jupyter/docker_healthcheck.py || exit 1
|
||||
|
||||
# here add
|
||||
ARG CREATE_USER="jovyan"
|
||||
ARG CREATE_USER_PASSWD="password"
|
||||
ARG ROOT_PASSWD="password"
|
||||
ARG HOME="/home/${CREATE_USER}"
|
||||
ARG DEBIAN_FRONTEND="noninteractive"
|
||||
ENV DEBIAN_FRONTEND=${DEBIAN_FRONTEND}
|
||||
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
# 更新软件源
|
||||
apt-get update
|
||||
# 安装时区数据包并设置时区
|
||||
apt-get install -y tzdata
|
||||
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||
echo 'Asia/Shanghai' > /etc/timezone
|
||||
dpkg-reconfigure -f noninteractive tzdata
|
||||
# 安装所需的软件包
|
||||
apt-get install -y python3 python3-pip gcc g++ build-essential nodejs npm gdebi-core curl wget openssh-server vim lrzsz net-tools sudo git
|
||||
# 创建新用户
|
||||
useradd -m -s /bin/bash ${CREATE_USER}
|
||||
echo "${CREATE_USER}:${CREATE_USER_PASSWD}" | chpasswd
|
||||
echo "${CREATE_USER} ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
# 安装 Jupyter 和相关软件
|
||||
npm install -g configurable-http-proxy
|
||||
python3 -m pip install jupyterhub jupyterlab notebook radian pycurl jupyter-rsession-proxy ipykernel>=6.25.0 jupyterlab-language-pack-zh-CN jupyterlab-git jupyterlab-system-monitor jupyter_nbextensions_configurator jupyter_contrib_nbextensions jupyterlab_widgets jupyterlab-drawio jupyterlab-spreadsheet-editor jupyterlab-cell-flash jedi-language-server jupyterlab_code_formatter jupyterlab-spellchecker jupyterlab_vim nbresuse ipydrawio jedi ipympl black isort theme-darcula ipywidgets tensorboard jupyterlab_latex jupyter_bokeh autopep8 xeus-python jupyterlab-lsp python-lsp-server nglview dockerspawner jupyterhub-nativeauthenticator lckr_jupyterlab_variableinspector -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
||||
EOT
|
||||
|
||||
# Switch back to jovyan to avoid accidental container runs as root
|
||||
USER ${NB_UID}
|
||||
|
||||
# install mojo
|
||||
ARG MODULAR_HOME="/home/${CREATE_USER}/.modular"
|
||||
ENV MODULAR_HOME=$MODULAR_HOME
|
||||
ENV PATH="$MODULAR_HOME/pkg/packages.modular.com_mojo/bin:/home/${CREATE_USER}/.local/bin:$PATH"
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
curl https://get.modular.com | sh -
|
||||
mamba create -n mojo python=3.10 -c conda-forge -y
|
||||
mamba activate mojo
|
||||
modular install mojo
|
||||
EOT
|
||||
|
||||
# Install Rust
|
||||
ENV PATH="/home/${CREATE_USER}/.cargo/bin:$PATH"
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||
source $HOME/.cargo/env
|
||||
cargo install evcxr_jupyter
|
||||
evcxr_jupyter --install
|
||||
EOT
|
||||
|
||||
WORKDIR "${HOME}"
|
||||
90
spawnerdockerfile/Dockerfile.base-notebook
Normal file → Executable file
90
spawnerdockerfile/Dockerfile.base-notebook
Normal file → Executable file
@@ -79,6 +79,7 @@ ARG HOME="/home/${CREATE_USER}"
|
||||
ARG DEBIAN_FRONTEND="noninteractive"
|
||||
ENV DEBIAN_FRONTEND=${DEBIAN_FRONTEND}
|
||||
|
||||
COPY install.sh /tmp
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
# 更新软件源
|
||||
@@ -89,18 +90,27 @@ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||
echo 'Asia/Shanghai' > /etc/timezone
|
||||
dpkg-reconfigure -f noninteractive tzdata
|
||||
# 安装所需的软件包
|
||||
apt-get install -y python3 python3-pip gcc g++ build-essential nodejs npm gdebi-core curl wget openssh-server vim lrzsz net-tools sudo git
|
||||
apt-get install -y python3 python3-pip gcc g++ build-essential nodejs npm gdebi-core curl wget openssh-server vim lrzsz net-tools sudo git nodejs
|
||||
# 创建新用户
|
||||
useradd -m -s /bin/bash ${CREATE_USER}
|
||||
echo "${CREATE_USER}:${CREATE_USER_PASSWD}" | chpasswd
|
||||
echo "${CREATE_USER} ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
# 安装micromamba
|
||||
echo 1 | bash <(curl -s https://cdn.jsdelivr.net/gh/hotwa/MicroMamba_Installer@main/install.sh)
|
||||
# 安装 Jupyter 和相关软件
|
||||
npm install -g configurable-http-proxy
|
||||
python3 -m pip install jupyterhub jupyterlab notebook radian pycurl jupyter-rsession-proxy ipykernel jupyterlab-language-pack-zh-CN jupyterlab-git jupyterlab-system-monitor jupyter_nbextensions_configurator jupyter_contrib_nbextensions jupyterlab_widgets jupyterlab-drawio jupyterlab-spreadsheet-editor jupyterlab-cell-flash jedi-language-server jupyterlab_code_formatter jupyterlab-spellchecker jupyterlab_vim nbresuse ipydrawio jedi ipympl black isort theme-darcula ipywidgets tensorboard jupyterlab_latex jupyter_bokeh autopep8 xeus-python jupyterlab-lsp python-lsp-server nglview dockerspawner jupyterhub-nativeauthenticator lckr_jupyterlab_variableinspector -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
||||
EOT
|
||||
|
||||
# 安装 Jupyter 和相关软件
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
npm install -g configurable-http-proxy
|
||||
git clone https://github.com/arose/nglview
|
||||
cd nglview
|
||||
python setup.py install
|
||||
cd ..
|
||||
python3 -m pip install aiohttp -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
||||
python3 -m pip install jupyterhub jupyterlab notebook radian pycurl aiohttp jupyter-rsession-proxy ipykernel>=6.25.0 jupyterlab-language-pack-zh-CN jupyterlab-git jupyterlab-system-monitor jupyter_nbextensions_configurator jupyter_contrib_nbextensions jupyterlab_widgets jupyterlab-drawio jupyterlab-spreadsheet-editor jupyterlab-cell-flash jedi-language-server jupyterlab_code_formatter jupyterlab-spellchecker jupyterlab_vim nbresuse ipydrawio jedi ipympl black isort theme-darcula ipywidgets tensorboard jupyterlab_latex jupyter_bokeh autopep8 xeus-python jupyterlab-lsp python-lsp-server dockerspawner jupyterhub-nativeauthenticator lckr_jupyterlab_variableinspector -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
||||
EOT
|
||||
|
||||
ARG RSERVER_VERSION="rstudio-server-2024.04.1-748-amd64.deb"
|
||||
ENV RSERVER_VERSION=${RSERVER_VERSION}
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
# install rserver
|
||||
@@ -111,7 +121,7 @@ wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | tee
|
||||
echo | add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"
|
||||
apt-get update
|
||||
apt install -y --no-install-recommends r-base
|
||||
wget "https://download2.rstudio.org/server/$(lsb_release -cs)/amd64/rstudio-server-2023.06.1-524-amd64.deb" -O /tmp/rstudio-server.deb
|
||||
wget "https://download2.rstudio.org/server/$(lsb_release -cs)/amd64/${RSERVER_VERSION}" -O /tmp/rstudio-server.deb
|
||||
chmod +x /tmp/rstudio-server.deb
|
||||
gdebi -n /tmp/rstudio-server.deb
|
||||
rm -rf /tmp/rstudio-server.deb
|
||||
@@ -123,49 +133,42 @@ EOT
|
||||
|
||||
# Switch back to jovyan to avoid accidental container runs as root
|
||||
USER ${NB_UID}
|
||||
ENV MAMBA_ROOT_PREFIX=/home/${CREATE_USER}/micromamba
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
sudo apt update
|
||||
sudo apt install -y texlive-full
|
||||
micromamba create -n plot -c conda-forge scienceplots autopep8 python=3 ipykernel pandas numpy matplotlib scipy seaborn orange3 -y
|
||||
micromamba run -n plot python -m pip install bamboolib
|
||||
micromamba run -n plot python -m ipykernel install --user --name="sciplot" --display-name="SCIPlot Environment"
|
||||
EOT
|
||||
|
||||
# install mojo
|
||||
ENV PATH="/home/${CREATE_USER}/.local/bin:$PATH"
|
||||
# A random default token
|
||||
ARG AUTH_KEY="mut_efe460b898e3482bb6208bfcd4a51d7e"
|
||||
ENV AUTH_KEY=$AUTH_KEY
|
||||
|
||||
RUN curl https://get.modular.com | sh - && \
|
||||
modular auth $AUTH_KEY
|
||||
|
||||
ARG MODULAR_HOME="/home/${CREATE_USER}/.modular"
|
||||
ENV MODULAR_HOME=$MODULAR_HOME
|
||||
ENV PATH="$PATH:$MODULAR_HOME/pkg/packages.modular.com_mojo/bin"
|
||||
ENV PATH="$MODULAR_HOME/pkg/packages.modular.com_mojo/bin:/home/${CREATE_USER}/.local/bin:$PATH"
|
||||
ARG HTTP_PROXY=""
|
||||
ARG HTTPS_PROXY=""
|
||||
ARG NO_PROXY="localhost,127.0.0.1"
|
||||
ENV HTTP_PROXY=$HTTP_PROXY
|
||||
ENV HTTPS_PROXY=$HTTPS_PROXY
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
curl https://get.modular.com | sh - && \
|
||||
modular auth $AUTH_KEY
|
||||
modular install mojo
|
||||
curl --retry 5 https://get.modular.com | sh -
|
||||
mamba create -n mojo python=3.10 ipykernel ipython nglview -c conda-forge -y
|
||||
mamba activate mojo && modular install mojo
|
||||
mamba run -n mojo python -m ipykernel install --user --name="mojo" --display-name="mojo_env"
|
||||
EOT
|
||||
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
micromamba create -n mixtral_env -c conda-forge ipykernel -y
|
||||
git clone https://github.com/Lightning-AI/lit-gpt.git
|
||||
cd lit-gpt
|
||||
micromamba run -n mixtral_env python -m pip install -r requirements.txt
|
||||
micromamba run -n mixtral_env python -m ipykernel install --user --name="mixtral" --display-name="mixtral Environment"
|
||||
EOT
|
||||
|
||||
# Install Rust
|
||||
# Install Rust https://rsproxy.cn/#getStarted
|
||||
ENV RUSTUP_DIST_SERVER="https://rsproxy.cn"
|
||||
ENV RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"
|
||||
ENV PATH="/home/${CREATE_USER}/.cargo/bin:$PATH"
|
||||
ENV CARGO_UNSTABLE_SPARSE_REGISTRY="true"
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://rsproxy.cn/rustup-init.sh | sh -s -- -y
|
||||
echo '[source.crates-io]
|
||||
replace-with = "rsproxy-sparse"
|
||||
[source.rsproxy]
|
||||
registry = "https://rsproxy.cn/crates.io-index"
|
||||
[source.rsproxy-sparse]
|
||||
registry = "sparse+https://rsproxy.cn/index/"
|
||||
[registries.rsproxy]
|
||||
index = "https://rsproxy.cn/crates.io-index"
|
||||
[net]
|
||||
git-fetch-with-cli = true' >> ~/.cargo/config.toml
|
||||
source $HOME/.cargo/env
|
||||
cargo install evcxr_jupyter
|
||||
evcxr_jupyter --install
|
||||
@@ -173,9 +176,12 @@ EOT
|
||||
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
micromamba create -n mdgnn -c pytorch -c conda-forge python=3.9 pytorch=1.10.2 torchvision torchaudio cudatoolkit=11.3 pandas matplotlib seaborn scipy numpy=1.24.4 mdanalysis biopandas pymol-open-source ipykernel ipywidgets jupyter einops python-calamine scikit-learn -y
|
||||
micromamba run -n mdgnn python -m ipykernel install --user --name="mdgnn" --display-name="mdgnn Environment"
|
||||
sudo apt update
|
||||
sudo apt install -y texlive-full
|
||||
mamba create -n torch pytorch torchvision torchaudio python=3 ipython nglview requests scienceplots autopep8 ipykernel\
|
||||
pandas numpy matplotlib scipy seaborn orange3 -c pytorch -c nvidia -c conda-forge -y
|
||||
mamba run -n torch python -m ipykernel install --user --name="torch" --display-name="torch_env"
|
||||
EOT
|
||||
|
||||
|
||||
WORKDIR "${HOME}"
|
||||
|
||||
|
||||
120
spawnerdockerfile/Dockerfile.plot
Executable file
120
spawnerdockerfile/Dockerfile.plot
Executable file
@@ -0,0 +1,120 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
# Copyright (c) Jupyter Development Team.
|
||||
# Distributed under the terms of the Modified BSD License.
|
||||
# https://github.com/jupyter/docker-stacks/blob/main/images/base-notebook/Dockerfile
|
||||
ARG REGISTRY=quay.io
|
||||
ARG OWNER=jupyter
|
||||
ARG BASE_CONTAINER=$REGISTRY/$OWNER/docker-stacks-foundation
|
||||
FROM $BASE_CONTAINER
|
||||
|
||||
LABEL maintainer="Jupyter Project <jupyter@googlegroups.com>"
|
||||
|
||||
# Fix: https://github.com/hadolint/hadolint/wiki/DL4006
|
||||
# Fix: https://github.com/koalaman/shellcheck/wiki/SC3014
|
||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
|
||||
USER root
|
||||
|
||||
# Install all OS dependencies for the Server that starts but lacks all
|
||||
# features (e.g., download as all possible file formats)
|
||||
RUN apt-get update --yes && \
|
||||
apt-get install --yes --no-install-recommends \
|
||||
fonts-liberation \
|
||||
# - pandoc is used to convert notebooks to html files
|
||||
# it's not present in the aarch64 Ubuntu image, so we install it here
|
||||
pandoc \
|
||||
# - run-one - a wrapper script that runs no more
|
||||
# than one unique instance of some command with a unique set of arguments,
|
||||
# we use `run-one-constantly` to support the `RESTARTABLE` option
|
||||
run-one && \
|
||||
apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
USER ${NB_UID}
|
||||
|
||||
# Install JupyterLab, Jupyter Notebook, JupyterHub and NBClassic
|
||||
# Generate a Jupyter Server config
|
||||
# Cleanup temporary files
|
||||
# Correct permissions
|
||||
# Do all this in a single RUN command to avoid duplicating all of the
|
||||
# files across image layers when the permissions change
|
||||
WORKDIR /tmp
|
||||
RUN mamba install --yes \
|
||||
'jupyterlab' \
|
||||
'notebook' \
|
||||
'jupyterhub' \
|
||||
'nbclassic' && \
|
||||
jupyter server --generate-config && \
|
||||
mamba clean --all -f -y && \
|
||||
npm cache clean --force && \
|
||||
jupyter lab clean && \
|
||||
rm -rf "/home/${NB_USER}/.cache/yarn" && \
|
||||
fix-permissions "${CONDA_DIR}" && \
|
||||
fix-permissions "/home/${NB_USER}"
|
||||
|
||||
ENV JUPYTER_PORT=8888
|
||||
EXPOSE $JUPYTER_PORT
|
||||
|
||||
# Configure container startup
|
||||
CMD ["start-notebook.py"]
|
||||
|
||||
# Copy local files as late as possible to avoid cache busting
|
||||
COPY start-notebook.py start-notebook.sh start-singleuser.py start-singleuser.sh /usr/local/bin/
|
||||
COPY jupyter_server_config.py docker_healthcheck.py /etc/jupyter/
|
||||
|
||||
# Fix permissions on /etc/jupyter as root
|
||||
USER root
|
||||
RUN fix-permissions /etc/jupyter/
|
||||
|
||||
# HEALTHCHECK documentation: https://docs.docker.com/engine/reference/builder/#healthcheck
|
||||
# This healtcheck works well for `lab`, `notebook`, `nbclassic`, `server`, and `retro` jupyter commands
|
||||
# https://github.com/jupyter/docker-stacks/issues/915#issuecomment-1068528799
|
||||
HEALTHCHECK --interval=5s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD /etc/jupyter/docker_healthcheck.py || exit 1
|
||||
|
||||
# here add
|
||||
ARG CREATE_USER="jovyan"
|
||||
ARG CREATE_USER_PASSWD="password"
|
||||
ARG ROOT_PASSWD="password"
|
||||
ARG HOME="/home/${CREATE_USER}"
|
||||
ARG DEBIAN_FRONTEND="noninteractive"
|
||||
ENV DEBIAN_FRONTEND=${DEBIAN_FRONTEND}
|
||||
|
||||
COPY install.sh /tmp
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
# 更新软件源
|
||||
apt-get update
|
||||
# 安装时区数据包并设置时区
|
||||
apt-get install -y tzdata
|
||||
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||
echo 'Asia/Shanghai' > /etc/timezone
|
||||
dpkg-reconfigure -f noninteractive tzdata
|
||||
# 安装所需的软件包
|
||||
apt-get install -y python3 python3-pip gcc g++ build-essential nodejs npm gdebi-core curl wget openssh-server vim lrzsz net-tools sudo git
|
||||
# 创建新用户
|
||||
useradd -m -s /bin/bash ${CREATE_USER}
|
||||
echo "${CREATE_USER}:${CREATE_USER_PASSWD}" | chpasswd
|
||||
echo "${CREATE_USER} ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
# 安装micromamba
|
||||
echo "1" | bash /tmp/install.sh
|
||||
mkdir -p /home/${CREATE_USER}/micromamba
|
||||
chown -R ${NB_UID}:${NB_GID} /home/${CREATE_USER}/micromamba
|
||||
# 安装 Jupyter 和相关软件
|
||||
npm install -g configurable-http-proxy
|
||||
python3 -m pip install jupyterhub jupyterlab notebook radian pycurl jupyter-rsession-proxy ipykernel>=6.25.0 jupyterlab-language-pack-zh-CN jupyterlab-git jupyterlab-system-monitor jupyter_nbextensions_configurator jupyter_contrib_nbextensions jupyterlab_widgets jupyterlab-drawio jupyterlab-spreadsheet-editor jupyterlab-cell-flash jedi-language-server jupyterlab_code_formatter jupyterlab-spellchecker jupyterlab_vim nbresuse ipydrawio jedi ipympl black isort theme-darcula ipywidgets tensorboard jupyterlab_latex jupyter_bokeh autopep8 xeus-python jupyterlab-lsp python-lsp-server nglview dockerspawner jupyterhub-nativeauthenticator lckr_jupyterlab_variableinspector -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
||||
EOT
|
||||
|
||||
# Switch back to jovyan to avoid accidental container runs as root
|
||||
USER ${NB_UID}
|
||||
ENV MAMBA_ROOT_PREFIX=/home/${CREATE_USER}/micromamba
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
sudo apt update
|
||||
sudo apt install -y texlive-full
|
||||
micromamba create -n plot -c conda-forge scienceplots autopep8 python=3 ipykernel pandas numpy matplotlib scipy seaborn orange3 -y
|
||||
micromamba run -n plot python -m pip install bamboolib
|
||||
micromamba run -n plot python -m ipykernel install --user --name="sciplot" --display-name="SCIPlot Environment"
|
||||
EOT
|
||||
|
||||
|
||||
WORKDIR "${HOME}"
|
||||
133
spawnerdockerfile/Dockerfile.rserver
Executable file
133
spawnerdockerfile/Dockerfile.rserver
Executable file
@@ -0,0 +1,133 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
# Copyright (c) Jupyter Development Team.
|
||||
# Distributed under the terms of the Modified BSD License.
|
||||
# https://github.com/jupyter/docker-stacks/blob/main/images/base-notebook/Dockerfile
|
||||
ARG REGISTRY=quay.io
|
||||
ARG OWNER=jupyter
|
||||
ARG BASE_CONTAINER=$REGISTRY/$OWNER/docker-stacks-foundation
|
||||
FROM $BASE_CONTAINER
|
||||
|
||||
LABEL maintainer="Jupyter Project <jupyter@googlegroups.com>"
|
||||
|
||||
# Fix: https://github.com/hadolint/hadolint/wiki/DL4006
|
||||
# Fix: https://github.com/koalaman/shellcheck/wiki/SC3014
|
||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
|
||||
USER root
|
||||
|
||||
# Install all OS dependencies for the Server that starts but lacks all
|
||||
# features (e.g., download as all possible file formats)
|
||||
RUN apt-get update --yes && \
|
||||
apt-get install --yes --no-install-recommends \
|
||||
fonts-liberation \
|
||||
# - pandoc is used to convert notebooks to html files
|
||||
# it's not present in the aarch64 Ubuntu image, so we install it here
|
||||
pandoc \
|
||||
# - run-one - a wrapper script that runs no more
|
||||
# than one unique instance of some command with a unique set of arguments,
|
||||
# we use `run-one-constantly` to support the `RESTARTABLE` option
|
||||
run-one && \
|
||||
apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
USER ${NB_UID}
|
||||
|
||||
# Install JupyterLab, Jupyter Notebook, JupyterHub and NBClassic
|
||||
# Generate a Jupyter Server config
|
||||
# Cleanup temporary files
|
||||
# Correct permissions
|
||||
# Do all this in a single RUN command to avoid duplicating all of the
|
||||
# files across image layers when the permissions change
|
||||
WORKDIR /tmp
|
||||
RUN mamba install --yes \
|
||||
'jupyterlab' \
|
||||
'notebook' \
|
||||
'jupyterhub' \
|
||||
'nbclassic' && \
|
||||
jupyter server --generate-config && \
|
||||
mamba clean --all -f -y && \
|
||||
npm cache clean --force && \
|
||||
jupyter lab clean && \
|
||||
rm -rf "/home/${NB_USER}/.cache/yarn" && \
|
||||
fix-permissions "${CONDA_DIR}" && \
|
||||
fix-permissions "/home/${NB_USER}"
|
||||
|
||||
ENV JUPYTER_PORT=8888
|
||||
EXPOSE $JUPYTER_PORT
|
||||
|
||||
# Configure container startup
|
||||
CMD ["start-notebook.py"]
|
||||
|
||||
# Copy local files as late as possible to avoid cache busting
|
||||
COPY start-notebook.py start-notebook.sh start-singleuser.py start-singleuser.sh /usr/local/bin/
|
||||
COPY jupyter_server_config.py docker_healthcheck.py /etc/jupyter/
|
||||
|
||||
# Fix permissions on /etc/jupyter as root
|
||||
USER root
|
||||
RUN fix-permissions /etc/jupyter/
|
||||
|
||||
# HEALTHCHECK documentation: https://docs.docker.com/engine/reference/builder/#healthcheck
|
||||
# This healtcheck works well for `lab`, `notebook`, `nbclassic`, `server`, and `retro` jupyter commands
|
||||
# https://github.com/jupyter/docker-stacks/issues/915#issuecomment-1068528799
|
||||
HEALTHCHECK --interval=5s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD /etc/jupyter/docker_healthcheck.py || exit 1
|
||||
|
||||
# here add
|
||||
ARG CREATE_USER="jovyan"
|
||||
ARG CREATE_USER_PASSWD="password"
|
||||
ARG ROOT_PASSWD="password"
|
||||
ARG HOME="/home/${CREATE_USER}"
|
||||
ARG DEBIAN_FRONTEND="noninteractive"
|
||||
ENV DEBIAN_FRONTEND=${DEBIAN_FRONTEND}
|
||||
|
||||
COPY install.sh /tmp
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
# 更新软件源
|
||||
apt-get update
|
||||
# 安装时区数据包并设置时区
|
||||
apt-get install -y tzdata
|
||||
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||
echo 'Asia/Shanghai' > /etc/timezone
|
||||
dpkg-reconfigure -f noninteractive tzdata
|
||||
# 安装所需的软件包
|
||||
apt-get install -y python3 python3-pip gcc g++ build-essential nodejs npm gdebi-core curl wget openssh-server vim lrzsz net-tools sudo git
|
||||
# 创建新用户
|
||||
useradd -m -s /bin/bash ${CREATE_USER}
|
||||
echo "${CREATE_USER}:${CREATE_USER_PASSWD}" | chpasswd
|
||||
echo "${CREATE_USER} ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
# 安装micromamba
|
||||
echo "1" | bash /tmp/install.sh
|
||||
mkdir -p /home/${CREATE_USER}/micromamba
|
||||
chown -R ${NB_UID}:${NB_GID} /home/${CREATE_USER}/micromamba
|
||||
# 安装 Jupyter 和相关软件
|
||||
npm install -g configurable-http-proxy
|
||||
python3 -m pip install jupyterhub jupyterlab notebook radian pycurl jupyter-rsession-proxy ipykernel>=6.25.0 jupyterlab-language-pack-zh-CN jupyterlab-git jupyterlab-system-monitor jupyter_nbextensions_configurator jupyter_contrib_nbextensions jupyterlab_widgets jupyterlab-drawio jupyterlab-spreadsheet-editor jupyterlab-cell-flash jedi-language-server jupyterlab_code_formatter jupyterlab-spellchecker jupyterlab_vim nbresuse ipydrawio jedi ipympl black isort theme-darcula ipywidgets tensorboard jupyterlab_latex jupyter_bokeh autopep8 xeus-python jupyterlab-lsp python-lsp-server nglview dockerspawner jupyterhub-nativeauthenticator lckr_jupyterlab_variableinspector -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
||||
EOT
|
||||
|
||||
ARG RSERVER_VERSION="rstudio-server-2024.04.1-748-amd64.deb"
|
||||
ENV RSERVER_VERSION=${RSERVER_VERSION}
|
||||
RUN <<EOT
|
||||
#!/bin/bash
|
||||
# install rserver
|
||||
apt update
|
||||
apt update -qq
|
||||
apt install -y --no-install-recommends software-properties-common dirmngr
|
||||
wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
|
||||
echo | add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"
|
||||
apt-get update
|
||||
apt install -y --no-install-recommends r-base
|
||||
wget "https://download2.rstudio.org/server/$(lsb_release -cs)/amd64/${RSERVER_VERSION}" -O /tmp/rstudio-server.deb
|
||||
chmod +x /tmp/rstudio-server.deb
|
||||
gdebi -n /tmp/rstudio-server.deb
|
||||
rm -rf /tmp/rstudio-server.deb
|
||||
chown -R ${CREATE_USER}:users /home/${CREATE_USER}
|
||||
# 清理和减小镜像大小
|
||||
apt-get clean
|
||||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/man/?? /usr/share/man/??_*
|
||||
EOT
|
||||
|
||||
# Switch back to jovyan to avoid accidental container runs as root
|
||||
USER ${NB_UID}
|
||||
ENV MAMBA_ROOT_PREFIX=/home/${CREATE_USER}/micromamba
|
||||
|
||||
WORKDIR "${HOME}"
|
||||
39
spawnerdockerfile/README.md
Normal file → Executable file
39
spawnerdockerfile/README.md
Normal file → Executable file
@@ -52,3 +52,42 @@ source ~/.bashrc
|
||||
|
||||
这个操作会激活micromamba(mamba, conda)的安装目录`etc/profile.d/micromamba.sh`激活添加到bash初始化文件`.bashrc`里面
|
||||
|
||||
# docker镜像
|
||||
|
||||
关于这个jupyterlab的spawner的notebook启动的镜像来源于:quay.io/jupyterdocker-stacks-foundation
|
||||
|
||||
这个镜像的构建仓库是:https://github.com/jupyter/docker-stacks/blob/main/images/docker-stacks-foundation/Dockerfile
|
||||
|
||||
可以把这个Dockerfile的ARG参数ROOT_CONTAINER修改为docker pull nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04
|
||||
|
||||
pytorch-notebook构建顺序是:
|
||||
|
||||
docker-stacks-foundation
|
||||
base-notebook
|
||||
minimal-notebook
|
||||
scipy-notebook
|
||||
pytorch-notebook
|
||||
|
||||
第一步
|
||||
|
||||
```shell
|
||||
git clone https://github.com/jupyter/docker-stacks.git
|
||||
cd docker-stacks/images/docker-stacks-foundation
|
||||
docker buildx build --build-arg ROOT_CONTAINER=nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04 -t quay.io/hotwa/docker-stacks-foundation:latest . --load # docker pull nvidia/cuda:12.4.1-devel-ubuntu22.04
|
||||
cd ../base-notebook
|
||||
docker buildx build --build-arg OWNER=hotwa -t quay.io/hotwa/base-notebook:latest . --load
|
||||
cd ../minimal-notebook/
|
||||
docker buildx build --build-arg OWNER=hotwa -t quay.io/hotwa/minimal-notebook:latest . --load
|
||||
cd ../scipy-notebook
|
||||
docker buildx build --build-arg OWNER=hotwa -t quay.io/hotwa/scipy-notebook:latest . --load
|
||||
cd ../pytorch-notebook
|
||||
docker buildx build --build-arg OWNER=hotwa -t quay.io/hotwa/pytorch-notebook:latest . --load
|
||||
```
|
||||
|
||||
# 然后构建自己的基础镜像
|
||||
|
||||
```shell
|
||||
docker buildx build --build-arg OWNER=hotwa -t quay.io/hotwa/notebook:latest -f Dockerfile.base-notebook . --load
|
||||
# 导出保存
|
||||
|
||||
```
|
||||
|
||||
17
spawnerdockerfile/docker-compose.yml
Executable file
17
spawnerdockerfile/docker-compose.yml
Executable file
@@ -0,0 +1,17 @@
|
||||
version: '3.8'
|
||||
services:
|
||||
molscribe:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.base-notebook
|
||||
image: hotwa/notebook:latest
|
||||
container_name: notebook
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
devices:
|
||||
- driver: nvidia
|
||||
count: 1
|
||||
capabilities: [gpu]
|
||||
# command: micromamba run -n molscribe jupyter notebook --ip=0.0.0.0 --NotebookApp.allow_origin='*' --debug --no-browser --NotebookApp.disable_check_xsrf=True --port=8888 --allow-root --NotebookApp.token='' --NotebookApp.password='' --log-level=DEBUG
|
||||
|
||||
229
spawnerdockerfile/install.sh
Executable file
229
spawnerdockerfile/install.sh
Executable file
@@ -0,0 +1,229 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 安装所需依赖
|
||||
install_dependencies() {
|
||||
# 检查并安装 jq, curl, tar, bzip2
|
||||
for dep in jq curl tar bzip2; do
|
||||
if ! command -v $dep >/dev/null 2>&1; then
|
||||
sudo apt-get update && sudo apt-get install -y $dep
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# 在脚本开始时调用依赖安装函数
|
||||
install_dependencies
|
||||
|
||||
# 默认的MAMBA_ROOT_PREFIX路径
|
||||
DEFAULT_MAMBA_ROOT_PREFIX="/usr/local/bin"
|
||||
|
||||
# 显示用法信息
|
||||
usage() {
|
||||
echo "用法: sudo $0 [--silent-install [custom_root_prefix]] [--silent-uninstall] [--silent-update]"
|
||||
echo " --silent-install 静默模式安装,不进行任何交互"
|
||||
echo " custom_root_prefix (可选) 在静默模式下设置 MAMBA_ROOT_PREFIX 的路径"
|
||||
echo " --silent-uninstall 静默模式卸载,不进行任何交互"
|
||||
echo " --silent-update 静默模式更新,不进行任何交互"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 安装micromamba
|
||||
install_micromamba() {
|
||||
local mamba_prefix="$1"
|
||||
|
||||
# 自动检测操作系统和处理器架构
|
||||
OS="$(uname)"
|
||||
ARCH="$(uname -m)"
|
||||
|
||||
# 根据操作系统和架构设置下载链接
|
||||
case "$OS" in
|
||||
"Linux")
|
||||
case "$ARCH" in
|
||||
"x86_64") URL="https://micro.mamba.pm/api/micromamba/linux-64/latest" ;;
|
||||
"aarch64") URL="https://micro.mamba.pm/api/micromamba/linux-aarch64/latest" ;;
|
||||
"ppc64le") URL="https://micro.mamba.pm/api/micromamba/linux-ppc64le/latest" ;;
|
||||
*) echo "不支持的架构: $ARCH"; exit 1 ;;
|
||||
esac
|
||||
;;
|
||||
"Darwin")
|
||||
case "$ARCH" in
|
||||
"x86_64") URL="https://micro.mamba.pm/api/micromamba/osx-64/latest" ;;
|
||||
"arm64") URL="https://micro.mamba.pm/api/micromamba/osx-arm64/latest" ;;
|
||||
*) echo "不支持的架构: $ARCH"; exit 1 ;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
echo "不支持的操作系统: $OS"; exit 1 ;;
|
||||
esac
|
||||
|
||||
# 下载并解压 micromamba 到指定的路径
|
||||
echo "正在下载 micromamba..."
|
||||
if curl -Ls "$URL" | tar -xvj -C "$mamba_prefix"; then
|
||||
echo "micromamba 下载并解压完成。"
|
||||
ls -l /usr/local/bin/bin/micromamba
|
||||
echo "micromamba 赋予执行权限"
|
||||
chmod +x /usr/local/bin/bin/micromamba
|
||||
echo "micromamba 安装完成"
|
||||
echo "MAMBA_ROOT_PREFIX 路径:$mamba_prefix"
|
||||
# 初始化 shell 环境
|
||||
echo "正在为root初始化 micromamba shell 环境..."
|
||||
"$mamba_prefix/bin/micromamba" shell init -s bash -p "~/micromamba"
|
||||
ln -s /usr/local/bin/bin/micromamba /usr/local/bin/micromamba
|
||||
else
|
||||
echo "micromamba 下载失败"
|
||||
fi
|
||||
}
|
||||
|
||||
# 清理 .bashrc 文件
|
||||
cleanup_bashrc() {
|
||||
local mamba_bin_path="$1"
|
||||
|
||||
# 删除 .bashrc 中相关的行
|
||||
sed -i '/MICROMAMBA_BIN_PATH/d' ~/.bashrc
|
||||
sed -i '/MAMBA_ROOT_PREFIX/d' ~/.bashrc
|
||||
sed -i '/alias mba=/d' ~/.bashrc
|
||||
}
|
||||
|
||||
# 删除micromamba
|
||||
uninstall_micromamba() {
|
||||
|
||||
echo "正在卸载 micromamba..."
|
||||
rm -rf /usr/local/bin/micromamba /usr/local/bin/bin /usr/local/bin/info /usr/local/bin/etc
|
||||
|
||||
# 清理 .bashrc 文件
|
||||
cleanup_bashrc "$mamba_prefix"
|
||||
|
||||
echo "micromamba 已卸载。"
|
||||
}
|
||||
|
||||
|
||||
# 获取当前 micromamba 版本
|
||||
get_current_version() {
|
||||
local mamba_path="$1/micromamba"
|
||||
if [ -f "$mamba_path" ]; then
|
||||
local current_version
|
||||
current_version=$("$mamba_path" --version | grep -o 'version [^ ]*' | cut -d ' ' -f2 | cut -d '-' -f1)
|
||||
echo "$current_version"
|
||||
else
|
||||
echo "未安装"
|
||||
fi
|
||||
}
|
||||
|
||||
# 获取最新的 micromamba 版本
|
||||
get_latest_version() {
|
||||
local latest_version
|
||||
latest_version=$(curl -s https://api.github.com/repos/mamba-org/micromamba-releases/releases/latest | jq -r '.tag_name' | cut -d '-' -f1)
|
||||
echo "$latest_version"
|
||||
}
|
||||
|
||||
# 检查是否有更新并提示用户
|
||||
check_for_updates() {
|
||||
local current_version latest_version
|
||||
current_version=$(get_current_version "$1")
|
||||
latest_version=$(get_latest_version)
|
||||
|
||||
if [ "$latest_version" != "$current_version" ]; then
|
||||
echo "有可用的更新:当前版本 $current_version, 最新版本 $latest_version"
|
||||
read -p "是否更新到最新版本? (y/N): " confirm
|
||||
if [[ "$confirm" =~ ^[Yy]$ ]]; then
|
||||
update_micromamba "$1"
|
||||
else
|
||||
echo "更新已取消"
|
||||
fi
|
||||
else
|
||||
echo "当前已是最新版本 ($current_version)"
|
||||
fi
|
||||
}
|
||||
|
||||
# 更新micromamba
|
||||
update_micromamba() {
|
||||
local mamba_prefix="$1"
|
||||
local current_version latest_version
|
||||
current_version=$(get_current_version "$mamba_prefix")
|
||||
latest_version=$(get_latest_version)
|
||||
|
||||
if [ "$latest_version" != "$current_version" ]; then
|
||||
echo "有可用的更新:当前版本 $current_version, 最新版本 $latest_version"
|
||||
read -p "是否更新到最新版本? (y/N): " confirm
|
||||
if [[ "$confirm" =~ ^[Yy]$ ]]; then
|
||||
echo "正在卸载旧版本 micromamba..."
|
||||
uninstall_micromamba "$mamba_prefix"
|
||||
echo "正在安装最新版本 micromamba..."
|
||||
install_micromamba "$mamba_prefix"
|
||||
else
|
||||
echo "更新已取消"
|
||||
fi
|
||||
else
|
||||
echo "当前已是最新版本 ($current_version)"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# 交互式安装、卸载和更新菜单
|
||||
interactive_menu() {
|
||||
local current_version latest_version
|
||||
current_version=$(get_current_version "$DEFAULT_MAMBA_ROOT_PREFIX")
|
||||
latest_version=$(get_latest_version)
|
||||
|
||||
# 检测并显示当前和最新版本
|
||||
echo "当前 micromamba 版本: $current_version"
|
||||
echo "最新 micromamba 版本: $latest_version"
|
||||
if [ "$latest_version" != "$current_version" ]; then
|
||||
echo "有可用的更新。"
|
||||
fi
|
||||
|
||||
echo "选择操作:"
|
||||
echo "1) 安装 micromamba"
|
||||
echo "2) 删除 micromamba"
|
||||
echo "3) 更新 micromamba"
|
||||
echo "q) 退出"
|
||||
read -p "请输入选项(1、2、3或q): " main_choice
|
||||
|
||||
case "$main_choice" in
|
||||
1)
|
||||
echo "MAMBA_ROOT_PREFIX 的路径: $DEFAULT_MAMBA_ROOT_PREFIX: "
|
||||
install_micromamba "$DEFAULT_MAMBA_ROOT_PREFIX"
|
||||
;;
|
||||
2)
|
||||
uninstall_micromamba "$DEFAULT_MAMBA_ROOT_PREFIX"
|
||||
;;
|
||||
3)
|
||||
update_micromamba "$DEFAULT_MAMBA_ROOT_PREFIX"
|
||||
;;
|
||||
q)
|
||||
echo "退出。"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "无效的选项。退出。"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 静默卸载
|
||||
silent_uninstall() {
|
||||
# 在卸载之前保留虚拟环境目录
|
||||
local envs_dir="$DEFAULT_MAMBA_ROOT_PREFIX/envs"
|
||||
mkdir -p "$envs_dir"
|
||||
mv "$DEFAULT_MAMBA_ROOT_PREFIX/envs" "$(mktemp -d)"
|
||||
uninstall_micromamba "$DEFAULT_MAMBA_ROOT_PREFIX"
|
||||
mv "$(mktemp -d)/envs" "$envs_dir"
|
||||
}
|
||||
|
||||
# 静默更新
|
||||
silent_update() {
|
||||
update_micromamba "$DEFAULT_MAMBA_ROOT_PREFIX"
|
||||
}
|
||||
|
||||
# 解析命令行参数
|
||||
if [ "$1" = "--silent-install" ]; then
|
||||
silent_install "$2"
|
||||
elif [ "$1" = "--silent-uninstall" ]; then
|
||||
silent_uninstall
|
||||
elif [ "$1" = "--silent-update" ]; then
|
||||
silent_update
|
||||
elif [ "$1" = "--help" ]; then
|
||||
usage
|
||||
else
|
||||
interactive_menu
|
||||
fi
|
||||
0
spawnerdockerfile/jupyter_server_config.py
Normal file → Executable file
0
spawnerdockerfile/jupyter_server_config.py
Normal file → Executable file
Reference in New Issue
Block a user