1
+ #! /bin/bash
2
+ set -e
3
+
4
+ EFS_MOUNT_POINT=" /opt/amazon/sagemaker"
5
+ EBS_MOUNT_POINT=" /home/sagemaker-user"
6
+
7
+ persistent_settings_folder=" ${EBS_MOUNT_POINT} /sagemaker-code-editor-server-data"
8
+ default_settings_folder=" ${EFS_MOUNT_POINT} /sagemaker-code-editor-server-data"
9
+
10
+ override_machine_settings () {
11
+ # create a new settings file with preset defaults or merge the defaults into the existing settings file
12
+ local settings_relative_path=" data/Machine"
13
+ local settings_file_path_suffix=" ${settings_relative_path} /settings.json"
14
+ local persistent_machine_settings_file=" ${persistent_settings_folder} /${settings_file_path_suffix} "
15
+ local default_machine_settings_file=" ${default_settings_folder} /${settings_file_path_suffix} "
16
+
17
+ if [ ! -f " $persistent_machine_settings_file " ]; then
18
+ # copy settings file to EBS if it doesn't exist in EBS
19
+ mkdir -p " ${persistent_settings_folder} /${settings_relative_path} "
20
+ cp " $default_machine_settings_file " " $persistent_machine_settings_file "
21
+ echo " Created persistent settings file with default settings at $persistent_machine_settings_file "
22
+ else
23
+ # if it does exist then merge settings
24
+ echo " File already exists: ${persistent_machine_settings_file} . Merging default settings with existing settings."
25
+ python3 /usr/local/bin/merge-settings-util.py " $persistent_machine_settings_file " " $default_machine_settings_file "
26
+ fi
27
+ }
28
+
29
+ copy_user_settings () {
30
+ local settings_relative_path=" data/User"
31
+ local settings_file_path_suffix=" ${settings_relative_path} /settings.json"
32
+ local persistent_user_settings_file=" ${persistent_settings_folder} /${settings_file_path_suffix} "
33
+ local default_user_settings_file=" ${default_settings_folder} /${settings_file_path_suffix} "
34
+ if [ ! -f " $persistent_user_settings_file " ]; then
35
+ # copy user settings file to EBS if it doesn't exist in EBS
36
+ mkdir -p " ${persistent_settings_folder} /${settings_relative_path} "
37
+ cp " $default_user_settings_file " " $persistent_user_settings_file "
38
+ echo " Created persistent settings file with default settings at $persistent_user_settings_file "
39
+ fi
40
+ }
41
+
42
+ install_prepackaged_extensions () {
43
+ local prepackaged_extensions_dir=" ${default_settings_folder} /extensions"
44
+ local persistent_extensions_dir=" ${persistent_settings_folder} /extensions"
45
+
46
+ # if extensions directory doesn't exist then this is the first time opening the app
47
+ if [ ! -d " ${persistent_extensions_dir} " ]; then
48
+ mkdir -p $persistent_extensions_dir
49
+
50
+ # find all pre-packaged extensions folders, symlink them to the persistent volume
51
+ find " $prepackaged_extensions_dir " -mindepth 1 -maxdepth 1 -type d | while read -r dir; do
52
+ dir_name=$( basename " $dir " )
53
+
54
+ ln -s " $dir " " ${persistent_extensions_dir} /${dir_name} "
55
+ echo " Added extension: $dir "
56
+ done
57
+ fi
58
+ }
59
+
60
+ set_code_editor_theme () {
61
+ echo " Setting code editor theme"
62
+ bash /etc/sagemaker-ui/set_code_editor_theme.sh
63
+ }
64
+
65
+ disableJupyterKernels () {
66
+ local kernel_list
67
+ kernel_list=$( jupyter kernelspec list)
68
+
69
+ for kernel in " $@ " ; do
70
+ if echo " $kernel_list " | grep -q " $kernel " ; then
71
+ echo " Removing kernel: $kernel "
72
+ jupyter kernelspec remove -f -y " $kernel "
73
+ else
74
+ echo " Kernel not found: $kernel "
75
+ fi
76
+ done
77
+ }
78
+
79
+ eval " $( micromamba shell hook --shell=bash) "
80
+
81
+ # Activate conda environment 'base', which is the default environment for sagemaker-distribution
82
+ micromamba activate base
83
+
84
+ # Disable Jupyter Kernels
85
+ disableJupyterKernels pysparkkernel sparkkernel glue_spark glue_pyspark
86
+
87
+ # Start code-editor server
88
+ if [ -n " $SAGEMAKER_APP_TYPE_LOWERCASE " ]; then
89
+ # SAGEMAKER_APP_TYPE is set, indicating the server is running within a SageMaker app.
90
+ override_machine_settings
91
+ copy_user_settings
92
+ install_prepackaged_extensions
93
+ set_code_editor_theme
94
+ # Configure the base url to be `/<app-type-in-lower-case>/default`.
95
+ sagemaker-code-editor --host 0.0.0.0 --port 8888 \
96
+ --without-connection-token \
97
+ --base-path " /$SAGEMAKER_APP_TYPE_LOWERCASE /default" \
98
+ --server-data-dir $persistent_settings_folder \
99
+ --extensions-dir ${persistent_settings_folder} /extensions \
100
+ --user-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-user-data
101
+ else
102
+ sagemaker-code-editor --host 0.0.0.0 --port 8888 \
103
+ --without-connection-token \
104
+ --server-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data \
105
+ --extension-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data/extensions \
106
+ --user-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-user-data
107
+ fi
0 commit comments