Open EdRoxter opened 2 years ago
My /tmp
directory is mounted with tmpfs, what makes it fast but limited in space. Because it is filled up from time to time by various scripts and tasks, which in extreme cases can make the server unresponsive, I created the following entries in php.ini
for analysis purposes:
sys_temp_dir = "/tmp_php"
upload_tmp_dir = "/tmp_upload"
soap.wsdl_cache_dir="/tmp_wsdl"
opcache.lockfile_path="/tmp_opcache_lockfile"
and in /var/www/nextcloud/config/config.php:
'tempdirectory' => '/tmp_nc',
Of course all of these directories exist with 777 permissions.
I noticed the following:
The app stores the coolwsd.pid in /tmp_upload
, which is upload_tmp_dir as defined in php.ini which is incomprehensible to me.
Look Here
That would be better off in the (/var)/run
directory, which is also mounted with tmpfs and is not persistent across reboots.
Then all 'working' temp files are stored in /tmp
. Neither the settings from php.ini nor from config/config.php are taken into account.
It would be great, when this app would at least take the 'tempdirectory' as defined in config/config.php and if possible move the pid file to (/var)/run
[Edit: added link to code]
Thanks for your additions and conclusions!
Then all 'working' temp files are stored in
/tmp
. Neither the settings from php.ini nor from config/config.php are taken into account.
I guess that confirms that obviously only the setting of env variable TMPDIR is what influences the AppImage's behavior here.
It would be great, when this app would at least take the 'tempdirectory' as defined in config/config.php and if possible move the pid file to
(/var)/run
That would be really neat indeed as it makes for consistent configuration of temp files' location overall.
This might be somewhat of an edge case, but it'd be great if it was possible to define the path in which the AppImage extracts itself in case FUSE is unavailable.
Scenario: I'm running Nextcloud on a shared hosting provider's server which uses cPanel as management platform. By default, the AppImage extracts its contents into
/tmp
, which is mounted withnoexec
- apparently that's quite the default setup with cPanel. Obviously, the AppImage gets extracted, but the binaries inside can't be run which results in permission errors and of course the whole app not working.On the other hand, binaries residing inside the "jail" of my hosting account (e.g.
/home/myaccount/mybinarycollection/
) can be run without any issues.It is possible to achieve that by setting the environment variable
TMPDIR
in the context where the AppImage is executed. Problem is: In such a more or less restrictive environment, setting environment variables for the PHP processes as well as theexec()
'd AppImage command is virtually impossible. I can't set environment variables for PHP in cPanel; I can't directly edit thephp.ini
;bash -c
is non-login non-interactive, thus ignores .bashrc and .profile;/etc/environment
is obviously read-only for me; etc.So, as far as I'm concerned, the only way to reliably get this done is to set
TMPDIR
withinproxy.php
, either byputenv('TMPDIR=/home/myaccount/mybinarycollection')
or by weaving it into$launchCmd
. I successfully tried theputenv()
method, but of course it breaks Nextcloud's code integrity check and will be overwritten with every update. Incorporating it into$launchCmd
might be a safer call though, sinceputenv()
might be disabled by hosting providers.So my request would be to make the desired extraction path configurable in the app's admin backend and, if configured, have
proxy.php
set it as content ofTMPDIR
; of course given that you, dear developers, consider this an issue worth addressing.