# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. # Vladlen Popolitov , 2025, 2026. msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-11-08 16:17+0000\n" "PO-Revision-Date: 2026-03-04 20:01+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.17\n" #. type: YAML Front Matter: description #: documentation/content/en/books/porters-handbook/testing/_index.adoc:1 #, no-wrap msgid "Testing a FreeBSD Port" msgstr "Тестирование порта FreeBSD" #. type: YAML Front Matter: title #: documentation/content/en/books/porters-handbook/testing/_index.adoc:1 #, no-wrap msgid "Chapter 10. Testing the Port" msgstr "Глава 10. Тестирование вашего порта" #. type: Title = #: documentation/content/en/books/porters-handbook/testing/_index.adoc:14 #, no-wrap msgid "Testing the Port" msgstr "Тестирование порта" #. type: Title == #: documentation/content/en/books/porters-handbook/testing/_index.adoc:52 #, no-wrap msgid "Running `make describe`" msgstr "Запуск `make describe`" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:57 msgid "" "Several of the FreeBSD port maintenance tools, such as man:portupgrade[1], " "rely on a database called [.filename]#/usr/ports/INDEX# which keeps track of " "such items as port dependencies. [.filename]#INDEX# is created by the top-" "level [.filename]#ports/Makefile# via `make index`, which descends into each " "port subdirectory and executes `make describe` there. Thus, if `make " "describe` fails in any port, no one can generate [.filename]#INDEX#, and " "many people will quickly become unhappy." msgstr "" "Некоторые утилиты FreeBSD для сопровождения портов, например, man:" "portupgrade[1], опираются на базу данных с именем [.filename]#/usr/ports/" "INDEX#, в которой отслеживаются такие характеристики портов, как их " "зависимости. Файл [.filename]#INDEX# создаётся при помощи [.filename]#ports/" "Makefile# верхнего уровня по команде `make index`, спускающейся в подкаталог " "каждого порта и выполняющей в нём `make describe`. Таким образом, если " "выполнение `make describe` с каким-либо портом завершится неудачно, то " "никому не удастся создать [.filename]#INDEX#, при этом много людей вскоре " "станут несчастны." #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:62 msgid "" "It is important to be able to generate this file no matter what options are " "present in [.filename]#make.conf#, so please avoid doing things such as " "using `.error` statements when (for instance) a dependency is not " "satisfied. (See crossref:porting-dads[dads-dot-error,Avoid Use of the `." "error` Construct].)" msgstr "" "Возможность генерировать этот файл очень важна вне зависимости от того, " "какие параметры присутствуют в [.filename]#make.conf#, поэтому, пожалуйста, " "избегайте, таких вещей, как использование декларации `.error`, когда (к " "примеру) требования к зависимости не было удовлетворено. (Смотрите crossref:" "porting-dads[dads-dot-error, Избегайте использования конструкции `.error`].)" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:66 msgid "" "If `make describe` produces a string rather than an error message, " "everything is probably safe. See [.filename]#bsd.port.mk# for the meaning " "of the string produced." msgstr "" "Если `make describe` выдаёт строчку, а не ошибку, то для вас это пройдёт " "безболезненно. Обратитесь к файлу [.filename]#bsd.port.mk#, чтобы выяснить " "значение выдаваемых строк." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:68 msgid "" "Also note that running a recent version of `portlint` (as specified in the " "next section) will cause `make describe` to be run automatically." msgstr "" "Также обратите внимание, что запуск актуальной версии `portlint` (как " "указано в следующем разделе) приведёт к автоматическому выполнению `make " "describe`." #. type: Title == #: documentation/content/en/books/porters-handbook/testing/_index.adoc:70 #, no-wrap msgid "Running `make test`" msgstr "Запуск `make test`" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:76 msgid "" "Even if the port builds fine, it is a good idea to ensure that the software " "correctly does what it is supposed to do. If the original upstream project " "provides tests along with the software, it is a good idea to run them and " "check everything works as expected." msgstr "" "Даже если порт успешно собирается, рекомендуется убедиться, что программа " "корректно выполняет свои функции. Если исходный проект предоставляет тесты " "вместе с программным обеспечением, рекомендуется их запустить и проверить, " "что всё работает, как ожидается." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:81 msgid "" "A port can enable tests automatically by using the `TEST_TARGET` variable. " "When set, this variable contains the name of the testing target of the " "port. This is usually just `test` but other names include `tests`, `check` " "or for specific cases things like `run_tests.py`." msgstr "" "Порт может автоматически включить тесты, используя переменную `TEST_TARGET`. " "Когда эта переменная установлена, она содержит имя цели тестирования порта. " "Обычно это просто `test`, но другие варианты включают `tests`, `check` или, " "в специфических случаях, такие значения, как `run_tests.py`." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:84 msgid "" "In addition to the `TEST_TARGET` variable the framework provides the " "following variables to control the tests execution:" msgstr "" "В дополнение к переменной `TEST_TARGET` фреймворк предоставляет следующие " "переменные для управления выполнением тестов:" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:86 msgid "`TEST_WRKSRC` is the directory to do the tests in." msgstr "`TEST_WRKSRC` — это каталог для выполнения тестов." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:87 msgid "" "`TEST_ENV` contains additional variables to be passed to the test stage." msgstr "" "`TEST_ENV` содержит дополнительные переменные, которые передаются на этап " "тестирования." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:88 msgid "`TEST_ARGS` contains any extra arguments passed to the test stage." msgstr "" "`TEST_ARGS` содержит любые дополнительные аргументы, переданные на этапе " "тестирования." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:91 msgid "" "Examples of use of these variables can be found in package:cad/xyce[], " "package:www/libjwt[] and others." msgstr "" "Примеры использования этих переменных можно найти в package:cad/xyce[], " "package:www/libjwt[] и других." #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:95 msgid "Please make sure that tests do not break when updating a port." msgstr "Убедитесь, что тесты не ломаются при обновлении порта." #. type: Title == #: documentation/content/en/books/porters-handbook/testing/_index.adoc:99 #, no-wrap msgid "Portclippy / Portfmt" msgstr "Portclippy / Portfmt" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:102 msgid "Those tools come from package:ports-mgmt/portfmt[]." msgstr "Эти инструменты поставляются из пакета:ports-mgmt/portfmt[]." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:104 msgid "" "Portclippy is a linter that checks if variables in the [.filename]#Makefile# " "are in the correct order according to crossref:order[porting-order,Order of " "Variables in Port Makefiles]." msgstr "" "Portclippy — это линтер, проверяющий, расположены ли переменные в файле [." "filename]#Makefile# в правильном порядке согласно crossref:order[porting-" "order,Порядку переменных в Makefile портов]." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:106 msgid "Portfmt is a tool for automatically formatting [.filename]#Makefile#." msgstr "" "Portfmt — это инструмент для автоматического форматирования [." "filename]#Makefile#." #. type: Title == #: documentation/content/en/books/porters-handbook/testing/_index.adoc:108 #, no-wrap msgid "Portlint" msgstr "Portlint" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:113 msgid "" "Do check the port with crossref:quick-porting[porting-portlint,`portlint`] " "before submitting or committing it. `portlint` warns about many common " "errors, both functional and stylistic. For a new port, `portlint -A` is the " "most thorough; for an existing port, `portlint -C` is sufficient." msgstr "" "Проверьте свою работу командой crossref:quick-porting[porting-portlint," "`portlint`] перед тем, как её отослать или перенести в дерево портов. " "`portlint` предупреждает вас о многих распространённых ошибках, как " "функциональных, так и стилистических. Для нового (или скопированного внутри " "хранилища) порта самым подходящим является запуск `portlint -A`; для уже " "существующего порта достаточно будет запустить `portlint -C`." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:117 msgid "" "Since `portlint` uses heuristics to try to figure out errors, it can produce " "false positive warnings. In addition, occasionally something that is " "flagged as a problem really cannot be done in any other way due to " "limitations in the ports framework. When in doubt, the best thing to do is " "ask on {freebsd-ports}." msgstr "" "Так как для обнаружения ошибок `portlint` использует эвристические методы, " "то им могут выдаваться и ошибочные предупреждения. Кроме того, время от " "времени нечто, отмечаемое как некорректность, из-за ограничений механизма " "создания портов не может быть сделано никак иначе. Если вы сомневаетесь, то " "лучше всего спросить в {freebsd-ports}." #. type: Title == #: documentation/content/en/books/porters-handbook/testing/_index.adoc:119 #, no-wrap msgid "Port Tools" msgstr "Инструменты для работы с портами" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:122 msgid "" "The package:ports-mgmt/porttools[] program is part of the Ports Collection." msgstr "" "Программа package:ports-mgmt/porttools[] входит в состав Коллекции Портов." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:128 msgid "" "`port` is the front-end script, which can help simplify the testing job. " "Whenever a new port or an update to an existing one needs testing, use `port " "test` to test the port, including the crossref:testing[testing-portlint," "`portlint`] checking. This command also detects and lists any files that " "are not listed in [.filename]#pkg-plist#. For example:" msgstr "" "`port` является сценарием переднего плана, который может упростить вам " "задачу тестирования. Если вы хотите проверить новый порт или обновить " "существующий, то вы можете использовать `port test` для проверки вашего " "порта, включая проверку crossref:testing[testing-portlint,`portlint`]. Эта " "команда также находит и отображает любые файлы, которые невключенные в [." "filename]#pkg-plist#. Смотрите следующий пример:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:132 #, no-wrap msgid "# port test /usr/ports/net/csup\n" msgstr "# port test /usr/ports/net/csup\n" #. type: Title == #: documentation/content/en/books/porters-handbook/testing/_index.adoc:135 #, no-wrap msgid "`PREFIX` and `DESTDIR`" msgstr "`PREFIX` и `DESTDIR`" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:140 msgid "" "`PREFIX` determines where the port will be installed. It defaults to [." "filename]#/usr/local#, but can be set by the user to a custom path like [." "filename]#/opt#. The port must respect the value of this variable." msgstr "" "Переменная `PREFIX` определяет, куда будет установлен порт. По умолчанию это " "[.filename]#/usr/local#, но может меняться пользователем на собственный " "путь, такой как [.filename]#/opt#. В вашем порту значение этой переменной " "должно учитываться." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:145 msgid "" "`DESTDIR`, if set by the user, determines the complete alternative " "environment, usually a jail or an installed system mounted somewhere other " "than [.filename]#/#. A port will actually install into [.filename]#DESTDIR/" "PREFIX#, and register with the package database in [.filename]#DESTDIR/var/" "db/pkg#. `DESTDIR` is handled automatically by the ports infrastructure " "with man:chroot[8]. There is no need for modifications or any extra care to " "write `DESTDIR`-compliant ports." msgstr "" "Если пользователь установил переменную `DESTDIR`, то она определяет полное " "альтернативное окружение, обычно, это jail или установленная система, " "смонтированная в месте, отличном от [.filename]#/#. На самом деле порт " "устанавливается в [.filename]#DESTDIR/PREFIX# и регистрируется в базе данных " "пакетов в [.filename]#DESTDIR/var/db/pkg#. Поскольку управление `DESTDIR` " "производится автоматически инфраструктурой портов с помощью man:chroot[8], " "вам не нужны никакие изменения или проявление особой осторожности при " "написании портов, совместимых с `DESTDIR`." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:148 msgid "" "The value of `PREFIX` will be set to `LOCALBASE` (defaulting to [.filename]#/" "usr/local#). If `USE_LINUX_PREFIX` is set, `PREFIX` will be `LINUXBASE` " "(defaulting to [.filename]#/compat/linux#)." msgstr "" "Значение переменной `PREFIX` будет установлено в `LOCALBASE` (по умолчанию [." "filename]#/usr/local#). Если задана переменная `USE_LINUX_PREFIX`, то " "`PREFIX` примет значение `LINUXBASE` (по умолчанию [.filename]#/compat/" "linux#)." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:152 msgid "" "Avoiding hard-coded [.filename]#/usr/local# paths in the source makes the " "port much more flexible and able to cater to the needs of other sites. " "Often, this can be accomplished by replacing occurrences of [.filename]#/usr/" "local# in the port's various [.filename]##Makefile##s with `${PREFIX}`. " "This variable is automatically passed down to every stage of the build and " "install processes." msgstr "" "Избегание явно прописываемых путей [.filename]#/usr/local# в исходном коде " "сделает порт гораздо более гибким и способным удовлетворить потребности " "других серверов. Часто этого можно добиться простой заменой строк [." "filename]#/usr/local# в различных файлах [.filename]#Makefile# внутри порта " "на `${PREFIX}`. Эта переменная автоматически передаётся далее на каждом " "этапе построения и установки." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:155 msgid "" "Make sure the application is not installing things in [.filename]#/usr/" "local# instead of `PREFIX`. A quick test for such hard-coded paths is:" msgstr "" "Проверьте, что ваше приложение не устанавливает чего-либо в каталог [." "filename]#/usr/local# вместо `PREFIX`. Наличие явно указанных путей можно " "быстро проверить следующим образом:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:159 #, no-wrap msgid "% make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`\n" msgstr "% make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:162 msgid "" "If anything is installed outside of `PREFIX`, the package creation process " "will complain that it cannot find the files." msgstr "" "Если что-то было установлено за пределами `PREFIX`, то процесс создания " "пакета сообщит об отсутствии файлов." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:164 msgid "" "In addition, it is worth checking the same with the stage directory support " "(see crossref:special[staging,Staging]):" msgstr "" "Это также стоит проверить с использованием поддержки каталога сборки " "(смотрите crossref:special[staging, Staging]):" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:168 #, no-wrap msgid "% make stage && make check-plist && make stage-qa && make package\n" msgstr "% make stage && make check-plist && make stage-qa && make package\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:171 msgid "" "`check-plist` checks for files missing from the plist, and files in the " "plist that are not installed by the port." msgstr "" "`check-plist` проверяет отсутствующие в plist файлы и файлы в plist, которые " "не установлены портом." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:172 msgid "" "`stage-qa` checks for common problems like bad shebang, symlinks pointing " "outside the stage directory, setuid files, and non-stripped libraries..." msgstr "" "`stage-qa` проверяет наличие распространённых проблем, таких как " "неправильный шебанг (интерпретаторная строка в первой строке скрипта), " "символьные ссылки, указывающие за пределы каталога стадии,файлы с setuid " "битом и библиотеки с отладочной информацией..." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:175 msgid "" "These tests will not find hard-coded paths inside the port's files, nor will " "it verify that `LOCALBASE` is being used to correctly refer to files from " "other ports. The temporarily installed port in [.filename]#/var/tmp/`make -" "V PORTNAME`# must be tested for proper operation to make sure there are no " "problems with paths." msgstr "" "Эти тесты не обнаружат жёстко заданные пути в файлах порта, а также не " "проверят, что `LOCALBASE` используется корректно для ссылок на файлы из " "других портов. Временно установленный порт в [.filename]#/var/tmp/`make -V " "PORTNAME`# должен быть протестирован на корректную работу, чтобы убедиться в " "отсутствии проблем с путями." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:178 msgid "" "`PREFIX` must not be set explicitly in a port's [.filename]#Makefile#. " "Users installing the port may have set `PREFIX` to a custom location, and " "the port must respect that setting." msgstr "" "`PREFIX` не должен быть явно установлен в [.filename]#Makefile# порта. " "Пользователи, устанавливающие порт, могут задать `PREFIX` в другом месте, и " "порт должен учитывать эту настройку." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:182 msgid "" "Refer to programs and files from other ports with the variables mentioned " "above, not explicit pathnames. For instance, if the port requires a macro " "`PAGER` to have the full pathname of `less`, do not use a literal path of [." "filename]#/usr/local/bin/less#. Instead, use `${LOCALBASE}`:" msgstr "" "Обращайтесь к программам и файлам из других портов с помощью упомянутых выше " "переменных, а не явных путей. Например, если порт требует, чтобы макрос " "`PAGER` содержал полный путь к `less`, не используйте явный путь [." "filename]#/usr/local/bin/less#. Вместо этого используйте `${LOCALBASE}`:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:186 #, no-wrap msgid "-DPAGER=\\\"${LOCALBASE}/bin/less\\\"\n" msgstr "-DPAGER=\\\"${LOCALBASE}/bin/less\\\"\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:189 msgid "" "The path with `LOCALBASE` is more likely to still work if the system " "administrator has moved the whole [.filename]#/usr/local# tree somewhere " "else." msgstr "" "Путь с `LOCALBASE` с большей вероятностью продолжит работать, если системный " "администратор переместил всё дерево [.filename]#/usr/local# в другое место." #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:195 msgid "" "All these tests are done automatically when running `poudriere testport` or " "`poudriere bulk -t`. It is highly recommended that every ports contributor " "install and test their ports with it. See crossref:testing[testing-" "poudriere, poudriere] for more information." msgstr "" "Все эти тесты выполняются автоматически при запуске `poudriere testport` или " "`poudriere bulk -t`. Настоятельно рекомендуется каждому участнику разработки " "портов устанавливать и тестировать свои порты с помощью этого инструмента. " "Дополнительную информацию можно найти в crossref:testing[testing-poudriere, " "poudriere]." #. type: Title == #: documentation/content/en/books/porters-handbook/testing/_index.adoc:198 #, no-wrap msgid "poudriere" msgstr "poudriere" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:202 msgid "" "For a ports contributor, poudriere is one of the most important and helpful " "testing and build tools. Its main features include:" msgstr "" "Для контрибьютора портов poudriere является одним из самых важных и полезных " "инструментов для тестирования и сборки. Его основные возможности включают:" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:204 msgid "" "Bulk building of the entire ports tree, specific subsets of the ports tree, " "or a single port including its dependencies" msgstr "" "Массовая сборка всего дерева портов, определённых подмножеств дерева портов " "или отдельного порта с его зависимостями" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:205 msgid "Automatic packaging of build results" msgstr "Автоматическая упаковка результатов сборки" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:206 msgid "Generation of build log files per port" msgstr "Генерация файлов журнала сборки для каждого порта" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:207 msgid "Providing a signed man:pkg[8] repository" msgstr "Предоставление подписанного репозитория man:pkg[8]" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:208 msgid "" "Testing of port builds before submitting a patch to the FreeBSD bug tracker " "or committing to the ports tree" msgstr "" "Тестирование сборки портов перед отправкой патча в трекер ошибок FreeBSD или " "внесением изменений в дерево портов" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:209 msgid "Testing for successful ports builds using different options" msgstr "" "Тестирование успешных сборок портов с использованием различных параметров" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:212 msgid "" "Because poudriere performs its building in a clean man:jail[8] environment " "and uses man:zfs[8] features, it has several advantages over traditional " "testing on the host system:" msgstr "" "Поскольку poudriere выполняет сборку в чистой среде man:jail[8] и использует " "возможности man:zfs[8], он имеет несколько преимуществ по сравнению с " "традиционным тестированием на основной системе:" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:214 msgid "" "No pollution of the host environment: No leftover files, no accidental " "removals, no changes of existing configuration files." msgstr "" "Отсутствие загрязнения основной среды: никаких оставшихся файлов, случайных " "удалений или изменений существующих конфигурационных файлов." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:215 msgid "Verify [.filename]#pkg-plist# for missing or superfluous entries" msgstr "" "Проверяет [.filename]#pkg-plist# на наличие отсутствующих или лишних записей" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:216 msgid "" "Ports committers sometimes ask for a poudriere log alongside a patch " "submission to assess whether the patch is ready for integration into the " "ports tree" msgstr "" "Коммиттеры портов иногда запрашивают журнал poudriere вместе с отправкой " "патча, чтобы оценить, готов ли патч для интеграции в дерево портов" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:219 msgid "" "It is also quite straightforward to set up and use, has no dependencies, and " "will run on any supported FreeBSD release. This section shows how to " "install, configure, and run poudriere as part of the normal workflow of a " "ports contributor." msgstr "" "Также его настройка и использование довольно просты, он не имеет " "зависимостей и будет работать в любой поддерживаемой версии FreeBSD. В этом " "разделе показано, как установить, настроить и запустить poudriere в рамках " "обычного рабочего процесса разработчика портов." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:224 msgid "" "The examples in this section show a default file layout, as standard in " "FreeBSD. Substitute any local changes accordingly. The ports tree, " "represented by `${PORTSDIR}`, is located in [.filename]#/usr/ports#. Both `" "${LOCALBASE}` and `${PREFIX}` are [.filename]#/usr/local# by default." msgstr "" "Примеры в этом разделе показывают стандартную структуру файлов, принятую в " "FreeBSD. Внесите соответствующие изменения, если у вас используются другие " "настройки. Дерево портов, обозначаемое как `${PORTSDIR}`, находится в [." "filename]#/usr/ports#. По умолчанию `${LOCALBASE}` и `${PREFIX}` указывают " "на [.filename]#/usr/local#." #. type: Title === #: documentation/content/en/books/porters-handbook/testing/_index.adoc:226 #, no-wrap msgid "Installing poudriere" msgstr "Установка poudriere" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:230 msgid "" "poudriere is available in the ports tree in package:ports-mgmt/poudriere[]. " "It can be installed using man:pkg[8] or from ports:" msgstr "" "poudriere доступен в дереве портов в пакете package:ports-mgmt/poudriere[]. " "Его можно установить с помощью man:pkg[8] или из портов:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:234 #, no-wrap msgid "# pkg install poudriere\n" msgstr "# pkg install poudriere\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:237 msgid "or" msgstr "или" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:241 #, no-wrap msgid "# make -C /usr/ports/ports-mgmt/poudriere install clean\n" msgstr "# make -C /usr/ports/ports-mgmt/poudriere install clean\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:252 msgid "" "There is also a work-in-progress version of poudriere which will eventually " "become the next release. It is available in package:ports-mgmt/poudriere-" "devel[]. This development version is used for the official FreeBSD package " "builds, so it is well tested. It often has newer interesting features. A " "ports committer will want to use the development version because it is what " "is used in production, and has all the new features that will make sure " "everything is exactly right. A contributor will not necessarily need those " "as the most important fixes are backported to released version. The main " "reason for the use of the development version to build the official package " "is because it is faster, in a way that will shorten a full build from 18 " "hours to 17 hours when using a high end 32 CPU server with 128GB of RAM. " "Those optimizations will not matter a lot when building ports on a desktop " "machine." msgstr "" "Также существует версия poudriere в разработке, которая в конечном итоге " "станет следующим релизом. Она доступна в пакете:ports-mgmt/poudriere-" "devel[]. Эта версия используется для официальных сборок пакетов FreeBSD, " "поэтому она хорошо протестирована. В ней часто появляются новые интересные " "функции. Коммиттер портов захочет использовать версию в разработке, так как " "именно она используется в продакшене и содержит все новые функции, которые " "гарантируют, что всё будет работать идеально. Контрибьютору не обязательно " "нужны эти функции, так как наиболее важные исправления переносятся в " "выпущенную версию. Основная причина использования версии в разработке для " "сборки официальных пакетов заключается в её скорости — она позволяет " "сократить время полной сборки с 18 до 17 часов при использовании " "высокопроизводительного сервера с 32 CPU и 128 ГБ оперативной памяти. Эти " "оптимизации не будут столь значимы при сборке портов на настольном " "компьютере." #. type: Title === #: documentation/content/en/books/porters-handbook/testing/_index.adoc:254 #, no-wrap msgid "Setting Up poudriere" msgstr "Настройка poudriere" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:258 msgid "" "The port installs a default configuration file, [.filename]#/usr/local/etc/" "poudriere.conf#. Each parameter is documented in the configuration file." msgstr "" "Порт устанавливает файл конфигурации по умолчанию, [.filename]#/usr/local/" "etc/poudriere.conf#. Каждый параметр описан в этом файле конфигурации." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:260 msgid "Here is a minimal example config file:" msgstr "Вот минимальный пример конфигурационного файла:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:267 #, no-wrap msgid "" "ZPOOL=zroot\n" "BASEFS=/usr/local/poudriere\n" "DISTFILES_CACHE=/usr/ports/distfiles\n" "RESOLV_CONF=/etc/resolv.conf\n" msgstr "" "ZPOOL=zroot\n" "BASEFS=/usr/local/poudriere\n" "DISTFILES_CACHE=/usr/ports/distfiles\n" "RESOLV_CONF=/etc/resolv.conf\n" #. type: Labeled list #: documentation/content/en/books/porters-handbook/testing/_index.adoc:269 #, no-wrap msgid "`ZPOOL`" msgstr "`ZPOOL`" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:272 msgid "" "The name of the ZFS storage pool which poudriere shall use. Must be listed " "in the output of `zpool status`." msgstr "" "Имя пула хранения ZFS, который будет использовать poudriere. Должно быть " "указано в выводе команды `zpool status`." #. type: Labeled list #: documentation/content/en/books/porters-handbook/testing/_index.adoc:273 #, no-wrap msgid "`BASEFS`" msgstr "`BASEFS`" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:276 msgid "" "The root mount point for poudriere file systems. This entry will cause " "poudriere to mount `tank/poudriere` to `/poudriere`." msgstr "" "Корневая точка монтирования файловых систем poudriere. Эта запись приведет к " "тому, что poudriere смонтирует `tank/poudriere` в `/poudriere`." #. type: Labeled list #: documentation/content/en/books/porters-handbook/testing/_index.adoc:277 #, no-wrap msgid "`DISTFILES_CACHE`" msgstr "`DISTFILES_CACHE`" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:282 msgid "" "Defines where distfiles are stored. In this example, poudriere and the host " "share the distfiles storage directory. This avoids downloading tarballs " "which are already present on the system. Please create this directory if it " "does not already exist so that poudriere can find it." msgstr "" "Определяет, где хранятся distfiles. В этом примере poudriere и хост " "используют общий каталог для хранения distfiles. Это позволяет избежать " "загрузки tарболов, которые уже присутствуют в системе. Пожалуйста, создайте " "этот каталог, если он ещё не существует, чтобы poudriere мог его найти." #. type: Labeled list #: documentation/content/en/books/porters-handbook/testing/_index.adoc:283 #, no-wrap msgid "`RESOLV_CONF`" msgstr "`RESOLV_CONF`" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:288 msgid "" "Use the host [.filename]#/etc/resolv.conf# inside jails for DNS. This is " "needed so jails can resolve the URLs of distfiles when downloading. It is " "not needed when using a proxy. Refer to the default configuration file for " "proxy configuration." msgstr "" "Используйте файл [.filename]#/etc/resolv.conf# хоста внутри клеток для DNS. " "Это необходимо, чтобы клетки могли разрешать URL-адреса distfiles при " "загрузке. Это не требуется при использовании прокси. Обратитесь к файлу " "конфигурации по умолчанию для настройки прокси." #. type: Title === #: documentation/content/en/books/porters-handbook/testing/_index.adoc:290 #, no-wrap msgid "Creating poudriere Jails" msgstr "Создание клеток poudriere" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:293 msgid "Create the base jails which poudriere will use for building:" msgstr "" "Создайте базовые клетки, которые poudriere будет использовать для сборки:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:297 #, no-wrap msgid "# poudriere jail -c -j 143Ramd64 -v 14.3-RELEASE -a amd64\n" msgstr "# poudriere jail -c -j 143Ramd64 -v 14.3-RELEASE -a amd64\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:302 msgid "" "Fetch a `14.3-RELEASE` for `amd64` from the HTTPS server given by " "`FREEBSD_HOST` in [.filename]#poudriere.conf#, create the zfs file system " "`tank/poudriere/jails/143Ramd64`, mount it on [.filename]#/poudriere/" "jails/143Ramd64# and extract the `14.3-RELEASE` tarballs into this file " "system." msgstr "" "Загрузите `14.3-RELEASE` для `amd64` с HTTPS-сервера, указанного в " "`FREEBSD_HOST` в [.filename]#poudriere.conf#, создайте ZFS-файловую систему `" "tank/poudriere/jails/143Ramd64`, смонтируйте её в [.filename]#/poudriere/" "jails/143Ramd64# и распакуйте тарболлы `14.3-RELEASE` в эту файловую систему." #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:306 #, no-wrap msgid "# poudriere jail -c -j 13i386 -v stable/13 -a i386 -m git+https\n" msgstr "# poudriere jail -c -j 13i386 -v stable/13 -a i386 -m git+https\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:311 msgid "" "Create `tank/poudriere/jails/13i386`, mount it on [.filename]#/poudriere/" "jails/13i386#, then check out the tip of the Git branch of `FreeBSD-13-" "STABLE` from `GIT_HOST` in [.filename]#poudriere.conf# or the default `git." "freebsd.org` into [.filename]#/poudriere/jails/13i386/usr/src#, then " "complete a `buildworld` and install it into [.filename]#/poudriere/" "jails/13i386#." msgstr "" "Создайте `tank/poudriere/jails/13i386`, смонтируйте его на [.filename]#/" "poudriere/jails/13i386#, затем извлеките верхушку ветки Git " "`FreeBSD-13-STABLE` из `GIT_HOST` в [.filename]#poudriere.conf# или по " "умолчанию `git.freebsd.org` в [.filename]#/poudriere/jails/13i386/usr/src#, " "после чего выполните `buildworld` и установите его в [.filename]#/poudriere/" "jails/13i386#." #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:317 msgid "" "While it is possible to build a newer version of FreeBSD on an older " "version, most of the time it will not run. For example, if a `stable/14` " "jail is needed, the host will have to run `stable/14` too. Running `14.3-" "RELEASE` is not enough." msgstr "" "Хотя возможно собрать более новую версию FreeBSD на старой версии, в " "большинстве случаев она не запустится. Например, если требуется клетка на `" "stable/14`, то хост также должен работать на `stable/14`. Запуск `14." "3-RELEASE` недостаточен." #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:322 msgid "To create a poudriere jail for `16.0-CURRENT`:" msgstr "Для создания клетки poudriere для `16.0-CURRENT`:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:326 #, no-wrap msgid "# poudriere jail -c -j 16amd64 -v main -a amd64 -m git+https\n" msgstr "# poudriere jail -c -j 16amd64 -v main -a amd64 -m git+https\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:331 msgid "" "In order to run a `16.0-CURRENT` poudriere jail the host must be running " "`16.0-CURRENT`. In general, newer kernels can build and run older jails. " "For instance, a `16.0-CURRENT` kernel can build and run a `14.3-STABLE` if " "the `COMPAT_FREEBSD14` kernel option was compiled in (on by default in `16.0-" "CURRENT`[.filename]#GENERIC# kernel config)." msgstr "" "Для запуска клетки `16.0-CURRENT` poudriere хостовая система должна работать " "под управлением `16.0-CURRENT`. В общем случае, более новые ядра могут " "собирать и запускать более старые клетки. Например, ядро `16.0-CURRENT` " "может собирать и запускать клетку `14.3-STABLE`, если параметр ядра " "`COMPAT_FREEBSD14` был скомпилирован (включен по умолчанию в конфигурации " "ядра [.filename]#GENERIC# `16.0-CURRENT`)." #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:334 msgid "" "A list of jails currently known to poudriere can be shown with `poudriere " "jail -l`:" msgstr "" "Список клеток, известных poudriere, можно вывести с помощью команды " "`poudriere jail -l`:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:341 #, no-wrap msgid "" "# poudriere jail -l\n" "JAILNAME VERSION ARCH METHOD\n" "143Ramd64 14.3-RELEASE amd64 http\n" "13i386 13.5-STABLE i386 git+https\n" msgstr "" "# poudriere jail -l\n" "JAILNAME VERSION ARCH METHOD\n" "143Ramd64 14.3-RELEASE amd64 http\n" "13i386 13.5-STABLE i386 git+https\n" #. type: Title === #: documentation/content/en/books/porters-handbook/testing/_index.adoc:344 #, no-wrap msgid "Keeping poudriere Jails Updated" msgstr "Обновление клеток poudriere" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:348 msgid "Managing updates is very straightforward. The command:" msgstr "Управление обновлениями очень простое. Команда:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:352 #, no-wrap msgid "# poudriere jail -u -j JAILNAME\n" msgstr "# poudriere jail -u -j JAILNAME\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:357 msgid "" "updates the specified jail to the latest version available. For FreeBSD " "releases, update to the latest patchlevel with man:freebsd-update[8]. For " "FreeBSD versions built from source, update to the latest git revision in the " "branch." msgstr "" "обновляет указанную клетку до последней доступной версии. Для релизов " "FreeBSD обновление до последнего уровня исправлений с помощью man:freebsd-" "update[8]. Для версий FreeBSD, собранных из исходников, обновление до " "последней ревизии git в ветке." #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:362 msgid "" "For jails employing a `git+*` method, it is helpful to add `-J " "_NumberOfParallelBuildJobs_` to speed up the build by increasing the number " "of parallel compile jobs used. For example, if the building machine has 6 " "CPUs, use:" msgstr "" "Для клеток, использующих метод `git+*`, полезно добавить `-J " "_КоличествоПараллельныхСборок_` для ускорения сборки за счёт увеличения " "количества параллельных задач компиляции. Например, если на машине для " "сборки 6 CPU, используйте:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:366 #, no-wrap msgid "# poudriere jail -u -J 6 -j JAILNAME\n" msgstr "# poudriere jail -u -J 6 -j JAILNAME\n" #. type: Title === #: documentation/content/en/books/porters-handbook/testing/_index.adoc:371 #, no-wrap msgid "Setting Up Ports Trees for Use with poudriere" msgstr "Настройка деревьев портов для использования с poudriere" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:375 msgid "" "There are multiple ways to use ports trees in poudriere. The most " "straightforward way is to have poudriere create a default ports tree for " "itself, using link:{handbook}mirrors/#git[Git]:" msgstr "" "Существует несколько способов использования деревьев портов в poudriere. " "Наиболее простой способ — позволить poudriere создать для себя дерево портов " "по умолчанию, используя link:{handbook}mirrors/#git[Git]:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:379 #, no-wrap msgid "# poudriere ports -c -m git+https -B main\n" msgstr "# poudriere ports -c -m git+https -B main\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:383 msgid "" "These commands create `tank/poudriere/ports/default`, mount it on [." "filename]#/poudriere/ports/default#, and populate it using Git. Afterward " "it is included in the list of known ports trees:" msgstr "" "Эти команды создают `tank/poudriere/ports/default`, монтируют его в [." "filename]#/poudriere/ports/default# и заполняют с помощью Git. После этого " "он включается в список известных деревьев портов:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:389 #, no-wrap msgid "" "# poudriere ports -l\n" "PORTSTREE METHOD TIMESTAMP PATH\n" "default git+https 2025-07-20 04:23:56 /poudriere/ports/default\n" msgstr "" "# poudriere ports -l\n" "PORTSTREE METHOD TIMESTAMP PATH\n" "default git+https 2025-07-20 04:23:56 /poudriere/ports/default\n" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:396 msgid "" "Note that the \"default\" ports tree is special. Each of the build commands " "explained later will implicitly use this ports tree unless specifically " "specified otherwise. To use another tree, add `-p _treename_` to the " "commands." msgstr "" "Обратите внимание, что дерево портов \"default\" является особым. Каждая из " "команд сборки, объяснённых далее, будет неявно использовать это дерево " "портов, если явно не указано иное. Чтобы использовать другое дерево, " "добавьте `-p _treename_` к командам." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:401 msgid "" "The best way to deal with local modifications for a ports contributor is to " "use link:{handbook}mirrors/#git[Git]. As with the creation of jails, it is " "possible to use a different method for creating the ports tree. To add an " "additional ports tree for testing local modifications and ports development, " "checking out the tree via git (as described above) is preferable." msgstr "" "Лучший способ работы с локальными изменениями для разработчика портов — " "использовать link:{handbook}mirrors/#git[Git]. Как и при создании клеток, " "можно использовать другой метод для создания дерева портов. Чтобы добавить " "дополнительное дерево портов для тестирования локальных изменений и " "разработки портов, предпочтительно использовать клонирование дерева через " "git (как описано выше)." #. type: Title === #: documentation/content/en/books/porters-handbook/testing/_index.adoc:403 #, no-wrap msgid "Using Manually Managed Ports Trees with poudriere" msgstr "Использование управляемых вручную деревьев портов с помощью poudriere" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:407 msgid "" "Depending on the workflow, it can be extremely helpful to use ports trees " "which are maintained manually. For instance, if there is a local copy of " "the ports tree in [.filename]#/work/ports#, point poudriere to the location:" msgstr "" "В зависимости от рабочего процесса может быть крайне полезно использовать " "деревья портов, которые поддерживаются вручную. Например, если существует " "локальная копия дерева портов в [.filename]#/work/ports#, укажите poudriere " "на это расположение:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:411 #, no-wrap msgid "# poudriere ports -c -m null -M /work/ports -p development\n" msgstr "# poudriere ports -c -m null -M /work/ports -p development\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:414 msgid "This will be listed in the table of known trees:" msgstr "Это будет указано в таблице известных деревьев:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:420 #, no-wrap msgid "" "# poudriere ports -l\n" "PORTSTREE METHOD TIMESTAMP PATH\n" "development null 2025-07-20 05:06:33 /work/ports\n" msgstr "" "# poudriere ports -l\n" "PORTSTREE METHOD TIMESTAMP PATH\n" "development null 2025-07-20 05:06:33 /work/ports\n" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:426 msgid "" "The dash or `null` in the `METHOD` column means that poudriere will not " "update or change this ports tree, ever. It is completely up to the user to " "maintain this tree, including all local modifications that may be used for " "testing new ports and submitting patches." msgstr "" "Тире или `null` в колонке `METHOD` означает, что poudriere никогда не будет " "обновлять или изменять это дерево портов. Полностью на пользователе лежит " "ответственность за поддержку этого дерева, включая все локальные изменения, " "которые могут использоваться для тестирования новых портов и отправки " "исправлений." #. type: Title === #: documentation/content/en/books/porters-handbook/testing/_index.adoc:429 #, no-wrap msgid "Keeping poudriere Ports Trees Updated" msgstr "Обновление деревьев портов poudriere" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:432 msgid "As straightforward as with jails described earlier:" msgstr "Так же просто, как с клетками, описанными ранее:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:436 #, no-wrap msgid "# poudriere ports -u -p PORTSTREE\n" msgstr "# poudriere ports -u -p PORTSTREE\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:439 msgid "" "Will update the given _PORTSTREE_, one tree given by the output of " "`poudriere -l`, to the latest revision available on the official servers." msgstr "" "Обновит указанное _PORTSTREE_, дерево, указанное в выводе команды `poudriere " "-l`, до последней доступной ревизии на официальных серверах." #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:444 msgid "" "Ports trees without a method, see crossref:testing[testing-poudriere-ports-" "tree-manual, Using Manually Managed Ports Trees with poudriere], cannot be " "updated like this and must be updated manually by the porter." msgstr "" "Деревья портов без метода, см. crossref:testing[testing-poudriere-ports-tree-" "manual, Использование вручную управляемых деревьев портов с помощью " "poudriere], не могут быть обновлены таким образом и должны обновляться " "вручную сопровождающим портов." #. type: Title === #: documentation/content/en/books/porters-handbook/testing/_index.adoc:447 #, no-wrap msgid "Testing Ports" msgstr "Тестирование портов" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:450 msgid "" "After jails and ports trees have been set up, the result of a contributor's " "modifications to the ports tree can be tested." msgstr "" "После настройки клеток и деревьев портов можно проверить результат " "изменений, внесенных участником в дерево портов." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:452 msgid "" "For example, local modifications to the package:www/firefox[] port located " "in [.filename]#/work/ports/www/firefox# can be tested in the previously " "created 14.3-RELEASE jail:" msgstr "" "Например, локальные изменения в порте package:www/firefox[], расположенном в " "[.filename]#/work/ports/www/firefox#, можно протестировать в ранее созданной " "клетке 14.3-RELEASE:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:456 #, no-wrap msgid "# poudriere testport -j 143Ramd64 -p development -o www/firefox\n" msgstr "# poudriere testport -j 143Ramd64 -p development -o www/firefox\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:462 msgid "" "This will build all dependencies of Firefox. If a dependency has been built " "previously and is still up-to-date, the pre-built package is installed. If " "a dependency has no up-to-date package, one will be built with default " "options in a jail. Then Firefox itself is built." msgstr "" "Это соберет все зависимости Firefox. Если зависимость уже была собрана ранее " "и остаётся актуальной, будет установлен готовый пакет. Если для зависимости " "нет актуального пакета, он будет собран с параметрами по умолчанию в клетке. " "Затем будет собран сам Firefox." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:464 msgid "" "The complete build of every port is logged to [.filename]#/poudriere/data/" "logs/bulk/143Ri386-development/build-time/logs#." msgstr "" "Полная сборка каждого порта записывается в [.filename]#/poudriere/data/logs/" "bulk/143Ri386-development/build-time/logs#." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:469 msgid "" "The directory name `143Ri386-development` is derived from the arguments to `-" "j` and `-p`, respectively. For convenience, a symbolic link [.filename]#/" "poudriere/data/logs/bulk/143Ri386-development/latest# is also maintained. " "The link points to the latest _build-time_ directory. Also in this " "directory is an [.filename]#index.html# for observing the build process with " "a web browser." msgstr "" "Имя каталога `143Ri386-development` формируется из аргументов `-j` и `-p` " "соответственно. Для удобства также поддерживается символическая ссылка [." "filename]#/poudriere/data/logs/bulk/143Ri386-development/latest#. Эта ссылка " "указывает на последний каталог _времени сборки_. Также в этом каталоге " "находится файл [.filename]#index.html#, который позволяет наблюдать за " "процессом сборки через веб-браузер." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:472 msgid "" "By default, poudriere cleans up the jails and leaves log files in the " "directories mentioned above. To ease investigation, jails can be kept " "running after the build by adding `-i` to `testport`:" msgstr "" "По умолчанию poudriere очищает клетки и оставляет файлы журналов в указанных " "выше каталогах. Для упрощения анализа клетки можно оставить запущенными " "после сборки, добавив `-i` к `testport`:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:476 #, no-wrap msgid "# poudriere testport -j 143Ramd64 -p development -i -o www/firefox\n" msgstr "# poudriere testport -j 143Ramd64 -p development -i -o www/firefox\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:483 msgid "" "After the build completes, and regardless of whether it was successful, a " "shell is provided within the jail. The shell is used to investigate " "further. poudriere can be told to leave the jail running after the build " "finishes with `-I`. poudriere will show the command to run when the jail is " "no longer needed. It is then possible to man:jexec[8] into it:" msgstr "" "После завершения сборки, независимо от того, была ли она успешной, в клетке " "предоставляется оболочка. Эта оболочка используется для дальнейшего " "исследования. Можно указать poudriere оставить клетку запущенной после " "завершения сборки с помощью `-I`. poudriere покажет команду для выполнения, " "когда клетка больше не нужна. Затем можно использовать man:jexec[8] для " "входа в неё:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:497 #, no-wrap msgid "" "# poudriere testport -j 143Ramd64 -p development -I -o www/firefox\n" "[...]\n" "====>> Installing local Pkg repository to /usr/local/etc/pkg/repos\n" "====>> Leaving jail 143Ramd64-development-n running, mounted at /poudriere/data/.m/143Ramd64-development/ref for interactive run testing\n" "====>> To enter jail: jexec 143Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root\n" "====>> To stop jail: poudriere jail -k -j 143Ramd64 -p development\n" "# jexec 143Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root\n" "# [do some stuff in the jail]\n" "# exit\n" "# poudriere jail -k -j 143Ramd64 -p development\n" "====>> Umounting file systems\n" msgstr "" "# poudriere testport -j 143Ramd64 -p development -I -o www/firefox\n" "[...]\n" "====>> Installing local Pkg repository to /usr/local/etc/pkg/repos\n" "====>> Leaving jail 143Ramd64-development-n running, mounted at /poudriere/" "data/.m/143Ramd64-development/ref for interactive run testing\n" "====>> To enter jail: jexec 143Ramd64-development-n env -i TERM=$TERM /usr/" "bin/login -fp root\n" "====>> To stop jail: poudriere jail -k -j 143Ramd64 -p development\n" "# jexec 143Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root\n" "# [do some stuff in the jail]\n" "# exit\n" "# poudriere jail -k -j 143Ramd64 -p development\n" "====>> Umounting file systems\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:502 msgid "" "An integral part of the FreeBSD ports build infrastructure is the ability to " "tweak ports to personal preferences with options. These can be tested with " "poudriere as well. Adding the `-c`:" msgstr "" "Неотъемлемой частью инфраструктуры сборки портов FreeBSD является " "возможность настройки портов под личные предпочтения с помощью опций. Их " "также можно тестировать с помощью poudriere. Добавление опции `-c`:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:506 #, no-wrap msgid "# poudriere testport -j 143Ramd64 -c -o www/firefox\n" msgstr "# poudriere testport -j 143Ramd64 -c -o www/firefox\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:512 msgid "" "Presents the port configuration dialog before the port is built. The ports " "given after `-o` in the format `_category_/_portname_` will use the " "specified options, all dependencies will use the default options. Testing " "dependent ports with non-default options can be accomplished using sets, see " "crossref:testing[testing-poudriere-sets, Using Sets]." msgstr "" "Представляет диалог настройки порта перед его сборкой. Порты, указанные " "после `-o` в формате `_категория_/_имя_порта_`, будут использовать указанные " "опции, все зависимости будут использовать опции по умолчанию. Тестирование " "зависимых портов с нестандартными опциями может быть выполнено с " "использованием наборов, см. crossref:testing[testing-poudriere-sets, " "Использование наборов]." #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:517 msgid "" "When testing ports where [.filename]#pkg-plist# is altered during build " "depending on the selected options, it is recommended to perform a test run " "with all options selected _and_ one with all options deselected." msgstr "" "При тестировании портов, где файл [.filename]#pkg-plist# изменяется во время " "сборки в зависимости от выбранных опций, рекомендуется выполнить тестовый " "запуск со всеми выбранными опциями _и_ один без выбранных опций." #. type: Title === #: documentation/content/en/books/porters-handbook/testing/_index.adoc:520 #, no-wrap msgid "Using Sets" msgstr "Использование наборов" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:525 msgid "" "For all actions involving builds, a so-called _set_ can be specified using `-" "z _setname_`. A set refers to a fully independent build. This allows, for " "instance, usage of `testport` with non-standard options for the dependent " "ports." msgstr "" "Для всех действий, связанных со сборкой, можно указать так называемый " "_набор_ с помощью `-z _имя_набора_`. Набор относится к полностью независимой " "сборке. Это позволяет, например, использовать `testport` с нестандартными " "параметрами для зависимых портов." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:531 msgid "" "To use sets, poudriere expects an existing directory structure similar to " "`PORT_DBDIR`, defaults to [.filename]#/var/db/ports# in its configuration " "directory. This directory is then man:nullfs[5]-mounted into the jails " "where the ports and their dependencies are built. Usually a suitable " "starting point can be obtained by recursively copying the existing " "`PORT_DBDIR` to [.filename]#/usr/local/etc/poudriere.d/jailname-portname-" "setname-options#. This is described in detail in man:poudriere[8]. For " "instance, testing package:www/firefox[] in a specific set named `devset`, " "add the `-z devset` parameter to the `testport` command:" msgstr "" "Для использования наборов poudriere ожидает, что будет использована " "структура каталогов, аналогичная `PORT_DBDIR`, по умолчанию [.filename]#/var/" "db/ports#, в его конфигурационном каталоге. Этот каталог затем монтируется с " "помощью man:nullfs[5] в клетки, где собираются порты и их зависимости. " "Обычно подходящую начальную точку можно получить, рекурсивно скопировав " "существующий `PORT_DBDIR` в [.filename]#/usr/local/etc/poudriere.d/jailname-" "portname-setname-options#. Это подробно описано в man:poudriere[8]. " "Например, для тестирования package:www/firefox[] в определённом наборе с " "именем `devset`, добавьте параметр `-z devset` к команде `testport`:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:535 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:579 #, no-wrap msgid "# poudriere testport -j 143Ramd64 -p development -z devset -o www/firefox\n" msgstr "" "# poudriere testport -j 143Ramd64 -p development -z devset -o www/firefox\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:538 msgid "This will look for the existence of these directories in this order:" msgstr "Это проверит наличие этих каталогов в следующем порядке:" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:540 msgid "" "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-development-devset-options#" msgstr "" "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-development-devset-options#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:541 msgid "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-devset-options#" msgstr "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-devset-options#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:542 msgid "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-development-options#" msgstr "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-development-options#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:543 msgid "[.filename]#/usr/local/etc/poudriere.d/devset-options#" msgstr "[.filename]#/usr/local/etc/poudriere.d/devset-options#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:544 msgid "[.filename]#/usr/local/etc/poudriere.d/development-options#" msgstr "[.filename]#/usr/local/etc/poudriere.d/development-options#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:545 msgid "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-options#" msgstr "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-options#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:546 msgid "[.filename]#/usr/local/etc/poudriere.d/options#" msgstr "[.filename]#/usr/local/etc/poudriere.d/options#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:549 msgid "" "From this list, poudriere man:nullfs[5]-mounts the _first existing_ " "directory tree into the [.filename]#/var/db/ports# directory of the build " "jails. Hence, all custom options are used for all the ports during this run " "of `testport`." msgstr "" "Из этого списка poudriere man:nullfs[5] монтирует _первое существующее_ " "дерево каталогов в каталог [.filename]#/var/db/ports# сборных клеток. Таким " "образом, все пользовательские настройки используются для всех портов во " "время этого запуска `testport`." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:552 msgid "" "After the directory structure for a set is provided, the options for a " "particular port can be altered. For example:" msgstr "" "После предоставления структуры каталогов для набора можно изменить параметры " "для конкретного порта. Например:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:556 #, no-wrap msgid "# poudriere options -c www/firefox -z devset\n" msgstr "# poudriere options -c www/firefox -z devset\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:560 msgid "" "The configuration dialog for package:www/firefox[] is shown, and options can " "be edited. The selected options are saved to the `devset` set." msgstr "" "Отображается диалог настройки package:www/firefox[], где можно редактировать " "параметры. Выбранные параметры сохраняются в набор `devset`." #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:566 msgid "" "poudriere is very flexible in the option configuration. poudriere can be " "set for particular jails, ports trees, and for multiple ports by one " "command. Refer to man:poudriere[8] for details." msgstr "" "poudriere очень гибок в настройке опций. poudriere можно настроить для " "конкретных клеток, деревьев портов и для нескольких портов одной командой. " "Подробности см. в man:poudriere[8]." #. type: Title === #: documentation/content/en/books/porters-handbook/testing/_index.adoc:569 #, no-wrap msgid "Providing a Custom [.filename]#make.conf# File" msgstr "Предоставление пользовательского файла [.filename]#make.conf#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:575 msgid "" "Similar to using sets, poudriere will also use a custom [.filename]#make." "conf# if it is provided. No special command line argument is necessary. " "Instead, poudriere looks for existing files matching a name scheme derived " "from the command line. For instance:" msgstr "" "Подобно использованию наборов, poudriere также использует пользовательский [." "filename]#make.conf#, если он предоставлен. Для этого не требуется " "специального аргумента командной строки. Вместо этого poudriere ищет " "существующие файлы, соответствующие схеме именования, производной от " "командной строки. Например:" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:582 msgid "" "causes poudriere to check for the existence of these files in this order:" msgstr "" "заставляет poudriere проверять наличие этих файлов в следующем порядке:" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:584 msgid "[.filename]#/usr/local/etc/poudriere.d/make.conf#" msgstr "[.filename]#/usr/local/etc/poudriere.d/make.conf#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:585 msgid "[.filename]#/usr/local/etc/poudriere.d/devset-make.conf#" msgstr "[.filename]#/usr/local/etc/poudriere.d/devset-make.conf#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:586 msgid "[.filename]#/usr/local/etc/poudriere.d/development-make.conf#" msgstr "[.filename]#/usr/local/etc/poudriere.d/development-make.conf#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:587 msgid "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-make.conf#" msgstr "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-make.conf#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:588 msgid "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-development-make.conf#" msgstr "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-development-make.conf#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:589 msgid "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-devset-make.conf#" msgstr "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-devset-make.conf#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:590 msgid "" "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-development-devset-make." "conf#" msgstr "" "[.filename]#/usr/local/etc/poudriere.d/143Ramd64-development-devset-make." "conf#" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:594 msgid "" "Unlike with sets, all of the found files will be appended, _in that order_, " "into one [.filename]#make.conf# inside the build jails. It is hence " "possible to have general make variables, intended to affect all builds in [." "filename]#/usr/local/etc/poudriere.d/make.conf#. Special variables, " "intended to affect only certain jails or sets can be set in specialised [." "filename]#make.conf# files, such as [.filename]#/usr/local/etc/poudriere." "d/143Ramd64-development-devset-make.conf#." msgstr "" "В отличие от наборов, все найденные файлы будут добавлены, _в указанном " "порядке_, в один [.filename]#make.conf# внутри клеток сборки. Таким образом, " "можно задать общие переменные make, предназначенные для влияния на все " "сборки, в файле [.filename]#/usr/local/etc/poudriere.d/make.conf#. " "Специальные переменные, предназначенные только для определённых клеток или " "наборов, можно задать в специализированных файлах [.filename]#make.conf#, " "например, в [.filename]#/usr/local/etc/poudriere.d/143Ramd64-development-" "devset-make.conf#." #. type: Block title #: documentation/content/en/books/porters-handbook/testing/_index.adoc:596 #, no-wrap msgid "Using [.filename]#make.conf# to Change Default Perl" msgstr "Использование [.filename]#make.conf# для изменения Perl по умолчанию" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:601 msgid "" "To build a set with a non default Perl version, for example, `5.20`, using a " "set named `perl5-20`, create a [.filename]#perl5-20-make.conf# with this " "line:" msgstr "" "Для сборки набора с нестандартной версией Perl, например, `5.20`, используя " "набор с именем `perl5-20`, создайте файл [.filename]#perl5-20-make.conf# со " "следующей строкой:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:605 #, no-wrap msgid "DEFAULT_VERSIONS+= perl=5.20\n" msgstr "DEFAULT_VERSIONS+= perl=5.20\n" #. type: delimited block * 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:609 msgid "" "Note the use of `+=` so that if the variable is already set in the default [." "filename]#make.conf# its content will not be overwritten." msgstr "" "Обратите внимание на использование `+=`, чтобы содержимое переменной не было " "перезаписано, если она уже установлена в стандартном [.filename]#make.conf#." #. type: Title === #: documentation/content/en/books/porters-handbook/testing/_index.adoc:614 #, no-wrap msgid "Pruning no Longer Needed Distfiles" msgstr "Удаление ненужных файлов дистрибутива" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:618 msgid "" "poudriere comes with a built-in mechanism to remove outdated distfiles that " "are no longer used by any port of a given tree. The command" msgstr "" "poudriere имеет встроенный механизм для удаления устаревших файлов " "дистрибутива, которые больше не используются ни одним портом данного дерева. " "Команда" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:622 #, no-wrap msgid "# poudriere distclean -p portstree\n" msgstr "# poudriere distclean -p portstree\n" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:627 msgid "" "will scan the distfiles folder, `DISTFILES_CACHE` in [.filename]#poudriere." "conf#, versus the ports tree given by the `-p _portstree_` argument and " "prompt for removal of those distfiles. To skip the prompt and remove all " "unused files unconditionally, the `-y` argument can be added:" msgstr "" "будет сканировать папку файлов дистрибутива, `DISTFILES_CACHE` в [." "filename]#poudriere.conf#, сравнивая её с деревом портов, указанным " "аргументом `-p _portstree_`, и запрашивать подтверждение на удаление этих " "файлов дистрибутива. Чтобы пропустить запрос и удалить все неиспользуемые " "файлы без подтверждения, можно добавить аргумент `-y`:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:631 #, no-wrap msgid "# poudriere distclean -p portstree -y\n" msgstr "# poudriere distclean -p portstree -y\n" #. type: Title == #: documentation/content/en/books/porters-handbook/testing/_index.adoc:634 #, no-wrap msgid "Debugging ports" msgstr "Отладка портов" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:641 msgid "" "Sometimes things go wrong and the port fails at run time. The framework " "provides some facilities to help in debugging ports. These helpers are " "limited since the way of debugging a port heavily depends on the technology " "used. The following variables help with debugging ports:" msgstr "" "Иногда что-то идёт не так, и порт не работает во время выполнения. Фреймворк " "предоставляет некоторые средства для отладки портов. Эти вспомогательные " "инструменты ограничены, поскольку способ отладки порта во многом зависит от " "используемой технологии. Следующие переменные помогают в отладке портов:" #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:643 msgid "`WITH_DEBUG`. If set, ports are built with debugging symbols." msgstr "" "`WITH_DEBUG`. Если установлено, порты собираются с отладочными символами." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:644 msgid "" "`WITH_DEBUG_PORTS`. Specifies a list of ports to be built with `WITH_DEBUG` " "set." msgstr "" "`WITH_DEBUG_PORTS`. Указывает список портов, которые должны собираться с " "установленным `WITH_DEBUG`." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:645 msgid "" "`DEBUG_FLAGS`. Used to specify additional flags to `CFLAGS`. Defaults to `-" "g`." msgstr "" "`DEBUG_FLAGS`. Используется для указания дополнительных флагов для `CFLAGS`. " "По умолчанию `-g`." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:648 msgid "" "When `WITH_DEBUG` is set, either globally or for a list of ports, the " "resulting binaries are not stripped." msgstr "" "Когда `WITH_DEBUG` установлен, глобально или для списка портов, " "результирующие бинарные файлы не лишаются символов." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:651 msgid "" "These variables can be specified in [.filename]#make.conf# or in the command " "line:" msgstr "" "Эти переменные могут быть указаны в [.filename]#make.conf# или в командной " "строке:" #. type: delimited block . 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:655 #, no-wrap msgid "# cd category/port && make -DWITH_DEBUG DEBUG_FLAGSS=\"-g -O0\"\n" msgstr "# cd category/port && make -DWITH_DEBUG DEBUG_FLAGSS=\"-g -O0\"\n" #. type: delimited block = 4 #: documentation/content/en/books/porters-handbook/testing/_index.adoc:663 msgid "" "If the port is built using package:ports-mgmt/poudriere[] the debugging " "variables must be specified in poudriere's [.filename]#make.conf# and not in " "[.filename]#/etc/make.conf#. Refer to package:ports-mgmt/poudriere[] " "documentation for details." msgstr "" "Если порт собирается с использованием package:ports-mgmt/poudriere[], " "отладочные переменные должны быть указаны в [.filename]#make.conf# " "poudriere, а не в [.filename]#/etc/make.conf#. Подробности см. в " "документации package:ports-mgmt/poudriere[]." #. type: Plain text #: documentation/content/en/books/porters-handbook/testing/_index.adoc:667 msgid "" "Please refer to the debugging information in the extref:{developers-handbook}" "tools[Developer's Handbook, debugging] for more details about the debugging " "tools available." msgstr "" "Пожалуйста, обратитесь к отладочной информации в extref:{developers-handbook}" "tools[Руководстве разработчика, отладка] для получения более подробной " "информации о доступных инструментах отладки." #~ msgid "" #~ "Since `portlint` uses heuristics to try to figure out errors, it can " #~ "produce false positive warnings. In addition, occasionally something " #~ "that is flagged as a problem really cannot be done in any other way due " #~ "to limitations in the ports framework. pass:[]" #~ msgstr "" #~ "Так как для обнаружения ошибок `portlint` использует эвристические " #~ "методы, то им могут выдаваться и ошибочные предупреждения. Кроме того, " #~ "время от времени нечто, отмечаемое как некорректность, из-за ограничений " #~ "механизма создания портов не может быть сделано никак иначе. pass:[] Если вы сомневаетесь, то лучше всего спросить в " #~ "{freebsd-ports}. pass:[]" #~ msgid "" #~ "updates the specified jail to the latest version available. pass:[] For FreeBSD releases, update to the latest " #~ "patchlevel with man:freebsd-update[8]. pass:[] For FreeBSD versions built from source, update to the latest git " #~ "revision in the branch." #~ msgstr "" #~ "обновляет указанную клетку до последней доступной версии. pass:[] Для релизов FreeBSD обновление до последнего " #~ "уровня исправлений с помощью man:freebsd-update[8]. pass:[] Для версий FreeBSD, собранных из исходников, обновление " #~ "до последней ревизии git в ветке."