2018-05-12 11:47:12 -05:00
|
|
|
require "tempfile"
|
|
|
|
require "utils/shell"
|
|
|
|
require "os/linux/diagnostic"
|
|
|
|
|
|
|
|
module Homebrew
|
|
|
|
module Diagnostic
|
|
|
|
class Checks
|
|
|
|
def check_tmpdir_sticky_bit
|
|
|
|
message = generic_check_tmpdir_sticky_bit
|
|
|
|
return if message.nil?
|
2018-09-17 02:45:00 +02:00
|
|
|
|
2018-05-12 11:47:12 -05:00
|
|
|
message + <<~EOS
|
|
|
|
If you don't have administrative privileges on this machine,
|
|
|
|
create a directory and set the HOMEBREW_TEMP environment variable,
|
|
|
|
for example:
|
|
|
|
install -d -m 1755 ~/tmp
|
|
|
|
#{Utils::Shell.set_variable_in_profile("HOMEBREW_TEMP", "~/tmp")}
|
|
|
|
EOS
|
|
|
|
end
|
|
|
|
|
2018-08-14 11:51:18 -07:00
|
|
|
def check_tmpdir_executable
|
|
|
|
f = Tempfile.new(%w[homebrew_check_tmpdir_executable .sh], HOMEBREW_TEMP)
|
|
|
|
f.write "#!/bin/sh\n"
|
|
|
|
f.chmod 0700
|
|
|
|
f.close
|
|
|
|
return if system f.path
|
2018-09-17 02:45:00 +02:00
|
|
|
|
2018-08-14 11:51:18 -07:00
|
|
|
<<~EOS.undent
|
|
|
|
The directory #{HOMEBREW_TEMP} does not permit executing
|
|
|
|
programs. It is likely mounted as "noexec". Please set HOMEBREW_TEMP
|
|
|
|
in your #{shell_profile} to a different directory, for example:
|
|
|
|
export HOMEBREW_TEMP=~/tmp
|
|
|
|
echo 'export HOMEBREW_TEMP=~/tmp' >> #{shell_profile}
|
|
|
|
EOS
|
|
|
|
ensure
|
|
|
|
f.unlink
|
|
|
|
end
|
|
|
|
|
2018-05-12 11:47:12 -05:00
|
|
|
def check_xdg_data_dirs
|
2018-09-14 17:02:19 +01:00
|
|
|
return if ENV["XDG_DATA_DIRS"].blank?
|
2018-05-12 11:47:12 -05:00
|
|
|
return if ENV["XDG_DATA_DIRS"].split("/").include?(HOMEBREW_PREFIX/"share")
|
2018-09-17 02:45:00 +02:00
|
|
|
|
2018-05-12 11:47:12 -05:00
|
|
|
<<~EOS
|
|
|
|
Homebrew's share was not found in your XDG_DATA_DIRS but you have
|
|
|
|
this variable set to include other locations.
|
|
|
|
Some programs like `vapigen` may not work correctly.
|
|
|
|
Consider adding Homebrew's share directory to XDG_DATA_DIRS like so:
|
|
|
|
#{Utils::Shell.prepend_variable_in_profile("XDG_DATA_DIRS", HOMEBREW_PREFIX/"share")}
|
|
|
|
EOS
|
|
|
|
end
|
2018-11-02 15:03:54 -07:00
|
|
|
|
|
|
|
def check_umask_not_zero
|
|
|
|
return unless File.umask.zero?
|
|
|
|
|
|
|
|
<<~EOS
|
|
|
|
umask is currently set to 000. Directories created by Homebrew cannot
|
|
|
|
be world-writable. This issue can be resolved by adding umask 002 to
|
|
|
|
your #{shell_profile}
|
|
|
|
echo 'umask 002' >> #{shell_profile}
|
|
|
|
EOS
|
|
|
|
end
|
2018-05-12 11:47:12 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|