Как продлить жизнь Skype 4.2.0.13

Меня, как и многих невольных пользователей текущие владельцы Skype поставили перед выбором: либо обновление, либо иди нахрен. Я посмотрел на свой довольно большой список контактов в котором находится много клиентов и скрепя сердцем выбрал первое — update. Внимательно осмотрел инсталяционый скрипт внутри rpm пакета и не найдя там ничего крамольного установил скайп 4.3.0.37. Оказалось, что новая версия не может загрузиться со старым профилем. Просто вываливается сразу после соединения. Я “пошаманил” с базами попробовал в новый профиль записать старые базы, но не помогло. (Обновлено. Решение было найдено). Это подсадило меня на коня. Масло в огонь подлило и то что они сломали интерфейс взаимодействия с внешними скриптами. Мои отлаженные скрипты перестали работать потому, что им передаются пустые параметры. Ну и чтобы окончательно вынудить людей искать альтернативу скайпу они прекратили поддержку звуковой подсистемы ALSA отдав предпочтение исключительно PulseAudio. Сначала сломали API для сторонних приложений, а теперь ещё и это.

Continue reading Как продлить жизнь Skype 4.2.0.13

Как запретить автообновления Skype

MS заставила всех перейти на новый скайп. А вместе с этим с каждой этой новой инсталяцией поставила своего шпиёна который будет лазить в интернет стягивать и устанавливать новую как обычно более тяжёлую версию скайп после чего то старые кнопки куда-то спрячутся то функциии отключатся. Получается что пользователь вроде бы как и не хозяин компьютера за который заплатил деньги. Копирайты копирайтами но табачёк врозь. Возвращаем всё на родину.

Continue reading Как запретить автообновления Skype

Используем fetchmail для автоматизации разбора почты.

Потребовалось мне принимать емейлы фильтровать их по определённым критериям и обрабатывать скриптами (отделять вложения, выполнять действия над вложениями). С такой задачей мог бы справиться плагин FiltaQuilla для Thunderbird. Однако плагин некорректно работает с моим Thunderbird версии 30 для Linux. Если он выполняется автоматически то сохраняет пустое вложение, хотя при ручном выполнении всё делает корректно. Автор упорно молчит, а править чужой плагин у меня небыло времени.

Итак мне было нужно:

  • периодически проверять наличие писем в специальном почтовом ящике;
  • стягивать их в раздельные файлы;
  • сохранять все вложения из каждого письма;
  • анализировать заголовки и тексты писем;
  • запускать скрипты по манипуляции с текстами писем и вложениями.

Continue reading Используем fetchmail для автоматизации разбора почты.

Скрипт удаления старых томов для bacula

Я уже писал о том как вручную удалять старые тома из базы и с диска. Казалось что это однократная операция. Однако пришлось делать это во второй раз. Попутно выявилась проблема с приоритетом команды restore. Диск с бэкапами заполнился, задания застряли в очереди и команда restore создала задание которое послушно встало в хвост очереди. Приоритеты очереди работают только в том случае если очередь движется. Bacula не приостанавливает ткущее задание чтобы выполнить задание с более высоким приоритетом. А оно стоит в очереди и не может выполниться изза нехватки места на диске. Гугл не смог найти ответ как же запустить рестор вне очереди. Пришлось очистить очередь, при помощи команды cancel в bconsole после чего отработал рестор.

Это всё отступления, вернёмся-же к автоматизации:
Continue reading Скрипт удаления старых томов для bacula

Оператор цикла for в bash

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

Не менее странным является и то, что этой переменной невозможно присвоить один байт-символ CR (возврат каретки) 0xA.
Никакие танцы с бубнами и операторы echo не дают этой возможности.
Два символа можно

IFS=$(echo -en "\n\b") # работает
echo -en "$IFS" | hexdump -C
00000000  0a 08                                             |..|
00000002

но один или много \n — не получается.

IFS=$(echo -en "\n\n\n\n\n") # не работает. Переменная будет пустой.
echo -en "$IFS" | hexdump -C # да говорю же следующая строка будет пустой

IFS=$(echo -en "A" | tr 'A' '\n') # не пойдёт!
IFS="\
\
" # тоже не будет работать

Continue reading Оператор цикла for в bash

ssh внутри while цикла который получает данные из stdin

Наткнулся я на то что скрипт запущенный локально — работает, а если его запустить на удалённой машине он вываливается из цикла while

#!/bin/bash

  SERVERS="10.10.1.6\n10.15.4.240"

  echo -e "${SERVERS}" | while read SERVER ; do
    echo -e "${SERVER}"
    ssh root@${SERVER} "uptime"
  done

