понедельник, 31 марта 2014 г.

Oracle Enterprise Linux - сбой в процессе установки: hardware initialization

В процессе установки дистрибутивов RHEL, Centos и Oracle Enterprise Linux на некоторых железяках старт системы зависает  при hardware initialization

Необходимо в BIOS выключить поддержку IDE и 1394, установщик запуститься.

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

OpenVPN+quagga на Centos

Я тут поэкспериментировал, и надо быстренько записать, чтобы запомнилось, да, может, и пригодится кому-нибудь...

В "прошлый раз" в процессе настройки OSPF в нашей сети выяснилось, что L3-OpenVPN (т.е. с tun-интерфейсами) должен работать только в P-to-P. При работе L3-VPN в режиме server mode OSPF ни в какую не хотел видеть соседей.

Сегодня построил L2-VPN на tap-интерфейсах, OpenVPN в режиме server mode. ОSPF - работает, все ок, НО оказалось, что в полносвязной топологии L2-VPN использовать хуже, чем L3-VPN т.к. полносвязная топология образуется с помощью линков с метрикой 0 (tap-интерфейс симулирует сетевую карту) и OSPF начинает все удаленные сети (сети разных удаленных офисов) маршрутизировать через ОДИН ЛЮБОЙ ПЕРВЫЙ ПОДНЯВШИЙСЯ TAP-ИНТЕРФЕЙС.
Т.е., допустим, у нас есть офис в Солнечногорске, который по VPN связан и с Москвой, и с Барнаулом. При использовании tap-интерфейсов весь трафик и в Москву, и в Барнаул начинает ходить через первый поднявшийся tap при старте OpenVPN. Т.е., если первым поднялся tap0 на Москву, то и в Барнаул трафик пойдет через него, а если первым поднялся tap1 - на Барнаул, то и в Москву трафик пойдет через tap1.
В итоге получаем просадку по каналам связи и т.д...
А нужно, чтобы в разные удаленные сети трафик ходил через разные tap-ы. С tun-ами в данном случае для OSPF, все оказалось логичнее, но цена использования tun-ов - это использование OpenVPN только в режиме P-t-P.
Вот такие наблюдения..)

среда, 26 февраля 2014 г.

Настройка Samba для работы с Active Directory


1. Установка и настройка kerberos
Устанавливаем необходимы пакеты:
fs1-sun->/home/it3# yum install krb5-workstation ntp

Для правильной работы kerberos необходима точная синхронизация времени с контроллером домена. Открываем файл /etc/ntp.conf, комментируем все теги server и добавляем наш контроллер домена:

server dc1.tb22.ru

Добавляем в автозапуск и запускаем сервис ntpd:

fs1-sun->/home/it3# chkconfig ntpd on
fs1-sun->/home/it3# service ntpd start
Starting ntpd:                                             [  OK  ]

Открываем файл /etc/hosts и проверяем соответствие IP-адресов и имен, не правильно заполненный /etc/hosts может стать причиной множества ошибок:
fs1-sun->/home/it3# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.26.53 fs1-sun fs1-sun.tb22.ru
192.168.0.51 dc1 dc1.tb22.ru
192.168.0.52 dc2 dc2.tb22.ru
192.168.21.51 dc3 dc3.tb22.ru

