Интересный баг mysql

Официальный логотип Mysql

По долгу службы пришлось мне отправиться в длительную поездку. Компьютер с собой не возьмешь, и поэтому приспичило меня залить дамп базы Mysql на ноутбук с OpenSuSe 11.0. Dump отказался заливаться, ругнулся вот так:

ERROR 1221 (HY000) at line 3: Incorrect usage of UNION and INTO

Код хранимой функции был чистый, давным-давно вылизанный и ошибок в нем не было. Выяснилось, что на старых версиях mysql может не работать вот такая конструкция:

select 1 into @`avar` from (select 1 union select 1) `a`;

хотя сам запрос:

select 1 from (select 1 union select 1) `a`;

синтаксически правильный и имеет право на жизнь. Баг в конце концов поправили (подробности здесь), но в стандартных репозиториях OpenSuSe 11.0 (OSS, Non-OSS, Debug и Updates) версия mysql осталась старая, с багом.

Проблема лечится подключением репозитория MySQL и обновлением до последней версии сервера mysql.

Что делать, если стащили пароли

Компьютерная безопасность

Недавно с моим другом произошла неприятная история. Он где-то подцепил трояна, который спер пароли FTP доступа к одному из его сайтов, и в результате злоумышленник смог залить вредоносный код в html и js файлы на его VDS. Мы проблему определили довольно оперативно, и также быстро ее устранили.

Чтобы эта неприятная ситуация не повторялась, я написал маленький скриптик:

/usr/bin/find /home -mtime -1 -print | mail -s “Modified Files” root@localhost >/dev/null 2>&1

Он работает какое-то время, и пересылает на заданную почту список файлов, которые были изменены за последние сутки. В этом случае команда find просматривает все файлы рекурсивно, начиная с директории /home. Это выглдит примерно так:


/home/user1/data
/home/user1/data/logs
/home/user1/data/logs/site1.tld.access.log
/home/user1/data/logs/site2.tld.access.log
/home/user1/data/logs/site2.tld.error.log
/home/user1/data/logs/site2.tld.access.log.0.gz
/home/user1/data/logs/site3.tld.access.log.0.gz
/home/user1/data/logs/site3.tld.error.log
/home/user1/data/logs/site3.tld.access.log
/home/user1/data/logs/site1.tld.access.log.0.gz
/home/user1/data/logs/site3.tld.error.log.0.gz
/home/user1/data/etc
/home/user1/data/etc/site1.tld.webalizer.current
/home/user1/data/etc/site1.tld.webalizer.hist
/home/user1/data/etc/site3.tld.webalizer.current
/home/user1/data/etc/site3.tld.webalizer.hist
/home/user1/data/etc/site2.tld.webalizer.current
/home/user1/data/etc/site2.tld.webalizer.hist
/home/user1/data/www/site3.tld/webstat/usage.png
/home/user1/data/www/site3.tld/webstat/index.html
/home/user1/data/www/site3.tld/webstat/daily_usage_201001.png
/home/user1/data/www/site3.tld/webstat/hourly_usage_201001.png
/home/user1/data/www/site3.tld/webstat/usage_201001.html
/home/user1/data/www/site3.tld/webstat/ctry_usage_201001.png
/home/user2/data
/home/user2/data/logs
/home/user2/data/logs/user2.tld.error.log
/home/user2/data/logs/user2.tld.access.log
/home/user2/data/logs/user2.tld.error.log.0.gz
/home/user2/data/logs/user2.tld.access.log.0.gz
/home/user2/data/etc
/home/user2/data/etc/user2.tld.webalizer.current
/home/user2/data/etc/user2.tld.webalizer.hist
/home/user2/data/www/user2.tld/webstat/index.html
/home/user2/data/www/user2.tld/webstat/usage.png
/home/user2/data/www/user2.tld/webstat/daily_usage_201001.png
/home/user2/data/www/user2.tld/webstat/hourly_usage_201001.png
/home/user2/data/www/user2.tld/webstat/usage_201001.html
/home/user2/data/www/user2.tld/webstat/ctry_usage_201001.png
/home/user4/data/logs
/home/user4/data/logs/site3.tld.access.log
/home/user4/data/logs/site3.tld.access.log.0.gz
/home/user4/data/logs/site3.tld.error.log
/home/user4/data/etc
/home/user4/data/etc/site3.tld.webalizer.current
/home/user4/data/etc/site3.tld.webalizer.hist
/home/user4/data/www/site3.tld/webstat/index.html
/home/user4/data/www/site3.tld/webstat/usage.png
/home/user4/data/www/site3.tld/webstat/daily_usage_201001.png
/home/user4/data/www/site3.tld/webstat/hourly_usage_201001.png
/home/user4/data/www/site3.tld/webstat/usage_201001.html
/home/user4/data/www/site3.tld/webstat/ctry_usage_201001.png

