In digging around as to why /var/tmp is used so much causing a ruckus on my
rpool..
It turns out that things like gcc use libiberty or similar which operate more
or less as the following snippet does:
> 115 #ifdef VMS
> 116 /* Try VMS standard temp logical. */
> 117 base = try_dir ("/sys$scratch", base);
> 118 #else
> 119 base = try_dir (getenv ("TMPDIR"), base);
> 120 base = try_dir (getenv ("TMP"), base);
> 121 base = try_dir (getenv ("TEMP"), base);
> 122 #endif
> 123
> 124 #ifdef P_tmpdir
> 125 /* We really want a directory name here as if concatenated with say
> \d ir
> 126 we do not end up with a double \\ which defines an UNC path. */
> 127 if (strcmp (P_tmpdir, "\\") == 0)
> 128 base = try_dir ("\\.", base);
> 129 else
> 130 base = try_dir (P_tmpdir, base);
> 131 #endif
> 132
> 133 /* Try /var/tmp, /usr/tmp, then /tmp. */
> 134 base = try_dir (vartmp, base);
> 135 base = try_dir (usrtmp, base);
> 136 base = try_dir (tmp, base);
This code has included <stdio.h> which can provide P_tmpdir as follows:
> 205 #if defined(__EXTENSIONS__) || \
> 206 (!defined(_STRICT_STDC) && !defined(_POSIX_C_SOURCE)) || \
> 207 defined(_XOPEN_SOURCE)
> 208
> 209 #define P_tmpdir "/var/tmp/"
> 210 #endif /* defined(__EXTENSIONS__) || (!defined(_STRICT_STDC) ... */
some define P_tmpdir (if not already defined) as "/usr/tmp" which, on most
modern systems including solaris is a simply a symlink to "/var/tmp"
In the end, the problem is that in absence of TMPDIR environment variable being
defined, frequently programs will not use the solaris default "/tmp" but
"/var/tmp".
This can be problematic in the sense that "/tmp", in being typically a tmpfs,
doesn't
write to disk unless swapping... and then to the defined swap locations.
But when /var/tmp is being used, it is generally always to disk (man
filesystem(5)):
> ...
> /tmp
> Temporary files; cleared during the boot operation.
>
> ...
> /var/tmp
> Files that vary in size or presence during normal system
> operations. This directory is not cleared during the boot
> operation. An approved installation location for bundled Solaris
> software and for add-on system software and applications.
>
> It is possible to change the default behavior for /var/tmp to clear
> all of the files except editor temporary files by setting the
> clean_vartmp property value of the rmtmpfiles service. This is done
> with the following commands:
>
> # svccfg -s svc:/system/rmtmpfiles setprop \
> options/clean_vartmp = "true"
> # svcadm refresh svc:/system/rmtmpfiles:default
>
> The solaris.smf.value.rmtmpfiles authorization is required to
> modify this property.
Worse, if the root disk rpool is "supposed" to be more or less read-only, and
can often even be a poor old usb key or compact flash card not intended to be
"abused", it makes for a big surprise when behind your back your compiler
doesn't use the memory and additional storage resources system management put
into place.
Such is the case at hand.
Adding now the environment variable TMPDIR=</tmp or something else fast>
everywhere
is not necessary feasible, so I can't help but wonder if it is not time to
change
P_tmpdir to "/tmp".
Furthermore, mktemp also defaults to "/tmp"
So, what eats me is sometimes it defaults to "/tmp", sometimes to "/var/tmp".
programatically, something as simple as __EXTENSIONS__ or _XOPEN_SOURCE=600
can give you surprises!
Also, the gate builds libc with __EXTENSIONS__ so functions such as tmpnam and
tempnam
generate by default "/var/tmp"!
/usr/bin/mktemp doesn't even peek at P_tmpnam but uses "/tmp" unless TMPDIR is
assigned.
Naturally, anything that can overuse "/tmp" *needs* to be dealt with such as
huge files that can quickly fill up the tmpfs. Normally those "exceptions" are
the ones that need intervention by defining TMPDIR.
enough ranting now, any other opinions or observations?
--
Richard PALO
-------------------------------------------
illumos-discuss
Archives: https://www.listbox.com/member/archive/182180/=now
RSS Feed: https://www.listbox.com/member/archive/rss/182180/21175430-2e6923be
Modify Your Subscription:
https://www.listbox.com/member/?member_id=21175430&id_secret=21175430-6a77cda4
Powered by Listbox: http://www.listbox.com