20 дек. 2013 г.

Linux Out-of-Memory Killer (OOM)

OOM Killer - это компонент ядра Linux, призванный решать проблему недостатка памяти. Известно, что виртуальной памяти может быть бесконечно много (в пределах адресации), а вот физической - вполне конечное число. Ядро выделяет память процессам "с запасом" в сумме превышающую физическую память системы. В основном, всё разруливается нормально (вся выделенная память одновременно редко требуется), но бывает ситуация когда становится нужно памяти больше, чем ее физически есть. И системе тогда нужно завершить какой-то процесс, чтобы продолжить работу. Вот этим и занимается OOM Killer.

Текущая реализация OOM Killer в Linux стремится выбрать наименее важный процесс. Он выбирается среди всех процессов, кроме init и kernel threads, на основе подсчета для всех процессов очков и тот, что набрал больше всех очков - убивается. Алгоритм анализа достаточно сложен и я не буду его приводить здесь.

Бывает, необходимо защитить определенный, важные процессы от "убиения". В конце подсчета очков для процесса, число возводится в степень приоритета, которая может принимать значения -15...15 или -17. "-17" означает, что процесс не будет принудительно завершен вообще. Значение приоритета хранится в файлике /proc/$PID/oom_adj. Т. е. этот файлик создается для каждого процесса и уничтожается с его завершением.

Соответственно, дабы защитить процесс от "убиения", необходимо узнать PID этого процесса и записать в его файл oom_adj значение -17. Например, для процесса sshd, можно использовать команду:

pgrep -f "/usr/sbin/sshd" | while read PID; do echo -17 > /proc/$PID/oom_adj; done

Эта команда для всех процессов демона sshd назначает приоритет. Но нужно быть осторожным с приоритетами - система может вести себя непредсказуемо, если защищенный таким образом процесс займет всю память (скорее всего закончится это т. н. kernel panic). Поэтому рекомендуют ставить минимальный приоритет "-15".

Приведенную выше команду нужно выполнять после запуска процесса, т. е. или в конце стартового скрипта или по cron-у.

Ссылки на более детальную информацию:

19 дек. 2013 г.

Ошибка 0x0000005 при запуске практически всех приложений в Windows 7 x64

Бывает, после установки обновлений и последующей перезагрузки появляется ошибка 0x0000005 при запуске практически всех приложений в Windows 7 x64

Причина кроется в обновлениях KB2859537 и KB2872339 (или одном из них) на некоторых системах  Windows 7 x64.

Но апплет Центра обновлений запустить нельзя, т. к. все 32-битные приложения не запускаются в системе. Чтобы удалить обновления, запускаем командную строку с правами Администратора и удалем обновления командами:

wusa.exe /uninstall /kb:2859537
wusa.exe /uninstall /kb:2872339

Перезагружаемся - и система должна работать как раньше.

Кстати, не забываем скрыть эти обновления после перезагрузки дабы потом случайно опять их не поставить (в Центре обновления Windows правой кнопкой на обновлении - Скрыть обновление)

26 нояб. 2013 г.

Как убрать панель рекламы в KMPlayer 3.7

Неприятное нововведение ожидает поклонников этого очень достойного с технической точки зрения медиа плеера для ОС Windows в версии 3.7. Это - панель с рекламой в правой части окна плеера. Разработчикам надо монетизировать свой продукт, который является бесплатным - безусловно... Но не совсем хороший способ, как по-моему:


Но есть способ убрать эту новую фишку с рекламой.

Запускаем от имени Администратора (Run as administrator) ваш любимый текстовый редактор (Notepad++, например), открываем файл C:\Windows\System32\drivers\etc\hosts и дописываем в конец следующее:

127.0.0.1 player.kmpmedia.net

Рекламная панель пропадает.

Update.

Для KMPlayer версии 3.8+ необходимо вместо добавления в hosts добавить адрес сайта в Опасные в Свойствах обозревателя:

Панель управления - Все элементы панели управления - Свойства браузера - Безопасность - Опасные сайты - Сайты - Добавить в зону следующий узел - вставить player.kmpmedia.net - Добавить - Закрыть - ОК

22 нояб. 2013 г.

Полезные Bash Shell команды и однострочные скрипты

Т. к. количество всяких полезный команд и скриптиков для консоли Linux неуклонно растет и всех их не упомнишь, буду записывать сюда что-нибудь эдакое полезное.

Статья будет дополняться.

1. Сделать что-либо со всеми файлами в папке, например, распаковать все zip архивы в текущей папке:

for f in *.zip ; do unzip $f ; done

2. То же самое, только с файлами из поддиректорий текущей. Например, установить rpm пакеты:

for D in *; do [ -d "${D}" ] && yum install ${D}/*.rpm ; done

3. Добавить пользователя в группу:

usermod -a -G group user

4. Как расшарить содержимое папки по протоколу HTTP.
Заходим в нужную папку и выполняем команду:

python -m SimpleHTTPServer 8080

Далее зайдя в браузере по адресу http://ip_of_that_server:8080, мы увидим содержимое с возможностью навигации и скачивания файлов:

5. Получение информации о Virtual Hosts для apache2 в Debian Linux:

apache2ctl -t -D DUMP_VHOSTS

6. Создание файла заданного размера:

truncate -s 14M filename

7. Замена строчек в текстовом файле:

sed -Ei 's/foo|bar|baz/foobar/g' file

Заменить foo, bar или baz на foobar

8. Подмонтировать CD-ROM с указанием типа файловой системы:

mount -t iso9660 /dev/scd0 /media/cdrom

19 нояб. 2013 г.

Анализ падения ядра в Linux (kernel crash dump)

Завалить ядро линукс не так то и просто (если не преднамеренно, конечно), но такое случается... не все баги выловлены, а новые "фишки" приносят новые баги.

Итак, для сохранения дампа при падении ядра в Linux или kernel panic, необходимо настроить сервис kdump и установить несколько дополнительных пакетов.
Сам механизм представляет собой дополнительное маленькое ядро, смысл существования которого состоит в том, чтобы после падения основного ядра системы, перехватить управление, сохранить дамп и перезагрузить систему.

Для Fedora Linux устанавливается всё хозяйство просто командой:

yum install --enablerepo=fedora-debuginfo --enablerepo=updates-debuginfo kexec-tools crash kernel-debuginfo

А вот для Oracle Linux 6.4 чуть сложнее:

yum install crash -y
export DLP="https://oss.oracle.com/ol6/debuginfo"
wget ${DLP}/kernel-uek-debuginfo-`uname -r`.rpm 
wget ${DLP}/kernel-uek-debuginfo-common-`uname -r`.rpm
rpm -Uhv kernel-uek-debuginfo-`uname -r`.rpm kernel-uek-debuginfo-common-`uname -r`.rpm

Команды приведены для текущего ядра системы. Если нужны пакеты для других версий ядра, то нужно указать версию вместо `uname -r`.

Далее, необходимо добавить в конфиг загрузчика (/boot/grub/grub.conf или /boot/efi/EFI/redhat/grub.conf - зависит от того, используется UEFI при загрузке сервера или нет): параметр ядра "crashkernel=128M". Цифра указывает, сколько ОЗУ резервируется под резервное ядро. Через @ можно указать так же смещение в памяти, если необходимо. Например 128M@16 - зарезервирует 128 Мб ОЗУ начиная с физического адреса 0x01000000 (16MB).

18 нояб. 2013 г.

Запуск графических приложений на удаленной Linux-машине с помощью Putty и Xming (export display)

Суть задачи в следующем. Есть у нас сервер, на котором нету X-сервера, только консоль. А нам нужно, к промеру, установить Oracle Solaris Studio и запусктаь ее удаленно. Или какое-то другое приложение, работающее в GUI-режиме.

Для решения этой задачи выполняем следующее.

1. На сервере устанавливаем пакеты xauth и xterm. Например, для Oracle Linux (или другого RHEL):

yum install xauth xterm

2. Также, нужно проверить, включено ли X11 Forwarding в конфигурационном файле SSH-демона:

nano /etc/ssh/sshd_config

X11Forwarding yes

3. Eсли вы заходите с помощью Windows-машины, то вам необходимо установить Xming - X-эмулятор для форточек.  Ну и, собсно, сам Putty - ssh-клиент для Windows.

25 окт. 2013 г.

Полезные команды Asterisk (буду дополнять)


1. Переполнение памяти SMS

Если нужно принять SMS-ку, а в консоли (asterisk -rvv) пишет следующее:

ERROR[15627]: at_response.c:1420 at_response_smmemfull: [dongle0] SMS storage is full

то, логично - нам необходимо почистить память для смс-ок.
Есть два вида памяти: 
  • память SIM
  • память модема
Для очистки памяти SIM применяем в консоли астериска последовательно команды:

dongle cmd <dongle_name> AT+CPMS=\"SM\",\"SM\",\"SM\" 
dongle cmd <dongle_name> AT+CMGD=1,4

Для очистки памяти модема применяем в консоли астериска последовательно команды:

dongle cmd dongle_name AT+CPMS=\"ME\",\"ME\",\"ME\" 
dongle cmd dongle_name AT+CMGD=1,4

Консолька нам выдасть что-то типа:

[dongle_name] 'AT+CMGD=1,4' Command queued for execute
[dongle_name] Got Response for user's command:'OK'
[Oct 25 07:41:57] NOTICE[15627]: at_response.c:1714 at_response: [dongle_name] Got Response for user's command:'OK'

Всё прошло гладко. Теперь можно принимать SMS-ки.

7 окт. 2013 г.

Проверка доступности портов между двумя Linux-машинами (для Solaris тоже работает)

Бывают ситуации, когда нам необходимо проверить видимость TCP портов одной машины для другой. Казалось бы всё просто - telnet. А если на серверной машине еще не установлено или не запущено приложение, слушающее нужный порт? Я уверен, что существует масса способов, но мне было проще написать 2 маленьких скрипта на Python.

Один скрипт - сервер. Слушает заданный порт и пишет в консоль информацию о клиентах. А второй - клиентский скрипт - стучится по заданному IP в заданный порт и возвращает ответ от сервера (если порт доступен).

Серверный скрипт.


#!/usr/bin/env python
import socket, sys
# Server address and buffer size
TCP_IP = '0.0.0.0'
BUFFER_SIZE = 1024 
# Usage string
usage = "server.py PORT"
# Check number of arguments and print usage if not enough arguments
if (len(sys.argv) < 2):
        print(usage)
        sys.exit(0)
TCP_PORT = int(sys.argv[1])
# Create socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
# Listen for client connection until Ctrl+C will be pressed
while 1:
        c = s.accept()
        cli_sock, cli_addr = c
        cli_sock.send("Hello, person from %s"%(str(cli_addr)))
        cli_sock.close()
        print("received data from:", str(cli_addr))

Как сохранить кадр из видео в Linux

В командной строке переходим в нужную папку и выполняем команду:

mplayer -vo png -ss 00:30:00 -frames 1 video-file.mp4

Это даст нам следующее:

-vo png - формат изображения png
-ss 00:25:00 - кадр будет взят из 25й минуты фильма (формат ЧЧ:ММ:СС)
-frames 1 - сохранит только 1 кадр, в текущую директорию.
video-file.mp4 - путь к файлу содержащему видео (кодек видео должен присутствовать в системе)

4 окт. 2013 г.

Использование iperf для тестирования мультикаста

Для того, чтобы проверить, приходит ли на наш сервер/рабочую машину/ПК мультикаст, можно использовать и tcpdump:

tcpdump -i bond0.666 udp -nn port 4444

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

Лучше использовать утилиту iperf. Она служит для анализа быстродействия сети, и для наших целей отлично подходит.

Итак, на Debian устанавливаем просто: 

aptitude install iperf

А для RHEL дистрибутивов (RedHat, Oracle Linux, CentOS etc.) нужно или добавить репозиторий RepoForge или посмотреть пакет для своей версии ОС тут http://pkgs.repoforge.org/iperf/ и установить, например:

yum install http://pkgs.repoforge.org/iperf/iperf-2.0.4-1.el6.rf.x86_64.rpm

или

rpm -Uhv http://pkgs.repoforge.org/iperf/iperf-2.0.4-1.el6.rf.x86_64.rpm

Далее, если адрес мультикаст группы 239.200.1.1, а порт 4444, то делаем команду и смотрим результат:

iperf -s -u -B 239.200.1.1 -i 1 -p 4444

здесь

  • -s -режим сервера, 
  • -u - использовать UDP, 
  • -i 1 - выводить информацию каждую секунду, 
  • -B и -p - адрес нашего мультикаста.

20 сент. 2013 г.

Белый список спам-фильтра Amavis

Для занесения доверенных, но отсылающих по каким-либо причинам подозрительные для Amavis письма, отправителей необходимо дописать в файлик  /etc/amavis/conf.d/50-user:

# список доверенных IP: 
@mynetworks = qw( 127.0.0.0/8 192.168.1.0/24 ); 

 # разрешаем всю почту из доверенных IP: 
$policy_bank{'MYNETS'} = {  
 bypass_spam_checks_maps => [1], # не проверять на спамl 
 bypass_banned_checks_maps => [1],  
 bypass_header_checks_maps => [1], # не проверять заголовок 
};

Только добавляйте выше этого:

#------------ Do not modify anything below this line -------------
1;  # ensure a defined return

Перезапускаем демона amavis и проверяем.

11 сент. 2013 г.

Как обновить прошивку (firmware) Grandstream HT-503

Как показала практика, даже если сей девайс имеет доступ в интернет, то всё равно проще обновить прошивку, подняв свой TFTP-сервер.

Итак,

1) на ПК под управлением OC Windows идем на сайт разработчиков HT-503 и скачиваем архив с прошивкой

2) распаковываем архив в папку, которая будет корнем на TFTP-сервере

3) скачиваем последнюю версию TFTP-сервера нужной архитектуры отсюда и устанавливаем

4) запускаем Tftpd64 (или Tftpd32 - если вы ставили 32-битную версию), нажимаем Browse и выбираем папку с файлами прошивки затем нажимаем Show Dir - для проверки, в списке Server Interface выбираем нужный (тот, который смотрит в вашу локальную сеть или в VPN - короче, тот, где находится сам HT-503).


22 авг. 2013 г.

Как разделить образ .cue на треки .flac в Linux

Вот бывает хочется сделать свой аудиодиск с подборкой композиций из разных альбомов. Делать его из mp3 не разумно, т. к. mp3 - сжатие с потерей качества и от того, что мы его "раздуем" обратно в audio cd качество не улучшится. Потому лучше брать музыку в lossless фотматах. Но очень часто музыка идет одним образом, в котором содержаться все треки альбома. А если нам нужно вытянуть оттуда только несколько песен?

На примере Debian 7 делаем следующее.

Устанавливаем вначале необходимые пакеты:

aptitude install shntool cuetools

Далее переходим в папку с .cue и разбиваем:

shntool split -f *.cue -o flac *.flac

На выходе получим файлы с именами split-track##.flac. И можем дальше собирать наш аудио-диск.

16 авг. 2013 г.

Удобочитаемая панель предпросмотра в Roundcube Webmail

По-умолчанию в Raundcube Webmail очень не удобное расположение панели предпросмотра писем. Т. е. расположена сия панель внизу, горизонтально. Что на современных широкоформатных мониторах, совсем не удобно. И в настройках это дело по-умолчанию не настраиваемо.

Решить проблему сию поможет плугин Threecol Layout, доступный по ссылке:
https://github.com/tofi86/Roundcube-Plugin-Threecol-Layout

Но он работает только с версиями Roundcube 0.9.x, я же ставил версию из пакетов Debian Wheezy, а там только 0.8. Пришлось скачать архив с сайта разработчиков Roundcube и установить заново (я решил устанавливать всё в папку /var/www/roundcubemail - у вас путь может быть иной). Благо, старую БД он подхватил отлично и настройки в main.inc.php мало отличаются.

Скачиваем его на сервер, распаковываем в папку с плугинами, например:  /var/www/roundcubemail/plugins

Редактируем конфигурационный файл:

nano /var/www/roundcubemail/config/main.inc.php

19 июл. 2013 г.

Удаление старых файлов одной командой в Linux

С помощью команды find легко удалять или перемещать или копировать файлы, с датой модификации старше заданной. Удобно помещать такую команду в cron.

Например, для файлов старше 5 дней:

find /path/to/files* -mtime +5 -exec rm {} \;

Для файлов, измененных в пределах 24...48 часов:

find /path/to/files* -mtime 1 -exec rm {} \;

Это версия для Debian, на RHEL надо писать чуть по-другому:

find /path/to/files* -mtime +0 -exec rm {} \;

Создать файлы для тестирования можно командой (например, дата 2 апреля):

touch -d '2 Apr' /path/to/test_file

18 июл. 2013 г.

Nokia 5230 самопроизвольно выключается

Поразил недавно такой недуг мой верный телефончик.

Но я не растерялся, нашел решение - проблема оказалась в аккумуляторе, точнее в контактах на батарее и встречается она так же на других моделях семейства - 5800, 5530.

Контакты на батарее иногда отходят (обычно после долгой эксплуатации).

В общем, вытаскиваем батарею и понимаем, что на ней есть зажимы для 3 штырьков, какие находятся на корпусе телефона. Это видно на фото.


17 июл. 2013 г.

Борьба со спамом средствами Postfix

В этой статье постараюсь изложить свой опыт по настройки MTA Postfix для максимальной фильтрации спама и нежелательных писем встроенными средствами и средствами модулей Postfix'а. Настройка Amavis, Spamassassin, Clam и т. п. отдельных средств фильтрации спама выходит за рамки данной статьи и я возможно напишу об этом позже.

Входные данные:
  • сервер под управлением ОС Debian 7, 
  • Postfix 2.9.x, 
  • домен: example.com, 
  • внешний IP - 222.222.222.222, 
  • внутренняя сеть - 192.168.1.0/24, 192.168.2.0/24. 
Считаю, что постфикс у вас уже настроен в плане авторизации, почтовых ящиков и прочего хозяйства.

Основной файл, где настраивается фильтрация спама, это main.cf

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

mynetworks = 127.0.0.0/8, 192.168.1.0/24, 192.168.2.0/24

Далее следуют проверки HELO, т. к. многие спаммеры или пропускают команду SMTP HELO или посылают заведомо неверные данные.

smtpd_delay_reject = yes 
smtpd_helo_required = yes 
smtpd_helo_restrictions = permit_mynetworks, 
    permit_sasl_authenticated, 
    check_helo_access hash:/etc/postfix/helo_access, 
    reject_non_fqdn_hostname, 
    reject_invalid_hostname, 
    permit

15 июл. 2013 г.

Asterisk и NAT

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

Есть несколько сценариев работы * с НАТом в зависимости от того, находится сервер и/или клиенты за НАТом. НО. В каждом конкретном случае приходится "шаманить", т. к. стандартные рецепты не всегда помогают.

У меня был самый тяжелый случай - и сервер Asterisk и клиенты находятся за НАТами... разными НАТами.

Вариантов тут может быть два:

- настроить всю кухню так, что телефоны будут подклучаться к * через свой НАТ, интернет и НАТ сети с * (т. е. путь будет такой: телефон --> НАТ  --> интернет  --> НАТ  --> астериск);

- установить второй сервер * внутри сети, где телефоны и связать 2 сервера * IAX транком - именно IAX, т. к. он более приспособлен для работы через НАТ (путь будет: телефон --> астериск2 --> IAX-транк --> астериск1).

Но, т. .к. настоящие герои всегда идут в обход (с), я решил делать вариант номер 1.

Итакс, начнемс.

22 июн. 2013 г.

Монтирование разделов Windows в Linux без root или sudo

Тема на 5 минут - как примонтировать обычному пользователю разделы Windows (ntfs).
Создаем папки, куда будем монтировать. Например в хомяке пользователя, с правами ему.

mkdir /home/user/C
mkdir /home/user/D
chown user:user /home/user/C
chown user:user/home/user/D

Далее дописываем в файл:

nano /etc/fstab

/dev/sda2       /home/user/C    ntfs-3g defaults 0 0
/dev/sda5       /home/user/D    ntfs-3g defaults 0 0

Пути к устройствам - заменить на ваши. После перезагрузки диски будут примонтированы и user сможет их использовать.

Кстати, для работы с ntfs разделами, в системе должен быть установлен пакет ntfs-3g.

Google Chrome исчезает из меню в Debian

За браузером Google Chrome замечен глюк на Debain 7 и 6 - периодически после лог-аута исчезают ярлыки на него из меню, помогает dpkg-reconfigure google-chrome-stable, но до лог-аута.

Решение простое - скопируем ярлыки в нужное место:

cp /opt/google/chrome/google-chrome.desktop /usr/share/applications/

11 июн. 2013 г.

Восстановление или сброс пароля пользователя root базы данных MySQL

Бывает, вы просто забыли/потеряли пароль для суперпользователя БД MySQL, но доступ суперпользователем на сервер у вас есть.
Тогда чтобы восстановить пароль делаем следующее.

1. Останавливаем демона mysqld:

/etc/init.d/mysqld stop

2. Запускаем mysql в безопасном режиме:

mysqld_safe --skip-grant-tables &

3. Заходим в мускуль под рутом в этом режиме без пароля:

mysql -u root -p

4. Меняем пароль пользователя root на новый:

mysql> use mysql;
mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit


5. Возвращаем всё на круги своя (т. е. перезапускаем мускуль в нормальном режиме) и тестируем:

/etc/init.d/mysqld stop
/etc/init.d/mysqld start
mysql -u root -p

22 мая 2013 г.

Отключение Internet Explorer Enhanced Security (IE ESC)

Усли Вам по каким-либо причинам нужно использовать именно Internet Explorer на серверной Windows Server 2008 R2, то это становится настоящей пыткой из-за повышенной безопасности IE. Но можно легко облегчить себе жизнь следующим способом.

Заходим в Server Manager и на главной странице справа внизу жмем Configure IE ESC:


Затем ставим всё в Off:


Всё. Теперь можно относительно нормально пользоваться IE чтобы скачать другой браузер или для приложений ActiveX.

17 мая 2013 г.

Телефонные коды Украины

Запишу здесь телефонные коды Украинские - полезно для распределения звонков в диалплане Asterisk, если есть несколько разных исходящих линий.
  • 039 xxx xx xx - Киевстар (Golden Telecom)
  • 050 xxx xx xx - МТС
  • 063 xxx xx xx - life:)
  • 066 xxx xx xx - МТС
  • 067 xxx xx xx - Киевстар
  • 068 xxx xx xx - Киевстар (Beeline)
  • 091 xxx xx xx - Utel
  • 092 xxx xx xx - PEOPLEnet
  • 093 xxx xx xx - life:)
  • 094 xxx xx xx - Интертелеком
  • 095 xxx xx xx - МТС
  • 096 xxx xx xx - Киевстар
  • 097 xxx xx xx - Киевстар
  • 098 xxx xx xx - Киевстар
  • 099 xxx xx xx - МТС
  • 031, 032, 033, 034, 035, 036, 037, 038, 041, 042, 043, 044, 045, 046, 047, 048, 049, 051, 052, 053, 054, 055, 056, 057, 058, 059, 061, 062, 063, 064, 065, 069 - стационарные телефоны
  • 0800 - номера вызываемые за счет вызываемого абонента с фиксированных номеров
  • 0900 - платные услуги

Просмотр подробной информации о сетевой карточке в Linux

Недавно нужно было узнать параметры карточки на удаленном сервере (под управлением Linux). А точнее, её модель. Команды

ethtool -i eth0
miitool -vv eth0

показывают версию или драйвера или чипа. Но нашел способ узнать побольше о карточке, как оказалось достаточно очевидный:

lspci -vv | egrep -i --color 'network|ethernet'

Здесь мы получим информацию наподобии такой:

07:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)

Цифры вначале - адрес устройства на шине PCI. Берем его и пихаем аргументом в команду:

lspci -vv -s 07:00.0

Вот теперь мы можем посмотреть максимум о карточке.

5 апр. 2013 г.

Скрипт для отключения не используемых служб в Windows Server 2012

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

Скрипт будет на языке PowerShell и видение того, какие службы не нужные здесь я привёл свое, так что список служб надо подредактировать под свои нужды.

Получить список сервисов с их короткими именами можно командой в оболочке PowerShell:

Get-service

Собсно, сам скрипт:


$DisabledServicesList = @("ALG", "BFE", "BITS", "Browser", "CertPropSvc", "CryptSvc", "defragsvc", "Dnscache", "DPS", "EFS", "FontCache", "gpsvc", "hidserv", "hkmsvc", "IKEEXT", "iphlpsvc", "KeyIso", "KPSSVC", "KtmRm", "lltdsvc", "MMCSS", "MpsSvc", "MSiSCSI", "napagent", "NcaSvc", "Netlogon", "NetTcpPortSharing", "PerfHost", "pla", "PolicyAgent", "PrintNotify", "RasAuto", "RasMan", "RemoteAccess", "RemoteRegistry", "sacsvr", "SCardSvr", "SENS", "SharedAccess", "ShellHWDetection", "SNMPTRAP", "Spooler", "Themes", "TrkWks", "UALSVC", "UI0Detect", "VaultSvc", "vmicheartbeat", "vmickvpexchange", "vmicrdv", "vmicshutdown", "vmictimesync", "vmicvss", "W32Time", "WcsPlugInService", "WdiServiceHost", "WdiSystemHost", "Wecsvc", "wercplsupport", "WerSvc", "WinHttpAutoProxySvc", "wmiApSrv", "WPDBusEnum", "wudfsvc", "wuauserv", "ScDeviceEnum")

$ManualServicesList = @("AeLookupSvc","seclogon", "SstpSvc")

foreach ($service in $DisabledServicesList)
{
Set-Service -name $service -StartupType Disabled
Stop-Service -force -name $service
}
foreach ($service in $ManualServicesList)
{
Set-Service -name $service -StartupType Manual
}
Создаем массив строк с названиями служб, которые хотим вырубить и можно еще второй - какие поставить в Manual. А далее обрабатываем их в циклах.

Для использования или копируем текст скрипта в окно PowerShell (запущенное с администраторскими правами, ессно) или сохраняем как .psc1 и юзаем.

1 апр. 2013 г.

Windows 2012 how to solve issue "The service could not be started either because it is disabled or it has no enabled device associated with it."

Если запуская какой-либо системный апплет в Windows Server 2012 из-под пользователя не Администратор, а другого пусть даже с правами администратора, вы получаете ошибку:

I cannot start c:\windows\system32\services.msc - "The service could not be started either because it is disabled or it has no enabled device associated with it."

И вы не можете ни запустить апплет со службами, ни консоль с правами админа, то это значит, что выключен сервис Application Information. Необходимо залогинится в систему именно Администратором и включить эту службу или через апплет Services или через консоль:

sc config Appinfo start= auto
net start Appinfo


или через PowerShell:

Set-Service Appinfo -startuptype Automatic
Start-Service -name Appinfo

Ошибка в RHEL: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

Ошибка в RHEL6 x64 вида:

/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

возникает, когда вы хотите запустить 32-битное приложение на 64-битной системе без glibc версии х86.Вместе с системой ставится только 64-битная версия этой библиотеки. Решаем:

yum install glibc.i686

На некоторых системах:

yum install glibc.i386

27 мар. 2013 г.

Ошибка при обновлении BIOS сервера Dell в Windows Server 2012

Если при запуске DUP пакета на сервере Dell PowerEdge 1950 (а возможно и на других моделях) получаете ошибку:

"An error has occurred the Dell Instrumentation Driver (HAPI) could not be loaded."

то, значит, у вас стоит в Disabled сервис Application Experience. Запустите этот сервис (из-под cmd администратора)

sc config AeLookupSvc start=auto
net start AeLookupSvc

И обновление через DUP должно заработать.

22 мар. 2013 г.

Звонки в Asterisk через PSTN (ТфОП) с помощью Grandstream Handy Tone HT503

В общем, необходимо подключить обычную телефонную линию (ТфОП, PSTN) к Asterisk для возможности принимать и совершать вызовы через неё.

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

Как подключить аналоговую линию в цифровой астериск? Вариантов нашлось три:
  • VoIP-гейтвей
  • PCI-карточка с хотя бы одним портом FXO
  • небольшая волшебная коробочка под названием Grandstream Handy Tone HT503
1й вариант отвергли, т. к. гейт дорог и в его функционал не будет реализован на его стоимость. 2й вариант был отвергнут, т. к. на материнской плате сервера нет обычного PCI-порта... и еще потому, что настраивать карточки расширения имеет смысл, если у нас несколько линий аналоговой/цифровой телефонии FXO/E1. Самым простым и экономичным вариантом оказался номер 3 (стоимость его 50-70 долл).

Итак, разберемся с терминологией. Если по-простому, то:
  • FXO - это интерфейс, к которому подключается PSTN, т. е. сама телефонная линия.
  • FXS - интерфейс для подключения обычного аналогового телефона для использования его в VoIP-телефонии.
  • E1 - интерфейся цифровой телефонии, используются в крупных организациях с множеством цифровых каналов.
Для наших задач возможно подошло бы и другое устройство подобного типа, НО из представленных на нашем рынке устройств, только HT503 имело FXO-порт. Большинство таких устройств имеют только 1 или несколько FXS-портов. Они нам НЕ подходят! Называются они ATA - Analog Telephone Adapter. (в HT503, к слову, также есть один FXS порт, так что он тоже ATA, но не только).

Моменты, которые необходимо учитывать при настройке HT503:
  • подключение чекез WAN или LAN
  • настройка аналоговых параметров ТфОП на странице Advanced Settings (зависят от страны)
  • параметры отсылки DTMF-сигналов для голосовых меню входящих и исходящих вызовов
  • региональные параметры детектирования busy-сигнала ТфОП. Если задать неверные - HT503 не будет детектировать момент завершения входящего вызова вызывающим абонентом
  • Настройки сопротивления ТфОП
  • приоритеты кодеков
  • настройка экстеншна Unconditional Call Forward to VOIP для диалплана Астериска

В общем, распаковываем коробку, подключаем к HT503 БП, затем

18 мар. 2013 г.

Настройка abrt (automatic bug reporting tool) в RHEL6

abrtd - демон, который следит за крэшами программулин и в случае крэша делает core dump и сохраняет всякий другой полезный в отладке stuff. И - самое полезное - от может уведомлять нас сразу же о проблеме и даже аплоадить дебаг инфу на багзиллу или нужный ftp/scp сервер.

Постановка задачи - настроить в abrt отправку писем при обнаружении крэша кастомного софта на сервере.

Для начала установим необходимые пакеты.

yum install abrt-addon-ccpp abrt-addon-python abrt-cli abrt-plugin-logger abrt-plugin-mailx abrt-tui abrt

Если это для вас важно, то следует заметить, что установка abrt меняет kernel core_pattern:

cat /proc/sys/kernel/core_pattern

/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e

Добавим в автозагрузку демона abrtd:

chkconfig abrtd on
chkconfig abrt-ccpp on
chkconfig abrt-oops on

Конфигурационные файлы abrt находятся в директориях:
  • /etc/libreport/ - хранит конфиги связанные с репортами
  • /etc/libreport/events.d/ - здесь лежат описания ивентов и реакции на них
  • /etc/libreport/events/ - описание т. н. репортеров
  • /etc/libreport/plugins/
  • /etc/abrt/ - конфиги самого демона abrtd
  • /etc/abrt/plugins/ - конфиги плугинов abrt.
Нас все конфиги не интересуют, потому перечислю, что нужно поменять:

25 февр. 2013 г.

Как подписаться на мультикаст, Linux

Если вам нужно слушать в сети мультикаст, то скорее всего, вам нужно на него подписаться - на то он и мульти, а не броад :) Делается это командой:

ip maddr add 224.0.0.1 dev eth0

где 224.0.0.1 - адрес мультикастовой группы, а eth0 - интерфейс, на который этот мультикаст будем получать.

Отписаться от получения мультикаста так же просто:

ip maddr del 224.0.0.1 dev eth0

Посмотреть список подписок:

ip maddr show

Или в несколько другом виде:

netstat -g

15 февр. 2013 г.

Как просмотреть свой Product Key для Windows 2003, 7

Бывает, нужно было посмотреть ключи на лицензионных Windows. Стандартные средства покажут в лучше случае 5 последних символов (slmgr /dli), а в случае с Win2003 slmgr вообще нет :)

Можно использовать сторонние местами платные утилиты... Но лично я им не доверяю и ставить их на сервера не есть хорошая практика. Нашел на просторах Сети скрипт на Visual Basic, который вытягивает ключик из ресстра. Проверено на 2003 и 7.

Создаем текстовый файл в корне какого-то диска для простоты и копируем туда текст:

' Find Product Activation Key on Remote Machine
' Got this from a posting by 'Alatar1' at www.theeldergeek.com
'
' I just added the inputbox - Rob

If Wscript.Arguments.Count = 0 Then
    strComputer = inputbox("Enter a computer name to query the Windows product key from","Enter computer name")
    if strComputer = "" then wscript.quit
Else
    strCOmputer = Wscript.Arguments.Item(0)
End If
Dim Digits (24)
Digits (0) = "B" : Digits (1) = "C": Digits (2) = "D": Digits (3) = "F":
Digits (4) = "G": Digits (5) = "H": Digits (6) = "J": Digits (7) = "K":
Digits (8) = "M": Digits (9) = "P": Digits (10) = "Q": Digits (11) = "R":
Digits (12) = "T": Digits (13) = "V": Digits (14) = "W": Digits (15) = "X":
Digits (16) = "Y": Digits (17) = "2": Digits (18) = "3": Digits (19) = "4":
Digits (20) = "6" : Digits (21) = "7" : Digits (22) = "8": Digits (23) = "9"
Dim HexBuf (100), HexDigitalPID (15)
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
objReg.GetBinaryValue &H80000002, "SOFTWARE\Microsoft\Windows NT\CurrentVersion\", "DigitalProductId", HexBuf
' Extract Relevant Section of Digital Product ID

StartOffset = 52 : EndOffset =67
For i = StartOffset to EndOffset
  HexDigitalPID (i-StartOffset) = HexBuf(i)
next

' Convert Encoded Product ID to Activation Key

dLen = 29 : sLen = 15
KEYSTRING =""
for i=dLen-1 to 0 step -1
  if ((i + 1) mod 6) = 0 then
    KEYSTRING = KEYSTRING & "-"
  else
    HN = 0
    For N = (sLen -1) to 0 step -1
      Value = ( (HN *2^8 ) Or HexDigitalPID (N))
      HexDigitalPID (N) = Value \ 24
      HN = (Value mod 24)
    next
    KEYSTRING = KEYSTRING & Digits(HN)
  end if
next
KEYSTRING2 = StrReverse (KEYSTRING)
WScript.Echo KEYSTRING2

Затем сохраняем это, например, как pk.vbs. и запускаем. В  Windows 2003 можно кликом vsirb, а в 7 - из-под консоли с администраторскими правами. Скрипт попросит имя компьютера, которое берем в свойствах системы (правый клик мышкой по Мой компьютер или [Win + Break]). Вводим имя и через несколько секунд получаем наш ключ полностью.

12 февр. 2013 г.

Настройка Interface Teaming (bonding) и привязка к VLAN тегам в RHEL6 (Oracle Linux 6)

Для начала создадим конфигурационный файл для modprobe, в котором расскажем какой интерфейс мы будет обрабатываться модулем bonding:

nano /etc/modprobe.d/bond.conf

alias bond0 bonding
alias ipv6 "disable=1"

Заодно отключим IPv6 (если вы его не используете).

Далее переходим в директорию /etc/sysconfig/network-scripts/ где хранятся конфиги всех сетевых интерфейсов в формате ifcfg-<interface>

Создаем здесь конфиг для нашего нового bond интерфейса:

ifcfg-bond0

DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
#IPADDR=192.168.1.2
BONDING_OPTS="mode=4 miimon=1000"
VLAN=yes
TYPE=Ethernet
IPV6INIT=no
USERCTL=no

Здесь можете не указывать адрес, если хотите получать трафик только по VLAN тегам.
По опциям:
  • mode - определяет режим, который выбирается из соображений, чего вы хотите от бонда и вашей сетевой инфраструктуры. Описание режимов здесь.
  • miimon - нужен для failover'а - в мс как часто модуль mii будет мониторить карточки на их доступность. Если феиловер не нужен, то можно ставить побольше, если нужен, то 10, 20
Правим конфиги для физических адаптеров в бонде (например, eth0, eth1 etc.), добавляя к каждому параметры Master и Slave (<> - ваши данные)

30 янв. 2013 г.

Nagios, ошибка при долгой перезагрузке сервера: CHECK_NRPE: Socket timeout after 10 seconds

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

Редактируем файл (путь при установки из исходников) /usr/local/nagios/etc/objects/commands.cfg и находим определение команды чека nrpe. Будет что-то на подобии:

define command{
        command_name    check_nrpe
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
        }

дописываем в команду параметр -t и значение ожидания в сек, например:

command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -t 60

Всё, этого типа фейковых ошибок уже не будет (если сервер успеет перезагрузиться за заданное время).

28 янв. 2013 г.

Установка Oracle Linux 6.4 с помощью USB flash drive

Устанавливать операционную систему с помощью USB-drive имеет смысл, если нет физичнского привода CD/DVD в ПК или сервере.

Последовательность действий такова.

1. Качаем образ отсюда (нужно пройти бесплатную регистрацию/залогиниться - whOracle совсем просто так ничего не даёт :) )

https://edelivery.oracle.com/EPD/Download/get_form?egroup_aru_number=15213241

Качаем образ (последний на момент написания этих строк): Oracle Linux Release 6 Update 4 for x86_64 (64 Bit). Остальные нам в общем-то и не нужны.

2. Устанавливаем на свою рабочую станцию под управлением линукс утилиту Unetbootin

aptitude install unetbootin

3. Затем вставляем флешку в порт, форматируем, если надо, в FAT или EXT4 (например, с помощью Disk Utility).

4.Запускаем Unetbootin, выбираем скачанный образ и флеш-диск, жмем Ок и ждем.


11 янв. 2013 г.

How to conver Windows Server 2012 Evaluation editions to full retail versions

If you installed an evaluation edition of Windows Server 2012 which is free for 180 days and than buy a full version, you must convert Windows edition's type.

If the server is a domain controller, you cannot convert it to a retail version. In this case, install an additional domain controller on a server that runs a retail version and remove AD DS from the domain controller that runs on the evaluation version. For more information, see http://technet.microsoft.com/en-us/library/hh994618.aspx.

To convert edition do next steps:

1. First, check version. From an elevated command prompt, run

slmgr.vbs /dlv

evaluation versions will include “EVAL” in the output.

2. To see editions available for us to convert, type

DISM /Online /Get-TargetEditions

You will get a list of edition IDs which we will use later.




3. Convertation itself. Run from elevated cmd:

DISM /online /Set-Edition:<edition ID> /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /AcceptEula

providing the edition ID one from the list we got above and a your retail product key. The server will offer to restart (twice) and all will be done.

Good luck!

10 янв. 2013 г.

How to measure network throughoutput and another parameters of Windows machine using NT Testing TCP Tool (ntttcp)

Update.

Для того, чтобы протестировать сеть между двумя Windows-машинами, необбходимо скачать бесплатный инструмент NT TCP Testing tool от Microsoft отсюда.

Скачиваем, распаковываем, например, на диск С: в корень.

Далее на первой машине открываем cmd и заходим в папку соответствующую архитектуре Windows:

cd C:\NTttcp-v5.28\x64

запускаем в режиме приемника:

NTttcp.exe -r -m 4,0,10.1.2.3 -a 6

где -r - режим приемника,
-m - количество_сессий,Номер_ЦП,IP_этой_машины

На втором ПК/сервере делаем то же самое, только вместо ключа -r указываем ключ -s и IP первой машины.

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