четверг, 12 августа 2010 г.

Король умер, да здравствует король ...

CallWeaver медленно, но верно впадает в анабиоз (критерий - количество новых коммитов в SVN), и потому я давно стал приискивать ему такую замену, которая не называется Asterisk.

Остановился в итоге на FreeSWITCH, который соблазнил меня:
  • Красивой архитектурой с честной модульностью и возможностью масштабироваться от софтфона до софтсвитча
  • Использованием уже зарекомендовавших себя свободных фреймворков (Apache Portable Runtime для обеспечения переностимости между различными платформами, SofiaSIP в качестве SIP-стека и т.д.)
  • Конфигурацией в XML (по мне это значительно удобнее ini-файлов) с возможностью перечитывать фрагменты конфигурации с HTTP-сервера в процессе работы
Правда размер дефолтной конфигурации совершенно безумен, да сама она скорее сборник примеров, чем то, от чего можно отталкиваться в процессе настройки системы для промышленной эксплуатации. Поэтому по аналогии с CallWeaver я выпилил для себя минимально работоспособный вариант, который дальше по мере необходимости уже можно наращивать дополнительными возможностями. Хотел было даже подбить текущего майнтейнера FreeSWITCH в ALT Linux сделать этот вариант конфигурации одним из коробочных - да тот оказался слишком несговорчивым :(

вторник, 4 мая 2010 г.

Java services with Maven

Наконец-то я научился использовать maven :) Устанавливаем аналогично Groovy:
# cd /opt
# wget http://www.sai.msu.su/apache/maven/binaries/apache-maven-2.2.1-bin.zip
# unzip apache-maven-2.2.1-bin.zip 
# ln -s apache-maven-2.2.1 maven
# cat > /etc/profile.d/m2home.sh << EOF
> M2_HOME=/opt/maven
> export M2_HOME
> export PATH=$PATH:$M2_HOME/bin
> EOF
# chmod 755 /etc/profile.d/m2home.sh
В качестве подопытного кролика используем мои старые примеры, разрезанные на 2 части:
Собираем:
$ git clone git://github.com/enp/service.git
$ cd service/
$ mvn package
$ du -s target/service-0.1*
2.2M    target/service-0.1-dist.zip
8.0K    target/service-0.1.jar
12K     target/service-0.1-src.zip
Запустить можно как приложение:
$ cd target/
$ unzip service-0.1-dist.zip 
$ cd service-0.1
$ java -jar service-0.1.jar 
И как сервис:
# apt-get install java-service
# java-service-create myservice
# service myservice start
# service myservice status
# service myservice stop
# java-service-destroy myservice
В пакете java-service в качестве уже скомпилированной реализации сервиса (файл /var/lib/java-service/template.zip) лежит то, что доступно по тегу service. Командой java-service-create myservice архив template.zip разворачивается в /var/lib/java-service/myservice - и вот содержимое этого каталога я уже подменяю моим собственным приложением.

пятница, 23 апреля 2010 г.

Новые сборки ALT Linux Live Lite c XFCE и KDE3

Немного доработал десктопную часть mkimage-profile-live и попутно на свежем branch/5.1 собрал livecd с XFCE и KDE3 (только i586) - причем последний по некоторым данным должен быть едва ли не легче первого.

Выглядят они так:





Инструкции по переносу загруженной системы на жесткий диск можно найти в файле /etc/issue и, соответственно, на всех текстовых консолях - впрочем чуть раньше я их уже приводил. Инструкции по изготовлению liveflash из livecd лежат в файле README прямо в корне iso-образов.

Желающие могут воспроизвести результаты следующим образом:

$ git clone git.alt:/people/enp/packages/mkimage-profile-live.git
$ cd mkimage-profile-live
$ git checkout autoconf
$ autoconf
$ ./configure \
  --with-release=5.1 \
  --with-aptconf=/home/enp/apt/apt.conf.M51.i586 \
  --with-kernel=el-smp \
  --with-features=fakeinstall,tools-console,tools-network,xorg,dm-autologin-gdm,de-xfce,apps-firefox,apps-office,apps-mobile,sound 
  --with-timezone=Europe/Moscow 
  --with-locale=ru_RU
  --with-user=user
$ make
$ du -s .work/.out/altlinux-5.1-live.iso 
516M    altlinux-5.1-live.iso

