diff --git a/.gitignore b/.gitignore index ca642a3d8effbfb4206e360d8a673ae94f360056..fb33413d8e9c49907525751db221e78a3076e731 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .env homedir +.*.sw? diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 32446b9ca58834a5ee1b55c2f64233b7ec618064..0000000000000000000000000000000000000000 --- a/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -FROM kasmweb/core-ubuntu-noble:1.16.0 as kasmvnc-base - -ARG SPYDER -ARG ANACONDA - -USER root - -RUN apt-get update -RUN mkdir /install - -WORKDIR /install -# === Install Spyder === # - -RUN if [ "$SPYDER" = true ] ; then apt-get install -y python3-spyder; fi - -# === Install anaconda === # -RUN if [ "$ANACONDA" = true ] ; then \ - wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh; \ - bash Anaconda3-2024.02-1-Linux-x86_64.sh -b; \ - chmod u+x /home/kasm-user/anaconda3/etc/profile.d/conda.sh; \ - echo "source ~/anaconda3/etc/profile.d/conda.sh" >> /home/kasm-default-profile/.bashrc; \ - echo "conda activate" >> /home/kasm-default-profile/.bashrc; \ - fi - -WORKDIR /home/kasm-user -USER 1000 diff --git a/docker-compose.yml b/docker-compose.yml index 5377c43cdab29dd51e431f448123d2572f5e6254..2dba154047bb65fed2ab4d1d0f342d79b0f4761f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ services: kasm: build: - context: ./ + context: ./docker/ target: kasmvnc-base args: - SPYDER=${SPYDER} @@ -9,10 +9,14 @@ services: image: "kasmvnc-ubuntu-noble:spyder-${SPYDER}_anaconda-${ANACONDA}" container_name: KasmVNC-ubuntu volumes: - - ./homedir:/home/kasm_user:rw + - homedir:/home/:rw + - etc_shadow:/opt/shadow environment: - VNC_PW=${PASS} + - SPYDER=${SPYDER} + - ANACONDA=${ANACONDA} volumes: homedir: + etc_shadow: diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..a6cc1bece834eb46b98df4cd2f255374d8261da1 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,57 @@ +FROM kasmweb/core-ubuntu-noble:1.16.0 as kasmvnc-base +USER root + +ENV HOME /home/kasm-default-profile +ENV STARTUPDIR /dockerstartup +ENV INST_SCRIPTS $STARTUPDIR/install +WORKDIR $HOME + +######### Customize Container Here ########### + +ARG SPYDER +ARG ANACONDA +ARG ANACONDA_VERS=Anaconda3-2024.02-1 + + +RUN apt-get update && \ + apt-get purge -y language-pack-* && \ + apt-get -y dist-upgrade && \ + apt-get install -y \ + firefox \ + gnome-system-tools \ + inotify-tools \ + language-pack-fr \ + language-pack-fr-base \ + language-pack-en \ + language-pack-en-base && \ + locale-gen --purge fr_FR.UTF-8 en_US.UTF-8 +RUN mkdir /install + +WORKDIR /install +# === Install Spyder === # + +RUN if [ "$SPYDER" = true ] ; then apt-get install -y python3-spyder; fi + +# === Install anaconda === # +RUN if [ "$ANACONDA" = true ] ; then \ + wget https://repo.anaconda.com/archive/${ANACONDA_VERS}-Linux-x86_64.sh; \ + bash ${ANACONDA_VERS}-Linux-x86_64.sh -b; \ + chmod u+x $HOME/anaconda3/etc/profile.d/conda.sh; \ + echo "source ~/anaconda3/etc/profile.d/conda.sh" >> /home/kasm-default-profile/.bashrc; \ + echo "conda activate" >> /home/kasm-default-profile/.bashrc; \ + fi + +RUN rm -rf $HOME/.cache + +COPY custom_startup.sh $STARTUPDIR/custom_startup.sh +COPY shadow_monitor.sh / + +######### End Customizations ########### + +RUN chown 1000:0 $HOME + +ENV HOME /home/kasm-user +WORKDIR $HOME +RUN mkdir -p $HOME && chown -R 1000:0 $HOME + +USER 1000 diff --git a/docker/custom_startup.sh b/docker/custom_startup.sh new file mode 100755 index 0000000000000000000000000000000000000000..d4b11c816c449d0431ee57eca31bcf1758cde415 --- /dev/null +++ b/docker/custom_startup.sh @@ -0,0 +1,46 @@ +#!/bin/bash +VNC_USER=kasm-user + +sed -i -e "s@kasm-default-profile@$VNC_USER@g" ~/anaconda3/etc/profile.d/conda.sh + +# Add changepassword icon +mkdir -p /home/$VNC_USER/Desktop +cat <<EOF > /home/$VNC_USER/Desktop/users.desktop +[Desktop Entry] +Type=Link +Name=Change password +Icon=config-users +URL=/usr/share/applications/users.desktop +terminal=true +EOF + +if [ $ANACONDA == 'true' ]; then +cat <<eof > /home/$VNC_USER/Desktop/anaconda.desktop +[Desktop Entry] +Type=Application +Name=Anaconda +Terminal=true +Icon=/home/$VNC_USER/anaconda3/lib/python3.8/site-packages/anaconda_navigator/static/images/anaconda.png +Exec=/home/$VNC_USER/anaconda3/bin/anaconda-navigator +eof +fi + +if [ $SPYDER == 'true' ]; then +cat <<eof > /home/$VNC_USER/Desktop/spyder.desktop +[Desktop Entry] +Type=Application +Name=Spyder +Terminal=true +Icon=/home/$VNC_USER/anaconda3/share/icons/spyder.png +Exec=$(which spyder) +eof +fi + +if [ -f "/opt/shadow/shadow" ] +then + echo "Copying shadow file" + cp /opt/shadow/shadow /etc/shadow + sync +fi + +/shadow_monitor.sh diff --git a/docker/shadow_monitor.sh b/docker/shadow_monitor.sh new file mode 100755 index 0000000000000000000000000000000000000000..4f3c25233bd677a301a87694ca239d21541e5674 --- /dev/null +++ b/docker/shadow_monitor.sh @@ -0,0 +1,13 @@ +#!/bin/bash +sleep 10 + +while true; do + modif=$(inotifywait --event move /etc) + echo "Modif : '$modif'" + if [ ! -z "$(echo $modif | grep 'MOVED_FROM nshadow')" ]; then + echo "Shadow file has changed" + sync + cp /etc/shadow /opt/shadow/shadow + fi +done +