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

Reply via email to