Linux, команда для траблшутинга загрузки I/O подсистемы

Быстрая заметка. Иногда случается что дисковая I/O подсистема чем-то сильно нагружена и не понятно, каким именно процессом. В определении виновника может помочь следующая команда:

top -b -n 1 | awk '{if (NR <=7) print; else if ($8 == "D") {print; count++} } END {print "Total status D (I/O wait probably): "count}' > topsave.txt

Creative Audigy 2 нет звука на Windows 10 1903/1909

Приветствую. Пользуюсь звуковой карточкой Creative Audigy 2 (SB0240). Несмотря на то что звуковой карте уже лет и памяти, звук в ней очень классный – сочные басы и хорошая четкость и разборчивость звучания. На голову лучше встроенных в материнские платы звуковых чипов.

Кстати, этот гайд должен подойти и к карточке Creative Audigy 2 ZS, но насчёт Creative Audigy 2 SE я не уверен, т к это урезанная версия и у неё другие драйвера.

Всё было отлично, но после обновления Windows 10 на версию 1903 (тоже самое будет и с 1909) перестала работать эта звуковая карта. После поиска решения, у меня заработало следующее:

1. Сначала удалите все драйвера для звуковой карты.

Есть альтернативный пак драйверов от энтузиаста (Daniel_k), который можно найти [здесь]. Скачиваем этот драйвер пак и распаковываем. В папке KillDrvX запускаем KillDrvX.exe от Администратора и убиваем старый драйвер, чтобы можно было полностью его деинсталлировать.

Затем удаляем драйвера из Панели управления -> Программы и компоненты или путём запуска инсталлятора и выбора пункта Деинсталляции) и затем само устройство из Диспетчера Устройств.

Затем перезагружаем ПК.

2. Переходим в папку с драйвер паком, скачанным ранее, и запускаем инсталляцию тип Full Installation или можно Custom и отметить что вам нужно (можно ставить всё, кроме софта Dolby – он платный). Крайне желательно ничего не делать в это время и не дёргать компьютер. Если во время установки будет ругаться, что не может создать ярлыки, то кликаем Пропустить/Игнорировать – ничего страшного в этом нету, создадим ярлыки потом сами (Ctrl+Shift+Перетаскивание исполняемого файла из папки, куда установится драйвер пак – по-умолчанию это C:\Program Files (x86)\Creative\SBAudigy2 и там в подпапках есть Эквалайзер и прочие утилиты).

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

3. Если звука по прежнему нет (как и было в моём случае), то нам нужно “подкормить” операционной системе файл драйвера от производителя.

Для этого скачиваем драйвер [Отсюда]. Вводим капчу и открываем скачанный файл в архиваторе (7-zip к кпримеру) и распаковываем. Папка будет что-то вроде “SBA5_PCDRV_L11_3_01_0056B”.

Переходим в поддиректорию Audio -> DriversWin10 -> wdm. Находим файл “wdma_emu.inf“, щелкаем правой кнопкой мыши и в контекстном меню выбираем Установить (Install).

Перезагружаемся и наслаждаемся хорошим звуком.

Ссылки:

  1. https://answers.microsoft.com/en-us/windows/forum/all/no-sound-after-windows-10-update-1903-or-1909-but/9abd44d2-bf95-46f9-ade3-55b8fc798f29
  2. http://danielkawakami.blogspot.com/2017/01/sb-audigy-series-support-pack-62.html
  3. https://support.creative.com/downloads/download.aspx?nDownloadId=100229

Предыдущий рабочий день в python

Чтобы получить предыдущий рабочий день в python, делаем нехитрые преобразования:

import datetime, time
lastBusDay = datetime.datetime.today()
shift = datetime.timedelta(max(1,(lastBusDay.weekday() + 6) % 7 - 3))
lastBusDay = lastBusDay - shift

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

date = lastBusDay.strftime('%Y%m%d')

Python скриптинг: как зайти на FTP или FTPS

Бывает нужно что-то скачать/загрузить на удалённый сервер FTP или FTPS (не путать с SFTP) в скрипте на пайтоне.

Подключаем необходимые библиотеки:

from ftplib import FTP_TLS
from ftplib import FTP

Задаём параметры подключения к FTP хосту:

host = "some_ftp.com"
port = 21
username = "username"
password = "password"

Подключаемся к обычному FTP (в примере скачиваем файл на диск):