Это сборка образа с XFCE. Образ с KDE3 собирается аналогично, только dm-autologin-gdm,de-xfce нужно заменить на dm-autologin-kdm3,de-kde3.

вторник, 26 января 2010 г.

ALT Linux Live Lite для толстых бездисковых клиентов

Использовать современные рабочие станции с 1Gb RAM и (зачастую двухъядерными) Atom в минимальной комплектации в качестве тонких бездисковых клиентов кажется слишком расточительным, а найти менее производительное и дорогое (но при этом не б/у) железо чем дальше, тем сложнее. Самый логичный выход из этой ситуации - запуск DE и всех необходимых приложений локально, но с удаленного носителя, как и в случае тонких клиентов. Принципиальное отличие в том, что приложениям потребуется где-то сохранять результаты своей работы - но r/w /home можно держать на NFS, а остальное и потерять не жалко.

Образ для удаленной загрузки легко изготовить на основе профиля mkimage-profile-live.git, в который только что добавлена feature с именем nfshome - она позволяет указать адрес сервера и имя экспортируемого каталога в конфигурации syslinux примерно так:
label remote
  kernel altlinux-live-i586/vmlinuz
  append initrd=altlinux-live-i586/initrd.img root=/dev/nfs ip=dhcp fastboot nfsroot=192.168.100.209:/export/root nfshome=192.168.100.209:/export/home
В зависимости от необходимости авторизации пользователей можно либо использовать автологин и монтировать в /home разные каталоги для разных рабочих станций (и реализовать в nfshome автоподстановку каталога на основе имени рабочей станции), либо использовать LDAP. Поскольку ни то, ни другое пока не работает из коробки, то в нарушение традиции я не буду выкладывать образы - желающие могут собрать и допилить их самостоятельно.

среда, 23 декабря 2009 г.

Groovy first steps

Озаботившись скриптовой обвязкой для очередной инсталляции, где выразительности unix shell явно недостаточно, подумал о том, что поздняк метаться. Perl, Python, Ruby и прочие скриптовые языки хороши каждый по-своему, но от Java мне все равно никуда не деться. В то же время с Groovy я получу примерно тот же уровень комфорта при ad-hook scripting с сохранением всего, что я уже умею и сделал. Ибо код Groovy не просто компилируется в байткод JVM (таких языков много), но максимально синтаксически и семантически похож на Java.

Предварительные требования для Groovy: установленный JDK и прописанный JAVA_HOME (в ALT Linux для этого достаточно сказать apt-get install java-1.6.0-sun-devel tzdata-java). Процесс установки выглядит так:
# cd /opt
# wget http://dist.groovy.codehaus.org/distributions/groovy-binary-1.7.0.zip
# unzip groovy-binary-1.7.0.zip 
# ln -s groovy-1.7.0 groovy
# cat > /etc/profile.d/groovyhome.sh << EOF
> GROOVY_HOME=/opt/groovy
> export GROOVY_HOME
> export PATH=$PATH:$GROOVY_HOME/bin
> EOF
# chmod 755 /etc/profile.d/groovyhome.sh
Причины неиспользования groovy из альтовского репозитария (или JPackage в общем случае) просты - огромный список зависимостей, большая часть которых мне никогда не потребуется, и, как следствие, протухшие версии зависимых пакетов да и самого groovy. Проблема переносимости в случае ad-hook scripting менее актуальна, однако при увеличении размеров проекта она вполне может проявиться.

Теперь перелогинимся и убедимся в том, что Groovy у нас есть:
$ groovy -version
Groovy Version: 1.7.0 JVM: 1.6.0_17
а затем напишем традиционный Hello World:
$ cat > hello.groovy << EOF
> #!/usr/bin/env groovy
>
> def hello(name) {
>     println("Hello $name!")
> }
>
> hello("World")
> EOF
$ chmod 755 hello.groovy
$ ./hello.groovy 
Hello World!
Ну и тормоз же он однако:
$ time ./hello.groovy 
Hello World!
3.18user 0.18system 0:02.22elapsed 151%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (1major+25068minor)pagefaults 0swaps
И даже предварительная компиляция и запуск готового байткода помогает не сильно:
$ groovyc hello.groovy 
$ time java -cp .:$GROOVY_HOME/embeddable/groovy-all-1.7.0.jar hello
Hello World!
1.88user 0.10system 0:01.60elapsed 123%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (1major+15771minor)pagefaults 0swaps
Хотя здесь как раз нет ничего удивительного - скоростью запуска JVM никогда не отличалась. Для разных мелочей эту проблему можно обойти с помощью Groovy Shell:
$ groovysh 
Groovy Shell (1.7.0, JVM: 1.6.0_17)
Type 'help' or '\h' for help.
------------------------------------------------------------------------------------
groovy:000> def hello(name) {      
groovy:001> println("Hello $name!")
groovy:002> }
===> true
groovy:000> hello("World")         
Hello World!
===> null
groovy:000> exit
Для отлаженных скриптов лишних 3 секунд на запуск уже не очень жалко, ну а запускать их (и JVM вообще) слишком часто никто в здравом уме не станет - постоянно запущенный сервис будет работать значительно эффективнее.

