Меня, как и многих невольных пользователей текущие владельцы Skype поставили перед выбором: либо обновление, либо иди нахрен. Я посмотрел на свой довольно большой список контактов в котором находится много клиентов и скрепя сердцем выбрал первое — update. Внимательно осмотрел инсталяционый скрипт внутри rpm пакета и не найдя там ничего крамольного установил скайп 4.3.0.37. Оказалось, что новая версия не может загрузиться со старым профилем. Просто вываливается сразу после соединения. Я “пошаманил” с базами попробовал в новый профиль записать старые базы, но не помогло. (Обновлено. Решение было найдено). Это подсадило меня на коня. Масло в огонь подлило и то что они сломали интерфейс взаимодействия с внешними скриптами. Мои отлаженные скрипты перестали работать потому, что им передаются пустые параметры. Ну и чтобы окончательно вынудить людей искать альтернативу скайпу они прекратили поддержку звуковой подсистемы ALSA отдав предпочтение исключительно PulseAudio. Сначала сломали API для сторонних приложений, а теперь ещё и это.
Category: Операционные системы
Всё что касается персональных компьютеров
Как запретить автообновления Skype
MS заставила всех перейти на новый скайп. А вместе с этим с каждой этой новой инсталяцией поставила своего шпиёна который будет лазить в интернет стягивать и устанавливать новую как обычно более тяжёлую версию скайп после чего то старые кнопки куда-то спрячутся то функциии отключатся. Получается что пользователь вроде бы как и не хозяин компьютера за который заплатил деньги. Копирайты копирайтами но табачёк врозь. Возвращаем всё на родину.
Используем 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="\ \ " # тоже не будет работать
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