Showing posts with label linux. Show all posts
Showing posts with label linux. Show all posts

2012/01/24

Конвертация MyISAM -> InnoDB

По мотивам предыдущего поста. :))
В интернете много всяких заметок по поводу преобразования MyISAM в InnoDB: и с помощью всяких скриптов, и утилит типа mysql_convert_table_format, и даже с помощью sed. Но нам сложности не нужны, поэтому предлагаю самый простой вариант. Во-первых, остановим сервер:
# /etc/rc.d/mysql-server stop
Затем нужно убедиться, что в конфиге /etc/mysql/my.cnf нет строчки skip-innodb, а также присутствует строчка типа:
innodb_data_file_path = ibdata1:100M:autoextend
Затем логинимся в консоль MySQL:
mysql -u <username> -p
И вводим команду:
ALTER TABLE <tablename> ENGINE='InnoDB';
Вот и всё! Моя гиговая табличка преобразовалась за шесть минут.

PS: конечно, рекомендую сделать бекап базы прежде чем конвертировать - на всякий случай.

2012/01/12

Восстановление MySQL MyISAM

Если у вас в логах внезапно начали появляться ошибки типа "Table './mybd/cw_table' is marked as crashed and last (automatic?) repair failed", то значит наш дорогой MyISAM дал сбой. А так как автовосстановления в нем не предусмотрели, то придется вручную нам это сделать. Во-первых, остановим сервер mysql:
# /etc/rc.d/mysql-server stop
Воспользуемся утилитой myisamchk для восстановления таблицы с ключом -r, что означает recovery:
# myisamchk -r cw_table
Это помогает в большинстве случаев. При запущенных случаях, если посыпались много таблиц, то можно проверить всю базу целиком:
# myisamchk --silent --force --fast --update-state /var/lib/mysql/mybd/*.MYI
Если сбои произошли в результате смерти жесткого диска и файлы восстановлялись с помощью черной магии, то вместо опции --fast лучше задать --medium-check или же --extended-check, если времени вагон / небольшие таблицы / мало индексов.

2011/10/20

Matplotlib - анимация в реальных условиях

На сайте проекта - http://matplotlib.sourceforge.net/examples/index.html - даны базовые примеры анимации с графиками, которые, как обычно бывает, плохо работают в боевых условиях. Например, у меня имеется прога на GTK, с отдельным потоком, где производятся все вычисления для графиков. По-хорошему, там же и надо вызывать функцию перерисовки, но не тут-то было!

Иксы выкатывают мне неведомую ошибку:
The program 'panel.py' received an X Window System error. This probably reflects a bug in the program. The error was 'BadDrawable (invalid Pixmap or Window parameter)'. (Details: serial 6974 error_code 9 request_code 62 minor_code 0) (Note to programmers: normally, X errors are reported asynchronously; that is, you will receive the error a while after causing it. To debug your program, run it with the --sync command line option to change this behavior. You can then get a meaningful backtrace from your debugger if you break on the gdk_x_error() function.)
Я так и не понял почему такое может происходить, поэтому начал искать другой способ запуска функции через определенный промежуток времени. В этом мне помог такой кодес:
import gobject
gobject.timeout_add(1000, self.animate)
 Такой замес тупо вызывает функцию animate каждую секунду. Все довольны!

2011/10/07

Подключение некоторых Android 2.3 based устройств к Linux

Не знаю уж почему так делают, но на некоторых прошивках Android 2.3 при подключении к компу устройство по умолчанию распознается как модем, а не как флешка, что сопровождается подобными деферамбами dmesg:
[81405.955234] usb 2-2: new high speed USB device number 7 using ehci_hcd
[81406.098927] cdc_acm 2-2:1.0: This device cannot do calls on its own. It is not a modem.
[81406.099041] cdc_acm 2-2:1.0: ttyACM0: USB ACM device
На этом всё, то есть как флешка оно не определяется. Итак, чтобы исправить это, заходим в телефон и набираем номер *#7284#, выскочит некая PhoneUtil, где и надо выбрать в обоих случаях пункт PDA. Вот и всё, теперь андроид монтируется как в старые добрые времена.

2011/07/24

Установка Linux на долбаную флешку

Сегодня я закоспектирую тут, как правильно ставить НЕ live дистрибутив Linux на флешку, в моем случае Debian, а то я забываю некоторые моменты и парюсь с этим каждый раз. =\

Итак, всё начинается с форматирования флешки с помощью fdisk и mkfs. Я ставлю ФС ext2, потому что там нет журналирования, а с журналом флешка быстро загнется. Можно воспользоваться и ext3/4 с отключенным журналом, но это дополнительный гемор. Кстати, рекомедую раздел создавать именованый, потом станет понятно зачем:
# mkfs.ext2 -L TRANSCEND /dev/sdc1

Монтируем флешку:
# mount /dev/sdc1 /mnt

Ставим туда базовую систему:
# debootstrap --arch i386 lenny /mnt

Для Debian есть специальная утилита debootstrap, для других дистров может и нет, но можно и вручную залить туда из образа, например. После установки чрутимся в нашу новую системку:
# chroot /mnt /bin/bash

В этой системе уже можем делать что-нибудь, ставить пакеты например, но для начала надо апдейтнуть список, чтобы APT не ругался на не подписанные пакеты. Ну и сразу поставим GRUB и ядро:
# apt-get update
# apt-get install linux-image-2.6-686 grub

Пишем в /etc/fstab такую инфу, чтобы все правильно монтировалось:
LABEL=TRANSCEND / ext2 defaults,errors=remount-ro,noatime 0 1
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults,noatime 0 0
tmpfs /var/lock tmpfs defaults,noatime 0 0
tmpfs /var/log tmpfs defaults,noatime 0 0
tmpfs /var/run tmpfs defaults,noatime 0 0
tmpfs /var/tmp tmpfs defaults,noatime 0 0
И после этого начинается самая шляпа - надо сделать флешку загрузочной. Из основной системы ставим GRUB в MBR флешки:
# grub-install --root-directory=/mnt /dev/sdc

И можно уже попробовать загрузиться, НО! Проблема в том ,что Lenny использует GRUB 0.**, а все более-менее современные системы - GRUB 1.**, а они смотрят конфиги в разных местах, /boot/grub/menu.lst и /boot/grub/grub.cfg соотвественно. Грузимся через QEMU:
# qemu -hda /dev/sdc

Получаем консоль граба, который не нашел конфиг, вводим туда такие фразы:
set root=(hd0,msdos1)
linux /vmlinuz root=LABEL=TRANSCEND
initrd /initrd.img
boot

Все! Система загружается. Дальше логинимся под рутом без пароля и ставим нужный GRUB в MBR:
# update-grub
# grub-install /dev/hda

Последний момент, надо в /boot/grub/menu.lst задать корень через метку флешки, потому что на разных компах файлы устройства флешки могут различаться:

kernel /boot/vmlinuz-2.6.22-3-686 root=LABEL=TRANSCEND ro

2011/06/26

Работа с COM портом в python: PyVISA или pySerial?

Для питона существует два модуля для работы с последовательными портами, я бы однозначно рекомендовал pySerial по нескольким причинам:

1. PyVISA сложен в установке, нужно дополнительно устанавливать библиотеку nivisa.
2. PyVISA не видит эмулированный через USB последовательный порт (т.е. переходник USB->COM).
3. В PyVISA нельзя задавать порт напрямую через файл устройства, например, в случае переходника USB->COM это будет /dev/ttyUSB0.

PySerial всех этих недостатков лишен, при этом очень прост в использовании. При работе с последовательным портом не надо забывать выставить одинаковые настойки на компе и собственно устройстве, в особенности это касается скорости передачи и бита четности. Все настройки могут задаваться при создании экземпляра объекта Serial или после через атрибуты.

Страница документации.

2011/03/24

Бразильский танец с бубном

Очередная моя статья в свежей прессе!

