These instructions take advantage of the Composer powered update systems in 5.3 for maintenance updates, so make sure:

For Upgrading from versions prior to 5.3 look at the Installation and Upgrade Guides.

Before Updating

Follow all* instructions below that applies to the version you're updating from: when updating from 5.3.0 everything applies.

* The version you update to will always be the latests, hence the importance of following all steps.

From 5.3.8 and lower

Update Composer plugins for Composer v1.1

Newer versions of Composer sometimes updates it's API's and as such we need to make sure our composer plugins up-to-date, so to : 

# First install Composer v1.0 that works with old version of ezpublish-legacy-installer
php -r "copy('https://getcomposer.org/download/1.0.3/composer.phar', 'composer.phar');"

# As authentication is built in to composer now, we can remove the following plugin
php -d memory_limit=-1 composer.phar remove --no-update --no-plugins bitexpert/composer-authstore-plugin


# Then install newer version of ezpublish-legacy-installer that works on Composer 1.1 (will warn about the outdated versions you have from before)
php -d memory_limit=-1 composer.phar update --no-dev --prefer-dist --no-scripts ezsystems/ezpublish-legacy-installer

# Then make sure composer is updated to latests
php -d memory_limit=-1 composer.phar selfupdate 

From 5.3.2 and lower

Remove Zeta Components packages causing composer conflicts

Issues with Zeta Components and Composer have been fixed (new releases of Zeta Components have been made to fix this) so you should edit composer.json and remove any "zetacomponents" package like shown below:

php -d memory_limit=-1 composer.phar remove --no-update zetacomponents/archive zetacomponents/authentication zetacomponents/authentication-database-tiein zetacomponents/base zetacomponents/cache zetacomponents/configuration zetacomponents/console-tools zetacomponents/database zetacomponents/debug zetacomponents/event-log zetacomponents/feed zetacomponents/image-conversion zetacomponents/mail zetacomponents/mvc-tools zetacomponents/mvc-authentication-tiein zetacomponents/persistent-object zetacomponents/php-generator zetacomponents/signal-slot zetacomponents/system-information

After doing this, verify that content of composer.json does not contain any entries for zetacomponents/ unless you have your own dependencies on them. ezpublish-kernel and ezpublish-legacy now always requires the specific versions of the Zeta Components we use internally.

Update your Nginx configuration

If you're using Nginx as your webserver instead of Apache, then make sure to update Nginx vhost configuration, changes since 5.3.0: 5.3.15.3.3 

From 5.3.3 and lower

Optional: Change composer.json to avoid occasional fatal error on asset dump when performing composer update

For issue  composer.json should be edited to take full advantage of the improvement, see the following commit for patch.

From 5.3.4 and lower

Remove mink package causing composer conflict

Perform the following command to make sure you you are not affected by conflicts caused by this package:

php -d memory_limit=-1 composer.phar remove --no-update --dev behat/mink-selenium-driver 

Recommended: Enable php-openssl extension

This release fixes a vulnerability in the eZ Publish password recovery function. You need to have the PHP OpenSSL extension (ext-openssl) installed to take full advantage of the improved security, but even without it security is improved. See Security Advisory for further information.

From 5.3.8 and lower

Update sensio distribution bundle

php -d memory_limit=-1 composer.phar require --no-plugins --no-update "sensio/distribution-bundle ~2.3|~3.0"

From 5.3.11 and lower

Fix extended UTF characters

For issue EZP-26748, see the following commit for patch.

Due to EZP-27026 updating to 5.3.12 using composer with PHP 5.3.3 is currently not possible.

Updating packages with composer

To test a RC release you'll need to update your requirements before next step:

php -d memory_limit=-1 composer.phar require --no-update "ezsystems/ezpublish-kernel v5.3.9-rc2 as 5.3.9" "ezsystems/ezpublish-legacy v5.3.9-rc3 as 5.3.9" "ezsystems/ezflow-ls-extension v5.3.9-rc1 as 5.3.9"
With this command you'll only update all packages that have received updates:

# First delete the Symfony container cache to avoid error, on Windows use something like: DEL /F /Q /S ezpublish/cache/*/*ProjectContainer.php
rm ezpublish/cache/*/*ProjectContainer.php

# Now update all packages (will warn about outdated bitexpert/composer-authstore-plugin package first time you do this before that plugn is removed)
php -d memory_limit=-1 composer.phar update --no-dev --prefer-dist

Legacy extensions autoload must be regenerated when new classes are added. To make sure to avoid any issues always run this command after composer update:

php ezpublish/console ezpublish:legacy:script bin/php/ezpgenerateautoloads.php --extension

After Updating

Follow all instructions below that applies to the version you've updated from, i.e. if you are updating from 5.3.0 everything applies.

Updating from 5.3.2 and lower

Update the database

Import to your database the changes provided in:

/<ezp5-root>/ezpublish_legacy/update/database/<mysql|postgresql>/5.3/dbupdate-5.3.2-to-5.3.3.sql

And if you use Cluster (DFS) the following:

/<ezp5-root>/ezpublish_legacy/update/database/mysql/5.3/dbupdate-cluster-5.3.2-to-5.3.3.sql

Updating from 5.3.4 and lower

Update Solr configuration and reindex content

An eZ Find user needs to update their solr schema.xml.

For each solr core (located in ezfind/java/solr), you need to edit <my-core-name>/conf/schema.xml

Around line 566, right after:

<field name="meta_priority_si" type="sint" indexed="true" stored="true" multiValued="true"/>

Add the following lines:

<!-- denormalised fields for hidden and visible path elements -->
<field name="meta_visible_path_si" type="sint" indexed="true" stored="true" multiValued="true"/>     <!-- Visible Location path IDs -->
<field name="meta_visible_path_string_ms" type="mstring" indexed="true" stored="true" multiValued="true"/> <!-- Visible Location path string -->
<field name="meta_hidden_path_si" type="sint" indexed="true" stored="true" multiValued="true"/>     <!-- Hidden Location path IDs -->
<field name="meta_hidden_path_string_ms" type="mstring" indexed="true" stored="true" multiValued="true"/> <!-- Hidden Location path string -->

Now restart Solr, and re-index your content to be able to take advantage of this improvement.