entrypoint.sh 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/bin/bash
  2. set -Eeuo pipefail
  3. # TODO: move all mkdir -p ?
  4. mkdir -p /data/config/auto/scripts/
  5. # mount scripts individually
  6. echo $ROOT
  7. ls -lha $ROOT
  8. find "${ROOT}/scripts/" -maxdepth 1 -type l -delete
  9. cp -vrfTs /data/config/auto/scripts/ "${ROOT}/scripts/"
  10. # Set up config file
  11. python /docker/config.py /data/config/auto/config.json
  12. if [ ! -f /data/config/auto/ui-config.json ]; then
  13. echo '{}' >/data/config/auto/ui-config.json
  14. fi
  15. if [ ! -f /data/config/auto/styles.csv ]; then
  16. touch /data/config/auto/styles.csv
  17. fi
  18. # copy models from original models folder
  19. mkdir -p /data/models/VAE-approx/ /data/models/karlo/
  20. rsync -a --info=NAME ${ROOT}/models/VAE-approx/ /data/models/VAE-approx/
  21. rsync -a --info=NAME ${ROOT}/models/karlo/ /data/models/karlo/
  22. declare -A MOUNTS
  23. MOUNTS["/root/.cache"]="/data/.cache"
  24. MOUNTS["${ROOT}/models"]="/data/models"
  25. MOUNTS["${ROOT}/embeddings"]="/data/embeddings"
  26. MOUNTS["${ROOT}/config.json"]="/data/config/auto/config.json"
  27. MOUNTS["${ROOT}/ui-config.json"]="/data/config/auto/ui-config.json"
  28. MOUNTS["${ROOT}/styles.csv"]="/data/config/auto/styles.csv"
  29. MOUNTS["${ROOT}/extensions"]="/data/config/auto/extensions"
  30. MOUNTS["${ROOT}/config_states"]="/data/config/auto/config_states"
  31. # extra hacks
  32. MOUNTS["${ROOT}/repositories/CodeFormer/weights/facelib"]="/data/.cache"
  33. for to_path in "${!MOUNTS[@]}"; do
  34. set -Eeuo pipefail
  35. from_path="${MOUNTS[${to_path}]}"
  36. rm -rf "${to_path}"
  37. if [ ! -f "$from_path" ]; then
  38. mkdir -vp "$from_path"
  39. fi
  40. mkdir -vp "$(dirname "${to_path}")"
  41. ln -sT "${from_path}" "${to_path}"
  42. echo Mounted $(basename "${from_path}")
  43. done
  44. echo "Installing extension dependencies (if any)"
  45. # because we build our container as root:
  46. chown -R root ~/.cache/
  47. chmod 766 ~/.cache/
  48. shopt -s nullglob
  49. # For install.py, please refer to https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Developing-extensions#installpy
  50. list=(./extensions/*/install.py)
  51. for installscript in "${list[@]}"; do
  52. EXTNAME=$(echo $installscript | cut -d '/' -f 3)
  53. # Skip installing dependencies if extension is disabled in config
  54. if $(jq -e ".disabled_extensions|any(. == \"$EXTNAME\")" config.json); then
  55. echo "Skipping disabled extension ($EXTNAME)"
  56. continue
  57. fi
  58. PYTHONPATH=${ROOT} python "$installscript"
  59. done
  60. if [ -f "/data/config/auto/startup.sh" ]; then
  61. pushd ${ROOT}
  62. echo "Running startup script"
  63. . /data/config/auto/startup.sh
  64. popd
  65. fi
  66. exec "$@"