APT в ALT Linux/OwnRepo: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
(не показано 5 промежуточных версий 3 участников)
Строка 1: Строка 1:
= Создание собственного репозитория =
== Создание собственного репозитория ==


Задача: создать собственный репозиторий со своими пакетами.
Задача: создать собственный репозиторий со своими пакетами.


== Добавляем свой компонент ==
=== Добавляем свой компонент ===


Новый компонент будет называться '''extra'''.
Новый компонент будет называться '''extra'''.


В каталоге {{path|/var/www/repo/extra}} будет находится наш репозиторий. Создадим необходимую структуру для нового компонента:
Репозиторий будет находится в каталоге {{path|/var/www/repo/extra}}. Создадим необходимую структуру для нового компонента:


# mkdir -p /var/www/repo/extra/x86_64/RPMS.extra
<source lang="text" highlight="1"># mkdir -p /var/www/repo/extra/x86_64/RPMS.extra</source>


x86_64 - является архитектурой
где:
extra - суффикс компонента
*x86_64 — архитектура компонента;
*extra суффикс компонента.


== Наполнение компонента и создание индексов ==
=== Наполнение компонента и создание индексов ===


Установим apt-repo-tools:
Установим {{pkg|apt-repo-tools}}:
# apt-get install apt-repo-tools
<source lang="text" highlight="1"># apt-get install apt-repo-tools</source>


Скопируем пакеты RPM в каталог {{path|/var/www/repo/extra/x86_64/RPMS.extra}}:
Скопируем пакеты RPM в каталог {{path|/var/www/repo/extra/x86_64/RPMS.extra}}:
# cp -v *.rpm /var/www/repo/extra/x86_64/RPMS.extra
<source lang="text" highlight="1"># cp -v *.rpm /var/www/repo/extra/x86_64/RPMS.extra</source>


Устанавливаем утилиты работы с ЭП и создания индексов
=== Создание ключей GPG ===
# apt-get install gnupg apt-repo-tools


== Создание ключей GPG ==
Создаем пару ключей GPG:
 
<source lang="text" highlight="1"># gpg --gen-key
Создаем пару ключей GPG на 5 лет:
# gpg --gen-key
Выберите тип ключа:
Выберите тип ключа:
   (1) RSA и RSA (по умолчанию)
   (1) RSA и RSA (по умолчанию)
Строка 34: Строка 32:
   (3) DSA (только для подписи)
   (3) DSA (только для подписи)
   (4) RSA (только для подписи)
   (4) RSA (только для подписи)
Ваш выбор?  
Ваш выбор? </source>


// '''Пишем 1'''. Так как нам необходим тип ключа RSA и RSA  
// '''Пишем 1'''. Так как нам необходим тип ключа RSA и RSA  


длина ключей RSA может быть от 1024 до 4096 бит.
<source lang="text">длина ключей RSA может быть от 1024 до 4096 бит.
Какой размер ключа Вам необходим?  
Какой размер ключа Вам необходим? (2048)</source>


// Пишем размер ключа '''2048'''
// Пишем размер ключа '''2048'''


Запрошенный размер ключа - 2048 бит
<source lang="text">Запрошенный размер ключа - 2048 бит
Выберите срок действия ключа.
Выберите срок действия ключа.
         0 = без ограничения срока действия
         0 = без ограничения срока действия
Строка 50: Строка 48:
       <n>m = срок действия - n месяцев
       <n>m = срок действия - n месяцев
       <n>y = срок действия - n лет
       <n>y = срок действия - n лет
Срок действия ключа?  
Срок действия ключа? (0)</source>


// '''Ставим 0''' без ограничения срока действия.
// '''Ставим 0''' без ограничения срока действия.


Ключ действителен до Пн 23 ноя 2026 13:09:35 MSK
<source lang="text">Срок действия ключа не ограничен
Все верно? (y/N)  
Все верно? (y/N) </source>


// '''Ставим y'''  
// '''Ставим y'''  


