Module: Homebrew::Services::System Private
- Extended by:
- Utils::Output::Mixin
- Defined in:
- services/system.rb,
services/system/systemctl.rb
This module is part of a private API. This module may only be used in the Homebrew/brew repository. Third parties should avoid using this module if possible, as it may be removed or changed without warning.
Defined Under Namespace
Modules: Systemctl
Constant Summary collapse
- LAUNCHCTL_DOMAIN_ACTION_NOT_SUPPORTED =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
T.let(125, Integer)
Class Method Summary collapse
-
.boot_path ⇒ Pathname?
private
Run at boot.
- .candidate_domain_targets ⇒ Array<String> private
- .domain_target ⇒ String private
-
.launchctl ⇒ Pathname?
private
Path to launchctl binary.
-
.launchctl? ⇒ Boolean
private
Is this a launchctl system.
-
.path ⇒ Pathname?
private
If root, return
boot_path
, else returnuser_path
. -
.root? ⇒ Boolean
private
Woohoo, we are root dude!.
-
.systemctl? ⇒ Boolean
private
Is this a systemd system.
-
.user ⇒ String?
private
Current user running
[sudo] brew services
. - .user_of_process(pid) ⇒ String? private
-
.user_path ⇒ Pathname?
private
Run at login.
Methods included from Utils::Output::Mixin
odebug, odeprecated, odie, odisabled, ofail, oh1, oh1_title, ohai, ohai_title, onoe, opoo, opoo_outside_github_actions, pretty_duration, pretty_installed, pretty_outdated, pretty_uninstalled
Class Method Details
.boot_path ⇒ Pathname?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Run at boot.
55 56 57 58 59 60 61 |
# File 'services/system.rb', line 55 def self.boot_path if launchctl? Pathname.new("/Library/LaunchDaemons") elsif systemctl? Pathname.new("/usr/lib/systemd/system") end end |
.candidate_domain_targets ⇒ Array<String>
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
108 109 110 111 112 |
# File 'services/system.rb', line 108 def self.candidate_domain_targets candidates = [domain_target] candidates += ["user/#{Process.euid}", "gui/#{Process.uid}"] unless root? candidates.uniq end |
.domain_target ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'services/system.rb', line 80 def self.domain_target if root? "system" elsif (ssh_tty = ENV.fetch("HOMEBREW_SSH_TTY", nil).present? && File.stat("/dev/console").uid != Process.uid) || (sudo_user = ENV.fetch("HOMEBREW_SUDO_USER", nil).present?) || (Process.uid != Process.euid) if @output_warning.blank? && ENV.fetch("HOMEBREW_SERVICES_NO_DOMAIN_WARNING", nil).blank? if ssh_tty opoo "running over SSH without /dev/console ownership, using user/* instead of gui/* domain!" elsif sudo_user opoo "running through sudo, using user/* instead of gui/* domain!" else opoo "uid and euid do not match, using user/* instead of gui/* domain!" end unless Homebrew::EnvConfig.no_env_hints? puts "Hide this warning by setting `HOMEBREW_SERVICES_NO_DOMAIN_WARNING=1`." puts "Hide these hints with `HOMEBREW_NO_ENV_HINTS=1` (see `man brew`)." end @output_warning = T.let(true, T.nilable(TrueClass)) end "user/#{Process.euid}" else "gui/#{Process.uid}" end end |
.launchctl ⇒ Pathname?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Path to launchctl binary.
16 17 18 |
# File 'services/system.rb', line 16 def self.launchctl @launchctl ||= T.let(which("launchctl"), T.nilable(Pathname)) end |
.launchctl? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Is this a launchctl system
22 23 24 |
# File 'services/system.rb', line 22 def self.launchctl? launchctl.present? end |
.path ⇒ Pathname?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
If root, return boot_path
, else return user_path
.
75 76 77 |
# File 'services/system.rb', line 75 def self.path root? ? boot_path : user_path end |
.root? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Woohoo, we are root dude!
34 35 36 |
# File 'services/system.rb', line 34 def self.root? Process.euid.zero? end |
.systemctl? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Is this a systemd system
28 29 30 |
# File 'services/system.rb', line 28 def self.systemctl? Systemctl.executable.present? end |
.user ⇒ String?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Current user running [sudo] brew services
.
40 41 42 |
# File 'services/system.rb', line 40 def self.user @user ||= T.let(ENV["USER"].presence || Utils.safe_popen_read("/usr/bin/whoami").chomp, T.nilable(String)) end |
.user_of_process(pid) ⇒ String?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
45 46 47 48 49 50 51 |
# File 'services/system.rb', line 45 def self.user_of_process(pid) if pid.nil? || pid.zero? user else Utils.safe_popen_read("ps", "-o", "user", "-p", pid.to_s).lines.second&.chomp end end |
.user_path ⇒ Pathname?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Run at login.
65 66 67 68 69 70 71 |
# File 'services/system.rb', line 65 def self.user_path if launchctl? Pathname.new("#{Dir.home}/Library/LaunchAgents") elsif systemctl? Pathname.new("#{Dir.home}/.config/systemd/user") end end |