
После некоторых проблем с подключением к серверу TLS, а затем, заметив, что app-misc/ca-certificates
отстает на год и четыре месяца, мне стало любопытно, что изменилось с 20140927.3.17.2
. Я решил просто взять копию пакета, извлечь из него все и покопаться. emerge
Появился беглый просмотр страницы руководства --fetchonly
( -f
):
Вместо того, чтобы выполнять сборку пакетов, просто выполните выборку для всех пакетов (извлеките данные из SRC_URI на основе настройки USE).
Похоже на то, что я хочу! Пошли.
caramel:~ blackl% emerge --fetchonly '='app-misc/ca-certificates-20151214.3.21
emerge: portage group access is required
...эээ? Ну...не вижу, почему бы и нет. Иметь права root.
caramel:~ blackl% sudo emerge --fetchonly '='app-misc/ca-certificates-20151214.3.21
Calculating dependencies... done!
[ebuild U ~] app-misc/ca-certificates-20151214.3.21 [20140927.3.17.2]
The following keyword changes are necessary to proceed:
(see "package.accept_keywords" in the portage(5) man page for more details)
# required by =app-misc/ca-certificates-20151214.3.21 (argument)
=app-misc/ca-certificates-20151214.3.21 ~amd64
Что? Нет... Я просто хочу скачать пакет; я не хочу его устанавливать или вносить какие-либо другие изменения в систему.
Более тщательный поиск на странице руководства не дал ничего, что выглядело бы релевантным (кроме --fetch-all-uri
| -F
, что дало мне тот же результат). Почему emerge
здесь настаивают на привилегированном доступе и изменении ключевых слов? Что бы это моглоДействительноделаете, помимо простой загрузки tarball, его проверки и помещения в рабочий каталог или кэш где-нибудь?
решение1
Вопрос, вероятно, должен звучать так: «Как мне заставить Portage загрузитьисходные коды пакетов, и ничего больше не делать?". Причина, по которой это не работает, emerge
заключается в том, что emerge так задуман. emerge — просто неподходящий инструмент для выполнения такого рода работы и, надеюсь, никогда не будет таковым. Чтобы на самом деле добиться желаемого, вам нужно использовать ebuild
команду ( man 1 ebuild
), например:
ebuild <PATH_TO_EBUILD> fetch
Эта команда загружает (и проверяет) все содержимое $SRC_URI
вашего $DISTDIR
.
Чтобы получить значение переменных:
<PATH_TO_EBUILD>
- составлено так:
<REPO_DIR>/<CATEGORY>/<PACKAGE_NAME>/<PACKAGE_NAME>-<VERSION>.ebuild
- https://wiki.gentoo.org/wiki/Repository_format
<REPO_DIR>
:portageq get_repo_path / gentoo
$DISTDIR
:portageq distdir
Чтобы на самом деле загрузить исходники в каталог по вашему выбору, просто подмените $DISTDIR
переменную следующим образом:
DISTDIR=<DIR> ebuild <PATH_TO_EBUILD> fetch
Поэтому, если вы используете пути portage по умолчанию и хотите загрузить исходники в свой домашний каталог, выполните следующее:
DISTDIR=~ ebuild /usr/portage/app-misc/ca-certificates/ca-certificates-20151214.3.21.ebuild fetch