Skip to content
Snippets Groups Projects
Commit b21fd06c authored by Giuliano Taffoni's avatar Giuliano Taffoni
Browse files

Base with KASM 0.9.1 support

parent 4066791a
No related branches found
No related tags found
No related merge requests found
Showing
with 182 additions and 152 deletions
FROM lofar/lofar-pipeline:LOFAR-Release-4_0_16 FROM lofar/lofar-pipeline:LOFAR-Release-4_0_16
LABEL Maintainer Giuliano Taffoni <giuliano.taffoni@inaf.it>
USER root
# Set non-interactive # Set non-interactive
ENV DEBIAN_FRONTEND noninteractive ENV DEBIAN_FRONTEND noninteractive
# Always update when extending base images # Always update when extending base images
RUN apt update RUN apt update
RUN apt -y upgrade
#------------------------ #------------------------
# Install deps # Install deps
...@@ -13,6 +14,12 @@ RUN apt update ...@@ -13,6 +14,12 @@ RUN apt update
# Git, Curl, sudo and Nano # Git, Curl, sudo and Nano
RUN apt-get install git curl sudo nano -y RUN apt-get install git curl sudo nano -y
RUN apt -y install lubuntu-core libjpeg-dev wget sudo git curl nano vim emacs
RUN apt-get install -y supervisor strace net-tools
RUN sed -i 's\1\0\g' /etc/apt/apt.conf.d/20auto-upgrades
RUN ln -s /usr/share/lxde/wallpapers/lxde_blue.jpg /etc/alternatives/desktop-background
#
#------------------------ #------------------------
...@@ -36,64 +43,38 @@ COPY data/input_data /input_data ...@@ -36,64 +43,38 @@ COPY data/input_data /input_data
COPY data/output_data /output_data COPY data/output_data /output_data
RUN chown lofar:lofar /home/lofar && chown -R lofar:lofar /input_data && chown -R lofar:lofar /output_data RUN chown lofar:lofar /home/lofar && chown -R lofar:lofar /input_data && chown -R lofar:lofar /output_data
#----------------------
# Minimal Desktop
#----------------------
# Utilities
RUN apt-get install -y telnet unzip wget supervisor build-essential python-dev git-core openjdk-8-jre
# Global Supervisord conf
COPY files/supervisord.conf /etc/supervisor/
# Install xvfb that triggers minimal install of X base packages and xterm
RUN apt-get install xvfb xterm -y
# Install base packages for VNC server and headless desktop (2)
RUN cd /opt && wget https://bintray.com/tigervnc/stable/download_file?file_path=tigervnc-1.8.0.x86_64.tar.gz -O tigervnc-1.8.0.x86_64.tar.gz \
&& tar -zxvf tigervnc-1.8.0.x86_64.tar.gz \
&& mv tigervnc-1.8.0.x86_64 tigervnc
# Supervisord configuration
COPY files/supervisord_vnc.conf /etc/supervisor/conf.d/
COPY files/run_vnc.sh /etc/supervisor/conf.d/
COPY files/run_novnc.sh /etc/supervisor/conf.d/
RUN chmod 755 /etc/supervisor/conf.d/run_vnc.sh
RUN chmod 755 /etc/supervisor/conf.d/run_novnc.sh
# Web VNC (noVNC) v0.6.1.
# NOTE: this is a custom version from Doro Wu (fcwu.tw@gmail.com).
# TODO: Check differences and maybe move to 0.6.2
COPY files/noVNC.tar.gz /usr/lib/
RUN cd /usr/lib/ && tar -zxvf noVNC.tar.gz
COPY files/index.html /usr/lib/noVNC
RUN apt-get install -y net-tools
# Supervisord configuration
COPY files/supervisord_novnc.conf /etc/supervisor/conf.d/
# X environment setup/startup
RUN apt-get install fluxbox -y
COPY files/xstartup /opt/tigervnc/
RUN chmod 755 /opt/tigervnc/xstartup
# Prepare for logs # Prepare for logs
RUN mkdir /home/lofar/.logs && chown lofar:lofar /home/lofar/.logs RUN mkdir /home/lofar/.logs && chown lofar:lofar /home/lofar/.logs
# Add fluxbox customisations
COPY files/dot_fluxbox /home/lofar/.fluxbox
RUN chown -R lofar:lofar /home/lofar/.fluxbox
COPY files/background.jpg /usr/share/images/fluxbox/background.jpg
# Rename lofar home folder as a "vanilla" home folder RUN mkdir /home/lofar/.vnc
COPY files/config /home/lofar/.vnc
COPY files/xstartup /home/lofar/.vnc
RUN chmod 755 /home/lofar/.vnc/xstartup
RUN chown -R lofar:lofar /home/lofar/.vnc
# Rename user home folder as a "vanilla" home folder
RUN mv /home/lofar /lofar_home_vanilla RUN mv /home/lofar /lofar_home_vanilla
# Give write access to anyone to the home folder so the entrypoint will be able # Give write access to anyone to the home folder so the entrypoint will be able
# to copy over the /home/matauser_vanilla into /home/lofar (for Singularity) # to copy over the /home/matauser_vanilla into /home/metauser (for Singularity)
RUN chmod 777 /home RUN chmod 777 /home
# Copy and install kasmvnc
COPY files/kasmvnc-Linux-x86_64-0.9.tar.gz /tmp
RUN sudo tar xz --strip 1 -C / -f /tmp/kasmvnc-Linux-x86_64-0.9.tar.gz && rm /tmp/kasmvnc-Linux-x86_64-0.9.tar.gz
RUN mkdir /usr/local/share/kasmvnc/certs
RUN chown lofar.lofar /usr/local/share/kasmvnc/certs
COPY files/index.html /usr/local/share/kasmvnc/www/
# Global Supervisord conf
COPY files/supervisord.conf /etc/supervisor/
COPY files/supervisord_kasm.conf /etc/supervisor/conf.d/
COPY files/run_kasm.sh /etc/supervisor/conf.d/
RUN chmod 755 /etc/supervisor/conf.d/run_kasm.sh
#---------------------- #----------------------
# Entrypoint # Entrypoint
...@@ -108,6 +89,7 @@ RUN chmod 755 /entrypoint.sh ...@@ -108,6 +89,7 @@ RUN chmod 755 /entrypoint.sh
# Set entrypoint # Set entrypoint
ENTRYPOINT ["/entrypoint.sh"] ENTRYPOINT ["/entrypoint.sh"]
RUN apt -y clean
# Set user lofar # Set user lofar
USER lofar USER lofar
......
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
# (see https://stackoverflow.com/questions/4381618/exit-a-script-on-error) # (see https://stackoverflow.com/questions/4381618/exit-a-script-on-error)
set -e set -e
GUI=True
if [ "x$SAFE_MODE" == "xTrue" ]; then if [ "x$SAFE_MODE" == "xTrue" ]; then
...@@ -18,9 +21,9 @@ else ...@@ -18,9 +21,9 @@ else
if [ "x$GUI" == "xTrue" ]; then if [ "x$GUI" == "xTrue" ]; then
if [ "x$BASE_PORT" == "x" ]; then if [ "x$BASE_PORT" == "x" ]; then
echo "[INFO] No task base port set, will set noVNC port 8590 and VNC port 5900 with desktop id \"0\"" echo "[INFO] No task base port set, will set KasmVNC port 8443 with desktop id \"1\""
else else
echo "[INFO] Task base port set, will set noVNC port $BASE_PORT and noVNC port $(($BASE_PORT+1)) with desktop id \"$(($BASE_PORT-5900+1))\"" echo "[INFO] Task base port set, will set KasmVNC port $BASE_PORT with desktop id \"$(($BASE_PORT-5900+1))\""
fi fi
fi fi
...@@ -28,19 +31,16 @@ else ...@@ -28,19 +31,16 @@ else
# Setup home # Setup home
#--------------------- #---------------------
if [ -f "/home/lofar/.initialized" ]; then if [ ! -f "/home/lofar/.initialized" ]; then
:
else
echo "[INFO] Setting up home" echo "[INFO] Setting up home"
mkdir -p /home/lofar [ ! -d "/home/lofar" ] && mkdir -p /home/lofar
# Copy over vanilla home contents # Copy over vanilla home contents
for x in /lofar_home_vanilla/* /lofar_home_vanilla/.[!.]* /lofar_home_vanilla/..?*; do for x in /lofar_home_vanilla/* /lofar_home_vanilla/.[!.]* /lofar_home_vanilla/..?*; do
if [ -e "$x" ]; then cp -a "$x" /home/lofar/; fi if [ -e "$x" ]; then cp -a "$x" /home/lofar/; fi
done done
# Mark as initialized # Mark as initialized
touch /home/lofar/.initialized [ ! -f "/home/lofar/.initialized" ] && touch /home/lofar/.initialized
fi fi
...@@ -61,20 +61,25 @@ else ...@@ -61,20 +61,25 @@ else
echo "export $env_var" >> /tmp/env.sh echo "export $env_var" >> /tmp/env.sh
fi fi
done done
cd /home/lofar
#--------------------- #---------------------
# VNC Password # VNC Password
#--------------------- #---------------------
if [ "x$GUI" == "xTrue" ]; then if [ "x$GUI" == "xTrue" ]; then
if [ "x$AUTH_PASS" != "x" ]; then if [ "x$AUTH_PASS" != "x" ]; then
echo "[INFO] Setting up VNC password..." echo "[INFO] Setting up VNC password..."
mkdir -p /home/lofar/.vnc /usr/local/bin/kasmvncpasswd -f <<< $AUTH_PASS > /home/lofar/.kasmpasswd
/opt/tigervnc/usr/bin/vncpasswd -f <<< $AUTH_PASS > /home/lofar/.vnc/passwd else
chmod 600 /home/lofar/.vnc/passwd echo "[INFO] Setting up default VNC password: metapasswd"
/usr/local/bin/kasmvncpasswd -f <<< metapasswd > /home/lofar/.kasmpasswd
fi
chmod 600 /home/lofar/.kasmpasswd
export VNC_AUTH=True export VNC_AUTH=True
if [ "x$AUTH_USER" != "x" ]; then
echo "[INFO] Setting up VNC user..."
sed -i -e "s/username=lofar/username=$AUTH_USER/" /home/lofar/.vnc/config
else else
echo "[INFO] Not setting up any VNC password" echo "[INFO] Default VNC user: lofar"
fi fi
fi fi
...@@ -106,11 +111,10 @@ else ...@@ -106,11 +111,10 @@ else
# Start! # Start!
echo -n "[INFO] Will execute entrypoint command: " echo -n "[INFO] Will execute entrypoint command: "
echo $COMMAND
echo "" echo ""
echo "==============================================================" echo "=============================================================="
echo "" echo ""
echo " Welcome to the LOFAR-IT $CONTAINER_NAME container!" echo " Welcome to the EUROEXA $CONTAINER_NAME container!"
echo "" echo ""
echo "==============================================================" echo "=============================================================="
echo "" echo ""
...@@ -122,5 +126,4 @@ else ...@@ -122,5 +126,4 @@ else
echo "" echo ""
exec $COMMAND exec $COMMAND
fi fi
base_v4/files/background.jpg

9.96 KiB

## Supported server options to pass to vncserver upon invocation can be listed
## in this file. See the following manpages for more: vncserver(1) Xvnc(1).
## Several common ones are shown below. Uncomment and modify to your liking.
##
# securitytypes=vncauth,tlsvnc
# desktop=sandbox
# geometry=2000x1200
# localhost
# alwaysshared
username=lofar
File added
File added
File deleted
#!/bin/bash
# Exec KasmVNC server
if [ "x$BASE_PORT" == "x" ]; then
BASE_PORT=8443
DESKTOP_NUMBER=1
else
DESKTOP_NUMBER=$(($BASE_PORT-5900+1))
fi
if [ "x$KASMSOCK" == "xTrue" ]; then
export SOCKET_PORT=$(( $RANDOM % 50 + 1 ))
fi
if [ "x$VNC_AUTH" == "xTrue" ]; then
echo "[INFO] Setting new certificate for VNC"
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /home/lofar/.vnc/self.pem -out /home/lofar/.vnc/self.pem -subj "/C=IT/ST=None/L=None/O=INAF/OU=OATs/CN=kasm/emailAddress=none@none.none"
/usr/local/bin/vncserver :$DESKTOP_NUMBER -depth 24 -geometry 1280x1050 -websocketPort $BASE_PORT -cert /home/lofar/.vnc/self.pem -sslOnly -FrameRate=24 -interface 0.0.0.0
else
/usr/local/bin/vncserver :$DESKTOP_NUMBER -depth 24 -geometry 1280x1050 -websocketPort $BASE_PORT -FrameRate=24 -interface 0.0.0.0
fi
# Check it is running. If it is not, exit
while true
do
#PSOUT=$(ps -ef | grep /usr/local/bin/Xvnc | grep SecurityTypes)
PSOUT=$(ps -ef | grep /usr/local/bin/Xvnc)
if [[ "x$PSOUT" == "x" ]] ; then
exit 1
fi
# Sleep other 10 secs before re-checking
sleep 10
done
#!/bin/bash
# Exec TigerVNC server
if [ "x$BASE_PORT" == "x" ]; then
/usr/lib/noVNC/utils/launch.sh --listen 8590
echo "Running noVNC on port 8590"
else
/usr/lib/noVNC/utils/launch.sh --listen $BASE_PORT --vnc localhost:$(($BASE_PORT+1))
echo "Running noVNC on port $BASE_PORT and connecting to VNC on port $(($BASE_PORT+1))"
fi
#!/bin/bash
# Exec TigerVNC server
if [ "x$BASE_PORT" == "x" ]; then
DESKTOP_NUMBER=0
else
DESKTOP_NUMBER=$(($BASE_PORT-5900+1))
fi
if [ "x$VNC_AUTH" == "xTrue" ]; then
/opt/tigervnc/usr/bin/vncserver :$DESKTOP_NUMBER -SecurityTypes vncauth,tlsvnc -xstartup /opt/tigervnc/xstartup
else
/opt/tigervnc/usr/bin/vncserver :$DESKTOP_NUMBER -SecurityTypes None -xstartup /opt/tigervnc/xstartup
fi
# Check it is running. If it is not, exit
while true
do
PSOUT=$(ps -ef | grep /opt/tigervnc/usr/bin/Xvnc | grep SecurityTypes)
if [[ "x$PSOUT" == "x" ]] ; then
exit 1
fi
# Sleep other 10 secs before re-checking
sleep 10
done
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
; General ; General
directory = / directory = /
command = /etc/supervisor/conf.d/run_vnc.sh command = /etc/supervisor/conf.d/run_kasm.sh
numprocs = 1 numprocs = 1
autostart = true autostart = true
autorestart = true autorestart = true
......
;=======================================
; noVNC service
;=======================================
[program:novnc]
; General
directory = /usr/lib/noVNC/
command = /etc/supervisor/conf.d/run_novnc.sh
numprocs = 1
autostart = true
autorestart = true
startsecs = 10
stopwaitsecs = 30
process_name = novnc
; Standard out / error
stdout_logfile = /home/lofar/.logs/%(program_name)s.log
stdout_logfile_maxbytes = 5MB
stdout_logfile_backups = 10
stderr_logfile = /home/lofar/.logs/%(program_name)s.log
stderr_logfile_maxbytes = 5MB
stderr_logfile_backups = 10
#!/bin/sh #!/bin/sh
cd /home/lofar
unset SESSION_MANAGER unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS unset DBUS_SESSION_BUS_ADDRESS
OS=`uname -s` OS=`uname -s`
...@@ -22,8 +20,7 @@ if [ -f /etc/X11/xinit/xinitrc ]; then ...@@ -22,8 +20,7 @@ if [ -f /etc/X11/xinit/xinitrc ]; then
exec sh /etc/X11/xinit/xinitrc exec sh /etc/X11/xinit/xinitrc
fi fi
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
#xsetroot -solid grey xsetroot -solid grey
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" /bin/bash & xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm
#twm & /usr/bin/lxsession -s LXDE &
fluxbox &
...@@ -7,16 +7,13 @@ USER root ...@@ -7,16 +7,13 @@ USER root
# Environmental variables # Environmental variables
# #
ENV PYTHON_VERSION=2.7 ENV PYTHON_VERSION=2.7
# Path to where the patch for python-casacore's setup is stored.
ENV PYTHON_CASACORE_PATCH=$INSTALLDIR/python-casacore/python_casacore_setup_patch.patch
ENV PATCH_LOFAR=$INSTALLDIR/lofar/lofar.patch
# Settings relevant to the installed software. # Settings relevant to the installed software.
ENV AOFLAGGER_VERSION=v2.15.0 ENV AOFLAGGER_VERSION=v2.15.0
ENV ARMADILLO_VERSION=9.900.3 ENV ARMADILLO_VERSION=9.900.3
ENV BLAS_VERSION=3.8.0 ENV BLAS_VERSION=3.8.0
ENV BOOST_VERSION=1.69.0 ENV BOOST_VERSION=1.69.0
ENV CASACORE_VERSION=v2.4.1 ENV CASACORE_VERSION=v2.4.1
ENV # Leave at latest, release versions crash for some reason. # Leave at latest, release versions crash for some reason.
ENV CASAREST_VERSION=latest ENV CASAREST_VERSION=latest
ENV CFITSIO_VERSION=7.3.47 ENV CFITSIO_VERSION=7.3.47
ENV DPPP_VERSION=v4.2 ENV DPPP_VERSION=v4.2
...@@ -61,8 +58,11 @@ ARG LD_LIBRARY_PATH="$INSTALLDIR/aoflagger/lib:$INSTALLDIR/casacore/lib:$INSTALL ...@@ -61,8 +58,11 @@ ARG LD_LIBRARY_PATH="$INSTALLDIR/aoflagger/lib:$INSTALLDIR/casacore/lib:$INSTALL
ARG PATH="/usr/lib64/openmpi/bin:$PATH" ARG PATH="/usr/lib64/openmpi/bin:$PATH"
ARG OLD_PYTHONPATH=$PYTHONPATH ARG OLD_PYTHONPATH=$PYTHONPATH
ARG NCORES=40 ARG NCORES=2
ARG INSTALLDIR=/opt/lofar ARG INSTALLDIR=/opt/lofar
# Path to where the patch for python-casacore's setup is stored.
ENV PYTHON_CASACORE_PATCH=$INSTALLDIR/python-casacore/python_casacore_setup_patch.patch
ENV PATCH_LOFAR=$INSTALLDIR/lofar/lofar.patch
# #
# Env to set at building # Env to set at building
...@@ -311,6 +311,7 @@ RUN ln -s /opt/lofar/DPPP/bin/DPPP /opt/lofar/lofar/bin/NDPPP && \ ...@@ -311,6 +311,7 @@ RUN ln -s /opt/lofar/DPPP/bin/DPPP /opt/lofar/lofar/bin/NDPPP && \
ln -s /opt/lofar/DPPP/bin/makesourcedb /opt/lofar/lofar/bin/makesourcedb &&\ ln -s /opt/lofar/DPPP/bin/makesourcedb /opt/lofar/lofar/bin/makesourcedb &&\
ln -s $INSTALLDIR/pyenv-py3/bin/h5plot /usr/bin/h5plot ln -s $INSTALLDIR/pyenv-py3/bin/h5plot /usr/bin/h5plot
COPY files/post_init /tmp/post_init COPY files/post_init /tmp/post_init
RUN cat /tmp/post_init >> $INSTALLDIR/init.sh RUN cat /tmp/post_init >> $INSTALLDIR/init.sh && rm -f /tmp/post_init
RUN sed -e 's/\\\$/\$/g' /opt/lofar/init.sh RUN sed -e 's/\\\$/\$/g' /opt/lofar/init.sh
RUN sudo touch /opt/lofar/.casarc && sudo chmod 666 /opt/lofar/.casarc
USER metauser USER metauser
FROM git.ia2.inaf.it:5050/lofarit/containers/vlbi-inaf-sw:0.1.0
RUN sudo rm -f /opt/lofar/init.sh
RUN sudo touch /opt/lofar/.casarc && sudo chmod 666 /opt/lofar/.casarc
COPY init.sh /opt/lofar/init.sh
...@@ -22,5 +22,5 @@ export OMP_MAX_THREADS=64 ...@@ -22,5 +22,5 @@ export OMP_MAX_THREADS=64
export PYTHONPATH=$INSTALLDIR/dppp:$INSTALLDIR/lofar/lib64/python2.7/site-packages:$PYTHONPATH export PYTHONPATH=$INSTALLDIR/dppp:$INSTALLDIR/lofar/lib64/python2.7/site-packages:$PYTHONPATH
source $INSTALLDIR/pyenv-py2/bin/activate source $INSTALLDIR/pyenv-py2/bin/activate
measures.directory: $INSTALLDIR/casacore/data echo "measures.directory: $INSTALLDIR/casacore/data" > $INSTALLDIR/.casarc
export CASARCFILES=$INSTALLDIR/.casarc export CASARCFILES=$INSTALLDIR/.casarc
export INSTALLDIR=/opt/lofar
export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64/:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/opt/intel/mkl/lib/intel64/:$LD_LIBRARY_PATH
export INSTALLDIR=$INSTALLDIR
export HDF5_USE_FILE_LOCKING=FALSE
source $INSTALLDIR/lofar/lofarinit.sh
export PYTHONPATH=$INSTALLDIR/dppp:$INSTALLDIR/lofar/lib64/python2.7/site-packages
export PATH=/opt/montage/Montage-6.0/bin:$PATH
export PATH=$INSTALLDIR/aoflagger/bin:$PATH
export PATH=$INSTALLDIR/casacore/bin:$PATH
export PATH=$INSTALLDIR/ds9/bin:$PATH
export PATH=$INSTALLDIR/DPPP/bin:$PATH
export PATH=$INSTALLDIR/difmap/uvf_difmap:$PATH
export PATH=$INSTALLDIR/dysco/bin:$PATH
export PATH=$INSTALLDIR/lofar/bin:$PATH
export PATH=$INSTALLDIR/wsclean/bin:$PATH
export PATH=/usr/lib64/openmpi/bin:$PATH
export LD_LIBRARY_PATH=$INSTALLDIR/aoflagger/lib:$INSTALLDIR/casacore/lib:$INSTALLDIR/DPPP/lib:$INSTALLDIR/dysco/lib:$INSTALLDIR/EveryBeam/lib:$INSTALLDIR/idg/lib:$INSTALLDIR/lofar/lib:$INSTALLDIR/lofar/lib64:$INSTALLDIR/LOFARBeam/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib/:$LD_LIBRARY_PATH
export OPENBLAS_NUM_THREADS=64
export OPENBLAS_MAX_THREADS=64
export OMP_NUM_THREADS=64
export OMP_MAX_THREADS=64
export PYTHONPATH=$INSTALLDIR/dppp:$INSTALLDIR/lofar/lib64/python2.7/site-packages:$PYTHONPATH
source $INSTALLDIR/pyenv-py2/bin/activate
echo "measures.directory: $INSTALLDIR/casacore/data" > $INSTALLDIR/.casarc
export CASARCFILES=$INSTALLDIR/.casarc
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment