Skip to content

Commit 32e1c1a

Browse files
committed
cleanup of variables in Makefle and added check for write permissions to ope-start.sh
1 parent 9bf204c commit 32e1c1a

File tree

2 files changed

+131
-126
lines changed

2 files changed

+131
-126
lines changed

Makefile

+74-73
Original file line numberDiff line numberDiff line change
@@ -3,79 +3,80 @@
33
.IGNORE: ope root
44

55
# We use this to choose between a jupyter or a gradescope build
6-
BASE?=jupyter
6+
BASE := jupyter
77

8-
OPE_BOOK?=$(shell cat base/ope_book)
8+
OPE_BOOK := $(shell cat base/ope_book)
99
# USER id
10-
OPE_UID?=$(shell cat base/ope_uid)
10+
OPE_UID := $(shell cat base/ope_uid)
1111

1212
# we use this to choose between a build from the blessed known stable version or a test version
13-
VERSION?=stable
13+
VERSION := stable
1414

15-
BASE_REG?=$(shell cat base/base_registry)/
16-
BASE_IMAGE?=$(shell cat base/base_image)
17-
BASE_STABLE_TAG?=$(shell cat base/base_tag)
18-
BASE_TEST_TAG?=:latest
15+
BASE_REG := $(shell cat base/base_registry)/
16+
BASE_IMAGE := $(shell cat base/base_image)
17+
BASE_STABLE_TAG := $(shell cat base/base_tag)
18+
BASE_TEST_TAG := :latest
1919

20-
DATE_TAG=$(shell date +"%m.%d.%y_%H.%M.%S")
20+
DATE_TAG := $(shell date +"%m.%d.%y_%H.%M.%S")
2121

22-
PRIVATE_USER?=$(shell if [[ -a base/private_user ]]; then cat base/private_user; else echo ${USER}; fi)
23-
PRIVATE_REG?=$(shell cat base/private_registry)/
24-
PRIVATE_IMAGE?=$(PRIVATE_USER)/$(OPE_BOOK)
25-
PRIVATE_STABLE_TAG?=:stable
26-
PRIVATE_TEST_TAG?=:test
22+
PRIVATE_USER := $(shell if [[ -a base/private_user ]]; then cat base/private_user; else echo ${USER}; fi)
23+
PRIVATE_REG := $(shell cat base/private_registry)/
24+
PRIVATE_IMAGE := $(PRIVATE_USER)/$(OPE_BOOK)
25+
PRIVATE_STABLE_TAG := :stable
26+
PRIVATE_TEST_TAG := :test
2727

28-
PUBLIC_USER?=$(shell cat base/ope_book_user)
29-
PUBLIC_REG?=$(shell cat base/ope_book_registry)/
30-
PUBLIC_IMAGE?=$(PUBLIC_USER)/$(OPE_BOOK)
31-
PUBLIC_STABLE_TAG?=:stable
32-
PUBLIC_TEST_TAG?=:test
28+
PUBLIC_USER := $(shell cat base/ope_book_user)
29+
PUBLIC_REG := $(shell cat base/ope_book_registry)/
30+
PUBLIC_IMAGE := $(PUBLIC_USER)/$(OPE_BOOK)
31+
PUBLIC_STABLE_TAG := :stable
32+
PUBLIC_TEST_TAG := :test
3333

34-
BASE_DISTRO_PACKAGES = $(shell cat base/distro_pkgs)
34+
BASE_DISTRO_PACKAGES := $(shell cat base/distro_pkgs)
3535

36+
# use recursive assignment to defer execution until we have mamba versions made
3637
PYTHON_PREREQ_VERSIONS_STABLE = $(shell cat base/python_prereqs | base/mkversions)
3738
PYTHON_INSTALL_PACKAGES_STABLE = $(shell cat base/python_pkgs | base/mkversions)
3839

39-
PYTHON_PREREQ_VERSIONS_TEST =
40-
PYTHON_INSTALL_PACKAGES_TEST = $(shell cat base/python_pkgs)
40+
PYTHON_PREREQ_VERSIONS_TEST :=
41+
PYTHON_INSTALL_PACKAGES_TEST := $(shell cat base/python_pkgs)
4142

42-
JUPYTER_ENABLE_EXTENSIONS = $(shell cat base/jupyter_enable_exts)
43+
JUPYTER_ENABLE_EXTENSIONS := $(shell cat base/jupyter_enable_exts)
4344

4445
# build gdb from source to ensure we get the right version and build with tui support
45-
GDB_BUILD_SRC=gdb-12.1
46+
GDB_BUILD_SRC := gdb-12.1
4647

