Архив рубрики ‘ Linux

Отключение IPv6 в BIND/NAMED

BIND/named постоянно спамит в логах сообщением о недоступности корневых серверов в адресном пространстве IPv6.

named[15789]: error (network unreachable) resolving 'ns2.ett.com.ua/AAAA/IN': 2001:67c:258::1#53
named[15789]: error (network unreachable) resolving 'ns2.ett.com.ua/AAAA/IN': 2001:67c:e0::121#53
named[15789]: error (network unreachable) resolving 'ns2.tsua.net/A/IN': 2001:503:a83e::2:30#53
named[15789]: error (network unreachable) resolving 'ns.ukr.net.ua/A/IN': 2001:678:4::9#53
named[15789]: error (network unreachable) resolving 'ns.ukr.net.ua/AAAA/IN': 2001:678:4::9#53
named[15789]: error (network unreachable) resolving 'ns.kolo.net/AAAA/IN': 2001:503:231d::2:30#53
named[15789]: error (network unreachable) resolving 'ns2.wn.net.ua/A/IN': 2001:500:14:6012:ad::1#53
named[15789]: error (network unreachable) resolving 'ns2.wn.net.ua/AAAA/IN': 2001:500:2e::1#53
named[15789]: error (network unreachable) resolving 'ns.wn.net.ua/AAAA/IN': 2a03:6300:1:102::3#53
named[15789]: error (network unreachable) resolving 'ns.dn.ua/A/IN': 2001:470:2e:1::27#53
named[15789]: error (network unreachable) resolving 'ns.zp.ua/AAAA/IN': 2001:6b0:7::2#53
named[15789]: error (network unreachable) resolving 'ns.dn.ua/A/IN': 2001:6b0:7::2#53
named[15789]: error (network unreachable) resolving 'ns.zp.ua/A/IN': 2001:7f8:55::65#53
named[15789]: error (network unreachable) resolving 'ns.dn.ua/A/IN': 2a02:2b30::225:125#53

Учитывая, что IPv6 адрес провайдером не выдан — отключим IPv6 запросы в BIND.
Для отключения IPv6 в named корректируем /etc/sysconfig/named:

OPTIONS="-4"

После чего необходимо перестартовать named

Трудности сборки php

Проблема

checking for U8T_DECOMPOSE...
configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing.
 This should not happen. Check config.log for additional information.
make: *** No targets specified and no makefile found.  Stop.

Решение

Установить libc-client-devel. Стоит обратить внимание, что на диске CentOS 6 выкачанном с официального сайта, ниже приведенных пакетов нет. Скачать можно с любого из зеркал по пути /mirror/centos/6.0/os/x86_64/Packages

rpm -Uhv libc-client-2007e-11.el6.x86_64.rpm
rpm -Uhv libc-client-devel-2007e-11.el6.x86_64.rpm

Проблема

configure: error: Kerberos libraries not found.

Решение

ln -s /usr/lib64 /usr/kerberos/lib

Проблема

configure: error: Cannot find ldap libraries in /usr/lib.

Решение

Создать символические ссылки на искомые библиотеки

ln -s /usr/lib64/liblber.so /usr/lib/liblber.so
ln -s /usr/lib64/libldap.so /usr/lib/libldap.so
ln -s /usr/lib64/libldap_r.so /usr/lib/libldap_r.so

Проблема

configure: error: Cannot find libmysqlclient under /usr

Решение

Опция —with-libdir=lib64 решает проблему, естесственно при установленном mysql-devel. Не путать с опцией —libdir.

Проблема

При компиляции PHP и bzip2 в 64 битной системе, возникает ошибка:

/usr/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.4.4/../../../libbz2.a(bzlib.o):
  relocation R_X86_64_32S against `.text' can not be used when making a shared object;
  recompile with -fPIC
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/../../../libbz2.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [libphp5.la] Error 1

Решение

В папке, из которой был установлен bzip2 правим Makefile добавив -fPIC строке CFLAGS

CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) -fPIC

Пересобираем и устанавливаем bzip2, следующими командами. (PREFIX опционально)

make clean
make install PREFIX=/usr

После чего можем собирать php

Отмена перехода на зимнее время. Украина. 2011.

В Украине отменен переход на зимнее время. Верховная Рада поддержала законопроект №8330 «Об изменении порядка исчисления времени на территории Украины». В связи с этими законодательными инновациями, на плечи украинских IT-шников легла производственная задача — 30 октября 2011 навсегда остаться в киевском летнем времени. Теперь этот часовой пояс в unix называется FET — Further-eastern European Time или дальневосточно-европейское время.

Время в Linux. Теория

Текущий часовой пояс в ОС Linux устанавливается файлом /etc/localtime. Этот файл представляет собой ссылку на информационный файл зоны или его копию, в большинстве дистрибутивов расположенный в каталоге /usr/share/zoneinfo. В данном каталоге размещена zoneinfo database база данных информации о зонах, или другими словами, tz database (timezone database — база данных часовых поясов) — совместно собираемая информация о мировых временных зонах. Иногда она упоминается как «база данных Олсона» (Olson database), так как была основана Артуром Дэвидом Олсоном (Arthur David Olson). Редактором и хранителем базы является Пол Эггерт (Paul Eggert). Обновления кода базы данных часовых поясов можно получить непосредственно из источника на ftp://elsie.nci.nih.gov/pub/

Как не перейти на зимнее время. Решение

  • Качаем обновление tzdata2011k.tar.gz от 26 сентября 2011 года, в котором присутствует информация по новым часовым поясам для Украины, в которое вошли зоны Europe/Kiev, Europe/Uzhgorod, Europe/Zaporozhye, Europe/Simferopol.
  • Распаковываем
    mkdir tz
    mv tzdata2011k.tar.gz ./tz
    cd tz/
    tar xzf tzdata2011k.tar.gz
    
  • Перед внесением изменений проверим переходы времени для нашей текущей зоны. Видим ежегодное расписание переходов времени зимнее/летнее вплоть до 2038 года.
    zdump -v Europe/Kiev
    ...
    Europe/Kiev  Sun Mar 27 00:59:59 2011 UTC = Sun Mar 27 02:59:59 2011 EET isdst=0 gmtoff=7200
    Europe/Kiev  Sun Mar 27 01:00:00 2011 UTC = Sun Mar 27 04:00:00 2011 EEST isdst=1 gmtoff=10800
    Europe/Kiev  Sun Oct 30 00:59:59 2011 UTC = Sun Oct 30 03:59:59 2011 EEST isdst=1 gmtoff=10800
    Europe/Kiev  Sun Oct 30 01:00:00 2011 UTC = Sun Oct 30 03:00:00 2011 EET isdst=0 gmtoff=7200
    ...
    Europe/Kiev  Sun Oct 25 00:59:59 2015 UTC = Sun Oct 25 03:59:59 2015 EEST isdst=1 gmtoff=10800
    Europe/Kiev  Sun Oct 25 01:00:00 2015 UTC = Sun Oct 25 03:00:00 2015 EET isdst=0 gmtoff=7200
    ...
    
  • Убедимся в наличии необходимого обновления
    vi europe
    ...
    Zone Europe/Kiev        2:02:04 -       LMT     1880
                            2:02:04 -       KMT     1924 May  2 # Kiev Mean Time
                            2:00    -       EET     1930 Jun 21
                            3:00    -       MSK     1941 Sep 20
                            1:00    C-Eur   CE%sT   1943 Nov  6
                            3:00    Russia  MSK/MSD 1990
                            3:00    -       MSK     1990 Jul  1 2:00
                            2:00    -       EET     1992
                            2:00    E-Eur   EE%sT   1995
                            2:00    EU      EE%sT   2011 Mar lastSun 1:00u
                            3:00    -       FET # Further-eastern European Time
    
    ...
    
  • На всякий случай делаем резервную копию файла с текущими настройками:
    mv /etc/localtime  /etc/localtime-old
    
  • Компилируем временные зоны для Европы. zic читает текстовый файл с описаниями зон и на выходе формирует файлы специфического формата. Стоит обратить внимание что без ключа -d пишет файлы временных зон сразу в /usr/share/zoneinfo, что нам и необходимо.
    zic europe
    
  • Создаем ссылку на обновленную временную зону
    ln -sf /usr/share/zoneinfo/Europe/Kiev /etc/localtime
    
  • Проверяем установленную зону в файле
    cat /etc/sysconfig/clock | grep ZONE
    ZONE="Europe/Kiev"
    
  • После обновления проверим переходы времени для нашей текущей зоны. В последний раз переход произошел Mar 27 04:00:00 2011
    zdump -v Europe/Kiev
    ...
    Europe/Kiev  Sun Mar 27 00:59:59 2011 UTC = Sun Mar 27 02:59:59 2011 FET isdst=0 gmtoff=7200
    Europe/Kiev  Sun Mar 27 01:00:00 2011 UTC = Sun Mar 27 04:00:00 2011 FET isdst=0 gmtoff=10800
    Europe/Kiev  Mon Jan 18 03:14:07 2038 UTC = Mon Jan 18 06:14:07 2038 FET isdst=0 gmtoff=10800
    Europe/Kiev  Tue Jan 19 03:14:07 2038 UTC = Tue Jan 19 06:14:07 2038 FET isdst=0 gmtoff=10800
    
  • Убедимся, что 30 октября 2011 года время будет «непереход» на зимнее время.
    # date
    Wed Sep 28 15:48:51 FET 2011
    # date --date='768hours'
    Sun Oct 30 15:48:58 FET 2011
    

PS: Всвязи с судебными процедурами, и временной недоступностью первоисточника размещаю копию tzdata2011k.tar.gz.

PS: Для тех кто уже перевел, выкладываю предыдущую версию TZ данных без изменений по Украине от 20 сентября, отмененных 18 октября 2011tzdata2011j.tar.gz

Загрузка Linux. Ошибка с библиотекой libblkid.so.1

При загрузке Linux возникает ошибка

fsck: /lib/libblkid.so.1: no version information available (required by fsck)
...
fsck: relocation error: fsck: symbol blkid_evaluate_tag, version BLKID_2.15
not defined in file libblkid.so.1 with link time reference

Происходит при некорректных привязках библиотек. Смотрим:

# ls -al /lib/libblk*
lrwxrwxrwx 1 root root     17 May  6 11:35 /lib/libblkid.so.1 -> libblkid.so.1.1.0
-rwxr-xr-x 1 root root 678656 May  6 11:35 /lib/libblkid.so.1.1.0
-rwxr-xr-x 1 root root 39160 Sep  3  2009 /lib/libblkid.so.1.0
# ls -al /lib64/libblk*
lrwxrwxrwx 1 root root    15 May 31 11:22 /lib64/libblkid.so.1 -> libblkid.so.1.0
-rwxr-xr-x 1 root root 44160 Sep  3  2009 /lib64/libblkid.so.1.0

Решение: удаляем символические ссылки и устаревшую библиотеку, запускаем ldconfig для реконфигурирования динамических привязок библиотек.

rm -f /lib64/libblkid.so.1
rm -f /lib/libblkid.so.1.0
rm -f /lib/libblkid.so.1
ldconfig

Linux DHCP client (dhclient). Обновление IP адреса

Q. Я использую Ubuntu Linux. Как заставить Linux взять новый IP-адрес от DHCP-сервера? Какая команда в Linux эквивалентна команде Windows «ipconfig /renew»?
А. Необходимо использовать DHCP клиент т.е. команду dhclient. Клиент не освобождает текущий арендованный IP адрес, так как этого не требует протокол DHCP.

Команда обновления IP адреса.

Флаг -r определяет освобождение IP адреса текущей аренды, и как только арендованный IP был освобожден, dhclient завершает работу. Введите в терминале команду:

# dhclient -r

Теперь получим новый IP:

# dhclient

Нет необходимости в перезагрузке сервиса network. Выше указанные команды должны работать с любым дистрибутивом Linux, такими как RHEL, Fedora, CentOS, Ubuntu и другими. В этой же связи можно также попробовать следующие команды:

# ifdown eth0
# ifup eth0
# /etc/init.d/network restart

или

# /etc/init.d/networking restart

Данные утверждения справедливы если файл /etc/sysconfig/network-scripts/ifcfg-ethX выглядит подобным образом, т.е. на интерфейсе включена возможность использования протокола DHCP

DEVICE=eth1
BOOTPROTO=dhcp
ONBOOT=yes
HWADDR=00:0c:29:b4:9b:bc

После использования вышеуказанных рекомендаций полученный IP адрес можно просмотреть командой

# ifconfig eth1

eth1      Link encap:Ethernet  HWaddr 00:0C:29:B4:9B:BC
          inet addr:192.168.0.102  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feb4:9bbc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1722 errors:0 dropped:0 overruns:0 frame:0
          TX packets:208 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:117880 (115.1 KiB)  TX bytes:47604 (46.4 KiB)
          Base address:0x2080 Memory:d8940000-d8960000

initrd

initrd — сокращение от англ. Initial RAM Disk, диск в оперативной памяти для начальной инициализации. initrd — минимизированный образ корневой файловой системы, который монтируется до того как основная корневая файловая система будет доступна. Ядро монтирует образ initrd, в котором содержится минимальный набор директорий, скриптов и исполняемых файлов, модулей ядра, и в качестве основной цепочки загрузки используется скрипт init, который после загрузки необходимого минимума и монтирования основной файловой системы выполняет switchroot и передает управление к init основной файловой системы. Для выполнения init находящегося в initrd используется интерпретатор nash.
В общем случае, initrd временная файловая система, однако, во встраиваемых системах зачастую initrd используется в качестве основной корневой файловой системы.

Распаковать/смонтировать initrd

В Linux веток RedHat, CentOS, Fedora… для ядра 2.6 для редактирования или «на посмотреть» достаточно распаковать образ initrd в некий временный каталог, следующей коммандой:

cat initrd-2.6.34.1.img | gunzip | cpio -i

Запаковать initrd

(find . | cpio --quie -c -o) |  gzip -9 > ../initrd-2.6.34.1.img

См. также mkinitrd.

mdadm. Шпаргалка. Часть 1.

mdadm — управляет MD устройствами программного RAID в ОС Linux. На текущий момент поддерживаются следующие типы MD устройств:

  • LINEAR — расширение размера логического диска за счет нескольких физических дисков;
  • RAID0 (striping) — чередование, дисковый массив из 2 или более жёстких дисков с отсутствием избыточности и, как следствие, без обеспечения отказоустойчивости. Информация разбивается на блоки данных и записывается на диски одновременно, количество дисков прямопропорционально росту скорости. При выходе из строя одного из участников теряется информация всего массива. Надежность равна произведению вероятностей нормальной работы всех входящих участников.
  • RAID1 (mirroring) — зеркалирование, запись одних и тех же данных одновременно на разделы участники, что обеспечивает отказоустойчивость при отказе одного из дисков. Содержимое на каждом участнике массива идентично. Для организации RAID1 массива необходимо 2 или более разделов участников.
  • RAID4 — массив из n дисков, данные в котором разбиваются на блоки и распределяются по n − 1 дискам, используется выделенный диск для хранения блоков четности, при вычислении используется код Хемминга. Обеспечивает отказоустойчивость при отказе одного из дисков. Для организации RAID4 необходимо 3 или более разделов участников.
  • RAID5 — массив с обеспечением отказоустойчивости за счет минимальной избыточности. Блоки данных и контрольные суммы циклически записываются на все диски массива, нет асимметричности конфигурации дисков. Обеспечивает отказоустойчивость при отказе одного из дисков. Объем дискового массива RAID5 равен (n-1) разделов. Для организации RAID5 массива необходимо 3 или более разделов участников.;
  • RAID6 — похож на RAID5, но имеет более высокую степень надежности — под контрольные суммы выделяется емкость 2-х дисков, рассчитываются контрольные суммы по 2 различным алгоритмам; Обеспечивает работоспособность после выхода из строя двух дисков. Для организации массива требуется минимум 5 дисков. Использование RAID6 вызывает как правило 10-15 % падение производительности, по сравнению с аналогичными показателями RAID5, что связано с увеличением количества операций необходимых для обеспечиения расчета и записи 2 контрольных сумм в отличие от одной.
  • MULTIPATH — не использует технологию программного RAID, предоставляет несколько логических устройств, каждое из которых представляет собой путь к одному физическому устройству хранения;
  • FAULTY — псевдо RAID-массив, состоит только из одного физического раздела.

Создание разделов

Для создания программного RAID-массива необходимо, использовать существующие разделы на физическом носителе. Тип разделов, которые будут входить в RAID-массив предпочтительно использовать FD (Linux RAID autodetect). Все операции по созданию, удалению и изменению разделов можно выполнить с помощью fdisk. Просмотреть таблицу разделов

# fdisk -l /dev/sda

Disk /dev/sda: 73.4 GB, 73407868928 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1912    15358108+  fd  Linux raid autodetect
/dev/sda2            1913        4462    20482875   fd  Linux raid autodetect
/dev/sda3            4463        4717     2048287+  fd  Linux raid autodetect
/dev/sda4            4718        8924    33792727+  fd  Linux raid autodetect

При использовании ранее задействованных разделов, необходимо размонтировать их.
Клонировать таблицу разделов с одного физического диска на другой можно выполнить следующей коммандой:

# sfdisk -d /dev/sda | sfdisk /dev/sdb

Создание RAID массива.

Указываем имя логического устройства, тип RAID, количество физических разделов, перечисляем участников. Допускается использование сокращенной записи

# mdadm --create /dev/md3 --level=0 --raid-devices=2 /dev/sda3 /dev/sdb3
# mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2
# mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sd[cde]1

Добавление в RAID

# mdadm /dev/md1 --add /dev/sdb1

Конфигурационный файл mdadm.conf

Информация о участниках RAID массивов используемая при запуске системы должна находится в конфигурационном файле mdadm.conf. Строки, которые следует добавить в этот файл, можно получить при помощи команды:

# mdadm --detail --scan

В случае если необходимо провести операции с существующим RAID0, при его статусе inactive, как например, удаление, в mdadm.conf необходимо закомменитровать(удалить) записи соответствующие данному разделу и перезапустить систему. Данные на разделе при этом теряются.

Наблюдение за состоянием програмного RAID

#  cat /proc/mdstat

Дает нечто похожее на нижеследующий вывод.

Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md1 : active raid1 sdb1[1] sda1[0]
      15358016 blocks [2/2] [UU]

md2 : active raid1 sdb2[1] sda2[0]
      20482752 blocks [2/2] [UU]

md3 : active raid0 sdb3[1] sda3[0]
      4096384 blocks 64k chunks

md4 : active raid0 sdb4[1] sda4[0]
      67585280 blocks 64k chunks

md5 : active raid5 sde1[1] sdd1[0] sdc1[2]
      1953519872 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

md6 : active raid1 sdg1[1] sdf1[0]
      488383936 blocks [2/2] [UU]

unused devices: <none>

Указывается имя логического устройства, состояние active/inactive, тип RAID массива, разделы участники, объем в блоках, и последнее поле [UUU] или подобное, отражает что все разделы участники в норме, если же вместо «U», присутствует «_» подчеркивание, то это означает, что массив рассыпался, и необходимо проводить безотлагательные мероприятия по его восстановлению.

Форматирование разделов

# mkfs.ext3 /dev/md3