Segfault после обновления Skype 4.2.0.13 на 4.3.0.37

После обновления Skype для Linux с версии 4.2.0.13 на версию 4.3.0.37 я не смог подключаться со старыми профилями. Skype вываливается по segmentation fault. Если создать новы профиль то скайп работает. Но хотелось сохранить историю чатов. Мне помогло удаление из базы истории загруженных файлов.

$ sqlite3 ~/.Skype/[skypeusername]/main.db
sqlite> delete from Messages where type=68;
sqlite> .quit
Внимание!Предварительно нужно сделать резервную копию всего профиля.

OpenVPN TLS key negotiation failed to occur within 60 seconds. TLS handshake failed

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

В журнале сервера с данного IP были такие ошибки:

Tue Nov 11 09:58:49 2014 xxx.xxx.xxx.xxx:49611 TLS: Initial packet from 176.108.233.33:49611, sid=aea2a5e5 bc9d76f6
Tue Nov 11 09:59:49 2014 xxx.xxx.xxx.xxx:49611 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Tue Nov 11 09:59:49 2014 xxx.xxx.xxx.xxx:49611 TLS Error: TLS handshake failed

Документация по OpenVPN указывает на проблему соединения.

Это казалось абсурдным так как эта запись была в журнале сервера. И конечно пинги на сервер проходили. В журнале статуса openvpn-status.log (у вас может быть другой, смотрите конфиг опцию status) была запись в состоянии UNDEF

UNDEF,xxx.xxx.xxx.xxx:49611,84,108,Tue Nov 11 09:26:20 2014

После попытки перейти с UDP на TCP стало ясно, что проблема не в протоколе. Включение более детальных логов опцией verb 6 также не раскрыло глаза. И тут в tcpdump бросилось в глаза то что от клиента приходит всего один пакет, а сервер в ответ отвечает от 5-ю до 20-ю, а может и более пакетами. Чтобы проверить проходимость больших пакетов с клиента ping-анули сервер пакетами размером 16 килобайт. В ответ небыло получено ни одного ответа. Проблема была явно в связи о чём и говорила запись в логе. Клиенту осталось разобраться с провайдером.

Установка RAR в Fedora

В репозиториях Fedora и Centos нет архиватора RAR. Если вам нужно только рапаковывать RAR архивы то для этого достаточно установить пакет unrar из репозитория RPM Fusion YUM. Если же вам нужно создавать RAR архивы то нужно загрузить и установить полный пакет RAR из DAG.
Continue reading Установка RAR в Fedora

Удаление списка ожидающих заданий bacula

Случается, что на сторадже заканчивается место до того как bacula соберётся удалять старые файлы. В результате вы получаете одно оповещение, что задача не была выполнена и второе от мониторинга, что закончилось место. Если задача одна-две, это не проблема. Удалили руками и всё в порядке. Но ситуация меняется когда задач много и тем более вы не среагировали за период более чем один цикл бэкапа. Очередь закупоривается и пока она не будет выполнена целиком новые задания не будут выполнены. Данный скрипт позволяет по очереди удалить все задания начиная с последнего по очереди, чтобы дойдя до первого не стартовало следующее за ним.

#!/bin/bash

for ID in `echo 'status dir running' | bconsole | sed -n '/Running Jobs:/,/^$/p' | sed -n '/^=\+$/,/^=\+$/p' | grep -v '^=\+$' | awk '/is waiting/{print $1}' | sed -e '1!G;h;$!d'` ; do
    if [[ ! ${ID} =~ ^[0-9]+$ ]] ; then
      echo "JobID \"${ID}\" is not a number! Skipping."
    else
      echo -e "Do you want to kill waiting job ${ID}"
      read -p 'Type YES if you really want to delete job: ' input
      if [[ ! ${input} =~ ^[Yy]$  ]] ; then
        echo -e "Skip job ${ID}.\n"
        continue
      else
        echo "cancel jobid=${ID}" | bconsole
      fi
    fi
done

Получение списка соответствия портов рейд контроллера дискам в системе

Имеем RAID контроллер который экспортирует свои диски в систему как набор дисков (JBOD).
Нужно получить какой физический порт какому устройству в системе соответствует.

Пример был сделан для контроллера 3ware и CentOS release 6.5 (Final). Но с небольшими поправками подойдёт и для других контроллеров.

Unit  UnitType  Status         %RCmpl  %V/I/M  Stripe  Size(GB)  Cache  AVrfy
------------------------------------------------------------------------------
u0    JBOD      OK             -       -       -       931.513   Ri     OFF
u1    JBOD      OK             -       -       -       1863.02   Ri     OFF
u2    JBOD      OK             -       -       -       1863.02   Ri     OFF
u3    JBOD      OK             -       -       -       1863.02   Ri     OFF

