вторник, 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
--with-release=release install altlinux-release-* package
--with-boot=boot boot : propagator, nfs, nbd
--with-features=features features : see live/features directory ...

$ ls live/features
de-xfce
dm-autologin
dm-gdm
fakeinstall
locale-ru
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:
  • i586 --with-features=fakeinstall,tools-console,tools-network
  • i586 --with-features=fakeinstall,tools-console,tools-network,xorg,dm-autologin,de-xfce,sound,locale-ru
  • x86_64 --with-features=fakeinstall,tools-console,tools-network
  • x86_64 --with-features=fakeinstall,tools-console,tools-network,xorg,dm-autologin,de-xfce,sound,locale-ru

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

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

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

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

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

ALT Linux Live Lite

ALT Linux 4.0 Server Lite умер, да здравствует ALT Linux Live Lite! Как видно из названия, это в первую очередь live-система с минимальным набором необходимых инструментов, однако она также пригодна к установке самой себя на жесткий диск в ручном режиме:
  • размечаем диск с помощью fdisk/sfdisk/cfdisk
  • вызываем /live/install (диск) (раздел для корня) (раздел для свопа) - при этом инициализируется своп, создается и заполняется файловая система ext3 на корневом разделе, настраивается fstab и lilo
  • перезагружаемся с жесткого диска
  • настраиваем FQDN в /etc/sysconfig/network
  • настраиваем сеть
  • удаляем PermitRootLogin yes из /etc/openssh/sshd_config - это удобно для удаленной установки через выключенный по умолчанию ssh, но не очень подходит в production
  • создаем хотя бы одного пользователя и включаем его в группу wheel - по умолчанию таких пользователей еще нет
Система собрана на текущем Сизифе, доступны iso для архитертур i586 и x86_64, профиль можно взять здесь.

четверг, 13 августа 2009 г.

Telephone eXchange Management Library

На GitHub отправилась TXMLib (Telephone eXchange Management Library) - небольшая библиотека, предоставляющая унифицированный API к общим операциям различных цифровых АТС. Пока поддерживается только измерение параметров абонентской линии только для АТС типа EWSD, MT-20/25 и DX-200 (а также ее потомка АТСЦ-90), однако дизайн библиотеки позволяет сравнительно легко добавлять поддержку новых типов АТС и новых типов операций.

Для этого потребуется описать наследников классов:
  • txm.lib.common.core.CommandManager - для выделения ответов на команды из терминала АТС - поддержка чего-то отличного от текстового терминала возможна, но пока детально не проработана
  • txm.lib.common.core.OperationManager - для перевода унифицированных операций в конкретные команды АТС
Помимо хорошей экономии на общем коде и повышения его читабельности по сравнению с инструментами типа expect мы также получаем дополнительный бонус в виде сформированного графа операций, команд, их результатов и ошибок, готового к сериализации в XML (см. класс txm.lib.examples.OperationExample) или, например, в реляционную БД посредством ORM.

Принципиальным ограничением TXMLib явлется отсутствие поддержки операций с состояниием, но потребность в них невелика. Скорее наоборот, есть потребность пакетном режиме: выполнение одной операции не должно приводить к отказу выполнения другой - вместо этого они должны ставиться в очередь и выполняться по мере поступления.

Разумеется, диспетчеризацией операций и их передачей по сети TXMLib не занимается - это следующая задача для другого инструмента.

вторник, 17 февраля 2009 г.

ALT Linux 4.1 Desktop Lite - неофициальная сборка

Время от времени в community@lists.altlinux.ru спрашивают: а где бы раздобыть ALT Linux 4.1 Desktop Lite, который до релиза, как известно, не дожил :(

Поскольку я собирал для себя нечто подобное, но с другим дизайном и с другими дефолтами, и лучше поздно, чем никогда, выкладываю пересобранные на сегодняшнем branch/4.1 cd-образы:
Инсталлятор от официального не отличается ничем, свежеустановленная система выглядит так:


Если кому-то вдруг захочется это собрать, профиль можно взять здесь. Планы по сборке аналогичного дистрибутива на branch/5.0 есть, но если кто-нибудь меня опередит, я буду только рад :)