[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Вопросы по созданию пакета.



Нашёл нормальную систему TTS для русского, с женским голосом.
Обыскался deb пакета, но так и не нашёл.
Решил сделать сам и заодно немного разобраться с тем, как пакеты создаются
(может даже, в перспективе статейку накатать %-), т.к. для scons я не нашёл в
интернетах краткого рецепта, как сделать пакет).
Вроде получилось, но остались вопросы.

Может, кому не лень будет читать то, что ниже, и на какие-то вопросы ответят.
Всё в тексте с "логом" моих действий. Файл со структурой пакета приложил.
Как создаются и для чего нужны дифы, идущие вместе с некоторыми пакетами?
Например, с xorg-server. Есть orig и diff. Откуда?
И ещё, что я сделал неправильно?

=====
Создание пакета для RHVoice.

Сначала загружаю исходники с репозитория:
git clone git://github.com/Olga-Yakovleva/RHVoice.git rhv_src

Программа собирается через scons.
Устанавливаю scons и необходимые сборочные зависимости:
# apt-get install scons libsox-dev libunistring-dev flite1-dev libiconv-hook-dev
expat

В принципе, не нужно:
# apt-get install libsonic-dev

Пытаюсь собрать для проверки:
$ cd rhv_src
$ scons

Собрал с библиотекой, поэтому её надо подгружать перед запуском, иначе будет
ругаться, что не найдена:
$ export LD_PRELOAD=$PWD/build/linux2/lib/libRHVoice.so

Система выводит обычный wav на стандартный вывод. Проигрываю через ALSA.
$ echo "Проверка синтеза речи."|build/linux2/bin/RHVoice -d $PWD/data -c
$PWD/config/ -W Elena |aplay
$ echo "Проверка синтеза речи."|build/linux2/bin/RHVoice -d $PWD/data -c
$PWD/config/ -W Aleksandr |aplay

Всё заработало. Удаляю LD_PRELOAD и сборочный каталог:
$ LD_PRELOAD=
$ rm -rf build

Получаю версию (как сделать, чтобы получалась по-человечески?):
$ RHV=$(sed -n 's/.*"package_version"\W*,\W*"Package
version"\W*,\W*"\(.*\)".*/\1/p' SConstruct)

Немного изменяю настройки: включаю библиотеку sonic и расстановку ударений через
апостроф (тут нужно делать патч или так нормально?):
$ sed -i '{ s/.*stress_marker=.*/stress_marker=`/ }; { s/.*libsonic/libsonic/g
}; {s/.*\(min_sonic[^=]*\).*/\1=0.5/}; { s/\(.*sonic.*\)=no/\1=yes/};'
config/RHVoice.conf

Название каталогов программы имеет заглавные буквы. Исправляю в SConstruct.
Оформил патчем.
(Возможно ли сделать, чтобы заголовок патча создавался автоматически, штатными
средствами?)

Создаю заголовок:
$ cat << EOF > ../00chgname
From: Artiom N.
Date: $(LANG="C"; date)
Subject: Change name of package to lowercase.

---
--- a/SConstruct
+++ b/SConstruct
EOF

Сам diff:
$ sed 's/\(env_args\["package_name"\]="\)RHVoice"/\1rhvoice"/' SConstruct|diff
-u SConstruct - |sed 's/--- -/--- SConstruct/' |sed '/^+++.*\|^---.*/d' >>
../00chgname
$ cd ..

Создаю архив с исходниками. dh_make --create-orig использовать нельзя, потому
что он не удаляет каталог GIT-а.
(Зачем ему архив с исходниками, если он собирает из тех, которые лежат в
каталоге программы, где собирается пакет?)
Формат названия пакета: <имя>-<версия>
$ mv rhv_src rhvoice-$RHV
$ fakeroot tar --exclude-vcs -cf - rhvoice-$RHV| gzip - > rhvoice_$RHV.orig.tar.gz
$ cd rhvoice-$RHV

Создаю структуру пакета:
$ dh_make -s -e artiomsoft@yandex.ru -f ../rhvoice_$RHV.orig.tar.gz

Добавляю созданный патч в пакет:
$ mkdir debian/patches
$ mv ../00chgname debian/patches && echo 00chgname > debian/patches/series &&
chmod +x debian/patches/series

Удаляю лишнее:
$ rm
debian/{docs,init.d.ex,init.d.lsb.ex,*.cron.d.ex,manpage.*,menu.ex,README.Debian,watch.ex,packet-default.ex,packet.doc-base.EX}

Добавляю каталоги, используемые пакетом (их нужно добавлять тут, ведь они
всё-равно создадутся?)
$ cat << EOF > debian/dirs
/etc/rhvoice
/usr/share/rhvoice
EOF

Добавляю конфиги, идущие вместе с пакетом:
$ cat << EOF > debian/conffiles
/etc/rhvoice/RHVoice.conf
EOF

Меняю debian/copyright, debian/control, debian/rules.

В debian/rules заменяю цели сборки, чтобы собиралось sconf (правильно ли заменено?).

Флаги сборки получаю командой, о которой написано в README:
$ scons -h

Заменяю префиксы на штатные для Debian (префиксы есть в каких-то переменных или
так заменять нормально?):
build:
        dh_testdir
#       dh_testroot
        scons prefix=/usr sysconfdir=/etc

Затем, покопавшись в корневом SConstruct, нашёл переменную DESTDIR, которая
используется при установке:
override_dh_auto_install:
        dh_testdir
        dh_testroot
        scons DESTDIR=$(DESTDIR) install
        # Fucking scons doesn't create links...
#!!! (Как сделать нормальное создание ссылок? При установке в /tmp/dir/ scons их
создаёт, а при установке сюда - нет. Почему?)
        ln -s /usr/lib/libRHVoice.so.0.0.0 $(DESTDIR)/usr/lib/libRHVoice.so
        ln -s /usr/lib/libRHVoice.so.0.0.0 $(DESTDIR)/usr/lib/libRHVoice.so.0
        dh_installdirs

Меняю dh_auto_clean (мне надо только удалить каталог сборки, цель clean не
требуется заменять):
override_dh_auto_clean:
#       dh_testdir
#       dh_auto_clean
#       dh_clean
        rm -rf build

Наконец, создаю пакет:
dpkg-buildpackage -rfakeroot

Проверяю содержимое:
dpkg -c rhvoice_0.3-1_amd64.deb

И устанавливаю:
dpkg -i rhvoice_0.3-1_amd64.deb
=====

Attachment: rhvoice_0.3-1.debian.tar.gz
Description: GNU Zip compressed data


Reply to: