Система Orphus
Показаны сообщения с ярлыком tips'n'tricks. Показать все сообщения
Показаны сообщения с ярлыком tips'n'tricks. Показать все сообщения

четверг, 28 февраля 2013 г.

Сброс пароля на дисковом массиве IBM DS3512

Забылся пароль от дискового массива IBM DS3512 и не было возможности управлять им через DS Storage Manager Client. Найти решение было не очень легко. В документации написано только, что надо связаться с ТП IBM, а на одном форуме говорили, что IBM за такое дело просит аж $4000 о_О, хотя не знаю, на сколько это правда.

В общем, ниже инструкция...

[]

вторник, 3 апреля 2012 г.

Разные трюки с ssh

1. Узнать скорость соединения между хостами:
yes | рv | ssh host.com "cat > /dev/null"
Нужно установить пакет pv (в deb и rpm одинаково называется).

четверг, 2 декабря 2010 г.

Windows: Отображение компьютеров в сетевом окружении только из рабочей группы/домена

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

Вступление

Начиная с Windows Vista принцип отображения компов в сетевом окружении немного изменился. Теперь форточки сканируют локалку и выводят в одном окне все компы из всех доменов/групп. Что не всегда удобно. Конечно можно применить группировку по доменам/группам, но обычным юзерам это, опять же, не всегда удобно, а иногда им и вовсе не надо видеть "левые" компы.

среда, 4 августа 2010 г.

10 Minute Mail

Наткнулся на очень интересный сервис... 10 Minute Mail. Фишка в том, что заходишь на сайт, тут же создается мыло (регаться не надо) доступное только тебе, вида a4630777@bofthew.com, на 10 минут (если будет мало, можно продлить), т.ж. там показывается таймер, сколько еще осталось времени до удаления мыла и сами сообщения пришедшие на этот адрес.

На мой взгляд это очень удобно, когда, например, надо зайти на какой-то форум, где требуется обязательная регистрация, чтобы что-то посмотреть. Или когда хочешь глянуть какой-нибудь сервис в сети, а там регаться надо. Не везде же хочется свое мыло светить.
[]

четверг, 10 сентября 2009 г.

Настройка Fn-клавиш в ubuntu на ASUS M50Vc. Часть 2

В прошлом посте я рассказывал как настроить Fn-клавиши на ноуте, точнее дал вводную информацию, показал простейший пример и дал "пищу" для дальнейших размышлений. Сегодня я хочу показать пример настройки Fn-клавиш для обработки событий вкл/выкл touchpad, wifi и bluetooth, который значительно сложнее приведенного в предыдущем посте и требует значительно больше телодвижений (для ASUS M50Vc тебе не придется делать много телодвижений, я ведь заботливый ;) ).

И так, сегодня мы узнаем:
1. Как настроить вкл/выкл touchpad и его диодного индикатора;
2. Как настроить вкл/выкл wifi и bluetooth и его диодного индикатора (правда у меня, к сожалению, не работает, хотя должен :( );
3. Сохранять их статус, т.е. если при выключении/перезагрузке ноута у тебя, например, был выключен touchpad, то и после загрузки системы он будет выключен;
4. Включать/выключать/мигать диодным индикатором почты, когда есть новые сообщения (на примере claws-mail).
[]

среда, 9 сентября 2009 г.

Настройка Fn-клавиш в Ubuntu на примере ASUS M50Vc

Эх... Давненько я ничего не писал... Надо исправляться :)
В этом посте хочу рассказать о том как настроить хоткеи типа Fn+F1 и т.д. на ноуте в ubuntu, но это так же справедливо для любого другого дистрибутива linux/bsd (уверен, хотя не проверял).
[]

среда, 19 августа 2009 г.

Загрузка файлов в Dropbox (скрипт для Nautilus)

Увидел сегодня на хабре топик "Загрузка файлов в Dropbox в один клик", подумал... А чего это я молчу, если у меня давно уже это на баше реализовано? Пора поделиться.

Скрипт состоит из двух файлов, точнее это 2 немного разных скрипта, которые и юзаются по отдельности. Первый называется "Залить на DropBox (в корень)", который ничего не спрашивает, а тупо льет указанный файл в корень (относительно дропбокса) и в буфер обмена кладет сслыку на залитый файл. Второй называется "Залить на DropBox (выбрать каталог)" и отличается только тем, что он спрашивает в какой каталог залить (показывает диалог выбора каталога) и подставляет ~/Dropbox/Public/, а ты уже можешь уточнить.

Для работы скриптов их достаточно скопировать в каталог ~/.gnome2/nautilus-scripts/ и пользоваться контекстным меню наутилуса. Т.е. кликаем по файлу правой кнопкой мыши и выбираем пункт "Сценарии", а там уже нужный вариант скрипта.

Сам скрипт забираем тут.


ЗЫЖ Забыл упомянуть, что клиент DropBox'a нужен обязательно! Скрипт тупо копирует файло в папку, за которой следит клиент DropBox'a, а потом запрашивает у него ссылку на этот файл и копирует ее буфер обмена.





Информация с сайта http://angel2s2.blogspot.com/. Если Вы читаете информацию на другом сайте, пожалуйста свяжитесь с автором сайта http://angel2s2.blogspot.com/.

понедельник, 17 августа 2009 г.

GLPI: Переносим на винду (из Linux)

Вот стряслось... Пришлось свой хелпдеск перекинуть на виндовый 2003 сервак :(
Все оказалось не так гладко, как я думал...

А проблема была в том, что в никсах, как правило, используется кодировка utf-8 (у меня именно так), а в винде cp1251. Вроде бы, какое это имеет значение? Да вот дело в том, что база тоже в кодировке uft-8. Ну и что? А то, что файлы, которые прикрепляют к заявкам, хранятся не в базе на на диске, а "ссылки" на эти файлы в базе. А так как кодировки разные, то GLPI не может найти файлы на диске, если в имени файла содержатся символы с кодом больше 128 или, проще говоря, символы кириллицы.

Решений в голове назрело 2:
1. Перекодировать БД в cp1251
2. Подправить PHP-код, чтобы перед отдачей файла исправлялась кодировка, т.е. перекодировывать из утф в сипи

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

Для второго способа у меня вышло аж 2 решения, начну с более простого, которое мне подсказал Hubbitus.
1. Чтобы GLPI отдавал файлы с русскими именами нужно отредактировать файл %GLPI_DIR%\front\document.send.php. А именно, надо найти строки
if ($send&&file_exists(GLPI_DOC_DIR."/".$_GET["file"]))
sendFile(GLPI_DOC_DIR."/".$_GET["file"],$splitter[1]);
которые в самом низу файла и заменить их на
if ($send&&file_exists(GLPI_DOC_DIR."/".iconv('UTF-8', 'CP1251', $_GET["file"])))
sendFile(GLPI_DOC_DIR."/".iconv('UTF-8', 'CP1251', $_GET["file"]),$splitter[1]);
Тут функция iconv тупо перекодировывает все, что ей скармливают из utf-8 в cp1251.

2. Второй способ более универсален, т.к. сам определяет кодировку строки и перекодировывает ее в cp1251. И так, нам нужно отправиться в гости к Юрию Попову и забрать у него php-библиотечку a.charset.php (на этой же страничке вы и узнаете все про нее и скачаете) и положить ее в папку %GLPI_DIR%\inc\. Теперь в файле %GLPI_DIR%\front\document.send.php в самом начале, после первого инклюда (у меня это строка 40) нужно добавить:
include (GLPI_ROOT . "/inc/a.charset.php");
А в конце этого файла нужно сделать тоже самое, что в первом варианте, только те строки заменить на:
if ($send&&file_exists(GLPI_DOC_DIR."/".charset_x_win($_GET["file"])))
sendFile(GLPI_DOC_DIR."/".charset_x_win($_GET["file"]),$splitter[1]);
Все :) Теперь GLPI без проблем отдает файлы с русскими именами.