Для идентификации Вашего ключа необходим ID пользователя. Программа создаст его
<source lang="text">Для идентификации Вашего ключа необходим ID пользователя. Программа создаст его
из Вашего имени, комментария и адреса электронной почты в виде:
из Вашего имени, комментария и адреса электронной почты в виде:
     "Baba Yaga (pensioner) <yaga@deepforest.ru>"
     "Baba Yaga (pensioner) <yaga@deepforest.ru>"
Строка 69: Строка 67:
     "Repo Signer <admin@company.net>"
     "Repo Signer <admin@company.net>"


Сменить (N)Имя, (C)Комментарий, (E)адрес или (O)Принять/(Q)Выход?  
Сменить (N)Имя, (C)Комментарий, (E)адрес или (O)Принять/(Q)Выход? </source>


// '''Пишем O''' (Принять)
// '''Пишем O''' (Принять)
Строка 75: Строка 73:
Для защиты секретного ключа необходима фраза-пароль.
Для защиты секретного ключа необходима фраза-пароль.


Далее, система предложит нам сгенерировать случайные числа. Для этого нужно следовать инструкции, которая будет написана в нашем терминале (движение мышкой, набор текста и т.д)
Далее, система предложит сгенерировать случайные числа. Для этого нужно следовать инструкции, которая будет написана в нашем терминале (движение мышкой, набор текста и т.д).


В конце, когда сформируется отпечаток ключа GPG, можно увидеть сформированный ID
В конце, когда сформируется отпечаток ключа GPG, можно увидеть сформированный ID. Пример:
'''Пример:  
<source lang="text">
ID: 261948CA
pub  2048R/AE3F8179 2022-04-20
Отпечаток (fingerprint): 966F F72F 03F4 AA67 6CI4 13FA D7CE F279 2619 49CA'''
      Отпечаток ключа = 5C1D 67E3 F163 EC94 A1BC 202B 68E6 302C AE3F 8179
</source>
где, AE3F8179 — ID GPG ключа
=== Создание индексов и подписи ===


Теперь нам необходимо применить наш ID GPG ключа для создания и подписи индексов:
Теперь необходимо применить наш ID GPG ключа для создания и подписи индексов:


# genbasedir --create --bloat --progress --sign --default-key=261948CA --topdir=/var/www/repo/extra x86_64 extra
<source lang="text" highlight="1"># genbasedir --create --bloat --progress --sign --default-key=AE3F8179 --topdir=/var/www/repo/extra x86_64 extra</source>


'''ВАЖНО'''  Обратите внимание, что в поле --default-key= Нужно использовать наш ID (в моем случае 261948CA)
{{Attention|Обратите внимание, что в поле --default-key нужно использовать наш ID (в данном случае AE3F8179).}}


Далее, вводим фразу-пароль для доступа к секретному ключу пользователя.
Далее, вводим фразу-пароль для доступа к секретному ключу пользователя.


Добавляем свой ключ, использованный для подписанного репозитория:
Добавляем свой ключ, использованный для подписанного репозитория:
Создаем файл:
#Создаем файл:
# nano /etc/apt/vendors.list.d/own.list
#:<source lang="text" highlight="1"># nano /etc/apt/vendors.list.d/own.list</source>
#И в этом файле (own.list) прописываем отпечаток ключа (fingerprint) и имя:
#:<source lang="text">
simple-key "own" {
      Fingerprint "5C1D67E3F163EC94A1BC202B68E6302CAE3F8179";
      Name "Ваше имя <ваша электронная почта>";
}</source>


И в этом файле (own.list) прописываем наш fingerprint и имя :
{{Attention|Не забудьте поставить ; после поля Fingerprint и name.}}


simple-key "own" {
{{Attention|Отпечаток (Fingerprint) необходимо указать без пробелов.}}
        Fingerprint "966FF72F03F4AA676CI413FAD7CEF279261949CA";
        Name "Ваше настоящее имя <ваша электронная почта>"%;
}


