Создание своего репозитория Debian при помощи reprepro

Содержание

Настройка reprepro

Перейдём в каталог /home/ufanet и создадим в нём подкаталог repo для размещения файлов будущего репозитория:

$ cd /home/ufanet
$ mkdir repo

Создадим каталог с файлом конфигруации:

$ mkdir conf

Поместим в него конфигурацию репозитория:

$ cat > conf/distribution <<END
Codename: wheezy
Architectures: amd64 source
Components: main
AlsoAcceptFor: UNRELEASED
SignWith: default
END

Опция AlsoAcceptFor со значением UNRELEASED позволит добавлять в репозиторий файлы с расширением .changes, в которых вместо имени репозитория указано UNRELEASED.

Подготовка ключа репозитория

Сгенерируем ключ, указав в качестве владельца ключа "Division of software development and maintenance (ufanet)", а в качестве почтового ящика - "site@ufanet.ru". Ниже приведён полный диалог с командой gpg в процессе генерации новых ключей:

# gpg --gen-key
gpg (GnuPG) 1.4.12; Copyright (C) 2012 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Division of software development and maintenance (ufanet)
Email address: site@ufanet.ru
Comment: 
You selected this USER-ID:
    "Division of software development and maintenance (ufanet) <site@ufanet.ru>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

You don't want a passphrase - this is probably a *bad* idea!
I will do it anyway.  You can change your passphrase at any time,
using this program with the option "--edit-key".

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 273 more bytes)
+++++                                                                                                           
......+++++
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 61 more bytes)
+++++
........+++++
gpg: key 1FCF0B50 marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   2048R/1FCF0B50 2024-03-20
      Key fingerprint = 700D 7827 6E63 BE82 C8FF  D47F 9F6E 3E4C 1FCF 0B50
uid                  Division of software development and maintenance (ufanet) <site@ufanet.ru>
sub   2048R/D4B37046 2024-03-20

Экспортируем публичный ключ будущего репозитория:

$ gpg --export -a site@ufanet.ru > repo.key

Добавим в репозиторий файлы с расширением .changes из каталога /home/stupin:

$ ls -1 /home/stupin/*.changes | xargs -n1 reprepro include wheezy

Аналогичным образом добавим в репозиторий файлы с расширением .deb:

$ ls -1 /home/stupin/*.deb | xargs -n1 reprepro includedeb wheezy

И добавим файлы с расширением .dsc, с которыми связаны исходные тексты для сборки пакетов:

$ ls -1 /home/stupin/*.dsc | xargs -n1 reprepro includedsc wheezy

Осталось опубликовать репозиторий:

$ reprepro export wheezy

Настройка веб-сервера

Для того, чтобы к репозиторию можно было обращаться из сети, установим веб-сервер nginx:

# apt-get install nginx-light

Создадим файл /etc/nginx/sites-available/repo.lo.ufanet.ru с конфигурацией сайта repo.lo.ufanet.ru:

server {
        root /srv/repo;
        index index.html index.htm;

        server_name repo.lo.ufanet.ru;

        location / {
                try_files $uri $uri/;
                autoindex on;
        }

        location /conf {
                deny all;
        }
        location /db {
                deny all;
        }
}

Включим эту конфигурацию:

# ln -s /etc/nginx/sites-available/repo.lo.ufanet.ru /etc/nginx/sites-enable/repo.lo.ufanet.ru
# /etc/init.d/nginx reload

Использование репозитория

Пропишем в списки репозиториев в файле /etc/apt/sources.list новый репозиторий:

deb http://repo.lo.ufanet.ru/ wheezy main

Установим ключ репозитория:

# wget --quiet -O - http://repo.lo.ufanet.ru/repo.key | apt-key add -

Далее можно использовать пакеты из репозитория привычным образом. Например, можно получить свежий актуальынй список пакетов из репозитория и установить из него обновлённые пакеты:

# apt-get update
# apt-get upgrade