/var/tmp is the most appropriate definition for this, at least “universally”.
/tmp is not persistent, and use of RAM for large temporary files may be in appropriate. The output from lint, for example, can be huge. Totally inappropriate for RAM, especially since its already going to be cached in buffer cache or ARC (depending on filesystem). Making /var/tmp be something that is appropriate for this type of usage is part of the role of system administration. If your /var/tmp filesystem is something that is inappropriate for hosting scratch files, then you’re not administering your system properly (or your distro builder has done you a disservice.) If in your environment you prefer all such files live non-persistently in RAM, feel free to make /var/tmp a pointer to /tmp. Or just mount a new tmpfs filesystem over it. Changing the “default” globally for illumos is incorrect. (And yes, its quite possible that SmartOS gets this “wrong”, if it uses a USB flash media or somesuch. But I *suspect* the intent is that this is only this way in the GZ, where the use of tmp files ought to be rather limited — and that instead you should be using the zones pool to host a “real” /var/tmp. In that context, SmartOS *doesn’t* get it wrong, at least IMO.) On Wed, Oct 21, 2015 at 9:08 AM, Richard PALO <[email protected]> wrote: > 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
