среда, 6 февраля 2013 г.

Настройка exim для работы с redmine

Внезапно возникла задача поднять сабж.

1. Установить ruby.
sudo yum install ruby

2. Скопировать скрипт rdm-mailhandler.rb из поставки redmine в /usr/local/bin, сделать исполняемым.
sudo cp rdm-mailhandler.rb /usr/local/bin
sudo chmod +x /usr/local/bin/rdm-mailhandler.rb

3. Настройка exim:
Для роутеров имеет значение порядок:

itdesk_router:
        driver = accept
        domains = +local_domains
        local_parts = it-desk
        transport = itdesk_transport

itdesk_transport:
        driver = pipe
        command = /usr/local/bin/rdm-mailhandler.rb --url http://it-desk.DOMAIN --key SECRET --project tickets --unknown-user create
        delivery_date_add
        envelope_to_add
        return_path_add

Литература:
http://www.redmine.org/projects/redmine/wiki/RusRedmineReceivingEmails

no iKVM64 in java.library.path (SuperMicro IP KVM)

Предыстория: нужно было из дома удаленно перегрузить сервер на базе SuperMicro X9SCi-X9SCA. Поскольку полной уверенности в том, что новое ядро заведется с первого раза не было, нужно было наблюдать за консолью сервера. В сети есть несколько серверов, на которые проброшен SSH, поэтому я, не долго думая, сделал проброс 80-го порта на удаленный хост с помощью:
ssh -p PORT -L 2080:IP:80 USER@HOST, где
PORT - номер внешнего порта, который натится в 22 порт на отдельном сервере
2080 - произвольный порт на локальной машине
IP - IP-адрес интересующего сервера внутри сети, например, 10.1.11.10
80 - порт на интересующем сервере внутри сети. в моем случае 80
USER - имя пользователя
HOST - внешний ip-адрес

Теперь можно зайти в браузере на http://127.0.0.1:2080 и увидеть страницу IP KVM SuperMicro. Залогиниться, нажать Remote Control -> Console Redirection -> Launch Console, на компьютер скачивается launch.jnlp. Запускаем файл и получаем малопонятную ошибку. Открываем файл и замечаем следующие моменты:
1. в файле подразумевается загрузка дополнительного jar-файла для разных ОС (Windows/Linux/Mac) и архитектур (x86/x86_64/amd64)
2. адрес, с которого скачивать файл - https://127.0.0.1:443
3. Секция
   <application-desc main-class="tw.com.aten.ikvm.KVMMain">
     <argument>127.0.0.1</argument>
     <argument>5900</argument>
     *****

Соответственно, нужно пробросить дополнительно порт 443 и 5900:
sudo ssh -p PORT -L 443:IP:443 USER@HOST
ssh -p PORT -L 5900:IP:5900 USER@HOST
Перелогиниться, загрузить файл, запустить и видим такую ошибку JAVA:
"no iKVM64 in java.library.path"
В данном случае помогает изменение файла launch.jnlp:

Найти секцию соответствующую вашей архитектуре и ОС, например:
  <resources os="Linux" arch="x86_64">
    <nativelib href="liblinux_x86_64.jar" download="eager" version="1.0.3"/>
  </resources>

Заменить на:
  <resources os="Linux" arch="x86_64">
    <nativelib href="liblinux_x86_64.jar" download="eager" version="1.0.3"/>
    <property name="jnlp.packEnabled" value="true"/>
    <property name="jnlp.versionEnabled" value="true"/>
  </resources>

Сохранить и запустить заново.
PS: таки не завелось новое ядро с первого раза.

Литература:
http://www.p14nd4.com/blog/2011/09/30/solved-no-ikvm64-in-java-library-path-on-supermicro-ip-kvm/

вторник, 5 февраля 2013 г.

Установка sphinx и pecl-sphinx (Gentoo)


Краткая заметка на память.

# Обновить portage
emerge --sync
emerge portage

# Установить sphinx
USE="debug id64 mysql -postgres stemmer test" emerge app-misc/sphinx

# Скопировать или переименовать конфигурационный файл
cd /etc/sphinx
cp sphinx.conf.dist sphinx.conf

# Настроить разрешения, чтоб группа web могла редактировать конфигурационный файл
chmod 664 /etc/sphinx/*
chown root:web /etc/sphinx/*

# Добавить пользователя и группу sphinx
groupadd -g 494 sphinx
useradd -g sphinx -u 494 -d /var/lib/sphinx -s /bin/bash -c "Sphinx server" sphinx

# Создать папки, где будут храниться логи, pid-файлы и данные
mkdir -p /var/log/sphinx
mkdir -p /var/run/sphinx
mkdir -p /var/lib/sphinx/data

# Настроить правильные разрешения на эти папки
chown sphinx:sphinx /var/log/sphinx
chown -R sphinx:sphinx /var/lib/sphinx
chown sphinx:sphinx /var/run/sphinx

# Добавить в /etc/sudoers что-то типа
%web ALL=NOPASSWD:/etc/init.d/searchd
%web ALL=(sphinx) NOPASSWD:/usr/bin/indexer

# Проверить от пользователя группы web
sudo -u sphinx /usr/bin/indexer
sudo /etc/init.d/searchd restart|stop|start

# Установить расширения php
PHP_TARGETS="php5-4" emerge pecl-sphinx

четверг, 10 января 2013 г.

Cron и переменные окружения

Есть мегаскрипт на php. Ему нужны переменные окружения типа HTTP_HOST для запуска из командной строки по крону. Итого в crontab пользователя:

*/10 * * * * . $HOME/.bashrc; /path/to/script/code.php some_params;