ftp = FTP(host)
ftp.login(username, password)
try:
    handle = open('/path_to_local_file/filename', 'wb')
    ftp.retrbinary('RETR /path_to_remote_file/filename, handle.write)
    handle.close()
except:
    pass
ftp.quit()

Все команда нужно указывать по спецификации FTP протокола, например такой.

Осовные команды:
RETR – получить файл с FTP в переменную или по хендлеру записать в локальный файл;
LIST – показать список файлов/директорий в указанной или текущей по-умолчанию;
NLST – то же, что и LIST, но возвращает только имена файлов/директорий;
STOR – загрузить с презаписью файл на FTP-сервер;
и другие

Подключение к FTPS выполняется схожим образом:

try:
    handle = open('/path_to_local_file/filename', 'wb')
    ftps = FTP_TLS(host)
    ftps.login(username, password)
    ftps.prot_p()
    ftps.retrbinary('RETR /path_to_remote_file/filename', handle.write)
    ftps.quit()
    handle.close()
except:
    pass

Для работы FTP_TLS нужен пайтон 2.7+, если у вас только 2.6, то придётся сделать одно из следующего:
1. Доустановить пайтон 2.7, например как описано здесь для Oracle Linux 6:

Редактируем /etc/yum.repos.d/public-yum-ol6.repo и убеждаемся, что enabled=1 в следующем параграфе:

[ol6_software_collections]
name=Software Collection Library release 3.0 packages for Oracle Linux 6 (x86_64)
baseurl=http://yum.oracle.com/repo/OracleLinux/OL6/SoftwareCollections/x86_64/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1

Далее выполняем команды от рута/судо:

yum install scl-utils
yum install python27
source /opt/rh/python27/enable
python --version

Если при запуске скрипта по cron (а скорее всего так и будет) выбивает ошибку вида:

error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

То необходимо добавить путь к библиотеке в /etc/ld.so.conf и запустить команду ldconfig, которая сама всё пропишет.

или

2. Cкачать дистрибутив пайтона 2.7 отсюда и вытащить фал ftplib.py и положить его в папку со скриптом (если скрипт запускается по cron, то это может не сработать):

wget http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tgz
tar -zxvf Python-2.7.1.tgz Python-2.7.1/Lib/ftplib.py
cp Python-2.7.1/Lib/ftplib.py /path_to_script/

или

3. Заходить на FTPS вызывая bash команды например lftp с помощью модуля subprocess.

Ссылки:

  1. https://docs.python.org/3/library/ftplib.html
  2. https://stackoverflow.com/questions/11573817/how-to-download-a-file-via-ftp-with-python-ftplib
  3. https://stackoverflow.com/questions/20842732/libpython2-7-so-1-0-cannot-open-shared-object-file-no-such-file-or-directory
  4. https://docs.cloudera.com/documentation/enterprise/6/6.0/topics/install_python_27.html

Удаленное выполнение команд на Windows

Для удаленного выполнения команд в Windows есть отличная штука – PsExec. Принципиально похожа на линуксовый SSH. Эта утилита работает со всеми версиями Windows, начиная с XP (XP, 2003, Vista, 2008, 7,8, 2012).

Итак, на локальной машине скачиваем утилиту (точнее, набор утилит), с сайта Microsoft Technet и распаковываем, например, в папку C:PSTools.
Далее, открываем консоль путем [Win+R] или Пуск – Выполнить – cmd.
Переходим в распакованную папку:

cd C:PSTools

Теперь мы можем выполнять команды на удаленной Windows машине, запуская psecex в таком формате:

psexec \remote_name_or_ip -u user -p password command

На удаленной машине должны быть запущены службы Server и Workstation.

Вот так – из-коробки – работает только на Windows 2003/XP. В версиях начиная с Vista из-за другого механизма доступа (UAC и т. д.), необходимо немного “пошаманить”.

На удаленной машине под управлением Windows Vista или поздней открываем Редактор Реестра (Start – Run – regedit) и создаём ключ реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystemLocalAccountTokenFilterPolicy типа DWORD и со значением 1.

Всё, теперь можно выполнять команды и на удаленной Vista+ системе, выполняя следующую команду:

psexec \remote_name_or_ip -u user -p password -h command

Флаг -h нужен, чтобы запустить команду от имени Администратора.

Если имя пользователя и праоль совпадают с локальными – их можно не указывать, так же как и пароль – он будет запрошен.

А для того, чтобы получить шелл на удаленной машине, выполняем команду:

psexec \remote_name_or_ip -u user -p password -h cmd

Ссылки:

  1. http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
  2. http://forum.sysinternals.com/faq-common-pstools-issues_topic15920.html
  3. http://stackoverflow.com/questions/828432/psexec-access-denied-errors

Как разбанить IP в fail2ban

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

Чтобы разбанить IP адрес, нужно на сервере выполнить следующие команды.

Вначале посмотреть цепочки правил (jail):

fail2ban-client status

Результат будет что-то вроде такого:

Status
|- Number of jail: 3
`- Jail list: apache, ssh, apache-modsecurity

Затем в разбаниваем IP в нужной цепочке правил:

fail2ban-client set JAILNAMEHERE unbanip IPADDRESSHERE

Installation of .net framework 3.5 on Windows Server 2012

(пост из старых заметок)
If you have Windows Server 2012 iso file or DVD, you can install .net framework 3.5 on Windows Server 2012 easly.
1. You have to insert Windows Server 2012 DVD or iso to D drive (change letter according to your configuration).
2. Open Add Roles and Features Wizard
3. Select .NET Framework 3.5 Features and then click next,
4. Select Specify an alternate source path link in the Confirm installation selections screen.
5. Path: D:\Sources\SxS and then click OK.
6. Finally click Install button.

Как сконвертировать звукозапись в sln формат для использования в Asterisk

(пост из старого черновика)
Asterisk не поддерживает .wav формат, который используется во многих программах звукозаписи. Можно доустановить пакет поддержки mp3 для Asterisk, но пишут, что обработка mp3 довольно ресурсоемкая, потому лучше использовать gsm или sln.
Записывать будем программой Audacity, которая доступна в любом дистрибутиве Linux. Конвертировать будем в командной строке с помощью консольной утилитки sox.Для начала запишем звуковой файл с помощью микрофона и программы Audacity  (в консоли набрать aptitude install audacity – если не установлена)

Далее выделяем нужный фрагмент записи и выбираем в меню File -> Export Selection

В открывшемся диалоге внизу выбираем формат GSM

Заливаем получившийся файл на сервер. Например scp /filepath/file.gsm user@server:/path/
НО Asterisk не хочет хавать так записанные файлы 🙁 Нужно их сконвертировать, например, в формат sln. В консольке набираем команду:
sox file.gsm -t raw -r 8000 -s -2 -c 1 file.sln
Теперь можно спокойно скормить Asterisk’y наш звуковой файлик. (стандартный путь в Debian – /usr/share/asterisk/sounds/ )

Некоторые команды управления postfix MTA

Посмотреть активные настройки Postfix:
postconf -d
Посмотреть сколько сообщений в очереди:
mailq | grep Requests
Посмотреть конкретно что в очереди:
mailq
Пнуть очередь на немедленную доставку:
postsuper -r ALL; postfix flush
Пнуть конкретное письмо по ID:
postsuper -r ID
Удалить письмо по ID:
postsuper -d ID
Удаление группы писем от определенного FROM (на примере MAILER-DAEMON):
FreeBSD:
mailq | grep 'MAILER-DAEMON' | awk '{print $1}' | xargs -I{} -n1 postsuper -d {}
Linux:
mailq | grep 'MAILER-DAEMON' | awk '{print $1}' | xargs -I{} -n1 /usr/sbin/postsuper -d {}
Удаление группы писем от определенного FROM в статусе REQUIRE:
mailq | grep 'MAILER-DAEMON' | awk '{print $1}' | tr -d '*' | xargs -I{} -n1 postsuper -d {}

Исключение пакетов из операции в yum (RHEL)

Итогда нужнообновить пакеты, не трогая при этом например ядро или еще миллион охожих ситуаций, где надо исключить пакет из обработки.
Есть два способа.
1) Единоразово – когда запускаете yum, использовать опцию –exclude:
yum –exclude=package* update
yum –exclude=php* update
yum –exclude=*rrd* update
yum –exclude=kernel*,*snmp,perl* update
2) Добавить необходимые пакеты в исключения в конфигурационном файле /etc/yum.conf :
exclude=php* kernel*
Выглядеть это будет примерно так:
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
exclude=php* kernel*
Теперь эти пакеты исключатся из обработки любыми командами yum.