diff --git a/README.md b/README.md index 90970e8..0c732c5 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in ## Overview LibrePhotos is a Google Photos-like app. It supports automatic classification of faces, grouping photos by date, location, or objects present, and album creation. -**Shipped version:** 2021-05-31 +**Shipped version:** 2021-06-09 ## Screenshots diff --git a/README_fr.md b/README_fr.md index 27f23cc..d467e6d 100644 --- a/README_fr.md +++ b/README_fr.md @@ -11,7 +11,7 @@ Si vous n'avez pas YunoHost, consultez [le guide](https://yunohost.org/#/install ## Vue d'ensemble LibrePhotos est un sercice inspiré par Google Photos. Il prend en charge la classification des visages, le groupement des photos par date, la localisation géographique, ou objets présents, et la création d'albums. -**Version incluse :** 2021-05-31 +**Version incluse :** 2021-06-09 ## Captures d'écran diff --git a/conf/backend.service b/conf/backend.service index ec0d2f0..79557bc 100644 --- a/conf/backend.service +++ b/conf/backend.service @@ -9,8 +9,10 @@ Requires=postgresql.service User=__APP__ Group=__APP__ EnvironmentFile=__FINALPATH__/librephotos.env -ExecStart=/usr/bin/env bash -c "PATH=__FINALPATH__/backend/venv/bin:$PATH exec __FINALPATH__/bin/librephotos-backend" +ExecStart=/usr/bin/env bash -c "PATH=__PATH_PREFIX__:$PATH gunicorn --worker-class=gevent --timeout 3600 --bind 127.0.0.1:$BACKEND_PORT --log-level=info ownphotos.wsgi" WorkingDirectory=__FINALPATH__/backend +StandardOutput=append:/var/log/__APP__/__APP__-backend.log +StandardError=inherit [Install] WantedBy=multi-user.target diff --git a/conf/backend.src b/conf/backend.src index ecdd88c..86632c8 100644 --- a/conf/backend.src +++ b/conf/backend.src @@ -1,7 +1,7 @@ -SOURCE_URL=https://github.com/LibrePhotos/librephotos/tarball/bd4fabf104ea818a4b8fae61e6e41c08ad89ba16 -SOURCE_SUM=6cd32a2d75173c851aed76b8f045f95b67fafac4be9ff499c498c6ceba843eb2 +SOURCE_URL=https://github.com/LibrePhotos/librephotos/tarball/67ea61a79dadff8772fa2e7915239840e45a630c +SOURCE_SUM=b166abb70d2fe3870c8fedda2f9bd1fac856ce44312572a34272b99b24f1929d SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true -SOURCE_FILENAME=bd4fabf104ea818a4b8fae61e6e41c08ad89ba16 +SOURCE_FILENAME=67ea61a79dadff8772fa2e7915239840e45a630c SOURCE_EXTRACT=true diff --git a/conf/cmake.src b/conf/cmake.src new file mode 100644 index 0000000..b02ef3f --- /dev/null +++ b/conf/cmake.src @@ -0,0 +1,7 @@ +SOURCE_URL=https://github.com/Kitware/CMake/releases/download/v3.20.3/cmake-3.20.3-linux-aarch64.tar.gz +SOURCE_SUM=77620f99e9d5f39cf4a49294c6a68c89a978ecef144894618974b9958efe3c2a +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=tar.gz +SOURCE_IN_SUBDIR=true +SOURCE_FILENAME=cmake-3.20.3-linux-aarch64.tar.gz +SOURCE_EXTRACT=true diff --git a/conf/cmake_amd64.src b/conf/cmake_amd64.src new file mode 100644 index 0000000..904d4b5 --- /dev/null +++ b/conf/cmake_amd64.src @@ -0,0 +1,7 @@ +SOURCE_URL=https://github.com/Kitware/CMake/releases/download/v3.20.3/cmake-3.20.3-linux-x86_64.tar.gz +SOURCE_SUM=97bf730372f9900b2dfb9206fccbcf92f5c7f3b502148b832e77451aa0f9e0e6 +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=tar.gz +SOURCE_IN_SUBDIR=true +SOURCE_FILENAME=cmake-3.20.3-linux-x86_64.tar.gz +SOURCE_EXTRACT=true diff --git a/conf/frontend.service b/conf/frontend.service index 922ac90..dd8a8a9 100644 --- a/conf/frontend.service +++ b/conf/frontend.service @@ -6,8 +6,10 @@ Documentation=https://github.com/LibrePhotos/librephotos User=__APP__ Group=__APP__ EnvironmentFile=__FINALPATH__/librephotos.env -ExecStart=__FINALPATH__/bin/librephotos-frontend +ExecStart=/usr/bin/env bash -c "PATH=__PATH_PREFIX__:$PATH ./node_modules/.bin/serve build -d -l $httpPort" WorkingDirectory=__FINALPATH__/frontend +StandardOutput=append:/var/log/__APP__/__APP__-frontend.log +StandardError=inherit [Install] WantedBy=multi-user.target diff --git a/conf/im2txt.src b/conf/im2txt.src new file mode 100644 index 0000000..4052617 --- /dev/null +++ b/conf/im2txt.src @@ -0,0 +1,7 @@ +SOURCE_URL=https://github.com/LibrePhotos/librephotos-docker/releases/download/0.1/im2txt.tar.gz +SOURCE_SUM=980670c0365c0e32b5fecfc0907bfee4742bcd6a40e0d6ac5692c69bbd49ccc4 +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=tar.gz +SOURCE_IN_SUBDIR=true +SOURCE_FILENAME=im2txt.tar.gz +SOURCE_EXTRACT=true diff --git a/conf/im2txt_data.src b/conf/im2txt_data.src deleted file mode 100644 index ad7f5fb..0000000 --- a/conf/im2txt_data.src +++ /dev/null @@ -1,7 +0,0 @@ -SOURCE_URL=https://s3.eu-central-1.amazonaws.com/ownphotos-deploy/im2txt_data.tar.gz -SOURCE_SUM=2011aa4e7a036458db571fe2583f7b377158ab0b0c3a1dcedefa824dff8b2ee7 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR=true -SOURCE_FILENAME=im2txt_data.tar.gz -SOURCE_EXTRACT=true diff --git a/conf/im2txt_model.src b/conf/im2txt_model.src deleted file mode 100644 index 2995bea..0000000 --- a/conf/im2txt_model.src +++ /dev/null @@ -1,7 +0,0 @@ -SOURCE_URL=https://s3.eu-central-1.amazonaws.com/ownphotos-deploy/im2txt_model.tar.gz -SOURCE_SUM=05015f7819190c1d8d4dea18eebf21fec12c2c5f7eb8b878930faeb465c27d88 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR=true -SOURCE_FILENAME=im2txt_model.tar.gz -SOURCE_EXTRACT=true diff --git a/conf/image-similarity.service b/conf/image-similarity.service index 2536f25..399b1b3 100644 --- a/conf/image-similarity.service +++ b/conf/image-similarity.service @@ -8,8 +8,11 @@ After=network.target User=__APP__ Group=__APP__ EnvironmentFile=__FINALPATH__/librephotos.env -ExecStart=/usr/bin/env bash -c "PATH=__FINALPATH__/backend/venv/bin:$PATH exec __FINALPATH__/bin/librephotos-image-similarity" +ExecStart=/usr/bin/env bash -c "PATH=__PATH_PREFIX__:$PATH python3 image_similarity/main.py" WorkingDirectory=__FINALPATH__/backend +StandardOutput=append:/var/log/__APP__/__APP__-image-similarity.log +StandardError=inherit + [Install] WantedBy=multi-user.target diff --git a/conf/librephotos.env b/conf/librephotos.env index 9f12ab2..8cf2c0f 100644 --- a/conf/librephotos.env +++ b/conf/librephotos.env @@ -27,3 +27,4 @@ BACKEND_PORT=__BACKEND_PORT__ IMAGE_SIMILARITY_SERVER_PORT=__SIMILARITY_PORT__ MPLCONFIGDIR=__DATA_PATH__/matplotlib NODEJS_PATH=__NODEJS_PATH__ +DJANGO_SETTINGS_MODULE=ownphotos.settings \ No newline at end of file diff --git a/conf/linux.src b/conf/linux.src deleted file mode 100644 index 187377c..0000000 --- a/conf/linux.src +++ /dev/null @@ -1,7 +0,0 @@ -SOURCE_URL=https://github.com/LibrePhotos/librephotos-linux/tarball/3891c65924dc49d87aea0bc9b79448e9d56cd954 -SOURCE_SUM=1c6b4e9b12f3bea6e298494ad7880483190b4deefb006c9c8d22f840dad2e1ba -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR=true -SOURCE_FILENAME=3891c65924dc49d87aea0bc9b79448e9d56cd954 -SOURCE_EXTRACT=true diff --git a/conf/places365.src b/conf/places365.src new file mode 100644 index 0000000..5e4bebb --- /dev/null +++ b/conf/places365.src @@ -0,0 +1,7 @@ +SOURCE_URL=https://github.com/LibrePhotos/librephotos-docker/releases/download/0.1/places365.tar.gz +SOURCE_SUM=27792ffcd1f6a4de7abebdea046dda0916f9cd12eba7bed7b5f51f120f91f0d8 +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=tar.gz +SOURCE_IN_SUBDIR=true +SOURCE_FILENAME=places365.tar.gz +SOURCE_EXTRACT=true diff --git a/conf/places365_model.src b/conf/places365_model.src deleted file mode 100644 index 2c24136..0000000 --- a/conf/places365_model.src +++ /dev/null @@ -1,7 +0,0 @@ -SOURCE_URL=https://s3.eu-central-1.amazonaws.com/ownphotos-deploy/places365_model.tar.gz -SOURCE_SUM=2ded264e09efb6af4bf21c341edc359de60b646b7529d61428882a563b9dfad1 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR=true -SOURCE_FILENAME=places365_model.tar.gz -SOURCE_EXTRACT=true diff --git a/conf/worker.service b/conf/worker.service index 859a0f6..6793f7d 100644 --- a/conf/worker.service +++ b/conf/worker.service @@ -9,8 +9,10 @@ Requires=postgresql.service User=__APP__ Group=__APP__ EnvironmentFile=__FINALPATH__/librephotos.env -ExecStart=/usr/bin/env bash -c "PATH=__FINALPATH__/backend/venv/bin:$PATH exec __FINALPATH__/bin/librephotos-worker" +ExecStart=/usr/bin/env bash -c "PATH=__PATH_PREFIX__:$PATH python manage.py rqworker default" WorkingDirectory=__FINALPATH__/backend +StandardOutput=append:/var/log/__APP__/__APP__-worker.log +StandardError=inherit [Install] WantedBy=multi-user.target diff --git a/hooks/post_user_create b/hooks/post_user_create index 6627db0..48adf17 100644 --- a/hooks/post_user_create +++ b/hooks/post_user_create @@ -3,13 +3,27 @@ set -a source /usr/share/yunohost/helpers app="${0//.\/50-}" -username=$1 +user=$1 mail=$2 -final_path=$(ynh_app_setting_get --app=$app --key=final_path) +arch="$(dpkg --print-architecture)" +arm64_test=1 -pushd $final_path/backend - sudo -u $app $final_path/bin/librephotos-cli shell <<< " +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +backend_path="$final_path/backend" +path_prefix="$backend_path/venv/bin" +if [ "$arch" = "arm64" ] || [ "$arm64_test" -eq 1 ]; then + export CONDA_DIR="$backend_path/conda" + path_prefix="$backend_path/cmake/bin:$CONDA_DIR/condabin:$CONDA_DIR/bin:$path_prefix" +fi + +pushd "$backend_path" + sudo -u $app bash -c " + set -a + export PATH=\"$path_prefix:"'$PATH'"\" + source \"$final_path\"/librephotos.env + python3 manage.py shell + " <<< " from django.contrib.auth import get_user_model User = get_user_model() try: @@ -18,6 +32,6 @@ try: user.is_active = True user.save() except User.DoesNotExist: - User.objects.create_user('$username', email='$mail', scan_directory='/home/yunohost.multimedia/$user/Picture') + User.objects.create_user('$user', email='$mail', scan_directory='/home/yunohost.multimedia/$user/Picture') " 2>&1 popd diff --git a/hooks/post_user_delete b/hooks/post_user_delete index a4bd9dc..57f54fe 100644 --- a/hooks/post_user_delete +++ b/hooks/post_user_delete @@ -3,13 +3,27 @@ set -a source /usr/share/yunohost/helpers app="${0//.\/50-}" -username=$1 +user=$1 purge=$2 -final_path=$(ynh_app_setting_get --app=$app --key=final_path) +arch="$(dpkg --print-architecture)" +arm64_test=1 -pushd $final_path/backend - sudo -u $app $final_path/bin/librephotos-cli shell <<< " +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +backend_path="$final_path/backend" +path_prefix="$backend_path/venv/bin" +if [ "$arch" = "arm64" ] || [ "$arm64_test" -eq 1 ]; then + export CONDA_DIR="$backend_path/conda" + path_prefix="$backend_path/cmake/bin:$CONDA_DIR/condabin:$CONDA_DIR/bin:$path_prefix" +fi + +pushd "$backend_path" + sudo -u $app bash -c " + set -a + export PATH=\"$path_prefix:"'$PATH'"\" + source \"$final_path\"/librephotos.env + python3 manage.py shell + " <<< " from django.contrib.auth import get_user_model User = get_user_model() try: diff --git a/manifest.json b/manifest.json index d983323..13a4565 100644 --- a/manifest.json +++ b/manifest.json @@ -6,8 +6,16 @@ "en": "A photo viewer and manager similar to Google Photos", "fr": "Un gestionnaire de photos semblable à Google Photos" }, - "version": "0.0.20210531~ynh1", + "version": "0.0.20210609~ynh1", "url": "https://github.com/LibrePhotos/librephotos", + "upstream": { + "license": "MIT", + "website": "https://librephotos.com/", + "demo": "https://demo2.librephotos.com/ (user: demo, password: demo1234)", + "admindoc": "https://docs.librephotos.com/", + "userdoc": "https://github.com/LibrePhotos/librephotos", + "code": "https://github.com/LibrePhotos/librephotos" + }, "license": "MIT", "maintainer": { "name": "Jules Bertholet", @@ -45,7 +53,7 @@ "default": false, "ask": { "en": "Allow write access to multimedia directories?", - "fr": "Autorizer la modification des fichiers dans les dossiers multimédia ?" + "fr": "Autoriser la modification des fichiers dans les dossiers multimédia ?" } } ] diff --git a/scripts/_common.sh b/scripts/_common.sh index ceebce7..585c024 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -5,9 +5,10 @@ #================================================= # dependencies used by the app -pkg_dependencies="unzip ca-certificates swig libpq-dev postgresql postgresql-contrib postgresql-common ffmpeg libimage-exiftool-perl curl libopenblas-dev libmagic1 libboost-all-dev libxrender-dev liblapack-dev git bzip2 cmake build-essential libsm6 libglib2.0-0 libgl1-mesa-glx gfortran gunicorn libheif-dev libssl-dev rustc liblzma-dev python3 python3-pip python3-venv imagemagick xsel nodejs npm redis-server libmagickwand-dev libldap2-dev libsasl2-dev ufraw-batch" +pkg_dependencies="libtinfo5 unzip ca-certificates swig libpq-dev postgresql postgresql-contrib postgresql-common ffmpeg libimage-exiftool-perl curl libopenblas-dev libmagic1 libboost-all-dev libxrender-dev liblapack-dev git bzip2 cmake build-essential libsm6 libglib2.0-0 libgl1-mesa-glx gfortran gunicorn libheif-dev libssl-dev rustc liblzma-dev python3 python3-pip python3-venv imagemagick xsel nodejs npm redis-server libmagickwand-dev libldap2-dev libsasl2-dev ufraw-batch" arch="$(dpkg --print-architecture)" +arm64_test=1 #================================================= # PERSONAL HELPERS @@ -16,9 +17,8 @@ arch="$(dpkg --print-architecture)" function unpack_source { ynh_secure_remove "$final_path" mkdir -p "$final_path/data_models/"{places365,im2txt} - ynh_setup_source --source_id="places365_model" --dest_dir="$final_path/data_models/places365/model/" - ynh_setup_source --source_id="im2txt_model" --dest_dir="$final_path/data_models/im2txt/model/" - ynh_setup_source --source_id="im2txt_data" --dest_dir="$final_path/data_models/im2txt/data/" + ynh_setup_source --source_id="places365" --dest_dir="$final_path/data_models/places365/" + ynh_setup_source --source_id="im2txt" --dest_dir="$final_path/data_models/im2txt/" mkdir -p "$data_path" ln -sf "$final_path/data_models" "$data_path/data_models" mkdir -p "$data_path/protected_media/"{thumbnails_big,square_thumbnails,square_thumbnails_small,faces} @@ -30,39 +30,43 @@ function unpack_source { ynh_setup_source --source_id="backend" --dest_dir="$final_path/backend/" ynh_setup_source --source_id="frontend" --dest_dir="$final_path/frontend/" - ynh_setup_source --source_id="linux" --dest_dir="$final_path/linux/" ynh_setup_source --source_id="dlib" --dest_dir="$final_path/backend/dlib/" - if [ "$arch" = "aarch64" ]; then + if [ "$arch" = "arm64" ] || [ "$arm64_test" -eq 1 ]; then export CONDA_DIR="$final_path/backend/conda" mkdir -p "$CONDA_DIR" - ynh_setup_source --source_id="miniforge3" --dest_dir="$CONDA_DIR" - ynh_setup_source --source_id="faiss" --dest_dir="$final_path/backend/faiss/" + if [ "$arch" = "arm64" ]; then + ynh_setup_source --source_id="miniforge3" --dest_dir="$CONDA_DIR" + ynh_setup_source --source_id="cmake" --dest_dir="$final_path/backend/cmake/" + else + wget -O "${CONDA_DIR}/Miniforge3-4.10.1-4-Linux-aarch64.sh" https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh 2>&1 + ynh_setup_source --source_id="cmake_amd64" --dest_dir="$final_path/backend/cmake/" + fi + ynh_setup_source --source_id="faiss" --dest_dir="$final_path/backend/faiss/" fi - mkdir -p "$final_path/bin" - mv -f "$final_path/linux/ressources/bin/"* "$final_path/bin" - ynh_secure_remove --file="$final_path/linux" mkdir -p "/var/log/$app" } -function set_up_virtualenv { +function set_up_backend { backend_path="$final_path/backend" pushd "$backend_path" chown -R $app:$app "$backend_path" sudo -u $app python3 -m venv $backend_path/venv - local python_path="$backend_path/venv/bin:$(sudo -u $app bash -c 'echo $PATH')" + path_prefix="$backend_path/venv/bin" + if [ "$arch" = "arm64" ] || [ "$arm64_test" -eq 1 ]; then + path_prefix="$backend_path/cmake/bin:$CONDA_DIR/condabin:$CONDA_DIR/bin:$path_prefix" + fi + local python_path="$path_prefix:$(sudo -u $app bash -c 'echo $PATH')" local cache_dir="$backend_path/.cache/pip" sudo -u $app env "PATH=$python_path" pip --cache-dir "$cache_dir" install -U wheel pip setuptools 2>&1 - if [ "$arch" = "aarch64" ]; then - sudo -u $app "$pip" --cache-dir "$cache_dir" install -U torch==1.8.0 torchvision==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html 2>&1 || sudo -u $app "$pip" --cache-dir "$cache_dir" install -U torch==1.8.0 torchvision==0.9.0 -f https://torch.maku.ml/whl/stable.html 2>&1 - sudo -u $app env "CONDA_DIR=$CONDA_DIR" bash "${CONDA_DIR}/Miniforge3-4.10.1-4-Linux-aarch64.sh" -b -p "${CONDA_DIR}" - local conda="$CONDA_DIR/condabin/conda" - python_path="$CONDA_DIR/condabin:$CONDA_DIR/bin:$python_path" + if [ "$arch" = "arm64" ] || [ "$arm64_test" -eq 1 ]; then + sudo -u $app env "CONDA_DIR=$CONDA_DIR" bash "${CONDA_DIR}/Miniforge3-4.10.1-4-Linux-aarch64.sh" -bu -p "${CONDA_DIR}" + sudo -u $app env "PATH=$python_path" pip --cache-dir "$cache_dir" install -U torch==1.8.0 torchvision==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html 2>&1 sudo -u $app env "PATH=$python_path" conda install -y numpy psycopg2 cython pandas scikit-learn=0.24.1 scikit-image=0.18.1 spacy=2.3.5 gevent=20.12.1 matplotlib=3.3.2 pushd "$backend_path/faiss" - sudo -u $app cmake -B build . - sudo -u $app make -C build -j faiss - sudo -u $app make -C build -j swigfaiss + sudo -u $app env "PATH=$python_path" cmake -B build . -DFAISS_ENABLE_GPU=OFF -DFAISS_ENABLE_PYTHON=ON -DFAISS_OPT_LEVEL=generic + sudo -u $app env "PATH=$python_path" make -C build -j faiss + sudo -u $app env "PATH=$python_path" make -C build -j swigfaiss cd "build/faiss/python" sudo -u $app env "PATH=$python_path" python setup.py install popd @@ -74,7 +78,7 @@ function set_up_virtualenv { sed -i "s/Pillow==8.1.0/Pillow>=8.1.2/" "$backend_path/requirements.txt" sed -i "/faiss-cpu==1.7.0/d" "$backend_path/requirements.txt" else - sudo -u $app env "PATH=$python_path" pip --cache-dir "$cache_dir" install -U torch==1.8.0+cpu torchvision==0.9.0+cpu -f https://download.pytorch.org/whl/torch_stable.html 2>&1 || sudo -u $app "$pip" --cache-dir "$cache_dir" install -U torch==1.8.0 torchvision==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html 2>&1 + sudo -u $app env "PATH=$python_path" pip --cache-dir "$cache_dir" install -U torch==1.8.0+cpu torchvision==0.9.0+cpu -f https://download.pytorch.org/whl/torch_stable.html 2>&1 fi pushd "$backend_path/dlib" sudo -u $app env "PATH=$python_path" python setup.py install 2>&1 @@ -82,9 +86,9 @@ function set_up_virtualenv { sudo -u $app env "PATH=$python_path" pip --cache-dir "$cache_dir" install -U --requirement "$backend_path/requirements.txt" 2>&1 sudo -u $app env "PATH=$python_path" pip --cache-dir "$cache_dir" install -U --requirement "$backend_path/requirements-ynh.txt" 2>&1 sudo -u $app env "PATH=$python_path" python -m spacy download en_core_web_sm 2>&1 - if [ "$arch" = "aarch64" ]; then - unzip "$CONDA_DIR/lib/python3.8/site-packages/"faiss*.egg -d "$CONDA_DIR/lib/python3.8/site-packages/" - fi + #if [ "$arch" = "arm64" ] || [ "$arm64_test" -eq 1 ]; then + #sudo -u $app unzip "$CONDA_DIR/lib/python3.8/site-packages/"faiss*.egg -d "$CONDA_DIR/lib/python3.8/site-packages/" + #fi chown -R root:root "$backend_path" popd } @@ -124,27 +128,22 @@ function add_configuations { fi ynh_add_config --template="librephotos.env" --destination="$final_path/librephotos.env" +} - for file in $final_path/bin/*; do - ynh_replace_string -m '#!/usr/bin/env bash' -r "#!/usr/bin/env bash\nsource $final_path/librephotos.env" -f $file - echo "$(uniq $file)" > $file - ynh_replace_string -m "source $final_path/librephotos.env" -r "source $final_path/librephotos.env\nexport PATH=\$NODEJS_PATH:\$PATH" -f $file - echo "$(uniq $file)" > $file - ynh_replace_string -m "/usr/lib/librephotos" -r "$final_path" -f $file - ynh_replace_string -m 3000 -r '$httpPort' -f $file - ynh_replace_string -m 8001 -r '$BACKEND_PORT' -f $file - ynh_replace_string -m 8002 -r '$IMAGE_SIMILARITY_SERVER_PORT' -f $file - ynh_replace_string -m "/etc/librephotos" -r $final_path -f $file - ynh_replace_string -m "librephotos-backend.env" -r "librephotos.env" -f $file - ynh_replace_special_string -m 'su - -s $(which bash) librephotos << EOF' -r '' -f $file - ynh_replace_special_string -m 'EOF' -r '' -f $file - ynh_replace_string -m "python3" -r "$backend_path/venv/bin/python3" -f $file - ynh_replace_string -m "gunicorn --workers" -r "$backend_path/venv/bin/gunicorn --workers" -f $file - ynh_replace_string -m "$backend_path/venv/bin/$backend_path/venv/bin/python" -r "$backend_path/venv/bin/python" -f $file - ynh_replace_string -m "$backend_path/venv/bin/$backend_path/venv/bin/gunicorn --workers" -r "$backend_path/venv/bin/gunicorn --workers" -f $file - ynh_replace_string -m 'npm install' -r " " -f $file - ynh_replace_string -m 'npm' -r "yarn" -f $file - done +function upgrade_db { + pushd "$final_path/backend" + chown -R $app:$app "$final_path/backend" + chown -R $app:$app "/var/log/$app" + sudo -u $app bash -c " + set -a + export PATH=\"$path_prefix:"'$PATH'"\" + source \"$final_path\"/librephotos.env + python3 manage.py showmigrations + python3 manage.py migrate + python3 manage.py showmigrations + " 2>&1 + popd + set_permissions } function set_permissions { diff --git a/scripts/install b/scripts/install index 4ba6ebb..8603703 100755 --- a/scripts/install +++ b/scripts/install @@ -115,11 +115,11 @@ ynh_system_user_create --username=$app --home_dir=$data_path #================================================= # SPECIFIC SETUP #================================================= -# SET UP VIRTUALENV +# SET UP BACKEND #================================================= -ynh_script_progression --message="Initializing backend Python virtualenv..." --weight=60 +ynh_script_progression --message="Setting up backend..." --weight=60 -set_up_virtualenv +set_up_backend #================================================= # SET UP FRONTEND @@ -151,26 +151,35 @@ add_configuations #================================================= ynh_script_progression --message="Finalizing database..." --weight=1 -pushd $final_path || ynh_die - chown -R $app:$app $final_path - chown -R $app:$app /var/log/$app - sudo -u $app $final_path/bin/librephotos-upgrade 2>&1 - sudo -u $app $final_path/bin/librephotos-createadmin "$admin" "$(ynh_user_get_info $admin 'mail')" $(ynh_string_random -l 64) 2>&1 - for username in $(ynh_user_list); do - user_email=$(ynh_user_get_info --username="$username" --key=mail) - sudo -u $app $final_path/bin/librephotos-cli shell <<< " +upgrade_db + +pushd "$final_path/backend" + admin_mail="$(ynh_user_get_info $admin 'mail')" + sudo -u $app bash -c " + set -a + export PATH=\"$path_prefix:"'$PATH'"\" + source \"$final_path\"/librephotos.env + python3 manage.py createsuperuser --noinput --username \"$admin\" --email \"$admin_mail\" + " 2>&1 + for user in $(ynh_user_list); do + mail=$(ynh_user_get_info --username="$user" --key=mail) + sudo -u $app bash -c " + set -a + export PATH=\"$path_prefix:"'$PATH'"\" + source \"$final_path\"/librephotos.env + python3 manage.py shell + " <<< " from django.contrib.auth import get_user_model User = get_user_model() try: - user = User.objects.get(username='$username') - user.scan_directory='/home/yunohost.multimedia/$username/Picture' + user = User.objects.get(username='$user') + user.scan_directory='/home/yunohost.multimedia/$user/Picture' user.save() except User.DoesNotExist: - User.objects.create_user('$username', email='$user_email', scan_directory='/home/yunohost.multimedia/$username/Picture') + User.objects.create_user('$user', email='$mail', scan_directory='/home/yunohost.multimedia/$user/Picture') " 2>&1 done - chown -R root:root $final_path -popd || ynh_die +popd #================================================= # YUNOHOST MULTIMEDIA INTEGRATION diff --git a/scripts/upgrade b/scripts/upgrade index fb99640..a3f83a3 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -109,11 +109,11 @@ ynh_system_user_create --username=$app --home_dir=$data_path #================================================= # SPECIFIC UPGRADE #================================================= -# SET UP VIRTUALENV +# SET UP BACKEND #================================================= -ynh_script_progression --message="Upgrading Python virtualenv..." --weight=50 +ynh_script_progression --message="Setting up backend..." --weight=50 -set_up_virtualenv +set_up_backend #================================================= # SET UP FRONTEND @@ -145,12 +145,7 @@ add_configuations #================================================= ynh_script_progression --message="Finalizing database..." --weight=1 -pushd $final_path || ynh_die - chown -R $app:$app $final_path - chown -R $app:$app /var/log/$app - sudo -u $app $final_path/bin/librephotos-upgrade 2>&1 - chown -R root:root $final_path -popd || ynh_die +upgrade_db #================================================= # YUNOHOST MULTIMEDIA INTEGRATION