4748
# expand installation so that the image feels more like a proper UNIX user environment with man pages, etc.
48-
UNMIN=yes
49+
UNMIN := yes
4950

5051
# external content
51-
ARCH64VMTGZ=https://cs-web.bu.edu/~jappavoo/Resources/UC-SLS/aarch64vm.tgz
52+
ARCH64VMTGZ := https://cs-web.bu.edu/~jappavoo/Resources/UC-SLS/aarch64vm.tgz
5253

5354
# Common docker run configuration designed to mirror as closely as possible the openshift experience
5455
# if port mapping for SSH access
55-
SSH_PORT?=2222
56+
SSH_PORT := 2222
5657

5758
# we mount here to match openshift
58-
MOUNT_DIR=/opt/app-root/src
59-
HOST_DIR=${HOME}
59+
MOUNT_DIR := /opt/app-root/src
60+
HOST_DIR := ${HOME}
6061

6162
ifeq ($(BASE),jupyter)
6263
ifeq ($(VERSION),stable)
63-
BASE_TAG=$(BASE_STABLE_TAG)
64-
PRIVATE_TAG=$(PRIVATE_STABLE_TAG)
65-
PUBLIC_TAG=$(PUBLIC_STABLE_TAG)
66-
PYTHON_PREREQ_VERSIONS=$(PYTHON_PREREQ_VERSIONS_STABLE)
67-
PYTHON_INSTALL_PACKAGES=$(PYTHON_INSTALL_PACKAGES_STABLE)
64+
BASE_TAG := $(BASE_STABLE_TAG)
65+
PRIVATE_TAG := $(PRIVATE_STABLE_TAG)
66+
PUBLIC_TAG := $(PUBLIC_STABLE_TAG)
67+
PYTHON_PREREQ_VERSIONS = $(PYTHON_PREREQ_VERSIONS_STABLE)
68+
PYTHON_INSTALL_PACKAGES = $(PYTHON_INSTALL_PACKAGES_STABLE)
6869
else
69-
BASE_TAG=$(BASE_TEST_TAG)
70-
PRIVATE_TAG=$(PRIVATE_TEST_TAG)
71-
PUBLIC_TAG=$(PUBLIC_TEST_TAG)
72-
PYTHON_PREREQ_VERSIONS=$(PYTHON_PREREQ_VERSIONS_TEST)
73-
PYTHON_INSTALL_PACKAGES=$(PYTHON_INSTALL_PACKAGES_TEST)
70+
BASE_TAG := $(BASE_TEST_TAG)
71+
PRIVATE_TAG := $(PRIVATE_TEST_TAG)
72+
PUBLIC_TAG := $(PUBLIC_TEST_TAG)
73+
PYTHON_PREREQ_VERSIONS = $(PYTHON_PREREQ_VERSIONS_TEST)
74+
PYTHON_INSTALL_PACKAGES = $(PYTHON_INSTALL_PACKAGES_TEST)
7475
endif
7576
else
76-
BASE_IMAGE=gradescope/auto-builds
77-
BASE_VERSION=:ubuntu-20.04
78-
IMAGE:=rh_ee_adhayala/bu-cs-book-gradescope
77+
BASE_IMAGE := gradescope/auto-builds
78+
BASE_VERSION := :ubuntu-20.04
79+
IMAGE := rh_ee_adhayala/bu-cs-book-gradescope
7980
endif
8081

8182
help:
@@ -86,9 +87,9 @@ help:
8687
python-versions: ## gather version of python packages
8788
python-versions: base/mamba_versions.stable
8889

89-
base/mamba_versions.stable: IMAGE=$(PRIVATE_IMAGE)
90-
base/mamba_versions.stable: ARGS?=/bin/bash
91-
base/mamba_versions.stable: DARGS?=
90+
base/mamba_versions.stable: IMAGE = $(PRIVATE_IMAGE)
91+
base/mamba_versions.stable: ARGS ?= /bin/bash
92+
base/mamba_versions.stable: DARGS ?=
9293
base/mamba_versions.stable:
9394
docker run -it --rm $(DARGS) $(PRIVATE_REG)$(IMAGE)$(PRIVATE_TAG) mamba list | tr -d '\r' > $@
9495

@@ -99,8 +100,8 @@ base/aarch64vm/README.md:
99100
cd base && wget -O - ${ARCH64VMTGZ} | tar -zxf -
100101

