From 55151623cbaf01b1872657af63237f5b31271d6c Mon Sep 17 00:00:00 2001 From: "Son H. Nguyen" <5765503+Son-HNguyen@users.noreply.github.com> Date: Tue, 3 Apr 2018 11:51:05 +0200 Subject: [PATCH 01/11] Updated Dockerfile. --- Dockerfile | 122 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 85 insertions(+), 37 deletions(-) diff --git a/Dockerfile b/Dockerfile index c816de4..aeabf68 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,42 +1,90 @@ -# 3DCityDB Web Map Client Dockerfile ########################################### +# 3DCityDB Web Map Client Dockerfile ########################################## # Official website https://www.3dcitydb.net # GitHub https://github.com/3dcitydb/3dcitydb-web-map ############################################################################### -# Base image -ARG baseimage_tag='9' -FROM "node:${baseimage_tag}" -# Maintainer ################################################################## -# Bruno Willenborg -# Chair of Geoinformatics -# Department of Civil, Geo and Environmental Engineering -# Technical University of Munich (TUM) -# -MAINTAINER Bruno Willenborg, Chair of Geoinformatics, Technical University of Munich (TUM) +FROM node:alpine +# Maintainers ################################################################# +# Bruno Willenborg +# Son H. Nguyen +# Chair of Geoinformatics +# Department of Civil, Geo and Environmental Engineering +# Technical University of Munich (TUM) +# +# +LABEL maintainer1="Bruno Willenborg, Chair of Geoinformatics, Technical University of Munich (TUM) " \ + maintainer2="Son H. Nguyen, Chair of Geoinformatics, Technical University of Munich (TUM) " # Setup 3DCityDB Web Map Client ############################################### -ARG webmapclient_version='v1.4.0' -RUN set -x \ - && BUILD_PACKAGES='ca-certificates git' \ - && apt-get update && apt-get install -y --no-install-recommends $BUILD_PACKAGES \ - && git clone -b "${webmapclient_version}" --depth 1 https://github.com/3dcitydb/3dcitydb-web-map.git /var/www \ - && cd /var/www \ - && rm -rf ./.git ./.gitignore ./LICENSE ./README.md ./build.xml \ - ./node_modules ./server.js ./theme \ - && mkdir -p /var/www/data \ - && apt-get purge -y --auto-remove $BUILD_PACKAGES \ - && rm -rf /var/lib/apt/lists/* - -WORKDIR /var/www/ -COPY package.json ./ -COPY html/* ./ -COPY server.js ./ -RUN set -x \ - && npm install --production - -RUN set -x \ - && chown -R node:node /var/www/ - -VOLUME /var/www/ -USER node -EXPOSE 8000 -CMD [ "node", "server.js", "--public"] +ARG webmapclient_version='v1.4.0' +RUN set -x && \ + BUILD_PACKAGES='ca-certificates git' && \ + apk update && apk add --no-cache --no-progress $BUILD_PACKAGES && \ + git clone -b "${webmapclient_version}" --depth 1 https://github.com/3dcitydb/3dcitydb-web-map.git /var/www && \ + cd /var/www && \ + rm -rf ./.git ./.gitignore ./LICENSE ./README.md ./build.xml \ + ./node_modules ./server.js ./theme && \ + mkdir -p /var/www/data && \ + apk del $BUILD_PACKAGES && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /var/www/ +COPY package.json ./ +COPY html/* ./ +COPY server.js ./ +RUN set -x && \ + npm install --production + +#RUN set -x && \ +# chown -R node:node /var/www/ + +VOLUME /var/www/ +#USER node +#EXPOSE 8000 +#CMD [ "node", "server.js", "--public"] + +# Install Samba based on dperson/samba +# https://github.com/dperson/samba +RUN apk --no-cache --no-progress upgrade && \ + apk --no-cache --no-progress add bash samba shadow && \ + adduser -D -G users -H -S -g 'Samba User' -h /tmp smbuser && \ + file="/etc/samba/smb.conf" && \ + sed -i 's|^;* *\(log file = \).*| \1/dev/stdout|' $file && \ + sed -i 's|^;* *\(load printers = \).*| \1no|' $file && \ + sed -i 's|^;* *\(printcap name = \).*| \1/dev/null|' $file && \ + sed -i 's|^;* *\(printing = \).*| \1bsd|' $file && \ + sed -i 's|^;* *\(unix password sync = \).*| \1no|' $file && \ + sed -i 's|^;* *\(preserve case = \).*| \1yes|' $file && \ + sed -i 's|^;* *\(short preserve case = \).*| \1yes|' $file && \ + sed -i 's|^;* *\(default case = \).*| \1lower|' $file && \ + sed -i '/Share Definitions/,$d' $file && \ + echo ' pam password change = yes' >>$file && \ + echo ' map to guest = bad user' >>$file && \ + echo ' usershare allow guests = yes' >>$file && \ + echo ' create mask = 0664' >>$file && \ + echo ' force create mode = 0664' >>$file && \ + echo ' directory mask = 0775' >>$file && \ + echo ' force directory mode = 0775' >>$file && \ + echo ' force user = smbuser' >>$file && \ + echo ' force group = users' >>$file && \ + echo ' follow symlinks = yes' >>$file && \ + echo ' load printers = no' >>$file && \ + echo ' printing = bsd' >>$file && \ + echo ' printcap name = /dev/null' >>$file && \ + echo ' disable spoolss = yes' >>$file && \ + echo ' socket options = TCP_NODELAY' >>$file && \ + echo ' strict locking = no' >>$file && \ + echo ' vfs objects = recycle' >>$file && \ + echo ' recycle:keeptree = yes' >>$file && \ + echo ' recycle:versions = yes' >>$file && \ + echo ' min protocol = SMB2' >>$file && \ + echo '' >>$file && \ + rm -rf /tmp/* + +COPY samba.sh /usr/bin/ + +EXPOSE 8000 137/udp 138/udp 139 445 + +#HEALTHCHECK --interval=60s --timeout=15s \ +# CMD smbclient -L '\\localhost\' -U 'guest%' -m SMB3 + +ENTRYPOINT [ "samba.sh" ] From ebcce99d57dfe98f3f66213c442e20f24d536c0c Mon Sep 17 00:00:00 2001 From: "Son H. Nguyen" <5765503+Son-HNguyen@users.noreply.github.com> Date: Tue, 3 Apr 2018 11:51:54 +0200 Subject: [PATCH 02/11] Added samba.sh. --- samba.sh | 253 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100644 samba.sh diff --git a/samba.sh b/samba.sh new file mode 100644 index 0000000..f265700 --- /dev/null +++ b/samba.sh @@ -0,0 +1,253 @@ +#!/usr/bin/env bash +#=============================================================================== +# FILE: samba.sh +# +# USAGE: ./samba.sh +# +# DESCRIPTION: Entrypoint for samba docker container +# +# OPTIONS: --- +# REQUIREMENTS: --- +# BUGS: --- +# NOTES: --- +# AUTHOR: David Personette (dperson@gmail.com), +# ORGANIZATION: +# CREATED: 09/28/2014 12:11 +# REVISION: 1.0 +# +# MODIFIED BY: Son H. Nguyen (son.nguyen@tum.de) +# MODIFIED ON: 04/03/2018 +#=============================================================================== + +set -o nounset # Treat unset variables as an error + +# Run NodeJs +nohup node server.js --public > output.log & +echo "NodeJS Server started." + +### charmap: setup character mapping for file/directory names +# Arguments: +# chars) from:to character mappings separated by ',' +# Return: configured character mapings +charmap() { local chars="$1" file=/etc/samba/smb.conf + grep -q catia $file || sed -i '/TCP_NODELAY/a \ +\ + vfs objects = catia\ + catia:mappings =\ + + ' $file + + sed -i '/catia:mappings/s/ =.*/ = '"$chars" $file +} + +### global: set a global config option +# Arguments: +# option) raw option +# Return: line added to smb.conf (replaces existing line with same key) +global() { local key="${1%%=*}" value="${1#*=}" file=/etc/samba/smb.conf + if grep -qE '^;*\s*'"$key" "$file"; then + sed -i 's|^;*\s*'"$key"'.*| '"${key% } = ${value# }"'|' "$file" + else + sed -i '/\[global\]/a \ '"${key% } = ${value# }" "$file" + fi +} + +### import: import a smbpasswd file +# Arguments: +# file) file to import +# Return: user(s) added to container +import() { local file="$1" name id + while read name id; do + grep -q "^$name:" /etc/passwd || adduser -D -H -u "$id" "$name" + done < <(cut -d: -f1,2 $file | sed 's/:/ /') + pdbedit -i smbpasswd:$file +} + +### perms: fix ownership and permissions of share paths +# Arguments: +# none) +# Return: result +perms() { local i file=/etc/samba/smb.conf + for i in $(awk -F ' = ' '/ path = / {print $2}' $file); do + chown -Rh smbuser. $i + find $i -type d ! -perm 775 -exec chmod 775 {} \; + find $i -type f ! -perm 0664 -exec chmod 0664 {} \; + done +} + +### recycle: disable recycle bin +# Arguments: +# none) +# Return: result +recycle() { local file=/etc/samba/smb.conf + sed -i '/recycle/d; /vfs/d' $file +} + +### share: Add share +# Arguments: +# share) share name +# path) path to share +# browsable) 'yes' or 'no' +# readonly) 'yes' or 'no' +# guest) 'yes' or 'no' +# users) list of allowed users +# admins) list of admin users +# writelist) list of users that can write to a RO share +# comment) description of share +# Return: result +share() { local share="$1" path="$2" browsable="${3:-yes}" ro="${4:-yes}" \ + guest="${5:-yes}" users="${6:-""}" admins="${7:-""}" \ + writelist="${8:-""}" comment="${9:-""}" file=/etc/samba/smb.conf + sed -i "/\\[$share\\]/,/^\$/d" $file + echo "[$share]" >>$file + echo " path = $path" >>$file + echo " browsable = $browsable" >>$file + echo " read only = $ro" >>$file + echo " guest ok = $guest" >>$file + echo -n " veto files = /._*/.apdisk/.AppleDouble/.DS_Store/" >>$file + echo -n ".TemporaryItems/.Trashes/desktop.ini/ehthumbs.db/" >>$file + echo "Network Trash Folder/Temporary Items/Thumbs.db/" >>$file + echo " delete veto files = yes" >>$file + [[ ${users:-""} && ! ${users:-""} =~ all ]] && + echo " valid users = $(tr ',' ' ' <<< $users)" >>$file + [[ ${admins:-""} && ! ${admins:-""} =~ none ]] && + echo " admin users = $(tr ',' ' ' <<< $admins)" >>$file + [[ ${writelist:-""} && ! ${writelist:-""} =~ none ]] && + echo " write list = $(tr ',' ' ' <<< $writelist)" >>$file + [[ ${comment:-""} && ! ${comment:-""} =~ none ]] && + echo " comment = $(tr ',' ' ' <<< $comment)" >>$file + echo "" >>$file + [[ -d $path ]] || mkdir -p $path +} + +### smb: disable SMB2 minimum +# Arguments: +# none) +# Return: result +smb() { local file=/etc/samba/smb.conf + sed -i '/min protocol/d' $file +} + +### user: add a user +# Arguments: +# name) for user +# password) for user +# id) for user +# group) for user +# Return: user added to container +user() { local name="$1" passwd="$2" id="${3:-""}" group="${4:-""}" + [[ "$group" ]] && { grep -q "^$group:" /etc/group || addgroup "$group"; } + grep -q "^$name:" /etc/passwd || + adduser -D -H ${group:+-G $group} ${id:+-u $id} "$name" + echo -e "$passwd\n$passwd" | smbpasswd -s -a "$name" +} + +### workgroup: set the workgroup +# Arguments: +# workgroup) the name to set +# Return: configure the correct workgroup +workgroup() { local workgroup="$1" file=/etc/samba/smb.conf + sed -i 's|^\( *workgroup = \).*|\1'"$workgroup"'|' $file +} + +### widelinks: allow access wide symbolic links +# Arguments: +# none) +# Return: result +widelinks() { local file=/etc/samba/smb.conf \ + replace='\1\n wide links = yes\n unix extensions = no' + sed -i 's/\(follow symlinks = yes\)/'"$replace"'/' $file +} + +### usage: Help +# Arguments: +# none) +# Return: Help text +usage() { local RC="${1:-0}" + echo "Usage: ${0##*/} [-opt] [command] +Options (fields in '[]' are optional, '<>' are required): + -h This help + -c \"\" setup character mapping for file/directory names + required arg: \"\" character mappings separated by ',' + -g \"\" Provide global option for smb.conf + required arg: \"\" - IE: -g \"log level = 2\" + -i \"\" Import smbpassword + required arg: \"\" - full file path in container + -n Start the 'nmbd' daemon to advertise the shares + -p Set ownership and permissions on the shares + -r Disable recycle bin for shares + -S Disable SMB2 minimum version + -s \"[;browse;readonly;guest;users;admins;writelist;comment]\" + Configure a share + required arg: \";\" + is how it's called for clients + path to share + NOTE: for the default value, just leave blank + [browsable] default:'yes' or 'no' + [readonly] default:'yes' or 'no' + [guest] allowed default:'yes' or 'no' + [users] allowed default:'all' or list of allowed users + [admins] allowed default:'none' or list of admin users + [writelist] list of users that can write to a RO share + [comment] description of share + -u \"[;ID;group]\" Add a user + required arg: \";\" + for user + for user + [ID] for user + [group] for user + -w \"\" Configure the workgroup (domain) samba should use + required arg: \"\" + for samba + -W Allow access wide symbolic links + +The 'command' (if provided and valid) will be run instead of samba +" >&2 + exit $RC +} + +[[ "${USERID:-""}" =~ ^[0-9]+$ ]] && usermod -u $USERID -o smbuser +[[ "${GROUPID:-""}" =~ ^[0-9]+$ ]] && groupmod -g $GROUPID -o users + +while getopts ":hc:g:i:nprs:Su:Ww:" opt; do + case "$opt" in + h) usage ;; + c) charmap "$OPTARG" ;; + g) global "$OPTARG" ;; + i) import "$OPTARG" ;; + n) NMBD="true" ;; + p) PERMISSIONS="true" ;; + r) recycle ;; + s) eval share $(sed 's/^/"/; s/$/"/; s/;/" "/g' <<< $OPTARG) ;; + S) smb ;; + u) eval user $(sed 's/^/"/; s/$/"/; s/;/" "/g' <<< $OPTARG) ;; + w) workgroup "$OPTARG" ;; + W) widelinks ;; + "?") echo "Unknown option: -$OPTARG"; usage 1 ;; + ":") echo "No argument value for option: -$OPTARG"; usage 2 ;; + esac +done +shift $(( OPTIND - 1 )) + +[[ "${CHARMAP:-""}" ]] && charmap "$CHARMAP" +[[ "${GLOBAL:-""}" ]] && global "$GLOBAL" +[[ "${IMPORT:-""}" ]] && import "$IMPORT" +[[ "${PERMISSIONS:-""}" ]] && perms +[[ "${RECYCLE:-""}" ]] && recycle +[[ "${SHARE:-""}" ]] && eval share $(sed 's/^/"/; s/$/"/; s/;/" "/g' <<< $SHARE) +[[ "${SMB:-""}" ]] && smb +[[ "${USER:-""}" ]] && eval user $(sed 's/^/"/; s/$/"/; s/;/" "/g' <<< $USER) +[[ "${WORKGROUP:-""}" ]] && workgroup "$WORKGROUP" +[[ "${WIDELINKS:-""}" ]] && widelinks + +if [[ $# -ge 1 && -x $(which $1 2>&-) ]]; then + exec "$@" +elif [[ $# -ge 1 ]]; then + echo "ERROR: command not found: $1" + exit 13 +elif ps -ef | egrep -v grep | grep -q smbd; then + echo "Service already running, please restart container to apply changes" +else + [[ ${NMBD:-""} ]] && ionice -c 3 nmbd -D + exec ionice -c 3 smbd -FS Date: Tue, 3 Apr 2018 14:33:02 +0200 Subject: [PATCH 03/11] Added Samba instructions to README.md. --- README.md | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/README.md b/README.md index 821f638..c3d363d 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,116 @@ The data is now available in the data listing (e.g. `http://myDockerHost/data/`) ![Data listing view](https://github.com/tum-gis/3dcitydb-web-map-docker/blob/master/images/data-listing-01.png) +## Sharing data across multiple platforms (Windows, MacOS, Linux, etc.) +The 3DCityDB-Web-Map-Client Docker image also allows sharing data between different machines and operating systems such as Windows, MacOS, Linux, etc. using [Samba](https://en.wikipedia.org/wiki/Samba_(software)), which is a free software re-implementation of the SMB/CIFS networking protocol. Samba provides file and print services for various Microsoft Windows clients and can integrate with a Microsoft Windows Server domain, either as a Domain Controller (DC) or as a domain member. + +To enable Samba: +```bash +docker run -dit --name 3dwebmap-container -p 80:8000 -p 139:139 -p 445:445 \ + -v /home/docker/data/:/var/www/data/ \ +tumgis/3dcitydb-web-map \ + -u "username;password!" \ + -s "smb_shared;/var/www/data/;yes;no;yes;all;username;username;comment" +``` +where: ++ The ports 139 and 445 are reserved for the Samba service. Do not change these numbers on Windows host machines. ++ In this example, the container data located in `/var/www/data` are mounted to `/home/docker/data` on the host machine using the [bind mount](https://docs.docker.com/storage/bind-mounts/) method. ++ The Samba service in this image is installed and configured based on [dperson/samba](https://github.com/dperson/samba). Optional Samba arguments can be provided in run-time, such as user credentials (parameter `-u`) and share information (parameter `-s`). These can be configured using the following syntax taken from [dperson/samba](https://github.com/dperson/samba): + ``` + Options (fields in '[]' are optional, '<>' are required): + -h + This help + -c "" + Setup character mapping for file/directory names + required arg: "" character mappings separated by ',' + -g "" + Provide global option for smb.conf + required arg: "" - IE: -g "log level = 2" + -i "" + Import smbpassword + required arg: "" - full file path in container + -n + Start the 'nmbd' daemon to advertise the shares + -p + Set ownership and permissions on the shares + -r + Disable recycle bin for shares + -S + Disable SMB2 minimum version + -s "[;browse;readonly;guest;users;admins;writelist;comment]" + Configure a share + required arg: ";" + is how it's called for clients + path to share + NOTE: for the default values, just leave blank + [browsable] default:'yes' or 'no' + [readonly] default:'yes' or 'no' + [guest] allowed default:'yes' or 'no' + [users] allowed default:'all' or list of allowed users + [admins] allowed default:'none' or list of admin users + [writelist] list of users that can write to a RO share + [comment] description of share + -u "[;ID;group]" + Add a user + required arg: ";" + for user + for user + [ID] for user + [group] for user + -w "" + Configure the workgroup (domain) samba should use + required arg: "" + for samba + -W + Allow access wide symbolic links + ``` + ++ Once the container has been started and Samba is running, the shared directory can be accessed using the following commands: + + In Windows: + ```bash + net use : \\\smb_shared + ``` + where the `` can be an arbitrary unoccupied letter (e.g. `R`) and `SERVER` is the name or IP address of the host machine, where the container is being hosted. The latter can be found using the command `ifconfig` or `ipconfig`. + + + In Linux: + ```bash + # 1. Install Samba utils + sudo apt-get install cifs-utils + # 2. Create a local directory to mount shared data + mkdir local_smb_shared + # 3. Mount the shared data to this directory + sudo mount.cifs ///smb_shared \ + local_smb_shared -o user=username + ``` + + + In MacOS: + ```bash + mount_smbfs //username@/smb_shared /local_smb_shared + ``` + ++ To unmount the shared directory from the local machine (source data will not be removed): + + In Windows: Enter + ```bash + net use : /Delete + ``` + + + In Linux: + ```bash + umount ///smb_shared + ``` + + + In MacOS: + ```bash + umount /local_smb_shared + ``` + +To disable Samba, simply remove the Samba parameters from the `docker run` command: +```bash +docker run -dit --name 3dwebmap-container -p 80:8000 \ + -v /home/docker/data/:/var/www/data/ \ +tumgis/3dcitydb-web-map +``` + ## How to build To build a 3DCityDB-Web-Map-Client Docker image from the Dockerfile in this repo you need to download the source code from this repo and run the [`docker build`](https://docs.docker.com/engine/reference/commandline/build/) command. Follow the step below to build a 3DCityDB-Web-Map-Client Docker image or use the [`build.sh`](https://github.com/tum-gis/3dcitydb-web-map-docker/blob/master/build.sh) script. ```bash From aa55bcae6598262cded8716d9986d973665db0fd Mon Sep 17 00:00:00 2001 From: "Son H. Nguyen" <5765503+Son-HNguyen@users.noreply.github.com> Date: Tue, 3 Apr 2018 19:17:43 +0200 Subject: [PATCH 04/11] Updated Dockerfile. --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index aeabf68..217112a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -87,4 +87,5 @@ EXPOSE 8000 137/udp 138/udp 139 445 #HEALTHCHECK --interval=60s --timeout=15s \ # CMD smbclient -L '\\localhost\' -U 'guest%' -m SMB3 -ENTRYPOINT [ "samba.sh" ] +RUN chmod +x /usr/bin/samba.sh +ENTRYPOINT [ "/usr/bin/samba.sh" ] From 10c95c1025d91d7b53479e776861d61661022afb Mon Sep 17 00:00:00 2001 From: "Son H. Nguyen" <5765503+Son-HNguyen@users.noreply.github.com> Date: Tue, 3 Apr 2018 19:27:41 +0200 Subject: [PATCH 05/11] Added picture for Samba test. --- images/SambaTest.png | Bin 0 -> 12463 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/SambaTest.png diff --git a/images/SambaTest.png b/images/SambaTest.png new file mode 100644 index 0000000000000000000000000000000000000000..22261276b8eba3b5e4e24d6588f57ea25b3c179c GIT binary patch literal 12463 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 ON?Bg*PUfwL&;AbzBNV&< literal 0 HcmV?d00001 From 5fe87569d4d34678eea7cf854a7ccf2360308ffb Mon Sep 17 00:00:00 2001 From: "Son H. Nguyen" <5765503+Son-HNguyen@users.noreply.github.com> Date: Tue, 3 Apr 2018 19:30:33 +0200 Subject: [PATCH 06/11] Added picture for Samba test. --- images/SambaTest.png | Bin 12463 -> 10864 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/SambaTest.png b/images/SambaTest.png index 22261276b8eba3b5e4e24d6588f57ea25b3c179c..be98f86e4dc694ea5e88a248ed671c79a8287bb7 100644 GIT binary patch literal 10864 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 literal 12463 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 ON?Bg*PUfwL&;AbzBNV&< From eeaf7454f2e0ed0df636942e0765d518d9614d96 Mon Sep 17 00:00:00 2001 From: "Son H. Nguyen" <5765503+Son-HNguyen@users.noreply.github.com> Date: Tue, 3 Apr 2018 19:31:36 +0200 Subject: [PATCH 07/11] Delete SambaTest.png --- images/SambaTest.png | Bin 10864 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/SambaTest.png diff --git a/images/SambaTest.png b/images/SambaTest.png deleted file mode 100644 index be98f86e4dc694ea5e88a248ed671c79a8287bb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10864 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 From c22e303fda792660f8f2d91f3993e6a9e56ccc72 Mon Sep 17 00:00:00 2001 From: "Son H. Nguyen" <5765503+Son-HNguyen@users.noreply.github.com> Date: Tue, 3 Apr 2018 19:31:58 +0200 Subject: [PATCH 08/11] Added picture for Samba test. --- images/SambaTest.png | Bin 0 -> 10864 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/SambaTest.png diff --git a/images/SambaTest.png b/images/SambaTest.png new file mode 100644 index 0000000000000000000000000000000000000000..be98f86e4dc694ea5e88a248ed671c79a8287bb7 GIT binary patch literal 10864 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 literal 0 HcmV?d00001 From fcc5b36c220ad5875f7ac1cb422b458080914fed Mon Sep 17 00:00:00 2001 From: "Son H. Nguyen" <5765503+Son-HNguyen@users.noreply.github.com> Date: Tue, 3 Apr 2018 19:40:14 +0200 Subject: [PATCH 09/11] Updated README.md. --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index c3d363d..69dec52 100644 --- a/README.md +++ b/README.md @@ -149,6 +149,11 @@ where: net use : \\\smb_shared ``` where the `` can be an arbitrary unoccupied letter (e.g. `R`) and `SERVER` is the name or IP address of the host machine, where the container is being hosted. The latter can be found using the command `ifconfig` or `ipconfig`. + + Once the connection has been established, open the shared folder in Windows Explorer and create a new text file `Test.txt`. This text file should now also be visible on the web client (e.g. `http://myDockerHost/data/`) as shown below: +

