Упаковка и развертывание программ на perl под debian‎

  • 1,815 views
Uploaded on

YAPC Russia 2009 "May Perl 2"

YAPC Russia 2009 "May Perl 2"

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,815
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
9
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Упаковка и развертывание программ на perl под Debian Вячеслав Матюхин May Perl, Москва, 16-17 мая 2009 года
  • 2. Поиск по блогам Статистика • 280 пакетов • 100000 строк кода • 200 хостов • 20 групп хостов • 20 баз mysql до 100GB каждая
  • 3. Общие знания про Debian
  • 4. Debian Полезные скрипты Тысячи их.
  • 5. Debian Полезные скрипты Тысячи их. И все написаны на perl.
  • 6. Debian Полезные скрипты ...dh_make, dh-make-perl, debuild, debcommit, dupload, debrelease, dch, debc, debi, dpkg-buildpackage, dpkg-repack, dh_builddeb, dh_builddeps, dh_clean, dh_clearvcs, dh_compress, dh_css, dh_desktop, dh_fixperms, dh_gconf, dh_gencontrol, dh_install, dh_installcatalogs, dh_installchangelogs, dh_installcron, dh_installdeb, dh_installdebconf, dh_installdefoma, dh_installdirs, dh_installdocs, dh_installemacsen, dh_installexamples, dh_installinfo, dh_installinit, dh_installlogcheck, dh_installlogrotate, dh_installman, dh_installmanpages, dh_installmenu, dh_installmime, dh_installmodules, dh_installpam, dh_installppp, dh_installudev, dh_installwm, dh_installxfonts, dh_installxmlcatalogs, dh_link, dh_listpackages, dh_make, dh_makeshlibs, dh_md5sums, dh_movefiles, dh_perl, dh_perldeps, dh_pycentral, dh_pysupport, dh_python, dh_scrollkeeper, dh_shlibdeps, dh_strip, dh_suidregister, dh_testdir, dh_testroot, dh_testversion, dh_undocumented, dh_usrlocal, dh_versions, cvs-buildpackage, svn- buildpackage, apt-file, debconf, dpkg-parsechangelog, dpkg-repack, lintian...
  • 7. Debian dh_make • Создает скелет нового пакета
  • 8. Debian dh_make • Создает скелет нового пакета • И много мусора: $ ls debian/ changelog control cron.d.ex docs emacsen-remove.ex init.d.ex libyapm-perl.default.ex manpage.1.ex manpage.xml.ex postinst.ex preinst.ex README.Debian watch.ex compat copyright dirs emacsen-install.ex emacsen-startup.ex init.d.lsb.ex libyapm-perl.doc-base.EX manpage.sgml.ex menu.ex postrm.ex prerm.ex rules
  • 9. Debian dh_make • Создает скелет нового пакета • И много мусора • Карго-культ!
  • 10. Debian Необходимые файлы • debian/control - метаданные пакета • debian/compat - для debhelper • debian/rules - makefile для сборки • debian/changelog
  • 11. Debian debhelper #!/usr/bin/make -f clean: dh_testdir dh_testroot dh_clean $(MAKE) clean build: $(MAKE) test install: dh_testdir dh_testroot dh_clean -k dh_installdirs $(MAKE) install DESTDIR=debian/$(shell dh_listpackages) binary: install dh_testdir dh_testroot dh_installchangelogs dh_installdocs dh_installexamples dh_installman dh_link dh_compress dh_fixperms dh_perl dh_installdeb dh_gencontrol dh_md5sums dh_builddeb .PHONY: install binary
  • 12. Debian CDBS #!/usr/bin/make -f include /usr/share/cdbs/1/class/perlmodule.mk include /usr/share/cdbs/1/rules/debhelper.mk
  • 13. Debian dh-make-perl Одной строкой: $ dh-make-perl --email=mmcleric@yandex-team.ru Другой строкой: $ sudo dh-make-perl --install --cpan Some::Module
  • 14. Debian dh-make-perl Одной строкой: $ dh-make-perl --email=mmcleric@yandex-team.ru Другой строкой: $ sudo dh-make-perl --install --cpan Some::Module http://wiki.debian.org/Teams/DebianPerlGroup: ...just send a signed mail to debian-perl@lists.debian.org and list the packages you want us to take over.
  • 15. Наши расширения debhelper
  • 16. Debhelper dh_perldeps Как отобразить зависимости perl-модулей в зависимости пакетов?
  • 17. Debhelper dh_perldeps $ DH_VERBOSE=1 dh_perldeps processing file debian/libyandex-unrotate-perl/usr/share/perl5/Yandex/ Unrotate.pm dependent perl modules: warnings, strict, Digest::MD5, Yandex::Logger, Yandex::TmpFile, File::Basename realpath: /usr/share/perl/5.8/warnings.pm -> /usr/share/perl/5.8.8/warnings.pm realpath: /usr/share/perl/5.8/strict.pm -> /usr/share/perl/5.8.8/strict.pm realpath: /usr/lib/perl/5.8/Digest/MD5.pm -> /usr/lib/perl/5.8.8/Digest/MD5.pm realpath: /usr/share/perl/5.8/File/Basename.pm -> /usr/share/perl/5.8.8/File/ Basename.pm dependent debian packages: perl, perl-base, libyandex-logger-perl, perl-modules, libyandex-tmpfile-perl
  • 18. Debhelper dh_perldeps 1. Читаем весь код в пакете 2. Ищем /buses+((?:w+::)*w+)(?:s+(v?[d_.]+))?/sg 3. Просматриваем @INC в поисках файлов 4. Делаем dpkg -S на каждый файл 5. ??? 6. PROFIT!
  • 19. Debhelper dh_perldeps До: $ grep Depends debian/control Depends: ${perl:Depends}
  • 20. Debhelper dh_perldeps До: $ grep Depends debian/control Depends: ${perl:Depends} После: $ debc | grep Depends Depends: libyandex-logger-perl, libyandex-tmpfile-perl, perl (>= 5.6.0-16), perl-base, perl-modules
  • 21. Debhelper dh_builddeps $ dh_builddeps $ cat debian/control ... Build-Depends: perl, libyandex-ppb-ssh-perl, libyandex- unrotate-perl # [dh_builddeps] previous line is autogenerated ...
  • 22. Debhelper dh_builddeps - Debian policy запрещает генерировать control - Иногда некроссплатформенен + Зато незаменим для автосборок
  • 23. Debhelper dh_perldeps и dh_builddeps Безумная альтернатива - dpkg-depcheck • Использует strace • Тормозит
  • 24. Debhelper dh_versions Q: Для каких пакетов писать версии?
  • 25. Debhelper dh_versions Q: Для каких пакетов писать версии? A: Для некоторых.
  • 26. Debhelper dh_versions В исходниках: use version; our $VERSION = qv(‘{{DEBIAN_VERSION}}’) unless ‘{{DEBIAN_VERSION}}’ =~ /DEBIAN/; $ dh_versions В пакете: use version; our $VERSION = qv(’1.0.3’) unless ‘1.0.3’ =~ / DEBIAN/;
  • 27. Debhelper dh_versions $ grep Logger ./scheduler.pl use Yandex::Logger 1.0.2; $ debuild ... $ debc | grep Depends Depends: libyandex-logger-perl (>= 1.0.2), perl (>= 5.6.0-16), perl-base, perl-modules
  • 28. Debhelper И снова CDBS #!/usr/bin/make -f include /usr/share/cdbs/1/class/perlmodule.mk # include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/rules/ppb.mk
  • 29. Тестирование
  • 30. Тестирование Yandex::Config # scheduler.pl: use Yandex::Config ‘yandex-ppb-scheduler/main.cfg’, qw( $WORKDIR @DISTRIBUTE_TARGETS ); # тесты: BEGIN { $ENV{CONFIG_PATH} = ‘t/etc’; } system(“./scheduler.pl”);
  • 31. Тестирование Yandex::Config • Дефолтный CONFIG_PATH - “./etc:/etc” • Проверяет, что параметры объявлены • Работает на стадии компиляции
  • 32. Тестирование Yandex::DB # в коде: use Yandex::DB; $db_scheduler = connectdb(“scheduler”); $ # в консоли: $ connectdb scheduler
  • 33. Тестирование Yandex::DB Yandex::DB::Plugin::File $ cat /etc/db.d/scheduler [ { “priority” : 1, “base” : “scheduler”, “host” : “db.feeds.yandex.net”, “pass” : “pass”, “user” : “user”, } ]
  • 34. Тестирование Yandex::DB Yandex::DB::Plugin::Meta $ cat /etc/db.d/meta [{ quot;basequot; : quot;metaquot;, quot;hostquot; : quot;meta-db.feeds.yandex.netquot;, ... }, ...] [meta-dbs3.feeds.yandex.net] meta> select host, user, passwd, base from Bases where name = ‘scheduler’; +-----------------------+-----------+-----------+-----------+ | host | user | passwd | base | +-----------------------+-----------+-----------+-----------+ | db.feeds.yandex.net | user | pass | scheduler | +-----------------------+-----------+-----------+-----------+
  • 35. Тестирование Yandex::DB Yandex::DB::Plugin::Sandbox # t/test.t: $ENV{YANDEX_SANDBOX_DB} = “scheduler,feeds”; use Yandex::DB; $db = connectdb(“scheduler”); ... # заполнить базу временными данными $ENV{YANDEX_SANDBOX_DB_EXISTING} = $ENV{YANDEX_SANDBOX_DB}; system(“./scheduler.pl”); ... # проверить содержимое базы
  • 36. Тестирование Yandex::DB Yandex::DB::Plugin::Sandbox • Индивидуальные базы у каждого пользователя • Пересоздается на каждый запуск тестов • Но остается работать после запуска тестов
  • 37. Вячеслав Матюхин Разработчик Россия, Москва, ул. Льва Толстого, 16. +7 (495) 739-00-00 +7 (495) 739-70-70 — факс mmcleric@yandex-team.ru