Как видим, сейчас никакого криминала не наблюдается. Изменились только логи и статистика, что и должно происходить раз в сутки. Если же файлы поменялись без моего ведома, я это увижу. Скрипт можно запихнуть в cron, и запускать раз в сутки.

OpenSUSE 11.2 и видеокарта ATI Radeon x1650 Series

OpenSuSe logo

Я фигею, дорогая редакция! Со времен OpenSUSE 11.1 не так много воды утекло, однако изменения произошли кардинальные.

Во-первых, компания ATI выкинула поддержку карточки ATI Radeon x1650 Series из новейших родных дров. Последняя версия драйвера на Radeon x1650 на сегодняшний день датируется 26 марта 2009 года, и она не совместима с новейшим XOrg 7.4, используемым в OpenSuSe 11.2. Если пойти на хитрость, и скачать действительно последнюю версию драйвера (9.11) по прямой ссылке, то выяснится, что драйвер может заработать под новым XOrg, но не с этой карточкой (смотрим Release Notes). Когда будет сделана поддержка родных дров этой карты для OpenSuSe 11.2 – неизвестно.

Во-вторых, к счастью появился драйвер c открытым кодом под эту карточку, и он таки вошел в дистрибутив OpenSuSe 11.2. В нем даже реализована экспериментальная поддержка 3D ускорения, которая периодически работает, но пока что слишком глючно. Проверял на фильмах и играх – фильмы работают на ура в полноэкранном режиме; игры могут рушиться, если текстур в движке очень много. К примеру, Quake3 пошел без проблем (после обновления драйвера), TileRacer периодически сыпется с ошибкой Segmentation fault.

В-третьих, более-менее прямо сделана поддержка моей веб камеры, качество изображения в ней под линуксом значительно хуже чем под виндой, но все же она работает без ошибок и со Skype, и с Pidgin, и с Cheese.

Поддержка моей DVB карты Prof Revolution DVB-S2 7301 PCI не реализована родными драйверами, но они легко находятся здесь, огромное спасибо автору за качественные драйвера и патчи к ядру. Качаем исходники, собираем и ставим – все как обычно.

KDE4 мне показался сырым в этом дистрибутиве, и я перешел на Gnome, о чем пока ни разу не пожалел.

Аудио и видео звонки в Jabber

Pidgin Logo

Собственно, предыстория здесь. Очень долгое время я искал джаббер-клиента под Linux, который бы позволял совершать голосовые и видеозвонки другим людям. Кроме древнего и уже почти мертвого проекта Jabbin, альтернатив не было. Потом появлялись полухакерские сборки Kopete с поддержкой jingle, которые были очень капризными. Но все это было не то.

Теперь же есть минимум 2 Open Source jabber клиента, которые могут совершать аудио и видеозвонки – это Empathy и Pidgin (начиная с версии 2.6.1)

Смутило вот что, когда ставишь эти клиенты через Yast, не все зависимости соблюдаются. Т.е. после установки работает только текстовый чат, но не голосовой и не видео.

Чтобы все заработало, надо установить следующие пакеты: gst-plugins-good, gst-plugins-bad, gst-ffmpeg (в OpenSuSe 11.2 они называются gstreamer-0_10-plugins-good, gstreamer-0_10-plugins-bad, gstreamer-0_10-ffmpeg). После установки перезапускаем джаббер-клиенты, вклюаем в pidgin плагин для аудио и видеозвонков и вуаля – все работает. Причем работать будет как в Empathy, так и в Pidgin

На вкус и цвет товарищей нет, но Pidgin IMHO лучше, чем Empathy – больше возможностей, плагинов и прочих фич

OpenSuSe 11.0 Настрока раскладки клавиатуры

