Centos 7, rpmconf, vimdiff

vimdiff используется, например, для слияния двух конфигурационных файлов. По сути vimdiff это обёртка над vim -d.

Установка vim и vimdiff в Centos 7

yum install vim-enhanced
yum provides '*/vimdiff' 

Пример слияния двух конфигурационных файлов

После обновления ОС yum update, появляются свежие конфигурационные файлы с постфиксом .rpmnew, необходимо провести слияние старого файла и нового. Для обнаружения таких файлов используется программа rpmconf.

Порядок действий:

  • rpmconf -a —frontend=vimdiff — запуск программы поиска и редактирования новых конфигурационных файлов.
  • D — показать различия файлов (выйти q).
  • M — запустить редактор для слияния файлов, на экране появится vimdiff с двумя панелями.
  • :syntax off — выключить подсветку синтаксиса, так как бывает что пропадают символы и видны только под курсором.
  • Слева показан старый, рабочий конфигурационный файл, в который необходимо добавить изменения из нового конфигурационного файла, расположеного в правой панели. Имена файлов подписаны внизу.
  • Переключение между панелями осуществляется нажатием сочетания клавиш Ctrl+w и left или right для перехода на левую или правую панель.
  • Перемещение между изменениями: вперёд ]c , назад [c .
  • Чтобы принести изменения из другой панели (не находящейся сейчас в фокусе) do, из текущей в другую dp
  • Если изменения были внесены по ошибке можно сделать отмену u и выполнить :diffupdate для повторного поиска изменений.
  • После окончания слияния в левой панель необходимо переключиться в правую Ctrl+w right и закрыть файл :q . На экране останется только необходимый файл.
  • Если нужно внести дополнительные изменения нажать i и после внесения изменений нажать Esc .
  • Записать изменения и выйти :x .

Качественный RS-232 контроллер

Очень сильно «наелся» RS-232 контроллерами от Orient и Espada, некоторые не смог завести под Linux, у некоторых брака больше чем рабочих экземпляров.

Начал искать варианты на Aliexpress и нашёл вот это чудо: «UTEK UT-752 2-ports PCI to RS232 Multi-Serial Port Card». Он работает под ОС Linux, драйвера для него находятся в актуальном состоянии, COM порты являются настоящими, а не виртуальными в случае контроллеров Orient. Кроме того у платы есть ещё преимущества, они указаны на сайте производителя. Ссылка на продавца — UTEK UT-752 2-ports PCI to RS232 Multi-Serial Port Card

Описание на сайте производителя: http://www.ethernet-serialconverter.com/sale-458862-pci-serial-card-2-ports-pci-to-rs232-multi-serial-port-card.html

Драйвер: https://www.solvline.com/eng/download_center/download_new.php?dno=1&fno=1&c2=7

Документация: https://www.solvline.com/eng/download_center/download_new.php?dno=2&fno=1&c2=7

Драйвер необходимо скомпилировать, для это в системе должен быть установлен gcc, make, kernel sources, kernel headers:
apt-get install linux-source
apt-get install linux-headers-amd64
apt-get install build-essential

Версия 21 драйвера прекрасно заработала на Debian Jessie:
lsb_release -a
Distributor ID: Debian
Description: Debian GNU/Linux 8.6 (jessie)
Release: 8.6
Codename: jessie

uname -a
Linux scannerserver 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u1 (2016-09-03) x86_64 GNU/Linux

После установки необходимо добавить строчку «golden_tulip» в «/etc/modules», так как инсталлятор использует корявую автозагрузку модуля.

Chrony — ненужные NTP сервера в списке

Понадобилось на сервере изменить список NTP серверов для Chrony, для чего, соответственно, был изменён файл /etc/chrony.conf и указаны новые директивы server. Но после перезапуска демона chronyd в списке (sources) я увидел старый ненужный сервер, что немного ввело в ступор, так как в /etc/chrony.conf он не числился. Удаление через chronyc и команду delete помогало только до перезапуска демона chronyd.

Оказалось что при запуске демона chronyd используется скрипт /usr/libexec/chrony-helper

# This script configures running chronyd to use NTP servers obtained from
# DHCP and _ntp._udp DNS SRV records. Files with servers from DHCP are managed
# externally (e.g. by a dhclient script). Files with servers from DNS SRV
# records are updated here using the dig utility.

Ненужный мне NTP сервер был в файле /var/lib/dhclient/chrony.servers.* сохранившийся от старых настроек сетевого адаптера, когда-то настроенного не на статический адрес, а на DHCP.

Свободное место и ext4

На сервере имеется 2ТБ раздел. В один из дней БД mysql, размещённая на данном разделе, перестала функционировать с сообщением о нехватке места. Открыв mc увидел, что свободно ещё ~100 ГБ, но команда df -h сообщала о полном использовании места. Оказалось что файловая система ext4 по умолчанию резервирует 5% места для внутренних нужд, т.е. ~100ГБ из 2ТБ. Уменьшать процентное соотношение резервируемого пространства файловой системой ext4 можно и нужно на больших разделах, для этого используется команда (уменьшение до 1%):
tune2fs -m 1 /dev/vda1
tune2fs 1.42.5 (29-Jul-2012)
Setting reserved blocks percentage to 1% (5505021 blocks)

Дополнительные ссылки:
https://odzangba.wordpress.com/2010/02/20/how-to-free-reserved-space-on-ext4-partitions/
https://wiki.archlinux.org/index.php/ext4#Reserved_blocks

kernel: do_IRQ: X.Y No irq handler for vector (irq -1)

Одно из объяснений данной ошибки:

The Intel 5520 and 5500 chipsets do not properly handle remapping of MSI and MSI-X interrupts. If the interrupt remapping feature is enabled on the system with such a chipset, various problems and service disruption could occur (for example, a NIC could stop receiving frames), and the «kernel: do_IRQ: 7.71 No irq handler for vector (irq -1)» error message appears in the system logs. As a workaround to this problem, it has been recommended to disable the interrupt remapping feature in the BIOS on such systems, and many vendors have updated their BIOS to disable interrupt remapping by default. However, the problem is still being reported by users without proper BIOS level with this feature properly turned off. Therefore, this update modifies the kernel to check if the interrupt remapping feature is enabled on these systems and to provide users with a warning message advising them to turn off the feature and update the BIOS.

TROUBLESHOOTING: Some systems have trouble supporting MSI and/or MSI-X
interrupts. If you believe your system needs to disable this style of
interrupt, the driver can be built and installed with the command:
# make CFLAGS_EXTRA=-DDISABLE_PCI_MSI install

Но в моём случае появление данного сообщения было связано с битой ОЗУ.

«Рабочий» ejabberd не запускается — Error reading Mnesia database spool files

После перезагрузки сервера (ОС Ubuntu Server 12.04 LTS) перестал запускаться до этого уже настроенный и отлично работающий ejabberd.
Читать далее

Проблема при открытии HTTPS сайтов в Chrome через прокси сервер Squid

Всё чаще стали проявляться проблемы у пользователей при открытии HTTPS сайтов в Chrome (версия 29.0.1547.66 m) с использованием прокси сервера Squid (Basic и NTLM аутентификация), при чём даже на одинаковых аппаратных конфигурациях у одних пользователей всё исправно работало, у других нет. В браузерах — Opera, Firefox всё работало без проблем.

Симптомы следующие: при переходе на любой HTTPS сайт, например, на https://dropbox.com https://twitter.com страница не загружалась (но если и загружалась, то с 10-ой попытки обновления, и не полностью). Также при открытии появлялись ошибки ERR_TIMED_OUT и ERR_TUNNEL_CONNECTION_FAILED.

Испробовали всё, что можно: указание в Chrome прокси сервера вручную, указание конкретного типа аутентификации (так как по логам Squid было видно, что Chrome не всегда пытается аутентифицироваться, во всяком случае реже, чем при открытии просто HTTP сайтов), далее убрали все ограничения Squid и аутентификацию в том числе, но это не помогло решить проблему. Также было замечено, что Internet Explorer имеет аналогичные проблемы при доступе на HTTPS сайты.

В итоге решено было посмотреть «диалог» между клиентом и прокси сервером, используя анализатор сетевого протокола Wireshark (http://wireshark.org). Wireshark запускался на стороне клиента. Проходящие пакеты были записаны и отфильтрованы по адресу прокси ip.addr==192.92.92.100. И тут обнаружилось следующее — пакеты, отправляемые клиентом, имели некорректную (нулевую) контрольную сумму (скриншот приведён ниже). После чего было решено в настройках сетевого адаптера отключить всё, что касается «разгрузок протоколов», энергосбережения, контроля трафика и прочих функций, которые берёт на себя сетевая карта вместо ОС. Пакеты стали отправляться с правильной контрольной суммой заголовка и Chrome стал открывать HTTPS узлы мгновенно, без нареканий, с использованием аутентификации на прокси сервере Squid. На остальных проблемных компьютерах данные манипуляции также помогли решить проблему (сетевая карта была такая же). Возможно также помогает обновление драйвера сетевой карты, но данный метод не испробован.

Сетевая карта: Realtek PCIe GBE Family Controller
Драйвер: Realtek 21/03/2011, version 7.43.321.2011

Пакеты с некорректной контрольной суммой заголовка:
wireshark_chrome

Окно с настройками сетевой карты:
settings

Как разобрать RAID

Если метаданные RAID не поддаются удалению, mdadm  —zero-superblock не помогает, диски раз за разом определяются как часть массива, а полное форматирование по каким-то причинам неприемлемо, нужно удалить суперблок вручную.
Читать далее

Apache mod_ldap Internal Server Error — Проблема при аутентификации в AD

Очень долго боролся с авторизацией Apache2 в Active Directory, настраивал не первый раз, но почему то аутентификация не проходила (окошко для ввода логина пароля выскакивало, но ввод правильных учётных данных не позволял аутентифицироваться, в браузере отображалась страница с Internal Server Error).
После долгих мучительных поисков и проб, обнаружил что можно подключаться к AD через другой порт 3268, что и позволило решить проблему. Почему раньше всё работало через 389 порт, а теперь нет, затрудняюсь ответить.
Пример .htaccess:

AuthType Basic
AuthBasicProvider ldap
AuthName «DOMAIN.RU Auth»
AuthzLDAPAuthoritative off
AuthLDAPUrl ldap://DOMAIN.RU:3268/DC=DOMAIN,DC=RU?sAMAccountName?sub?(objectClass=user) NONE
AuthLDAPBindDN «user@DOMAIN.RU»
AuthLDAPBindPassword «user»
Require valid-user

AD — Windows Server 2008 R2
Apache 2.2.21-r1

Настройки RhodeCode для авотризации в AD

Долго мучался с вводом корректных настроек в RhodeCode для того, чтобы пользователи могли входить в интерфейс под своей доменной учётной записью.
Что имеется:
RhodeCode 1.2.4
Контроллер домена на Windows Server 2008 R2
Установленный python-ldap (easy_install python-ldap)

Запускаем http сервер RhodeCode: paster serve production.ini

Заходим в веб-интерфейс из браузера http://127.0.0.1:5000
Логинимся под учётной записью администратора, переходим в пункт меню Admin -> ldap

Вот с какими значениями полей у меня заработал вход доменных пользователей:
Connection settings
Enable LDAP — поставить галочку
Host — SERVER.DOMAIN.RU
Port — 389
Account — user@DOMAIN — пользователь AD имеющий доступ к каталогу
Password — пароль пользователя user@DOMAIN
Connection security — No encryption
Certificate Checks — NEVER
Search settings
Base DN — DC=domain,DC=ru
LDAP Filter — (objectCategory=User)
LDAP Search Scope — SUBTREE
Attribute mappings
Login Attribute — sAMAccountName
First Name Attribute — givenName
Last Name Attribute — sn
E-mail Attribute — mail

На самом деле практически всё это было описано в документации http://packages.python.org/RhodeCode/setup.html, но после того как я указал приведённые там параметры у себя уже на развёрнутом RhodeCode, то доменные юзеры логиниться не хотели, в следствии чего в production.ini я установил в секциях [logger_*] параметр level = DEBUG и детально изучил вывод сервера, где было указано что то вроде «такой объект не найден» от ldap компонента. В итоге начал подбирать параметр LDAP Filter (базовое значение (&(objectClass=user)(!(objectClass=computer))) работать не хотело). Всё заработало при LDAP Filter равном (objectCategory=User)