Осталось только одно НО... :(
К сожалению, я пока не нашел, как добиться, чтобы GLPI принимал файлы с русскими именами.
Как только найду, обязательно сразу напишу след. пост.




ЗЫЖ Сменил версию GLPI на 0.72.1, поэтому заново пришлось править скрипты, чтобы добавить свои статусы для заявок, о чем я писал в посте "GLPI: Добавляем свои статусы для заявок". Поэтому прикрепил к этому посту архив, в который положил исправленные скрипты, а так же файлы document.send.php и a.charset.php.





Информация с сайта http://angel2s2.blogspot.com/. Если Вы читаете информацию на другом сайте, пожалуйста свяжитесь с автором сайта http://angel2s2.blogspot.com/.

[]

понедельник, 8 июня 2009 г.

man: Читаем man'ы на русском

Не всегда хочется читать man на английском... Порой хочет почитать его на родном языке. Это возможно и тут я расскажу как.


В Ubuntu есть некоторые маны на других языках. Как в других дистрибутивах не знаю, но думаю, что там тоже есть. Все английские маны лежат в каталоге /usr/share/man/man{1..8}. А маны на других языках располагаются в /usr/share/man/ЯЗЫК/man{1..8}.
У утилиты man есть ключ -L, которому передается нужный язык.

Пример 1. Почитаем man mc на русском:
man -L ru mc
Пример 2. Почитаем man bash на русском?:
man -L ru bash
В результате получаем облом... Нету мана для баша на русском, поэтому man показал нам его на английском :)

Исходя из этого, можно в ~/.bashrc добавить вот такой простенький алиас:
alias man='man -L ru'
Теперь всегда вначале будет искаться ман на русском, а если его нет, то будет показываться на английском :)


ЗЫЖ Как заметил Olly Cat, правильнее будет не алиас делать, а добавить переменную в башэрси:
export MANOPT="-L ru"
За что ему огромное спасибо :)

понедельник, 1 июня 2009 г.

#932: Заправка в стиле «хаус» (IT Happens)

Сидели мы с дружбаном, печатали фотки на моём струйнике. Цветной картридж заканчивается. «Надо заправить!» — гордо изрекает мой друг.Заправили. Страница пробной печати огорчила нас — сопла картриджа забиты. Цикл очистки ситуацию не исправил. Пока я оплакивал картридж, друг внезапно поинтересовался: «А ты знаешь, как в металлургии делают порошковые пресс-формы?» Оказывается, для равномерного распределения порошка по форме детали используют вибростанок. Недолго думая, мы решили положить несчастный картридж на мой сабвуфер, включив погромче «умц-умц».Через полторы минуты под картриджем появилась небольшая лужица. С обиженным криком я пошёл чистить картридж, в то время как друг под то же «умц-умц» бодро оттирал краску с саба, хихикая в прокуренные усы.После музыкальной терапии картридж перестал «полосить» и отлично допечатал остаток фотографий.

Источник: http://ithappens.ru/story/932
[]

суббота, 30 мая 2009 г.

Google: Как сменить аккаунт.

Не так давно мне знахотелось поменять аккаунт на google'е. Причина тому была банальна: мне надоело старое имя, не красиво оно как-то было, да и не клеилось с моим текущим ником. Порыв справку гугла и погуглив поиском, я узнал, что гугл не позволяет поменять имя аккаунта, точнее говорит, что в настоящий момент это не возможно. У меня уже чуть было руки не опустились... Но не давала покоя одна мысль: "Че это же ты за админ такой? Не возможного не бывает."
Так вот, в этом посте пойдет речь о том, как я сменил аккаунт на гугле и при этом перенес все свои данные со старого аккаунта на новый.


