Собственный apt repo

А началось всё с того, что один мой друг, у которого неисточимый запас ехидности, подколол меня отсутствием автоматического определения кодировки id3-тэгов в audacious в Kubuntu. И это всё после того, как он съехал на Kubuntu со своей горячо любимой Fedora Core (голос за сценой плюётся и фыркает от воспоминаний про rpm). Горячо любима она им была за то количество … как бы выразится … удовольствия, которое она ему преподносила при настройке/установке чего-либо.

А в это время я как раз Kubuntu забросил и съехал на XUbuntu (чему и рад несказаннно). А в ней GTK и плеера нормального, кроме audacious, похоже нету. И убунтовцы о нас не подумали - о русско/японско/китайско-говорящих - и это долбанное определение кодировок по-умолчанию отключено. Ну думаю припинаю. Полез на форумы - оказывается там вообще только одна опция нужна при сборке и всё. Счас мы его…. apt-get source, опцию включаем, собираем ляля запускаем - болт!

Что делать - ума не приложу. Забросил. Задолбали иероглифы через недели 2, полез опять в инет на сайт audacious и к ним же в irc. Там какое-то мегаумное тело мне говорит - пользуй 1.3 и выше версию и будет тебе счастье, иначе горе твоему русско/китайско/японско говорящему племени ибо в 1.2 версию боги возможность определения кодировки не включили как таковую и пересборки не помогут. Мда. Скачал, попробовал собрать - вообще даже не открывает файлы. Тут вспоминаю о том, что надо ж ещё audacious-plugins. Начинаю собирать - а там эта же опция, что и при сборке самого audacious. Включаю, собираю. Не играет. Несколько раз пытаюсь собрать, забрасываю.

На ум приходит здравая мысль, что когда я пересобирал пакет audacious, надо было пересобрать и плугины. Сказано - сделано. Пересобрал, запустил - и о чудо - заработало! Неплохой скин к рабочему audacious можно взять тут. После скачивания распаковываем в /usr/share/audacious/Skins/noncompliance.

Забегая наперёд, audacious, собранный с опцией автоопределения charset, лежит в моём репозитарии; о том где его найти и как воспользоватся прочесть можно тут.

Порадовавшись, решил сделать всё кошерно - ведь аппетит он во время еды приходит. Давай-ка думаю засетаплю репозитарий свой тем более недавно на работе делал. “И тут такое началось …” (с) Сетапил часа 2, для понятливых говорю что лирика тут заканчивается и начинается хауту по сетапу своего репозитария с ключами и на основе reprepro. В конце HOWTO - небольшая заметка об установке репозитария в vserver.

Apt repo HOWTO.

  • Устанавливаем reprepro
    apt-get install reprepro
  • Выбираем, где будет лежать репозитарий. пусть это будет /home/apt/. Тогда:
    mkdir /home/apt/conf/
    touch /home/apt/conf/distributions
  • Открываем /home/apt/conf/distributions в любимом редакторе. Там пишем что-то подобное, меняя на своё по смыслу:
    Origin: имя_например_ваше
    Label: название_репозитария
    Suite: stable
    Codename: feisty
    Version: 7.04
    Architectures: i386
    Components: main
    SignWith: yes - включает подписывание пакетов ключём.
    DebIndices: Packages Release . .gz

    В данном примере считается, что сгенерированный в следующем пункте gpg-ключ есть единственный либо первый в списке, который выдаёт gpg –list-keys. Им и будут подписыватся пакеты.

  • Генерируем ключ для подписывания пакетов. Я выбирал RSA длинной 1024. ВНИМАНИЕ! Пассфраза на ключ - пустая!
    gpg --gen-key
  • Экспортируем public key
    gpg --export -a "User Name" > public.key

    где “User Name” - имя, которое вводилось при создании ключа.

  • Добавляем пакет в репозитарий, предварительно закопировав его в /home/apt/:
    cd /home/apt
    reprepro -Vb . includedeb feisty our_cool_package-1.0ubuntu0.deb

    Это создаст структуру репозитария и добавит туда пакет our_cool_package, подписав его.

  • Настраиваем apache2 для обеспечения доступа к новоиспечённому репозитарию.
    cd /etc/apache2/sites-available
    touch apt

    Открываем ./apt в текстовом редакторе, пишем туда:

    <VirtualHost *:80>
        ServerAdmin webmaster@mysite.com
        ServerName apt.mysite.com

        DocumentRoot /home/apt
        <Directory />
            Options -FollowSymLinks
            AllowOverride None
        </Directory>

        <Directory /home/apt/>
            Options -FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
        </Directory>

        ErrorLog /var/log/apache2/apt-error.log
        LogLevel debug
        CustomLog /var/log/apache2/apt-access.log combined
        ServerSignature Off
    </VirtualHost>

    Потом включаем созданный виртуал хост и перезапускаем apache2:

    cd /etc/apache2
    ln sites-available/apt sites-enabled/apt
    /etc/init.d/apache2 restart
  • Каким-то образом отдаём проэкспортированный ранее public key. Кошерно через keyserver или пакет типа my-keyring, но об этом позже - пока что я просто предлагаю выложить public key на блоге/сайте. Тем, кто будет пользоватся репозитарием, надо скачать ключ в любое удобное место и затем сделать от root:
    apt-key add /path/to/the/key/downloaded.key

    Должно выдать OK. Если всё сделано правильно до этого, то можно делать

    apt-get update

    и пользоватся пакетами из репозитария!

  • Заметка о vserver: может быть проблема лишь у меня, но я убедился методом неоднократной пробы для себя в том, что сгенерированный внутри vserver-environment gpg-ключ неюзабелен в последствии. Обошёл проблему я генерацией ключа на реальном хосте, экспортированием private key и импортированием его внутри vserver-environment. Делается это следующей последовательностью команд:

    gpg --gen-key
    gpg --export-secret-key -a "User Name" > private.key,
    # где User Name - полное имя, введённое при генерации ключа
    #.... копируем private.key внутрь висервера ...
    gpg --allow-secret-key-import --import private.key

    Использованные материалы:

  • Setting up your own APT repository with upload support
  • HowToSetupADebianRepository
  • Quick’n easy gpg cheatsheet
  • Фух, вроде всё. Комментарии приветствуются, ибо уверен что стиль написания хромает…. О собственно пользовании репозитарием будет позже, там всё очень просто и у меня уже готов материал, но на английском, - перевод сейчас “аффтар ниасилил”.

    3 Responses to “Собственный apt repo”

    1. Alexey Kovyrin Says:

      Умничка - хорошо написал :-) Только вот и помог бы англоязычным собратьям написав бы это все еще и на английском :-)

    2. idid Says:

      Помогу. Есть кое-какие идеи, по времени всё сразу не успеваю. Перевод будет скоро, я плугин для многоязыковости прикручу на днях.

    3. AndreyK Says:

      Спасибо автору за полезную статью ;)

    Leave a Reply