1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/nextcloud_ynh.git synced 2024-09-03 19:55:57 +02:00

[enh] Rewrite and update upgrade script to use helpers

This commit is contained in:
Jérôme Lebleu 2016-04-03 22:25:49 +02:00
parent 97b9a2b58f
commit 5cbd01ab57
2 changed files with 108 additions and 127 deletions

View file

@ -28,8 +28,8 @@ or from the Web administration:
## TODO ## TODO
* Rewrite the upgrade script and update backup/restore too
* Test the upgrade from the current official package * Test the upgrade from the current official package
* Update backup and restore scripts
* Develop an app to integrate SSOwat logout - see * Develop an app to integrate SSOwat logout - see
[here](https://doc.owncloud.org/server/9.0/developer_manual/app/hooks.html#session) [here](https://doc.owncloud.org/server/9.0/developer_manual/app/hooks.html#session)
* Check the external storage plugin * Check the external storage plugin

View file

@ -1,147 +1,128 @@
#!/bin/bash #!/bin/bash
APP=${!#}
set -e set -e
set -u
APPNAME=`echo -n own;echo 'cloud'` # Load common variables and helpers
SOURCES=`echo -n $APPNAME;echo '-8.2.2'` . ./_common.sh
# Retrieve arguments # Retrieve arguments
domain=$(sudo yunohost app setting owncloud domain) app=${!#}
path=$(sudo yunohost app setting owncloud path) dbname=$app
#user=$(sudo yunohost app setting owncloud admin_user) dbuser=$app
db_pwd=$(sudo yunohost app setting owncloud mysqlpwd)
# Install dependencies # Source app helpers
sudo apt-get update -qq . /usr/share/yunohost/helpers
sudo apt-get install acl smbclient php5-cli php-apc coreutils gnupg tar -y -qq
# Remove trailing "/" for next commands # Retrieve app settings
path=${path%/} domain=$(ynh_app_setting_get $app domain)
path=$(ynh_app_setting_get $app path)
dbpass=$(ynh_app_setting_get $app mysqlpwd)
# Use 'owncloud' as database name and user \ # Check - and fix as needed - path setting
db_user=owncloud [[ "${path: -1}" = / ]] \
&& path=${path%/} && ynh_app_setting_set $app path $path
# Verify sources and extract it # Check destination directory
sha256sum --strict --quiet -c ../sources/$SOURCES.tar.bz2.sha256sum < ../sources/$SOURCES.tar.bz2 DESTDIR="/var/www/$app"
gpg --import ../sources/$APPNAME.asc [[ ! -d $DESTDIR ]] && die \
gpg --verify ../sources/$SOURCES.tar.bz2.asc ../sources/$SOURCES.tar.bz2 "The destination directory '$DESTDIR' does not exist.\
sudo mkdir -p ../tmp/ The app is not correctly installed, you should remove it first."
sudo tar -jxf ../sources/$SOURCES.tar.bz2 -C ../tmp/
# Copy files to the right place # Check app's data directory
final_path=/var/www/owncloud DATADIR="/home/yunohost.app/${app}/data"
data_path=/home/yunohost.app/owncloud/data [[ ! -d $DATADIR ]] && die \
sudo mkdir -p $final_path "The data directory '$DATADIR' does not exist.\
sudo mkdir -p $data_path The app is not correctly installed, you should remove it first."
old_pwd=$(pwd)
sudo chmod -R u=rwX,g=rwX,o=rX $final_path
sudo chmod -R u=rwX,g=rwX,o= $data_path
cd $final_path
sudo mkdir -p old_apps
sudo rm -Rf old_apps/*
sudo mv apps/* old_apps \
|| echo "No app to backup"
shopt -s extglob
sudo rm -Rf !(old_apps|data|config|themes)
shopt -u extglob
cd $old_pwd
sudo cp -a ../tmp/$APPNAME/. $final_path/
cd $final_path/old_apps
sudo rm -Rf $(ls $final_path/apps)
cd $old_pwd
sudo cp -a $final_path/old_apps/* $final_path/apps/ \
|| echo "No app to restore"
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/owncloud.conf # Upgrade dependencies
sudo cp ../conf/php-fpm.conf /etc/php5/fpm/pool.d/owncloud.conf ynh_package_install_from_equivs ../conf/${DEPS_PKG_NAME}.control \
sudo ls /usr/lib/php5/2*/ | grep apc.so \ || die "Unable to upgrade dependencies"
&& sudo cp ../conf/20-apc.ini /etc/php5/cli/conf.d/20-apc.ini \
|| sudo cp ../conf/20-apcu.ini /etc/php5/cli/conf.d/20-apcu.ini
sudo cp ../conf/mount.json $data_path
sudo chown -hR owncloud:www-data $final_path
sudo chown -hR owncloud:www-data $data_path
sudo chmod 755 /home/yunohost.app
sudo chmod -R u=rwX,g=rwX,o=rX $final_path
sudo chmod -R u=rwX,g=rwX,o= $data_path
sudo chmod -R 770 $data_path
# Needed for Jessie/PHP5.6 compatibility # Copy and set nginx configuration
sudo sed -i "s/;always_populate_raw/always_populate_raw/" /etc/php5/cli/php.ini nginx_conf="/etc/nginx/conf.d/${domain}.d/${app}.conf"
sed -i "s@#APP#@${app}@g" ../conf/nginx.conf
sed -i "s@#PATH#@${path}@g" ../conf/nginx.conf
sed -i "s@#LOCATION#@${path:-/}@g" ../conf/nginx.conf
sed -i "s@#DESTDIR#@${DESTDIR}@g" ../conf/nginx.conf
sudo cp ../conf/nginx.conf "$nginx_conf"
# Change variables in Owncloud configuration # Copy and set php-fpm configuration
if [[ "$path" == "" ]]; then phpfpm_conf="/etc/php5/fpm/pool.d/${app}.conf"
sudo sed -i "s@LOCATIONTOCHANGE@/@g" /etc/nginx/conf.d/$domain.d/owncloud.conf sed -i "s@#POOLNAME#@${app}@g" ../conf/php-fpm.conf
else sed -i "s@#DESTDIR#@${DESTDIR}/@g" ../conf/php-fpm.conf
sudo sed -i "s@LOCATIONTOCHANGE@$path@g" /etc/nginx/conf.d/$domain.d/owncloud.conf sudo cp ../conf/php-fpm.conf "$phpfpm_conf"
fi sudo chown root: $phpfpm_conf
sudo sed -i "s@PATHTOCHANGE@$path@g" /etc/nginx/conf.d/$domain.d/owncloud.conf sudo chmod 644 $phpfpm_conf
sudo sed -i "s@ALIASTOCHANGE@$final_path/@g" /etc/nginx/conf.d/$domain.d/owncloud.conf
sudo sed -i "s@NAMETOCHANGE@owncloud@g" /etc/nginx/conf.d/$domain.d/owncloud.conf # occ helper for the current installation
sudo sed -i "s@NAMETOCHANGE@owncloud@g" /etc/php5/fpm/pool.d/owncloud.conf _exec_occ() {
if ! grep -Fq "memcache" $final_path/config/config.php exec_occ "$DESTDIR" "$app" $@
then }
sudo bash -c "echo \"\\\$CONFIG['memcache.local']= '\OC\Memcache\APC';\" >> $final_path/config/config.php"
fi # Retrieve new ownCloud sources in a temporary directory
if ! grep -Fq "memcache.locking" $final_path/config/config.php TMPDIR=$(ynh_mkdir_tmp)
then extract_owncloud "$TMPDIR"
sudo bash -c "echo \"\\\$CONFIG['memcache.locking']= '\OC\Memcache\APC';\" >> $final_path/config/config.php"
fi # Copy ownCloud configuration file
# Set permissions to owncloud directories and /home directories + add Home external storage oc_conf="${DESTDIR}/config.json"
for i in $(ls /home) sed -i "s@#DOMAIN#@${domain}@g" ../conf/config.json
do sed -i "s@#DATADIR#@${DATADIR}@g" ../conf/config.json
sudo yunohost user list --json | grep -q "\"username\": \"$i\"" && ( sudo cp ../conf/config.json "${TMPDIR}/config.json"
sudo mkdir -p $data_path/$i
sudo setfacl -m g:owncloud:rwx /home/$i || echo "ACL not available" # Copy configuration for external storage plugin
) || true sudo cp ../conf/mount.json "$DATADIR"
# Enable maintenance mode
_exec_occ maintenance:mode --on
# Copy config and 3rd party applications from current directory
sudo cp -a "${DESTDIR}/config/config.php" "${TMPDIR}/config/config.php"
for a in $(sudo ls "${DESTDIR}/apps"); do
[[ ! -d "${TMPDIR}/apps/$a" ]] \
&& sudo cp -a "${DESTDIR}/apps/$a" "${TMPDIR}/apps/$a"
done done
# Reload Nginx and regenerate SSOwat conf # Rename current directory and move new one
sudo killall php5-fpm sudo rm -rf "${DESTDIR}-old"
sudo service php5-fpm start sudo mv "$DESTDIR" "${DESTDIR}-old"
sudo service nginx reload sudo mv "$TMPDIR" "$DESTDIR"
sudo yunohost app setting owncloud unprotected_uris -v "/"
sudo yunohost app setting owncloud skipped_uris -d
sudo yunohost app ssowatconf
# Set app folders ownership
sudo chown -R $app: "$DESTDIR" "$DATADIR"
sudo chown -hR owncloud:owncloud $final_path # Upgrade ownCloud (SUCCESS = 0, UP_TO_DATE = 3)
sudo chown -hR owncloud:owncloud $data_path # TODO: Restore old directory in case of failure?
_exec_occ maintenance:mode --off
_exec_occ upgrade \
|| ([[ $? -eq 3 ]] || die "Unable to upgrade ownCloud")
# Enable plugins and set ownCloud configuration
_exec_occ app:enable files_external
_exec_occ app:enable user_ldap
_exec_occ ldap:create-empty-config
_exec_occ config:import "$oc_conf"
sudo rm -f "$oc_conf"
# Iterate over users to extend their home folder permissions - for the external
# storage plugin usage - and create relevant ownCloud directories
for u in $(ynh_user_list); do
sudo mkdir -p "${DATADIR}/${u}"
sudo setfacl -m g:$app:rwx "/home/$u" || true
done
# Fix app ownerships & permissions
sudo find ${DESTDIR}/ -type f -print0 | sudo xargs -0 chmod 0644
sudo find ${DESTDIR}/ -type d -print0 | sudo xargs -0 chmod 0755
sudo find ${DATADIR}/ -type f -print0 | sudo xargs -0 chmod 0640
sudo find ${DATADIR}/ -type d -print0 | sudo xargs -0 chmod 0750
sudo chmod 640 "${DESTDIR}/config/config.php"
sudo chmod 755 /home/yunohost.app sudo chmod 755 /home/yunohost.app
sudo chmod -R u=rwX,g=rwX,o=rX $final_path
sudo chmod -R u=rwX,g=rwX,o= $data_path
#Run owncloud upgrade script to avoid to have to do this in the browser # Set SSOwat rules
cd $final_path ynh_app_setting_set $app unprotected_uris "/"
ynh_app_setting_delete $app skipped_uris
#sudo su -c "php occ app:disable gallery -n -q --no-ansi" owncloud # Reload services
sudo su -c "php occ upgrade -n -q --no-ansi || echo 'Owncloud upgrade already done'" owncloud sudo service php5-fpm restart || true
sudo service nginx reload || true
# Configure LDAP plugin
sudo su -c "php occ ldap:set-config '' ldapBase dc=yunohost,dc=org -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapBaseGroups dc=yunohost,dc=org -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapBaseUsers dc=yunohost,dc=org -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapCacheTTL 600 -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapConfigurationActive 1 -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapEmailAttribute mail -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapExperiencedAdmin 0 -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapExpertUsernameAttr uid -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapGroupDisplayName cn -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapGroupFilter objectClass=posixGroup -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapGroupFilterMode 0 -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapGroupMemberAssocAttr uniqueMember -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapHost localhost -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapLoginFilter '(&(|(objectclass=mailAccount))(uid=%uid))' -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapLoginFilterEmail 0 -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapLoginFilterMode 0 -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapLoginFilterUsername 1 -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapNestedGroups 0 -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapPagingSize 500 -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapPort 389 -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapQuotaAttribute mailQuota -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapTLS 0 -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapUserDisplayName cn -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapUserFilter objectClass=mailAccount -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapUserFilterMode 0 -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapUuidGroupAttribute auto -n -q --no-ansi" owncloud
sudo su -c "php occ ldap:set-config '' ldapUuidUserAttribute auto -n -q --no-ansi" owncloud