WEDC

appwrite-podman.sh

Jul 13th, 2021
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 17.07 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Create folder
  4.  
  5. if [[ ! -d appwrite ]]; then
  6. mkdir appwrite
  7. cd appwrite
  8. fi
  9.  
  10. # Install AppWrite-Compose
  11.  
  12. cat > .env <<EOF
  13. _APP_ENV=production
  14. _APP_LOCALE=es
  15. _APP_OPTIONS_ABUSE=enabled
  16. _APP_OPTIONS_FORCE_HTTPS=disabled
  17. _APP_OPENSSL_KEY_V1=o5Rxy7TCdkomrLuQOvX7mNULyQp6FctYk/9A9cTXBXzsxtdmT4+5bx5eAsgtWEMn
  18. _APP_DOMAIN=localhost
  19. _APP_DOMAIN_TARGET=localhost
  20. _APP_CONSOLE_WHITELIST_ROOT=enabled
  21. _APP_CONSOLE_WHITELIST_EMAILS=
  22. _APP_CONSOLE_WHITELIST_IPS=
  23. _APP_SYSTEM_EMAIL_NAME=Appwrite
  24. _APP_SYSTEM_EMAIL_ADDRESS=appwriter@localhost
  25. _APP_SYSTEM_RESPONSE_FORMAT=
  26. _APP_SYSTEM_SECURITY_EMAIL_ADDRESS=appwriter@localhost
  27. _APP_USAGE_STATS=enabled
  28. _APP_REDIS_HOST=redis
  29. _APP_REDIS_PORT=6379
  30. _APP_REDIS_USER=appwriter
  31. _APP_REDIS_PASS=xxRcY4TTXP5Fq+awI6Cy7aGNYBZ8fr4XK0cAaTJdj9J5dgW+odDEHiI3o9BFywj5
  32. _APP_DB_HOST=mariadb
  33. _APP_DB_PORT=3306
  34. _APP_DB_SCHEMA=appwrite
  35. _APP_DB_USER=appwriter
  36. _APP_DB_PASS=qp6OVgcuncDXVHzpJuSRBMFmz5hBF3vhalrcIrRs0bDItexL25rssZE4tWv/aDY9
  37. _APP_DB_ROOT_PASS=kpJfBVc8ILmrefjkDF5ATFH6R0I5KNELtg+dA67z/B8BJj1IdOg0HqhCeUQ9IdsO
  38. _APP_INFLUXDB_HOST=influxdb
  39. _APP_INFLUXDB_PORT=8086
  40. _APP_STATSD_HOST=telegraf
  41. _APP_STATSD_PORT=8125
  42. _APP_SMTP_HOST=
  43. _APP_SMTP_PORT=
  44. _APP_SMTP_SECURE=
  45. _APP_SMTP_USERNAME=
  46. _APP_SMTP_PASSWORD=
  47. _APP_STORAGE_LIMIT=10000000
  48. _APP_STORAGE_ANTIVIRUS=disabled
  49. _APP_STORAGE_ANTIVIRUS_HOST=clamav
  50. _APP_STORAGE_ANTIVIRUS_PORT=3310
  51. _APP_FUNCTIONS_TIMEOUT=900
  52. _APP_FUNCTIONS_CONTAINERS=10
  53. _APP_FUNCTIONS_CPUS=
  54. _APP_FUNCTIONS_MEMORY=256
  55. _APP_FUNCTIONS_MEMORY_SWAP=256
  56. _APP_FUNCTIONS_RUNTIMES=node-16.0,php-8.0,python-3.9,ruby-3.0,java-16.0
  57. _APP_FUNCTIONS_ENVS=node-16.0,php-7.4,python-3.9,ruby-3.0,java-16.0
  58. EOF
  59.  
  60. cat >docker-compose.yml <<EOF
  61. version: '3'
  62.  
  63. services:
  64.   traefik:
  65.     image: traefik:2.3
  66.     container_name: appwrite-traefik
  67.     command:
  68.       - --providers.file.directory=/storage/config
  69.       - --providers.file.watch=true
  70.       - --providers.docker=true
  71.       - --providers.docker.exposedByDefault=false
  72.       - --providers.docker.constraints=Label(\`traefik.constraint-label-stack\`,\`appwrite\`)
  73.       - --entrypoints.web.address=:80
  74.       - --entrypoints.websecure.address=:443
  75.     restart: unless-stopped
  76.     ports:
  77.       - 127.0.0.1:9580:80
  78.         #- 443:443
  79.     volumes:
  80.       - /var/run/user/${UID}/podman/podman.sock:/var/run/docker.sock
  81.       - appwrite-config:/storage/config:ro
  82.       - appwrite-certificates:/storage/certificates:ro
  83.     depends_on:
  84.       - appwrite
  85.     networks:
  86.       - gateway
  87.       - appwrite
  88.  
  89.   appwrite:
  90.     image: appwrite/appwrite:0.9.1
  91.     container_name: appwrite
  92.     restart: unless-stopped
  93.     networks:
  94.       - appwrite
  95.     labels:
  96.       - traefik.enable=true
  97.       - traefik.constraint-label-stack=appwrite
  98.       - traefik.http.routers.appwrite.rule=PathPrefix(\`/\`)
  99.       - traefik.http.routers.appwrite-secure.rule=PathPrefix(\`/\`)
  100.       - traefik.http.routers.appwrite-secure.tls=true
  101.     volumes:
  102.       - appwrite-uploads:/storage/uploads:rw
  103.       - appwrite-cache:/storage/cache:rw
  104.       - appwrite-config:/storage/config:rw
  105.       - appwrite-certificates:/storage/certificates:rw
  106.       - appwrite-functions:/storage/functions:rw
  107.     depends_on:
  108.       - mariadb
  109.       - redis
  110. #      - clamav
  111.       - influxdb
  112.     environment:
  113.       - _APP_ENV
  114.       - _APP_LOCALE
  115.       - _APP_CONSOLE_WHITELIST_ROOT
  116.       - _APP_CONSOLE_WHITELIST_EMAILS
  117.       - _APP_CONSOLE_WHITELIST_IPS
  118.       - _APP_SYSTEM_EMAIL_NAME
  119.       - _APP_SYSTEM_EMAIL_ADDRESS
  120.       - _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
  121.       - _APP_SYSTEM_RESPONSE_FORMAT
  122.       - _APP_OPTIONS_ABUSE
  123.       - _APP_OPTIONS_FORCE_HTTPS
  124.       - _APP_OPENSSL_KEY_V1
  125.       - _APP_DOMAIN
  126.       - _APP_DOMAIN_TARGET
  127.       - _APP_REDIS_HOST
  128.       - _APP_REDIS_PORT
  129.       - _APP_REDIS_USER
  130.       - _APP_REDIS_PASS
  131.       - _APP_DB_HOST
  132.       - _APP_DB_PORT
  133.       - _APP_DB_SCHEMA
  134.       - _APP_DB_USER
  135.       - _APP_DB_PASS
  136.       - _APP_SMTP_HOST
  137.       - _APP_SMTP_PORT
  138.       - _APP_SMTP_SECURE
  139.       - _APP_SMTP_USERNAME
  140.       - _APP_SMTP_PASSWORD
  141.       - _APP_USAGE_STATS
  142.       - _APP_INFLUXDB_HOST
  143.       - _APP_INFLUXDB_PORT
  144.       - _APP_STORAGE_LIMIT
  145.       - _APP_STORAGE_ANTIVIRUS
  146.       - _APP_STORAGE_ANTIVIRUS_HOST
  147.       - _APP_STORAGE_ANTIVIRUS_PORT
  148.       - _APP_FUNCTIONS_TIMEOUT
  149.       - _APP_FUNCTIONS_CONTAINERS
  150.       - _APP_FUNCTIONS_CPUS
  151.       - _APP_FUNCTIONS_MEMORY
  152.       - _APP_FUNCTIONS_MEMORY_SWAP
  153.       - _APP_FUNCTIONS_RUNTIMES
  154.  
  155.   appwrite-worker-usage:
  156.     image: appwrite/appwrite:0.9.1
  157.     entrypoint: worker-usage
  158.     container_name: appwrite-worker-usage
  159.     restart: unless-stopped
  160.     networks:
  161.       - appwrite
  162.     depends_on:
  163.       - redis
  164.       - telegraf
  165.     environment:
  166.       - _APP_ENV
  167.       - _APP_REDIS_HOST
  168.       - _APP_REDIS_PORT
  169.       - _APP_REDIS_USER
  170.       - _APP_REDIS_PASS
  171.       - _APP_STATSD_HOST
  172.       - _APP_STATSD_PORT
  173.  
  174.   appwrite-worker-audits:
  175.     image: appwrite/appwrite:0.9.1
  176.     entrypoint: worker-audits
  177.     container_name: appwrite-worker-audits
  178.     restart: unless-stopped
  179.     networks:
  180.       - appwrite
  181.     depends_on:
  182.       - redis
  183.       - mariadb
  184.     environment:
  185.       - _APP_ENV
  186.       - _APP_REDIS_HOST
  187.       - _APP_REDIS_PORT
  188.       - _APP_REDIS_USER
  189.       - _APP_REDIS_PASS
  190.       - _APP_DB_HOST
  191.       - _APP_DB_PORT
  192.       - _APP_DB_SCHEMA
  193.       - _APP_DB_USER
  194.       - _APP_DB_PASS
  195.  
  196.   appwrite-worker-webhooks:
  197.     image: appwrite/appwrite:0.9.1
  198.     entrypoint: worker-webhooks
  199.     container_name: appwrite-worker-webhooks
  200.     restart: unless-stopped
  201.     networks:
  202.       - appwrite
  203.     depends_on:
  204.       - redis
  205.       - mariadb
  206.     environment:
  207.       - _APP_ENV
  208.       - _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
  209.       - _APP_REDIS_HOST
  210.       - _APP_REDIS_PORT
  211.       - _APP_REDIS_USER
  212.       - _APP_REDIS_PASS
  213.  
  214.   appwrite-worker-tasks:
  215.     image: appwrite/appwrite:0.9.1
  216.     entrypoint: worker-tasks
  217.     container_name: appwrite-worker-tasks
  218.     restart: unless-stopped
  219.     networks:
  220.       - appwrite
  221.     depends_on:
  222.       - redis
  223.       - mariadb
  224.     environment:
  225.       - _APP_ENV
  226.       - _APP_OPENSSL_KEY_V1
  227.       - _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
  228.       - _APP_REDIS_HOST
  229.       - _APP_REDIS_PORT
  230.       - _APP_REDIS_USER
  231.       - _APP_REDIS_PASS
  232.       - _APP_DB_HOST
  233.       - _APP_DB_PORT
  234.       - _APP_DB_SCHEMA
  235.       - _APP_DB_USER
  236.       - _APP_DB_PASS
  237.  
  238.   appwrite-worker-deletes:
  239.     image: appwrite/appwrite:0.9.1
  240.     entrypoint: worker-deletes
  241.     container_name: appwrite-worker-deletes
  242.     restart: unless-stopped
  243.     networks:
  244.       - appwrite
  245.     depends_on:
  246.       - redis
  247.       - mariadb
  248.     volumes:
  249.       - appwrite-uploads:/storage/uploads:rw
  250.       - appwrite-cache:/storage/cache:rw
  251.       - appwrite-certificates:/storage/certificates:rw
  252.     environment:
  253.       - _APP_ENV
  254.       - _APP_REDIS_HOST
  255.       - _APP_REDIS_PORT
  256.       - _APP_REDIS_USER
  257.       - _APP_REDIS_PASS
  258.       - _APP_DB_HOST
  259.       - _APP_DB_PORT
  260.       - _APP_DB_SCHEMA
  261.       - _APP_DB_USER
  262.       - _APP_DB_PASS
  263.  
  264.   appwrite-worker-certificates:
  265.     image: appwrite/appwrite:0.9.1
  266.     entrypoint: worker-certificates
  267.     container_name: appwrite-worker-certificates
  268.     restart: unless-stopped
  269.     networks:
  270.       - appwrite
  271.     depends_on:
  272.       - redis
  273.       - mariadb
  274.     volumes:
  275.       - appwrite-config:/storage/config:rw
  276.       - appwrite-certificates:/storage/certificates:rw
  277.     environment:
  278.       - _APP_ENV
  279.       - _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
  280.       - _APP_REDIS_HOST
  281.       - _APP_REDIS_PORT
  282.       - _APP_REDIS_USER
  283.       - _APP_REDIS_PASS
  284.       - _APP_DOMAIN_TARGET
  285.       - _APP_DB_HOST
  286.       - _APP_DB_PORT
  287.       - _APP_DB_SCHEMA
  288.       - _APP_DB_USER
  289.       - _APP_DB_PASS
  290.  
  291.   appwrite-worker-functions:
  292.     image: appwrite/appwrite:0.9.1
  293.     entrypoint: worker-functions
  294.     container_name: appwrite-worker-functions
  295.     restart: unless-stopped
  296.     networks:
  297.       - appwrite
  298.     depends_on:
  299.       - redis
  300.       - mariadb
  301.     volumes:
  302.       - /var/run/user/${UID}/podman/podman.sock:/var/run/docker.sock
  303.       - appwrite-functions:/storage/functions:rw
  304.       - /tmp:/tmp:rw
  305.     environment:
  306.       - _APP_ENV
  307.       - _APP_OPENSSL_KEY_V1
  308.       - _APP_REDIS_HOST
  309.       - _APP_REDIS_PORT
  310.       - _APP_REDIS_USER
  311.       - _APP_REDIS_PASS
  312.       - _APP_DB_HOST
  313.       - _APP_DB_PORT
  314.       - _APP_DB_SCHEMA
  315.       - _APP_DB_USER
  316.       - _APP_DB_PASS
  317.       - _APP_FUNCTIONS_TIMEOUT
  318.       - _APP_FUNCTIONS_CONTAINERS
  319.       - _APP_FUNCTIONS_CPUS
  320.       - _APP_FUNCTIONS_MEMORY
  321.       - _APP_FUNCTIONS_MEMORY_SWAP
  322.       - _APP_FUNCTIONS_RUNTIMES
  323.       - _APP_USAGE_STATS
  324.  
  325.   appwrite-worker-mails:
  326.     image: appwrite/appwrite:0.9.1
  327.     entrypoint: worker-mails
  328.     container_name: appwrite-worker-mails
  329.     restart: unless-stopped
  330.     networks:
  331.       - appwrite
  332.     depends_on:
  333.       - redis
  334.     environment:
  335.       - _APP_ENV
  336.       - _APP_SYSTEM_EMAIL_NAME
  337.       - _APP_SYSTEM_EMAIL_ADDRESS
  338.       - _APP_REDIS_HOST
  339.       - _APP_REDIS_PORT
  340.       - _APP_REDIS_USER
  341.       - _APP_REDIS_PASS
  342.       - _APP_SMTP_HOST
  343.       - _APP_SMTP_PORT
  344.       - _APP_SMTP_SECURE
  345.       - _APP_SMTP_USERNAME
  346.       - _APP_SMTP_PASSWORD
  347.      
  348.   appwrite-maintenance:
  349.     image: appwrite/appwrite:0.9.1
  350.     entrypoint: maintenance
  351.     container_name: appwrite-maintenance
  352.     restart: unless-stopped
  353.     networks:
  354.       - appwrite
  355.     depends_on:
  356.       - redis
  357.     environment:
  358.       - _APP_ENV
  359.       - _APP_REDIS_HOST
  360.       - _APP_REDIS_PORT
  361.       - _APP_REDIS_USER
  362.       - _APP_REDIS_PASS
  363.       - _APP_MAINTENANCE_INTERVAL
  364.       - _APP_MAINTENANCE_RETENTION_EXECUTION
  365.       - _APP_MAINTENANCE_RETENTION_ABUSE
  366.       - _APP_MAINTENANCE_RETENTION_AUDIT
  367.  
  368.  
  369.   appwrite-schedule:
  370.     image: appwrite/appwrite:0.9.1
  371.     entrypoint: schedule
  372.     container_name: appwrite-schedule
  373.     restart: unless-stopped
  374.     networks:
  375.       - appwrite
  376.     depends_on:
  377.       - redis
  378.     environment:
  379.       - _APP_ENV
  380.       - _APP_REDIS_HOST
  381.       - _APP_REDIS_PORT
  382.       - _APP_REDIS_USER
  383.       - _APP_REDIS_PASS
  384.  
  385.   mariadb:
  386.     image: appwrite/mariadb:1.2.0 # fix issues when upgrading using: mysql_upgrade -u root -p
  387.     container_name: appwrite-mariadb
  388.     restart: unless-stopped
  389.     networks:
  390.       - appwrite
  391.     volumes:
  392.       - appwrite-mariadb:/var/lib/mysql:rw
  393.     environment:
  394.       - MYSQL_ROOT_PASSWORD=\${_APP_DB_ROOT_PASS}
  395.       - MYSQL_DATABASE=\${_APP_DB_SCHEMA}
  396.       - MYSQL_USER=\${_APP_DB_USER}
  397.       - MYSQL_PASSWORD=\${_APP_DB_PASS}
  398.     command: 'mysqld --innodb-flush-method=fsync'
  399.  
  400.   redis:
  401.     image: redis:6.0-alpine3.12
  402.     container_name: appwrite-redis
  403.     restart: unless-stopped
  404.     networks:
  405.       - appwrite
  406.     volumes:
  407.       - appwrite-redis:/data:rw
  408.  
  409. #  clamav:
  410. #    image: appwrite/clamav:1.2.0
  411. #    container_name: appwrite-clamav
  412. #    restart: unless-stopped
  413. #    networks:
  414. #      - appwrite
  415. #    volumes:
  416. #      - appwrite-uploads:/storage/uploads
  417.  
  418.   influxdb:
  419.     image: appwrite/influxdb:1.0.0
  420.     container_name: appwrite-influxdb
  421.     restart: unless-stopped
  422.     networks:
  423.       - appwrite
  424.     volumes:
  425.       - appwrite-influxdb:/var/lib/influxdb:rw
  426.  
  427.   telegraf:
  428.     image: appwrite/telegraf:1.2.0
  429.     container_name: appwrite-telegraf
  430.     restart: unless-stopped
  431.     networks:
  432.       - appwrite
  433.     environment:
  434.       - _APP_INFLUXDB_HOST
  435.       - _APP_INFLUXDB_PORT
  436.  
  437. networks:
  438.   gateway:
  439.   appwrite:
  440.  
  441. volumes:
  442.   appwrite-mariadb:
  443.   appwrite-redis:
  444.   appwrite-cache:
  445.   appwrite-uploads:
  446.   appwrite-certificates:
  447.   appwrite-functions:
  448.   appwrite-influxdb:
  449.   appwrite-config:
  450. EOF
  451.  
  452. # Setup CNI rootless
  453.  
  454. cat > rootless-cni-infra << \EOF
  455. #!/bin/sh
  456. set -eu
  457.  
  458. ARG0="$0"
  459. BASE="/run/rootless-cni-infra"
  460.  
  461. wait_unshare_net() {
  462.     pid="$1"
  463.     # NOTE: busybox shell doesn't support the `for ((i=0; i < $MAX; i++)); do foo; done` statement
  464.     i=0
  465.     while :; do
  466.         if [ "$(readlink /proc/self/ns/net)" != "$(readlink /proc/${pid}/ns/net)" ]; then
  467.             break
  468.         fi
  469.         sleep 0.1
  470.         if [ $i -ge 10 ]; then
  471.             echo >&2 "/proc/${pid}/ns/net cannot be unshared"
  472.             exit 1
  473.         fi
  474.         i=$((i + 1))
  475.     done
  476. }
  477.  
  478. # CLI subcommand: "alloc $CONTAINER_ID $NETWORK_NAME $POD_NAME $IP $MAC $CAP_ARGS"
  479. cmd_entrypoint_alloc() {
  480.     if [ "$#" -ne 6 ]; then
  481.         echo >&2 "Usage: $ARG0 alloc CONTAINER_ID NETWORK_NAME POD_NAME IP MAC CAP_ARGS"
  482.         exit 1
  483.     fi
  484.  
  485.     ID="$1"
  486.     NET="$2"
  487.     K8S_POD_NAME="$3"
  488.     IP="$4"
  489.     MAC="$5"
  490.     CAP_ARGS="$6"
  491.  
  492.     dir="${BASE}/${ID}"
  493.     mkdir -p "${dir}/attached" "${dir}/attached-args"
  494.  
  495.     pid=""
  496.     if [ -f "${dir}/pid" ]; then
  497.         pid=$(cat "${dir}/pid")
  498.     else
  499.         unshare -n sleep infinity &
  500.         pid="$!"
  501.         wait_unshare_net "${pid}"
  502.         echo "${pid}" >"${dir}/pid"
  503.         nsenter -t "${pid}" -n ip link set lo up
  504.     fi
  505.     CNI_ARGS="IgnoreUnknown=1;K8S_POD_NAME=${K8S_POD_NAME}"
  506.     if [ "$IP" ]; then
  507.         CNI_ARGS="$CNI_ARGS;IP=${IP}"
  508.     fi
  509.     if [ "$MAC" ]; then
  510.         CNI_ARGS="$CNI_ARGS;MAC=${MAC}"
  511.     fi
  512.     if [ "$CAP_ARGS" ]; then
  513.         CAP_ARGS="$CAP_ARGS"
  514.     fi
  515.     nwcount=$(find "${dir}/attached" -type f | wc -l)
  516.     CNI_IFNAME="eth${nwcount}"
  517.     export CNI_ARGS CNI_IFNAME CAP_ARGS
  518.     cnitool add "${NET}" "/proc/${pid}/ns/net" >"${dir}/attached/${NET}"
  519.     echo "${CNI_ARGS}" >"${dir}/attached-args/${NET}"
  520.  
  521.     # return the result
  522.     ns="/proc/${pid}/ns/net"
  523.     echo "{\"ns\":\"${ns}\"}"
  524. }
  525.  
  526. # CLI subcommand: "dealloc $CONTAINER_ID $NETWORK_NAME"
  527. cmd_entrypoint_dealloc() {
  528.     if [ "$#" -ne 2 ]; then
  529.         echo >&2 "Usage: $ARG0 dealloc CONTAINER_ID NETWORK_NAME"
  530.         exit 1
  531.     fi
  532.  
  533.     ID=$1
  534.     NET=$2
  535.  
  536.     dir="${BASE}/${ID}"
  537.     if [ ! -f "${dir}/pid" ]; then
  538.         exit 0
  539.     fi
  540.     pid=$(cat "${dir}/pid")
  541.     if [ -f "${dir}/attached-args/${NET}" ]; then
  542.         CNI_ARGS=$(cat "${dir}/attached-args/${NET}")
  543.         export CNI_ARGS
  544.     fi
  545.     cnitool del "${NET}" "/proc/${pid}/ns/net"
  546.     rm -f "${dir}/attached/${NET}" "${dir}/attached-args/${NET}"
  547.  
  548.     nwcount=$(find "${dir}/attached" -type f | wc -l)
  549.     if [ "${nwcount}" = 0 ]; then
  550.         kill -9 "${pid}"
  551.         rm -rf "${dir}"
  552.     fi
  553.  
  554.     # return empty json
  555.     echo "{}"
  556. }
  557.  
  558. # CLI subcommand: "is-idle"
  559. cmd_entrypoint_is_idle() {
  560.     if [ ! -d ${BASE} ]; then
  561.         echo '{"idle": true}'
  562.     elif [ -z "$(ls -1 ${BASE})" ]; then
  563.         echo '{"idle": true}'
  564.     else
  565.         echo '{"idle": false}'
  566.     fi
  567. }
  568.  
  569. # CLI subcommand: "print-cni-result $CONTAINER_ID $NETWORK_NAME"
  570. cmd_entrypoint_print_cni_result() {
  571.     if [ "$#" -ne 2 ]; then
  572.         echo >&2 "Usage: $ARG0 print-cni-result CONTAINER_ID NETWORK_NAME"
  573.         exit 1
  574.     fi
  575.  
  576.     ID=$1
  577.     NET=$2
  578.  
  579.     # the result shall be CNI JSON
  580.     cat "${BASE}/${ID}/attached/${NET}"
  581. }
  582.  
  583. # CLI subcommand: "print-netns-path $CONTAINER_ID"
  584. cmd_entrypoint_print_netns_path() {
  585.     if [ "$#" -ne 1 ]; then
  586.         echo >&2 "Usage: $ARG0 print-netns-path CONTAINER_ID"
  587.         exit 1
  588.     fi
  589.  
  590.     ID=$1
  591.  
  592.     pid=$(cat "${BASE}/${ID}/pid")
  593.     path="/proc/${pid}/ns/net"
  594.  
  595.     # return the result
  596.     echo "{\"path\":\"${path}\"}"
  597. }
  598.  
  599. # CLI subcommand: "help"
  600. cmd_entrypoint_help() {
  601.     echo "Usage: ${ARG0} COMMAND"
  602.     echo
  603.     echo "Rootless CNI Infra container"
  604.     echo
  605.     echo "Commands:"
  606.     echo "  alloc             Allocate a netns"
  607.     echo "  dealloc           Deallocate a netns"
  608.     echo "  is-idle           Print whether the infra container is idle"
  609.     echo "  print-cni-result  Print CNI result"
  610.     echo "  print-netns-path  Print netns path"
  611.     echo "  help              Print help"
  612.     echo "  version           Print version"
  613. }
  614.  
  615. # CLI subcommand: "version"
  616. cmd_entrypoint_version() {
  617.     echo "{\"version\": \"${ROOTLESS_CNI_INFRA_VERSION}\"}"
  618. }
  619.  
  620. # parse args
  621. command="${1:-}"
  622. if [ -z "$command" ]; then
  623.     echo >&2 "No command was specified. Run \`${ARG0} help\` to see the usage."
  624.     exit 1
  625. fi
  626.  
  627. command_func=$(echo "cmd_entrypoint_${command}" | sed -e "s/-/_/g")
  628. if ! command -v "${command_func}" >/dev/null 2>&1; then
  629.     echo >&2 "Unknown command: ${command}. Run \`${ARG0} help\` to see the usage."
  630.     exit 1
  631. fi
  632.  
  633. # start the command func
  634. shift
  635. "${command_func}" "$@"
  636. EOF
  637.  
  638. cat >Containerfile<<\EOF
  639. ARG GOLANG_VERSION=1.15
  640. ARG ALPINE_VERSION=3.12
  641. ARG CNI_VERSION=v0.8.0
  642. ARG CNI_PLUGINS_VERSION=v0.8.7
  643. ARG DNSNAME_VERSION=v1.1.1
  644.  
  645. FROM golang:${GOLANG_VERSION}-alpine${ALPINE_VERSION} AS golang-base
  646. RUN apk add --no-cache git
  647.  
  648. FROM golang-base AS cnitool
  649. RUN git clone https://github.com/containernetworking/cni /go/src/github.com/containernetworking/cni
  650. WORKDIR /go/src/github.com/containernetworking/cni
  651. ARG CNI_VERSION
  652. RUN git checkout ${CNI_VERSION}
  653. RUN go build -o /cnitool ./cnitool
  654.  
  655. FROM golang-base AS dnsname
  656. RUN git clone https://github.com/containers/dnsname /go/src/github.com/containers/dnsname
  657. WORKDIR /go/src/github.com/containers/dnsname
  658. ARG DNSNAME_VERSION
  659. RUN git checkout ${DNSNAME_VERSION}
  660. RUN go build -o /dnsname ./plugins/meta/dnsname
  661.  
  662. FROM alpine:${ALPINE_VERSION}
  663. RUN apk add --no-cache curl dnsmasq iptables ip6tables iproute2
  664. ARG TARGETARCH
  665. ARG CNI_PLUGINS_VERSION
  666. RUN mkdir -p /opt/cni/bin && \
  667.     curl -fsSL https://github.com/containernetworking/plugins/releases/download/${CNI_PLUGINS_VERSION}/cni-plugins-linux-${TARGETARCH}-${CNI_PLUGINS_VERSION}.tgz | tar xz -C /opt/cni/bin
  668. COPY --from=cnitool /cnitool /usr/local/bin
  669. COPY --from=dnsname /dnsname /opt/cni/bin
  670. COPY rootless-cni-infra /usr/local/bin
  671. ENV CNI_PATH=/opt/cni/bin
  672. CMD ["sleep", "infinity"]
  673.  
  674. ENV ROOTLESS_CNI_INFRA_VERSION=5
  675. EOF
  676.  
  677.  
Advertisement
Add Comment
Please, Sign In to add comment