'''ВАЖНО''' Не забудьте поставить ; после поля Fingerprint и name.
Импортируем публичный ключ в общую базу alt-gpgkeys:
 
'''ВАЖНО2''' Отпечаток (Fingerprint) указываем без пробелов.


Импортируем публичный ключ в общую базу alt-gpgkeys:
<source lang="text" highlight="1-2"># gpg --output ~/repo.gpg --export AE3F8179
# gpg --no-default-keyring --keyring /usr/lib/alt-gpgkeys/pubring.gpg --import ~/repo.gpg</source>


# gpg --output ~/repo.gpg --export 261948CA
{{Attention|При обновлении пакета alt-gpgkeys ключ подписи репозитория будет удалён. Необходимо или поставить пакет {{pkg|alt-gpgkeys}} на Hold (https://www.altlinux.org/Hold) или написать filetrigger по добавлению ключа в эту базу при обновлении пакета. Пример опакечивания такого filetrigger см. ниже. Но следует иметь ввиду, что внесение изменений в связку ключей несёт риск утраты к ней доверия со стороны пользователей, а для сертифицированных ОС это ещё и нарушение КСЗ дистрибутива, не допускаемое формуляром.}}
# gpg --no-default-keyring --keyring /usr/lib/alt-gpgkeys/pubring.gpg --import ~/repo.gpg


'''ВАЖНО3''' ВНИМАНИЕ! При обновлении пакета alt-gpgkeys ключ подписи репозитория будет удалён. Необходимо или поставить пакет alt-gpgkeys на Hold (https://www.altlinux.org/Hold) или написать filetrigger по добавлению ключа в эту базу при обновлении пакета.
== Примеры пакетов ==


Устанавливаем утилиту apt-repo:
Ссылка на ваш репозиторий может быть опакечена в основной репозиторий любым маинтейнером.
# apt-get install apt-repo


Добавляем свой репозиторий с ключом для проверки:
# Только ссылка на репозиторий: https://git.altlinux.org/gears/a/akvis-repo.git
# echo "rpm [own] file:/var/extra x86_64 extra" > /etc/apt/sources.list
# Ссылка с GPG-подписью: https://git.altlinux.org/gears/a/angie-pro-repo.git


== Добавление репозитория ==
Добавляем свой репозиторий с ключом для проверки (должен быть установлен пакет {{pkg|apt-repo}}):
<source lang="text" highlight="1"># apt-repo add "rpm [own] file:/var/extra x86_64 extra"</source>


[[Категория:APT]]
[[Категория:APT]]
{{Category navigation|title=APT|category=APT|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=APT|category=APT|sortkey={{SUBPAGENAME}}}}

Версия от 19:13, 27 апреля 2023

Создание собственного репозитория

Задача: создать собственный репозиторий со своими пакетами.

Добавляем свой компонент

Новый компонент будет называться extra.

Репозиторий будет находится в каталоге /var/www/repo/extra. Создадим необходимую структуру для нового компонента:

# mkdir -p /var/www/repo/extra/x86_64/RPMS.extra

где:

  • x86_64 — архитектура компонента;
  • extra — суффикс компонента.

Наполнение компонента и создание индексов

Установим apt-repo-tools:

# apt-get install apt-repo-tools

Скопируем пакеты RPM в каталог /var/www/repo/extra/x86_64/RPMS.extra:

# cp -v *.rpm /var/www/repo/extra/x86_64/RPMS.extra

Создание ключей GPG

Создаем пару ключей GPG:

# gpg --gen-key
Выберите тип ключа:
   (1) RSA и RSA (по умолчанию)
   (2) DSA и Elgamal
   (3) DSA (только для подписи)
   (4) RSA (только для подписи)
Ваш выбор?

// Пишем 1. Так как нам необходим тип ключа RSA и RSA

длина ключей RSA может быть от 1024 до 4096 бит.
Какой размер ключа Вам необходим? (2048)

// Пишем размер ключа 2048

Запрошенный размер ключа - 2048 бит
Выберите срок действия ключа.
         0 = без ограничения срока действия
      <n>  = срок действия - n дней
      <n>w = срок действия - n недель
      <n>m = срок действия - n месяцев
      <n>y = срок действия - n лет
Срок действия ключа? (0)

// Ставим 0 без ограничения срока действия.

Срок действия ключа не ограничен
Все верно? (y/N)

// Ставим y

Для идентификации Вашего ключа необходим ID пользователя. Программа создаст его
из Вашего имени, комментария и адреса электронной почты в виде:
    "Baba Yaga (pensioner) <yaga@deepforest.ru>"

Ваше настоящее имя: (Пишем наше настоящее имя)
Адрес электронной почты: (Пишем адрес электронной почты)
Комментарий: 
Вы выбрали следующий ID пользователя:
    "Repo Signer <admin@company.net>"

Сменить (N)Имя, (C)Комментарий, (E)адрес или (O)Принять/(Q)Выход?

// Пишем O (Принять)

Для защиты секретного ключа необходима фраза-пароль.

Далее, система предложит сгенерировать случайные числа. Для этого нужно следовать инструкции, которая будет написана в нашем терминале (движение мышкой, набор текста и т.д).

В конце, когда сформируется отпечаток ключа GPG, можно увидеть сформированный ID. Пример:

pub   2048R/AE3F8179 2022-04-20
      Отпечаток ключа = 5C1D 67E3 F163 EC94 A1BC  202B 68E6 302C AE3F 8179

где, AE3F8179 — ID GPG ключа

Создание индексов и подписи

Теперь необходимо применить наш ID GPG ключа для создания и подписи индексов:

# genbasedir --create --bloat --progress --sign --default-key=AE3F8179 --topdir=/var/www/repo/extra x86_64 extra
Внимание! Обратите внимание, что в поле --default-key нужно использовать наш ID (в данном случае AE3F8179).


Далее, вводим фразу-пароль для доступа к секретному ключу пользователя.

Добавляем свой ключ, использованный для подписанного репозитория:

  1. Создаем файл:
    # nano /etc/apt/vendors.list.d/own.list
    
  2. И в этом файле (own.list) прописываем отпечаток ключа (fingerprint) и имя:
    simple-key "own" {
           Fingerprint "5C1D67E3F163EC94A1BC202B68E6302CAE3F8179";
           Name "Ваше имя <ваша электронная почта>";
    }
    
Внимание! Не забудьте поставить ; после поля Fingerprint и name.


Внимание! Отпечаток (Fingerprint) необходимо указать без пробелов.


Импортируем публичный ключ в общую базу alt-gpgkeys:

# gpg --output ~/repo.gpg --export AE3F8179
# gpg --no-default-keyring --keyring /usr/lib/alt-gpgkeys/pubring.gpg --import ~/repo.gpg
Внимание! При обновлении пакета alt-gpgkeys ключ подписи репозитория будет удалён. Необходимо или поставить пакет alt-gpgkeys на Hold (https://www.altlinux.org/Hold) или написать filetrigger по добавлению ключа в эту базу при обновлении пакета. Пример опакечивания такого filetrigger см. ниже. Но следует иметь ввиду, что внесение изменений в связку ключей несёт риск утраты к ней доверия со стороны пользователей, а для сертифицированных ОС это ещё и нарушение КСЗ дистрибутива, не допускаемое формуляром.


Примеры пакетов

Ссылка на ваш репозиторий может быть опакечена в основной репозиторий любым маинтейнером.

  1. Только ссылка на репозиторий: https://git.altlinux.org/gears/a/akvis-repo.git
  2. Ссылка с GPG-подписью: https://git.altlinux.org/gears/a/angie-pro-repo.git

Добавление репозитория

Добавляем свой репозиторий с ключом для проверки (должен быть установлен пакет apt-repo):

# apt-repo add "rpm [own] file:/var/extra x86_64 extra"