1. Начнем с почты
1.1. В старом ящике...
1.1.1. Идем в "Настройки", а там в "Пересылка и POP/IMAP", включаем доступ по POP3, т.е. отмечаем пункт "Включить POP для всех писем".
1.1.2. Теперь заходим в "Экспериментальные функции". Тут находим "Импорт/экспорт фильтров" и ключаем эту функцию.
1.1.3. После чего идем в "Фильтры", опускаемся в самый низ, жмем линк "Все" и под ним кнопку "Экспорт" и сохраняем на компе список фильтров.
1.1.4. Теперь переходим к адресной книге. Тут есть один нюанс: у меня не все контакты загрузились, гугл ругался, что либо файл большой, либо он поврежден. Я не стал разбираться что да почему, а экспортировал только "Адресную книгу", а не "Все адресаты", т.к. последние мне не нужны. В общем делается это так: жмем в правой части адресной книги линк "Экспорт", на вопрос "Какой адрес вы хотите экспортировать?" отвечаем "Только Адресная книга", а "Формат экспорта" выбираем первый, т.е. "Формат CSV, используемый Google", жмем кнопку "Экспорт" и сохраняем файл на диск (у меня он почему-то был с японскими иероглифами в имени, поэтому при сохранении я указал др. имя, вместо предлагаемого по умолчанию).
1.1.4.1. Так же можно экспортировать контакты (все) в "Формат CSV программы Outlook", а потом импортировать их из этого файла. Это может пригодиться в том случае, если гугл будет ругаться (см. п.1.1.4). Т.е. в этом случаем, можно просто открыть этот файл в текстовом редакторе и разделить его на несколько файлов, а потом загрузить по частям (с "Формат CSV, используемый Google" это не прокатит, т.к. он зашифрован).
1.2. В новом ящике...
1.2.1. Идем в адресную книгу и импортируем контакты, т.е. слева в адресной книге жмем линк "Импорт", потом кнопку "Обзор", выбираем файл с контактами, который мы экспортировали ранее из старого ящика и жмем кнопку "Импорт". Немного ждем и... готово :)
1.2.2. Идем в "Настройки", а там в "Фильтры", опускаемся в самый низ и жмем линк "Импортировать фильтры". Ниже появляется соответствующее поле, в котором жмем кнопку "Обзор", выбираем сохраненный файл с фильтрами (см. п.1.3) и жмем кнопку "Открыть файл". Фильтры импортировались :)
1.2.3. Теперь идем в "Аккаунты" и в разделе "Получать почту из других аккаунтов" жмем линк "Добавить свой почтовый аккаунт". Откроется новое окно (вкладка), в которой вводим мыло старого ящика, жмем далее, выполняем нужные настройки (думаю, что ты и сам сможешь разобраться в них, там ничего сложного) и жмем кнопку "Добавить аккаунт".
Все письма начали потихоньку загружаться в новый ящик, а мы пока поедем дальше :)

2. Наш любимый блог :)
2.1. В старый блоге идем в "Настройки" в раздел "Разрешения", жмем кнопку "Добавить авторов", в появившемся поле вводи свое новое гугломыло и жмем кнопку "Пригласить".
2.2. Проверяем мыло, перходим по линку, который в соответствующем письме.
2.3. Вводим логин и пароль и жмем кнопку "Принять приглашение"
2.4. В старом блоге в разделе настроек "Разрешения" выставляем права "администратор" для нового аккаунта.
2.5. Все :)

3. Блокнот
3.1. В старом аккаунте выбираем первый блокнот из имеющихся и жмем линк "Параметры доступа".
3.2. В соответствующем поле вводим адрес нового мыла и жмем "Сохранить".
3.3. Повторяем п.п.3.1-3.2. для всех остальных блокнотов.
3.4. Проверяем новую почту и переходим по ссылкам, которые будут в письмах.
3.5. Заходим в новый аккаунт в блокноты и видем что там есть блокноты из старого аккаунта.

4. Календарь
4.1. В старом аккаунте идем в "Настройки" и переходим на закладку "Календари".
4.2. Если календарей несколько, то нижеперечисленные действия надо выполнить для каждого.
4.3. Жмем линк "Открыть доступ к календарю".
4.4. Вводим адрес нового мыла и в выпадающем списке справа выбираем "Вносить изменения + предоставлять доступ", а потом жмем кнопку "Добавить".
4.5. Проверяем новую почту и переходим по ссылке, которая в письме.
4.6. Теперь календарь(и) в новом аккаунте.

5. Документы
5.1. В документах страрого аккаунта влевой части выбираем "Все записи".
5.2. Жмем внизу линк "Все ХХХ" (ХХХ - кол-во документов), вправой части.
5.3. Теперь "Дополнительные действия" -> "Сменить владельца".
5.4.1. У две электронные таблицы не захотели переноситься, поэтому их просто скопипастил.
5.5. Вводи мыло нового аккаунта и жмем кнопку "Сменить владельца". У меня с первого раза не прокатило, т.е. не все документы переносились, нажимал эту кнопку несколько раз.
5.6. Если у вас документы не одним скопом, а разложены по папкам, как сейчас у меня, то лучше делать так:
5.6.1. В новых документах создать всю структуру папок как в старых документах (папки не переносятся).
5.6.2. В старом аккаунте войти в первую папку и выделить все докуметы, затем перенести в новый аккаунт, как это было описано выше.
5.6.3. В новом аккаунте переместить эти документы в нужную папку.
5.6.4. Повторить пп.5.6.1-5.6.3 для всех остальных папок.
5.7. Теперь доки в новом аккаунте.

6. Читалка новостей, т.е. Google Reader
6.1. В старом аккаунте идем в "Настройки" на закладку "Импорт и экспорт", жмем ссылку "Экспорт подписок в виде файла OPML"
6.2. В новом аккаунте повторяем тоже самое, только импортируем OPML файл.
6.3. Все. У меня даже папки перенеслись :)