Эти настройки желательно делать сразу, чтобы потом не было мучительно больно за бездарно потраченное время проблем с общением на разных языках. А спохватился я тогда, когда в одном окошке Skype общался с заказчиком, а в окошке Jabber’а с одним из субподрядчиков; заказчик шпрехает только на рiдной аглицкой мове, подрядчик же в основном по-русски говорит когда трезвый. И так задолбало меня переключение языка клавы, что я решил разобраться, можно ли привязать язык клавиатуры к конкретному окну в KDE.

Теоретически все просто, идем в Настройки рабочего стола Центра управления КДЕ, где методом научного тыка попадаем в раскладки клавиатуры:

Настройка раскладки клавиатуры в OpenSuSe 11.0 KDE 3.5.9, часть 1
Настройка раскладки клавиатуры в OpenSuSe 11.0 KDE 3.5.9, часть 2
Настройка раскладки клавиатуры в OpenSuSe 11.0 KDE 3.5.9, часть 3

Картинка 1, вопрос – а нахрена зачем я добавил вторую раскладку клавиатуры, если раскладка RU поддерживает латиницу? А оказывается, если оставить в настройках только одну раскладку клавиатуры (как у меня и было сделано), то рисунок на картинке 2 никогда бы не получился. При сохранении настроек политика переключения автоматически слетала в “Глобально”, а не оставалась в состоянии “Окно”. И следовательно, каждое переключение языка отражалось на всех открытых окнах. Отсюда и все проблемы с переключением клавы.

Разрыв соединения ssh по таймауту

Если есть желание поддерживать в живом состоянии свою сессию SSH, надо на стороне клиента в ~/.ssh/config или в /etc/ssh/ssh_config дописать всего пару строчек:

ServerAliveInterval 60
ServerAliveCountMax 10

Тогда клиент сам по себе будет отправлять раз в минуту запросы на сервер для поддержания активности соединения. И если в течение 10 попыток он не получит ответа, тогда сессия помрет.

Можно поддерживать сессию и со стороны сервера, тогда надо написать в /etc/ssh/sshd_config что-то вроде этого:

TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 10

Особенно полезно, если VDS используется как прокси-сервер.

Опубликовано в рубриках: Linux

Настройка проводного интернета от Билайн в OpenSuSe

В моей квартире разгром, строители начали долгожданный ремонт, в связи с чем мне пришлось на время сменить место жительства и подключиться к другому интернет-провайдеру. Особенно не заморачиваясь, решил подключиться к первому провайдеру, который проведет кабель в квартиру. Им и оказался Билайн.

Интернет от Билайна настраиваится легко под виндой, но вот со всяческими линуксами он дружить совершенно не хочет. На официальном сайте у них есть только настройки под винду да под Mac OS, и например настроить его под SuSe оказалось непросто.

