Когда-то я писал о том как создать репозиторий для debian-based операционных систем. Немного отредактировав, перенесу эту заметку сюда, чтобы все было в одном месте.
История о том как я создавал собственный репозиторий для дистрибутива Debian. Для дистрибутивов основанных на Debian алгоритм создания репозиториев очень похож или совершено такой же. Эта заметка не подойдет тем, кто хочет сделать зеркало репозитория Debian, для этого используются другие инструменты.
Необходимость организовать свой репозитория может возникнуть у того, кто создал свое программное обеспечение и хочет его выложить в открытый доступ в удобном для установки и обновления виде. Такой репозиторий также удобно использовать для локальных сетей, чтобы из большого Интернета не скачивать одни и те же пакеты много раз. Хотя для этого тоже есть какие-то инструменты.
Для организации репозитория на своем сервере можно использовать программу reprepro, но способ, описанный ниже, мне показался более наглядным. Итак, приступим.
Для начала следует выбрать дирректорию, в которой мы хотим выкладывать наши deb пакеты. Пускай это будет /var/www/repositories/debian.
Копируем все необходимые deb пакеты в /var/www/repositories/debian/main, там можно устроить любую структуру каталогов. Я сделал подкаталоги для каждого пакета и положил в них файлы .deb, .dsc, .changes и .tar.gz. Далее переходим в корень нашего репозитория
Создаем индексные файлы. Для бинарных пакетов сделать это можно с помощью команды dpkg-scanpackages.
Это следует проделать для каждой архитектуры, для которой есть пакеты в main. Затем необходимо создать индексные файлы для исходных текстов
И наконец, необходимо создать файл $prefix/dists/unstable/main/Release, который имеет следующую структуру:
Создайте такой файл и заполните необходимые поля, затем дайте команды
Последняя команда вычислит MD5Sum, SHA1 и SHA256 для файлов Packages* и Sources*.
Теперь осталось только подписать репозиторий. Если у Вас еще нет gpg ключа, то дайте команду gpg --gen-key и следуйте инструкциям. Если у Вас уже есть gpg ключ, то следующая команда подпишет ваш репозиторий:
На этом можно остановиться и начать пользоваться только что организованным репозиторием. Для того, чтобы aptitude, apt и др. смогли найти новый репозиторий, надо добавить необходимые записи в /etc/apt/sources.list. Если у вас локальный репозиторий, для себя:
Если репозиторий доступен по http:
Казалось бы, все готово, но я на этом не успокоился. :) Есть такой проект под названием DDTP (Debian Description Translation Project), участники которого занимаются переводом описаний к пакетам на разные языки. В современных основанных на Debian дистрибутивах менеджеры пакетов apt и aptitude уже умеют получать и обрабатывать переводы описаний. Мне захотелось перевести описания созданных пакетов на русский язык.
О том как создавать Translation файлы я смог узнать лишь из исходников пакета apt, прочитав содержимое файла README.ddtp. Файл Translation состоит из секций следующего вида:
При этом если английское описание такое
то сумма md5 вычисляется следующим образом: md5("XXX\n YYY\n .\n ZZZ\n").
Так как я не нашел готового решения для построения Translation файлов, я написал скрипт, который получает переводы пакетов и строит необходимые файлы для репозитория. Итак, выберем каталог куда будем сохранять переводы пакетов, например ~/work/Translations. Будем в ней создавать подкаталоги для разных переводов, например ~/work/Translations/en и ~/work/Translations/ru. В подкаталогах en и ru будут лежать файлы, названия которых совпадают с названиями пакетов. Например, файл ~/work/Translations/en/lsmbox имеет вид:
А файл ~/work/Translations/ru/lsmbox имеет точно такую же структуру, но описание переведено на русский язык. Ну а дальше построить файл Translation-ru это дело техники. :)
Результатом моих трудов оказался небольшой скрипт, который, возможно, поможет вам легко организовать свой собственный репозиторий.
Ссылки:
http://l10n-russian.alioth.debian.org/repository-howto.ru.html
http://www.debian.org/doc/manuals/repository-howto/repository-howto.en.html
http://www.debian.org/doc/manuals/apt-howto/
http://mirrorer.alioth.debian.org/
http://www.sfr-fresh.com/linux/misc/apt_0.7.14.tar.gz:a/apt-0.7.14/READM...
http://ddtp.debian.net/
http://letras.ru/2008/06/gpg-crossplatform-encryption/
История о том как я создавал собственный репозиторий для дистрибутива Debian. Для дистрибутивов основанных на Debian алгоритм создания репозиториев очень похож или совершено такой же. Эта заметка не подойдет тем, кто хочет сделать зеркало репозитория Debian, для этого используются другие инструменты.
Необходимость организовать свой репозитория может возникнуть у того, кто создал свое программное обеспечение и хочет его выложить в открытый доступ в удобном для установки и обновления виде. Такой репозиторий также удобно использовать для локальных сетей, чтобы из большого Интернета не скачивать одни и те же пакеты много раз. Хотя для этого тоже есть какие-то инструменты.
Для организации репозитория на своем сервере можно использовать программу reprepro, но способ, описанный ниже, мне показался более наглядным. Итак, приступим.
Для начала следует выбрать дирректорию, в которой мы хотим выкладывать наши deb пакеты. Пускай это будет /var/www/repositories/debian.
prefix=/var/www/repositories/debian
mkdir -p $prefix/main
Копируем все необходимые deb пакеты в /var/www/repositories/debian/main, там можно устроить любую структуру каталогов. Я сделал подкаталоги для каждого пакета и положил в них файлы .deb, .dsc, .changes и .tar.gz. Далее переходим в корень нашего репозитория
cd $prefix
Создаем индексные файлы. Для бинарных пакетов сделать это можно с помощью команды dpkg-scanpackages.
dir=$prefix/dists/unstable/main/binary-i386
mkdir -p $dir
dpkg-scanpackages --arch i386 main /dev/null > $dir/Packages
gzip -9c <$dir/Packages >$dir/Packages.gz
bzip2 -9c <$dir/Packages >$dir/Packages.bz2
Это следует проделать для каждой архитектуры, для которой есть пакеты в main. Затем необходимо создать индексные файлы для исходных текстов
dir=$prefix/dists/unstable/main/source
mkdir -p $dir
dpkg-scansources main /dev/null > $dir/Sources
gzip -9c <$dir/Sources >$dir/Sources.gz
bzip2 -9c <$dir/Sources >$dir/Sources.bz2
И наконец, необходимо создать файл $prefix/dists/unstable/main/Release, который имеет следующую структуру:
Archive: unstable
Suite: unstable
Component: main
Origin: название моей организации
Label: Debian репозиторий моей организации
Architecture: архитектуры
Создайте такой файл и заполните необходимые поля, затем дайте команды
dir=$prefix/dists/unstable/main
apt-ftparchive release $dir >>$dir/Release
Последняя команда вычислит MD5Sum, SHA1 и SHA256 для файлов Packages* и Sources*.
Теперь осталось только подписать репозиторий. Если у Вас еще нет gpg ключа, то дайте команду gpg --gen-key и следуйте инструкциям. Если у Вас уже есть gpg ключ, то следующая команда подпишет ваш репозиторий:
gpg -abs -o $dir/Release.gpg $dir/Release
На этом можно остановиться и начать пользоваться только что организованным репозиторием. Для того, чтобы aptitude, apt и др. смогли найти новый репозиторий, надо добавить необходимые записи в /etc/apt/sources.list. Если у вас локальный репозиторий, для себя:
deb file:///var/www/repository/debian unstable
main
deb-src file:///var/www/repository/debian unstable
main
Если репозиторий доступен по http:
deb http://example.com/repository/debian unstable
main
deb-src http://example.com/repository/debian unstable
main
Казалось бы, все готово, но я на этом не успокоился. :) Есть такой проект под названием DDTP (Debian Description Translation Project), участники которого занимаются переводом описаний к пакетам на разные языки. В современных основанных на Debian дистрибутивах менеджеры пакетов apt и aptitude уже умеют получать и обрабатывать переводы описаний. Мне захотелось перевести описания созданных пакетов на русский язык.
О том как создавать Translation файлы я смог узнать лишь из исходников пакета apt, прочитав содержимое файла README.ddtp. Файл Translation состоит из секций следующего вида:
Package: "имя пакета"
Description-md5: "Сумма md5 для английского описания"
Description-$lang.$encoding: "Перевод краткого описания"
"Перевод остального описания"
При этом если английское описание такое
Description: XXX
YYY
.
ZZZ
то сумма md5 вычисляется следующим образом: md5("XXX\n YYY\n .\n ZZZ\n").
Так как я не нашел готового решения для построения Translation файлов, я написал скрипт, который получает переводы пакетов и строит необходимые файлы для репозитория. Итак, выберем каталог куда будем сохранять переводы пакетов, например ~/work/Translations. Будем в ней создавать подкаталоги для разных переводов, например ~/work/Translations/en и ~/work/Translations/ru. В подкаталогах en и ru будут лежать файлы, названия которых совпадают с названиями пакетов. Например, файл ~/work/Translations/en/lsmbox имеет вид:
List number of total/unread messages for mailboxes
This program lists the number of total and unread messages in one
or several mailbox files.
А файл ~/work/Translations/ru/lsmbox имеет точно такую же структуру, но описание переведено на русский язык. Ну а дальше построить файл Translation-ru это дело техники. :)
Результатом моих трудов оказался небольшой скрипт, который, возможно, поможет вам легко организовать свой собственный репозиторий.
Ссылки:
http://l10n-russian.alioth.debian.org/repository-howto.ru.html
http://www.debian.org/doc/manuals/repository-howto/repository-howto.en.html
http://www.debian.org/doc/manuals/apt-howto/
http://mirrorer.alioth.debian.org/
http://www.sfr-fresh.com/linux/misc/apt_0.7.14.tar.gz:a/apt-0.7.14/READM...
http://ddtp.debian.net/
http://letras.ru/2008/06/gpg-crossplatform-encryption/
Код скрипта
#!/bin/sh # название вашей организации origin="Max V. Stotsky" # название репозитория вашей организации label="My small local repository" # архив suite=unstable component=main # поддерживаемые архитектуры archs="i386 ia64 powerpc amd64" # корневой каталог репозитория prefix=/home/lollo/public_html/repository/debian # каталог с переводами prefix_transl=/home/lollo/src/translations/my desc_dir=$prefix/dists/$suite/$component rm -r $prefix/dists cd $prefix # построение индексных файлов для бинарных пакетов for arch in $archs; do dir=$desc_dir/binary-$arch mkdir -p $dir dpkg-scanpackages --arch $arch $component /dev/null > $dir/Packages gzip -9c <$dir/Packages >$dir/Packages.gz bzip2 -9c <$dir/Packages >$dir/Packages.bz2 done # построение индексных файлов для исходных кодов dir=$desc_dir/source mkdir -p $dir dpkg-scansources $component /dev/null > $dir/Sources gzip -9c <$dir/Sources >$dir/Sources.gz bzip2 -9c <$dir/Sources >$dir/Sources.bz2 # строим фалы Translation-$lang if [ "$prefix_transl" != "" ]; then mkdir -p $desc_dir/i18n for lang in `ls $prefix_transl`; do if [ "$lang" == "en" ]; then continue fi output=$desc_dir/i18n/Translation-$lang for pack in `ls $prefix_transl/$lang`; do en_trans_file=$prefix_transl/en/$pack if [ -f $en_trans_file ]; then trans_file=$prefix_transl/$lang/$pack md5=`md5sum $en_trans_file | awk '{print $1}'` echo "Package: $pack" echo "Description-md5: $md5" echo "Description-$lang: `cat $trans_file`" echo fi done >$output gzip -9c <$output >$output.gz bzip2 -9c <$output >$output.bz2 rm $output done fi cd $prefix/dists/$suite if true; then echo "Archive: $suite Suite: $suite Component: $component Origin: $origin Label: $label Architecture: $archs" apt-ftparchive release . fi >Release gpg -abs -o Release.gpg Release
Комментариев нет:
Отправить комментарий