- Вопрос или проблема
- Обновление ключей после истечения срока действия
- 1. Как это исправить.
- 2. Отличия от оригинала
- 3. Проверьте, существует ли файл подписи ключа.
- Для Armored ASCII
- Для двоичной версии
- Ответ или решение
- 1. Проверка текущей конфигурации репозитория
- 2. Удаление старого ключа
- 3. Получение нового ключа
- 4. Обновление индекса пакетов
- 5. Проверка прав доступа к ключевому файлу
- 6. Заключение
Вопрос или проблема
Я пытаюсь выполнить команду apt-get update и получаю эту ошибку для gitlab-runner:
# apt-get update
.
.
.
Get:6 https://packages.gitlab.com/runner/gitlab-runner/ubuntu focal InRelease [23.5 kB]
Err:6 https://packages.gitlab.com/runner/gitlab-runner/ubuntu focal InRelease
Следующие подписи были недействительными: EXPKEYSIG 3F01618A51312F3F GitLab B.V. (ключ подписи репозитория пакетов) <[email protected]>
Чтение списков пакетов... Готово
W: Ошибка GPG: https://packages.gitlab.com/runner/gitlab-runner/ubuntu focal InRelease: Следующие подписи были недействительными: EXPKEYSIG 3F01618A51312F3F GitLab B.V. (ключ подписи репозитория пакетов) <[email protected]>
E: Репозиторий 'https://packages.gitlab.com/runner/gitlab-runner/ubuntu focal InRelease' не подписан.
N: Обновление из такого репозитория не может быть выполнено безопасно и поэтому по умолчанию отключено.
N: Смотрите руководство по apt-secure(8) для подробностей о создании репозитория и конфигурации пользователя.
У вас новая почта в /var/mail/root
#
.
.
.
Я изучил несколько постов о именно этой ошибке, но ничего из предложенного не решает мою проблему.
Официальное руководство по ключам подписи GitLab на https://docs.gitlab.com/omnibus/update/package_signatures.html#package-repository-metadata-signing-keys не исправляет проблему.
На указанной странице предлагается:
awk '/deb \[signed-by=/{
pubkey = $2;
sub(/\[signed-by=/, "", pubkey);
sub(/\]$/, "", pubkey);
print pubkey
}' /etc/apt/sources.list.d/gitlab_gitlab-?e.list | \
while read line; do
curl -s "https://packages.gitlab.com/gpg.key" | gpg --dearmor > $line
done
или
apt-key del 3F01618A51312F3F
curl -s "https://packages.gitlab.com/gpg.key" | apt-key add -
apt-key list 3F01618A51312F3F
чтобы решить проблему с gitlab-runner из-за истекшего ключа подписи репозитория пакетов, но ошибка остается такой же:
W: Ошибка GPG: https://packages.gitlab.com/runner/gitlab-runner/ubuntu focal InRelease: Следующие подписи были недействительными: EXPKEYSIG 3F01618A51312F3F GitLab B.V. (ключ подписи репозитория пакетов) <[email protected]>
Я также пробовал шаги из многочисленных постов, найденных здесь и там, чтобы обновить ключ подписи репозитория, но ничего не работает – ошибка остается прежней.
Кажется, это простая операция – обновить ключ подписи репозитория для репозитория APT – но -как- именно я должен это сделать, чтобы позволить gitlab-runner снова обновляться и поддерживаться в Ubuntu 20.04.6 LTS?
Этот ключ
https://packages.gitlab.com/gpg.key
считается недействительным командой “apt-get update” для репозитория APT gitlab-runner, независимо от того, что я делаю.
Есть идеи?
Спасибо!
(PS – Знаю, что “apt-key” устарел, но мне просто НУЖНО обновить gitlab-runner, чтобы он снова стал обновляемым, не беспокоюсь сейчас о том, что “apt-key” устарел. После того, как я обновлю gitlab-runner, я могу потратить время на изучение того, как использовать gpg вместо apt-key для будущих истечений подписи.)
Официальный ответ на эту проблему (источник текста с следующей ссылки):
https://docs.gitlab.com/omnibus/update/package_signatures#update-keys-after-expiry-extension
Обновление ключей после истечения срока действия
Для дистрибутивов на базе Debian:
PackageCloud в целом использовал apt-key, который будет устаревать в будущем. Вручную установленные или сконфигурированные репозитории из некоторых дистрибутивов уже используют поддержку signed-by в списках источников пакетов Debian.
Определите, используете ли вы функциональность apt-key или signed-by:
grep 'deb \[signed-by=' /etc/apt/sources.list.d/gitlab_gitlab-?e.list
Если этот grep вернул какие-либо строки, вы используете функциональность signed-by. Это имеет приоритет над любым использованием apt-key. Если этот grep не вернул строк, вы используете функциональность apt-key.
Для signed-by следующий скрипт (запустите от имени root) обновляет открытые ключи для репозиториев GitLab:
awk '/deb \[signed-by=/{ pubkey = $2; sub(/\[signed-by=/, "", pubkey); sub(/\]$/, "", pubkey); print pubkey }' /etc/apt/sources.list.d/gitlab_gitlab-?e.list | \ while read line; do curl -s "https://packages.gitlab.com/gpg.key" | gpg --dearmor > $line done
Для apt-key следующий скрипт (запустите от имени root) обновляет открытые ключи для репозиториев GitLab:
apt-key del 3F01618A51312F3F curl -s "https://packages.gitlab.com/gpg.key" | apt-key add - apt-key list 3F01618A51312F3F
Вы можете использовать тот же шаг, который описан в инструкции по установке:
curl -fsSL "https://packages.gitlab.com/runner/gitlab-runner/gpgkey" | gpg --dearmor > /usr/share/keyrings/runner_gitlab-runner-archive-keyring.gpg
затем
apt update
Вы можете сделать то же самое, чтобы исправить gitlab-ce
и gitlab-ee
curl -fsSL "https://packages.gitlab.com/runner/gitlab-runner/gpgkey" | gpg --dearmor > /usr/share/keyrings/gitlab_gitlab-ee-archive-keyring.gpg
curl -fsSL "https://packages.gitlab.com/runner/gitlab-runner/gpgkey" | gpg --dearmor > /usr/share/keyrings/gitlab_gitlab-ce-archive-keyring.gpg
Вы можете обновить подпись вашего GitLab Runner, следуя приведенным ниже инструкциям.
1. Как это исправить.
Команды, которые нужно исправить, следующие:
awk '/deb \[signed-by=/{
pubkey = $2;
sub(/\[signed-by=/, "", pubkey);
sub(/\]$/, "", pubkey);
print pubkey
}' /etc/apt/sources.list.d/runner_gitlab-runner.list | \
while read line; do
curl -s "https://packages.gitlab.com/gpg.key" | gpg --dearmor > $line
done
2. Отличия от оригинала
/etc/apt/sources.list.d/gitlab_gitlab-?e.list
указывает, где находится файл apt GitLab.
Но файл apt GitLab Runner находится.
/etc/apt/sources.list.d/runner_gitlab-runner.list
.
Файл /etc/apt/sources.list.d/gitlab_gitlab-?e.list
не существует на машине, на которой работает Runner, поэтому вышеуказанная оригинальная команда не создаст файл подписи ключа.
3. Проверьте, существует ли файл подписи ключа.
Запустите вышеуказанную команду и посмотрите, будет ли создан следующий файл.
/usr/share/keyrings/runner_gitlab-runner-archive-keyring.gpg
ls -la /usr/share/keyrings/runner_gitlab-runner-archive-keyring.gpg
Для решения этой ситуации в 2024 году, особенно на старых установках, сначала нужно удалить уже добавленный gpg-ключ gitlab. Выполните команду:
sudo apt-key del "F640 3F65 44A3 8863 DAA0 B6E0 3F01 618A 5131 2F3F"
и запустите последнюю установочную скрипт gitlab runner для Debian/Ubuntu/Mint:
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash && sudo apt update
Вот и все, теперь вы можете выполнить apt upgrade
.
Больше деталей:
Обратите внимание, что apt-key в Debian 12 устарел, не уверен по поводу Ubuntu:
root@gitlab-runner:~# apt-key list
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
Так что правильный способ в общем должен заключаться в том, чтобы поместить расшифрованную подпись gpg в /etc/apt/trusted.gpg.d, но это не случай gitlab.
Если вы посмотрите на файл /etc/apt/sources.list.d/runner_gitlab-runner.list
, вы заметите, что gpg-ключ упомянут напрямую:
# этот файл был сгенерирован packages.gitlab.com для
# репозитория по адресу https://packages.gitlab.com/runner/gitlab-runner
deb [signed-by=/usr/share/keyrings/runner_gitlab-runner-archive-keyring.gpg] https://packages.gitlab.com/runner/gitlab-runner/debian/ bookworm main
deb-src [signed-by=/usr/share/keyrings/runner_gitlab-runner-archive-keyring.gpg] https://packages.gitlab.com/runner/gitlab-runner/debian/ bookworm main
Вот причина, почему ручное добавление gpg-ключа с помощью apt-key не решает проблему. Повторное выполнение установочного скрипта развернет последнюю подпись ключа.
Обратите внимание, что я тестировал это в ubuntu jammy.
wget -qO- https://packages.gitlab.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/omnibus_gitlab_gpg.key
Переместите старый sources.list для этого пакета
и перезагрузите с помощью команды curl скрипт из инструкций по установке.
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
Мой sources.list выглядит так:
cat /etc/apt/sources.list.d/runner_gitlab-runner.list
# этот файл был сгенерирован packages.gitlab.com для
# репозитория по адресу https://packages.gitlab.com/runner/gitlab-runner
deb [signed-by=/usr/share/keyrings/runner_gitlab-runner-archive-keyring.gpg] https://packages.gitlab.com/runner/gitlab-runner/ubuntu/ jammy main
deb-src [signed-by=/usr/share/keyrings/runner_gitlab-runner-archive-keyring.gpg] https://packages.gitlab.com/runner/gitlab-runner/ubuntu/ jammy main
Не забудьте адаптировать это к вашему выпуску.
Причина, по которой эти ключи истекают, заключается в безопасности – так как рабочие станции сотрудников GitLab являются очень ценными целями, предпочтительно генерировать новые ключи примерно каждые 2-4 года – принимая во внимание, что рабочие станции сотрудников GitLab периодически переустанавливаются с новыми операционными системами, также в надежде устранить возможное вредоносное ПО. Из-за этого нам всем приходится обновлять эти ключи подписи каждые несколько лет. Я сталкивался с аналогичными ошибками при обновлении ключей архивов во время apt update
(не только от GitLab) в прошлом, и подробное объяснение проблемы можно найти здесь, которое подробно описывает, почему подпись для gitlab истекла и как это исправить.
Некоторый несколько загадочный фрагмент BASH, предоставленный gitlab начиная с awk
проходит по файлу /etc/apt/sources.list.d/runner_gitlab-runner.list
построчно, чтобы найти строку signed-by=
, извлечь путь к файлу ключей gpg архивов, загрузить новый ключ подписи gitlab и импортировать его в извлеченный путь к файлу ключей архивов.
Команда apt-key
, которая управляет только /etc/apt/trusted.gpg
в Debian, больше не используется в новых установках GitLab – как показывает /etc/apt/sources.list.d/gitlab_gitlab-ce.list
в большинстве современных установок GitLab, теперь используется специальный файл /usr/share/keyrings/gitlab_gitlab-ce-archive-keyring.gpg
.
Если ваш /etc/apt/sources.list.d/gitlab_gitlab-ce.list
содержит строку signed-by=
, следующий однострочник может быть использован для обновления ключей с новым ключом подписи:
wget -qO- https://packages.gitlab.com/gpg.key | gpg --no-default-keyring --keyring /usr/share/keyrings/gitlab_gitlab-ce-archive-keyring.gpg --import
Если ваш /etc/apt/sources.list.d/gitlab_gitlab-ce.list
не содержит строки signed-by=
, вы должны предпочесть использовать метод apt-key
следующим образом:
curl -s https://packages.gitlab.com/gpg.key | apt-key add -
Предупреждение, которое отображается в этом случае:
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
Можно проигнорировать на данный момент. Вот более подробное объяснение предупреждения apt-key
.
Просто для дополнительной информации,
файл GPG ключа имеет 2 разных формата: Armored ASCII (расширение файла .asc) и стандартный двоичный формат (расширение файла .gpg).
Обратите внимание на расширение в файле списков источников
Для Armored ASCII
curl -sSfL https://packages.gitlab.com/runner/gitlab-runner/gpgkey | tee /etc/apt/keyrings/runner_gitlab-runner-archive-keyring.asc
В /etc/apt/sources.list.d/runner_gitlab-runner.list
(в моей среде это Ubuntu Jammy)
deb [signed-by=/etc/apt/keyrings/runner_gitlab-runner-archive-keyring.asc] https://packages.gitlab.com/runner/gitlab-runner/ubuntu/ jammy main
deb-src [signed-by=/etc/apt/keyrings/runner_gitlab-runner-archive-keyring.asc] https://packages.gitlab.com/runner/gitlab-runner/ubuntu/ jammy main
Для двоичной версии
curl -sSfL https://packages.gitlab.com/runner/gitlab-runner/gpgkey | gpg --dearmor -o /etc/apt/keyrings/runner_gitlab-runner-archive-keyring.gpg
В /etc/apt/sources.list.d/runner_gitlab-runner.list
(в моей среде это Ubuntu Jammy)
deb [signed-by=/etc/apt/keyrings/runner_gitlab-runner-archive-keyring.gpg] https://packages.gitlab.com/runner/gitlab-runner/ubuntu/ jammy main
deb-src [signed-by=/etc/apt/keyrings/runner_gitlab-runner-archive-keyring.gpg] https://packages.gitlab.com/runner/gitlab-runner/ubuntu/ jammy main
Вышеуказанные ответы отличные для получения последнего ключа.. но у меня все еще возникает ошибка
W: Ошибка GPG: https://packages.gitlab.com/runner/gitlab-runner/ubuntu noble InRelease: Следующие подписи не могут быть проверены, так как публичный ключ не доступен: NO_PUBKEY 3F01618A51312F3F
E: Репозиторий 'https://packages.gitlab.com/runner/gitlab-runner/ubuntu noble InRelease' не подписан.
N: Обновление из такого репозитория не может быть выполнено безопасно и поэтому по умолчанию отключено.
N: Смотрите руководство по apt-secure(8) для подробностей о создании репозитория и конфигурации пользователя.
Что было связано с правами на файл ключа:
-rw-r—– 1 root root 2298 Dec 6 13:28 /usr/share/keyrings/runner_gitlab-runner-archive-keyring.gpg
После установки chmod 644 на файл ключа моя команда apt update && apt upgrade сработала отлично, поэтому просто проверьте права на файл ключа, который вы скачиваете.
Ответ или решение
Ситуация, с которой вы столкнулись при попытке выполнить обновление GitLab Runner на Ubuntu 20.04.6 LTS, связана с истечением срока действия ключа подписи пакетов, что приводит к ошибке: INVALID SIGNATURE (неверная подпись). Если вы видите сообщение об ошибке EXPKEYSIG 3F01618A51312F3F
, это означает, что используемый ключ для проверки подписи ваших пакетов GitLab стал недействительным. Давайте рассмотрим, как вы можете устранить эту ошибку и успешно обновить GitLab Runner.
1. Проверка текущей конфигурации репозитория
Сначала убедитесь, что у вас правильно настроены источники для GitLab Runner. Откройте файл, который описывает ваш репозиторий:
cat /etc/apt/sources.list.d/runner_gitlab-runner.list
В этом файле должна быть строка, подобная следующей:
deb [signed-by=/usr/share/keyrings/runner_gitlab-runner-archive-keyring.gpg] https://packages.gitlab.com/runner/gitlab-runner/ubuntu focal main
2. Удаление старого ключа
Если вы использовали apt-key
(что, как вы уже заметили, устарело), удалите ранее добавленный ключ:
sudo apt-key del 3F01618A51312F3F
3. Получение нового ключа
Теперь получите новый ключ и добавьте его в ваш ключевой хранилище. Рекомендуется использовать команду gpg
для надежного хранения:
curl -fsSL "https://packages.gitlab.com/runner/gitlab-runner/gpgkey" | gpg --dearmor -o /usr/share/keyrings/runner_gitlab-runner-archive-keyring.gpg
4. Обновление индекса пакетов
После выполнения всех предыдущих шагов, обновите индекс пакетов:
sudo apt update
Эта команда должна завершиться успешно, и вы не должны видеть сообщения об ошибках, связанных с неверной подписью.
5. Проверка прав доступа к ключевому файлу
Если вы все еще сталкиваетесь с ошибками, проверьте права доступа к файлу ключа:
ls -l /usr/share/keyrings/runner_gitlab-runner-archive-keyring.gpg
Убедитесь, что у файла есть права доступа 644
. Если это не так, исправьте это:
sudo chmod 644 /usr/share/keyrings/runner_gitlab-runner-archive-keyring.gpg
6. Заключение
После выполнения всех вышеперечисленных шагов, вы сможете успешно выполнить apt update
и далее произвести обновление пакетов с помощью apt upgrade
. Данная процедура поможет справиться с проблемой устаревших ключей, а также обеспечит вам регулярные обновления GitLab Runner, гарантируя, что вы всегда будете использовать последнюю версию программного обеспечения с актуальными исправлениями безопасности.
Помните, что устаревшие ключи подписи — это распространенная проблема, поэтому периодически стоит проверять обновления ключей для всех используемых вами репозиториев, чтобы избежать возникновение подобных ошибок в будущем.