7. Picasa Web
7.1. В старом аккаунте заходим в первый альбом, жмем кнопку справа "Совместный доступ".
7.2. Вводим новое мыло и жмем отправить.
7.3. Повторяем пункты 7.1.-7.2. для каждого альбома. Теперь они будут в новом аккаунте в избранном.
7.4. Одно НО(!) - Это не полноценный перенос :( Для полноценного переноса нужно скачать и установить программу Picasa, слить из старого аккаунта фотки и загрузить их в новый.

8. Google Analytics
8.1. В старом аккаунте заходим в "Настройки Google Analytics".
8.2. Жмем линк "Изменить" для первого профиля.
8.3. Опускаемся вниз и жмем линк "+ Добавить пользователя".
8.4. Вводим новое мыло и ниже в поле "Тип доступа" выбираем "Администратор аккаунтов" и жмем кнопку "Сохранить изменения".
8.5. Повторяем пункты 8.2.-8.4. для остальных профилей.
8.6. Проверяем мыло, переходим по линку, наслаждаемся :)


Всё! :) Другие сервисы я не переносил, т.к. не было нужды. Но делается все аналогичны образом. Удачи :)



ЗЫЖ: Все писал по памяти, поэтому возможно не везде надо будет подтверждать что-либо по мылу. Если мыло не пришло попробуй просто войти в блог/календарь/блокнот/т.д. и посмотреть, не поясилось ли чего нового. В противном случае запроси подтверждение повторно.

[]

пятница, 22 мая 2009 г.

SendXMPP: Мониторим сервер с помощью Jabber

Нам, админам, нужно постоянно следить за серверами. Создавать кучу подключений по SSH или ssh-туннели не очень удобная вещь. E-mail, как правило, отсталый по времени, т.к. не у всех постоянно запущен e-mail клиент. А вот jabber запущен постоянно и всегда и зачастую даже на мобильнике. Почему бы его не заюзать для слежки за серваком?

SendXMPP - это Perl-скрипт для отправки сообщений на XMPP (Jabber) сервер. Работает почти так же, как программа mail при отправке почты. SendXMPP можно использовать для отправки сообщения на xmpp сервер для предупреждения или уведомления пользователей.

Итак, для начала нам нужно поставить SendXMPP. Для Debian/Ubuntu это можно сделать так:
sudo aptitude install sendxmpp
Готово. Теперь надо настроить SendXMPP, чтобы он знал на какой сервер под каким логином и паролем ему коннектиться. Для этого нужно создать файл ~/.sendxmpprc и записать в него настройки:
vim ~/.sendxmpprc
servername@jabber.domain.ru:5222 PaSSwD
Тут servername@jabber.domain.ru:5222 - логин, сервер и порт, PaSSwD - пароль.
Теперь нужно выставить на него такие права, чтобы этот файл мог читать только тот юзер, от имени которого будет зпапускаться SendXMPP:
chmod 400 ~/.sendxmpprc
Все, готово. Установка и настройка закончены.

Теперь пара примеров по использованию SendXMPP.
Пример 1:
Задача: Узнать когда процессор сервера будет под большой нагрузкой.
Решение: Запихнуть в кронтаб вот этот однострочник, чтобы "каждые 5 сек." выполнялся:
if [[ $(ps aux | awk '{print $3}' | sort -nr | head -n 1 | sed 's/\..*//g' ) -ge 70 ]] ;\
then ps aux | awk '$3>70' | sendxmpp -s 'CPU Load > 70%' admin@jabber.domain.ru ; \
fi
НО(!) имей ввиду, что это просто пример, в реальной жизни такой однострочник не стоит использовать, т.к. если какой-либо процесс загрузит проц, то тебе будут постоянно идти сообщения, что не есть гуд. В реальной жизни надо сделать провеку, т.е. типа если уже отправлено сообщение, то "поднимаем флаг" и больше не отправляем, когда нагрузка спала, "опускаем флаг".

