Предупреждение: apt-key устарел. Вместо этого управляйте файлами связки ключей в trust.gpg.d
Я устанавливал elasticsearch, следуя этому руководству, но на самом деле elasticsearch не является частью этого вопроса.
На первом этапе мне нужно добавить ключ:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
и получил следующее сообщение:
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
Процесс установки прошел нормально, но, поскольку он устарел, я ищу новое использование, которое заменит. (У меня нет проблем с установкой пакета.)
man apt-key
Я видел
В последний раз apt-key (8) будет доступен в Debian 11 и Ubuntu 22.04.
...
Поэтому файлы двоичных ключей, предназначенные для использования с любой версией apt, всегда следует создавать с помощью gpg --export.
но он не сказал альтернативу
apt-key add
. Я пытался
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --export
но не сработало. Итак, что я использую после трубы
wget
когда
apt-key
удален?
11 ответов
Добавление ключа небезопасно , поскольку добавляется ключ для всех репозиториев. Именно поэтому apt-key пришлось устареть.
Укороченная версия
Делайте то , что делает Сигнал . Если вы хотите использовать ключ at для репозитория, указанного в
/etc/apt/sources.list.d/EXAMPLE.list
, использовать:
wget -O- https://example.com/EXAMPLE.gpg |\
gpg --dearmor > /usr/share/keyrings/EXAMPLE.gpg
echo "deb [signed-by=/usr/share/keyrings/EXAMPLE.gpg] https://example.com/apt stable main" |\
sudo tee /etc/apt/sources.list.d/EXAMPLE.list
# Optional (you can find the email address / ID using `apt-key list`)
sudo apt-key del support@example.com
Длинная версия
Хотя уведомление об устаревании рекомендует добавить ключ в , это небезопасное решение. Чтобы процитировать :
Причина этого изменения заключается в том, что при добавлении ключа OpenPGP, который используется для подписи репозитория APT в или , этот ключ безоговорочно доверяется APT во всех других репозиториях, настроенных в системе, которые не имеют
signed-by
(см. ниже), даже в официальных репозиториях Debian/Ubuntu. В результате любой неофициальный репозиторий APT, в который добавлен ключ подписи,/etc/apt/trusted.gpg
или же/etc/apt/trusted.gpg.d
может заменить любой пакет в системе. Так что это изменение было сделано из соображений безопасности (вашей безопасности).
Правильное решение объясняется в эту статью из Linux Uprisingэтой статье Linux Uprising и в : Храните ключ в
/usr/share/keyrings/
, а затем сослаться на ключ в списке подходящих источников.
Таким образом, соответствующий метод выглядит следующим образом:
- Скачайте ключ с
https://example.com/EXAMPLE.gpg
и сохранить его в/usr/share/keyrings/EXAMPLE.gpg
. Вики Debian WikiDebian объясняет, что вы должны удалить ключ (т.е. преобразовать его из base64 в двоичный) для совместимости со старым программным обеспечением.wget -O- https://example.com/EXAMPLE.gpg |\ gpg --dearmor > /usr/share/keyrings/EXAMPLE.gpg
- Добавьте ключ в исходный файл, который используется репозиторием. Найдите нужный файл в
/etc/apt/sources.list.d/
и отредактируйте его так, чтобы он был связан с только что добавленным брелоком. Если файл не существует, вы можете его создать. В итоге это должно выглядеть примерно так:deb [signed-by=/usr/share/keyrings/EXAMPLE.gpg] https://example.com/apt stable main
- Удалите ключ из
apt-key
, если он был добавлен ранее. Бежатьsudo apt-key list
чтобы перечислить все ключи, и найти тот, который был ранее добавлен. Используя адрес электронной почты ключа или отпечаток пальца, запуститеsudo apt-key del support@example.com
.
ответ найден здесь: https://suay.site/?p=526
вкратце: получить ключ локально
curl -s URL
добавить ключ:
cat URL.pub | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/NAME.gpg --import
авторизуем пользователя _apt:
sudo chown _apt /etc/apt/trusted.gpg.d/NAME.gpg
Как упоминалось в текущем принятом ответе , добавление ключа в /etc/apt/trusted.gpg.d небезопасно, поскольку оно добавляет ключ для всех репозиториев. Вот почему apt-key выдает это предупреждение.
Вы можете использовать более простое решение, например следующее:
curl -fsSL https://example.com/EXAMPLE.gpg | sudo gpg --dearmor -o /usr/share/keyrings/EXAMPLE.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/EXAMPLE.gpg] \
https://example.com/apt stable main" \
| sudo tee -a /etc/apt/sources.list.d/EXAMPLE.list > /dev/null
sudo apt update
sudo apt install <package-name>
Отman apt-key
(Убунту 22.04)
Если ваше существующее использование apt-key add выглядит следующим образом:
wget -qO- https://myrepo.example/myrepo.asc | sudo apt-key add -
Затем вы можете напрямую заменить это на (хотя обратите внимание на рекомендацию ниже):
wget -qO- https://myrepo.example/myrepo.asc | sudo tee /etc/apt/trusted.gpg.d/myrepo.asc
В MX Linux есть служебный скрипт под названием «MX Fix GPG keys», который позаботится об этом. Поскольку это всего лишь сценарий bash, он, скорее всего, отлично работает с любым другим дистрибутивом на основе Debian.
Это здесь https://github.com/MX-Linux/checkaptgpg
Я столкнулся с проблемой устаревания и предупреждениями при добавлении репозитория kubernetes-xenial с использованием ключа gpg, доступного в Интернете. Я работал в среде Ubuntu 22.04.1 на Apple Silicon (M1/aarch64/arm64). Решение, представленное ниже, очень похоже на решение, предложенное Вамси Нереллой в другом месте этой темы, но оно включает явный пример, а также создание нового каталога ключей ('/etc/apt/keyrings').
Это решение также позволяет избежать любого использования каталога ключей «/etc/apt/trusted.gpg.d», который, по словам некоторых источников, не решает проблему, которая изначально привела к прекращению поддержки.
Хотя пакеты, добавленные в конце этого примера, были из Kubernetes, этот подход должен работать одинаково хорошо с другими пакетами, как обсуждал Вамси.
Это решение также очень похоже на решение, предложенное Промисом Престоном (см. ветку), но оно включает в себя ссылку на архитектуру системы, которая мне нужна для моего приложения. Возможно, этот пример принесет пользу другим.
Вместо этого:
Создайте файл kubernetes.list с помощью текстового редактора, например vim или nano:
sudo vim /etc/apt/sources.list.d/kubernetes.list
Добавьте в новый файл следующий текст:
deb http://apt.kubernetes.io/ kubernetes-xenial main
Загрузите ключ gpg и используйте устаревшийapt-key
чтобы включить использование нового репо:
sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
sudo apt-get update
sudo apt-get install kubeadm kubelet kubectl
Использовать это:
sudo mkdir -p /etc/apt/keyrings
sudo curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes.gpg
sudo echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/kubernetes.gpg] \
http://apt.kubernetes.io/ kubernetes-xenial main" \
| sudo tee /etc/apt/sources.list.d/kubernetes.list > /dev/null
sudo apt-get update
sudo apt-get install kubeadm kubelet kubectl
Если вам нужна конкретная версия пакетов Kubernetes, например 1.26 (а не последняя), вы можете сделать это на последнем шаге:
sudo apt-get install -y kubelet=1.26.0-00 kubeadm=1.26.0-00 kubectl=1.26.0-00
Как упоминалось ранее, вы можете заменить ключ, использованный в этом примере, другим ключом (https://packages.cloud.google.com/apt/doc/apt-key.gpg). Выбор «kubernetes.gpg» в удаленном ключе был произвольным.
Использованная литература:
Я получил его предупреждение при попытке установить nodejs и npm в Ubuntu 20.04.
Чтобы быть более точным:
Вместо этого:
curl -sSL https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
Использовать это:
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarn.gpg >/dev/null \
echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
Итак, полный скрипт установки выглядел так:
apt-get install -y nodejs \
apt-get install -y npm gnupg2 \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarn.gpg >/dev/null \
echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
Еще один фрагмент кода, решающий проблему с использованием обновленного формата deb822:
{ echo 'Types: deb'
echo 'URIs: https://dl.k6.io/deb'
echo 'Suites: stable'
echo 'Components: main'
echo 'Signed-By:'
set -eo pipefail
KEY=C5AD17C747E3415A3642D57D77C6C491D6AC1D69
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x$KEY" \
| sed -e 's/^$/./g;s/^/ /g'
} | sudo tee /etc/apt/sources.list.d/k6.sources
sudo apt-get update && sudo apt-get install k6
В данном случае я устанавливаю интерфейс командной строки k6.io на Ubuntu 22.04 LTS. Адаптируйте, как считаете нужным.
Обратите внимание на.sources
- нет.list
!
Преимущество deb822 заключается в том, что публичный ключ для подписи пакета встраивается в исходный файл (и проверяет только пакеты этого репозитория, что более безопасно, чем доверять ему все остальные репозитории ) .
Быть встроенным в файл сохраняет другой| sudo tee
обруч:
Types: deb
URIs: https://dl.k6.io/deb
Suites: stable
Components: main
Signed-By:
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: Hockeypuck 2.1.0-189-g15ebf24
Comment: Hostname:
.
xsFNBGBLRGQBEADCqEcl4YKYLAW8p/rEzBrDLi8fewyqPTLFWosWeu1a4fKzPcW8
ggl/pjRcXxAxgCt1EhX9bjOrzavdnfnKLYuNkwR0vLWZtNEhAsOovsDzFF6n+WsN
jtxL9nBZZ/7tgImxMUds8EXotx3R0Le5kbW0QWaWK8NDNayUChGF4ijM1dcacefA
1ObrQvEKMybdFMxQM+oQjLeIe8TARaoATeLXh/LprNHqDWSAqE3KogChAMykp10i
...
Пришлось накрутить вышесказанное, потому что их официальные инструкции в очередной раз были нарушены .
Быстрый способ исправить это для пользователей Linux с пользовательским интерфейсом:
Найдите PPA и сделайте
sudo add-apt-repository ppa:[MY_PPA]
(новый PPA со связкой ключей добавляется автоматически и обновляется)sudo apt update
Перейдите в «Источники программного обеспечения -> PPA» и удалите старый PPA (убедитесь, что новые были добавлены правильно с помощью набора ключей).
Недавно столкнулся с этой ошибкой при попытке установить Jenkins на моем экземпляре EC2. Тем не менее, я смог решить эту проблему, выполнив следующие действия:
- Добавьте ключ репозитория в свою систему, запустив:
"wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key |sudo gpg --dearmor -o /usr/share/keyrings/jenkins.gpg"
Возможно, вам придется заменить jenkins пакетом/программным обеспечением, которое вы хотите установить.
- Прикрепите адрес репозитория пакетов Debian к серверу sources.list, выполнив:
"sudo sh -c 'echo deb [signed-by=/usr/share/keyrings/jenkins.gpg] http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d /jenkins.list'"
- Бегать:
"удачное обновление"
Таким образом, apt будет использовать только что созданный репозиторий.
- Перейдите к попытке/повторной попытке установки.
Надеюсь это поможет :). Источник: https://www.digitalocean.com/community/tutorials/how-to-install-jenkins-on-ubuntu-22-04.
Это также происходит при плохом соединении, просто невозможном соединении через порт, используемый для загрузки, а точнее: порт 80.
sudo ufw allow port 80
затем повторите попытку, некоторым это может помочь.