101102
build: base/aarch64vm/README.md
102-
build: IMAGE=$(PRIVATE_IMAGE)
103-
build: DARGS?=--build-arg FROM_REG=$(BASE_REG) \
103+
build: IMAGE = $(PRIVATE_IMAGE)
104+
build: DARGS ?= --build-arg FROM_REG=$(BASE_REG) \
104105
--build-arg FROM_IMAGE=$(BASE_IMAGE) \
105106
--build-arg FROM_TAG=$(BASE_TAG) \
106107
--build-arg OPE_UID=$(OPE_UID) \
@@ -115,8 +116,8 @@ build: ## Make the image customized appropriately
115116
rm base/mamba_versions.stable
116117
make base/mamba_versions.stable
117118

118-
push: IMAGE=$(PRIVATE_IMAGE)
119-
push: DARGS?=
119+
push: IMAGE = $(PRIVATE_IMAGE)
120+
push: DARGS ?=
120121
push: ## push private build
121122
# make dated version
122123
docker tag $(PRIVATE_REG)$(IMAGE)$(PRIVATE_TAG) $(PRIVATE_REG)$(IMAGE)$(PRIVATE_TAG)_$(DATE_TAG)
@@ -125,8 +126,8 @@ push: ## push private build
125126
# push to update tip to current version
126127
docker push $(PRIVATE_REG)$(IMAGE)$(PRIVATE_TAG)
127128

128-
publish: IMAGE=$(PUBLIC_IMAGE)
129-
publish: DARGS?=
129+
publish: IMAGE = $(PUBLIC_IMAGE)
130+
publish: DARGS ?=
130131
publish: ## publish current private build to public published version
131132
# make dated version
132133
docker tag $(PRIVATE_REG)$(PRIVATE_IMAGE)$(PRIVATE_TAG) $(PUBLIC_REG)$(IMAGE)$(PUBLIC_TAG)_$(DATE_TAG)
@@ -137,37 +138,37 @@ publish: ## publish current private build to public published version
137138
# push to update tip to current version
138139
docker push $(PUBLIC_REG)$(IMAGE)$(PUBLIC_TAG)
139140

140-
root: IMAGE?=$(PRIVATE_IMAGE)
141-
root: REG?=$(PRIVATE_REG)
142-
root: TAG?=$(PRIVATE_TAG)
143-
root: ARGS?=/bin/bash
144-
root: DARGS?=-u 0
141+
root: IMAGE = $(PRIVATE_IMAGE)
142+
root: REG = $(PRIVATE_REG)
143+
root: TAG = $(PRIVATE_TAG)
144+
root: ARGS ?= /bin/bash
145+
root: DARGS ?= -u 0
145146
root: ## start private version with root shell to do admin and poke around
146147
-docker run -it --rm $(DARGS) $(REG)$(IMAGE)$(TAG) $(ARGS)
147148

148-
ope: IMAGE?=$(PRIVATE_IMAGE)
149-
ope: REG?=$(PRIVATE_REG)
150-
ope: TAG?=$(PRIVATE_TAG)
151-
ope: ARGS?=/bin/bash
152-
ope: DARGS?=
149+
ope: IMAGE = $(PRIVATE_IMAGE)
150+
ope: REG = $(PRIVATE_REG)
151+
ope: TAG = $(PRIVATE_TAG)
152+
ope: ARGS ?= /bin/bash
153+
ope: DARGS ?=
153154
ope: ## start privae version with root shell to do admin and poke around
154155
-docker run -it --rm $(DARGS) $(REG)$(IMAGE)$(TAG) $(ARGS)
155156

156-
nb: IMAGE?=$(PUBLIC_IMAGE)
157-
nb: REG?=$(PUBLIC_REG)
158-
nb: TAG?=$(PUBLIC_TAG)
159-
nb: ARGS?=
160-
nb: DARGS?=-e DOCKER_STACKS_JUPYTER_CMD=notebook -v "${HOST_DIR}":"${MOUNT_DIR}" -e SSH_AUTH_SOCK=${SSH_AUTH_SOCK} -p ${SSH_PORT}:22
161-
nb: PORT?=8888
157+
nb: IMAGE = $(PUBLIC_IMAGE)
158+
nb: REG = $(PUBLIC_REG)
159+
nb: TAG = $(PUBLIC_TAG)
160+
nb: ARGS ?=
161+
nb: DARGS ?= -e DOCKER_STACKS_JUPYTER_CMD=notebook -v "${HOST_DIR}":"${MOUNT_DIR}" -e SSH_AUTH_SOCK=${SSH_AUTH_SOCK} -p ${SSH_PORT}:22
162+
nb: PORT ?= 8888
162163
nb: ## start published version with jupyter classic notebook interface
163164
docker run -it --rm -p $(PORT):$(PORT) $(DARGS) $(REG)$(IMAGE)$(TAG) $(ARGS)
164165

