2014-10-29

Mount.CIFS - грабли

Долгое время периодически пытался подключиться с одного сервера на машину пользователя, на которую надо было сбросить файлы для обработки, посредством mount.cifs, но безуспешно. Разбираться было влом, как-то не придавал этому значения, но сегодня что-то меня заклинило на этой проблеме, и я решил окончательно разобраться с этим вопросом.
Проблема заключалась в том, что попытки подключить шару оканчивались ошибкой:

mount -t cifs //w7-ws014/d$ /mnt/fbtemp -o credentials=creds.txt
mount error(115): Operation now in progress
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

хотя к другим Windows-серверам с сервера подключался без проблем. Долго ковырялся в Интернет, думал, проблема в каких-то настройках машины, пока не вспомнил о хитромудрых правилах на коммутаторе cisco, через который оба vlan'а общались между собой. Вот там-то собака и порылась. Соединения TCP пропускались только установленные со стороны пользовательской машины.
Так что внимательнее надо быть, когда в инете пишут, чтобы проверили настройки коммутаторов, файрволов и т.п.

2013-02-24

Установка Debian 7 "Wheezy" на ASUS 1215B

Пришел черед нетбука опробовать Debian. Установка прошла почти гладко, но меня насторожило отсутствие предложения в конце инсталляции о размещении grub. Ну, может, сам порешил, куда ставиться (хотя, может, я несогласен), благо винчестер в нетбуке один, и выбирать не из чего. Согласился с предложением перезагрузиться для входа в систему, и получил через несколько секунд облом в виде kernel panic, причем, кроме выдергивания батареи, ничего не помогло его выключить. После недолгого просмотра Интернета на предмет схожей проблемы, выяснилось, что, возможно, проблема в том, что неправильно настроен UEFI.
Но позвольте, я не собирался ставить grub с поддержкой UEFI! В случае установки Arch Linux у меня не было подобных проблем.
В общем, загрузился с LiveCD Debian 6.0.6, примонтировал разделы root/boot/sys/dev/proc, выполнил chroot и обнаружил, что действительно, в системе установлен grub для UEFI. Снес его, поставил обычный grub, обновил конфиг и всё запустилось!

2013-02-15

"Возвращение короля"

В последнее время достали постоянные обновления Archlinux на ноуте. Захотелось стабильности. Можно, конечно, подколоть на тему возраста, но реально достало обновлять системы на Арче на ноутбуке, нетбуке и десктопе. Решил вернуться на (полу)стабильный Debian GNU/Linux хотя бы на мобильных системах.

2011-08-10

Релиз Samba 3.6.0

Увидел свет первый стабильный релиз новой ветки Samba 3.6, в которой доведена до готовности к промышленному внедрению поддержка протокола SMB2, используемого в Windows Vista и Windows 7, добавлен новый модуль для анализа трафика, изменены некоторые влияющие на безопасность настройки по умолчанию и существенно переработана поддержка печати.

Кроме того, продолжается работа по обеспечению плавного слияния кодовых баз веток Samba 3 (winbindd и код файлового сервера) и Samba 4 (контроллер домена). В будущем планируется выпустить единый многофункциональный продукт Samba 4, который будет поддерживать бесшовную миграцию с Samba 3 и сможет выступать в роли файлового сервера, сервера печати, сервера идентификации (winbind) и совместимого с Active Directory контроллера домена.

Ключевые изменения, представленные в Samba 3.6.0:

* Поддержка SMB2 признана полностью функциональной. Через SMB2 могут работать все возможности Samba, за одним исключением - не поддерживается изменение квот при помощи утилит управления квотами Windows. Поддержка SMB2 не включена по умолчанию. Для активации SMB2 в секции "[global]" файла smb.conf необходимо указать "max protocol = SMB2". По умолчанию работа через SMB2 будет включена после окончательного подтверждения стабильности реализации SMB2 в результате оценки работы реальных систем, перешедших на новый протокол в Samba;
* Добавлен новый анализатор трафика SMB Traffic Analyzer (SMBTA), поддерживающий вторую версию протокола VFS-модулей, в которой реализовано шифрование, передача нескольких аргументов и упрощенный для разбора формат. Для управления SMBTA используется утилита smbta-util. SMBTA позволяет осуществить мониторинг и сбор статистики о потоках данных пользователей, работе Samba-сервисов или целых доменов. В отличие от сетевых анализаторов, SMBTA не перехватывает трафик, а получает информацию через VFS-интерфейс (Virtual File System) Samba, являясь полностью прозрачным для пользователей и не влияя на эффективность пересылки;
* Полностью переписан и подвергнут рефакторингу код обработки очередей печати (Spoolss) и реализации RAP-команд управления печатью (Remote Administration Protocol). Все связанные с печатью операции теперь выполняются через RPC-интерфейс Spoolss, что позволило в одном месте сконцентрировать код всех связанных с подсистемой печати проверок, убрав все обработчики особых ситуаций из основного кода печати.

