Модуль: OS::Linux::Sandbox::ClassMethods Приватный
Этот модуль является частью закрытого API. Этот модуль можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого модуля, так как он может быть удалён или изменён без предупреждения.
Краткое описание методов экземпляра свернуть
- #available? ⇒ Boolean приватный
- #bubblewrap_candidate_paths ⇒ ::PATH приватный
- #bubblewrap_executable ⇒ ::Pathname? приватный
- #bubblewrap_executable! ⇒ ::Pathname приватный
- #configuration_command_messages ⇒ Array<String> приватный
- #configuration_commands ⇒ Array<String> приватный
- #configure! ⇒ void приватный
- #ensure_sandbox_installed!(install_from_tests: false) ⇒ void приватный
- #executable_candidate_paths ⇒ ::PATH приватный
- #executable_name ⇒ String приватный
- #executable_usable?(candidate) ⇒ Boolean приватный
- #failure_reason ⇒ String? приватный
- #nested_sandbox? ⇒ Boolean приватный
Bubblewrap сообщает об этой конкретной ошибке пространства имён, когда внешняя песочница Bubblewrap не позволяет Homebrew создать ещё одну песочницу без привилегий.
- #reset_state! ⇒ void приватный
- #sandbox_install_command ⇒ String? приватный
- #state ⇒ Symbol приватный
- #system_bubblewrap_paths ⇒ Array<String> приватный
- #terminal_ioctl_request ⇒ Integer приватный
Запрос
ioctl, используемый для подключения дочернего процесса в песочнице к управляющему TTY.
Методы, включённые из 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
Подробное описание методов экземпляра
#available? ⇒ Boolean
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
194 195 196 | # File 'extend/os/linux/sandbox.rb', line 194 def available? state == :available end |
#bubblewrap_candidate_paths ⇒ ::PATH
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
149 150 151 | # File 'extend/os/linux/sandbox.rb', line 149 def bubblewrap_candidate_paths executable_candidate_paths end |
#bubblewrap_executable ⇒ ::Pathname?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
154 155 156 | # File 'extend/os/linux/sandbox.rb', line 154 def bubblewrap_executable executable end |
#bubblewrap_executable! ⇒ ::Pathname
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
159 160 161 | # File 'extend/os/linux/sandbox.rb', line 159 def bubblewrap_executable! bubblewrap_executable || raise("Bubblewrap is required to use the Linux sandbox.") end |
#configuration_command_messages ⇒ Array<String>
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
234 235 236 237 238 239 240 241 242 | # File 'extend/os/linux/sandbox.rb', line 234 def commands = configuration_commands SANDBOX_SYSCTL_SETTINGS.each_with_index.flat_map do |setting, index| [ "#{commands.fetch(index)}", *setting.description.map { |line| "#{line}" }, ] end end |
#configuration_commands ⇒ Array<String>
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
225 226 227 228 229 230 231 | # File 'extend/os/linux/sandbox.rb', line 225 def configuration_commands SANDBOX_SYSCTL_SETTINGS.map do |setting| command = "sudo sysctl -w #{setting.assignment}" command += " || true" if setting.optional command end end |
#configure! ⇒ void
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 | # File 'extend/os/linux/sandbox.rb', line 245 def configure! unless bubblewrap_executable ensure_sandbox_installed!(install_from_tests: true) unless bubblewrap_executable reset_state! return end end ohai "Configuring Bubblewrap..." command = [HOMEBREW_BREW_FILE, "setup-sandbox"] command.unshift("sudo") unless Process.euid.zero? raise ErrorDuringExecution.new(command, status: $CHILD_STATUS || 1) unless system(*command) reset_state! end |
#ensure_sandbox_installed!(install_from_tests: false) ⇒ void
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | # File 'extend/os/linux/sandbox.rb', line 164 def ensure_sandbox_installed!(install_from_tests: false) return unless Homebrew::EnvConfig.sandbox_linux? return if ENV["HOMEBREW_TESTS"] && !install_from_tests return if ENV["HOMEBREW_INSTALLING_BUBBLEWRAP"] return if bubblewrap_executable begin require "exceptions" require "formula" with_env(HOMEBREW_INSTALLING_BUBBLEWRAP: "1") do ::Formula["bubblewrap"].ensure_installed!(reason: "Linux sandboxing") end reset_state! return if bubblewrap_executable rescue ::FormulaUnavailableError nil end return unless GitHub::Actions.env_set? return unless ENV.fetch("HOMEBREW_GITHUB_HOSTED_RUNNER", nil) return unless which("apt-get") ohai "Installing Bubblewrap..." command = ["apt-get", "install", "--yes", "bubblewrap"] command.unshift("sudo") unless Process.euid.zero? system(*command) reset_state! end |
#executable_candidate_paths ⇒ ::PATH
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
144 145 146 | # File 'extend/os/linux/sandbox.rb', line 144 def executable_candidate_paths PATH.new(HOMEBREW_BUBBLEWRAP_PATHS, system_bubblewrap_paths, super) end |
#executable_name ⇒ String
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
129 130 131 | # File 'extend/os/linux/sandbox.rb', line 129 def executable_name BUBBLEWRAP end |
#executable_usable?(candidate) ⇒ Boolean
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
134 135 136 | # File 'extend/os/linux/sandbox.rb', line 134 def executable_usable?(candidate) !File.stat(candidate).setuid? end |
#failure_reason ⇒ String?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 | # File 'extend/os/linux/sandbox.rb', line 263 def failure_reason case state when :disabled, :available nil when :missing "Bubblewrap is required to use the Linux sandbox but was not found." when :setuid "A rootless Bubblewrap executable is required to use the Linux sandbox, " \ "but all found `bwrap` executables are setuid." when :unavailable "Bubblewrap is installed but cannot create a rootless sandbox." else "The Linux sandbox is not available." end end |
#nested_sandbox? ⇒ Boolean
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Bubblewrap сообщает об этой конкретной ошибке пространства имён, когда внешняя песочница Bubblewrap мешает Homebrew создать ещё одну песочницу без привилегий root. Общий avoid_nested_sandboxing? вызывает этот метод только после установки параметра согласия $HOMEBREW_AVOID_NESTED_SANDBOXING.
203 204 205 206 207 208 209 210 | # File 'extend/os/linux/sandbox.rb', line 203 def nested_sandbox? return false unless Homebrew::EnvConfig.sandbox_linux? bubblewrap = bubblewrap_executable return false unless bubblewrap Utils.popen_read(bubblewrap.to_s, *BUBBLEWRAP_TEST_ARGS, err: :out).include?(NESTED_BUBBLEWRAP_ERROR) end |
#reset_state! ⇒ void
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
220 221 222 | # File 'extend/os/linux/sandbox.rb', line 220 def reset_state! @state = T.let(nil, T.nilable(Symbol)) end |
#sandbox_install_command ⇒ String?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
280 281 282 | # File 'extend/os/linux/sandbox.rb', line 280 def sandbox_install_command BUBBLEWRAP_INSTALL_COMMANDS.find { |package_manager, _| which(package_manager) }&.last end |
#state ⇒ Symbol
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
213 214 215 216 217 | # File 'extend/os/linux/sandbox.rb', line 213 def state return :disabled unless Homebrew::EnvConfig.sandbox_linux? @state ||= T.let(compute_state, T.nilable(Symbol)) end |
#system_bubblewrap_paths ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
139 140 141 | # File 'extend/os/linux/sandbox.rb', line 139 def system_bubblewrap_paths SYSTEM_BUBBLEWRAP_PATHS end |
#terminal_ioctl_request ⇒ Integer
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Запрос ioctl используется для подключения изолированного дочернего процесса к управляющему TTY.
286 287 288 | # File 'extend/os/linux/sandbox.rb', line 286 def terminal_ioctl_request TIOCSCTTY end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/OS/Linux/Sandbox/ClassMethods.html