+ +

+ In Linux: ```bash From 8db194b47225701e040b0d88b9b7b47af58cac83 Mon Sep 17 00:00:00 2001 From: "Son H. Nguyen" <5765503+Son-HNguyen@users.noreply.github.com> Date: Wed, 4 Apr 2018 13:10:52 +0200 Subject: [PATCH 10/11] Updated README.md. --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 69dec52..7edbedf 100644 --- a/README.md +++ b/README.md @@ -85,9 +85,8 @@ The 3DCityDB-Web-Map-Client Docker image also allows sharing data between differ To enable Samba: ```bash docker run -dit --name 3dwebmap-container -p 80:8000 -p 139:139 -p 445:445 \ - -v /home/docker/data/:/var/www/data/ \ -tumgis/3dcitydb-web-map \ - -u "username;password!" \ + -v /home/docker/data/:/var/www/data/ tumgis/3dcitydb-web-map \ + -u "username;password!" \ -s "smb_shared;/var/www/data/;yes;no;yes;all;username;username;comment" ``` where: From abaa057ed79092c993d6cdca29d5a9f5b9f30ced Mon Sep 17 00:00:00 2001 From: "Son H. Nguyen" <5765503+Son-HNguyen@users.noreply.github.com> Date: Wed, 4 Apr 2018 19:58:07 +0200 Subject: [PATCH 11/11] Updated README.md. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7edbedf..6981332 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ This repo contains a Dockerfile for the [3D City Database Web-Map-Client (3D web #### Special features * *Landing page* and *data listing* for convenient 3D web client project creation +* *Sharing data* across multiple platforms (Windows, Linux, MacOS, etc.) using *Samba* #### Image versions/tags * **latest** - Latest stable version based on latest version of the 3D web client. Built from [master](https://github.com/tum-gis/3dcitydb-web-map-docker/tree/master) branch.