На этот раз рассуждал о настройке, оптимизации работы и обеспечении безопасности Samba-клиента в Linux.

2011/03/21

Выставляем правильное разрешение на внешнем дисплее

Как выяснилось, мой уютный ThinkPad с Арчем на борту не сильно дружит с телеком Samsung по VGA кабелю, а именно дает выставлять разрешение максимум 1024x768, хотя поддерживается там 720p (1360x768). Причину такого поведения доподлинно выяснить не удалось, но тут скорее всего два варианта: либо дрова неправильно обрабатывают EDID блок, либо этот блок неправильно формируется на телеке (либо я вообще неправильно настроил иксы).
Для исправления ситуации командуем, чтобы узнать параметры этого разрешения, так называемый VESA CVT mode line:
$ cvt 1360 768
Далее добавляем этот режим в список доступных:
$ xrandr --newmode "1360x768_60.00"   84.75  1360 1432 1568 1776  768 771 781 798 -hsync +vsync
И добавляем режим для конкретного выхода:
$ xrandr --addmode VGA1 1360x768_60.00
После этого нужное разрешение будет доступно для выбора в xrandr или фронтэнде к нему для вашего WM/DE. Я, вследствие природной лени, пользуюсь lxrandr. Чтобы каждый раз не вбивать команды, можно записать их в файлы ~/.xinitrc или ~/.xprofile - они выполнятся при старте иксов.

Либо можно добавить в xorg.conf блок типа такого:
Section "Monitor"
    Identifier "External VGA"
    Modeline "1360x768_60.00"   84.75  1360 1432 1568 1776  768 771 781 798 -hsync +vsync
    Option "PreferredMode" "1360x768_60.00"
EndSection

2011/03/03

Скринкастинг в Linux

Вы всё ещё снимаете видео о том, как похекали сайт NASA, с помощью recordmydesktop? Не позорьтесь! Вот вам кошерная команда:

$ ffmpeg -f x11grab -s 1280x800 -r 25 -g 250 -i :0.0 -sameq -vcodec qtrle out.mov

1280x800 нужно заменить в соотвествии с разрешением экрана. На мой взгляд такой набор параметров обеспечивает оптимальное соотношение скорость/качество.

2011/02/26

Liberte Linux

Чуть было не забыл, что недавно вышла в свет моя первая статья в светском журнале Хакер про дистрибутив для настоящего анонимуса!

UPD: текст статьи доступен здесь.

2011/02/14

Консоль - лучший друг линуксоида

Поэтому требует особенного внимания к себе. Недавно перешел на всеми любимый urxvt, и там есть возможность менять стандартные цвета терминала для лучшего восприятия информации. Но какие параметры за что отвечают? Вразумительного ответа в сети я не нашел и путем экспериментов выяснил сам. Во-первых, нужно создать файл, который будет выводить надписи в терминал разными цветами. Вот он:

#!/bin/bash

echo -e "\e[0;30mCOLOR_BLACK\t\e[1;30mCOLOR_BOLD_BLACK"
echo -e "\e[0;31mCOLOR_RED\t\e[1;31mCOLOR_BOLD_RED"
echo -e "\e[0;32mCOLOR_GREEN\t\e[1;32mCOLOR_BOLD_GREEN"
echo -e "\e[0;33mCOLOR_YELLOW\t\e[1;33mCOLOR_BOLD_YELLOW"
echo -e "\e[0;34mCOLOR_BLUE\t\e[1;34mCOLOR_BOLD_BLUE"
echo -e "\e[0;35mCOLOR_PURPLE\t\e[1;35mCOLOR_BOLD_PURPLE"
echo -e "\e[0;36mCOLOR_CYAN\t\e[1;36mCOLOR_BOLD_CYAN"
echo -e "\e[0;37mCOLOR_WHITE\t\e[1;37mCOLOR_BOLD_WHITE"

Настройки urxvt надо записывать в файл ~/.Xdefaults, среди которых есть color0-15, соответствие которых с выводом вышенаписанного скрипта представлено ниже:

color0 = COLOR_BLACK
color1 = COLOR_RED
color2 = COLOR_GREEN
color3 = COLOR_YELLOW
color4 = COLOR_BLUE
color5 = COLOR_PURPLE
color6 = COLOR_CYAN
color7 = COLOR_WHITE
color8 = COLOR_BOLD_BLACK
color9 = COLOR_BOLD_RED
color10 = COLOR_BOLD_GREEN
color11 = COLOR_BOLD_YELLOW
color12 = COLOR_BOLD_BLUE
color13 = COLOR_BOLD_PURPLE
color14 = COLOR_BOLD_CYAN
color15 = COLOR_BOLD_WHITE

Немного повозившись поставил следующие цвета:

URxvt.color0: #333333
URxvt.color1: #d43a2a
URxvt.color2: #00c800
URxvt.color3: #cdcd00
URxvt.color4: #005d9a
URxvt.color5: #cd68cd
URxvt.color6: #009f9f
URxvt.color7: #dddddd
URxvt.color8: #333333
URxvt.color9: #d43a2a
URxvt.color10: #00c800
URxvt.color11: #cdcd00
URxvt.color12: #005d9a
URxvt.color13: #cd68cd
URxvt.color14: #009f9f
URxvt.color15: #dddddd

Скриншот всего этого непотребства:

2010/08/21

MinimalGray — тема для OpenBox

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


Скачивать архив тут. Распаковать нужно в /usr/share/themes или ~/.themes
Материал, использованный при подготовке.

2010/08/18

slock — самый лучший блокиратор экрана

Про эту программу можно с уверенностью сказать — она делает что-то одно и делает это хорошо. Slock блокирует и гасит экран без лишних понтов, разблокировка происходит без всяких приглашений ввести пароль, его просто надо ввести и нажать Enter. Я в первый раз чуть не обоссался, когда всё погасло и ничего не реагировало, так что не повторяйте моих ошибок.

А классический скринсейвер — это, по-моему, слишком расточительно. Мало того, что он жрет много процессорного времени, если там стоит мало-мальски серьезная сцена. Так и ещё много ненужного функционала, который работает постоянно, как например демон в xscreensaver.

Правда при использовании slock возможно придется изменить параметр, отвечающий за отключение экрана из-за неактивности в xorg.conf (по умолчанию 10 минут, маловато), нужно добавить в секцию ServerFlags (у меня этой секции вообще не было, пришлось добавить и её) следующую опцию: Option "BlankTime" "240". 240 — количество минут, оптимальное на мой взгляд время, чтобы экран точно не погас во время просмотра какого-нибудь фильма. :)

Ах да, страничка программы. Но лучше — ищите в репозиториях своих дистрибутивов.

2010/07/28

Поднимаем ZNC на gentoo

ZNC - известный irc bouncer, т.е. выступает в качестве прокси при соединении с серверами irc. Полезен не только в том плане, что сохраняет личные сообщения и статус онлайн в отсутствие клиента, но и может шифровать трафик от клиента до себя.

Ну и после появления у себя уютненького сервера на gentoo, я, разумеется, начал ставить туда всё что ни попадя. :) Собственно говоря, процесс поднятия ZNC практически одинаков для всех систем, под которые он предназначен, отличается лишь инсталляция. Я использовал emerge:
# emerge irc-net/znc
Добавление пользователя проще всего делать в интерактивном режиме:
$ znc --makeconf
Тут он спросит всякие настройки типа юзер/логин/порт/сервер/канал и сформирует конфиг ~/.znc/configs/znc.conf
Всё, теперь простой командой $ znc в фоне запускается процесс, слушающий порт, который был указан при конфигурации. Подключаться к нему нужно так, если бы это был простой irc сервер, т.е. в настройках указываем ip/port - физического сервера, на котором работает znc, и user/password - того, которого создали при конфигурировании znc.

Более подробная информация: http://en.znc.in/wiki/ZNC

2010/07/19

Скрипт для изменения ориентации экрана (Lenovo Thinkpad X200t)