Всем линуксоидам, на кого свалилось несчастье в виде интернета от Билайн, советую почитать вот эти топики:

  • http://homenet.corbina.net/index.php?showtopic=204977
  • http://homenet.corbina.net/index.php?showtopic=171860
  • и вообще посмотреть всю ветку:

  • http://homenet.corbina.net/index.php?showforum=629
  • Я у себя настроил интернет без использования kvpnc. Я так и не раскопал, как в нем можно отключить буферизацию pptp. А с включенной буферизацией иногда происходили непонятные тормоза в работе. И еще, MTU пришлось выставить ниже 1500, поскольку с MTU 1500 довольно большой процент пактов пропадал и довольно много сервисов переставало работать.

    В общем, интернет от Билайна мне не понравился. Геморрой с настройкой слишком большой, чтобы я и дальше пользовался услугами этого провайдера.

    P.S. Я тут из Черногории недавно вернулся, начинаю потихоньку выкладывать материалы о поездке.

    Как подружить вебкамеру Genius e Messenger 112 и OpenSUSE

    Genius e-Messenger 112, отвратительная веб-камера

    Вебкамера Genius e Messenger 112 одна из самых дешевых, и одна из самых хреновых. Родные драйвера есть только под винду, а под linux она без напильника и танцев с бубном работать не желает.

    Итак, если вы счастливый обладатель OpenSUSE версии до 11.1 (версия ядра до 2.6.27), то камеру завести относительно несложно. Надо установить пакет gspcav, наложить на него патч, собрать и установить модуль gspca — камера заведется без проблем.

    Но если вы несчастный обладатель самого глючного дистрибутива OpenSUSE, ваши беды не закончились на его установке. Дело в том, что начиная с версии ядра 2.6.27 программисты решили вымахнуться и перенесли поддержку драйверов gspca из отдельного пакета в состав ядра. И разумеется, прозевали поддержку этой злосчастной камеры. Правда, пообещали, что начиная с версии ядра 2.6.28 эта камера будет работать.

    Но на сегодняшний день последней версией ядра для OpenSUSE 11.1 является 2.6.27, поэтому или придется драйвер собрать руками, или скачать / ждать новую версию ядра. Ждать мне было лень, поэтому я скачал исходники ядра, и поправил файл gspca_pac207.c, дописав одну выделенную строчку:


    528 static const __devinitdata struct usb_device_id device_table[] = {
    529 {USB_DEVICE(0x041e, 0x4028)},
    530 {USB_DEVICE(0x093a, 0x2460)},
    531 {USB_DEVICE(0x093a, 0x2463)},
    532 {USB_DEVICE(0x093a, 0x2464)},
    533 {USB_DEVICE(0x093a, 0x2468)},
    534 {USB_DEVICE(0x093a, 0x2470)},
    535 {USB_DEVICE(0x093a, 0x2471)},
    536 {USB_DEVICE(0x093a, 0x2476)},
    537 {USB_DEVICE(0x093a, 0x2472)},
    538 {USB_DEVICE(0x2001, 0xf115)},
    539 {}
    540 };

    Модуль собрался, и заработал, но с глюками. Cheese, Skype работают нормально, а вот camorama не завелась. Яркость изображения регулируется с помощью v4lctl, а вот как регулировать контрастность или цветовой баланс — хз. В старой версии ядра таких проблем не было.

    OpenSUSE, Skype и отправка SMS

    Skype Logo

    На сегодняшний день последней версией скайпа для OpenSUSE является версия 2.0.0.72. Возможность отправлять СМСки в скайпе появилась только с версии 2.5, но как оказалось, отправить SMS можно и из OpenSUSE, и из Ubuntu с использованием Skype API on Linux.

    Для того, чтобы заработала отправка SMS, надо установить сам Skype, а также Python wrapper Skype4Py, и утилиту Skysentials.

    После запуска видим Skysentials видим вполне интуитивно понятную тулзу для отправки SMS:

    Отправка СМС из скапа под линуксом

    Отправка СМС не бесплатная, но сопоставима по стоимости с отправкой с мобильника. А с учетом того, что сейчас скайп активно рассылает ваучеры на пополнение баланса, можно и попробовать.

    Я испытал это чудо буржуйской техники, и выяснил две вещи.

  • Отправка СМС отлично работает под OpenSUSE, только вот Skype4Py пришлось чуть-чуть напильником доработать (в первой строчке заменить python2.5 на python2.6)
  • СМС в Черногорию отправить нельзя.
  • Как пережать видео из 3gp в AVI

    Многие мобильные телефоны позволяют снимать видео на встроенную камеру и сохранять его в формате 3gp. Мой любимый mplayer отказывается показывать видео в формате 3gp, а посмотреть хотелось бы.

    Для работы с видео и звуком под Linux есть как минимум 2 классных инструмента, mencoder и ffmpeg. И чтобы посмотреть видео, снятое на телефоне SonyEricsson K750i, я его преобразовал в формат avi:

    mencoder 007.3gp -ovc lavc -lavcopts vcodec=msmpeg4v2 -oac mp3lame -lameopts vbr=3 -o 007.avi

    Размер файла при этом вырос в 2 раза; и видео, и звук оказались в приемлемом качестве. Но точно такой же финт не сработал с видео, отснятым на телефон Nokia 6223, там используется какой-то нестандартный битрейт

    Можно попробовать вылечить так:

    mencoder 007.3gp -ovc lavc -lavcopts vcodec=msmpeg4v2 -oac mp3lame -srate 8000 -lameopts vbr=3 -o 007.avi

    Так выходной файл все-таки получился, но звук был отвратительным. Нельзя было разобрать ни слова, звук стал более быстрым и тональность голосов изменилась

    Я попробовал последний вариант:

    ffmpeg -i 007.3gp -f avi -acodec libmp3lame 007.avi

    Это сработало, голос стал узнаваем, но по-прежнему качество звука в декодируемых с нокии клипах оставляет желать лучшего.

    Опубликовано в рубриках: Linux