Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


вторник, 6 декабря 2016 г.

rsync: копирование с Windows на Linux

Решил я всё же добить возможность копирования rsync-ом из-под винды на линукс. Не, ну в самом деле, что за издевательство - такой удобный способ и недоступен!

За основу взял DeltaCopy - cygwin-порт самого rsync и нескольких дополнительных утилит плюс графическая обвязка как для клиента, так и для сервера. GUI-вая часть меня пока не интересует, а вот rsync/win решил испытать. Сразу уточню: есть и другие порты, но их я не проверял и не пробовал.

Особенности


Задавать имя входного каталога на системе с windows лучше в формате /cygdrive/БУКВА/путь, где "буква" - буква диска без двоеточия, например: /cygrive/c/windows.

Windows имеет дурную привычку хранить имена файлов в разных кодировках - и юникод и 1251 и 866, в общем, полный бардак. Юниксы давно перебрались на utf-8 и не заставляют своих пользователей париться по этому поводу.

Rsync из DeltaCopy не поддерживает копирование виндовых ACL и есть какие-то странности с копированием других расширенных атрибутов. Но в моем конкретном случае это не критично, потому не заморачивался уточнениями.

Грабли

Первые грабли, на которые я наступил, это трансляция имён файлов, написанных не латиницей. Порылся в интернетах, где мне напомнили, что есть параметр --iconv=код_из,код_в, позволяющий указать характеристики трансляции
"код_из" - из какой кодировки преобразуем, "код_в" - в какую. Для копирования с windows на linux получаем --iconv=cp866,utf-8.

Вторая грабля - неожиданное прекращение копирования при указании параметра iconv. Сообщение на отправляющей стороне было совсем невразумительным. А вот в протоколе на самом сервере ситуация немного прояснилась: "rsync: The server is configured to refuse --iconv". Вот те на! Что за нафиг такой?
Вылечилось, опять же, по советам из этих ваших интернетов, добавлением строки charset=utf-8 в /etc/rsyncd.conf.

Всякое разное

Для большей безопасности, я создал в конфиге rsync-а несколько "модулей" - секций, описывающих разные места для копирования и доступы к ним. Пример такого модуля:

[media]
    path = /media
    use chroot = yes
    lock file = /var/lock/media-restore.lock
    read only = no
    timeout = 600
    auth users = восстановитель
    uid=root


[media] - это имя модуля. Оно указывается в команде отправки:
... пользователь@сервер_rsync::media/путь
Пользователи вместе с их паролями задаются в файле, описанном в конфиге параметром
secrets file = /etc/rsyncd.secrets
Формат файла: каждый пользователь на отдельной строке в виде логин:пароль, например "восстановитель:пароль_восстановления". В конце файла желательна пустая строка.

path - путь в файловой системе сервера
use chroot - крайне желательно во избежание злоупотреблений с путями типа модуль/путь/../../запретная_зона
lock file - служебный файл, создаваемый при обработке операций в этом модуле.
auth users - можно задать не только глобальный список разрешенных пользователей, но и для каждого модуля указывать отдельные разрешения. В примере я не хочу, чтобы к модулю [media] получил доступ какой-нибудь другой пользователь
uid - идентификатор пользователя, от имени которого выполняются операции. Сам демон rsync обычно запускается от рута, поэтому проблем с мимикрированием быть не должно. Дополнительно см. описание параметра --super.

четверг, 10 ноября 2016 г.

bash: Рекурсивно разворачиваем доменную группу в список пользователей

Есть у меня в домене супер-группа "разрешен доступ в интернет". Почему супер? Потому что в неё включаются преимущественно другие группы, по одной на каждое подразделение, в которые могут быть включены другие группы и т.д. Возникла задача: узнать, сколько всего пользователей прямо или косвенно входят в эту группу.

Синтаксис виндовой dsget и её родственных утилит вызывает у меня стойкое отвращение обилием лишних параметров и общей запутанностью. Но раз уж прокси-сервер у меня работает под убунтой, то почему бы не задействовать мощный язык bash-a и возможности Samba?

Что у нас есть из инструментов? В первую и главную очередь - сильномогучая команда net. Во вторую - очень полезная команда wbinfo. Надо скомпоновать результаты их работы, чтобы на выходе получить список пользователей группы и всех входящих в неё подгрупп.

Далее по тексту подразумевается, что всё выполняется на компьютере с установленной Samba, введённом в домен. Разделитель домена и имени объекта - обратный слэш "\".
Все команды выполняются от имени супер-пользователя.

понедельник, 24 октября 2016 г.

ClamAV в старой Zimbra сошёл с ума

Прихожу сегодня на работу и вижу во входящей админской почте кучу сообщений о том, что почтовое сообщение такое-то доставлено без проверки - Unchecked.

В огромного размера логе clamd обнаруживаю огромное количество записей типа:

WARNING: [LibClamAV] mpool_malloc(): Attempt to allocate 8388608 bytes. Please report to http://bugs.clamav.net

В некотором недоумении пытаюсь перезапустить зимбру, но обнаруживаю, что процесс clamd не реагирует на штатный kill -15 (sigterm), и снимается только по kill -9 (sigkill). Похожие записи вижу и в логе freshclam, из чего делаю вывод, что что-то не так с антивирусными базами.
Прибиваю все зимбровские процессы, переименовываю существующие базы (например mv daily.cvd -daily.cvd), вручную запускаю зимбровский freshclam. Он отрабатывает нормально, md5 свежескачанных баз совпадает с md5 старых баз. Значит базы не повреждены.
На всякий случай - всё-таки ошибка выделения памяти - проверяю логи гипервизора, на котором крутится зимбра. Там всё в порядке.
As a very last resort вбиваю текст сообщения об ошибке в гугл, и одной из первых ссылок вижу такую страницу: ClamAV DB Update leads to **UNCHECKED** in all messages (оно же в Zimbra KB) с датой изменения 24 октября 2016, то есть сегодня. Выяснилось, что проблема глобальная и Clam-ы версий 097 более не поддерживаются (причем давно) и не умеют работать с новыми базами.

Решение - в следующей по порядку статье ZimbraKB "ClamAV - Updating clamd for releases earlier than ZCS 8.0.6":

1. остановить всё зимбровское
2. скачать (по ссылкам в KB) новый ClamAV подходящей версии
3. распаковать его (под root-ом) в каталог зимбры
4. удалить старую ссылку clamav и создать ее заново, чтобы она указывала на новый каталог
5. убедиться, что ссылка указывает на каталог с новым ClamAV
6. запустить зимбру и порадоваться за нормальную работу антивируса

пятница, 21 октября 2016 г.

Перевод секунд в дни, часы, минуты

Convert seconds to days, hours, minutes

Скучная задача: есть аптайм в секундах, надо - в человеческих единицах.

 seconds=675372
 printf '%dd:%dh:%dm:%ds\n' $(($secs/86400)) $(($secs/3600%24)) $(($secs%3600/60)) $(($secs%60))


7d:19h:36m:12s


Решение навеяно отсюда: http://stackoverflow.com/questions/12199631/convert-seconds-to-hours-minutes-seconds

Ответ пользователя qubodup я подправил: в его команде неправильно считались часы, я добавил остаток от деления количества часов на 24. Без этого те же секунды показывались как 7d:187h:36m:12s, что несколько неразумно.

понедельник, 17 октября 2016 г.

passwd и неожиданный Kerberos

Рутинная задача: сменить пароль локального пользователя на линуксовом сервере.

passwd траблмейкер
введи старый пароль:
введи новый пароль:
повтори новый пароль:

А вот хрен там!

passwd траблмейкер
Пароль от Кербероса давай, да? (Current Kerberos password:)