Забинден у меня на кнопочку, меняет ориентацию экрана (а также стилуса и тачскрина) по часовой стрелке при каждом нажатии. По идее должен подходить ко всем планшетным ноутам. Единственное, что может потребоваться изменить - это имена устройств, которые можно узнать командой xsetwacom --list dev.

#!/bin/bash

function set_normal {
xrandr -o normal
xsetwacom set cursor Rotate none
xsetwacom set touch Rotate none
xsetwacom set eraser Rotate none
orientation="normal"
}

function set_right {
xrandr -o right
xsetwacom set cursor Rotate cw
xsetwacom set touch Rotate cw
xsetwacom set eraser Rotate cw
orientation="right"
}

function set_left {
xrandr -o left
xsetwacom set cursor Rotate ccw
xsetwacom set touch Rotate ccw
xsetwacom set eraser Rotate ccw
orientation="left"
}

function set_inverted {
xrandr -o inverted
xsetwacom set cursor Rotate half
xsetwacom set touch Rotate half
xsetwacom set eraser Rotate half
orientation="inverted"
}

orientation="$(xrandr --query --verbose | grep 'LVDS1 connected' | awk '{print $5}')"

if [ "$orientation" = "normal" ]; then
        set_right
elif [ "$orientation" = "right" ]; then
        set_inverted
elif [ "$orientation" = "inverted" ]; then
        set_left
elif [ "$orientation" = "left" ]; then
        set_normal
fi

Использование wpa_supplicant

Очередным шагом в сторону стремления к минимуму энергии стал отказ от всяких богомерзких Network Manager'ов. Мало того, что они жрут оперативку и глючат, так ещё и занимают место в системном трее! Безобразие. Так что wpa_supplicant. Как бы не показалось по названию, эта утилита может работать с сетями не только WPA, но и всеми остальными (беспроводными, разумеется).
В ней есть конфиг /etc/wpa_supplicant.conf в котором по умолчанию много буков, поэтому его можно смело удалить. Сразу приведу пример конфига, по которому всё станет ясно:

network={
   ssid="AP1"
   priority=10
   key_mgmt=NONE
   wep_key0=355D3671207E37DC11E9D371E3
}

network={
   ssid="AP2"
   priority=5
   psk=b20a16a0622753f26c6660cdde815131cc11dcf5b8d46d8c1c3dd003bbe7c791
}

network={
   ssid="AP3"
   priority=1
   key_mgmt=NONE
}

Видно, что конфиг состоит из блоков network, в которых собственно описываются параметры сетей, к которым wpa_supplicant будет пытаться подключаться. В примере приведены параметры сетей для статического WEP, WPA1/2 PSK и открытой сети. Параметр priority явно задает приоритет подключения, хотя он и так рассчитывается (на основании секурности и силы сигнала, что не всегда устраивает). Параметр psk - закодированный пароль, его (а точнее весь блок network) можно получить командой wpa_passphrase. Ну и запуск всего этого дела происходит командой:
wpa_supplicant -B -D wext -i wlan0 -c /etc/wpa_supplicant.conf
Стоит отметить, что происходит только ассоциация с точной доступа, IP адрес всё еще нужно получить с помощью dhcpd или dhclient. Лучше это делать не сразу же после запуска wpa_supplicant, а через некоторое время (секунд 3-5), т.к. ассоциация происходит не мгновенно.

Инвертирование цветов в X

Казалось бы, достаточно простая операция - инвертировать цвета на экране, однако далеко не все представляют, как это можно сделать средствами иксов. В основном, советовали ставить композитный оконный менеджер, но т.к. я упоротый фанат OpenBox, то это меня не устраивало. Даже в тех менеджерах, которые можно ставить отдельно от WM, т.е. в использовать вместе с ним (такие как cairo-compmgr и xcompmgr) не обладали подобной функцией. И тут я было приуныл, как решил спросить у истинного адепта линукса, наставившего меня на путь инстинный, и, да!
xcalib -invert -alter
Повесил команду на хоткей и радуюсь.