Для хранения любых данных в Spoolss и других компонентах системы печати задействованы RPC-интерфейсы winreg. Т.е. вместо TDB-файлов использован интерфейс Registry, что позволит обращаться к данным принтера и Windows-клиентам, используя стандартный для них и на 100% совместимый RPC-интерфейс winreg. Процесс миграции с TDB-файлов максимально автоматизирован и будет автоматически вызван при первом запуске (также можно провести миграцию вручную, используя команду "net printer migrate"). В будущем планируется вынос реализации спула печати в отдельный фоновый процесс, что позволит увеличить модульность системы и даст возможность не использовать лишний код, в ситуации кода поддержка печати не требуется;
* Продолжена работа по внутренней реструктуризации, нацеленная на увеличение разделения внутренних подсистем, что в конечном итоге должно привести к ускорению сборки, сокращению размера исполняемых файлов и оптимизации зависимостей;
* Добавлен бэкенд для работы с квотами на NFS-разделах в Linux. Разработка базируется на ранее созданной реализации для платформ Solaris и FreeBSD. Бэкенд позволяет samba передавать корректную информацию о наличии свободного места на импортируемых NFS-разделах, используемых для размещения samba-разделов;
* Внутренние изменения метода работы с локальной базой пользователей в Winbind. Вместо вызова функций passdb для получения информации о локальных пользователях и группах используются обращение через внутренние неименованные каналы (samr и lsa rpc pipe). Причина изменения связана с желанием использование единого подхода во всех компонентах инфраструктуры, что позволяет вынести больше кода Winbind в совместно используемые библиотеки;
* Изменение настроек по умолчанию, связанных с безопасностью:



client ntlmv2 auth = yes
client use spnego principal = no
send spnego principal = no


Опция 'client ntlmv2 auth = yes' запрещает использовать NTLM-аутентикацию при работе в режиме клиента (вместо устаревшего протокола NTLMv1 используется более криптостойкий протокол NTLMv2, базирующийся на хэшах HMAC-MD5). Изменение затрагивает только входящие в состав Samba утилиты, такие как smbclient и winbind, но не влияет на работу CIFS-клиента, встроенного в Linux-ядро.