165-
lab: IMAGE?=$(PUBLIC_IMAGE)
166-
lab: REG?=$(PUBLIC_REG)
167-
lab: TAG?=$(PUBLIC_TAG)
168-
lab: ARGS?=
169-
lab: DARGS?=-u $(OPE_UID) -v "${HOST_DIR}":"${MOUNT_DIR}" -v "${SSH_AUTH_SOCK}":"${SSH_AUTH_SOCK}" -e SSH_AUTH_SOCK=${SSH_AUTH_SOCK} -p ${SSH_PORT}:22
170-
lab: PORT?=8888
166+
lab: IMAGE = $(PUBLIC_IMAGE)
167+
lab: REG = $(PUBLIC_REG)
168+
lab: TAG = $(PUBLIC_TAG)
169+
lab: ARGS ?=
170+
lab: DARGS ?= -u $(OPE_UID) -v "${HOST_DIR}":"${MOUNT_DIR}" -v "${SSH_AUTH_SOCK}":"${SSH_AUTH_SOCK}" -e SSH_AUTH_SOCK=${SSH_AUTH_SOCK} -p ${SSH_PORT}:22
171+
lab: PORT ?= 8888
171172
lab: ## start published version with jupyter lab interface
172173
docker run -it --rm -p $(PORT):$(PORT) $(DARGS) $(REG)$(IMAGE)$(TAG) $(ARGS)
173174

base/start-notebook.d/ope-sartup.sh

+57-53
Original file line numberDiff line numberDiff line change
@@ -4,67 +4,71 @@ SN=ope-startup.sh
44
[[ -z $MOUNT_DIR ]] && export MOUNT_DIR=/opt/app-root/src
55

66
# this script is designed to be run by the jupyter stack /usr/local/bin/start.sh
7-
echo "$SN: BEGIN: $(id -a)"
7+
echo "$0: $SN: BEGIN: $(id -a)"
88

99
if [[ -d $MOUNT_DIR ]]; then
1010
echo "$SN: Found $MOUNT_DIR"
11-
FILE=.gitconfig
12-
echo "$SN: Mapping $FILE to $MOUNT_DIR/$FILE"
13-
if [[ ! -a $HOME/$FILE ]]; then
14-
if [[ ! -a $MOUNT_DIR/$FILE ]]; then
15-
echo "$SN: creating $MOUNT_DIR/$FILE"
16-
touch $MOUNT_DIR/$FILE
17-
fi
18-
if [[ -a $MOUNT_DIR/$FILE ]]; then
19-
echo "$SN: Linking $MOUNT_DIR/$FILE -> $HOME/$FILE"
20-
ln -s $MOUNT_DIR/$FILE $HOME/$FILE
21-
fi
22-
fi
23-
DIR=.ssh
24-
echo "$SN: Mapping $FILE to $MOUNT_DIR/$FILE"
25-
if [[ ! -d $HOME/$DIR ]]; then
26-
if [[ ! -d $MOUNT_DIR/$DIR ]]; then
27-
echo "$SN: creating $MOUNT_DIR/$DIR"
28-
if mkdir $MOUNT_DIR/$DIR; then
29-
if [[ $DIR == .ssh ]]; then
30-
echo "$SN: Fixing permisions for $MOUNT/$DIR"
31-
chmod 700 $MOUNT_DIR/$DIR
32-
fi
33-
fi
34-
fi
35-
if [[ -d $MOUNT_DIR/$DIR ]]; then
36-
echo "$SN: Linking $MOUNT_DIR/$DIR -> $HOME/$DIR"
37-
ln -s $MOUNT_DIR/$DIR $HOME/$DIR
38-
if [[ $DIR = .ssh ]]; then
39-
# As per the standard jupyter startup scripts we use the following test to
40-
# figure out if we have been started in a jupyterhub env
41-
if [[ -n "${JUPYTERHUB_API_TOKEN}" ]]; then
42-
# during jupyter stacks startup logic "fixes permissions" on home directories
43-
# this causes group permissions to be set. We undo this with a hammer on .ssh
44-
echo "$SN: Fixing permissions in $HOME/$DIR"
45-
chmod -R go-rwxs $HOME/$DIR
46-
fi
47-
fi
48-
fi
49-
fi
11+
if [[ ! -w $MOUNT_DIR ]]; then
12+
echo "$SN: $MOUNT_DIR not writeable skipping mappings"
13+
else
14+
FILE=.gitconfig
15+
echo "$SN: Mapping $FILE to $MOUNT_DIR/$FILE"
16+
if [[ ! -a $HOME/$FILE ]]; then
17+
if [[ ! -a $MOUNT_DIR/$FILE ]]; then
18+
echo "$SN: creating $MOUNT_DIR/$FILE"
19+
touch $MOUNT_DIR/$FILE
20+
fi
21+
if [[ -a $MOUNT_DIR/$FILE ]]; then
22+
echo "$SN: Linking $MOUNT_DIR/$FILE -> $HOME/$FILE"
23+
ln -s $MOUNT_DIR/$FILE $HOME/$FILE
24+
fi
25+
fi
26+
DIR=.ssh
27+
echo "$SN: Mapping $FILE to $MOUNT_DIR/$FILE"
28+
if [[ ! -d $HOME/$DIR ]]; then
29+
if [[ ! -d $MOUNT_DIR/$DIR ]]; then
30+
echo "$SN: creating $MOUNT_DIR/$DIR"
31+
if mkdir $MOUNT_DIR/$DIR; then
32+
if [[ $DIR == .ssh ]]; then
33+
echo "$SN: Fixing permisions for $MOUNT/$DIR"
34+
chmod 700 $MOUNT_DIR/$DIR
35+
fi
36+
fi
37+
fi
38+
if [[ -d $MOUNT_DIR/$DIR ]]; then
39+
echo "$SN: Linking $MOUNT_DIR/$DIR -> $HOME/$DIR"
40+
ln -s $MOUNT_DIR/$DIR $HOME/$DIR
41+
if [[ $DIR = .ssh ]]; then
42+
# As per the standard jupyter startup scripts we use the following test to
43+
# figure out if we have been started in a jupyterhub env
44+
if [[ -n "${JUPYTERHUB_API_TOKEN}" ]]; then
45+
# during jupyter stacks startup logic "fixes permissions" on home directories
46+
# this causes group permissions to be set. We undo this with a hammer on .ssh
47+
echo "$SN: Fixing permissions in $HOME/$DIR"
48+
chmod -R go-rwxs $HOME/$DIR
49+
fi
50+
fi
51+
fi
52+
fi
5053

