URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9801
[ Назад ]

Исходное сообщение
"А подкиньте идею - реализация объекта Apt репозитарий."

Отправлено A , 23-Дек-13 12:07 
Apt репозитарий нужен для складёжа DEB (или RPM, у некоторых). Пакеты отбираются по определённым принципам, распихиваются по каталогам. Робот обходит эти каталоги, создаёт всё нужное - создаёт Apt репо.

Структура каталогов такая:


каталог-с-зависимостями-продукта
    |
    |____стабильной-ветки-кода-зависимости
    |           |
    |           |____зависимости-сборки
    |           |
    |           \____зависимости-установки
    |
    \____транковой-ветки-кода-зависимости
                |
                |____зависимости-сборки
                |
                \____зависимости-установки


Тогда Apt спецификация в /etc/apt/sources.list такая (я разбил одну строку спека на несколько):


deb  /путь-адрес/до/каталога/каталог-с-зависимостями-продукта
        стабильной-ветки-кода-зависимости
                зависимости-сборки
                зависимости-установки


Нужно написать этого робота. На первый взгляд просится сделать объект Apt репо. Типа такой:


класс AptРепозитарий {
    массив имена-веток-кода [массив имена-с-зависмостями];
}


Массив массивов - как-то криво это.

Подкиньте, плиз, идею, как красивее разбить на объекты, на составляющие.


Содержание

Сообщения в этом обсуждении
"А подкиньте идею - реализация объекта Apt репозитарий."
Отправлено Andrey Mitrofanov , 23-Дек-13 13:55 
> Тогда Apt спецификация в /etc/apt/sources.list такая (я разбил одну строку спека на
> несколько):
>
 
> deb  /путь-адрес/до/каталога/каталог-с-зависимостями-продукта
>         стабильной-ветки-кода-зависимости
>            
>     зависимости-сборки
>            
>     зависимости-установки
>

Мне (см.ниже) хваило "deb {file:|http:/}/path/to/dir/ /" с Packages и ко. лежащими в корне дерева директорий с пакетами.

> Нужно написать этого робота. На первый взгляд просится сделать объект Apt репо.
> Типа такой:

В левую руку - список каталогов, в правую - apt-ftparchive, и for на bash-е должен, вроде, решить. Мне (один-два локальных репо с пересобираемыми периодически пакетами и их вкладываением _руками в репо) хватило.


"А подкиньте идею - реализация объекта Apt репозитарий."
Отправлено A , 24-Дек-13 11:47 
> В левую руку - список каталогов, в правую - apt-ftparchive, и for
> на bash-е должен, вроде, решить. Мне (один-два локальных репо с пересобираемыми
> периодически пакетами и их вкладываением _руками в репо) хватило.

Да, я базируюсь на apt-ftparchive. Придумываю, не сделать ли обёртку, которая позволяет вообще не вспоминать о чём-то, кроме названия репо. Обёртка на Perl + Moose, и тем самым можно, вроде бы, "недорого" сделать объектно-ориентированную обёртку к запуску apt-ftparchive.


P.S. Для интересующихся, howto:

    http://silicone.homelinux.org/2009/02/27/signed-personal-deb.../
    http://silicone.homelinux.org/repository/
    http://silicone.homelinux.org/repository/update_repos


"А подкиньте идею - реализация объекта Apt репозитарий."
Отправлено Andrey Mitrofanov , 24-Дек-13 12:37 
>silicone.homelinux.org/repository/update_repos

#!/bin/sh

mkpacked() {
[ -r "$1" ] || return
nice gzip -9 <"$1" >"$1.gz"
touch -r "$1" "$1.gz"
nice bzcat -z <"$1" >"$1.bz2"
touch -r "$1" "$1.bz2"
}
mkmk() {
echo "*** $1"
  apt-ftparchive -d .db "$1" . /dev/null >"$2"
  if [ "$1" != "release" ]; then
    mkpacked "$2"
  else
    rm -f "Release.gpg"
    gpg --homedir ~/debian/local_keys -abs -o "Release.gpg" "Release"
    touch -r "Release" "Release.gpg"
  fi
}

mkmk packages Packages
mkmk sources Sources
[ "Contents" -nt ".db" ] || mkmk contents Contents
mkmk release Release


С идеями и ОО туго. Первым делом переписал бы на /bin/bash, но, вроде, и незачем. Ну, Release куцый, ну про override-ы чего-то там. А так, работает.