Всем добрых выходных. Что может быть проще чем обновить пакет на Ubuntu Server? Если он обновляется, то всё очень просто: "apt install пакет". А вот если нет...
Пришла задачка — обновить nginx на одном из web серверов. Главное требование, обновиться нужно на версию не ниже 1.21, потому что в более ранних версиях обнаружена какая-то уязвимость.
Захожу на сервер, смотрю версию nginx.
dpkg -l | grep nginx
У нас установлен nginx 1.18.0, да, нужно обновлять.
apt-get update
apt-get install nginx
dpkg -l | grep nginx
И ничего не изменилось, облом. Может, Ubuntu старая?
lsb_release -a
Да не такая и старая, Ubuntu 20.04.3 LTS. К сожалению такое случается, новые версии пакетов не сразу доходят до официальных репозиториев.
Делать нечего, будем обновлять пакет с репозитория nginx.
https://www.nginx.com/resources/wiki/start/topics/tutorials/install/
Создаём файл репозитория.
cd /etc/apt/sources.list.d
touch nginx.list
Для Ubuntu 20 прописываем внутри:
deb https://nginx.org/packages/ubuntu/ focal nginx
deb-src https://nginx.org/packages/ubuntu/ focal nginx
Обновляем локальные репозитории:
apt update
Находим текст ошибки:
Следующие подписи не могут быть проверены, так как недоступен открытый ключ: NO_PUBKEY $key
или
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY $key
Собственно, указанный ключ нам и нужен.
Копируем этот ключ и регистрируем:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62
Вот теперь можно обновлять nginx.
apt update
apt install nginx
Проверяем что установилось:
dpkg -l | grep nginx
Стоит nginx 1.22, условия задания соблюдены.
Перезапуск службы:
systemctl stop nginx
systemctl start nginx
Закрываем задачу.