Пример 2:
Задача: Нужно отслеживать все подключения к SSH-серверу.
Решение: Создать файл /etc/ssh/sshrc с содержанием:
echo "Date:\t\t$(date +%d.%m.%Y\ %H:%M:%S)\nRemote Host:\t$SSH_CONNECTION\nUser:\t\t$USER\nShell:\t\t$SSH_TTY" |\
sendxmpp -s 'SSH Login on GLPI Server' -r 'GLPI Server' -u UserName -j jabber.domain.ru:5222 -p 'PaSSwD' admin@jabber.domain.ru
Теперь при любом подключении будет приходить сообщение в jabber с указанием даты, времени, ip подключившегося, имя этого юзера и на какой шелл он повесился.


Пояснения ключей:
-s - тема сообщения (у меня русские буквы не отображает, в теле все хорошо)
-r - ресурс
-u - имя юзера, для логина на jabber-сервер
-j - адрес jabber-сервера и его порт
-p - пароль





ЗЫЖ: Если у кого бедет проблема с русской кодировкой попробуйте открыть файл sendxmpp, найти строки
use Net::XMPP;
use Getopt::Long;
use strict;
и сразу после них добавить строку
use encoding 'koi8-r';
или
use encoding 'utf-8';

Возможно поможет. Я не пробовал, т.к. у меня с русскими в Gajim'е все хорошо, кроме темы сообщения, а тут они мне и не нужны.

[]

четверг, 30 апреля 2009 г.

GLPI: Исправление глюка в центральной консоли

Вчера было замечено, что если в центральной консоли GLPI выбрать закладку "Все", то в разделе "Ваши группы" (второй прямоугольник) в пункте "Заявки в ожидании" (тот, который слева) отображаются заявки, которые по настоящему имеют статус "В процессе" и наоборот. Тоже самое будет если перейти на закладку "Ваши группы".

А лечится этот глюк правкой двух строк в файле ./inc/tracking.function.php. Значит открываем этот файл в любимом тестовом редакторе и переходим к строке 195, в которой число 16 меняем на 15:
$title=$LANG["central"][15];
А в строке 205 - наоборот, т.е. 15 на 16:
$title=$LANG["central"][16];


Вот и все :)


ЗЫЖ На всякий резервный: архив, в котором оригинальный файл, измененный и diff-патч :)

[]

среда, 29 апреля 2009 г.

GPLI: Настройка e-mail для уведомлений, без зацикливания

5 минут назад мне задал вопрос один знакомый "У меня такой вопрос по GLPI, ты как завел аккаунты для получения и ответов? Т.е. у меня есть support@xxx.ru для ответов, если использую его, то получается, что зацикливаются заявки..." Дело в том, что нельзя использовать один e-mail, т.к. действильно будет зацикливаться. Тут нужно 2 адреса. Поэтому цель этого поста рассказать как правильно настроить GLPI чтобы и уведомления ходили, и сбор почты работал и циклов не было.


Настройка занимает всего 4 шага. И так:
Шаг 1. Идем в Установки > Уведомления на закладку "Установки", там в полях "Email администратора системы" и "Обратный адрес администратора (если нужен)" надо прописать e-mail-1, у меня это helpdesk@server.ru.
Шаг 2. Переходим на закладку "Настройка уведомлений" и везде убираем "Администратор" (выделяем справа "Администратор" и нажимаем кнопку "<< Удалить"). Потом везде добавиляем "Администратор Организация" (выделяем слева "Администратор Организация" и нажимаем кнопку "Добавить >>")
Шаг 3. Теперь идем в Установки > Почтовый парсер. Тут надо добавить новый почтовый парсер, если это еще не сделано. Как настроить почтовый парсер я рассказывал в первом посте про GLPI (см. п.B). В настройках почтового парсера указать настройки для e-mail-1 (поле "Email (необязательно)" надо оставить пустым), в моем случаем это helpdesk@server.ru.
Шаг 4. Осталось самое нудное :) Нужно пройтись по каждой организации и заполнить поля "Email администратора системы" и "Обратный адрес администратора (если нужен)". В первом надо указать e-mail-2, у меня это support@server.ru - это мой основной рабочий e-mail, а во втором поле - e-mail-1, у меня это helpdesk@server.ru.

Все, теперь циклов быть не должно.


Подведем итоги... Что мы теперь имеем? Если юзер пришлет письмо на helpdesk@server.ru, автоматом создастся новая заявка и отправится уведомление юзеру, админу организации, т.е. тебе. При этом в качестве мыла отправителя будет указано твой адрес, т.е., в моем случае, support@server.ru. Если же юзер ответит на это письмо, то реально он ответит не на support@server.ru, а на helpdesk@server.ru. GLPI прикрепит его к этому запросу как комментарий и снова разошлет уведомления.
Но (!) запрос не будет никому назначен. Чтобы запросы еще и автоматом назначались тебе придется поковыряться в Администрирование > Правила > Правила для заявок. Там ничего сложного нет, но если будут вопросы пиши, постараюсь помочь.

