Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions base_images/2i2c/r-base/docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ RUN apt-get clean && apt-get update && \

USER ${NB_USER}

# Use sharded repodata for faster resolve times
RUN conda install --name base 'conda-libmamba-solver>=25.11.0' -y
RUN conda config --set plugins.use_sharded_repodata true

# Install additional packages from environment.yml
COPY ./environment.yml /tmp
RUN conda env update -n ${CONDA_ENV} -f "/tmp/environment.yml" \
Expand All @@ -47,6 +51,14 @@ RUN conda env update -n ${CONDA_ENV} -f "/tmp/environment.yml" \
RUN conda init

USER root

# Set default CRAN mirror to use pre-built binaries from Posit Package Manager
RUN R_HOME=$(R RHOME) && \
echo "options(repos = c(CRAN = 'https://packagemanager.posit.co/cran/__linux__/noble/latest'))" >> "$R_HOME/etc/Rprofile.site"

# Install pak for better package management
RUN Rscript -e "install.packages('pak', repos = sprintf('https://r-lib.github.io/p/pak/devel/%s/%s/%s', .Platform\$pkgType, R.Version()\$os, R.Version()\$arch))"

SHELL ["/bin/bash", "-c"]
ADD . /
RUN ["chmod", "+x", "/scripts/install_cran_packages_r.sh"]
Expand Down
2 changes: 2 additions & 0 deletions base_images/2i2c/r-base/environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ dependencies:
# Python packages only - NO R packages in conda
- gdal=3.10.2
- nodejs=20.19.5
- pdal=2.8.4
- rclone=1.74.2
- rtree=1.4.1
- unzip=6.0
- pip=26.0
Expand Down
2 changes: 1 addition & 1 deletion base_images/2i2c/r-base/scripts/init-user.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
R_SITE_ENV=$(R RHOME)/etc/Renviron.site

# Variables we want to add to Renviron
VARS=("AWS_ROLE_ARN" "AWS_WEB_IDENTITY_TOKEN_FILE" "AWS_DEFAULT_REGION" "MAAP_PGT")
VARS=("AWS_ROLE_ARN" "AWS_WEB_IDENTITY_TOKEN_FILE" "AWS_DEFAULT_REGION")

echo "--- Updating R Site Environment Variables ---"

Expand Down
186 changes: 0 additions & 186 deletions base_images/2i2c/r-base/scripts/install2.r

This file was deleted.

76 changes: 34 additions & 42 deletions base_images/2i2c/r-base/scripts/install_cran_packages_r.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,51 +5,43 @@ set -e
export DEBIAN_FRONTEND=noninteractive

## build ARGs
NCPUS=${NCPUS:--1}
R_LIB=${R_LIB:-/usr/local/lib/R/site-library}

# Install recommended R packages first to avoid warnings
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "codetools"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "tmap"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "tidyterra"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "BIOMASS"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "nlraa"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "geojsonio"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "future"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://r-lidar.r-universe.dev" -n "$NCPUS" "lasR"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "partykit"
# Random fields is deprecated as of 2022
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "randomForest"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "RCSF"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "RPostgreSQL"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "car"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "chron"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "egg"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "ggpubr"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "ggspatial"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "ggtext"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "gsubfn"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "microbenchmark"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "minpack.lm"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "patchwork"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "paws"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "pool"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "proto"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "protolite"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "rgee"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "rlist"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "rnaturalearth"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "rockchalk"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "RODBC"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "rstac"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "RStoolbox"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "snow"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "sqldf"
Rscript /scripts/install2.r --error --skipmissing --skipinstalled -l "$R_LIB" -r "https://cran.r-project.org" -n "$NCPUS" "duckdb"
# Install CRAN packages using pak (much faster with pre-built binaries)
# pak automatically handles parallel downloads and dependency resolution
Rscript -e "pak::pak(c(
'tidyterra',
'BIOMASS',
'nlraa',
'geojsonio',
'partykit',
'randomForest',
'RCSF',
'RPostgreSQL',
'car',
'chron',
'egg',
'ggpubr',
'ggtext',
'gsubfn',
'microbenchmark',
'minpack.lm',
'patchwork',
'paws',
'pool',
'proto',
'protolite',
'rgee',
'rlist',
'rockchalk',
'RODBC',
'RStoolbox',
'snow',
'sqldf'
), lib = '$R_LIB', ask = FALSE)"

# Install Bioconductor packages
# BiocManager must be installed first, then use it to install Bioconductor packages
Rscript -e "BiocManager::install('rhdf5', lib = '$R_LIB', Ncpus = $NCPUS, update = FALSE, ask = FALSE)"
# Install lasR from r-universe (pak supports alternative repos)
Rscript -e "pak::pak('r-lidar/lasR', lib = '$R_LIB', ask = FALSE)"

# Clean up
rm -rf /var/lib/apt/lists/*
Expand Down
10 changes: 9 additions & 1 deletion base_images/2i2c/r/docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,12 @@ RUN conda init
ARG IMAGE_REF
ENV DOCKERIMAGE_PATH_BASE_IMAGE=${IMAGE_REF}
ARG DEFAULT_DOCKERFILE_PATH
ENV DOCKERIMAGE_PATH_DEFAULT=${DEFAULT_DOCKERFILE_PATH}
ENV DOCKERIMAGE_PATH_DEFAULT=${DEFAULT_DOCKERFILE_PATH}

USER root
COPY scripts/init-user.sh /usr/local/bin/init-user.sh
RUN chmod +x /usr/local/bin/init-user.sh
USER ${NB_USER}

# This script returns control to base image's /srv/start after, need this for rclone
ENTRYPOINT ["/usr/local/bin/init-user.sh"]
38 changes: 37 additions & 1 deletion base_images/2i2c/r/scripts/init-user.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,43 @@
#!/bin/bash

REGION="${AWS_DEFAULT_REGION:-us-west-2}"
# First, set up R environment variables from r-base init script
R_SITE_ENV=$(R RHOME)/etc/Renviron.site

# Variables we want to add to Renviron
VARS=("AWS_ROLE_ARN" "AWS_WEB_IDENTITY_TOKEN_FILE" "AWS_DEFAULT_REGION" "MAAP_PGT")

echo "--- Updating R Site Environment Variables ---"

# Loop through the variables and append them if they exist in the current shell
for var_name in "${VARS[@]}"; do
# Use indirect expansion to get the value of the variable name
var_value="${!var_name}"

if [ -n "$var_value" ]; then
echo "Adding $var_name to $R_SITE_ENV"
# Check if the line already exists to avoid duplicates
if ! grep -q "^$var_name=" "$R_SITE_ENV"; then
echo "$var_name=$var_value" >> "$R_SITE_ENV"
else
# Update existing line if it changed
sed -i "s|^$var_name=.*|$var_name=$var_value|" "$R_SITE_ENV"
fi
else
echo "Skipping $var_name: Not set in shell environment."
fi
done

# File ends with a newline
echo "" >> "$R_SITE_ENV"

# Needed to run awsv2 and aws
awscliv2 --install
CONDA_BIN=$(dirname $(which python))
ln -sf $(which awsv2) "$CONDA_BIN/aws"

# Now set up rclone
REGION="${AWS_DEFAULT_REGION:-us-west-2}"
rclone config create maap-s3 s3 provider=AWS env_auth=true region="$REGION" no_check_bucket true

# Hand control to the base image's /srv/start which handles all initialization
exec /srv/start "$@"