From a6511a0da32e634ae9aefaa6ba654ec5e7673a2f Mon Sep 17 00:00:00 2001 From: Antonio Terceiro Date: Wed, 22 Oct 2014 09:40:14 -0200 Subject: [PATCH] Use a private temporary dir Without this vagrant will clutter $TMPDIR with dozens of even hundreds of temporary files (~4 per vagrant invocation). Signed-off-by: Johannes Kastl --- lib/vagrant/box.rb | 3 ++- lib/vagrant/util.rb | 2 ++ lib/vagrant/util/tempfile.rb | 39 ++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 lib/vagrant/util/tempfile.rb diff --git a/lib/vagrant/box.rb b/lib/vagrant/box.rb index cd839ee91..65eee8828 100644 --- a/lib/vagrant/box.rb +++ b/lib/vagrant/box.rb @@ -9,6 +9,7 @@ require "vagrant/util/downloader" require "vagrant/util/platform" require "vagrant/util/safe_chdir" require "vagrant/util/subprocess" +require "vagrant/util/tempfile" module Vagrant # Represents a "box," which is a package Vagrant environment that is used @@ -118,7 +119,7 @@ module Vagrant # @param [Hash] download_options Options to pass to the downloader. # @return [BoxMetadata] def load_metadata(**download_options) - tf = Tempfile.new("vagrant-load-metadata") + tf = Util::Tempfile.new("vagrant-load-metadata") tf.close url = @metadata_url diff --git a/lib/vagrant/util.rb b/lib/vagrant/util.rb index 32babe50d..217469e85 100644 --- a/lib/vagrant/util.rb +++ b/lib/vagrant/util.rb @@ -15,6 +15,8 @@ module Vagrant autoload :SafeExec, 'vagrant/util/safe_exec' autoload :SilenceWarnings, 'vagrant/util/silence_warnings' autoload :StackedProcRunner, 'vagrant/util/stacked_proc_runner' + autoload :Tempfile, 'vagrant/util/tempfile' + autoload :TemplateRenderer, 'vagrant/util/template_renderer' autoload :StringBlockEditor, 'vagrant/util/string_block_editor' autoload :Subprocess, 'vagrant/util/subprocess' autoload :TemplateRenderer, 'vagrant/util/template_renderer' diff --git a/lib/vagrant/util/tempfile.rb b/lib/vagrant/util/tempfile.rb new file mode 100644 index 000000000..0cbbb53ac --- /dev/null +++ b/lib/vagrant/util/tempfile.rb @@ -0,0 +1,39 @@ +require 'fileutils' +require 'tmpdir' + +module Vagrant + module Util + class Tempfile < ::Tempfile + + def initialize(basename) + super(basename, private_tmpdir) + end + + def private_tmpdir + self.class.private_tmpdir + end + + def self.private_tmpdir + @private_tmpdir ||= + begin + user = Etc.getpwuid.name + pid = Process.pid + tmpdir = File.join(Dir.tmpdir, "vagrant-#{user}-#{pid}") + FileUtils.mkdir_p(tmpdir) + FileUtils.chmod(0700, tmpdir) + tmpdir + end + end + + def self.mktmpdir(prefix_suffix) + Dir.mktmpdir(prefix_suffix, private_tmpdir) + end + + + end + end +end + +at_exit do + FileUtils.rm_rf(Vagrant::Util::Tempfile.private_tmpdir) +end -- 2.19.1