[]

понедельник, 27 апреля 2009 г.

GLPI: Добавляем свои статусы для заявок.

В предыдущем посте (GLPI. Шаг за шагом.) я уже рассказывал как установить GLPI на Ubuntu Server и о "сложностях", с которыми пришлось столкуниться...
На днях пришлось сделать хак/твик, т.к. главного программиста не устроило, что в статусе заявок нет таких пунктов как "Доработка" и "Закрыто и проверено". О чем и хочу рассказать в этом посте. Хотя я все же сделал немного по своему и создал новые статусы "В процессе (доработка)" и "Закрыто (решено и проверено)", такие лучше в общий контент вписываются, имхо.

Говорю один раз, повторять не буду :)
1) все файлы, которые я изменял, были предварительно скопированы в качестве резервной копии, чего и тебе советую
2) все эти твики/хаки проводились с версией 0.71.5, хотя думаю, что для других версий это будет тоже актуально, за исключением не больших отличий, таких как номера строк, хотя точно не знаю
3) непосредственно та строка/подстрока, которая была добавлена/изменена, будет выделяться жирным шрифтом
4) все изменения будут делаться снизу-вверх по файлу, чтобы номера строк не отличались от оригинального файла
5) все пути будут указнанны относительно корневого каталога веб-сервера


Приступим =)

Для начала добавим сам текст, который будет отображаться в выпадающем списке при выборе статуса заявки. Открываем файл ./locales/ru_RU.php и находим 669 строку, а после нее добавляем две строки:
 $LANG["joblist"][28]="В процессе (доработка)";
$LANG["joblist"][29]="Закрыто (решено и проверено)";
С этим готово. Теперь сделаем так, чтобы при создании/именении заявки у нас была возможность указать новые статусы. Для этого открываем файл ./inc/dropdown.function.php и сразу после 1095 строкой пишем:
case "finalize" :
return $LANG["joblist"][28];
break;
case "verified_and_closed" :
return $LANG["joblist"][29];
break;
Тут "finalize" и "verified_and_closed" внутренние имена наших новых статусов, чтобы можно было к ним обращаться в коде GLPI. Программисты поймут, а тем кто не знает программирование поясню подробнее... Когда ты выбираешь из списка статус то видишь что-то типа "В процессе (доработка)", это не имя, как могут подумать некоторые, а значение статуса. Имя мы вибираем сами, в моем случае это "finalize". Такое имя должно быть уникально во всем коде программы. Поэтому важно выбрать внутреннее имя статуса так, чтобы оно было уникальным в программе. Надеюсь ты меня понял :)

