Browsing posts in: Администрирование

Апгрейд Proxmox на Hetzner

На днях на один из поддерживаемых мной гипервизоров на Proxmox устанавливались обновления, и из-за проблемного драйвера r8169 перестала работать сеть, в логах было что-то типа:

device eth0 entered promiscuous mode

Как выяснилось, это проблемы именно пресловутого реалетковского драйвера, и было решено собирать драйвер r8168, а заодно и переустановить Proxmox, так как апгрейд через пару релизов обещал ещё больший геморрой с разбором получившихся косяков. Поставить стоковый образ через LARA на ZFS было плохой идеей, так как хетцнеровский образ Linux восстановления не умеет в ZFS, а опять общаться с FreeBSD мне было влом. Все команды от рута, проставлять решётки в начале строк мне тоже влом :)

Бэкап

Что нужно забэкапить (используются только KVM-контейнеры):

VPS Part

Конфиг: /var/lib/pve-cluster/config.db

Данные /var/lib/vz/images/*

Linux Part
Конфиг:  /etc/network/interfaces

Скрипты: /root/*.sh

Переустановка ОС

Список дисков

Disk /dev/sda: 3000 GB (=> 2794 GiB)
Disk /dev/sdb: 3000 GB (=> 2794 GiB)
Disk /dev/sdc: 2000 GB (=> 1863 GiB)

Из первых двух собирается RAID1, третий монтируется в /mnt/backup

Оптимальная на мой взгляд разбивка без LVM выглядит так:

Восстановление сети

После установки грузимся в хетцнеровское фирменное Rescue, в котором и будут проводиться все работы.

  1. Восстанавливаем конфиг /etc/network/interfaces
  2. Заходим в chroot и переходим в /tmp:
  3. Качаем исходники драйвера r8168, официальный сайт тут: http://www.realtek.com.tw/Downloads/downloadsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false, после того, как скачали на компьютер, извлекаем ссылку и заливаем на сервер:
  4. Правим скрипты сборки: так как у нас chroot, то uname -r будет возвращать версию хостовой системы. Чтобы всё скомпилировалось, нужно заменить конструкции типа $(shell uname -r) в Makefile’ах и Autorun.sh на явное указание ядра проксмокса (а точнее, версии ядра, под которую будем собирать). Её можно найти в /lib/modules, выглядит как 4.4.16-1-pve, далее именно эту версию я буду указывать в качестве примера.
  5. Ставим пакеты, необходимые для сборки и screen для шага 10
  6. Собираем
  7. Далее я открыл screen и запустил ./autorun.sh, а через какое-то время хардово ребутнул сервер. Да, так делать плохо, нужно было выйти из чрута и руками положить модуль куда надо, распарсив самостоятельно скрипт, но мне очень хотелось спать :) Дальнейшие шаги 8-12 я проделал чтобы убедиться, что всё нормально работает, однако следует рассматривать их как правильное решение при первой установке модуля; а в пункте 7 в этом случае достаточно просто скопировать собранный модуль в
  8. Опять Rescue и шаг 2
  9. Выполняем обновление модулей (везде, где можно, явно указываем версию ядра, у нас chroot, не забыли?)
  10. Блокируем загрузку старого драйвера
  11. Добавляем загрузку нового модуля
  12. Пересобираем Initramfs

    Если всё получилось верно, то при выполнении будет строчка:
  13. Пляски с сетью на этом закончились. Кидаем контейнеры на их место в /var/lib/vz/images, config.db в /var/lib/pve-cluster, правим /etc/network/interfaces, включаем форвардинг командой

    а также возвращаем в /etc/fstab строчку

Эксплуатация

Вообще говоря, пакет r8168-dkms вполне себе существует, но он в ветке sid, и я лучше буду выполнять эту работу руками при обновлении ядра :)

Собственно, после установки обновлений ядра нужно будет повторять шаги 3, 5, 6, 7, убрав оттуда жёсткую привязку к версии ядра и используя стандартные скрипты из поставки драйвера.

Но это всё работает при нахождении за локальной консолью и на обновлённом ядре (после перезагрузки, с лежащей сетью), а на удалённом сервере нужно делать так:

Убеждаемся, что у нас появился актуальный драйвер:

И добавляем его в загрузочный образ (вообще, по идее достаточно update-initramfs -u -k 4.4.44-1-pve, но это так, на всякий случай)

Использовано:

https://forum.proxmox.com/threads/cannot-access-etc-pve-transport-endpoint-not-connected.7528/

https://wiki.hetzner.de/index.php/Installation_des_r8168-Treibers/ru#Proxmox

и многочисленные запросы в гугле вида «r8169 debian»


Webmin, пожирающий память

На самом деле память ест не Webmin, а процесс lookup-domain.pl, который используют службы почтового сервера. При большой загруженности почтового сервера получается следующая картина:

domain-lookup

Первый способ (не помогает):

Нужно в System Settings -> Virtualmin -> Config -> Spam Filtering установить значение «Lookup domain for incoming email» в «One at a time».

Второй способ, вроде бы рабочий:

Нужно перезапустить визард и выключить запросы DNS. Либо в файле /etc/webmin/virtual-server/config установить параметр wizard_run=1, либо  открыть Javascript-консоль браузера и выполнить

Там выбрать на втором этапе

Run email domain lookup server? — No (less RAM used, slower mail and more CPU load)


Отключение USB Flash в Windows XP

Решил опубликовать старые черновики, это один из них.

Давно экспериментировал с блокировкой доступа к USB-накопителям в одной организации. Если бы там были минимум Windows Vista и домен уровня Windows 2008, это всё легко делалось групповыми или локальными политиками, но там половина машин оказалась на Windows XP, а контроллер домена — Windows 2003, поэтому пришлось попотеть. Сразу скажу: это всё низкобюджетный колхоз, в серьёзной организации лучше будет приобрести какой-нибудь нормальный антивирус с центром управления, который позволяет управлять доступом к съёмным устройствам. Я предпочитаю Kaspersky.
В Интернете есть несколько способов, которые мы рассмотрим по-порядку.

1. Статья, которая легко находится в Гугле — официальное руководство от Microsoft по отключению съёмных устройств. Руководство хорошее, но есть одно «но» — для съёмных устройств оно как раз и не подходит. Встроенные CD-ROM и FDD отключаются на ура, а вот USB-носители — нет. После применения политики и перезагрузки новая флешка преспокойно устанавливается в систему.
Кстати, хинт новичкам:  выключает устройства выбор Disable что-то там: Enabled. Ковырявшиеся в групповых политиках уже не подловишь на таких брэйнфаках :)

2. Другая статья от Microsoft. Здесь описываются манипуляции по предотвращению использования ещё неподключённых устройств. Вкратце — нужно в нашу групповую политику в

добавить файлы

и ставим каждому из низ Deny на всё для All и System, остальных удаляем. После этого в появившемся окне выбираем «Replace existing permissions on all subfolders and files with inheritable permissions» У кого серверная винда на китайском или иврите — это третий сверху (или второй снизу) кружок. Вторая часть — это как с помощью реестра выключить драйвер USBSTOR.SYS — мы это уже сделали в первом пункте.

3. Утилита USBDeview от Нира Софера. Там есть много вкусных штуковин, разработчик по гениальности, пожалуй, не уступает Марку Руссиновичу, но сегодня нам понадобится именно эта. Она позволяет управлять драйверами уже установленных USB-устройств, причём по сети в консольном режиме безо всякого psexec’а и даже в графическом!
Драйвера удаляются такой командой:

Вот и всё. Ах да, в домене с Windows 2008 и при Windows не ниже Vista на клиентских компьютерах это делается встроенными средствами:


Установка Prosody и миграция с ejabberd

Решил систематизировать все сакральные знания по установке этого неплохого Jabber-сервера. Настройка велась не с нуля, а выполнялся переезд с ejabberd, который в принципе неплох, но для небольшой организации немного тяжёлый, а также плохо себя вёл на Ubuntu 14.04.

Я ставил самую свежую версию (читай — версию в разработке), которая на данный момент 0.10. Адрес сервера будет 192.168.0.2, все операции от рута.

Установка и начальная настройка Prosody

Вначале добавим репозиторий и ключ:

и ставим:

Генерируем ключи:

Теперь редактируем конфиг. Prosody написан на Lua, который гораздо более читабелен, чем старый формат Erlang (с переходом на YAML это исправили)

Вот пример моего конфига на 2 домена:

Движок базы. Я выбрал MySQL, хотя встроенный файловый формат тоже хорош и удобочитаем. Создаём базу:

Важные моменты

c2s_require_encryption = false — в Miranda NG в Windows XP не работает TLS, поэтому я разрешил соединяться без шифрования. Внутри корпоративной сети это некритично. Также добавил параметр legacyauth

groups_file должен обязательно идти до VirtualHost. Это единственная настройка модуля groups, который нужен для загрузки общего ростера. Сам формат файла такой:

Плюсик означает публичную группу, то есть группы «Бухгалтерия» и «Продажи» будут у всех в списках, а «IT» только у членов группы «IT». Через веб-интерфейс управлять ими нельзя (я редактирую через Webmin). Через равно задаётся имя в списке. Кириллица работает (разумеется, UTF-8)

mod_admin_web — плагин веб-интерфейса. Он ещё менее функциональный, чем у ejabberd, и из него не отредактировать общий ростер, но лучшего пока нет. И его нужно ставить отдельно.
Инструкция по установке модулей
Инструкция к самому модулю
Ставим Mercurial, скачиваем репозиторий с плагинами, копируем и добавляем в конфиг (у меня уже добавлено). В Ubuntu плагины лежат в /usr/lib/prosody/modules/, узнать свой путь можно запустив prosodyctl about

Обычно в локальной сети Jabber-сервер не резольвится по своему полному доменному имени, поэтому нужно добавить VirtualHost для IP-адреса или внутреннего доменного имени.  Пример:
http://192.168.0.2:5280/admin/
https://192.168.0.2:5281/admin/

LuaExpat. prosodyctl может ругаться (без потери функционала, но сервер уязвим к DoS-атакам) на устаревший или отсутствующий luaexpat, который должен быть версии 1.3.0 или новее. В репозиториях текущего LTS Ubuntu Server 14.04 есть только 1.2.0, варианты решения — либо прикрутить из этого репозитория, либо отключить mod_compression, либо не заморачиваться :)

Миграция пользователей с ejabberd

1. Экспортируем дамп базы ejabberd

Может понадобиться пакет exmpp. Файл окажется в /var/lib/ejabberd, потом можно будет его перенести.

2. Импортируем дамп базы ejabberd в prosody

Инструкция по импорту здесь. Нужно поставить Mercurial (если ещё не установлен), скачать репозиторий с исходниками и отредактироватьь конфиг.

3. Конвертируем файловую базу Prosody в MySQL

Необязательно если мы не используем MySQL. Инструкция к мигратору.

По умолчанию этот файл есть в папке /etc/prosody, можно отредактировать либо его, либо этот и запускать с опцией —config=./migrator.cfg.lua

И запускаем импорт


Глюки в Скайпе

Популярная нынче проблема — «Главная страница Skype недоступна» — уже намозолила мне глаза. Помимо бесполезной страницы перестаёт работать и окно добавления контактов. Оно, в отличие ядра Скайпа, живущего своей жизнью и успешно пролезающего через многие файерволлы, пользуется настройками системы — тем, что указано в «Свойствах обозревателя». Самая распространённая причина — пользователь включил автономный режим или неработающий прокси-сервер в Internet Explorer’е. Во втором случае это часто происходит из-за криво закрытого банк-клиента на базе Inter-Pro, а первый… если честно, то с трудом представляю, если кто-нибудь обнаружит причину, по которой пользователи ставят эту проклятую галочку,  и опишет — с меня пиво :)

Но в этот понедельник было всё по другому. После отлаженных действий я полез проверять по этому адресу. В Опере он благополучно открылся, а вот Internet Explorer ругался на кривой сертификат и предлагал продолжить открытие сайта вручную. При рассмотрении выяснилось, что в системе нет соответствующего корневого сертификата. При этом Windows 7 была поставлена не так уж давно и регулярно обновлялась.

Как выяснилось, скайповский сертификат зависит от Akamai Subordinate CA 3, а он от GTE CyberTrust Global Root. Оба нашлись в Mozilla Firefox на другом компьютере и были импортированы в систему (позже выяснил, что достаточно только GTE). До сих пор сижу и думаю: что это было?  Руками удалили?


Неуловимая кривизна

Только что победил появление окна «Сохранить как…» виртуального xps-принтера при подключении к серверу терминалов Windows Server. Глюк встречается уже не первый раз и не в одном месте, но только сейчас нашлось время им заняться. Как и предполагалось при поверхностном гуглении, проблему вызывал драйвер МФУ Samsung, поставленный по чьей-то прихоти. Проблема довольно редкая — поскольку нормальные люди на сервер ставят только драйвер принтера, а не полный пакет в несколько сотен метров.


Как настроить Allied Telesis AR415S

Маленький очерк, полезный разве что для тех, кто никогда не имел дело с подобным оборудованием и имеет на руках эту замечательную серую коробку с заданием «срочно настроить ко вчерашнему дню». В моём экземпляре кто-то уже ковырялся и снёс заводские настройки, и DHCP не работал.
Берём консольный кабель (который с RS-232 и RJ-45), втыкаем в порт asyn0 и COM-порт компьютера (что делать, если нет ком-порта я уже не подскажу :) Запускаем эмулятор терминала (HyperTerminal, Telemax из набора Norton Commander). Включаем питание (при вопросе «Force EPROM download» жмём n):
INFO: Self tests beginning.
INFO: RAM test beginning.
PASS: RAM test, 32768k bytes found.
INFO: Self tests complete.
INFO: Downloading router software.
Force EPROM download (Y) ?
INFO: Initial download successful.

INFO: Initialising Flash File System.

INFO: Executing configuration script
INFO: Router startup complete

Логин — manager, пароль friend. Если не подошли, значит ковырялись основательно, и придётся искать ковыряльщика или перепрошивать у производителя, волшебной кнопки reset как на каком-нибудь D-Link’е нет.
Далее вводим команды:
enable ip
Ответ:
Info (1005287): IP module has been enabled.
Настройки интерфейса. Для настроек дефолтного vlan1 нужно печатать add:
add ip interface=vlan1 IPaddress=192.168.1.1 MASK=255.255.255.0
Ответ:
Info (1005275): interface successfully added.
Всё, дальше подключаемся к одному из четырёх сетевых портов, ставим вручную на своём компьютере ip и настраиваем вручную через веб-интерфейс.


Простое руководство по синхронизации времени на контроллере домена Windows Server 2003

Уже достало, что регулярно попадаются контроллеры доменов с убежавшим временем. Сделал выжимку из майкрософтовских статей.

Задаём список серверов:
net time /setsntp:"ntp.psn.ru pool.ntp.org time.windows.com"

Может вывести:
System error 2 has occurred.

The system cannot find the file specified.
Это значит, что служба времени не установлена. Пишем:
w32tm /register
Служба стартует сразу, если напечатать:
net start w32time
то вылезет:
The Windows Time service is starting.........
The Windows Time service could not be started.

More help is available by typing NET HELPMSG 3523.

Повторяем первую команду
net time /setsntp:"ntp.psn.ru pool.ntp.org time.windows.com"
Теперь должно быть:
The command completed successfully.
А за ней:
net stop w32time && net start w32time

И финальный аккорд:
w32tm /resync

После этого может начать лагать OWSTIMER.EXE — служба времени Microsoft Sharepoint (если такой установлен). Я его просто перезапустил :)


Куча терминалов

Сегодня молча ребутнулся терминальный сервер. Зашёл, когда он уже ожил. Полез смотреть логи и дампы памяти; винда традиционно промолчала, зато нашёл куда более интересную ошибку:
Куча рабочих столов!
Побоялся уточнять у Гугла, из кучи чего выделяются рабочие столы в win2003…