0010 — Apt Key Deprecated

Содержимое страницы

Раньше типовая инструкция по подключению стороннего репозитория в Debian выглядела так (взято с сайта PostgreSQL):

# Create the file repository configuration:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt `
`$(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import the repository signing key:
wget \
    --quiet \
    -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
    sudo apt-key add -

# Update the package lists:
sudo apt-get update

# Install the latest version of PostgreSQL.
# If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
sudo apt-get -y install postgresql

Обратите внимание на установку ключа цифровой подписи. Просто берёшь и без задней мысли делаешь apt-key add. Однако, в Debian 11 Bullseye разработчики решили улучшить систему настолько, что сломали этот механизм. Сейчас правильный путь такой (взято с сайта Docker):

curl -fsSL https://download.docker.com/linux/debian/gpg | \
    sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo \
    "deb [arch=$(dpkg --print-architecture) `
    `signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] `
    `https://download.docker.com/linux/debian \
    $(lsb_release -cs) stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

Вместо apt-ket add используется команда gpg --dearmor. Ещё интереснее дальше: в свойствах репозитория прописывается, каким ключом подписаны пакеты.

Если переписать инструкцию для PostgreSQL, то она будет выглядеть примерно так:

curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
    sudo gpg --dearmor -o /usr/share/keyrings/postgresql-keyring.gpg

sudo echo \
    "deb [signed-by=/usr/share/keyrings/postrgresql-keyring.gpg] `
    `http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" \
    > /etc/apt/sources.list.d/pgpg.list

Тут, кстати, ещё одна тонкость. Недавно для себя открыл, что бектики (`) в командах оболочки можно использовать для красивого оформления скриптов. Если в одной строке идёт много всего, а хочется, чтобы было красиво, можно поставить 2 бектика — один в конце первой строки и один в нужном месте второй. Всё, что между ними, будет проигнорировано.

Использование wget

Лично мне использование wget кажется более предпочтительным, т. к. эта утилита по умолчанию есть практически везде. Установка ключа выглядит так:

wget -O- <URL>.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/<ключ>.gpg