Приводим файл /etc/krb5.conf к следующему виду:
[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = TB22.RU
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 TB22.RU = {
    kdc = dc1.tb22.ru
    admin_server = dc1.tb22.ru
    default_domain = tb22.ru
 }

[domain_realm]
 .tb22.ru = TB22.RU
 tb22.ru = TB22.RU

Приводим файл /etc/resolv.conf к следующему виду (в данном случае важно, чтобы в качестве dns-сервер был указан контр):
search tb22.ru
nameserver 192.168.0.51
nameserver 192.168.21.51
nameserver 8.8.8.8

Добавляем правила в iptables
nano /etc/sysconfig/iptables

-A INPUT -s 192.168.0.0/16 -m state –state NEW -p tcp -–dport 137 -j ACCEPT
-A INPUT -s 192.168.0.0/16 -m state –state NEW -p tcp -–dport 138 -j ACCEPT
-A INPUT -s 192.168.0.0/16 -m state –state NEW -p tcp -–dport 139 -j ACCEPT
-A INPUT -s 192.168.0.0/16 -m state –state NEW -p tcp -–dport 445 -j ACCEPT

Получаем тикет от контроллера домена:

fs1-sun->/home/it3# kinit root
Password for administrator@TB22.RU:

Проверяем полученный тикет:
fs1-sun->/home/it3# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: root@TB22.RU

Valid starting     Expires            Service principal
02/27/14 09:06:27  02/27/14 19:06:26  krbtgt/TB22.RU@TB22.RU
        renew until 03/06/14 09:06:27
02/27/14 09:54:09  02/27/14 19:06:26  ldap/dc3.tb22.ru@TB22.RU
        renew until 03/06/14 09:06:27

2. Установка и настройка samba
Устанавливаем необходимые пакеты:
fs1-sun->/home/it3# yum install samba

Приводим файл /etc/samba/smb.conf к следующему виду:
[global]
dos charset = cp866
unix charset = utf-8
display charset = utf-8
workgroup = TB22
realm = TB22.RU
netbios name = FS1-SUN
server string = File Server
security = ADS
auth methods = winbind
allow trusted domains = No
log file = /var/log/samba/log.%m
max log size = 50
time server = No
domain master = No
dns proxy = Yes
ldap ssl = no
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes
winbind refresh tickets = Yes
case sensitive = No
store dos attributes = yes

[data]
    path = /mnt/data
    valid users = "@TB22.RU\Пользователи домена"
    read list = "@TB22.RU\Пользователи домена"
#    write list = "@TB22.RU\Администраторы домена"
    write list = "@TB22.RU\Пользователи домена"
    read only = No
    create mask = 0644
    guest ok = No

Для проверки правильности конфигурационного файла у самбы есть замечательная утилита testparm:
fs1-sun->/home/it3# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
WARNING: The "idmap uid" option is deprecated
WARNING: The "idmap gid" option is deprecated
Processing section "[data]"
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions

Вводим сервер в домен:
fs1-sun->/home/it3# net ads join -U root
Enter root's password:
Using short domain name -- TB22
Joined 'FS1-SUN' to realm 'tb22.ru'

Включаем в автозапуск и запускаем сервисы smb и winbind:
[fs1-sun->/home/it3# chkconfig winbind on
fs1-sun->/home/it3# service winbind start
Starting Winbind services:                                 [  OK  ]
fs1-sun->/home/it3# chkconfig smb on
fs1-sun->/home/it3# service smb start
Starting SMB services:                                     [  OK  ]

Редактируем файлик /etc/nsswitch.conf и добавляем после следующих строчек слово winbind. Этим действием мы указываем в каком порядке и где системе искать имена-пароли пользователей и групп.
passwd:     files winbind
shadow:     files winbind
group:      files winbind


Оригинал

среда, 12 февраля 2014 г.

Автостарт виртуальных машин в Citrix XenServer 6.0.

Многие пользователи платформы Citrix XenServer были несколько удивлены, когда в шестой версии этого продукта заметили, что возможности Auto Start для виртуальных машин были убраны из графического интерфейса консоли управления XenCenter, хотя присутствовали в более ранних версиях.
Сделано это было потому, что механизм автоматического старта виртуальных машин в XenServer конфликтуют с функциями высокой доступности (HA). Однако тем пользователям, которые применяют бесплатное издание XenServer 6 Free Edition, эти возможности, все-таки, нужны.
Поэтому опишем здесь, каким образом можно включить автостарт ВМ в XenServer.
Сначала нужно включить его на уровне XenServer и пула, для чего нужно выполнить следующее:
1. Определеяем UUID пула, для которого мы хотим включить Auto Start. Для этого выполняем консольную команду на сервере XenServer:
xe pool-list
Нам нужен параметр [uuid-pool]
2. Разрешаем автостарт виртуальных машин на уровне пула с найденным UUID командой:
xe pool-param-set uuid=UUID other-config:auto_poweron=true
Теперь включаем автостарт на уровне виртуальных машин, для чего:
1. Выполняем команду для получения UUID виртуальной машины:
xe vm-list
2. И для найденного UUID включаем автостарт:
xe vm-param-set uuid=[uuid-vm] other-config:auto_poweron=true
Есть также способ попроще - для этого можно использовать скрипт, выложенный вот в этой ветке форумов Citrix. Там вы можете добавить тэг "autostart" к виртуальной машине прямо в XenCenter, после чего она будет автоматически запускаться при старте хоста.

среда, 5 февраля 2014 г.

Install Xenserver Tools on Centos 6

Запускаем Xen-Centr и нужную нам виртуалку.
Загружаем в виртуальный CD-ROM образ xs-tools.iso
Далее переходим в консоль выбранной виртуалки и проделываем следующие манипуляции...


$ ssh 10.17.37.243
root@10.17.37.243's password:
Last login: Thu Sep 11 12:57:31 2008 from 10.0.80.84
[root@ns0 ~]# cd /mnt
[root@ns0 mnt]# ls
[root@ns0 mnt]# mkdir xs-tools
[root@ns0 mnt]# mount /dev/xvdd /mnt/xs-tools/
mount: block device /dev/xvdd is write-protected, mounting read-only
[root@ns0 mnt]# cd /mnt/xs-tools/Linux/
[root@ns0 Linux]# bash install.sh
Detected `CentOS release 5.2 (Final)' (centos version 5).

The following changes will be made to this Virtual Machine:
* packages to be installed/upgraded:
- kernel-xen-2.6.18-53.1.13.el5.xs4.1.0.24.x86_64.rpm
- xe-guest-utilities-4.1.0-257.x86_64.rpm

Continue? [y/n] y

Preparing...########################################### [100%]
1:xe-guest-utilities########################################### [100%]
Preparing...########################################### [100%]
package kernel-xen-2.6.18-92.el5 (which is newer than kernel-xen-2.6.18-53.1.13.el5.xs4.1.0.24) is
already installed

You should now reboot this Virtual Machine.
[root@ns0 Linux]#

вторник, 4 февраля 2014 г.

Для отключения SELinux в CentOS 6 откройте файл /etc/selinux/config, например, редактором vi:

vi /etc/selinux/config
И замените значение переменной SELINUX c enforcing на disabled:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
После изменения настроек перезагрузите систему:

reboot
Следует обратить внимание на то, при отключенной SELinux у пользователей есть возможность некорректно маркировать файлы, поэтому если вы позже решите перевести SElinux обратно в режим enforcing при перезагрузке файловая система будет автоматически перемаркирована, что может занять некоторое время.

Ссылка на оригинал

среда, 29 января 2014 г.

Как вывести список пользователей AD и дату их создания?

Данный командный файл необходимо запустить на контроллере домена.

В первом цикле формируется не очень информативный файл (users.txt), поэтому обрабатываем этот файл вторым проходом и формируем новый users.xls с двумя колонками (SamAccountName и whenCreated), и исключая лишние строки:



@echo off

for /f "tokens=*" %%x in ('"dsquery user"') do (
dsquery * %%x -scope base -attr SamAccountName whenCreated >> users.txt
)

chcp 1251 > nul

for /f "eol=S tokens=1,2" %%i in (users.txt) do (
@echo %%i %%j >> users.xls
)

вторник, 21 января 2014 г.

Как получить список файлов, владельцем которых является конкретный пользователь на корпоративном файловом сервере?

@echo off
REM данному сценарию в качестве параметра передается доменное имя пользователя
REM сценарий формирует список файлов, владельцем которых является указанный пользователь

REM изменение текущей кодовой страницы
chcp 1251 > nul

REM инициализируем необходимые переменные
SET DomainName=tb22
SET UserName=%1
SET FullPath=c:\shares\common
SET TargetDir=c:\shares\common\data\exchange

REM обработка
REM выводим шапку файла
echo Имя файла             Размер файла > %TargetDir%\%UserName%.xls

REM Обрабатываем результаты fsutil и выводим в файл
for /f "tokens=*" %%x in ('"fsutil file findbysid %DomainName%\%UserName%  %FullPath%"') do (
                for %%I in ("%FullPath%\%%x") do echo %FullPath%\%%x        %%~zI >> %TargetDir%\%UserName%.xls

)

среда, 15 января 2014 г.

Openfire, как увеличить Java Memory в Freebsd

Часто в Openfire начинает не хватать памяти используемой по умолчанию для Java. При этом клиенты отваливаются, сервис перестает отвечать. через вебадминку изменить параметр нельзя, но можно исправить его в стартовом файле.
В FreeBSD это файл /usr/local/etc/rc.d/openfire.

Параметр ${openfire_javargs:='-Xmx512M'} меняем значение 512 на необходимое нам и перезапускаем openfire.

Ссылка на оригинал

четверг, 5 декабря 2013 г.

Как автоматически восстанавливать лимиты на интернет и реконфигурировать SAMS каждый месяц


1.       Лимиты на интернет удобно запоминать в поле ip текущего пользователя
1.1 Для уже созданных пользователей его легко заполнить, выполнив следующий запрос в базе squidctrl:

UPDATE squidusers set ip = quotes where quotes is not null

1.2   Для новых пользователей заводим себе привычку дополнять поле ip информацией о лимите на инет.

2.       В файлик (например) /root/scripts/sams_reconfig.sql записываем следующий запрос:

UPDATE squidusers set quotes = ip where ip is not null

3.       В /etc/cron.monthly/sams_reconfig.sh пишем следующее:

#!/bin/sh

CONF=/etc/sams.conf

if [ ! -r "${CONF}" ] ; then
echo "${CONF} is not readable"
exit 1
fi

DBUSER=`grep ^MYSQLUSER "${CONF}" | awk -F'=' '{print $2}'`
DBPASS=`grep ^MYSQLPASSWORD "${CONF}" | awk -F'=' '{print $2}'`
DBNAME=`grep ^SAMS_DB "${CONF}" | awk -F'=' '{print $2}'`
CACHENUM=`grep ^CACHENUM "${CONF}" | awk -F'=' '{print $2}'`

if [ -z "${DBUSER}" ] || [ -z "${DBPASS}" ] || [ -z "${DBNAME}" ] || [ -z "${CACHENUM}" ] ; then
[ -z "${DBUSER}" ] && echo "MYSQLUSER is not defined in ${CONF}"
[ -z "${DBPASS}" ] && echo "MYSQLPASSWORD is not defined in ${CONF}"
[ -z "${DBNAME}" ] && echo "SAMS_DB is not defined in ${CONF}"
[ -z "${CACHENUM}" ] && echo "CACHENUM is not defined in ${CONF}"
exit 2
fi

CMD="mysql --user=\"${DBUSER}\" --password=\"${DBPASS}\" --database=\"${DBNAME}\" < /root/scripts/sams_reconfig.sql"

eval ${CMD}

CMD="mysql --user=\"${DBUSER}\" --password=\"${DBPASS}\" --database=\"${DBNAME}\" -ss --execute=\"INSERT INTO reconfig (\\\`number\\\`, \\\`service\\\`, \\\`action\\\`) VALUES (${CACHENUM}, 'squid', 'reconfig');\""

eval ${CMD}

exit $?


Ну, там делаем скрипт исполняемым, и все: каждый месяц данные о лимитах будут заменяться значениями из поля ip, после этого будет производиться реконфигурирование squid

четверг, 28 ноября 2013 г.

Запуск zabbix-agent из-под другого пользователя

Столкнулся с интересной проблемой...
Остановил Xen-server и после старта выяснилось, что zabbix-agent не поднимается с сообщением:

# service zabbix-agent start
Starting ZABBIX agent: zabbix_agentd [30451]: user zabbix does not exist
zabbix_agentd [30451]: cannot run as root!
                                                           [FAILED]


Решение такое - добавляем пользователя zabbix:
# useradd -M -g zabbix -s /sbin/nologin zabbix

Запускаем, и видим в логах:
# tail -f /var/log/zabbix/zabbx-agent.log
...
zabbix_agentd [11587]: cannot create PID file [/var/run/zabbix/zabbix_agentd.pid]: [13] Permission denied
...

Изменяем права доступа:
chown -R zabbix:zabbix /var/run/zabbix

И вуаля - zabbx стартует и работает...

# service zabbix-agent start
Starting ZABBIX agent:                                     [  OK  ]

вторник, 26 ноября 2013 г.

Удаление файлов старше определенной даты в linux/unix

Удаляем все файлы из каталога /somedir, возраст которых превышает 140 суток
Способ 1
find /somedir -mtime +140 -exec rm {} \;

Способ 2
find /somedir -mtime +140 -delete

воскресенье, 17 ноября 2013 г.

Как написать правило SNAT в iptables для интерфейса с динамическим IP

Прихожу на работу утром, а бухгалтера жалуются, что не работает "Система Город".
Для подключения используется "централизованный" OpenVPN на роутере предприятия.
Проверяю состояние интерфейса:


и маршрутизацию:
# route -n | grep 10.221.128
10.221.128.0    0.0.0.0         255.255.128.0   U     0      0        0 tap0


 - все в порядке.
Проверяю телнетом со своего компа - не проваливается.
Хм.
Рестартанул скрипт rc.firewall - не помогает.
Смотрю tcpdump-ом на интерфейсе роутера:

# tcpdump -qnn -i tap0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tap0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:03:20.927793 IP 10.221.130.209.60475 > 10.221.128.1.3389: tcp 0
09:03:22.166023 ARP, Request who-has 10.221.130.209 tell 10.221.128.1, length 28
09:03:23.926820 IP 10.221.130.209.60475 > 10.221.128.1.3389: tcp 0
09:03:24.674988 ARP, Request who-has 10.221.130.209 tell 10.221.128.1, length 28

Отсюда понимаю, что система не знает ничего об адресе 10.221.130.209 - а это по идее адрес нашего интерфейса tap0.
Проверяю состояние tap0:
# ifconfig tap0
tap0      Link encap:Ethernet  HWaddr B2:2F:7F:0B:A3:3B
          inet addr:10.221.141.98  Bcast:10.221.255.255  Mask:255.255.128.0
          inet6 addr: fe80::b02f:7fff:fe0b:a33b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1532  Metric:1
          RX packets:1804 errors:0 dropped:0 overruns:0 frame:0
          TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:75768 (73.9 KiB)  TX bytes:2560 (2.5 KiB)

Ага, поменялся адрес интерфейса tap0, и правила в скрипте rc.firewall стали недействительными.
Уточняю у админов системы город - поменялось оборудование у них, а ip-шники присваиваются динамически.
Что же делать, думаю? Нужно в скрипте rc.firewall вместо константы использовать выражение, которое бы возвращало ip-адрес интерфейса tap0

Чуть чуть поразмыслив, нахожу вот такое решение:

/sbin/ifconfig tap0 | grep 'inet addr:' | cut -d: -f2 | awk '{print $1}'

и добавляю соответствующую переменную в скрипт rc.firewall:

GOROD_IP=`/sbin/ifconfig tap0 | grep 'inet addr:' | cut -d: -f2 | awk '{print $1}'`

Перезапускаю скрипт:
# /etc/rc.d/rc.firewall

Проверяю правила:
# iptables-save | grep 10.221
-A POSTROUTING -s 192.168.0.0/24 -d 10.221.128.0/24 -o tap0 -j SNAT --to-source 10.221.141.98
-A INPUT -s 10.221.0.0/16 -d 10.221.141.98/32 -p tcp -m tcp --sport 3389 --dport 1024:65535 -j ACCEPT
-A FORWARD -s 192.168.0.0/24 -d 10.221.0.0/16 -p tcp -m tcp --sport 1024:65535 --dport 3389 -j ACCEPT
-A FORWARD -s 10.221.0.0/16 -d 192.168.0.0/24 -p tcp -m tcp --sport 3389 --dport 1024:65535 -j ACCEPT
-A OUTPUT -s 10.221.141.98/32 -d 10.221.0.0/16 -p tcp -m tcp --sport 1024:65535 --dport 3389 -j ACCEPT

Вижу правильный IP в последнем правиле - все в порядке, теперь можно спать спокойно...

среда, 13 ноября 2013 г.

Программный рэйд на RHEL4

Достался рабочий сервер Oracle.
Стоит задача поднять рэйд.
Аппаратного нет, поэтому создаем программный.

Все работы производятся прямо на боевой системе, база данных остановлена.

Смотрим имеющиеся разделы (/dev/sda), создаем на втором диске (/dev/sdb) разделы для программного raid:
VBNKSB->/home/it3# fdisk -l

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1          13      104394+  83  Linux
/dev/sda2              14      121600   976647577+  8e  Linux LVM

Диск /dev/sdb: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1   *           1          62      497983+  fd  Автоопределение Linux raid
/dev/sdb2              63        1036     7823655   fd  Автоопределение Linux raid
/dev/sdb3            1037      121601   968438362+  fd  Автоопределение Linux raid

После создания меняем тип разделов на fd (Linux raid), устанавливаем загрузочный флаг на /dev/sdb1.
К стати, точки монтирования спланированы следующим образом:
/dev/sdb1 - /boot
/dev/sdb2 - /swap
/dev/sdb3 - /
(в последствии /dev/sdb1 станет /dev/md0, /dev/sdb2 -> /dev/md1 и т.д.)


Сохраняем изменения, перезагружаем систему.

Создадим устройства MD на втором диске, но перед созданием желательно затереть нулями разделы:
dd if=/dev/zero of=/dev/sdb1 bs=4096 && dd if=/dev/zero of=/dev/sdb2 bs=4096 && dd if=/dev/zero of=/dev/sdb3 bs=4096

Причем, /dev/sdb3 достаточно большой и его затирание протекает долго, поэтому можно ограничиться несколькими секундами после запуска последней команды.

Создаем устройства md:

# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing
 # mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb2 missing
 # mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdb3 missing

Создадем файловые системы на RAID:

  # mkfs.ext3 /dev/md0 &&  mkfs.ext3 /dev/md2 && mkswap /dev/md1

Клонируем загрузочный раздел боевого винта на загрузочный раздел raid:
# dd if=/dev/sda1 of=/dev/md0 bs=4096

Монтируем корневой раздел raid:
# mkdir /mnt/root
# mount /dev/md2 /mnt/root

Копируем систему на новый раздел:
# cp -axvp / /mnt/root

 Редактируем fstab для монтирования root раздела с RAID:
# nano /mnt/root/etc/fstab
вместо строки 
/dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1
пишем
/dev/md2                /                       ext3    defaults        1 1

вместо строки
LABEL=/boot             /boot                   ext3    defaults        1 2
пишем 
/dev/md0                /boot                   ext3    defaults        1 2

вместо
/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0
пишем
/dev/md1                /swap                   swap    defaults        0 0

Создаем загрузочный образ для RAID:
# mkdir /mnt/root/initrd-raid
# cd /mnt/root/initrd-raid
# mkinitrd -v --fstab=/mnt/root/etc/fstab /mnt/root/initrd-raid/initrd-`uname -r`-raid.img `uname -r`
# cd /mnt/root/initrd-raid
# zcat initrd-`uname -r`-raid.img | cpio -i

Редактируем файл init:
# nano init
добавляем после
   raidautorun /dev/md2
две строки:
raidautorun /dev/md0
raidautorun /dev/md1

Монтируем новый загрузочный раздел в /mnt/root/boot
mount /dev/md0 /mnt/root/boot

Копируем новый диск в каталог /mnt/boot
# find . -print | cpio -o -Hnewc | gzip -c > /mnt/root/boot/initrd-`uname -r`-raid.img
# rm /mnt/boot/initrd-2.6.18-92.el5.img
# ln -s initrd-`uname -r`-raid.img /mnt//root/boot/initrd-2.6.18-92.el5.img

Редактируем загрузочное меню:
nano /mnt/root/boot/grub/grub.conf

изменяем строку  kernel /vmlinuz-2.6.18-92.el5 ro root=/dev/xxx
на
 kernel /vmlinuz-2.6.18-92.el5 ro root=/dev/md2 rhgb quiet

Устанавливаем grub на RAID
# for i in dev proc sys; do mount -o bind /$i /mnt/root/$i; done
# chroot /mnt/root
# grub-install --recheck --no-floppy /dev/md0

Выходим из chroot
# Ctrl+d

Размонтируем файловые системы!!!
# for i in dev proc sys; do umount /mnt/root/$i; done
# umount /mnt/root/boot
# umount /mnt/root

Перезагружаем сервер и в BIOS выбираем загрузку с нужного нам диска.
Убеждаемся, что загрузились с диска, являющегося членом RAID-массива

# df -h
Файловая система      Разм  Исп  Дост  Исп% смонтирована на
/dev/md2              910G  721G  143G  84% /
/dev/md0               99M   14M   80M  15% /boot
tmpfs                 5,9G     0  5,9G   0% /dev/shm

Копируем куда-нибудь таблицу разделов диска, являющегося членом RAID-массива:

# fdisk -l /dev/sdb

Диск /dev/sdb: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1   *           1          62      497983+  fd  Автоопределение Linux raid
/dev/sdb2              63        1036     7823655   fd  Автоопределение Linux raid
/dev/sdb3            1037      121601   968438362+  fd  Автоопределение Linux raid

Создаем точно такие же разделы на /dev/sda:

# fdisk /dev/sda

Команда (m для справки): p

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1          13      104394+  83  Linux
/dev/sda2              14      121600   976647577+  8e  Linux LVM

Команда (m для справки): d
Номер раздела (1-4): 2

Команда (m для справки): d
Выбранный раздел 1

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4): 1
Первый цилиндр (1-121601, по умолчанию 1):
Используется значение по умолчанию 1
Последний цилиндр или +size или +sizeM или +sizeK (1-121601, по умолчанию 121601): 62

Команда (m для справки): p

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1               1          62      497983+  83  Linux

Команда (m для справки): t
Выбранный раздел 1
Шестнадцатеричный код (введите L для получения списка кодов): fd
Системный тип раздела 1 изменен на fd (Автоопределение Linux raid)

Команда (m для справки): p

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1               1          62      497983+  fd  Автоопределение Linux raid

Команда (m для справки): a
Номер раздела (1-4): 1

Команда (m для справки): p

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1          62      497983+  fd  Автоопределение Linux raid

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4): 2
Первый цилиндр (63-121601, по умолчанию 63):
Используется значение по умолчанию 63
Последний цилиндр или +size или +sizeM или +sizeK (63-121601, по умолчанию 121601): 1036

Команда (m для справки): t
Номер раздела (1-4): 2
Шестнадцатеричный код (введите L для получения списка кодов): 82
Системный тип раздела 2 изменен на 82 (Linux своп / Solaris)

Команда (m для справки): p

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1          62      497983+  fd  Автоопределение Linux raid
/dev/sda2              63        1036     7823655   82  Linux своп / Solaris

Команда (m для справки): t
Номер раздела (1-4): 2
Шестнадцатеричный код (введите L для получения списка кодов): fd
Системный тип раздела 2 изменен на fd (Автоопределение Linux raid)

Команда (m для справки): p

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1          62      497983+  fd  Автоопределение Linux raid
/dev/sda2              63        1036     7823655   fd  Автоопределение Linux raid

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4): 3
Первый цилиндр (1037-121601, по умолчанию 1037):
Используется значение по умолчанию 1037
Последний цилиндр или +size или +sizeM или +sizeK (1037-121601, по умолчанию 121601):
Используется значение по умолчанию 121601

Команда (m для справки): t
Номер раздела (1-4): 3
Шестнадцатеричный код (введите L для получения списка кодов): fd
Системный тип раздела 3 изменен на fd (Автоопределение Linux raid)

Команда (m для справки): p

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1          62      497983+  fd  Автоопределение Linux raid
/dev/sda2              63        1036     7823655   fd  Автоопределение Linux raid
/dev/sda3            1037      121601   968438362+  fd  Автоопределение Linux raid

Команда (m для справки): w
Таблица разделов была изменена!

Вызывается ioctl() для перечитывания таблицы разделов.

ПРЕДУПРЕЖДЕНИЕ: Перечитывание таблицы разделов завершилось неудачей с ошибкой 16: Устройство или ресурс занято.
Ядро все еще использует старую таблицу.
Новая таблица будет использована при следующей перезагрузке.
Синхронизируются диски.


Перезагружаем сервер...
# shutdown -r now

 Теперь можно включать первый диск в RAID:

# mdadm -a /dev/md0 /dev/sda1
mdadm: added /dev/sda1
# mdadm -a /dev/md1 /dev/sda2
mdadm: added /dev/sda2
# mdadm -a /dev/md2 /dev/sda3
mdadm: added /dev/sda3

Процесс синхронизации (ребилда) массива можно смотреть с помощью команды:
# watch -n 1 cat /proc/mdstat

После завершения ребилда вносим последние изменения в настройки:

# mdadm --detail --scan >> /etc/mdadm/mdadm.conf

И перезагружаемся. Для корректной загрузки в случае отказа одного из дисков, требуется настроить в BIOS загрузку системы с обоих жестких дисков по-очереди.

Вот и все  на этом настройка software RAID1 завершена. Все необходимые команды для работы с RAID можно найти здесь http://xgu.ru/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D0%B9_RAID_%D0%B2_Linux#.D0.94.D0.BE.D0.B1.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BD.D0.BE.D0.B2.D0.BE.D0.B3.D0.BE_.D0.B4.D0.B8.D1.81.D0.BA.D0.B0

Основа для данной статьи взята отсюда >> http://www.mahno.su/jexr/http://pastebin.com/psaWg7QK

Как выполнить проверку целостности программного RAID-массива md0:
echo 'check' >/sys/block/md0/md/sync_action

Как посмотреть нашлись ли какие-то ошибки в процессе проверки программного RAID-массива по команде check или repair:
cat /sys/block/md0/md/mismatch_cnt

Для наблюдение за md-массивами добавляем в /etc/rc.d/rc.local следующую строку:

mdadm --monitor --scan --delay=120 -m admin@example.com --daemonise > /var/run/mdadm/mdadm.pid

понедельник, 4 ноября 2013 г.

rpmdb: Lock table is out of available locker entries

В общем, это сообщение говорит о том, что испорчена база rpmdb

Я забэкапил каталог:
tar cvzf rpm-backup.tar.gz /var/lib/rpm
Удалил битые файлы базы данных, которые использует yum и rpm:
rm /var/lib/rpm/__db.00*
Пересоздал файлы базы:

rpm --rebuilddb

четверг, 8 августа 2013 г.

Сentos добавление жесткого диска

1. Загрузить операционную систему, войти с правами суперпользователя и выполнить команду dmesg.
Имея размер винчестера, и зная в каком SATA порту он стоит, можно прикинуть как определило наше устройство ядро Linux. Предположим sdc.
2. Теперь необходимо создать на новом HDD раздел. Это приведёт к удалению всей имеющейся на нем информации. Поэтому определять какой винчестер наш в п.2 надо особенно внимательно.
Для этого запускаем /sbin/fdisk /dev/sdc
Теперь задаем команды, нажатием кропки «m» вызывается справка.
Смотрим, какие есть уже разделы «p», удаляем «d» если они есть, задаем новую на весь винчестер «n», «p», «1″, «нажать Enter», «нажать Enter», «w».
Раздел готов. Это раздел на весь винчестер.
3. Необходимо отформатировать новый раздел командой /sbin/mkfs.ext3 /dev/sdc1
На все, что спросит программа форматирования можно нажать клавишу Enter, но скорее всего ничего она не спросит.
4. Создаём новую точку монтирования и монтируем новый винчестер.
Предположим, что существует правило по которому новые винчестеры, монтируются в каталоги, называемые dataN и находящиеся в корневом каталоге. Т.е. необходимо посмотреть, какие есть такие каталоги в / и назначить вместо N в имени каталога, порядковое число от 0 и далее.
А теперь смонтируем в этот каталог наш новый винчестер.
/bin/mount /dev/sdc1 /data1
5. Проверяем какие разделы у нас есть на этом этапе командой df -h
6. Добавляем винчестер в конфигурацию системы, для того чтобы он подсоединялся на этапе загрузки системы.
Редактируем /etc/fstab добавляя в него строку:
/dev/sdc1 /data1 ext3 defaults 1 2
В конце файла, обязательно необходимо оставить пустую строку.
7. Перегружаемся и проверяем командой df -h нормально ли примонтировался наш винчестер после цикла перегрузки.
8. Вслучае если что то пошло не так и система начинает грузится «файловая система доступна только для чтения»  для редактирования fstab в консоле надо смонтировать диск для чтения
mount -oremount,rw /

среда, 31 июля 2013 г.

xenserver 6.1 + smartmontools + mailx

Загружаем mailx

wget http://vault.centos.org/5.4/os/i386/CentOS/mailx-8.1.1-44.2.2.i386.rpm

HS4->/home/it3/distr# rpm -ihv mailx-8.1.1-44.2.2.i386.rpmPreparing...
########################################### [100%] 1:mailx ########################################### [100%]

У меня smartmontools установлен по умолчанию:
HS4->/home/it3/distr# rpm -qa | grep smartmontools
smartmontools-5.41-2.el5.xs1033#


Проверяем статус дисков:

smartctl -d ata -a /dev/sda

HS4->/home/it3/distr# smartctl -d ata -a /dev/sda
smartctl 5.41 2011-06-09 r3365 [i686-linux-2.6.32.43-0.4.1.xs1.6.10.734.170748xen] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Device Model:     ST2000DM001-1CH164
...
...


Правим конфиг файл

mcedit /etc/smartd.conf
# DEVICESCAN may be followed by any desired Directives.

/dev/sda -d ata -a -I 194 -W 4,35,45 -R 5 -s (S/../.././02|L/../../6/03) -t -m admins@tb22.ru -o on -S on
/dev/sdb -d ata -a -I 194 -W 4,35,45 -R 5 -s (S/../.././02|L/../../6/03) -t -m admins@tb22.ru -o on -S on

Проверяем и включаем автостарт smartd

HS4->/home/it3/distr# chkconfig --list | grep smartd
smartd          0:off   1:off   2:off   3:off   4:off   5:off   6:off
HS4->/home/it3/distr# chkconfig smartd on
HS4->/home/it3/distr# chkconfig --list | grep smartd
smartd          0:off   1:off   2:on    3:on    4:on    5:on    6:off

Запускаем smartd и смотрим лог:


HS4->/home/it3/distr# service smartd start
Starting smartd:                                           [  OK  ]
HS4->/home/it3/distr# grep smartd /var/log/messages
Aug  1 13:26:49 HS4 smartd[12646]: smartd 5.41 2011-06-09 r3365 [i686-linux-2.6.32.43-0.4.1.xs1.6.10.734.170748xen] (local build)
...
...
...
has fork()ed into background mode. New PID=12648.


Правим конфиг ssmtp
# /etc/ssmtp.conf -- a config file for sSMTP sendmail.
#
root=postmaster
mailhub=mail.pixsoftware.de
rewriteDomain=pixsoftware.de
hostname=server32.pixsoftware.de



В том случае, если используется RAID-контроллер (в моем случае на двух серверах установлен Adaptec RAID 6405T), статус дисков проверяем следующей командой:

smartctl -d sat --all /dev/sgX

соответственно строки в /etc/smartd.conf будут следующие:
/dev/sg1 -d sat -a -I 194 -W 4,35,45 -R 5 -s (S/../.././02|L/../../6/03) -t -m admins@tb22.ru -o on -S on
/dev/sg2 -d sat -a -I 194 -W 4,35,45 -R 5 -s (S/../.././02|L/../../6/03) -t -m admins@tb22.ru -o on -S on


После этого идем в серверную и вырубаем кондиционер.
Через некоторое время в логах появляются следующие строки:

Aug  1 16:25:27 HS1 smartd[3154]: Monitoring 2 ATA and 0 SCSI devices
Aug  1 16:25:27 HS1 smartd[3154]: Device: /dev/sg1 [SAT], initial Temperature is 21 Celsius (Min/Max ??/21)
Aug  1 16:25:27 HS1 smartd[3154]: Device: /dev/sg2 [SAT], initial Temperature is 22 Celsius (Min/Max ??/22)
Aug  1 16:25:27 HS1 smartd[3156]: smartd has fork()ed into background mode. New PID=3156.
Aug  1 16:55:28 HS1 smartd[3156]: Device: /dev/sg1 [SAT], Temperature changed +5 Celsius to 26 Celsius (Min/Max 26!/26!)
Aug  1 16:55:28 HS1 smartd[3156]: Device: /dev/sg1 [SAT], SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 79 to 74
Aug  1 16:55:28 HS1 smartd[3156]: Device: /dev/sg1 [SAT], SMART Usage Attribute: 195 Hardware_ECC_Recovered changed from 47 to 46
Aug  1 16:55:28 HS1 smartd[3156]: Device: /dev/sg2 [SAT], Temperature changed +4 Celsius to 26 Celsius (Min/Max 26!/26!)
Aug  1 16:55:28 HS1 smartd[3156]: Device: /dev/sg2 [SAT], SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 78 to 74


Для проверки статуса дисков, подключенных к Adaptec RAID контроллеру можно также использовать следующие команты:
# /usr/StorMan/arcconf getconfig 1 | grep State
# /usr/StorMan/arcconf getconfig 1 | grep -B 3 State

вторник, 30 июля 2013 г.

Подключаем дополнительные репозитории RHEL

Понадобилось поднять apcupsd на RHEL 4 и RHEL 5.2 (обе x86_64)
Потратил пару часов, пока нашел нужные репы. Вот ссылка на оригинал.

Для CentOS/RedHat 5.x выполняем:
# rpm -Uvh http://elrepo.org/elrepo-release-5-3.el5.elrepo.noarch.rpm
Проверим подключился ли репозиторий:
# yum repolist | grep elrepo
* elrepo: mirrors.ircam.fr
elrepo        ELRepo.org Community Enterprise Linux Repository — el6         213
Перейдём к установке репозитория Epel.
Для CentOS/RedHat 5.x выполняем последовательно:
# wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
# rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm
Далее — открываем для редактирования файл /etc/yum.repos.d/remi.repo, и меняем строку:
enabled=0
на:
enabled=1
Проверим подключился ли репозиторий:
# yum repolist | grep epel
* epel: ftp.colocall.net
epel          Extra Packages for Enterprise Linux 6 — i386                 7,000
После этого
yum install apcupsd пробежал, как и положено, подтянув зависимости.

четверг, 11 июля 2013 г.

Настройка Zabbix-агента на XenServer 6.1

На каждый сервер, параметры которого нужно мониторить, необходимо установить zabbix-agent.
Устанавливаем репозиторий l-sys.
HS4->/home/it3# rpm -ihv http://centos.l-sys.ru/6/i386/l-sys-repo-1.0-2.noarch.rpm

Устанавливаем Zabbix-агент.
HS4->/home/it3# yum install zabbix-agent

Открываем файл настроек /etc/zabbix/zabbix_agentd.conf
Server=192.168.0.66   # IP-адрес или DNS-имя Zabbix-сервера
Hostname=HS4         # Имя хоста, которое должно совпадать с именем в
                               # Configuration -> Hosts в Веб-интерфейсе Zabbix

Добавляем в автозапуск и запускаем:
HS4->/etc/zabbix# chkconfig zabbix-agent on

Добавляем правило в iptables
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT


HS4->/etc/zabbix# service zabbix-agent start
Starting ZABBIX agent:                                     [  OK  ]

mc долго запускается?

mc пытается отрезолвить имя хоста, в этом проблема. нужно в /etc/hosts прописать ip и доменное имя хоста
Например: 192.168.21.62 HS6.tb22.ru. HS6