среда, 9 декабря 2009 г.

Развитие ALT Linux Live Lite

Давно ожидаемый комбинаторый взрыв возможных конфигураций Live Lite заставил меня задействовать autoconf в одноименном бранче профиля. Выглядит примерно так:
$ autoconf

$ ./configure --help
...
  --with-aptconf=file       custom apt.conf location, e.g '--with-aptconf=/etc/apt/apt.conf'
  --with-release=release    install altlinux-release-* package
  --with-kernel=kernel      install kernel-image-* package
  --with-boot=boot          boot : propagator, nfs, nbd
  --with-features=features  features : see live/features directory ...
  --with-user=user          user : default user name
  --with-locale=locale      locale : en_US, ru_RU, ...
  --with-timezone=timezone  timezone : Europe/London, Europe/Moscow, ...

$ ls live/features
apps-firefox
apps-mobile
apps-office
de-xfce
dm-autologin
dm-autologin-gdm
dm-gdm
fakeinstall
sound
tools-console
tools-network
xorg
Типичная feature выглядит следующим образом:
$ cat live/features/dm-autologin/packages 
autologin

$ cat live/features/dm-autologin/image-scripts.d/01-autologin 
#!/bin/sh -e
cat >> /etc/sysconfig/autologin << EOF
USER=altlive
EXEC=/usr/bin/xinit
EXEC_ARGS=/usr/bin/startx
EOF
И пока для моих инсталляций такой способ формирования образов выглядит удобнее m-p-d. Желающие могут загрузить образы, собранные на текущем branch/5.1 (общая часть --with-release=5.1 --with-kernel=el-smp --with-user=user --with-timezone=Europe/Moscow --with-locale=ru_RU):
  • i586 --with-features=fakeinstall,tools-console,tools-network
  • i586 --with-features=fakeinstall,tools-console,tools-network,xorg,dm-autologin-gdm,de-xfce,apps-firefox,apps-office,apps-mobile,sound
  • x86_64 --with-features=fakeinstall,tools-console,tools-network
  • x86_64 --with-features=fakeinstall,tools-console,tools-network,xorg,dm-autologin-gdm,de-xfce,apps-firefox,apps-office,apps-mobile,sound
Немного измененная процедура установки выглядит теперь так:
  • размечаем диск с помощью [c|s]fdisk/mkswap/mkfs.ext4 или parted
  • вызываем /live/install (диск) (раздел для корня) - при этом загруженная система переносится на корневой раздел, настраивается fstab (туда прописываются корень и все найденные своп-разделы) и lilo
  • перезагружаемся с жесткого диска
  • настраиваем FQDN в /etc/sysconfig/network
  • настраиваем сеть
  • меняем рутовский пароль и пароль пользователя user - по дефолту они пустые

понедельник, 5 октября 2009 г.

Сетевая загрузка ALT Linux Live Lite

Пропагатор позволяет загружать ALT Linux Live Lite не только с локальных устройств, но и по сети, однако при этом образ загружаемой системы размещается в RAM - и это не очень хорошо в тех случаях, когда памяти мало. По аналогии с ALTSP можно монтировать корень загружаемой по сети системы непосредственно по NFS/NBD - профиль можно взять там же - но в бранче netboot.

Не удержался и сделал "ALTSP на коленке" - в настройках pxelinux можно указать параметры nbdswap для сетевого свопа и xdmcp для подключения к удаленному десктопу. Результаты в бранче netboot-xdmcp.