VPort Status         Unit Size      Type  Phy Encl-Slot    Model
------------------------------------------------------------------------------
p0    OK             u0   931.51 GB SATA  0   -            WL1000GSA64RA100B
p1    OK             u1   1.82 TB   SATA  1   -            WDC WD2002FYPS-02W3
p2    OK             u2   1.82 TB   SATA  2   -            WDC WD2002FYPS-02W3
p3    OK             u3   1.82 TB   SATA  3   -            WDC WD2002FYPS-02W3

Continue reading Получение списка соответствия портов рейд контроллера дискам в системе

Firefox, Thunderbird, SeaMonkey запрет установки расширений XPI

Как запретить пользователям устанавливать расширения Firefox, Thunderbird или SeaMonkey?
Необходимо создать два файла.
Для Windows 32-бит
C:\Program Files\Mozilla Firefox\defaults\pref\local-settings.js
Для Windows 64-бит
C:\Program Files (x86)\Mozilla Firefox\defaults\pref\local-settings.js

pref("general.config.filename", "mozilla.cfg");
pref("general.config.obscure_value", 0);

Для Windows 32-бит
C:\Program Files\Mozilla Firefox\mozilla.cfg
Для Windows 64-бит
C:\Program Files (x86)\Mozilla Firefox\mozilla.cfg

// Первая строка с коментарием необходима так как 
// парсер специально игнорирует первую строку в этом файле
// Запрет инсталяции XPI плагинов
lockPref("xpinstall.enabled", false);

Continue reading Firefox, Thunderbird, SeaMonkey запрет установки расширений XPI

Как снифить протокол приложения или пользователя

Ядро Linux начиная с версии 2.6.14 предоставлет возможность перехватывать пакеты из userspace которые затем можно записывать используя фильтр пакетов ядра.

В таблицу INPUT iptables в самом верху добавить правило

-A INPUT -m connmark --mark 1 -j NFLOG --nflog-group 30

В таблицу OUTPUT в самом верху добавить

-A OUTPUT -m owner --uid-owner 1006 -j CONNMARK --set-mark 1
-A OUTPUT -m connmark --mark 1 -j NFLOG --nflog-group 30

А затем запустить dumpcap чтобы он сохранил в файл протокол обмена

# dumpcap -i nflog:30 -w uid-1006.pcap

И сам файл потом открыть при помощи WireShark.
Источник

Пакетная очистка вируса из EXIF информации в картинках

Сегодня получили абузу от апстрима чьи IP адреса мы используем на одном из серверов с shared хостингом. Краткая суть заключалась в том что на таком-то сайте был обнаружен файл содержащий вирус.

|2014-09-23 12:53:44 CEST |41522804 |JPG:PHPAgent-A Trj |xxx.xxx.xxx.xxx |*******.*** |http://www.*******.***/media/k2/items/cache/12abae3c81505932f6f2610e7cdfbe24_S.jpg

Картинка представляла собой небольшую иконку и файл занимал 4.6 килобайт. Внутри оказалась EXIF информация, что для такой малоформатной иконки было странным.

Exif Byte Order                 : Little-endian (Intel, II)
Make                            : /.*/e
Camera Model Name               : eval(base64_decode('aWYgKGlzc2V0KCRfUE9TVFsienoxIl0pKSB7ZXZhbChzdHJpcHNsYXNoZXMoJF9QT1NUWyJ6ejEiXSkpO30='));
Comment                         : CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 85.

Continue reading Пакетная очистка вируса из EXIF информации в картинках

Как избавиться от диакритики

Один из моих bash скриптов обрабатывающих входящие счета от чешской компании вдруг сломался. Оказалось, что тот кто фомирует счета допустил ошибку в шаблоне и одна из букв перестала быть с диакритикой. Чтобы впредь из-за такой мелочи не ломался скрипт я решил избавить входящий документ от диакритики полностью. Можно было использовать recode но зачем если sed справляется с транслитерацией не менее быстро, а главное что он имеется в любой *nix системе.

echo "Daňový portál" | sed 'y/áéíóúýčďěňřšťžůÁÉÍÓÚÝČĎĚŇŘŠŤŽŮ/aeiouycdenrstzuAEIOUYCDENRSTZU/'
Danovy portal

Как узнать путь откуда запущен bash скрипт

BASEDIR=$(readlink -e "$0")
if [ $? -ne 0 ] ; then
  echo -e "Script path get error."
  exit 1
fi
BASEDIR="${BASEDIR%/*}"
echo "${BASEDIR}" 
exit 0

В дополнение к команде readlink есть ещё realpath и realname которые вернут полный путь и имя переданного им файла. Разумеется файл должен существовать.

Но внимание! Приведённые выше команды вернут путь на сам файл даже если скрипт запустили через симлинк (symlink). Например может понадобиться чтобы скрипт мог что либо записать в папку из которой был запущен даже через симлинк. Чтобы этого добиться необходимо поступить например вот так:

SAVEDIR=`pwd`
BASEDIR=`cd "$(dirname "$0")" && pwd`
cd "${SAVEDIR}"
echo -e "${BASEDIR}"
exit 0