Как оказалось проблема в том что ssh съедает stdin в первой итерации цикла.
Для меня это было неожиданно, однако лечится либо опцией -n либо перенаправлением stdin на < /dev/null .

#!/bin/bash

  SERVERS="10.10.1.6\n10.15.4.240"

  echo -e "${SERVERS}" | while read SERVER ; do
    echo -e "${SERVER}"
    ssh -n root@${SERVER} "uptime"
    ssh root@${SERVER} "uptime" < /dev/null
  done

Возврат к доброму iptables вместо firewalld

В последних версиях Fedora (19) вместо iptables по умолчанию используется динамический фаервол firewalld. Чтобы вернуть всё как было нужно остановить и запретить автозапуск firewalld.

# systemctl disable firewalld 
# systemctl stop firewalld

Затем нужно установить iptables-services (если он не установлен):

# yum install iptables-services

Потом запустить сервис iptables

# touch /etc/sysconfig/iptables
# systemctl start iptables
# systemctl enable iptables

И если используете IPv6

# touch /etc/sysconfig/ip6tables
# systemctl start ip6tables
# systemctl enable ip6tables

И наконец как обычно настраивайте файлы конфигурации /etc/sysconfig/iptables и /etc/sysconfig/ip6tables.

Fast HDD Eraser – Быстрое стирание дисков

Мне часто приходится затирать жёсткие диски пачками, например при модернизации стораджей, и мне был очень необходим скоростной источник потока данных которыми затирается целевой диск. Чтобы более менее надёжно затереть данные на диске неразрушив сам диск, недостаточно затереть его нулями из /dev/zero. В тоже время поток данных из /dev/urandom слишком медленный чтобы быстро затирать современные жёсткие диски.
Поскольку необходимый мне уровень стирания не претендовал на уровень военной разведки то я решил выкрутиться через большой массив случайных (псевдослучайных) чисел. А чтобы массив этот быстро работал я решил закинуть его в память. И /dev/shm – идеальное место.
Для стирания я использовал raid контроллер чтобы затирать сразу множество дисков. А для автоматизации процесса написал bash-скрипт. Скрипт имеет свой счётчик продвижения и его можно прервать Ctrl+C и затем продожить с той позиции где он был прерван.
Continue reading Fast HDD Eraser – Быстрое стирание дисков

qemu-img очень медленно конвертирует

Запустил конвертацию 4G диска из lv в qcow2.

qemu-img convert -O qcow2 /dev/VM_POOL/v01.sitea.com_disk0 v01.sitea.com_disk0.qcow2

Почему-то всё шло очень медленно. Посмотрел top – процессор свободен. Посмотрел iostat – также всё свободно и никакой большой активности нет. Оказывается, что после каждой записи qemu-img зачем-то вызывает fsync.

К сожалению qemu-img не поддерживает работу через stdin.

Значительно ускорить процесс получилось простым копирование lv в файл и далее конвертацией файла в qcow2.

dd if=/dev/VM_POOL/v01.sitea.com_disk0 of=v01.sitea.com_disk0.raw bs=2M
(4.5 GB) copied, 103.564 s, 43.5 MB/s

И за пару минут прошла ковертация

qemu-img convert -O qcow2 v01.sitea.com_disk0.raw v01.sitea.com_disk0.qcow2

Обнаружено на:
qemu-img-0.12.5-1.fc13.x86_64
Linux v01-b 2.6.34.8-68.fc13.x86_64 #1 SMP Thu Feb 17 15:03:58 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

Похоже это был этот баг.

OTRS + Centos 6.5

При установке системы OTRS на Centos 6.5 Final обнаружилось что автостарт OTRS Scheduler не работает.

Первое что выяснилось сервис  otrs  почему-то не прописался в  chkconfig , хотя сам файл скрипта в  /etc/init.d/  положил.

[root@testit ~]# chkconfig | grep otrs
[root@testit ~]#

Что ж, прописываем руками

[root@testit ~]# chkconfig --add otrs
[root@testit ~]# chkconfig otrs on
[root@testit ~]# chkconfig | grep otrs
otrs            0:off   1:off   2:on    3:on    4:on    5:on    6:off

После перезапуска системы видим на консоли или в файле  /var/log/boot.log 

Starting httpd: [ OK ]
Starting crond: [ OK ]
Starting OTRS..
 Checking httpd ...  failed!
  --> Please start the web server first! (service httpd start) <--

Несмотря на то что httpd нормально стартует, otrs вываливается считая, что httpd не запущен.
Continue reading OTRS + Centos 6.5