Меня, как и многих невольных пользователей текущие владельцы Skype поставили перед выбором: либо обновление, либо иди нахрен. Я посмотрел на свой довольно большой список контактов в котором находится много клиентов и скрепя сердцем выбрал первое — update. Внимательно осмотрел инсталяционый скрипт внутри rpm пакета и не найдя там ничего крамольного установил скайп 4.3.0.37. Оказалось, что новая версия не может загрузиться со старым профилем. Просто вываливается сразу после соединения. Я “пошаманил” с базами попробовал в новый профиль записать старые базы, но не помогло. (Обновлено. Решение было найдено). Это подсадило меня на коня. Масло в огонь подлило и то что они сломали интерфейс взаимодействия с внешними скриптами. Мои отлаженные скрипты перестали работать потому, что им передаются пустые параметры. Ну и чтобы окончательно вынудить людей искать альтернативу скайпу они прекратили поддержку звуковой подсистемы ALSA отдав предпочтение исключительно PulseAudio. Сначала сломали API для сторонних приложений, а теперь ещё и это.
Как запретить автообновления Skype
MS заставила всех перейти на новый скайп. А вместе с этим с каждой этой новой инсталяцией поставила своего шпиёна который будет лазить в интернет стягивать и устанавливать новую как обычно более тяжёлую версию скайп после чего то старые кнопки куда-то спрячутся то функциии отключатся. Получается что пользователь вроде бы как и не хозяин компьютера за который заплатил деньги. Копирайты копирайтами но табачёк врозь. Возвращаем всё на родину.
Используем fetchmail для автоматизации разбора почты.
Потребовалось мне принимать емейлы фильтровать их по определённым критериям и обрабатывать скриптами (отделять вложения, выполнять действия над вложениями). С такой задачей мог бы справиться плагин FiltaQuilla для Thunderbird. Однако плагин некорректно работает с моим Thunderbird версии 30 для Linux. Если он выполняется автоматически то сохраняет пустое вложение, хотя при ручном выполнении всё делает корректно. Автор упорно молчит, а править чужой плагин у меня небыло времени.
Итак мне было нужно:
- периодически проверять наличие писем в специальном почтовом ящике;
- стягивать их в раздельные файлы;
- сохранять все вложения из каждого письма;
- анализировать заголовки и тексты писем;
- запускать скрипты по манипуляции с текстами писем и вложениями.
Continue reading Используем fetchmail для автоматизации разбора почты.
Установка openvpn на Linux mint
Прежде всего уясните себе что машина с easy-rsa это машина которая только подписывает ключи. И по логике безопасности должна быть отдельной машиной. Не стоит хранить генератор ключей и в особенности приватный CA на самом VPN сервере.
1) ставим openvpn на VPN сервере
# apt-get install openvpn
2) ставим easy-rsa на станции подписей
# apt-get install easy-rsa
3) создаём каталог куда скопируем easy-rsa и там будем изменять настройки, создавать и подписывать сертификаты
# mkdir -p /root/sign-host/easy-rsa # cd /root/sign-host/easy-rsa # cp /usr/share/easy-rsa/* ./
Скрипт удаления старых томов для 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.
Глобальные фильтры на аккаунты Thunderbird
За долгие годы использования почтового клиента у меня накопилось большое количество фильтров в Thunderbird которые автоматически обрабатывают почту раскладывая её по каталогам, сохраняя файлы, формируя автоответы и т д. Фильтры в Thunderbird привязываются к конкретным папкам, что лично для меня создаёт неудобства с управлением. Например письмо от Васи Пупкина я хочу положить в папку Васи Пупкина независимо на какой из моих емейлов оно пришло. Поэтому я сделал один общий файл фильтров которые привязал ко всем папкам симлинками. А для того чтобы объединить их написал пару скриптов которые облегчили обработку суммарно нескольких мегабайт фильтров.
Прежде всего нужно закрыть Thunderbird.
На первом шаге получаем все фильтры которые у нас есть в один каталог и нумеруем их. Этот однострочный скрипт запускается из каталога выбранного профиля Thunderbird.
$ i=0; find . -name msgFilterRules.dat -print0 | tr -s '\000' '\n' | while read file ; do cp "${file}" "${HOME}/Filters_Thunderbird/${file##*/}.${i}.txt" ; i=$((i+1)); done
Fast HDD Eraser – Быстрое стирание дисков
Мне часто приходится затирать жёсткие диски пачками, например при модернизации стораджей, и мне был очень необходим скоростной источник потока данных которыми затирается целевой диск. Чтобы более менее надёжно затереть данные на диске неразрушив сам диск, недостаточно затереть его нулями из /dev/zero. В тоже время поток данных из /dev/urandom слишком медленный чтобы быстро затирать современные жёсткие диски.
Поскольку необходимый мне уровень стирания не претендовал на уровень военной разведки то я решил выкрутиться через большой массив случайных (псевдослучайных) чисел. А чтобы массив этот быстро работал я решил закинуть его в память. И /dev/shm – идеальное место.
Для стирания я использовал raid контроллер чтобы затирать сразу множество дисков. А для автоматизации процесса написал bash-скрипт. Скрипт имеет свой счётчик продвижения и его можно прервать Ctrl+C и затем продожить с той позиции где он был прерван.
Continue reading Fast HDD Eraser – Быстрое стирание дисков