среда, 9 января 2013 г.

mountall: /lib/x86-64-linux-gnu/libc.so.6 version 'GLIBC_2.14' not found (required by /lib/libply.so.2)

Знакомый попросил разобраться. У него вылезло после обновления Ubuntu вот такое сообщение при загрузке:
mountall: /lib/x86-64-linux-gnu/libc.so.6 version 'GLIBC_2.14' not found (required by /lib/libply.so.2)
General error mounting file systems.
A maintenance shell will now be started.
CONTROL-D will terminate this shell and reboot the system


И дальше не грузится. Вылечилось такими действиями:
1. Запретить загрузку plymouth при старте системы (в меню grub2):
добавить в конец строки с linux:
nosplash noplymouth init=/sbin/init -v noplymouth

2. После загрузки:
dpkg-reconfigure -a
Может выдать на экран ошибки. Предложит запустить нижеследующую команду.

Менеджер пакетов постарается разрешить найденные конфликты, предложив удалить или заменить конфликтующие пакеты. Любые действия в этом режиме обязательно требуют подтверждения с вашей стороны (ВНИМАТЕЛЬНО читайте предложенные варианты).
3. apt-get -f install

суббота, 5 января 2013 г.

Apache server-status 404

Для мониторинга необходимо было настроить снятие статуса веб-сервера Apache. Модуль загрузил, настроил - выдает 404 хоть тресни.
Быстрое решение - изменить:

NameVirtualHost *:80
<VirtualHost *:80>
на

NameVirtualHost 1.2.3.4:80
<VirtualHost 1.2.3.4:80>

суббота, 22 декабря 2012 г.

CentOS 6 и KVM. Запуск виртуалки.

Необходимо было запустить виртуалку с Ubuntu на хосте с CentOS6 (64 bit). Собственно, небольшое описание того, что было сделано. Во-первых, хочу отметить, что при настройке надо быть внимательным, иначе получаются весьма забавные вещи. В моем случае, не обратил внимание на вывод команды ip addr show, где было state DOWN для интерфейса в составе моста - из-за чего и было потрачено много времени впустую. Виртуалка была поднята на хосте с Gentoo и переезжала на хост с CentOS ввиду загруженности машины с Gentoo.

1. Проверяем, что процессор поддерживает необходимые инструкции:

egrep '(svm|vmx)' /proc/cpuinfo

2. Проверяем загружены ли необходимые модули:

lsmod | grep kvm

3. Сервер имеет 2 сетевых интерфейса (на самом деле есть еще один, но он отдан под IPMI). Подключаем оба в сеть, копируем /etc/sysconfig/network-scripts/ifcfg-eth0 в /etc/sysconfig/network-scripts/ifcfg-br0. Приводим ifcfg-eth0 к виду (mac-адрес, ip-адрес, маску, шлюз, адрес днс-сервера поменяйте на свои):

DEVICE="eth0"
BRIDGE="br0"
NM_CONTROLLED="no"
ONBOOT=yes
HWADDR=00:25:90:78:74:8C

Файл ifcfg-br0 в таком виде:

DEVICE="br0"
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT=yes
TYPE="Bridge"
DELAY=0
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System br0"
IPADDR=192.168.1.XX
NETMASK=255.255.255.0
GATEWAY=192.168.1.Z
DNS1=192.168.1.XY

Файл ifcfg-eth1:

DEVICE="eth1"
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT=yes
TYPE="Ethernet"
UUID="7a455c42-2ceb-4cf2-a13c-a86baf7d42ef"
HWADDR=00:25:90:78:74:8D
PEERDNS=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth1"
IPADDR=192.168.1.XZ
NETMASK=255.255.255.0


В данном случае eth1 будет использоваться под нужды сервера, eth0 будет входить в состав моста br0 и обслуживать виртуалку(и).

4. Устанавливаем нужные пакеты для работы с мостом и виртуальными TUN/TAP интерфейсами:
sudo yum -y install tunctl bridge-utils

5. Рестартуем сеть командой:
sudo service network restart

6. Проверяем состояние интерфейсов (должны быть в UP):
ip addr show | grep eth | grep state

2: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

7. Проверяем загружен ли модуль tun:
lsmod | grep tun
Если нет - то:
modprobe tun

Модуль tun - это универсальный TUN/TAP драйвер, позволяющий создавать программные сетевые устройства (программная сетевая карта). TAP симулирует Ethernet устройство и работает на канальном уровне, а TUN работает на сетевом уровне. 
Пакет, посылаемый операционной системой через TUN/TAP устройство, обрабатывается программой, которая контролирует это устройство, в данном случае qemu (см. команду в конце заметки).

Создаем виртуальное устройство tap0:
tunctl -b

8. Поднимаем устройство tap0:
ifconfig tap0 up

9. Проверить/установить параметры в файле sysctl.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

10. Проверить правила iptables, чтоб не блокировали нужный трафик (в моем случае iptables не использовался). Например, командой:

iptables -I RH-Firewall-1-INPUT -i br0 -j ACCEPT

11. Добавляем интерфейсы в состав моста:

brctl addif br0 eth0
brctl addif br0 tap0

12. Стартуем виртуалку:
/usr/libexec/qemu-kvm -hda /some/path/ubuntu10.04_2.img -m 6144 \
-net nic,macaddr=00:1a:dd:d8:bc:b6 -net tap,ifname=tap0,script=no,downscript=no \
-vnc :0 -name ubuntu -smp 4 -daemonize 

Литература:
http://www.linux-kvm.org/page/Networking
https://wiki.archlinux.org/index.php/QEMU#Networking
https://wiki.archlinux.org/index.php/KVM