Нашёл нормальную систему 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 artioms...@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 =====
rhvoice_0.3-1.debian.tar.gz
Description: GNU Zip compressed data