Skip to content
FROM basicmetadesktop
MAINTAINER Stefano Alberto Russo <stefano.russo@gmail.com>
USER root
# Always start with an apt-get update when extending Reyns images,
# otherwise apt repositories might get outdated (404 not found)
# and building without cache does not re-build Reyns services.
RUN apt-get update
#----------------------
# Libraries
#----------------------
COPY files/system_deps.sh /root/
COPY files/python_deps.txt /root/
RUN bash /root/system_deps.sh
RUN pip3 install -r /root/python_deps.txt
#--------------------------------------
# Jupyter, Eclipse, keybindings etc.
#--------------------------------------
# Download and install Eclipse and Pydev
RUN wget http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/kepler/SR2/eclipse-standard-kepler-SR2-linux-gtk-x86_64.tar.gz
RUN mv download.php* eclipse-standard-kepler-SR2-linux-gtk-x86_64.tar.gz
RUN tar -zxvf eclipse-standard-kepler-SR2-linux-gtk-x86_64.tar.gz
COPY files/PyDev_3.4.1.zip /tmp
RUN cd eclipse/dropins/ && unzip /tmp/PyDev_3.4.1.zip
RUN mv eclipse /opt/
COPY files/eclipse128.png /opt/eclipse/eclipse128.png
COPY files/Eclipse.desktop /metauser_home_vanilla/Desktop/
RUN chown -R metauser:metauser /metauser_home_vanilla/Desktop/
# Set terminals interrupt shortcut to ctrl-x
#RUN echo "stty intr ^x" >> /metauser_home_vanilla/.bashrc
# Enable Inet for ssh X forwarding
#RUN echo "AddressFamily inet" >> /etc/ssh/sshd_config
# Add Jupiter in supervisord
#COPY supervisord_jupyter.conf /etc/supervisor/conf.d/
ENV CONTAINER_NAME='devmetadesktop'
USER metauser
#!/bin/bash
docker build . -t devmetadesktop
[Desktop Entry]
Version=1.0
Type=Application
Name=Eclipse
Comment=
Exec=/opt/eclipse/eclipse
Icon=/opt/eclipse/eclipse128.png
Path=
Terminal=false
StartupNotify=false
pydub==0.20.0
audioread==2.1.5
matplotlib==2.1.2
mpld3==0.3
Jinja2==2.10
theano==1.0.2
h5py==2.8.0
Keras==2.1.3
tensorflow==1.14.0
matplotlib==2.1.2
numpy==1.19.5
scikit-image==0.15.0
scikit-learn==0.22
pandas==0.23.4
chardet==3.0.4
convertdate==2.1.2
lunarcalendar==0.0.9
holidays==0.10.3
pystan==2.19.1.1
plotly==4.9.0
requests==2.5.3
notebook==5.7.10
\ No newline at end of file
;=======================================
; Jupyter service
;=======================================
[program:jupyter]
; General
command = sudo -i -u metauser jupyter notebook --no-browser --ip=0.0.0.0 --NotebookApp.token='' --NotebookApp.base_url='/'
user = root
numprocs = 1
autostart = true
autorestart = true
startsecs = 10
stopwaitsecs = 30
process_name = jupyter
; Standard out / error
stdout_logfile = /var/log/supervisor/%(program_name)s.log
stdout_logfile_maxbytes = 5MB
stdout_logfile_backups = 10
stderr_logfile = /var/log/supervisor/%(program_name)s.log
stderr_logfile_maxbytes = 5MB
stderr_logfile_backups = 10
#!/bin/bash
set -e
# This system dependencies installer is meant to be executed
# on top of a clean and official Ubuntu 18.04 Docker image.
# It should be also capable of running twice without messing up.
# Curl
apt-get install curl -y
# Install get-pip script
curl -O https://bootstrap.pypa.io/get-pip.py
# Install Python3 and Pip3 (python3-distutils required for pip3)
apt-get install python3 python3-distutils -y
python3 get-pip.py 'pip==21.0.1'
# Python-tk required by matplotlib/six
apt-get install python-tk python3-tk -y
# Required for building subprocess32 in Python 2, required by matplotlib
# (subprocess32 is a backport for Python 2 of Python 3 subprocess module)
apt-get install build-essential python-dev -y
# Install ffmpeg (consider replacing with a more dependency-lightweight one)
apt-get install ffmpeg -y
# Required to fix bug with Theano (lazylinker)
apt-get install python3.6-dev -y
#!/bin/bash
docker tag devmetadesktop sarusso/devmetadesktop
dind push sarusso/devmetadesktop
#!/bin/bash
docker run -v$PWD/:/data -p8590:8590 -it devmetadesktop
FROM ubuntu:18.04
MAINTAINER Stefano Alberto Russo <stefano.russo@gmail.com>
#----------------------
# Basics
#----------------------
# Set non-interactive
ENV DEBIAN_FRONTEND noninteractive
# Update first of all
RUN apt-get update
# Utilities
RUN apt-get install -y nano telnet unzip wget supervisor build-essential python-dev git-core openjdk-8-jre
#------------------------
# "Meta" user
#------------------------
# Add group. We chose GID 65527 to try avoiding conflicts.
RUN groupadd -g 65527 metauser
# Add user. We chose UID 65527 to try avoiding conflicts.
RUN useradd metauser -d /home/metauser -u 65527 -g 65527 -m -s /bin/bash
# Add metuaser user to sudoers
RUN adduser metauser sudo
# Install suodo
RUN apt-get install sudo -y
# No pass sudo (for everyone, actually)
COPY files/sudoers /etc/sudoers
#------------------------
# Supervisor conf
#------------------------
# Supervisord conf
COPY files/supervisord.conf /etc/supervisor/
#------------------------
# VNC
#------------------------
# Install xvfb that triggers minimal install of X base packages and xterm as sample application
RUN apt-get install xvfb xterm -y
# Install base packages for VNC server and headless desktop (2)
COPY files/tigervnc-1.8.0.x86_64.tar.gz /opt/tigervnc-1.8.0.x86_64.tar.gz
RUN cd /opt && 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
RUN mkdir /home/metauser/.logs && chown metauser:metauser /home/metauser/.logs
# Rename metauser home folder as a "vanilla" home folder
RUN mv /home/metauser /metauser_home_vanilla
# Add fluxbox customisations
COPY files/dot_fluxbox /metauser_home_vanilla/.fluxbox
RUN chown -R metauser:metauser /metauser_home_vanilla/.fluxbox
COPY files/background.jpg /usr/share/images/fluxbox/background.jpg
# Give write access to anyone to the home folder so the entrypoint will be able
# to copy over the /home/matauser_vanilla into /home/metauser (for Singularity)
RUN chmod 777 /home
#----------------------
# Entrypoint
#----------------------
# Copy entrypoint
COPY files/entrypoint.sh /
# Give right permissions
RUN chmod 755 /entrypoint.sh
# Set entrypoint
ENTRYPOINT ["/entrypoint.sh"]
# Set user (mainly for Singularity)
USER metauser
# To access: expose 8590/tcp and 5900/tcp
ENV CONTAINER_NAME='minimalmetadesktop'
#!/bin/bash
docker build . -t minimalmetadesktop
[app] (name=fbrun)
[Position] (WINCENTER) {0 0}
[Layer] {2}
[end]
session.screen0.tabs.usePixmap: true
session.screen0.tabs.maxOver: false
session.screen0.tabs.intitlebar: true
session.screen0.clientMenu.usePixmap: true
session.screen0.iconbar.usePixmap: true
session.screen0.iconbar.iconTextPadding: 10
session.screen0.iconbar.iconWidth: 128
session.screen0.iconbar.alignment: Relative
session.screen0.iconbar.mode: {static groups} (workspace)
session.screen0.toolbar.visible: true
session.screen0.toolbar.height: 0
session.screen0.toolbar.onhead: 1
session.screen0.toolbar.widthPercent: 100
session.screen0.toolbar.alpha: 255
session.screen0.toolbar.maxOver: false
session.screen0.toolbar.autoHide: false
session.screen0.toolbar.layer: Dock
session.screen0.toolbar.placement: BottomCenter
#session.screen0.toolbar.tools: prevworkspace, workspacename, nextworkspace, clock, prevwindow, nextwindow, iconbar, systemtray
session.screen0.toolbar.tools: iconbar, systemtray
session.screen0.menu.alpha: 255
session.screen0.tab.placement: TopLeft
session.screen0.tab.width: 64
session.screen0.titlebar.left: Stick
session.screen0.titlebar.right: Minimize Maximize Close
session.screen0.window.focus.alpha: 255
session.screen0.window.unfocus.alpha: 255
session.screen0.slit.alpha: 255
session.screen0.slit.maxOver: false
session.screen0.slit.placement: RightBottom
session.screen0.slit.autoHide: false
session.screen0.slit.acceptKdeDockapps: true
session.screen0.slit.onhead: 0
session.screen0.slit.layer: Dock
session.screen0.colPlacementDirection: TopToBottom
session.screen0.tabFocusModel: ClickToTabFocus
session.screen0.autoRaise: true
session.screen0.maxDisableMove: false
session.screen0.edgeSnapThreshold: 10
session.screen0.tooltipDelay: 500
session.screen0.opaqueMove: true
session.screen0.windowPlacement: RowMinOverlapPlacement
session.screen0.focusNewWindows: true
session.screen0.clickRaises: true
session.screen0.maxDisableResize: false
session.screen0.windowMenu: /home/metauser/.fluxbox/windowmenu
session.screen0.allowRemoteActions: false
session.screen0.strftimeFormat: %d %b, %a %02k:%M:%S
session.screen0.focusSameHead: false
session.screen0.workspacewarping: true
session.screen0.fullMaximization: false
session.screen0.defaultDeco: NORMAL
session.screen0.noFocusWhileTypingDelay: 0
session.screen0.menuDelay: 200
session.screen0.workspaceNames: Workspace 1,Workspace 2,Workspace 3,Workspace 4,
session.screen0.rowPlacementDirection: LeftToRight
session.screen0.focusModel: ClickFocus
session.screen0.showwindowposition: false
session.screen0.maxIgnoreIncrement: true
session.screen0.workspaces: 1
session.styleOverlay: /home/metauser/.fluxbox/overlay
session.keyFile: ~/.fluxbox/keys
session.cacheMax: 200
session.tabsAttachArea: Window
session.slitlistFile: /home/metauser/.fluxbox/slitlist
session.forcePseudoTransparency: false
session.tabPadding: 0
session.colorsPerChannel: 4
session.styleFile: /usr/share/fluxbox/styles//ubuntu-light
session.autoRaiseDelay: 250
session.cacheLife: 5
session.appsFile: /home/metauser/.fluxbox/apps
session.ignoreBorder: false
session.configVersion: 13
session.doubleClickInterval: 250
session.menuFile: ~/.fluxbox/menu
# click on the desktop to get menus
OnDesktop Mouse1 :HideMenus
OnDesktop Mouse2 :WorkspaceMenu
OnDesktop Mouse3 :RootMenu
# scroll on the desktop to change workspaces
OnDesktop Mouse4 :PrevWorkspace
OnDesktop Mouse5 :NextWorkspace
# scroll on the toolbar to change current window
OnToolbar Mouse4 :PrevWindow {static groups} (iconhidden=no)
OnToolbar Mouse5 :NextWindow {static groups} (iconhidden=no)
# alt + left/right click to move/resize a window
OnWindow Mod1 Mouse1 :MacroCmd {Raise} {Focus} {StartMoving}
OnWindowBorder Move1 :StartMoving
OnWindow Mod1 Mouse3 :MacroCmd {Raise} {Focus} {StartResizing NearestCorner}
OnLeftGrip Move1 :StartResizing bottomleft
OnRightGrip Move1 :StartResizing bottomright
# alt + middle click to lower the window
OnWindow Mod1 Mouse2 :Lower
# control-click a window's titlebar and drag to attach windows
OnTitlebar Control Mouse1 :StartTabbing
# double click on the titlebar to shade
OnTitlebar Double Mouse1 :Shade
# left click on the titlebar to move the window
OnTitlebar Mouse1 :MacroCmd {Raise} {Focus} {ActivateTab}
OnTitlebar Move1 :StartMoving
# middle click on the titlebar to lower
OnTitlebar Mouse2 :Lower
# right click on the titlebar for a menu of options
OnTitlebar Mouse3 :WindowMenu
# alt-tab
Mod1 Tab :NextWindow {groups} (workspace=[current])
Mod1 Shift Tab :PrevWindow {groups} (workspace=[current])
# cycle through tabs in the current window
Mod4 Tab :NextTab
Mod4 Shift Tab :PrevTab
# go to a specific tab in the current window
Mod4 1 :Tab 1
Mod4 2 :Tab 2
Mod4 3 :Tab 3
Mod4 4 :Tab 4
Mod4 5 :Tab 5
Mod4 6 :Tab 6
Mod4 7 :Tab 7
Mod4 8 :Tab 8
Mod4 9 :Tab 9
# open a terminal
Mod1 F1 :Exec x-terminal-emulator
# open a dialog to run programs
Mod1 F2 :Exec fbrun
# volume settings, using common keycodes
# if these don't work, use xev to find out your real keycodes
176 :Exec amixer sset Master,0 1+
174 :Exec amixer sset Master,0 1-
160 :Exec amixer sset Master,0 toggle
# current window commands
Mod1 F4 :Close
Mod1 F5 :Kill
Mod1 F9 :Minimize
Mod1 F10 :Maximize
Mod1 F11 :Fullscreen
# open the window menu
Mod1 space :WindowMenu
# exit fluxbox
Control Mod1 Delete :Exit
# change to previous/next workspace
Control Mod1 Left :PrevWorkspace
Control Mod1 Right :NextWorkspace
# send the current window to previous/next workspace
Mod4 Left :SendToPrevWorkspace
Mod4 Right :SendToNextWorkspace
# send the current window and follow it to previous/next workspace
Control Mod4 Left :TakeToPrevWorkspace
Control Mod4 Right :TakeToNextWorkspace
# change to a specific workspace
Control F1 :Workspace 1
Control F2 :Workspace 2
Control F3 :Workspace 3
Control F4 :Workspace 4
Control F5 :Workspace 5
Control F6 :Workspace 6
Control F7 :Workspace 7
Control F8 :Workspace 8
Control F9 :Workspace 9
Control F10 :Workspace 10
Control F11 :Workspace 11
Control F12 :Workspace 12
# send the current window to a specific workspace
Mod4 F1 :SendToWorkspace 1
Mod4 F2 :SendToWorkspace 2
Mod4 F3 :SendToWorkspace 3
Mod4 F4 :SendToWorkspace 4
Mod4 F5 :SendToWorkspace 5
Mod4 F6 :SendToWorkspace 6
Mod4 F7 :SendToWorkspace 7
Mod4 F8 :SendToWorkspace 8
Mod4 F9 :SendToWorkspace 9
Mod4 F10 :SendToWorkspace 10
Mod4 F11 :SendToWorkspace 11
Mod4 F12 :SendToWorkspace 12
# send the current window and change to a specific workspace
Control Mod4 F1 :TakeToWorkspace 1
Control Mod4 F2 :TakeToWorkspace 2
Control Mod4 F3 :TakeToWorkspace 3
Control Mod4 F4 :TakeToWorkspace 4
Control Mod4 F5 :TakeToWorkspace 5
Control Mod4 F6 :TakeToWorkspace 6
Control Mod4 F7 :TakeToWorkspace 7
Control Mod4 F8 :TakeToWorkspace 8
Control Mod4 F9 :TakeToWorkspace 9
Control Mod4 F10 :TakeToWorkspace 10
Control Mod4 F11 :TakeToWorkspace 11
Control Mod4 F12 :TakeToWorkspace 12
$full $full|/usr/share/images/fluxbox/ubuntu-light.png|style|:0.0
[begin] (fluxbox)
[include] (/etc/X11/fluxbox/fluxbox-menu)
[end]
! The following line will prevent styles from setting the background.
! background: none
background: aspect
background.pixmap: /usr/share/images/fluxbox/background.jpg
[begin]
[shade]
[stick]
[maximize]
[iconify]
[raise]
[lower]
[settitledialog]
[sendto]
[layer]
[alpha]
[extramenus]
[separator]
[close]
[end]