From 5ca3627eb887068ae8f10d6e9232d52cef53caf9 Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Tue, 28 Nov 2023 15:45:25 +0100 Subject: [PATCH 1/8] remove old k8s files --- deployment/_build.sh | 25 --- deployment/_docker_compose.sh | 13 -- deployment/_run.sh | 60 ------- deployment/docker-compose.yaml | 39 ----- deployment/k8s-metfamily-dev.yaml | 59 ------- deployment/metfamilydev-haproxy/Dockerfile | 25 --- deployment/metfamilydev-haproxy/haproxy.cfg | 176 -------------------- deployment/metfamilydev-haproxy/start.sh | 31 ---- deployment/shiny-server.conf | 29 ---- deployment/supervisord.conf | 17 -- deployments/k8s-metfamily.yaml | 57 ------- deployments/metfamily-dev.yaml | 71 -------- deployments/metfamily.yaml | 77 --------- 13 files changed, 679 deletions(-) delete mode 100755 deployment/_build.sh delete mode 100755 deployment/_docker_compose.sh delete mode 100755 deployment/_run.sh delete mode 100644 deployment/docker-compose.yaml delete mode 100644 deployment/k8s-metfamily-dev.yaml delete mode 100644 deployment/metfamilydev-haproxy/Dockerfile delete mode 100644 deployment/metfamilydev-haproxy/haproxy.cfg delete mode 100644 deployment/metfamilydev-haproxy/start.sh delete mode 100644 deployment/shiny-server.conf delete mode 100644 deployment/supervisord.conf delete mode 100644 deployments/k8s-metfamily.yaml delete mode 100644 deployments/metfamily-dev.yaml delete mode 100644 deployments/metfamily.yaml diff --git a/deployment/_build.sh b/deployment/_build.sh deleted file mode 100755 index 896cd35..0000000 --- a/deployment/_build.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -# Name -NAME="korseby/metfamily-dev" - -# Cache -#CACHE="--no-cache" - -# CPU options -#CPU_SHARES="--cpu-shares=8" -#CPU_SETS="--cpuset-cpus=0-$[$CPU_SHARES-1]" -#CPU_MEMS="--cpuset-mems=0" -#MEM="--memory=8g" - - - -# Build docker -cd .. -cp -af /vol/R/shiny/srv/shiny-server/MetFam/data/classifier ./inst/data/ -docker build $CACHE --rm=true $CPU_SHARES $CPU_SETS $CPU_MEMS $MEM --tag=$NAME . -rm -rf ./inst/data/classifier -cd deployment - -#docker push $NAME - diff --git a/deployment/_docker_compose.sh b/deployment/_docker_compose.sh deleted file mode 100755 index 05208e3..0000000 --- a/deployment/_docker_compose.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -# start -docker-compose up -d -docker-compose scale metfamilydev=8 - -# status -#docker-compose ps -#docker-compose logs - -# stop -#docker-compose down - diff --git a/deployment/_run.sh b/deployment/_run.sh deleted file mode 100755 index 161e0b3..0000000 --- a/deployment/_run.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash - -# Make sure to add the following entry in /etc/default/grub: -#GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" - - - -# Name -NAME="korseby/metfamily-dev" - -# CPU options -#CPU_SHARES="--cpu-shares=8" -#CPU_SETS="--cpuset-cpus=0-$[$CPU_SHARES-1]" -#CPU_MEMS="--cpuset-mems=0" -#MEM="--memory=8g" - -# Ports -PORT_PUB=9011 -PORT_DOCKER=3838 - -# Volumes -VOL="--volume=/vol/R/shiny/srv/shiny-server/MetFam:/vol/R/shiny/srv/shiny-server/MetFam:ro" - - - -# Run docker -docker run --publish=${PORT_PUB}:${PORT_DOCKER} --log-driver=syslog $VOL $CPU_SHARES $CPU_SETS $CPU_MEMS $MEM --name="$(echo ${NAME} | sed -e 's/.*\///')-run" -i -t -d $NAME - - - -# Detach/Attach docker -# detach: CTRL-P + CTRL-Q - -# Start and attach docker (you can also use docker start -ai instead) -#docker start ${NAME}-run -#docker attach ${NAME}-run - -# Start shell inside running docker -#docker exec -i -t ${NAME}-run /bin/bash - -# Start failed container with different entrypoint -#docker run -ti --entrypoint=/bin/bash ${NAME}-run - -# Commit changes locally -#docker commit ${NAME}-run - -# Show docker container and images -#docker ps -a -#docker images - -# Delete container and image -#docker rm ${NAME}-run -#docker rmi ${NAME} - -# Delete exited containers -#docker rm $(docker ps -a -f status=exited | grep -v CONTAINER\ ID | awk '{print $1}') - -# Delete intermediate/untagged images -#docker rmi $(docker images | grep '^' | awk '{print $3}') - diff --git a/deployment/docker-compose.yaml b/deployment/docker-compose.yaml deleted file mode 100644 index e866a1a..0000000 --- a/deployment/docker-compose.yaml +++ /dev/null @@ -1,39 +0,0 @@ -version: '2' - -networks: - metfamilydev_net: - driver: bridge - ipam: - config: - - subnet: 10.83.83.0/24 - ip_range: 10.83.83.0/24 - gateway: 10.83.83.1 - -services: - metfamilydev: - image: korseby/metfamily-dev - networks: - - metfamilydev_net - volumes: - - /vol/R/shiny/srv/shiny-server/MetFam:/vol/R/shiny/srv/shiny-server/MetFam - expose: - - 3838 - restart: always - - haproxy: - container_name: metfamilydev_haproxy - build: metfamilydev-haproxy - networks: - - metfamilydev_net - volumes: - - ./metfamilydev-haproxy:/haproxy-override - links: - - metfamilydev - ports: - - "9011:80" - - "9012:70" - expose: - - "80" - - "70" - restart: always - diff --git a/deployment/k8s-metfamily-dev.yaml b/deployment/k8s-metfamily-dev.yaml deleted file mode 100644 index 490df33..0000000 --- a/deployment/k8s-metfamily-dev.yaml +++ /dev/null @@ -1,59 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: metfamily-dev-deployment - labels: - app: metfamily-dev -spec: - replicas: 1 - selector: - matchLabels: - app: metfamily-dev - template: - metadata: - labels: - app: metfamily-dev - spec: - containers: - - name: metfamily-dev - image: korseby/metfamily-dev - ports: - - containerPort: 3838 - ---- - -apiVersion: v1 -kind: Service -metadata: - name: metfamily-dev-service - annotations: - traefik.ingress.kubernetes.io/affinity: "true" - traefik.ingress.kubernetes.io/preserve-host: "true" - ingress.kubernetes.io/affinity: 'cookie' - labels: - app: metfamily-dev -spec: - selector: - app: metfamily-dev - ports: - - port: 80 - targetPort: 3838 - protocol: TCP - ---- - -apiVersion: extensions/v1beta1 -kind: Ingress -metadata: - name: metfamily-dev-traefik - annotations: - kubernetes.io/ingress.class: "traefik" -spec: - rules: - - host: metfamily-dev.10.22.12.2.nip.io - http: - paths: - - backend: - serviceName: metfamily-dev-service - servicePort: 80 - path: / diff --git a/deployment/metfamilydev-haproxy/Dockerfile b/deployment/metfamilydev-haproxy/Dockerfile deleted file mode 100644 index e50b78a..0000000 --- a/deployment/metfamilydev-haproxy/Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -FROM debian:jessie - -# Install haproxy -RUN sed -i 's/^# \(.*-backports\s\)/\1/g' /etc/apt/sources.list -RUN apt-get -y update -RUN apt-get -y install haproxy -RUN sed -i 's/^ENABLED=.*/ENABLED=1/' /etc/default/haproxy - -# Add configuration files -ADD haproxy.cfg /etc/haproxy/haproxy.cfg -ADD start.sh /haproxy-start - -# Define volumes -VOLUME ["/haproxy-override"] - -# Expose ports -EXPOSE 80 -EXPOSE 443 - -# Working directory -WORKDIR /etc/haproxy - -# Entrypoint -ENTRYPOINT ["/bin/bash", "/haproxy-start"] - diff --git a/deployment/metfamilydev-haproxy/haproxy.cfg b/deployment/metfamilydev-haproxy/haproxy.cfg deleted file mode 100644 index 521b920..0000000 --- a/deployment/metfamilydev-haproxy/haproxy.cfg +++ /dev/null @@ -1,176 +0,0 @@ -global - log 127.0.0.1 local1 notice - maxconn 4096 - user haproxy - group haproxy - ca-base /etc/ssl - crt-base /etc/ssl - -defaults - log global - maxconn 4096 - mode http - # Add x-forwarded-for header. - option forwardfor - option http-server-close - timeout connect 5s - timeout client 60s - timeout server 60s - # Long timeout for WebSocket connections. - timeout tunnel 1h - -frontend public - # HTTP - bind :80 - # Redirect all HTTP traffic to HTTPS - #redirect scheme https if !{ ssl_fc } - - # HTTPS - # Example with CA certificate bundle - # bind :443 ssl crt cert.pem ca-file bundle.crt - # Example without CA certification bunch - #bind :443 ssl crt snakeoil.pem - - # The node backends - websockets will be managed automatically, given the - # right base paths to send them to the right Node.js backend. - # - # If you wanted to specifically send websocket traffic somewhere different - # you'd use an ACL like { hdr(Upgrade) -i WebSocket }. Looking at path works - # just as well, though - such as { path_beg /socket.io } or similar. Adjust your - # rules to suite your specific setup. - #use_backend node if { path_beg /served/by/node/ } - # Everything else to Nginx. - #default_backend nginx - #acl is_websocket hdr(Upgrade) -i WebSocket - #use_backend node if is_websocket - default_backend metfamily_dev - -backend metfamily_dev - # Tell the backend that this is a secure connection, - # even though it's getting plain HTTP. - #reqadd X-Forwarded-Proto: https - - balance leastconn - # Check by hitting a page intended for this use. - #option httpchk GET /isrunning - #timeout check 500ms - # Wait 500ms between checks. - #hash-type consistent - #cookie JSESSIONID prefix nocache - cookie SRVSTICKY insert indirect nocache - server metfamily_dev2 metfamily_dev2:3838 check cookie metfamily_dev2 - server metfamily_dev3 metfamily_dev3:3838 check cookie metfamily_dev3 - server metfamily_dev4 metfamily_dev4:3838 check cookie metfamily_dev4 - server metfamily_dev5 metfamily_dev5:3838 check cookie metfamily_dev5 - server metfamily_dev6 metfamily_dev6:3838 check cookie metfamily_dev6 - server metfamily_dev7 metfamily_dev7:3838 check cookie metfamily_dev7 - server metfamily_dev8 metfamily_dev8:3838 check cookie metfamily_dev8 - server metfamily_dev9 metfamily_dev9:3838 check cookie metfamily_dev9 - server metfamily_dev10 metfamily_dev10:3838 check cookie metfamily_dev10 - server metfamily_dev11 metfamily_dev11:3838 check cookie metfamily_dev11 - server metfamily_dev12 metfamily_dev12:3838 check cookie metfamily_dev12 - server metfamily_dev13 metfamily_dev13:3838 check cookie metfamily_dev13 - server metfamily_dev14 metfamily_dev14:3838 check cookie metfamily_dev14 - server metfamily_dev15 metfamily_dev15:3838 check cookie metfamily_dev15 - server metfamily_dev16 metfamily_dev16:3838 check cookie metfamily_dev16 - server metfamily_dev17 metfamily_dev17:3838 check cookie metfamily_dev17 - server metfamily_dev18 metfamily_dev18:3838 check cookie metfamily_dev18 - server metfamily_dev19 metfamily_dev19:3838 check cookie metfamily_dev19 - server metfamily_dev20 metfamily_dev20:3838 check cookie metfamily_dev20 - server metfamily_dev21 metfamily_dev21:3838 check cookie metfamily_dev21 - server metfamily_dev22 metfamily_dev22:3838 check cookie metfamily_dev22 - server metfamily_dev23 metfamily_dev23:3838 check cookie metfamily_dev23 - server metfamily_dev24 metfamily_dev24:3838 check cookie metfamily_dev24 - server metfamily_dev25 metfamily_dev25:3838 check cookie metfamily_dev25 - server metfamily_dev26 metfamily_dev26:3838 check cookie metfamily_dev26 - server metfamily_dev27 metfamily_dev27:3838 check cookie metfamily_dev27 - server metfamily_dev28 metfamily_dev28:3838 check cookie metfamily_dev28 - server metfamily_dev29 metfamily_dev29:3838 check cookie metfamily_dev29 - server metfamily_dev30 metfamily_dev30:3838 check cookie metfamily_dev30 - server metfamily_dev31 metfamily_dev31:3838 check cookie metfamily_dev31 - server metfamily_dev32 metfamily_dev32:3838 check cookie metfamily_dev32 - server metfamily_dev33 metfamily_dev33:3838 check cookie metfamily_dev33 - server metfamily_dev34 metfamily_dev34:3838 check cookie metfamily_dev34 - server metfamily_dev35 metfamily_dev35:3838 check cookie metfamily_dev35 - server metfamily_dev36 metfamily_dev36:3838 check cookie metfamily_dev36 - server metfamily_dev37 metfamily_dev37:3838 check cookie metfamily_dev37 - server metfamily_dev38 metfamily_dev38:3838 check cookie metfamily_dev38 - server metfamily_dev39 metfamily_dev39:3838 check cookie metfamily_dev39 - server metfamily_dev40 metfamily_dev40:3838 check cookie metfamily_dev40 - server metfamily_dev41 metfamily_dev41:3838 check cookie metfamily_dev41 - server metfamily_dev42 metfamily_dev42:3838 check cookie metfamily_dev42 - server metfamily_dev43 metfamily_dev43:3838 check cookie metfamily_dev43 - server metfamily_dev44 metfamily_dev44:3838 check cookie metfamily_dev44 - server metfamily_dev45 metfamily_dev45:3838 check cookie metfamily_dev45 - server metfamily_dev46 metfamily_dev46:3838 check cookie metfamily_dev46 - server metfamily_dev47 metfamily_dev47:3838 check cookie metfamily_dev47 - server metfamily_dev48 metfamily_dev48:3838 check cookie metfamily_dev48 - server metfamily_dev49 metfamily_dev49:3838 check cookie metfamily_dev49 - server metfamily_dev50 metfamily_dev50:3838 check cookie metfamily_dev50 - server metfamily_dev51 metfamily_dev51:3838 check cookie metfamily_dev51 - server metfamily_dev52 metfamily_dev52:3838 check cookie metfamily_dev52 - server metfamily_dev53 metfamily_dev53:3838 check cookie metfamily_dev53 - server metfamily_dev54 metfamily_dev54:3838 check cookie metfamily_dev54 - server metfamily_dev55 metfamily_dev55:3838 check cookie metfamily_dev55 - server metfamily_dev56 metfamily_dev56:3838 check cookie metfamily_dev56 - server metfamily_dev57 metfamily_dev57:3838 check cookie metfamily_dev57 - server metfamily_dev58 metfamily_dev58:3838 check cookie metfamily_dev58 - server metfamily_dev59 metfamily_dev59:3838 check cookie metfamily_dev59 - server metfamily_dev60 metfamily_dev60:3838 check cookie metfamily_dev60 - server metfamily_dev61 metfamily_dev61:3838 check cookie metfamily_dev61 - server metfamily_dev62 metfamily_dev62:3838 check cookie metfamily_dev62 - server metfamily_dev63 metfamily_dev63:3838 check cookie metfamily_dev63 - server metfamily_dev64 metfamily_dev64:3838 check cookie metfamily_dev64 - server metfamily_dev65 metfamily_dev65:3838 check cookie metfamily_dev65 - server metfamily_dev66 metfamily_dev66:3838 check cookie metfamily_dev66 - server metfamily_dev67 metfamily_dev67:3838 check cookie metfamily_dev67 - server metfamily_dev68 metfamily_dev68:3838 check cookie metfamily_dev68 - server metfamily_dev69 metfamily_dev69:3838 check cookie metfamily_dev69 - server metfamily_dev70 metfamily_dev70:3838 check cookie metfamily_dev70 - server metfamily_dev71 metfamily_dev71:3838 check cookie metfamily_dev71 - server metfamily_dev72 metfamily_dev72:3838 check cookie metfamily_dev72 - server metfamily_dev73 metfamily_dev73:3838 check cookie metfamily_dev73 - server metfamily_dev74 metfamily_dev74:3838 check cookie metfamily_dev74 - server metfamily_dev75 metfamily_dev75:3838 check cookie metfamily_dev75 - server metfamily_dev76 metfamily_dev76:3838 check cookie metfamily_dev76 - server metfamily_dev77 metfamily_dev77:3838 check cookie metfamily_dev77 - server metfamily_dev78 metfamily_dev78:3838 check cookie metfamily_dev78 - server metfamily_dev79 metfamily_dev79:3838 check cookie metfamily_dev79 - server metfamily_dev80 metfamily_dev80:3838 check cookie metfamily_dev80 - server metfamily_dev81 metfamily_dev81:3838 check cookie metfamily_dev81 - server metfamily_dev82 metfamily_dev82:3838 check cookie metfamily_dev82 - server metfamily_dev83 metfamily_dev83:3838 check cookie metfamily_dev83 - server metfamily_dev84 metfamily_dev84:3838 check cookie metfamily_dev84 - server metfamily_dev85 metfamily_dev85:3838 check cookie metfamily_dev85 - server metfamily_dev86 metfamily_dev86:3838 check cookie metfamily_dev86 - server metfamily_dev87 metfamily_dev87:3838 check cookie metfamily_dev87 - server metfamily_dev88 metfamily_dev88:3838 check cookie metfamily_dev88 - server metfamily_dev89 metfamily_dev89:3838 check cookie metfamily_dev89 - server metfamily_dev90 metfamily_dev90:3838 check cookie metfamily_dev90 - server metfamily_dev91 metfamily_dev91:3838 check cookie metfamily_dev91 - server metfamily_dev92 metfamily_dev92:3838 check cookie metfamily_dev92 - server metfamily_dev93 metfamily_dev93:3838 check cookie metfamily_dev93 - server metfamily_dev94 metfamily_dev94:3838 check cookie metfamily_dev94 - server metfamily_dev95 metfamily_dev95:3838 check cookie metfamily_dev95 - server metfamily_dev96 metfamily_dev96:3838 check cookie metfamily_dev96 - server metfamily_dev97 metfamily_dev97:3838 check cookie metfamily_dev97 - server metfamily_dev98 metfamily_dev98:3838 check cookie metfamily_dev98 - server metfamily_dev99 metfamily_dev99:3838 check cookie metfamily_dev99 - -# For displaying HAProxy statistics. -frontend stats - # HTTPS only. - # Example with CA certificate bundle - # bind :1936 ssl crt cert.pem ca-file bundle.crt - # Example without CA certification bunch - bind :70 - #ssl crt cert.pem - default_backend stats - -backend stats - stats enable - stats hide-version - stats realm Haproxy Statistics - stats uri / - #stats auth admin:password - diff --git a/deployment/metfamilydev-haproxy/start.sh b/deployment/metfamilydev-haproxy/start.sh deleted file mode 100644 index 7b624bd..0000000 --- a/deployment/metfamilydev-haproxy/start.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -HAPROXY="/etc/haproxy" -OVERRIDE="/haproxy-override" -PIDFILE="/var/run/haproxy.pid" - -CONFIG="haproxy.cfg" -ERRORS="errors" - -cd "$HAPROXY" - -# Symlink errors directory -if [[ -d "$OVERRIDE/$ERRORS" ]]; then - mkdir -p "$OVERRIDE/$ERRORS" - rm -fr "$ERRORS" - ln -s "$OVERRIDE/$ERRORS" "$ERRORS" -fi - -# Symlink config file. -if [[ -f "$OVERRIDE/$CONFIG" ]]; then - rm -f "$CONFIG" - ln -s "$OVERRIDE/$CONFIG" "$CONFIG" -fi - -# Create hosts -for ((i=0;i<=99;i++)); do - echo "10.83.83.$i metfamily_dev$i dockermetfamilydev_metfamily_dev_$i" >> /etc/hosts -done - -exec haproxy -f /etc/haproxy/haproxy.cfg -p "$PIDFILE" - diff --git a/deployment/shiny-server.conf b/deployment/shiny-server.conf deleted file mode 100644 index 051b9ed..0000000 --- a/deployment/shiny-server.conf +++ /dev/null @@ -1,29 +0,0 @@ -# Instruct Shiny Server to run applications as the user "shiny" -run_as shiny; - -# Define a server that listens on port 3838 -server { - listen 3838; - - # Defines the amount of time Shiny Server will wait for an R process - # to start before giving up. Defaults to 60 seconds. - app_init_timeout 3600; - - # Defines the amount of time an R process will persist with no - # connections before being terminated. Defaults to 5 seconds. - app_idle_timeout 600; - - # Define a location at the base URL - location / { - - # Host the directory of Shiny Apps stored in this directory - site_dir /srv/shiny-server; - - # Log all Shiny output to files in this directory - log_dir /var/log/shiny-server; - - # When a user visits the base URL rather than a particular application, - # an index of the applications available in this directory will be shown. - directory_index on; - } -} diff --git a/deployment/supervisord.conf b/deployment/supervisord.conf deleted file mode 100644 index 550bbcf..0000000 --- a/deployment/supervisord.conf +++ /dev/null @@ -1,17 +0,0 @@ -[supervisord] -nodaemon=true -logfile=/var/log/supervisor/supervisord.log -pidfile = /tmp/supervisord.pid - -[program:shinyserver] -user=root -startsecs=0 -process_name=%(program_name)s_%(process_num)02d -numprocs=1 -command=/bin/bash -c "exec /usr/bin/shiny-server --pidfile=/var/run/shiny-server.pid >> /var/log/shiny-server.log 2>&1" -stdout_logfile=/var/log/supervisor/%(program_name)s.log -stderr_logfile=/var/log/supervisor/%(program_name)s.log -autostart=true -autorestart=false -redirect_stderr=true - diff --git a/deployments/k8s-metfamily.yaml b/deployments/k8s-metfamily.yaml deleted file mode 100644 index 28d71cf..0000000 --- a/deployments/k8s-metfamily.yaml +++ /dev/null @@ -1,57 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: metfamily-deployment - labels: - app: metfamily -spec: - replicas: 1 - selector: - matchLabels: - app: metfamily - template: - metadata: - labels: - app: metfamily - spec: - containers: - - name: metfamily - image: korseby/metfamily - ports: - - containerPort: 3838 - ---- - -apiVersion: v1 -kind: Service -metadata: - name: metfamily-service - annotations: - traefik.ingress.kubernetes.io/affinity: "true" - labels: - app: metfamily -spec: - selector: - app: metfamily - ports: - - port: 80 - targetPort: 3838 - protocol: TCP - ---- - -apiVersion: extensions/v1beta1 -kind: Ingress -metadata: - name: metfamily-traefik - annotations: - kubernetes.io/ingress.class: "traefik" -spec: - rules: - - host: metfamily.10.22.12.2.nip.io - http: - paths: - - backend: - serviceName: metfamily-service - servicePort: 80 - path: / diff --git a/deployments/metfamily-dev.yaml b/deployments/metfamily-dev.yaml deleted file mode 100644 index cbb4193..0000000 --- a/deployments/metfamily-dev.yaml +++ /dev/null @@ -1,71 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: metfamily-deployment - labels: - app: metfamily -spec: - replicas: 1 - selector: - matchLabels: - app: metfamily - template: - metadata: - labels: - app: metfamily - spec: - containers: - - name: metfamily - image: sneumann/metfamily - ports: - - containerPort: 3838 - resources: - limits: - cpu: "4" - memory: 16G - requests: - cpu: "2" - memory: 8G - volumeMounts: - - name: thoms-vol - mountPath: /srv/shiny-server/ - volumes: - - name: thoms-vol - nfs: - server: 192.168.0.20 - path: /vol/R/shiny/srv/shiny-server/MetFam - ---- - -apiVersion: v1 -kind: Service -metadata: - name: metfamily-service - labels: - app: metfamily -spec: - selector: - app: metfamily - ports: - - port: 80 - targetPort: 3838 - protocol: TCP - ---- - -apiVersion: extensions/v1beta1 -kind: Ingress -metadata: - name: metfamily-nginx - annotations: - nginx.ingress.kubernetes.io/affinity: cookie - nginx.ingress.kubernetes.io/proxy-body-size: "500m" -spec: - rules: - - host: metfamily-devel.10.22.12.12.nip.io - http: - paths: - - backend: - serviceName: metfamily-service - servicePort: 80 - path: / diff --git a/deployments/metfamily.yaml b/deployments/metfamily.yaml deleted file mode 100644 index 87503fa..0000000 --- a/deployments/metfamily.yaml +++ /dev/null @@ -1,77 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: metfamily-deployment - labels: - app: metfamily -spec: - replicas: 1 - selector: - matchLabels: - app: metfamily - template: - metadata: - labels: - app: metfamily - spec: - containers: - - name: metfamily - image: sneumann/metfamily - ports: - - containerPort: 3838 - resources: - limits: - cpu: "4" - memory: 16G - requests: - cpu: "2" - memory: 8G - volumeMounts: - - name: thoms-vol - mountPath: /srv/shiny-server/inst/data/classifier/ - volumes: - - name: thoms-vol - nfs: - server: 192.168.0.20 - path: /vol/R/shiny/srv/shiny-server/MetFam/MetFamily/inst/data/classifier/ - ---- - -apiVersion: v1 -kind: Service -metadata: - name: metfamily-service - labels: - app: metfamily -spec: - selector: - app: metfamily - ports: - - port: 80 - targetPort: 3838 - protocol: TCP - ---- - -apiVersion: extensions/v1beta1 -kind: Ingress -metadata: - name: metfamily-nginx - annotations: - nginx.ingress.kubernetes.io/affinity: cookie - nginx.ingress.kubernetes.io/proxy-body-size: "500m" - nginx.ingress.kubernetes.io/session-cookie-path: "/MetFamily/" - nginx.ingress.kubernetes.io/affinity: "cookie" - nginx.ingress.kubernetes.io/proxy-connect-timeout: "600" - nginx.ingress.kubernetes.io/proxy-write-timeout: "600" - nginx.ingress.kubernetes.io/rewrite-target: /$2 - -spec: - rules: - - host: "msbi.ipb-halle.de" - http: - paths: - - backend: - serviceName: metfamily-service - servicePort: 80 - path: /MetFamily(/|$)(.*) From a51b9fe5615fe0914b6b37ead6972f542dbfb61a Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Tue, 28 Nov 2023 16:36:53 +0100 Subject: [PATCH 2/8] Use devtools to install deps instead of duplicating DESCRIPTION --- binder/install.R | 68 +++++++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/binder/install.R b/binder/install.R index df86b48..e1f876f 100644 --- a/binder/install.R +++ b/binder/install.R @@ -1,39 +1,43 @@ install.packages("devtools") -library("devtools") install.packages("BiocManager") -install.packages("shiny") -install.packages("testthat") - -devtools::install_github("rstudio/htmltools") -devtools::install_github("decisionpatterns/searchable") - -install.packages("shinyjs") -install.packages("shinybusy") -install.packages("DT") -install.packages("colourpicker") -install.packages("shinyBS") -install.packages("egg") -install.packages("cowplot") -install.packages("searchable") -install.packages("gdata") +library("devtools") +devtools::install_deps("..") -BiocManager::install("mzR") -BiocManager::install("xcms") -BiocManager::install("mixOmics") -BiocManager::install("pcaMethods") -install.packages("FactoMineR") -install.packages("matrixStats") -install.packages("Matrix") -install.packages("stringi") -install.packages("slam") -install.packages("knitr") -install.packages("cba") -install.packages("squash") -install.packages("plotrix") -install.packages("RColorBrewer") -install.packages("plotly") -install.packages("rlang") +# install.packages("shiny") +# install.packages("testthat") +# +# devtools::install_github("rstudio/htmltools") +# devtools::install_github("decisionpatterns/searchable") +# +# install.packages("shinyjs") +# install.packages("shinybusy") +# install.packages("DT") +# install.packages("colourpicker") +# install.packages("shinyBS") +# install.packages("egg") +# install.packages("cowplot") +# install.packages("searchable") +# install.packages("gdata") +# +# BiocManager::install("mzR") +# BiocManager::install("xcms") +# BiocManager::install("mixOmics") +# BiocManager::install("pcaMethods") +# +# install.packages("car") +# install.packages("FactoMineR") +# install.packages("matrixStats") +# install.packages("Matrix") +# install.packages("stringi") +# install.packages("slam") +# install.packages("knitr") +# install.packages("cba") +# install.packages("squash") +# install.packages("plotrix") +# install.packages("RColorBrewer") +# install.packages("plotly") +# install.packages("rlang") From 7cb820954972c071ca89d1ff14ffb1f9356356bb Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Tue, 28 Nov 2023 16:37:26 +0100 Subject: [PATCH 3/8] Move shiny files to package inst --- README.md | 8 ++++++++ .../app_files/server_functionsDownloads.R | 0 .../MetFamily}/app_files/server_functionsFilters.R | 0 .../app_files/server_functionsSelections.R | 0 .../app_files/server_functionsSerialization.R | 0 .../MetFamily}/app_files/server_functionsTableGui.R | 0 .../MetFamily}/app_files/server_guiAnnotation.R | 0 .../MetFamily}/app_files/server_guiDialogs.R | 0 .../MetFamily}/app_files/server_guiMs2plot.R | 0 .../MetFamily}/app_files/server_guiPlotControls.R | 0 .../MetFamily}/app_files/server_guiPlots.R | 0 .../MetFamily}/app_files/server_guiTabAnnotation.R | 0 .../MetFamily}/app_files/server_guiTabClassifier.R | 0 .../MetFamily}/app_files/server_guiTabExport.R | 0 .../MetFamily}/app_files/server_guiTabHca.R | 0 .../MetFamily}/app_files/server_guiTabInput.R | 0 .../MetFamily}/app_files/server_guiTabMsmsFilter.R | 0 .../MetFamily}/app_files/server_guiTabPca.R | 0 .../app_files/server_guiTabSampleFilter.R | 0 .../MetFamily}/app_files/server_guiTabSearch.R | 0 .../MetFamily}/app_files/ui_rightColumn.R | 0 {MetFamily => inst/MetFamily}/server.R | 0 {MetFamily => inst/MetFamily}/ui.R | 0 {MetFamily => inst/MetFamily}/version.R | 0 inst/{ => MetFamily}/www/css/ipb-styles.css | 0 inst/{ => MetFamily}/www/img/2013_IPB_Logo_EN.png | Bin .../www/img/2019_wch_logo_de_invertiert.png | Bin .../img/2020_Logo_schrift_wei\303\237_Trans_EN.png" | Bin .../www/img/Leibniz__Logo_EN_Negative_100mm.svg | 0 inst/{ => MetFamily}/www/img/Metfamily.gif | Bin inst/{ => MetFamily}/www/img/body-bg.png | Bin inst/{ => MetFamily}/www/img/denbi-logo-white.svg | 0 inst/{ => MetFamily}/www/ipbfooter.html | 0 inst/{ => MetFamily}/www/logo_ipb_en.png | Bin 34 files changed, 8 insertions(+) rename {MetFamily => inst/MetFamily}/app_files/server_functionsDownloads.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_functionsFilters.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_functionsSelections.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_functionsSerialization.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_functionsTableGui.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_guiAnnotation.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_guiDialogs.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_guiMs2plot.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_guiPlotControls.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_guiPlots.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_guiTabAnnotation.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_guiTabClassifier.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_guiTabExport.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_guiTabHca.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_guiTabInput.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_guiTabMsmsFilter.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_guiTabPca.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_guiTabSampleFilter.R (100%) rename {MetFamily => inst/MetFamily}/app_files/server_guiTabSearch.R (100%) rename {MetFamily => inst/MetFamily}/app_files/ui_rightColumn.R (100%) rename {MetFamily => inst/MetFamily}/server.R (100%) rename {MetFamily => inst/MetFamily}/ui.R (100%) rename {MetFamily => inst/MetFamily}/version.R (100%) rename inst/{ => MetFamily}/www/css/ipb-styles.css (100%) rename inst/{ => MetFamily}/www/img/2013_IPB_Logo_EN.png (100%) rename inst/{ => MetFamily}/www/img/2019_wch_logo_de_invertiert.png (100%) rename "inst/www/img/2020_Logo_schrift_wei\303\237_Trans_EN.png" => "inst/MetFamily/www/img/2020_Logo_schrift_wei\303\237_Trans_EN.png" (100%) rename inst/{ => MetFamily}/www/img/Leibniz__Logo_EN_Negative_100mm.svg (100%) rename inst/{ => MetFamily}/www/img/Metfamily.gif (100%) rename inst/{ => MetFamily}/www/img/body-bg.png (100%) rename inst/{ => MetFamily}/www/img/denbi-logo-white.svg (100%) rename inst/{ => MetFamily}/www/ipbfooter.html (100%) rename inst/{ => MetFamily}/www/logo_ipb_en.png (100%) diff --git a/README.md b/README.md index ade22e0..cdf945e 100755 --- a/README.md +++ b/README.md @@ -34,6 +34,14 @@ of `rstudio:rstudio`. Do not use in Production ! You can also pass a local directory with checked out MetFamily git tree via the `docker run -v` argument. +## Running locally with MetFamily R Package + +After installing the `MetFamily` R package and its dependencies, you can +``` +library(MetFamily) +runApp(system.file("MetFamily", package="MetFamily")) +``` + ## Running through Kubernetes At IPB we are running MetFamily inside a Kubernetes cluster. diff --git a/MetFamily/app_files/server_functionsDownloads.R b/inst/MetFamily/app_files/server_functionsDownloads.R similarity index 100% rename from MetFamily/app_files/server_functionsDownloads.R rename to inst/MetFamily/app_files/server_functionsDownloads.R diff --git a/MetFamily/app_files/server_functionsFilters.R b/inst/MetFamily/app_files/server_functionsFilters.R similarity index 100% rename from MetFamily/app_files/server_functionsFilters.R rename to inst/MetFamily/app_files/server_functionsFilters.R diff --git a/MetFamily/app_files/server_functionsSelections.R b/inst/MetFamily/app_files/server_functionsSelections.R similarity index 100% rename from MetFamily/app_files/server_functionsSelections.R rename to inst/MetFamily/app_files/server_functionsSelections.R diff --git a/MetFamily/app_files/server_functionsSerialization.R b/inst/MetFamily/app_files/server_functionsSerialization.R similarity index 100% rename from MetFamily/app_files/server_functionsSerialization.R rename to inst/MetFamily/app_files/server_functionsSerialization.R diff --git a/MetFamily/app_files/server_functionsTableGui.R b/inst/MetFamily/app_files/server_functionsTableGui.R similarity index 100% rename from MetFamily/app_files/server_functionsTableGui.R rename to inst/MetFamily/app_files/server_functionsTableGui.R diff --git a/MetFamily/app_files/server_guiAnnotation.R b/inst/MetFamily/app_files/server_guiAnnotation.R similarity index 100% rename from MetFamily/app_files/server_guiAnnotation.R rename to inst/MetFamily/app_files/server_guiAnnotation.R diff --git a/MetFamily/app_files/server_guiDialogs.R b/inst/MetFamily/app_files/server_guiDialogs.R similarity index 100% rename from MetFamily/app_files/server_guiDialogs.R rename to inst/MetFamily/app_files/server_guiDialogs.R diff --git a/MetFamily/app_files/server_guiMs2plot.R b/inst/MetFamily/app_files/server_guiMs2plot.R similarity index 100% rename from MetFamily/app_files/server_guiMs2plot.R rename to inst/MetFamily/app_files/server_guiMs2plot.R diff --git a/MetFamily/app_files/server_guiPlotControls.R b/inst/MetFamily/app_files/server_guiPlotControls.R similarity index 100% rename from MetFamily/app_files/server_guiPlotControls.R rename to inst/MetFamily/app_files/server_guiPlotControls.R diff --git a/MetFamily/app_files/server_guiPlots.R b/inst/MetFamily/app_files/server_guiPlots.R similarity index 100% rename from MetFamily/app_files/server_guiPlots.R rename to inst/MetFamily/app_files/server_guiPlots.R diff --git a/MetFamily/app_files/server_guiTabAnnotation.R b/inst/MetFamily/app_files/server_guiTabAnnotation.R similarity index 100% rename from MetFamily/app_files/server_guiTabAnnotation.R rename to inst/MetFamily/app_files/server_guiTabAnnotation.R diff --git a/MetFamily/app_files/server_guiTabClassifier.R b/inst/MetFamily/app_files/server_guiTabClassifier.R similarity index 100% rename from MetFamily/app_files/server_guiTabClassifier.R rename to inst/MetFamily/app_files/server_guiTabClassifier.R diff --git a/MetFamily/app_files/server_guiTabExport.R b/inst/MetFamily/app_files/server_guiTabExport.R similarity index 100% rename from MetFamily/app_files/server_guiTabExport.R rename to inst/MetFamily/app_files/server_guiTabExport.R diff --git a/MetFamily/app_files/server_guiTabHca.R b/inst/MetFamily/app_files/server_guiTabHca.R similarity index 100% rename from MetFamily/app_files/server_guiTabHca.R rename to inst/MetFamily/app_files/server_guiTabHca.R diff --git a/MetFamily/app_files/server_guiTabInput.R b/inst/MetFamily/app_files/server_guiTabInput.R similarity index 100% rename from MetFamily/app_files/server_guiTabInput.R rename to inst/MetFamily/app_files/server_guiTabInput.R diff --git a/MetFamily/app_files/server_guiTabMsmsFilter.R b/inst/MetFamily/app_files/server_guiTabMsmsFilter.R similarity index 100% rename from MetFamily/app_files/server_guiTabMsmsFilter.R rename to inst/MetFamily/app_files/server_guiTabMsmsFilter.R diff --git a/MetFamily/app_files/server_guiTabPca.R b/inst/MetFamily/app_files/server_guiTabPca.R similarity index 100% rename from MetFamily/app_files/server_guiTabPca.R rename to inst/MetFamily/app_files/server_guiTabPca.R diff --git a/MetFamily/app_files/server_guiTabSampleFilter.R b/inst/MetFamily/app_files/server_guiTabSampleFilter.R similarity index 100% rename from MetFamily/app_files/server_guiTabSampleFilter.R rename to inst/MetFamily/app_files/server_guiTabSampleFilter.R diff --git a/MetFamily/app_files/server_guiTabSearch.R b/inst/MetFamily/app_files/server_guiTabSearch.R similarity index 100% rename from MetFamily/app_files/server_guiTabSearch.R rename to inst/MetFamily/app_files/server_guiTabSearch.R diff --git a/MetFamily/app_files/ui_rightColumn.R b/inst/MetFamily/app_files/ui_rightColumn.R similarity index 100% rename from MetFamily/app_files/ui_rightColumn.R rename to inst/MetFamily/app_files/ui_rightColumn.R diff --git a/MetFamily/server.R b/inst/MetFamily/server.R similarity index 100% rename from MetFamily/server.R rename to inst/MetFamily/server.R diff --git a/MetFamily/ui.R b/inst/MetFamily/ui.R similarity index 100% rename from MetFamily/ui.R rename to inst/MetFamily/ui.R diff --git a/MetFamily/version.R b/inst/MetFamily/version.R similarity index 100% rename from MetFamily/version.R rename to inst/MetFamily/version.R diff --git a/inst/www/css/ipb-styles.css b/inst/MetFamily/www/css/ipb-styles.css similarity index 100% rename from inst/www/css/ipb-styles.css rename to inst/MetFamily/www/css/ipb-styles.css diff --git a/inst/www/img/2013_IPB_Logo_EN.png b/inst/MetFamily/www/img/2013_IPB_Logo_EN.png similarity index 100% rename from inst/www/img/2013_IPB_Logo_EN.png rename to inst/MetFamily/www/img/2013_IPB_Logo_EN.png diff --git a/inst/www/img/2019_wch_logo_de_invertiert.png b/inst/MetFamily/www/img/2019_wch_logo_de_invertiert.png similarity index 100% rename from inst/www/img/2019_wch_logo_de_invertiert.png rename to inst/MetFamily/www/img/2019_wch_logo_de_invertiert.png diff --git "a/inst/www/img/2020_Logo_schrift_wei\303\237_Trans_EN.png" "b/inst/MetFamily/www/img/2020_Logo_schrift_wei\303\237_Trans_EN.png" similarity index 100% rename from "inst/www/img/2020_Logo_schrift_wei\303\237_Trans_EN.png" rename to "inst/MetFamily/www/img/2020_Logo_schrift_wei\303\237_Trans_EN.png" diff --git a/inst/www/img/Leibniz__Logo_EN_Negative_100mm.svg b/inst/MetFamily/www/img/Leibniz__Logo_EN_Negative_100mm.svg similarity index 100% rename from inst/www/img/Leibniz__Logo_EN_Negative_100mm.svg rename to inst/MetFamily/www/img/Leibniz__Logo_EN_Negative_100mm.svg diff --git a/inst/www/img/Metfamily.gif b/inst/MetFamily/www/img/Metfamily.gif similarity index 100% rename from inst/www/img/Metfamily.gif rename to inst/MetFamily/www/img/Metfamily.gif diff --git a/inst/www/img/body-bg.png b/inst/MetFamily/www/img/body-bg.png similarity index 100% rename from inst/www/img/body-bg.png rename to inst/MetFamily/www/img/body-bg.png diff --git a/inst/www/img/denbi-logo-white.svg b/inst/MetFamily/www/img/denbi-logo-white.svg similarity index 100% rename from inst/www/img/denbi-logo-white.svg rename to inst/MetFamily/www/img/denbi-logo-white.svg diff --git a/inst/www/ipbfooter.html b/inst/MetFamily/www/ipbfooter.html similarity index 100% rename from inst/www/ipbfooter.html rename to inst/MetFamily/www/ipbfooter.html diff --git a/inst/www/logo_ipb_en.png b/inst/MetFamily/www/logo_ipb_en.png similarity index 100% rename from inst/www/logo_ipb_en.png rename to inst/MetFamily/www/logo_ipb_en.png From 43ec405abc3ed8059509638928acd74cc482c29b Mon Sep 17 00:00:00 2001 From: khabatv <61308485+khabatv@users.noreply.github.com> Date: Wed, 29 Nov 2023 11:15:32 +0100 Subject: [PATCH 4/8] Update Dockerfile new directory for MetFamily /srv/shiny-server/ --- Dockerfile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2483c8d..03d1ec9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,6 +8,5 @@ WORKDIR /srv/shiny-server RUN rm -rf * -ADD MetFamily /srv/shiny-server/ - - +#ADD MetFamily /srv/shiny-server/ +ADD inst/MetFamily /srv/shiny-server/ From 3668a2f966cc1c686262ca4f6467d7a8f0ba98ec Mon Sep 17 00:00:00 2001 From: khabatv <61308485+khabatv@users.noreply.github.com> Date: Wed, 29 Nov 2023 11:28:19 +0100 Subject: [PATCH 5/8] Update Dockerfile for ADD R /srv/shiny-server/R --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 03d1ec9..39ec539 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,3 +10,5 @@ RUN rm -rf * #ADD MetFamily /srv/shiny-server/ ADD inst/MetFamily /srv/shiny-server/ +ADD R /srv/shiny-server/R + From e5558b44de38ed0eb335a44c4abb11260b9763cd Mon Sep 17 00:00:00 2001 From: khabatv <61308485+khabatv@users.noreply.github.com> Date: Wed, 29 Nov 2023 12:04:32 +0100 Subject: [PATCH 6/8] Update Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 39ec539..e6f7cc1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,4 +11,4 @@ RUN rm -rf * #ADD MetFamily /srv/shiny-server/ ADD inst/MetFamily /srv/shiny-server/ ADD R /srv/shiny-server/R - +ADD inst /srv/shiny-server/inst From 530ff1dc14e6c1eb697ae1576e1fbd1d808ccee9 Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Wed, 29 Nov 2023 12:20:16 +0100 Subject: [PATCH 7/8] fix merge conflict --- Dockerfile | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index e6f7cc1..8c1dcca 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,11 +4,10 @@ MAINTAINER Kristian Peters LABEL Description="MetFamily helps identifying metabolites and groups them into metabolite clusters (a.k.a. families)." -WORKDIR /srv/shiny-server +ADD . /tmp/MetFamily -RUN rm -rf * +RUN R CMD INSTALL /tmp/MetFamily -#ADD MetFamily /srv/shiny-server/ +WORKDIR /srv/shiny-server +RUN rm -rf * ADD inst/MetFamily /srv/shiny-server/ -ADD R /srv/shiny-server/R -ADD inst /srv/shiny-server/inst From 956712d033b76abf9593433eb28d17bfac95d35b Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Wed, 29 Nov 2023 12:18:27 +0100 Subject: [PATCH 8/8] Fix Dockerfiles to (still) build 3.6.3 --- Dockerfile-base | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/Dockerfile-base b/Dockerfile-base index 8293649..2541a65 100644 --- a/Dockerfile-base +++ b/Dockerfile-base @@ -1,19 +1,30 @@ +# syntax=docker/dockerfile:1.3-labs FROM rocker/shiny:3.6.3 MAINTAINER Kristian Peters LABEL Description="MetFamily Base Image with dependencies." -RUN apt-get -y update && apt-get -y install \ +RUN apt-get -y --allow-releaseinfo-change update && apt-get -y install \ netcdf-bin libnetcdf-dev libdigest-sha-perl libigraph0-dev \ - xorg-dev libglu1-mesa-dev freeglut3-dev libgomp1 libxml2-dev gcc g++ libcurl4-gnutls-dev libssl-dev gdebi-core + xorg-dev libglu1-mesa-dev freeglut3-dev libgomp1 libxml2-dev gcc g++ libcurl4-gnutls-dev libssl-dev gdebi-core libharfbuzz-dev libfribidi-dev libtiff5-dev ENV NETCDF_INCLUDE=/usr/include RUN echo 'sanitize_errors off;disable_protocols xdr-streaming xhr-streaming iframe-eventsource iframe-htmlfile;' >> /etc/shiny-server/shiny-server.conf -ADD binder /tmp -RUN R -e "source('/tmp/install.R')" +COPY <