21.12.2011

Как по фэн-шую установить нужную версию Java на Debian/Ubuntu

Вариантов вообще много. От дебиановского пути до аналога RVM/PyEnv под Java.
Я покажу ручной.

Сначала скачиваем ее на сайте Oracle под свою платформу в tar.gz.

Затем распаковываем и получаем в результате директорию вроде jdk1.7.0_02 :
tar xzf jdk-7u2-linux-x64.tar.gz
Если у Вас старая версия Java, у которой расширение .bin, то надо сделать так:
chmod +x jdk-1_5_0_22-linux-amd64.bin
./jdk-1_5_0_22-linux-amd64.bin

Эту директорию мы переносим туда, где должны храниться все Java-машины:
mkdir /usr/lib/jvm
mv jdk1.7.0_02 /usr/lib/jvm/.

Так как в перспективе будут выходить новые версии Java, то мы создадим симлинк и будем работать только с ним, а в случае установки новой версии, просто положим ее рядом и перенаправим симлинк:
cd /usr/lib/jvm/
ln -s jdk1.7.0_02 java-7-sun

Маленькая ремарка для незнакомых: во всех операционных системах есть переменная $PATH, которая содержит набор путей, где должны лежать программы. То есть если Вы не пишете полный путь к программе (например /bin/ls), а просто пишете ls (понятно, что в текущей директории этого бинарника нету), то система возьме переменную $PATH и проверит в каждой из этих директорий. Как правило, если Вы напишете слово java, то искать его система будет в /usr/bin/java - и он там есть. Но обратите внимание, что это не бинарник, а всего лишь ссылка (симлинк) на него:

# ls -l /usr//bin/java
lrwxrwxrwx 1 root root 22 2011-12-21 13:23 /usr/bin/java -> /etc/alternatives/java

И обратите внимание, что ведет она опять же не туда, где у нас лежит Java-машина, а в alternatives - то есть в точку, где мы можем "диспетчерить" направление между версиями.

Далее смотрим какие у нас версии уже заданы:
update-alternatives --display java

И видим, что на сейчас у нас сконфигурирован всего лишь один путь: /usr/lib/jvm/java-6-sun/jre/bin/java (или вообще ничего нету, а может наоборот накопились версии).
Главное обратите внимание: последний столбик - приоритет. Чем он больше, чем выше.

Но нам нужно добавить свою альтернативу. И добавляем ее со своим приоритетом (обратите внимание, что путь идет до бинарника включительно, и причем идет через симлинк, а не через версию конкретной Java):
update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-7-sun/bin/java 99

Ну вот и все.
Если захотите откатить, то просто переконфигурируйте с выбором другого номера пути:
update-alternatives --config java

А вот команда для тех, кто еще хочет поставить плагин на FireFox (внимание на архитектуру, поставьте свою: amd64 или i386):
update-alternatives --install "/usr/lib/mozilla/plugins/libjavaplugin.so" "mozilla-javaplugin.so" "/usr/bin/java java /usr/lib/jvm/java-7-sun/lib/amd64/libnpjp2.so" 1

Проверяется переходом в FireFox на страничку about:plugins


06.12.2011

Как заставить Suexec игнорировать несоответствие UID/GID директорий, программ и запускающего

Вариант для Debian.
Придется пересобрать Suexec.

Нам понадобятся следующие пакеты:
apt-get install dpatch libaprutil1-dev libapr1-dev sharutils libcap-dev autoconf devscripts
Переходим в директорию, где обычно все собираем:
cd /usr/src
Скачиваем:
apt-get source apache2-suexec
Переходим в директорию, из которой надо работать:
cd apache2-2.2.16
Редактируем исходный код:
vi +569 support/suexec.c

И комментируем полностью весь блок:
    /* if ((uid != dir_info.st_uid) ||
        (gid != dir_info.st_gid) ||
        (uid != prg_info.st_uid) ||
        (gid != prg_info.st_gid)) {
        log_err("target uid/gid (%ld/%ld) mismatch "
                "with directory (%ld/%ld) or program (%ld/%ld)\n",
                uid, gid,
                dir_info.st_uid, dir_info.st_gid,
                prg_info.st_uid, prg_info.st_gid);
        exit(120);
    } */

Теперь собираем то, что получилось:
debuild -uc -us
По истечении этой команды директорией выше появятся много пакетов Apache. Нам нужен только один из этих двух:
ls -l ../apache2-suexec*


03.12.2011

Управление хардверным RAID-контроллером LSI MegaSAS

Начну с того, что очень не рекомендую пользоваться контроллерами этого производителя даже не смотря на то, что он показывает неплохие результаты бенчмарков на фоне конкурентов. Причина: полное отсутсвие документации на сайте. Даже опция -help выглядит как издевательство:
...
MegaCli -PdMarkMissing -physdrv[E0:S0,E1:S1,...] -aN|-a0,1,2|-aALL
MegaCli -PdGetMissing -aN|-a0,1,2|-aALL
MegaCli -PdReplaceMissing -physdrv[E0:S0] -arrayA, -rowB -aN
MegaCli -PdPrpRmv [-UnDo] -physdrv[E0:S0] -aN|-a0,1,2|-aALL
MegaCli -EncInfo -aN|-a0,1,2|-aALL
MegaCli -EncStatus -aN|-a0,1,2|-aALL
MegaCli -PhyInfo -phyM -aN|-a0,1,2|-aALL
MegaCli -PhySetLinkSpeed -phyM -speed -aN|-a0,1,2|-aALL
...

Так впечатление, что писать документацию отдали на аутсурс в ЦРУ :)
Так что будем пытаться допереть научным тыком - благо он не раз нас спасал.


Существуют следующие утилиты:
MegaCLI - (CLI - command line interface). Основная управляющая утилита для просмотра состояния и конфигурирования работы контроллера.
MegaRC -  устаревшая текстовая утилита для управления контроллером.
MegaMon - (Mon - monitoring). Демон + клиент для мониторинга.
MegaSM - (SM - storage manager). Какая-то неведомая GUI-ёвая херня на Java. Весит как ядро Linux и требует иксов, что на сервере неприемлемо (не знаю для кого писали, не уж то для десктопов с адаптерами по несколько сотен долларов...).

В официальных репозиториях основных дистрибутивов, видимо, утилиты не распространяются, но скачать их можно тут: LSI public downloads.

Но для Linux там есть только .rpm пакет и неподходящая по битности библиотека lybsysfs.
Пользователи Debian x64 могут воспользоваться собранным мной .deb-пакетиком для 64-битных ОС из всего этого.

Итак следующие команды помогут облегчить жизнь: