diff --git a/TODO b/TODO index 0e2d6b3..a51709d 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,5 @@ * user's home dirs, in replacement of "My Files" -* Put common files in /home/yunohost.app -* specific php-fpm with output_buffering OFF, higher upload limit, ... * upgrade script +* perf improvements + * https://pyd.io/administrator/enriching-your-users-experience/tuning-server-performances-apc-powerfs-xsendfile/ + * https://pyd.io/administrator/enriching-your-users-experience/websocket-server-activation/ \ No newline at end of file diff --git a/conf/bootstrap_repositories.php b/conf/bootstrap_repositories.php new file mode 100644 index 0000000..ec2554d --- /dev/null +++ b/conf/bootstrap_repositories.php @@ -0,0 +1,178 @@ + + * This file is part of Pydio. + * + * Pydio is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pydio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pydio. If not, see . + * + * The latest code can be found at . + * + * Description : configuration file + * BASIC REPOSITORY CONFIGURATION. + * The standard repository will point to the data path (ajaxplorer/data by default), folder "files" + * Use the GUI to add new repositories. + * + Log in as "admin" and open the "Settings" Repository + */ +defined('AJXP_EXEC') or die( 'Access not allowed'); + +$REPOSITORIES[0] = array( + "DISPLAY" => "Default Files", + "DISPLAY_ID" => 430, + "DESCRIPTION_ID"=> 475, + "AJXP_SLUG" => "default", + "DRIVER" => "fs", + "DRIVER_OPTIONS"=> array( + "PATH" => "AJXP_DATA_PATH/common_files", + "CREATE" => true, + "RECYCLE_BIN" => '.pydio_recycle_bin', + "CHMOD_VALUE" => '0600', + "DEFAULT_RIGHTS"=> "", + "PAGINATION_THRESHOLD" => 500, + "PAGINATION_NUMBER" => 200, + "META_SOURCES" => array( + "metastore.serial"=> array( + "METADATA_FILE" => ".ajxp_meta", + "METADATA_FILE_LOCATION" => "infolders" + ), + "meta.user" => array( + "meta_fields" => "tags", + "meta_labels" => "Tags", + "meta_visibility" => "hidden" + ), + "meta.filehasher" => array(), + "meta.watch" => array(), + "meta.syncable" => array(), + "meta.exif" => array( + "meta_fields" => "COMPUTED_GPS.GPS_Latitude,COMPUTED_GPS.GPS_Longitude", + "meta_labels" => "Latitude,Longitude" + ), + "index.lucene" => array( + "index_meta_fields" => "tags" + ), + ) + ), + +); + +$REPOSITORIES[1] = array( + "DISPLAY" => "My Files", + "DISPLAY_ID" => 432, + "DESCRIPTION_ID"=> 476, + "AJXP_SLUG" => "my-files", + "DRIVER" => "fs", + "DRIVER_OPTIONS"=> array( + "PATH" => "/home/AJXP_USER", + "CREATE" => true, + "RECYCLE_BIN" => '.pydio_recycle_bin', + "CHMOD_VALUE" => '0600', + "DEFAULT_RIGHTS"=> "rw", + "PAGINATION_THRESHOLD" => 500, + "PAGINATION_NUMBER" => 200, + "META_SOURCES" => array( + "metastore.serial"=> array( + "METADATA_FILE" => ".ajxp_meta", + "METADATA_FILE_LOCATION" => "infolders" + ), + "meta.user" => array( + "meta_fields" => "tags", + "meta_labels" => "Tags", + "meta_visibility" => "hidden" + ), + "meta.filehasher" => array(), + "meta.watch" => array(), + "meta.syncable" => array(), + "meta.exif" => array( + "meta_fields" => "COMPUTED_GPS.GPS_Latitude,COMPUTED_GPS.GPS_Longitude", + "meta_labels" => "Latitude,Longitude" + ), + "index.lucene" => array( + "index_meta_fields" => "tags", + "repository_specific_keywords" => "AJXP_USER", + ) + ) + ), + +); + +// DO NOT REMOVE THIS! +// USER DASHBOARD +$REPOSITORIES["ajxp_user"] = array( + "DISPLAY" => "My Dashboard", + "AJXP_SLUG" => "dashboard", + "DISPLAY_ID" => "user_dash.title", + "DESCRIPTION_ID" => "user_dash.desc", + "DRIVER" => "ajxp_user", + "DRIVER_OPTIONS" => array( + "DEFAULT_RIGHTS" => "rw" + ) +); + +$REPOSITORIES["ajxp_home"] = array( + "DISPLAY" => "Welcome", + "AJXP_SLUG" => "welcome", + "DISPLAY_ID" => "user_home.title", + "DESCRIPTION_ID" => "user_home.desc", + "DRIVER" => "ajxp_home", + "DRIVER_OPTIONS" => array( + "DEFAULT_RIGHTS" => "rw" + ) +); + +// ADMIN REPOSITORY +$REPOSITORIES["ajxp_conf"] = array( + "DISPLAY" => "Settings", + "AJXP_SLUG" => "settings", + "DISPLAY_ID" => "165", + "DESCRIPTION_ID" => "506", + "DRIVER" => "ajxp_conf", + "DRIVER_OPTIONS" => array() +); + +$REPOSITORIES["fs_template"] = array( + "DISPLAY" => "Sample Template", + "DISPLAY_ID" => 431, + "IS_TEMPLATE" => true, + "DRIVER" => "fs", + "DRIVER_OPTIONS"=> array( + "CREATE" => true, + "RECYCLE_BIN" => 'recycle_bin', + "CHMOD_VALUE" => '0600', + "PAGINATION_THRESHOLD" => 500, + "PAGINATION_NUMBER" => 200, + "PURGE_AFTER" => 0, + "CHARSET" => "", + "META_SOURCES" => array( + "metastore.serial"=> array( + "METADATA_FILE" => ".ajxp_meta", + "METADATA_FILE_LOCATION" => "infolders" + ), + "meta.user" => array( + "meta_fields" => "tags", + "meta_labels" => "Tags", + "meta_visibility" => "hidden" + ), + "meta.filehasher" => array(), + "meta.watch" => array(), + "meta.syncable" => array(), + "meta.exif" => array( + "meta_fields" => "COMPUTED_GPS.GPS_Latitude,COMPUTED_GPS.GPS_Longitude", + "meta_labels" => "Latitude,Longitude" + ), + "index.lucene" => array( + "index_meta_fields" => "tags" + ) + ) + ), + +); diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf index 0f170c3..c5338fe 100644 --- a/conf/php-fpm.conf +++ b/conf/php-fpm.conf @@ -1,6 +1,6 @@ -; Start a new pool named 'www'. +; Start a new pool named 'NAMETOCHANGE'. ; the variable $pool can we used in any directive and will be replaced by the -; pool name ('www' here) +; pool name ('NAMETOCHANGE' here) [NAMETOCHANGE] ; Per pool prefix @@ -80,7 +80,7 @@ pm = dynamic ; CGI. ; Note: Used when pm is set to either 'static' or 'dynamic' ; Note: This value is mandatory. -pm.max_children = 6 +pm.max_children = 15 ; The number of child processes created on startup. ; Note: Used only when pm is set to 'dynamic' diff --git a/conf/php-fpm.ini b/conf/php-fpm.ini index cf9ab92..bc9bafe 100644 --- a/conf/php-fpm.ini +++ b/conf/php-fpm.ini @@ -1,3 +1,3 @@ upload_max_filesize=10G post_max_size=10G -output_buffering=Off \ No newline at end of file +output_buffering=off \ No newline at end of file diff --git a/hooks/post_user_create b/hooks/post_user_create new file mode 100644 index 0000000..77a77c0 --- /dev/null +++ b/hooks/post_user_create @@ -0,0 +1,4 @@ +#!/bin/bash + +user=$1 +sudo setfacl -m g:pydio:rwx /home/$user diff --git a/scripts/install b/scripts/install index c18ff26..4e54478 100644 --- a/scripts/install +++ b/scripts/install @@ -18,6 +18,9 @@ if [[ ! $? -eq 0 ]]; then exit 1 fi +# Install dependencies +sudo apt-get install acl -y -qq + mkdir ../upstream version=$(cat version) wget -O ../upstream/pydio-core.tar.gz http://sourceforge.net/projects/ajaxplorer/files/pydio/dev-channel/$version/pydio-core-$version.tar.gz @@ -34,6 +37,7 @@ sudo mkdir -p $final_path sudo cp -ar ../upstream/pydio-core-$version/* $final_path sudo mkdir -p $data_path +sudo mv $final_path/data $data_path # Database db_pwd=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d '[A-Za-z0-9]' | sed -n 's/\(.\{24\}\).*/\1/p') @@ -41,19 +45,23 @@ db_user=pydio sudo yunohost app initdb $db_user -p $db_pwd -s $(readlink -e ../conf/create.mysql) sudo yunohost app setting pydio mysqlpwd -v $db_pwd +sudo cp ../conf/bootstrap_context.php $final_path/conf +sudo cp ../conf/bootstrap_repositories.php $final_path/conf + sed -i "s@YNH_MYSQL_PWD@$db_pwd@g" ../conf/bootstrap.json sed -i "s@YNH_ADMIN@$admin@g" ../conf/bootstrap.json -sudo mkdir -p $final_path/data/plugins/boot.conf -sudo cp ../conf/bootstrap.json $final_path/data/plugins/boot.conf/bootstrap.json +sudo mkdir -p $data_path/data/plugins/boot.conf +sudo cp ../conf/bootstrap.json $data_path/data/plugins/boot.conf/bootstrap.json sudo yunohost app setting pydio admin -v $admin -sudo cp ../conf/bootstrap_context.php $final_path/conf +sudo touch $data_path/data/cache/admin_counted +sudo touch $data_path/data/cache/first_run_passed +sudo touch $data_path/data/cache/diag_result.php -sudo touch $final_path/data/cache/admin_counted -sudo touch $final_path/data/cache/first_run_passed -sudo touch $final_path/data/cache/diag_result.php - -sudo mv $final_path/data $data_path +# let's rename the "Common Files" repository mount to common_files +# also, "files" mount is useless now since we map to /home/AJXP_USER directly +sudo mkdir -p $data_path/data/common_files +sudo rm -rf $data_path/data/{files,personal} # Fix up permissions sudo chown -R root: $final_path @@ -64,16 +72,26 @@ sudo chown -R pydio:pydio $data_path sudo find $data_path/data -type f -exec chmod 660 {} \; sudo find $data_path/data -type d -exec chmod 770 {} \; +# Allow pydio to access user's home +for i in $(ls /home) +do + sudo yunohost user list --json | grep -q "\"username\": \"$i\"" + if [[ $? -eq 0 ]]; + then + sudo setfacl -m g:pydio:rwx /home/$i + fi +done + sed -i "s@NAMETOCHANGE@pydio@g" ../conf/php-fpm.conf finalphpconf=/etc/php5/fpm/pool.d/pydio.conf sudo cp ../conf/php-fpm.conf $finalphpconf sudo chown root: $finalphpconf sudo chmod 644 $finalphpconf -finalphpini=/etc/php5/fpm/conf.d/20-pydio.ini -sudo cp ../conf/php-fpm.ini $finalphpini -sudo chown root: $finalphpini -sudo chmod 644 $finalphpini +#finalphpini=/etc/php5/fpm/conf.d/20-pydio.ini +#sudo cp ../conf/php-fpm.ini $finalphpini +#sudo chown root: $finalphpini +#sudo chmod 644 $finalphpini # Nginx configuration sed -i "s@NAMETOCHANGE@pydio@g" ../conf/nginx.conf diff --git a/scripts/remove b/scripts/remove index 4c0bd58..e8678e4 100644 --- a/scripts/remove +++ b/scripts/remove @@ -14,6 +14,15 @@ db_name=pydio root_pwd=$(sudo cat /etc/yunohost/mysql) mysql -u root -p$root_pwd -e "DROP DATABASE $db_name ; DROP USER $db_user@localhost ;" +for i in $(ls /home) +do + sudo yunohost user list --json | grep -q "\"username\": \"$i\"" + if [[ $? -eq 0 ]]; + then + sudo setfacl -x g:pydio:rwx /home/$i + fi +done + sudo userdel pydio > /dev/null 2>&1 sudo service nginx reload