Рипаем dvd с помощью ffmpeg

Не так давно для меня процесс создания рипа двд диска был весьма темным знанием, известным лишь релизерам на рутрекер.орг. Однако всё оказалось очень даже просто (по крайней мере в линуксе):
ffmpeg -i VTS_01_1.VOB -f avi -vcodec mpeg4 -b 1500k -g 300 -bf 2 -acodec libmp3lame -ab 128k video.avi
Это типичная команда для рипа двд диска, которую можно после долгих поисков найти в мане к утилите. Фактически, два самых значительных параметра в этой команде - битрейты видео и аудио, в данном случае равные 1500k и 128k.
В каждом конкретном случае битрейт видео, разумеется, надо подбирать отдельно (если нет никаких ограничений по объему): чем более динамично видео, тем больше должен быть битрейт, по идее, для сохранения комфортной картинки. Для этого можно варьировать цифру после параметра -b и делать некий сэмпл рипа, несколько десятков секунд, просто завершить ffmpeg в процессе его работы и посмотреть что получилось.
Если исходников было несколько, то склеить их в один файл можно так:
mencoder -oac copy -ovc copy part1.avi part2.avi -o video.avi

2010/05/06

Определение транскодов в Linux - 2

В прошлой заметке я рассказывал, как определять транскоды с помощью программы Audacity. Но сейчас я внезапно обнаружил, что существует линуксовая версия широко известной в узких кругах утилиты auCDtect, гуишной надстройкой под которую является Audiochecker.

Поставляется она в виде бинарника, да и ещё сразу не хочет запускаться, выдавая ошибку:
$ ./auCDtect                                                                                    
./auCDtect: error while loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory
Нужная ему допотопная библиотека находится в соответствующем пакете (для Дебиана). Неприятно, что проверяет он только WAV файлы, поэтому лосося сперва нужно конвертировать туда, для FLAC, например, командой
$ flac -d <файлы>
Вот и сказке конец, ну вы поняли.

2010/03/23

skipfish - сканер безопасности web-приложений от Google

На днях компания Google представила свой open source инструмент для аудита безопасности web-приложений, наподобие широко известного nikto. Однако разработчик заявляет ряд преимуществ перед имеющимися решениями, среди них:
  • высокая скорость работы (~500 запросов в секунду через Интернет, ~2000 - через локальную сеть)
  • простота использования
  • хорошо продуманные тест-кейсы (весь список проверяемых уязвимостей доступен в README к программе) 
Иструмент доступен для скачивания в исходных кодах отсюда. Для компиляции мне пришлось доустановить заголовочные файлы для ssl. Далее распаковываем и компилируем.
# apt-get install libssl-dev
$ tar -xzfp skipfish-1.13b.tgz
$ cd skipfish/
$ make
В случае успеха в папке появится исполняемый файл skipfish, собственно то, что нам нужно. В папке dictionaries находятся словари, которые могут использоваться при составлении карты сайта. Словари включают в себя расширения и ключевые слова. Чем больше словарь, тем более глубокий фаззинг сайта будет проведен. Словарь по умолчанию должен называться skipfish.wl и находиться в одной папке с исполняемым файлом: нужно перенести и переименовать нужный словарь из соотвествующей папки.


Итак, приступим же наконец к сканированию! Типичная команда сканирования выглядит следующим образом:
$ ./skipfish -MEU -o ./example http://www.example.com/
Здесь "-MEU" - опции для создания отчета, чтобы всё было хорошо, "./example" - имя папки в которую будет писаться отчет, а "http://www.example.com/", как несложно догадаться, адрес сайта.

Поддержка cookie, HTTP аутентификации и прочих плюшек имеется в полном объеме. Все настройки можно глянуть по команде:
$ ./skipfish -h
Доставила динамическая консольная статистика и детализированный отчет, поражающий мозг обыденного пользователя nikto. По количеству найденных уязвимостей, на первый взгляд (на основе сканирования одного сайта), оставляет позади nikto последней версии. Респект и уважуха в общем.