Опция 'client use spnego principal = no' указывает на то, что для запроса билета в Kerberos клиентский софт samba (smbclient, winbind) будет использовать "CIFS/имя хоста", что близко к поведению Windows при работе с Kerberos, вместо ранее практикуемого полного доверия к предоставляемым сервером хинтам, поддержка которых была прекращена начиная с Windows 2008. Для налаживания работы со всеми клиентами, все псевдонимы (alias) сервера должны быть записаны как servicePrincipalName в Active Directory. Опция 'send spnego principal = no' введена для отражения изменений в Windows 2008, больше не отправляющем principal-хинты;
* Переработан способ маппинга пользовательских идентификаторов c целью увеличения гибкости определения правил и обеспечения более простого и понятного процесса конфигурирования. Основные изменения связаны с выносом кода, ответственного за сопоставление с unix-идентификаторами, в отдельные idmap-бэкенды tdb, tdb2 и ldap. Код выделения unix id теперь привязан к правилам сопоставления (sids_to_unixids). В каждом idmap-бэкенде используется свой механизм создания idmap unixid. Из winbindd API удалены методы, связанные с сохранением и удалением сопоставлений идентификаторов. Команда "net idmap dump/restore" теперь вместо работы с winbindd напрямую обращается к базам данных. В настоящий момент обеспечена поддержка бэкендов tdb и tdb2, пока отсутствует поддержка ldap. Признаны устаревшими параметры конфигурации "idmap uid", "idmap gid" и "idmap range", вместо них следует использовать "idmap config * : range" и "idmap config * : backend";
* Начальная реализация Endpoint Mapper для Samba, работающего как DNS-сервер, но для портов. Т.е. при необходимости подсоединения к определенному RPC-сервису через TCP/IP запрос к Endpoint Mapper позволяет узнать номер порта для соединения по имени сервиса. В настоящий момент код еще не до конца протестирован и не активирован по умолчанию. Для включения необходимо использовать настройку "rpc_server:epmapper = daemon" в smb.conf.
* Добавлены новые директивы конфигурации smb.conf (в скобках значение по умолчанию):
o "async smb echo handler" (No)
o "client use spnego principal" (No)
o "ctdb locktime warn threshold" (0)
o "log writeable files on exit" (No)
o "multicast dns register" (Yes)
o "ncalrpc dir"
o "send spnego principal" (No)
o "smb2 max credits" (128)
o "smb2 max read" (1048576)
o "smb2 max trans" (1048576)
o "smb2 max write" (1048576)
o "username map cache time" (0)
o "winbind max clients" (200)
* Прекращена поддержка директивы "idmap alloc backend".

2011-08-09

Установка последней версии MySQL 5.5.15 и проблемы с кодировкой MySQL на сайте на PHP

На установленном на сельском древнем компе Debian GNU/Linux 6.0.2.1 (Pentium III 733 MHz, RAM 512Mb) решил обновить версию MySQL с 5.1.x на 5.5.15, дабы продолжить на нем работу над небольшим сайтиком на PHP. Скачал пакет исходных текстов с сайта Oracle (с его зеркал), установил и настроил его по этой доке (не без проблем, желательно после установки и настройки полностью удалить каталоги старого MySQL). Единственное, что пришлось поменять, местоположение сокета на файловой системе в /etc/my.cnf:

вместо
socket = /var/lib/mysql/mysql.sock

надо записать
socket = /var/run/mysqld/mysqld.sock

в противном случае не будет работать ни одна программа или сайт, т.к. они ожидают найти сокет в определенном месте.
Теперь у меня дома и в селе была почти одинаковая версия MySQL, что исключало какие-либо проблемы при работе с ней.
Но не тут-то было. После открытия сайта выяснилось, что русские буквы показываются знаками вопроса. Поиск в инете выводил на 2 пути решения вопроса: настроить my.cnf или перед каждым запросом делать запрос:

$query="set names utf8";
$result = mysql_query($query) or die("Query failed");

Решение проблемы таким образом мне не улыбалось. Настройки же my.cnf приводили только к краху запуска MySQL. Так как в селе и других дел полно, забросил временно эти поиски, а сегодня решил еще раз поискать решение проблемы путем модификации my.cnf. Последовательно комментируя настройки, нашел рабочую кофигурацию, при которой сайт нормально отображает русские буквы. Обычно предлагается внести в MySQL в секцию [mysqld] следующие настройки:

[mysqld]
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
init-connect="SET NAMES utf8"
skip-character-set-client-handshake

Оказалось, что первая настройка и не дает запустить сервер MySQL, а эту настройку упорно описывают везде, где обсуждается эта тема. Возможно, она работает на Windows, т.к. обычно везде идет речь о кодировке WINDOWS-1251 (cp1251). Среди остальных тоже есть "лишние" (не исключено, что они еще понадобятся), а оставшаяся рабочая конфигурация выглядит так:

[mysqld]
character-set-server=utf8
skip-character-set-client-handshake

Теперь русские буквы показываются нормально.

2010-08-04

Релиз iptables 1.4.9

Вышла новая версия iptables — набора инструментов для управления IPv4- и IPv6-сегментами системы фильтрации и преобразования пакетов netfilter (сам netfilter является частью ядра Linux).

В iptables 1.4.9 реализована полная совместимость с вышедшим недавно ядром Linux 2.6.35, а также внесен ряд других улучшений:

* Добавлена поддержка нового действия LED, позволяющего использовать доступные системе световые индикаторы для сигнализации о прохождении пакетов через заданные правила. Например, следующая последовательность команд обеспечит включение на одну секунду выбранного индикатора при поступлении входящего пакета на TCP-порт 22 (SSH):


iptables -I INPUT -p tcp --dport 22 -j LED --led-trigger-id ssh --led-delay 1000
echo netfilter-ssh > /sys/class/leds/имя_индикатора/trigger

* Добавлена поддержка действия TEE, позволяющего выполнять зеркалирование определенного трафика на заданный хост. Например,


iptables -t mangle -A PREROUTING -i eth0 -j TEE --gateway 192.168.0.2

обеспечит копирование всего входящего через eth0 трафика и отправку его копии на хост 192.168.0.2 (хост-получатель должен находиться в одном сегменте сети с нашим хостом).

Ранее это действие было доступно только в комплекте xtables-addons (данный проект является современным аналогом patch-o-matic).
* Обновлены инструменты для обеспечения взаимодействия netfilter и ipset.

ipset — набор модулей для ядра Linux и одноименная управляющая утилита, в совокупности обеспечивающие возможность хранить в памяти огромные списки IP-адресов, подсетей и портов, а также очень быстро проверять заданные адреса и порты на предмет нахождения в этих списках. Одно из ключевых новшеств ожидаемого в ближайшем будущем релиза ipset 5 — поддержка семейства адресов IPv6.

Изменения, внесенные на уровне iptables в критерий set (этот критерий позволяет проверять адреса и порты обрабатываемых пакетов на наличие в заданных списках) и в действие SET (позволяет добавлять адреса и порты обрабатываемых пакетов в заданные списки, либо удалять из них), отражают грядущие нововведения — теперь эти инструменты можно вызывать не только из iptables, но и из ip6tables.
* Добавлена возможность логического отрицания в критерии quota, что упрощает обработку пакетов, выходящих за рамки квоты.
* Улучшена поддержка протокола SCTP: добавлено распознавание типа секции (chunk) FORWARD_TSN и флага SACK-IMMEDIATELY в DATA-секции.
* Исправлен ряд мелких ошибок в коде и документации.

2010-07-10

Клонирование системы с обычного HDD на SSD

Дано /dev/sda:

---------------------------------------------------------------
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---------------------------------------------------------------


Склонировать надо на новый диск /dev/sdb, на котором создать ту же таблицу разделов, но размер каталогов может быть другим, в данном случае раздел /dev/sdb7 был меньше.

---------------------------------------------------------
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---------------------------------------------------------


Берем привычный инструмент и клонируем:

dd if=/dev/sda of=/dev/sdb bs=1M


После этого практически все программы работы с разделами (sfdisk, cfdisk, parted(gparted)) отказались работать с /dev/sdb, ссылаясь на неправильную таблицу разделов, показывающую верхнюю границу разделов выше физического размера целевого винта /dev/sdb. Остался только верный и надежный fdisk, честно показавший все данные по разделам, даже некорректные:

# fdisk -l /dev/sdb


Справиться с проблемой помогло удаление целиком расширенного раздела /dev/sda4, сохранение таблицы на диск (w), и последующее создание тех же самых разделов (n) указанием начального и конечного цилиндров:

# fdisk /dev/sdb
> n

Номера цилиндров вводить те же самые, что и на исходном диске:

# fdisk /dev/sda
> p


Теперь gparted показывал диск. Мало того, после просмотра оказалось, что вся инфа, переписанная с исходного диска командой dd в самом начале, находится на месте и после удаления расширенного раздела никуда не делась. Цветом явно выделялись области с данными. Осталось только грохнуть недо-раздел /dev/sdb7 и заново создать его в новых границах. А после банальным копированием с сохранением прав перенести данные с /dev/sda7 на /dev/sdb7:

# cp -r -p /* /


Раздел монтировался по label, который забыли указать при создании раздела. Но не беда:

# tune2fs -L label /dev/sdb7


Кстати, желательно после каждой работы с разделами и винтами перечитывать их командой:

# partprobe


Также необходимо в /etc/fstab в опциях монтирования разделов вместо relatime указать noatime для уменьшения износа SSD-дисков.