Теперь поднимаемся еще выше до строки 1866, в которой объявлена функция dropdownStatus(). Теперь внимание: в данном месте важен порядок (!), именно в том порядке, в котором ты сюда добавишь новые строки кода, будут отображаться статусы в своем выпадающем списке при создании/именении заявок. Я решил поставить "Закрыто (решено и проверено)" сразу после "Закрыто (решено)" поэтому добавил следующий код под строкой 1874:
echo "<option value='verified_and_closed' ".($value=="verified_and_closed"?" selected ":"").">".$LANG["joblist"][29]."</option>";
А "В процессе (доработка)" - "В процессе (назначено)" и код добавлял под строкой 1871:
echo "<option value='finalize' ".($value=="finalize"?" selected ":"").">".$LANG["joblist"][28]."</option>";
Теперь уже новые статусы для запросов работают, можешь войти в GLPI и убедиться. Но пока еще не работает с новыми статусами поиск запросов, тот самый который в меню "Поддержка > Отслеживание", т.к. он про них ничего еще не знает. Значит нам надо рассказать нашему другу "Поиску", что есть новые статусы. Для этого открываем файл ./inc/tracking.function.php и... набираемся терпения, т.к. тут поработать ручками придется больше, чем в предыдущих двух файлах вместе взятых :)) Не пугайся, ничего сложного тут нет, лучше двигайся к строке 1638 и под ней пиши вот этот код:
case "verified_and_closed": $title.=$LANG["joblist"][29];break;
а теперь поднимись чуточку выше, к строке 1635 и набери под ней вот этот код:
case "finalize": $title.=$LANG["joblist"][28];break;
Тут опять же важен порядок, как я уже писал выше, но этот порядок для заголовка PDF-экспорта. Хотя может тут порядок и не важен, но я не стал заморачивать проверками и сделал именно так.
Едим дальше вверх :) до строки 1386 и вставляем под ней вот этот код:
case "finalize": $where.=" ( glpi_tracking.status = 'finalize' )"; break;
case "verified_and_closed": $where.=" ( glpi_tracking.status = 'verified_and_closed' )"; break;
Теперь идем на три шага выше, т.е. к строке 1383 и приводим ее вот к такому виду (ориентируйся по жирному шрифту):
case "old_done": $where.=" ( glpi_tracking.status = 'old_done' OR glpi_tracking.status = 'verified_and_closed' )"; break;
теперь еще выше и правим 3 строки с 1379 по 1381 (опять по жирному):
case "notold": $where.=" (glpi_tracking.status = 'new' OR glpi_tracking.status = 'plan' OR glpi_tracking.status = 'assign' OR glpi_tracking.status = 'waiting' OR glpi_tracking.status = 'finalize')"; break;
case "old": $where.=" ( glpi_tracking.status = 'old_done' OR glpi_tracking.status = 'old_notdone' OR glpi_tracking.status = 'verified_and_closed')"; break;
case "process": $where.=" ( glpi_tracking.status = 'plan' OR glpi_tracking.status = 'assign' OR glpi_tracking.status = 'finalize' )"; break;
Тремя правками выше мы рассказали нашему другу "Поиску" какие статусы к каким категориям относить. Если ты не понял о чем я, зайди в GLPI в поиск и посмотри, что есть в выпадающем списке "Статус"... Вот-вот, Эти самые все "Не закрыто" и т.п. это и есть группы, т.е. сюда попадают заявки с разными статусами, которые можно объеденить в одну логическую группу. Что-что??? Там еще нет новых статусов? Не пугайся, еще надо 4 строчки добавить в этот файлик и 1 изменить и будут видны новые статусы. Надеюсь ты еще не устал :)

Пришло время научить расширенную форму поиска видеть новые статусы. Для этого поднимаемся до строки 1103 и под ней набираем такой код:
echo "<option value='verified_and_closed' ".($status=="verified_and_closed"?"selected":"").">".$LANG["joblist"][29]."</option>";
а чуть выше, в под строкой 1100 вот такой:
echo "<option value='finalize' ".($status=="finalize"?"selected":"").">".$LANG["joblist"][28]."</option>";


Отлично. Осталось 2 строки добавить, чтобы научить простой поиск видеть новые статусы. Лезь еще выше, остановка на строке 968, под которой пиши вот этот воть код:
echo "<option value='verified_and_closed' ".($status=="verified_and_closed"?"selected":"").">".$LANG["joblist"][28]."</option>";
а под строкой 965, вот такой:
echo "<option value='finalize' ".($status=="finalize"?"selected":"").">".$LANG["joblist"][28]."</option>";
И последняя строка, в которой надо сделать правку, ее номер 317 (правь в ней код, ориентируйся по жирному):
$where = "(status = 'old_done' OR status = 'old_notdone' OR status = 'verified_and_closed')";
Этой правкой мы рассказали GLPI какие запросы считать закрытыми.

Уф... В принципе это все... Но только в принципе :) Почему? Иди GLPI и сделай новую заявку, присвой ей один из новых статусов. А теперь иди в Поддержка > Отслеживание. Что видишь? Да-да, для новых статусов нет значков :( Не хорошо получается, да? Давай это исправим :)
Иди в папку ./pics и скопируй куда-нибудь файлы new.png, assign.png, plan.png, waiting.png, old_done.png, old_notdone.png, они тебе послужат образцом. Как же надо обозвать новые файлы? Да очень просто: именно такими именами, которые мы присвоили нашим новым статусам (имеются ввиду внутренние имена), т.е. finalize.png и verified_and_closed.png соответственно для "В процессе (доработка)" и "Проверено и закрыто".

Вот теперь полностью все =)


ЗЫЖ На всякий резервный: архив, в котором оригинальные файлы, измененные, diff-патчи и иконки, которые я сделал для этих статусов =)