Maintenance
Updating to FileRun 2026.4
What to do before and after updating an installation to FileRun 2026.4.0: the steps the update
cannot do by itself, and the changes that affect a customized configuration, customized files and
API clients.
Important
Some of these steps have to be done before installing the update. Follow the general steps of Updating FileRun as well.
Before updating
- Make a full backup of the installation.
- The user details mapping of the OpenID Connect and OAuth2 authentication. The JSONPath
selectors of the mapping are now read by the rules of the JSONPath standard (RFC 9535). The usual
forms give the same value as before, such as
$.email,$.name.given_name,$['custom:claim'],$.emails[0].valueand$.groups[*]. A selector written in one of the forms below has to be changed. The corrected forms work in the earlier versions too, so change them before updating.- A name in brackets needs quotes:
$[email]has to be$['email']. - A quoted name after a dot is refused:
$.'custom:claim'has to be$['custom:claim']. - A position after a dot finds nothing:
$.emails.0.valuehas to be$.emails[0].value. - A filter that compares with
=,===,!==,=~,inorninis refused. A filter compares with==,!=,<,<=,>and>=. The new functionsmatch()andsearch()check a regular expression. The earlier versions do not know them, so a filter that uses them works only after the update. .lengthand calculated positions such as[(@.length-1)]are no longer available. The last element is[-1].- A negative position that reaches before the start of a list, such as
[-5]on a list of two, finds nothing. It found the first element.
- A name in brackets needs quotes:
After updating
Thumbnails and previews
FileRun no longer keeps the thumbnails and the document previews next to the files, in hidden
.filerun.thumbnails and .filerun.cache folders. It keeps them in the installation folder, in
system/data/temp/file_variants/Drive. The folders of the users hold only their files: a backup or
a synchronization tool no longer copies the cache, and opening a folder no longer writes into it.
The old folders stay where they are after the update, hidden. FileRun no longer reads them, so each thumbnail is made again the first time it is viewed. A command line tool moves what is still valid of the old folders to the new location, and removes the rest:
- From the root of the installation, run the tool with
--dry-run. It prints every file it would move and remove, and changes nothing.1php cli.php 'Drive/!cli/variants/migrate_legacy' --dry-run - Run it again without
--dry-run.1php cli.php 'Drive/!cli/variants/migrate_legacy' - At the end, it prints how many folders it read, how many thumbnails and previews it moved, how many files it removed, and how much space it moved and freed.
What the tool does:
- Without options, it processes the home folder of every account, the trash folder set by
$config['path']['trash'], and the folders set by$config['path']['thumbnail_cache']and$config['path']['preview_cache'], if any. For a folder outside the home folders, run it with--path=/full/disk/path. The other options are on Command line tools. - It moves the thumbnails and the previews of the files that have not changed since they were made. It removes the cache of the files that no longer exist, of the files that changed, and of the earlier versions of files. When a thumbnail was already made again after the update, it keeps the new one.
- On a large installation it can run for a long time. A run that stops can be started again: it
continues with what is left. It can also be run one account at a time with
--username, or one folder at a time with--path.
Remarks:
- The cache now takes room on the disk of the installation folder. On a large photo library it can
take many gigabytes. To keep it on another disk, set
$config['Drive']['path']['file_variants']incustomizables/config.phpbefore running the tool. See Advanced configuration. $config['path']['thumbnail_cache']and$config['path']['preview_cache']are no longer read. If you set one of them, remove it fromcustomizables/config.phpafter the tool has run.- With several web servers behind a load balancer, each server keeps its own thumbnails, unless
$config['Drive']['path']['file_variants']points to storage that they share. - After restoring the database from a backup, delete the folder
system/data/temp/file_variants, or the folder that the option names. The thumbnails are found through the database records of the files, and a restored database can give the record of one file to another file, which would then show the wrong thumbnail.
Configuration
-
The names of the activity log actions. An action is now named together with its application, such as
Core.loginorDrive.upload. The update renames the entries of the activity log, of its archive and of the e-mail notification rules. Wherecustomizables/config.phpnames actions, change the names by hand. The names are listed on Activity log actions. The option that names actions this way is$config['system']['custom_event_scripts']. -
The options of the e-mail notifications about files moved. Move them in
customizables/config.php, because an option left at the old place is ignored:$config['app']['email_notification']['basic_actions']becomes$config['Drive']['email_notification']['basic_actions'].$config['app']['email_notification']['folder_based']['limit_actions']becomes$config['Drive']['email_notification']['folder_based']['limit_actions'].
Their values stay the same: the names of the actions without the application, such as
receive_upload. -
Your own list of notified actions. If
$config['Drive']['email_notification']['basic_actions']is set, replacereceive_copyandreceive_movethere withreceive_file_copy_created: the two old names are never recorded, so a copy into a user's folder was never notified. The default list now also notifies about a file uploaded over an existing file or saved from an editor (receive_file_updated). Add it to your list if you want the same. -
$config['system']['http']['options']. The library that makes the outgoing HTTP requests (Guzzle) is at version 8. It checks the types of these options, and refuses cURL options that replace its own settings, such as the certificate check, the proxy or the timeout. HTTPS connections need TLS 1.2 or newer, a connection attempt waits at most 60 seconds, and only the redirects with the status 301, 302, 303, 307 or 308 are followed. -
E-mail sent through PHP's
mail()function (no SMTP server set in the control panel). The e-mail library (PHPMailer) is at version 7. When the PHP settingsendmail_pathalready names an envelope sender with-f, that sender is now used.
Customized files
- Translations. If you keep translation files under
customizables/translations, the files inside aCoreor aDrivefolder of a language are no longer read. Move them one level up: for example,customizables/translations/german/Core/Basic.phpbecomescustomizables/translations/german/Basic.php. One file gets a new name instead:Drive/Notifications.phpbecomesNotifications/Triggers.php. See Translating FileRun. - Event scripts. The event scripts in
customizables/eventsare named after the new action names:Core.login.php,Drive.upload.phpand so on. Rename them. The catch-all event script receives the new name in$action. - E-mail templates. Copies of the e-mail templates under
customizables/emailsare no longer read, whatever their language: the messages go out with the built-in templates. The messages are now translated, and written in the language of each user account, so a copy kept only to translate a message is no longer needed. To change the text of a message, override its translation undercustomizables/translations, in the section of the message: for example,customizables/translations/english/Email/Signup.phpfor the e-mail with the sign-in details. See E-mail notification system.
Permissions
- The permission "User can make changes to files and folders" is split into eight separate permissions. The update gives all eight to every account and role that had the one, so nothing changes until an administrator edits them. Review the accounts and the roles that should have less.
- The Guest role can now be allowed to edit files, use collections and star files. These options are off after the update, so guests behave as before until an administrator enables them.
- In the control panel, the lists for picking users and groups (the members of a group, the
notification rules, the user and role forms) are no longer limited by the
Can interact withpermission of the administrator who is signed in. An independent administrator still sees only the accounts it created.
Guest sign-in links
The link that signs a guest in, sent in the share messages and shown when editing a guest account, has a new address. The links in the messages sent before the update no longer work. Send such a guest a new share message, or let them sign in with their username and password.
Files to remove by hand
- On servers where crash dumps are enabled, a program that FileRun runs (LibreOffice, FFmpeg,
ImageMagick and the others) and that crashed left its crash dump file (
core.<number>) in the installation folder, where the web server could send it to anyone who asked for its name. Such a file holds the memory of the program, which can include the database password. The programs now run inside the temporary folder. Delete the crash dump files that are already in the installation folder. - On Linux installations whose trash folder is on another file system than the user files, an earlier version could leave files in the trash folder that have no record and are not shown in the trash. Remove them from the trash folder by hand.
API clients
- A write that the quota refuses is answered with the status
507 Insufficient Storageinstead of403, on every endpoint. The message in the answer is the same. - The errors of the OAuth2 token endpoint no longer have the
messagefield. Readerror_descriptioninstead. - A refresh token that is expired, revoked or issued to another application is answered with the
invalid_granterror and the status400, where it wasinvalid_requestand401. An expired or revoked authorization code is answered withinvalid_granttoo. A password grant with an emptyusernameis refused withinvalid_request. Core/!admin/users/inforeturnslast_web_ui_accessinstead oflast_access_date, with the same value. It also returnslast_seen, the time of the last activity of any kind.- The home folder path template of a role is named
drive_homefolder_templatebyCore/!admin/roles/info,Core/!admin/roles/addandCore/!admin/roles/edit. The old name,homefolder, still works, and will be removed in a future version. - The
fullPathdetail ofDrive/files/browse, the absolute path of an item on the server, is answered to administrator accounts only. - In the answer of
Core/!admin/users/edit_groups,add_to_grouplists only the groups joined by the request, and the newremove_from_grouplists the groups left. Core/users/searchis for administrators only, and needs theadminscope. Any other account finds the people it can share with through the new endpointDrive/users/search, which needs thesharescope. It takes the samesearchparameter and answers in the same form. It lists only the accounts that the "Can interact with" permission of the account allows, and an account created by an independent administrator finds only the accounts of that administrator, whatever the permission names.- The user and role endpoints accept and hand out the new permission names.
changesis still accepted, andreadonlyandreadOnlyare still handed out, but move to the new names: an edit that sends onlychangesleaves the other new permissions of the account off. - The PHP API client library (
apps/Drive/!classes/vendor/FileRun/API/Client) is no longer part of the installation package.
Settings that moved
- The settings of the programs that make thumbnails and previews (Vips, ImageMagick, FFmpeg and
LibreOffice) moved from
Files→Settings→Thumbs and previewstoFiles→Settings→Advanced. The file types that each program is used with stay onThumbs and previews. Files→Settings→Featureshas two new options underAccess:WebDAVandMobile and desktop apps. Both are on after the update.