Опаньки! А откуда я знаю этот пароль, если для этого пользователя он никогда не задавался? И почему для рута, чей пароль я менял несколько минут назад, этого не спрашивали?
Прямо сейчас лень долго разбираться, в чем дело, поэтому пошел по пути наименьшего сопротивления (http://unix.stackexchange.com/questions/116028/how-could-i-eliminate-kerberos-for-passwd)

Запускаем от рута pam-auth-update, снимаем чекбокс с кербероса, после чего дурацкий вопрос не задаётся. Желательно после смены пароля вернуть чекбокс на место - х.з., на что это может повлиять на самбовском сервере.

понедельник, 5 сентября 2016 г.

Ростелеком, замена номера и самоуверенные специалисты. Часть 2.

Итак, первую часть рассказа я закончил на прощании с Алексеем из техподдержки РТ.

Возможно, вторая часть не потребовалась бы, если бы кто-то из нас подумал об одной простой и самой очевидной вещи сразу после его слов о том, что он тоже не может подключиться. Но что сделано, то сделано - у меня был первый час ночи и мысли бегали уже довольно лениво.

Утром субботы меня разбудил звонок от "монтёра" - Алексей сдержал обещание и мне не понадобилось самому кого-то вызывать. Договорились, что до 14 часов я побуду дома, дождусь прихода специалиста.

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

Ростелеком, замена номера и самоуверенные специалисты. Часть 1.

В предыдущем посте я писал о проблемах взаимодействия своих планшета и модема. А теперь немного предыстории.

Где-то в середине августа мне позвонили с РТ и сообщили, что в связи с заменой АТС, номер моего домашнего телефона будет изменён. Последний раз такое происходило в 1970-ых годах, с тех пор номер в предпоследней сотне номерной ёмкости (x98yz) не менялся.
Довольно мило сотрудницы РТ позволили мне выбрать желаемый мной номер, а не тот, который они для меня заготовили: ёмкость моей АТС будет уменьшена до x1599, и мне предложили, если не путаю, номер x1301. Тоже предпоследняя сотня, но заметно ближе к началу нумерации. Неожиданно я понял, что не хочу запоминать эту комбинацию, привык к старой за почти 40 лет её существования. Поинтересовался, а нет ли свободных номеров вида x**yz? Мне назвали несколько вариантов - как совершенно новых, так и снятых откуда-то. Из них мне приглянулся красивый номер x0xyz. Еще ближе к началу нумерации, но как-то поприятнее.

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

Дальше будет многабукаф

Lenovo S6000 не видит Wi-Fi сеть от D-Link DSL-2640U. Раньше видел, а потом перестал.

Случилась у меня беда-беда. Ни с того ни с сего, после очередного перезапуска модема DSL-2640U планшет перестал видеть домашнюю сеть. Ноутбук, телефон, другой планшет - все видят. А S6000 - не видит.
Видит кучу других сетей, видит созданные на ноуте и телефоне ad-hoc точки доступа, родную сеть не видит. Я с подобным сталкивался, но обычно как-то всё решалось само собой, а тут - хрен на рыло.
Ладно, не страшно - запас трафика на симке более чем приличный, но я же при этом не могу достучаться до остальных своих устройств, а это печально.

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

Возможно, эти советы бы и помогли, если бы меня просто "не пускало". Но я-то вообще не вижу именно этой сети.

понедельник, 6 июня 2016 г.

[no][dir]atime в Windows

Файловые системы хранят массу информации про файлы. В том числе и как минимум три временных отметки: дата-время создания файла (когда была создана запись файловой системы), дата-время последнего изменения (когда последний раз менялось содержимое файла) и дата-время последнего обращения к файлу.

пятница, 3 июня 2016 г.

среда, 18 мая 2016 г.

bash: цикл по именам файлов с пробелами

Цикл FOR по списку в bash работает хорошо. До тех пор, пока внутри элементов списка не появляются пробелы - вместе с пробелами появляются и проблемы: каждое слово в составе элемента списка рассматривается отдельно, и если попадается файл вроде "цикл не работает", то for будет выполнен для него три раза - для "цикл", для "не" и для "работает", что не есть хорошо.

Понадобилось мне сконвертировать несколько файлов из png в jpg. И как раз наступил на упомянутые грабли (имена файлов настоящие и опечатки в слове "внутренний" нет):

$ for a in `ls -Q litb\ внтуренний\ счет*.png`; do echo "$a"; done
"litb
внтуренний
счет2.png"
"litb
внтуренний
счет.png"

среда, 4 мая 2016 г.

Пауза в bash-скриптах

К моему удивлению, штатной "паузы", подобной команде pause в языке пакетных файлов DOS в bash не обнаружилось. Но это было бы не труЪ, если бы ее нельзя было придумать.

http://www.cyberciti.biz/tips/linux-unix-pause-command.html

Два  основных решения:

1. Не совсем пауза: будет ждать именно нажатия ENTER

read -p "Нажмите ВВОД для продолжения"

2. Ближе к древнему оригиналу:

read -n 1 -p "Нажмите любую клавишу для продолжения..."

3. Комбинированное решение:

read -n 1 -t 5 -p "Нажмите любую клавишу или подождите 5 секунд для продолжения..."

4. труЪ

#!/bin/bash
# init
function pause(){
   read -p "$*"
}
 
# ...
# call it
pause 'Press [Enter] key to continue...'

четверг, 28 апреля 2016 г.

Массовое переименование файлов в bash с заменой символов в середине имени

Притомили коллеги, лепящие в именах файлов все символы, предусмотренные юникодом. Кое-кто даже умудрился (честно, я не знаю, как) сохранить файл, в имени которого несколько штук \127!

Но это уже клинический случай, а есть более мягкие, когда по неизвестной мне причине в именах появляются точки с запятой. Для устранения этого безобразия заменим ";" на ",":

find -iname *\;*|while IFS='' read line; \
  do NEWNAME=`echo "$line"|sed 's/\;/\,/g'`; \
  mv "$line" "$NEWNAME"; done

Пришлось использовать переменную, потому что мне не удалось заставить задействованную в ней конструкцию правильно отдаться sed-у из-за возможных пробелов в именах файлов.

понедельник, 25 апреля 2016 г.

Netsarang XShell: No matching outgoing encryption algorithm found

Пользуюсь этой штукой, частью пакета Netsarang XManager в качестве универсального терминального клиента - ssh, telnet, *modem и т.д.

Создал сегодня подключение для нового сервера, скопировав файл настроек существующего, и поправив название и имя хоста. Однако, при подключении получаю некрасивую табличку:



среда, 20 апреля 2016 г.

Сетевое сканирование на Windows Server 2003

Понадобилось перекинуть каталог для результатов с самбы на 2003 сервер. Ну вот понадобилось, и всё.
И по ряду причин сервер назначения, прописанный в 50+ МФУ менять проблематично. Но это фигня - МФУ и до этого работали с псевдонимом:

1. был сервер srv012
2. он умер и его обязанности легли на srv042, который в DNS получил псевдоним srv012
3. все МФУ радостно сканировали на 042, уверенные, что сканируют на 012
4. после переназначения псевдонима 012 на сервер srv047 почти все МФУ сканировать отказались, причем сканирование на "настоящий" 047 идет "на ура".

Выяснилось, что до 2008, винда не очень любит, когда к ней обращаются не по имени-отчеству, а по прозвищу (не путать с украинским прiзвищем-фамилией). Лекарство описано здесь.
(pluto в примере - сервер 2003 или ему подобный)

===
  • connected to server Pluto with the credentials of a user with administrative rights on the server;
  • start Registry Editor (Regedt32.exe);
  • locate and click the following key in the registry: HKEY_LOCAL_MACHINE\System
    \CurrentControlSet\Services\LanmanServer\Parameters
  • on the Edit menu, click Add Value, and then add the following registry value:
    Value name: DisableStrictNameChecking
    Data type: REG_DWORD
    Radix: Decimal
    Value: 1
  • quit Registry Editor;
  • restart the server Pluto.

===

понедельник, 18 апреля 2016 г.

Zimbra, Outlook и ошибка 0x800ccc0f

Ситуация:Outlook 2010 в качестве POP3-клиента
Zimbra Release 8.0.6.GA.5922.UBUNTU12.64 UBUNTU12_64 FOSS edition

Учетная запись настроена так, чтобы удалять с сервера сообщения старше 2 недель. В основном всё проходит нормально, если проверять почту хотя бы раз в неделю. Но вылезла достаточно давно странная штука: если старых писем больше какого-то предела (не всего писем в инбоксе, а именно старых, подлежащих удалению), то аутлук затыкается на этапе получения новой почты с ошибкой 0x800ccc0f "Почтовый сервер разорвал соединение".

Лечилось это ручным удалением старых писем через веб-интерфейс, но ситуация всё равно не нормальная.

Внимательное изучение mailbox.log показало такую вот картинку:

---
2016-04-18 08:40:58,029 INFO  [Pop3Server-696] [name=user@domain;ip=***;] pop - DELE elapsed=0
2016-04-18 08:40:58,030 WARN  [Pop3Server-696] [name=user@domain;ip=***;] pop - throttling POP3 connection for account оченьдли-нная-стро-кавс-стилеUUID*** due to too many requests
2016-04-18 08:40:58,030 INFO  [Pop3Server-696] [name=user@domain;ip=***;] pop - DELE elapsed=0
2016-04-18 08:40:58,081 INFO  [Pop3Server-696] [ip=***;] pop - connected
2016-04-18 08:40:58,082 WARN  [Pop3Server-696] [ip=***;] pop - throttling POP3 connection for remote IP ***
2016-04-18 08:40:58,082 INFO  [Pop3Server-696] [ip=***;] pop - CAPA elapsed=0
2016-04-18 08:40:58,085 INFO  [Pop3Server-696] [ip=***;] pop - connected
2016-04-18 08:40:58,086 WARN  [Pop3Server-696] [ip=***;] pop - throttling POP3 connection for remote IP ***
2016-04-18 08:40:58,086 INFO  [Pop3Server-696] [ip=***;] pop - CAPA elapsed=0
2016-04-18 08:40:58,089 INFO  [Pop3Server-696] [ip=***;] pop - connected
2016-04-18 08:40:58,089 WARN  [Pop3Server-696] [ip=***;] pop - throttling POP3 connection for remote IP ***
2016-04-18 08:40:58,089 INFO  [Pop3Server-696] [ip=***;] pop - CAPA elapsed=0

---
Причем, судя по логам аутлука и дампу трафика, снятого Wireshark, на разных клиентах это происходило после удаления 195 сообщения, то есть примерно на 200-ой команде после логина.

Судя по этому http://community.zimbra.com/collaboration/f/1886/t/1084347 некий троттлинг (а это чего?) беспокоит не меня одного. Похоже, что это количество запросов в единицу времени либо количество однотипных команд.

---
$ zmlocalconfig|grep throttle
imap_throttle_acct_limit = 250
imap_throttle_command_limit = 25
imap_throttle_fetch = true
imap_throttle_ip_limit = 250
lmtp_throttle_ip_limit = 0
pop3_throttle_acct_limit = 200
pop3_throttle_ip_limit = 200

---

То есть, количество POP3-команд с одного адреса или с одного аккаунта в секунду (?) не может превышать 200 штук. После увеличения лимитов

---
$ zmlocalconfig -e pop3_throttle_acct_limit=2000
$ zmlocalconfig -e pop3_throttle_ip_limit=2000

$ zmcontrol restart
---

 Стало полегче... Но почему же раньше не было таких затыков?

пятница, 8 апреля 2016 г.

OpenOffice и курсоры MySQL

Не очень разработчики ООО (да и LO) любят MySQL. Самое наглядное проявление этого - полное отсутствие поиска, не говоря уже о замене, в редакторе скриптов. Да-да, в редакторе запросов в принципе нет такой возможности. Уже смешно.
Про неумение LO работать с теми скриптами, с которыми OOO справляется влёт, я уже молчу.

Но выяснилась, причем совершенно в неподходящий момент, неожиданная бяка. Понадобилось использовать курсоры в хранимой процедуре, чтобы не плодить множество вложенных select-ов. Но, как это иногда бывает, MySQL server gone away из-за таймаута. (это в ООО, а LO модча показывал пустое окно вместо результатов запроса). Методом тыка было выяснено, что сервер "уходит" на команде open cursor.

Почему я решил, что виноват офис? Да потому что из-за неудобства IDE в этом офисе, для написания и отладки запросов я использую MySQL Workbench, и в ней всё работало отлично, сервер никуда не пропадал и результаты возвращались как положено.

Печально, но выяснилось, что использовать курсоры нельзя. Пришлось, благо, что хранимые процедуры/функции пишутся на более "стандартном" диалекте, близком к обычным ЯВУ, лепить циклы опроса и совершать прочие некрасивые действия, чтобы имитировать функциональность курсоров.

Суть задачи:

Есть система инвентаризации ИТ OCS-NG Inventory. Ее БД хранится в виде множества связанных таблиц, где основная таблица ocsweb.hardware, а большинство остальных таблиц связано с ней соотношением одно-ко-многим, то есть, для каждой записи в hardware может быть несколько записей в других таблицах.

В частности, конкретно в моем случае, для каждого компьютера может быть несколько записей в таблице "Мониторы". Действительно, ведь можно подключить несколько мониторов к одной системе. Но в ежеквартальном отчете все мониторы одного компа должны попасть в одну ячейку электронной таблицы.

group_concat, конечно, справляется, но... Но надо сначала обработать отдельные поля этих записей. Например, без "драйверов" старые мониторы LG не сообщают о себе некоторую информацию. А другие наоборот, сообщают всё подряд, включая серийный номер и дату производства. Если тупо слепить вместе все поля, то может получиться некрасиво.

Допустим, один монитор сообщил о себе всё, и group_concat может сделать примерно такое: "модель (производитель), sn: номер". Но в случае старого монитора такая красота превратится в уродливое "  (проихводитель), sn:  " или вообще в "  (  ), sn:  ", за что я уже получал (и справедливо) от начальства.

Стало быть, надо обработать возможные ситуации разной заполненности полей и в зависимости от этого сформировать итоговую строку так, чтобы она оставалась аккуратной. Учитывая слабую гибкость того, что можно вписать внутрь select-a. сей процесс превращается в тяжеловесную конструкцию со множеством скобок и вложенных операторов. Потому мне и понадобилась хранимая функция, в которой всё то же самое можно проделать намного элегантнее.

Так как записей в связанной таблице может быть несколько, то надо обрабатывать их одну за другой, объединяя результаты в итоговую строчку. Как это выглядит с курсором?

declare (переменные для курсора)
declare (переменная-счетчик)(количество_записей)
declare (курсор)
declare (переменная результат)

open курсор

счетчик=1
результат=''
количество записей=select count(*) from таблица where такая-то-связь

label: loop
    fetch курсор into переменные курсора
    обработать_переменные_курсора
# счетчик дописывается в итоговую строку, если мониторов больше одного
    результат=concat(результат, обработанные_переменные_курсора)
    счетчик++
end loop

return результат

fetch возвращает по одной записи за раз и можно спокойно двигаться по связанной таблице. Ну да, у этих курсоров есть свои ограничения, но в своей задаче я в эти ограничения не упираюсь. А вот select возвращает набор записей, который штатно нельзя сохранить в переменной. И для "последовательного" доступа к записям в этом наборе надо извращаться примерно так:

    select MANUFACTURER,CAPTION,DESCRIPTION,SERIAL
        from (select (@mwr:=@mwr+1) kak,MANUFACTURER,CAPTION,DESCRIPTION,SERIAL
            from (select @mwr:=0) rt, monitors where hardware_id=gmhwid) pp
        where kak=RowNum into gmM, gmC, gmD, gmS;


То есть, использовать три select-a вместо одного простого fetch.
Внутренний select - старый трюк для добавления порядковых номеров к возвращаемым записям - из псевдо-таблицы выбирается поле, увеличивающееся при каждой выборке.
Средний select выполняет собственно выборку из таблицы мониторов. Возвращается набор пронумерованных записей
Внешний select собственно и имитирует работу fetch-a, выбирая из среднего запись, соответствующую номеру итерации.

Наверное, можно поиграться с limit, например, выбрать в поиске только одну строку, запомнить ее ключевое поле, выбрать еще строку, в которой ключевое поле отличается.

среда, 30 марта 2016 г.

VMWare и NFS

Как известно, гипервизоры VMWare умеют использовать как локальные диски - на сервере, где установлен сам гипервизор, так и сетевые хранилища по протоколу NFS.
Но есть одна неприятность: если сервер NFS какое-то время недоступен, например, перегружается, то прописанное хранилище может отвалиться: оно становится unmounted и реактивировать его не удается.

Нашелся только один способ исправления ситуации. Не самый лучший, но другого в VMWKB не предлагают...

1. разрешаем на гипервизоре SSH и логинимся туда

2. список имеющихся подключенных NFS-ресурсов

[root@rsk30hyp101:~] esxcfg-nas -l
NFS-srv102-ip130 is /media/4t2/nfs from rsk30srv102 unmounted unavailable


Видно, что ресурс NFS-srv102-ip130 недоступен, потому что сервер rsk30srv102 когда-то был перезагружен. Будем лечить


3. удаляем существующее соединение

[root@rsk30hyp101:~] esxcfg-nas -d NFS-srv102-ip130
NAS volume NFS-srv102-ip130 deleted.



4. пересоздаём подключение

[root@rsk30hyp101:~] esxcfg-nas -a -o 172.21.122.130 -s /media/4t2/nfs NFS-srv102-ip130
Connecting to NAS volume: NFS-srv102-ip130
NFS-srv102-ip130 created and connected.


Все ключи/параметры esxcfg-nas выдаются при запуске ее без параметров, конкретно для добавления подключения порядок такой:

-a - добавляем подключение
-o IP - адрес сервера NFS. Можно и FQDN, и даже, начиная с ESXi 4.1, список адресов/имен узлов
-s путь_на_сервере - точный путь к каталогу, прописанному в файле exports на NFS-сервере

Последним по порядку идет название ресурса, под которым он будет использоваться гипервизором. Никаких ключей для указания этого имени не требуется.

Не красиво, но на безбабье и рыбу раком... Как бы еще научить все гипервизоры анализировать эту ситуацию и автоматически подключать отвалившиеся ресурсы?

воскресенье, 27 марта 2016 г.

ZIMBRA: фильтры сообщений, уточнение

В сентябре 2015 я писал про работу с фильтрами сообщений в web-клиенте Zimbra через инструменты zmprov и zmmailbox.
В комментариях к тому посту меня спросили, не пробовал ли я переносить правила фильтров из Thunderbird в Zimbra. Нет, не пробовал - не было необходимости. Но сам вопрос заставил немного порыться в интернетах и нашел я вот такую статью с описаниями относящихся к делу команд zmmailbox, а также условий и действий для фильтров. Возможно, она облегчит подобные преобразования. Поскольку статья помечена как устаревшая, то она может быть удалена и я скопировал ее содержимое сюда

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

RoboCopy: коды завершения

Есть у микрософта бледное подобие rsync-a, называется robocopy - robust file copy.
Ну, особо придраться не к чему - бледное подобие оно и есть бледное подобие. Но поскольку микрософт уверен, что все серверы в мире подключены к интернету и не поставляет оффлайновую справку, то лучше подстраховаться и кое-что из документации вынести в блог.

Коды завершения работы:
(кто-то вроде меня так же ведет блог, записывая туда свои "открытия", чтобы не искать их повторно)
Использована информация из базы знаний микрософта. У микрософта информация по комбинациям кодов немного полнее.
===

ROBOCOPY Exit Codes

The return code from Robocopy is a bitmap, defined as follows:
    Hex   Decimal  Meaning if set

    0×00   0       No errors occurred, and no copying was done.
                   The source and destination directory trees are completely synchronized. 

    0×01   1       One or more files were copied successfully (that is, new files have arrived).

    0×02   2       Some Extra files or directories were detected. No files were copied
                   Examine the output log for details. 

    0×04   4       Some Mismatched files or directories were detected.
                   Examine the output log. Housekeeping might be required.

    0×08   8       Some files or directories could not be copied
                   (copy errors occurred and the retry limit was exceeded).
                   Check these errors further.

    0×10  16       Serious error. Robocopy did not copy any files.
                   Either a usage error or an error due to insufficient access privileges
                   on the source or destination directories.

These can be combined, giving a few extra exit codes:
    0×03   3       (2+1) Some files were copied. Additional files were present. No failure was encountered.

    0×05   5       (4+1) Some files were copied. Some files were mismatched. No failure was encountered.

    0×06   6       (4+2) Additional files and mismatched files exist. No files were copied and no failures were encountered.
                   This means that the files already exist in the destination directory

    0×07   7       (4+1+2) Files were copied, a file mismatch was present, and additional files were present.

Any value greater than 7 indicates that there was at least one failure during the copy operation.

You can use this in a batch file to report anomalies, as follows:
    if %ERRORLEVEL% EQU 16 echo ***FATAL ERROR*** & goto end
    if %ERRORLEVEL% EQU 15 echo OKCOPY + FAIL + MISMATCHES + XTRA & goto end
    if %ERRORLEVEL% EQU 14 echo FAIL + MISMATCHES + XTRA & goto end
    if %ERRORLEVEL% EQU 13 echo OKCOPY + FAIL + MISMATCHES & goto end
    if %ERRORLEVEL% EQU 12 echo FAIL + MISMATCHES& goto end
    if %ERRORLEVEL% EQU 11 echo OKCOPY + FAIL + XTRA & goto end
    if %ERRORLEVEL% EQU 10 echo FAIL + XTRA & goto end
    if %ERRORLEVEL% EQU 9 echo OKCOPY + FAIL & goto end
    if %ERRORLEVEL% EQU 8 echo FAIL & goto end
    if %ERRORLEVEL% EQU 7 echo OKCOPY + MISMATCHES + XTRA & goto end
    if %ERRORLEVEL% EQU 6 echo MISMATCHES + XTRA & goto end
    if %ERRORLEVEL% EQU 5 echo OKCOPY + MISMATCHES & goto end
    if %ERRORLEVEL% EQU 4 echo MISMATCHES & goto end
    if %ERRORLEVEL% EQU 3 echo OKCOPY + XTRA & goto end
    if %ERRORLEVEL% EQU 2 echo XTRA & goto end
    if %ERRORLEVEL% EQU 1 echo OKCOPY & goto end
    if %ERRORLEVEL% EQU 0 echo No Change & goto end
    :end  
Example:
Copy files from one server to another
ROBOCOPY \\Server1\reports \\Server2\backup *.*
IF %ERRORLEVEL% LSS 8 goto finish

Echo Something failed & goto :eof

:finish
Echo All done, no fatal errors.
Bugs
Version XP026 returns a success errorlevel even when it fails.
“Few men of action have been able to make a graceful exit at the appropriate time” ~ Malcolm Muggeridge
===

вторник, 12 января 2016 г.

D-Link DSL-2640U и VPN

Приобрел такой модем на замену старичку 2600U. Обновил штатно "по воздуху" прошивку до 2.5.3 от D-Link Russia и наступил на грабли: подключенные устройства перестали поднимать VPN.

Проблема решилась просто: поставил в нужном месте галочку. Однако, в 2600 такой галочки нет и всё работало. Странно...


Галочка возле "Проброс PPTP" по умолчанию не стоит. 

суббота, 2 января 2016 г.

FLICKR Uploader postr и ошибка 403

Есть довольно старый и уже заброшенный автором проект postr - загрузчик фотографий на сервис Flickr для Linux. Он представляет собой набор скриптов на питоне: основной  /usr/bin/postr, но основная работа выполняется дополнительными, живущими в /usr/share/pyshared/postr.

Однако, судя по многочисленным жалобам, программа хотя и присутствует в репозиториях, но не работает: при запуске выдается простое сообщение об ошибке 403 Forbidden. Кому и что запрещено - непонятно.

Обращения к автору результата не дали, он честно ответил в твиттере, что больше не занимается проектом.

В одной из многочисленных жалоб мелькнуло упоминание о том, что Flickr перешел на https, и я подумал: а пуркуа бы не па? В основном скрипте не было заслуживающих внимания упоминаний http, а вот во вспомогательных кое-что нашлось.

В файлах flickrest.py, postr.py и util.py я заменил все обращения http на https, то есть, поправил все URL, где шло обращение к различным адресам в домене flickr.com. Строки, где упоминался прокси-сервер, я не трогал. Сработало. Вот и всё, собственно.

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