From c5ce5b1c877ec7ed8c4f34366ad64c8990f935e8 Mon Sep 17 00:00:00 2001
From: Patrick Jentsch 
Date: Mon, 3 Jun 2019 13:32:37 +0200
Subject: [PATCH] Update for unprivileged usage 2
---
 README.md   |  1 +
 wrapper/nlp | 25 ++++++++++++++++---------
 2 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/README.md b/README.md
index bbf22f1..2d93378 100644
--- a/README.md
+++ b/README.md
@@ -44,6 +44,7 @@ mkdir -p //files_for_nlp //files_from_nlp
 docker run \
     --rm \
     -it \
+    -u $(id -u $USER):$(id -g $USER) \
     -v //files_for_nlp:/input \
     -v //files_from_nlp:/output \
     sfb1288inf/nlp:latest \
diff --git a/wrapper/nlp b/wrapper/nlp
index 263d330..3d72579 100755
--- a/wrapper/nlp
+++ b/wrapper/nlp
@@ -2,9 +2,14 @@
 # coding=utf-8
 
 import argparse
+import os
 import subprocess
 
 container_image = 'gitlab.ub.uni-bielefeld.de:4567/sfb1288inf/nlp:latest'
+container_input_dir = '/input'
+container_output_dir = '/output'
+uid = str(os.getuid())
+gid = str(os.getgid())
 
 parser = argparse.ArgumentParser(add_help=False)
 parser.add_argument(
@@ -17,16 +22,18 @@ parser.add_argument(
     dest='output_dir',
     required=True
 )
-dirs, args = parser.parse_known_args()
+args, remaining_args = parser.parse_known_args()
 
-cmd = ['docker', 'run', '--rm', '-it']
-if dirs.input_dir is not None:
-    cmd += ['-v', dirs.input_dir + ':/input']
-    args += ['-i', '/input']
-if dirs.output_dir is not None:
-    cmd += ['-v', dirs.output_dir + ':/output']
-    args += ['-o', '/output']
+cmd = ['docker', 'run', '--rm', '-it', '-u', uid + ':' + gid]
+if args.input_dir is not None:
+    host_input_dir = os.path.abspath(args.input_dir)
+    cmd += ['-v', host_input_dir + ':' + container_input_dir]
+    remaining_args += ['-i', '/input']
+if args.output_dir is not None:
+    host_output_dir = os.path.abspath(args.output_dir)
+    cmd += ['-v', host_output_dir + ':' + container_output_dir]
+    remaining_args += ['-o', '/output']
 cmd.append(container_image)
-cmd += args
+cmd += remaining_args
 
 subprocess.run(cmd)