51-
if [[ ! -L $HOME/.jupyter/lab && -a $MOUNT_DIR ]]; then
52-
if [[ ! -a $MOUNT_DIR/jupyter/lab ]]; then
53-
mkdir -p $MOUNT_DIR/jupyter/lab
54-
fi
55-
[[ -a $HOME/.jupyter/lab ]] && mv $HOME/.jupyter/lab $HOME/.jupyter/lab.old
56-
echo "$SN: linking: ln -s /opt/app-root/src/jupyter/lab ~/.jupyter/lab"
57-
ln -s $MOUNT_DIR/jupyter/lab $HOME/.jupyter/lab
58-
fi
54+
if [[ ! -L $HOME/.jupyter/lab && -a $MOUNT_DIR ]]; then
55+
if [[ ! -a $MOUNT_DIR/jupyter/lab ]]; then
56+
mkdir -p $MOUNT_DIR/jupyter/lab
57+
fi
58+
[[ -a $HOME/.jupyter/lab ]] && mv $HOME/.jupyter/lab $HOME/.jupyter/lab.old
59+
echo "$SN: linking: ln -s /opt/app-root/src/jupyter/lab ~/.jupyter/lab"
60+
ln -s $MOUNT_DIR/jupyter/lab $HOME/.jupyter/lab
61+
fi
5962

60-
if [[ -a $MOUNT_DIR/.myjupyter_start.sh ]]; then
61-
echo "$SN: Found $MOUNT_DIR/.myjupyter_start.sh: sourcing it"
62-
. $MOUNT_DIR/.myjupyter_start.sh
63-
fi
63+
if [[ -a $MOUNT_DIR/.myjupyter_start.sh ]]; then
64+
echo "$SN: Found $MOUNT_DIR/.myjupyter_start.sh: sourcing it"
65+
. $MOUNT_DIR/.myjupyter_start.sh
66+
fi
67+
fi
6468
fi
6569

6670
# force classic notebook interface when run from start-singleuser.sh (aka we are on jupyter hub)
6771
export JUPYTERHUB_SINGLEUSER_APP='notebook.notebookapp.NotebookApp'
6872
echo "$SN: forced notebook interface on JupyterHub: JUPYTERHUB_SINGLEUSER_APP=$JUPYTERHUB_SINGLEUSER_APP"
6973

70-
echo "$0: END"
74+
echo "$0: $SN: END"

0 commit comments

Comments
 (0)