Spec-Zone.ru › Homebrew

Модуль: Homebrew::Services::System Приватный

Расширяет:
Utils::Output::Mixin
Определён в:
services/system.rb,
services/system/systemctl.rb

Этот модуль является частью приватного API. Этот модуль можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот модуль, поскольку он может быть удалён или изменён без предупреждения.

Определено в пространстве имён

Модули: Systemctl

Краткое описание констант свернуть

LAUNCHCTL_DOMAIN_ACTION_NOT_SUPPORTED =

Эта константа является частью приватного API. Эту константу можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать эту константу, поскольку она может быть удалена или изменена без предупреждения.

125
MISSING_DAEMON_MANAGER_EXCEPTION_MESSAGE =

Эта константа является частью приватного API. Эту константу можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать эту константу, поскольку она может быть удалена или изменена без предупреждения.

"`brew services` is supported only on macOS or Linux (with systemd)!"

Краткое описание методов класса свернуть

  • .boot_path ⇒ Pathname приватный

    Запускается при загрузке.

  • .candidate_domain_targets ⇒ Array<String> приватный
  • .domain_target ⇒ String приватный
  • .launchctl ⇒ Pathname? приватный

    Путь к исполняемому файлу launchctl.

  • .launchctl? ⇒ Boolean приватный

    Используется ли система launchctl.

  • .path ⇒ Pathname приватный

    Если это root, возвращает boot_path, иначе возвращает user_path.

  • .reset_launchctl! ⇒ void приватный
  • .root? ⇒ Boolean приватный

    Ура, мы работаем от имени root!

  • .systemctl? ⇒ Boolean приватный

    Используется ли система systemd.

  • .user ⇒ String? приватный

    Текущий пользователь, от имени которого запущен [sudo] brew services.

  • .user_exists?(username) ⇒ Boolean приватный
  • .user_of_process(pid) ⇒ String? приватный
  • .user_path ⇒ Pathname приватный

    Запускается при входе в систему.

Методы, включённые из Utils::Output::Mixin

issue_reporting_message, odebug, odeprecated, odie, odisabled, ofail, oh1, oh1_title, ohai, ohai_title, onoe, opoo, opoo_outside_github_actions, opoo_without_github_actions_annotation, pretty_deprecated, pretty_disabled, pretty_duration, pretty_install_status, pretty_installed, pretty_uninstalled, pretty_upgradable, pretty_warning

Подробное описание методов класса

.boot_path ⇒ Pathname

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Запускается при загрузке.

Возвращает:

  • (Pathname)


74
75
76
77
78
79
80
81
82
# File 'services/system.rb', line 74

def self.boot_path
  if launchctl?
    Pathname.new("/Library/LaunchDaemons")
  elsif systemctl?
    Pathname.new("/usr/lib/systemd/system")
  else
    raise UsageError, MISSING_DAEMON_MANAGER_EXCEPTION_MESSAGE
  end
end

.candidate_domain_targets ⇒ Array<String>

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<String>)


131
132
133
134
135
# File 'services/system.rb', line 131

def self.candidate_domain_targets
  candidates = [domain_target]
  candidates += ["user/#{Process.euid}", "gui/#{Process.uid}"] unless root?
  candidates.uniq
end

.domain_target ⇒ String

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String)


103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'services/system.rb', line 103

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?
        $stderr.puts "Hide this warning by setting `HOMEBREW_SERVICES_NO_DOMAIN_WARNING=1`."
        $stderr.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?

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Путь к исполняемому файлу launchctl.

Возвращает:

  • (Pathname, nil)


18
19
20
# File 'services/system.rb', line 18

def self.launchctl
  @launchctl ||= T.let(which("launchctl"), T.nilable(Pathname))
end

.launchctl? ⇒ Boolean

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Используется ли система launchctl

Возвращает:

  • (Boolean)


29
30
31
# File 'services/system.rb', line 29

def self.launchctl?
  launchctl.present?
end

.path ⇒ Pathname

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Если это root, возвращает boot_path, иначе возвращает user_path.

Возвращает:

  • (Pathname)


98
99
100
# File 'services/system.rb', line 98

def self.path
  root? ? boot_path : user_path
end

.reset_launchctl! ⇒ void

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.



23
24
25
# File 'services/system.rb', line 23

def self.reset_launchctl!
  @launchctl = nil
end

.root? ⇒ Boolean

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Ура, мы работаем от имени root!

Возвращает:

  • (Boolean)


41
42
43
# File 'services/system.rb', line 41

def self.root?
  Process.euid.zero?
end

.systemctl? ⇒ Boolean

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Используется ли система systemd

Возвращает:

  • (Boolean)


35
36
37
# File 'services/system.rb', line 35

def self.systemctl?
  Systemctl.executable.present?
end

.user ⇒ String?

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Текущий пользователь, от имени которого запущен [sudo] brew services.

Возвращает:

  • (String, nil)


47
48
49
# File 'services/system.rb', line 47

def self.user
  @user ||= T.let(ENV["USER"].presence || Utils.safe_popen_read("/usr/bin/whoami").chomp, T.nilable(String))
end

.user_exists?(username) ⇒ Boolean

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • username (String)

Возвращает:

  • (Boolean)


61
62
63
64
65
66
67
68
69
70
# File 'services/system.rb', line 61

def self.user_exists?(username)
  # Current user must be present
  return true if username == user

  # Check other users
  Etc.getpwnam(username)
  true
rescue ArgumentError
  false
end

.user_of_process(pid) ⇒ String?

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • pid (Integer, nil)

Возвращает:

  • (String, nil)


52
53
54
55
56
57
58
# File 'services/system.rb', line 52

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

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Запускается при входе в систему.

Возвращает:

  • (Pathname)


86
87
88
89
90
91
92
93
94
# File 'services/system.rb', line 86

def self.user_path
  if launchctl?
    Pathname.new("#{Dir.home}/Library/LaunchAgents")
  elsif systemctl?
    Pathname.new("#{Dir.home}/.config/systemd/user")
  else
    raise UsageError, MISSING_DAEMON_MANAGER_EXCEPTION_MESSAGE
  end
end

© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Homebrew/Services/System.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API