суббота, 11 декабря 2010 г.

wifi и настройка интерфейсов

Итак, есть usb wifi адаптер. Задача сделать из него точку доступа. Режим master его драйвера не поддерживают, поэтому поднимем его как Ad-hoc.
Будем считать, что драйвер загружен и имеем wifi интерфейс wlan0
Примерный вид скрипта для запуска:

#!/bin/sh
ifconfig wlan0 down
iwconfig wlan0 mode ad-hoc
iwconfig wlan0 channel 5 <- канал свой свободный
#iwconfig wlan0 Bit 54Mb/s
iwconfig wlan0 essid 'virus testing' <- название вашей сети
iwconfig wlan0 key s:пароль <- ваш пароль
ifconfig wlan0 192.168.8.1 netmask 255.255.255.0 <- ip вашего интерфейса
iwconfig wlan0
ifconfig wlan0 up


Так же поднят dhcp демон слушающий этот интерфейс /etc/dhcpd.conf:
ddns-update-style ad-hoc;
subnet 192.168.8.0 netmask 255.255.255.0 {
interface wlan0;
option domain-name-servers 192.168.8.1;
option routers 192.168.8.1;
option ntp-servers 192.168.8.1;
option broadcast-address 192.168.8.0;
host ttt {
hardware ethernet 5C:4C:A9:4D:xx:xx; <- MAC адрес вашего беспроводного девайса
fixed-address 192.168.8.2;
}
}

запускаем демона в дебаг-режиме и смотрим кому и что мы выдаем: dhcpd -d

Как видим, нашему wifi девайсу с заданным MAC-адресом будет присвоен ip 192.168.8.2 и шлюз по умолчанию 192.168.8.1 и он же DNS

Теперь учитывая, что данный комп не является шлюзом и имеет связь со шлюзом через интерфейс eth0 с адресом из другой подсети, к примеру 192.168.7.50 надо использовать маскарадинг или (SNAT)

iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -o eth0 -j MASQUERADE

благодаря этому правилу у пакетов идущих на шлюз подменится "исходящий" адрес и пакеты после обработки вернуться этому компьютеру, а потом беспроводному устройству.

Ну и на шлюзе в конкретном случае надо тоже поднастроить:
политика форвард по умолчанию стоит в drop, поэтому пропустим с одного ip
iptables -A FORWARD -i eth0 -s 192.168.7.50 -p tcp -j ACCEPT
ну и дальше маскарад
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.7.50 -p tcp -j MASQUERADE

маршрут по умолчанию наш инет-интерфейс

В кратце это все. Ну еще надо поднять ДНС сервер слушающий 192.168.8.1, либо указать другой ("внешний"). Если назначать внешний ДНС, то в правилах шлюза надо еще добавить протокол udp
iptables -A FORWARD -i eth0 -s 192.168.7.50 -p udp -j ACCEPT
ну и дальше маскарад
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.7.50 -p udp -j MASQUERADE

что бы проверить, куда все и как бегает, можно использовать tcpdump
tcpdump -i wlan0 -n
будет показывать потоки через интерфейс wlan0 без трансляции ip и портов в "имена".
комбинируя с grep можно отслеживать, где затыки слушая разные интерфейсы и проследить куда и что пошло.

Android и wifi в режиме Ad-Hoc - Huaway U8500

В "штатной" поставе не может подключаться к wifi в режиме Ad-Hoc (вообще их не видит).
Жмем "добавить сеть Wi-Fi" и в ручную указываем "Сетевой SSID". Затем идем в /data/misc/wifi и редактируем файлик wpa_supplicant.conf

ГЛАВНОЕ!!! Проверить права и владельца на этот файлик (должно быть 660 system.wifi) - иначе wifi НЕ ЗАПУСТИТСЯ - будет писать "Не удалось запустить Wi-Fi"!!!

В начало добавляем строку:

ap_scan=2 (при этом будут сканироваться все сети, в том числе и ad-hoc)

а затем в раздел
network={
ssid="наш ssid"
scan_ssid=1
key_mgmt=NONE
priority=20
wep_key0="пароль"<---------- добавляем эту строку если есть пароль и wep
mode=1 <---------- добавляем эту строку (для указания ad-hoc)
}

сохраняем, и идем обратно в системные настройки wifi, точка должна увидеться и получить от нее адресс и т.п.

Есть метод с заменой файла /system/bin/wpa_supplicant на пропатченную версию, но у меня на U8500 не пошел.

Android и перемонтирование раздела system - Huaway U8500

Для изменений на разделе system требуется его перемонтировать с возможностью записи:

mount -o remount,rw /dev/block/mtdblock4 /system

либо через

adb remount - но у меня не пошло, да и adb root - тоже не пошло с таким сообщением "adbd cannot run as root in production builds" - типа - не девелоперский девайс.

Android и SDK - Huaway U8500

Брать здесь - бывает по 5 минут ждешь ответа от сервера.
http://developer.android.com/sdk/index.html

Скачал, а там самый минимум, даже adb нет. запускаем tools/android в оболочке настраиваем проксик если надо, Android Repository - Android SDK Platform-tools. Апдейтим.

Запускаем
adb start-server
затем
adb devices
и фиг вам. Не хочет устройство определяться. Для это нужна утилитка usb_modeswitch и база устройств к ней usb-modeswitch-data.
Еще можно поменять права, у меня девайс определился как /dev/sr3, ставим 666.
http://www.draisberghof.de/usb_modeswitch/
Компилируем, базу копируем в /etc/usb_modeswitch.d, если надо прописываем в правила udev
И запускаем
usb_modeswithc -c /etc/usb_modeswitch.d/12d1:1031 (это для Huaway U8500, lsusb вам в помощь)
Все, режим устройства мы переключили и теперь
adb kill-server
adb start-server
adb devices
видим наш девайс, затем получим шел
adb shell
готово, работает - правда от шела не стоит ожидать всех возможностей, он сильно урезан.

пятница, 10 декабря 2010 г.

Android и wifi - Huaway U8500

Network Info II
вся инфа о телефоне и его сетях +++
http://4pda.ru/forum/index.php?showtopic=201289

Barnacle Wifi Tether
раздаем инет через wifi - куча фишек
http://4pda.ru/forum/index.php?showtopic=171632
Если выдает ошибку Failed to connect to supplicant, то включи в опциях галку Skip wpa_supplicant

shank.portscaner - ошибка

WiFi Manager
поиск сетей и их рейтинг - полезно +++
http://4pda.ru/forum/index.php?showtopic=167109

WiFi Buddy
поиск сетей - полезно +++
http://4pda.ru/forum/index.php?showtopic=133246

NetCounter
счетчик разного трафика
http://4pda.ru/forum/index.php?showtopic=128310

IP Manager
Настраивает профили wifi - удобно, когда несколько мест без dhcp
http://4pda.ru/forum/index.php?showtopic=170799

WeFi - Automatic WiFi
база свободных точек wifi с привязкой к координатам
http://4pda.ru/forum/index.php?showtopic=172290

Android и терминал - Huaway U8500

просмотр сетевых интерфейсов - netcfg (ifconfig - сильно урезанный)

Полезные команды для проверки wifi

iw dev wlan0 info
iw dev wlan0 scan

среда, 8 декабря 2010 г.

Android и список софта - Huaway U8500

Учет трафика - кто и сколько "съел" - НО только для android >=2.2
TrafficStats
http://4pda.ru/forum/index.php?showtopic=183359

Файрвол - с этого и следует начинать. Нужен root.
Droid Wall
http://4pda.ru/forum/index.php?showtopic=131323

Сохранение и восстановление настроек APN - всякое бывает - подключишься к другому оператору и т.п.
APN Backup & Restore
http://4pda.ru/forum/index.php?showtopic=137269

Навигация Навител
http://rutracker.org/forum/viewtopic.php?t=3089818
без карт

Навигация IGO
http://4pda.ru/forum/index.php?showtopic=147776&st=480#entry4546541

Для jabber
http://www.beem-project.com/

Русская клавиатура
ruKeyboard
http://4pda.ru/forum/index.php?showtopic=134073
Активируется в системных настройках -> Locale & Text (Язык и клавиатура), далее активировать Russian Keyboard. Потом долго тапнуть на любом поле ввода и выбрать "Способ ввода" и там "Russian Keyboard"

Skype
Skype Lite
http://4pda.ru/forum/index.php?showtopic=122032

SSH
ConnectBot
http://4pda.ru/forum/index.php?showtopic=129287

Раскладки клавиатуры
Много вариантов, но ближе
http://board.riot.ru/showthread.php?t=17314&page=1
http://board.riot.ru/attachment.php?attachmentid=12178&d=1268060306
или
http://4pda.ru/forum/index.php?showtopic=130174&st=40
http://4pda.ru/forum/dl/post/407135/anysoftkeyboard_20100203.apk

Словари
ColorDict Universal Dictionary
http://4pda.ru/forum/index.php?showtopic=137225
сами словари http://www.nexusone.com.ua/soft/2-doctionary/8-colordict
и тут http://www.multiupload.com/56UVX68J1T
Для установки словаря нужно скопировать в папку /dictdata на sd карте тройку файлов:
*.dict,*.idx,*.ifo
обсуждение здесь http://4pda.ru/forum/lofiversion/index.php?t137225-300.html

Читалки
FBReaderJ
http://4pda.ru/forum/index.php?showtopic=101249
iReader
http://4pda.ru/forum/index.php?showtopic=146518


Отключать мобильный интернет
apndroid
http://4pda.ru/forum/index.php?showtopic=147639
http://www.android-info.ru/applications/apndroid-otkluchenie-mobilnogo-interneta#more-1

Для удаления приложений:
Menu => Настройка => Приложения => Управление приложениями. Удалить.
Или удерживайте приложение несколько секунд а потом ведите вниз к кнопочке "Удалить".

Android 2.1 и проблема с аккаунтом google - Huaway U8500

На смартфоне предлагается подключить аккаунт google, вводим данные, экран показывает "...выполняется вход, это займет не более 5 минут...", в итоге выскакивает сообщение "не удается установить надежное подключение к серверу для передачи данных... возможно, это временная неполадка либо ваш телефон не поддерживает передачу данных..."
Оказалось, это довольно частая трабла. Помог сброс до заводских настроек, после него все заработало как надо.

Существует обход этой "беды" - http://4pda.ru/forum/index.php?showtopic=189292&st=20#entry5782479
Получилось только после входа через программу YouTube в аккаунт.
То есть зашел в программу YouTube там в Аккаунты, там набрал свой ЛОГИН (полностью с @gmail.com) и ПАРОЛЬ (в инструкции выше написано что без пароля)
После этого этот аккаунт появился и в общем списке в настройках "Учетные записи и синхронизация".
НО что главное заработал СТАНДАРТНЫЙ аплет по добавлению аккаунтов google (то есть через стандартное меню "Учетные записи и синхронизация" -> "Добавить аккаунт")


Ну вот спустя неделю интенсивных перенастроек опять словил глюк с аккаунтом, и на этот раз делать "сброс" настроек было жалко. В итоге помог способ с youtube, просто залогинился через youtube с gmail аккаунтом - видать он прямо пишет в настройки аккаунта, а gmail и gtalk - подгючивают.

вторник, 30 ноября 2010 г.

Net::SMTP::SSL и authentication required

Итак, понадобилось отправить через gmail.com почту по SSL через порт 465.
Для этого есть модуль Net::SMTP::SSL. Соединяется, но авторизация не проходит. При debug=1 выдает такую ошибку - authentication required.
Как оказалось, для успешной авторизации еще нужен модуль Authen::SASL, который за собой тянет еще что-то, которое возможно и не хватает для авторизации. Ну в общем, после доустановки - все работает.

пятница, 5 ноября 2010 г.

Skype и при попытке подключит вебкамеру "No devices found"

Получили ошибку "No devices found". Проверили /dev/video0 существует. mplayer открывает видео с камеры:
mplayer tv:// -tv device=/dev/video0
mplayer tv:// -tv device=/dev/video0:driver=v4l:width=640:height=480
Все, убедились - камера работает.
А скайп не видит. Идем в /home/YOURUSERNAME/.Skype/shared.xml и редактируем
БЫЛО:
<Video>
<Disable>1</Disable>
</Video>

СТАЛО:
<Video>
<Disable>0</Disable>
</Video>

Перезапускаем скайп и камеры уже определяются.

вторник, 26 октября 2010 г.

Распаковать rpm

Вот уж редко нужно и все время забываю.
rpm2cpio файл.rpm | cpio -idmuv --no-absolute-filenames

пятница, 22 октября 2010 г.

Обновление CentOS PHP с 5.1 до 5,2

Взято здесь http://ru.ispdoc.com/index.php/%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_PHP_%D0%B2_CentOS_Linux
Подключите репозиторий:

wget -q -O - http://www.atomicorp.com/installers/atomic.sh | sh

Обновите PHP

yum update php

Также потребуется обновить модуль mcrypt (что-то не пошло)

yum update php-mcrypt

После успешного выполнения команды проверьте версию PHP и работу (что расширения подгружаются и ни на что не ругается):

php -v
php -m

И перезапустите Apache

/etc/init.d/httpd restart

Откатить установку можно

yum --allow-downgrade update php-5.1.6

или

yum downgrade <пакет>

или

rpm -Uvh --oldpackage пакет.rpm <- это точно сработало

вторник, 12 октября 2010 г.

Проверка своей сети wi-fi на взломоустойчивость.

Не закончено, да и вряд ли будет
Запускаем "мониторинг":

sudo airmon-ng start wlan0

в результате появиться новый интерфейс mon0

мониторим все беспроводые сетей

sudo airodump-ng mon0

дамп показывает активность. В верхней части -обнаруженные точки доступа, в нижней обнаруженные клиенты.
BSSID — MAC адрес точки доступа
PWR — уровень сигнала
#Data — число пойманных пакетов с данными
CH — номера канала на котором находится точка доступа
MB — скорость передачи данных
ENC — алгоритм шифрования
CIPHER — тип шифрования
AUTH — тип авторизации
ESSID — название точки доступа
STATION — MAC адрес клиента
Probes — названия сетей с которыми пытался соединиться клиент

Программки на Си и файлы более 2Гб

Столкнулся с проблемой - не работает прожка с файлами более 2Гб. Не вдаваясь в подробности решение при компиляции использовать параметры «-D_FILE_OFFSET_BITS=64», «-D_LARGEFILE64_SOURCE»
Кому интересно, есть хорошая статья http://www.wiadw.ru/?id=10

суббота, 9 октября 2010 г.

Настройка wi-fi usb TP-Link TL-WN722N

Имеем модуль TP-Link TL-WN722N, представляет собой usb девайс. Подозреваю, что вскоре эта заметка станет не актуальной, потому как поддержку воткнут в "официальный" драйвер ath9k. А пока качаем наборчик:
http://wireless.kernel.org/download/compat-wireless-2.6/

заходим в него и компилируем. (можно выбрать только то, что нужно ./scripts/driver-select)
По идее, надо бы собрать пакет, но там много дополнительных скриптов во время инсталляции, что пришлось просто make install. увы, лень разбираться, что они там и куда кидают.
Затем пытаемся подгрузить драйвер

modprobe -v ath9_htc

и не тут-то было, вроде и драйвер подгрузился, а интерфейса не появилось. А все потому, что
для чипа AR9271 (а у нас именно он) нужен файлик ar9271.fw помещенный в /lib/firmware.
Об этом, кстати, написано на родной страничке драйвера http://linuxwireless.org/en/users/Drivers/ath9k_htc. И об этом есть запись в /var/log/messages, что не найден ar9271.fw
Идем сюда http://git.kernel.org/?p=linux/kernel/git/dwmw2/linux-firmware.git;a=tree
качаем и закидываем в /lib/firmware. И вот тут снова сюрприз - скачался файл нулевого размера - скрипт у них видать в этот период подглючивал, тогда нажимаем ссылку "raw" рядом с именем файла и то, что прибежит переименовываем в ar9271.fw и в /lib/firmware

Осталось проверить наличие интерфейса

ifconfig -a

"-a" показать ВСЕ интерфейсы, потому как наш новоявленный интерфейс еще "лежит", два часа угробил на переборку драйверов, нет wlan0 и все тут, пока не вспомнил этот параметр поставить, зато изучил драйвер его вдоль и поперек :) )

Ну а дальше его конфигурирование и счастливое использование!

суббота, 2 октября 2010 г.

freevo и его настройки

Задача - мультимедийный центр.

freevo (1.9.0) на python тянет кучу "зависимостей", но хотя бы при этом внятно говорит, что и где брать.

Запускаем настройку:

freevo setup

Копируем из дистрибутива local_conf.py.exemple в каталог ~/.freevo/local_conf.py

Теперь при запуске имеем красивые "квадратики" вместо русских букв.

OSD_FORCE_FONTNAME = 'verdana.ttf'

OSD_EXTRA_FONT_PATH = [ 'свой реальный путь к TTF' ]
уже чуть лучше, но все же кое где квадратики, а именно в "служебных" сообщениях. Их наши настройки не коснулись.
И вот тут начинается самое интересное, в /usr/share/freevo/skins находим все файлы и тупо заменяем в них VeraBd и Vera на к примеру verdana.
И не забыть скопировать этот шрифт в папку шрифтов /usr/share/freevo/fonts. Потому как для "системных" сообщений не ищет шрифты в OSD_EXTRA_FONT_PATH. В общем, еще хватает багов.

И еще, обязательно прихлопните кэш .freevo/cache - а то будете долго гадать, почему не изменяется при перенастройке интерфейс!

пятница, 1 октября 2010 г.

Запуск икcовых приложений на второй дисплей

Многие настройки можно легко сделать через nvidia-settings. Вот только если к SVideo не подключено ничего, то при запуске иксов оно попадет в игнор и надо будет активировать принудительно.

export DISPALY=:0.1
icewm

это запустит icewm на втором дисплее (ТВ).

А вообще, темя обширная - расширение рабочего стола и пр.

Можно картинку mplayer сразу выпустить на второй дисплей:
mplayer "имя файла" -display :0.1

вторник, 21 сентября 2010 г.

Тонкая настройка hdd и hdparm

Информация

hdparm -i /dev/hda

Расшифровка:
MaxMultSect: Это поле содержит максимальное число секторов, которое ваш жесткий диск может прочитать за "один присест".
MultSect: Текущая настройка количества секторов, считываемых за один раз.
PIO modes и DMA modes: Здесь перечисляются режимы, которые поддерживает жесткий диск. Режим, помеченный символом "звездочка" (*), является текущим.
AdvancedPM: Признак 'yes' указывает на то, что жесткий диск поддерживает APM (Advanced Power Management - Расширенное Управление Питанием).

Дополнительная информация

hdparm /dev/hda

multcount - число секторов, считываемых одновременно;
I/O support - режим обмена с жестким диском (16/32/32sync);
using_dma - указывает, используется ли в настоящий момент режим DMA или нет;
keepsettings - указывает, сохраняются ли настройки после программного сброса (изменять эту настройку не рекомендуется, если вы не уверены в том, что делаете);
readonly - обычно установлен в 1 только для CD-ROM, этот флаг сообщает системе - является ли устройство read-only или нет;
readahead - количество секторов для опережающего чтения;

Настройка

-c1 -- установка 32-х битного режима (обычно то, что вам нужно)
-d1 -- включение DMA
-mN -- количество секторов передаваемых сразу (одним блоком). Степень двойки,
максимальное число -- параметр MaxMultSect в выводе hdparm -i.
-aN -- опережающее чтение N секторов

Тестирование:

hdparm -t <имя устройства>

hdparm -u1c1d1m8a8 <имя устройства>

Взято отсюда http://www.opennet.ru/base/sys/htparm_tune.txt.html

понедельник, 20 сентября 2010 г.

Ручная установка и ошибка шрифта fixed

Итак, установил Slackware 12.2 на ноутбук в минимальной конфигурации. Затем доустановил иксы, в результате при запуске такая ошибка:

FATAL ERROR:
could not open default font 'fixed'.

Лечиться следующим образом:

mkfontdir /usr/share/fonts/mics

для остальных шрифтовых каталогов тоже желательно сделать

воскресенье, 12 сентября 2010 г.

perl, hash и сортировка

Сортировка ключей по численному сравнению ассоциированных значений:
foreach(sort {$hash{$a} <=> $hash{$b}} keys %hash) {
print $_,'=',$hash{$_},"\n";
}


Сортировка ключей по алфавиту ассоциированных значений:
foreach $key(sort {$hash{$a} cmp $hash{$b}} keys %hash){
print $key, " = ", $hash{$key},"\n";
}

найдено тут http://www.opennet.ru/docs/RUS/perl_hash/, но все время забывается.

четверг, 9 сентября 2010 г.

Округление в perl

"Отбрасывает" дробную часть int ()

Округление с заданной точностью.
$rounded = sprintf("%.2f",$unrounded);

понедельник, 6 сентября 2010 г.

GD::Graph::lines и кириллица

Уже не первый раз сталкиваюсь с тем, что GD::Graph::lines не нормально выводит кириллицу в подписях и метках. А поменять ситуацию не выходило. В итоге принято решение патчить lines.pm (тот, что в /usr/lib/perl5/site_perl/5.10.0/GD/Graph) и добавить в него соответствующие методы:

sub set_label_font # (fontname)
{
my $self = shift;
$self->_set_font('gdta_label', @_) or return;
}

sub set_value_font # (fontname)
{
my $self = shift;
$self->_set_font('gdta_value', @_) or return;
}


sub set_x_label_font # (fontname)
{
my $self = shift;
$self->_set_font('gdta_x_label', @_);
}
sub set_y_label_font # (fontname)
{
my $self = shift;
$self->_set_font('gdta_y_label', @_);
}
sub set_x_axis_font # (fontname)
{
my $self = shift;
$self->_set_font('gdta_x_axis', @_);
}

sub set_y_axis_font # (fontname)
{
my $self = shift;
$self->_set_font('gdta_y_axis', @_);
}

sub set_values_font
{
my $self = shift;
$self->_set_font('gdta_values', @_);
}

sub set_legend_font # (font name)
{
my $self = shift;
$self->_set_font('gdta_legend', @_);
}

Теперь их своего скрипта их можно вызвать к примеру так:
my $graph = new GD::Graph::lines;
$graph->set_title_font("/usr/share/fonts/TTF/times.ttf",18);
$graph->set_label_font("/usr/share/fonts/TTF/times.ttf",14);
$graph->set_x_label_font("/usr/share/fonts/TTF/times.ttf",10);
$graph->set_y_label_font("/usr/share/fonts/TTF/times.ttf",10);
$graph->set_x_axis_font("/usr/share/fonts/TTF/times.ttf",10);
$graph->set_y_axis_font("/usr/share/fonts/TTF/times.ttf",10);
$graph->set_values_font("/usr/share/fonts/TTF/times.ttf",10);
$graph->set_legend_font("/usr/share/fonts/TTF/times.ttf",10);

Пути к шрифтам естественно свои подставить. И вся кириллица стала в норме.

вторник, 31 августа 2010 г.

Резервная копия mysql

Есть и более продвинутые средства, но когда надо быстро:

mysqldump -u "юзер" -p --opt "база" > "имя_файла"

запросит пароль и сбросит копию в "имя_фала".

Еще один момент, иногда надо целиком перекинуть базы, в том числе и создать их в новом месте, первый вариант не совсем подходит, можно запустить так:

mysqldump -u "юзер" -p -B "список баз" > "имя_файла"

Если вдруг получили при этом что-то вроде этого
mysqldump: Got error: 29: File .... not found (Errcode: 24) when using LOCK TABLES
(слишком много одновременно открываемых файлов)

Можно просто добавить опцию --single-transaction

mysqldump -u "юзер" -p --single-transaction -B "список баз" > "имя_файла"

суббота, 28 августа 2010 г.

Шпаргалка Vim.

В сети куча таких "шпаргалок", ну и я себе одну сделаю, своя роднее.

"Склеить" текущую строку со следующей = J

yy - Скопировать строку в буфер
Y - Скопировать строку в буфер
p - Вставить из буфера ниже текущей строки
P - Вставить из буфера выше текущей строки
:1,3 co 5 - Скопировать сроки с 1 по 3 и вставить их после 5
:4,6 m 8 - Переместить сроки с 4 по 6 и вставить их после 8

/строка - Поиск строки "строка" вперед в тексте
?строка - Поиск строки "строка" назад в тексте

пятница, 27 августа 2010 г.

Создание и запись CD DVD

Записать образ на диск :
cdrecord dev=/dev/cdrw /tmp/output.iso

Быстрая очистка cd-rw:
cdrecord -v blank=fast dev=/dev/sr0

Для записи DVD-R/RW дисков нам понадобиться пакет dvd+rw-tools

Запись каталога на диск:
growisofs -Z /dev/sr0 -R -J /home/каталог
-R -J - ВАЖНО! иначе всякие винды не смогут нормально читать этот диск.
это совместимость с протоколом Rock Ride, и Joilet. Хотя есть мнение, что Rock Ride виндой не понимается.

Запись образа :
growisofs -Z /dev/sr0=image.iso

Запись на определённой скорости :
growisofs -speed=8 -Z /dev/sr0=image.iso

Очистить DVD-RW:
dvd+rw-format -f /dev/dvd

ISO-образы: Создать образ из содержимого каталога /.../каталог
mkisofs -joliet-long -r -o disk.iso /.../каталог

Сделать образ из dvd/cd диска:
dd if=/dev/cdrom of=image.iso

Vim и полезные настройки.

Все настройки прячутся в файле ~/.vimrc

Для начала цветовая схема (допиленную напильником можно подкинуть в ./vim/colors )
colorscheme моя_схема

Игнорировать различие прописных/строчных букв при поиске:
set ignorecase

Метод фолдинга:
set foldmethod=marker

Отключение переноса длинных строк:
set nowrap

При поиске подсвечивать все найденные:
set hlsearch

При поиске перескакивать на найденный текст в процессе набора шаблона:
set incsearch

Включить подсветку синтаксиса:
syntax on

Нумерация сток - очень удобно!
set number

Vim и фолдеры (fold) сворачивание.

В больших программах удобно сворачивать фрагменты и vim в этом отлично помогает.

в нужном месте ставим коментарий #{{{ "описание", а по окончанию фрагмента #}}}. Это и есть маркеры (можно изменить)
При этом свернуты фолдер полностью спрячет все, что между маркеров за исключением "описания" - очень удобно. Т.е. будет что-то вида:

+-- 25 строк: основные константы и определения ----
+-- 44 строк: вывод заголовка ---------------------
и т.д.


настроим vim
:set foldermethod=marker (или короче :set fdm=marker ). Можно сразу запихнуть в настройки vim (~/.vimrc)

Теперь zc - сворачивает, zo - разворачивает отдельный фолдер
zo - открыть фолдер;
zO - открыть фолд рекурсивно;
zc - закрыть фолд;
zC - закрыть фолд рекурсивно;
za - если фолд открыт - закрыть, и наобород;
zA - то же, что и za, только рекурсивно;
zr - уменьшить уровень закрытых фолдов (FOLDLEVEL+=1);
zR - открыть все фолды;
zm - увеличить уровень закрытых фолдов (FOLDLEVEL-=1)
zM - закрыть все фолды.

суббота, 21 августа 2010 г.

Проблемы с LWP::Useragent протокола https и ошибка "501 Not Implemented"

Ну вот и я нарвался на странную работу модуля LWP::Useragent через прокси, а именно по https запросу, проксик выдал "501 Not Implemented"
но это если объявить работу через прокси

$ua->proxy(['http', 'https'], 'http://xxxxx.xxx.xxx:3128/');

Все начинает работать, только если закоментировать объявление proxy и определить прямо в скрипте переменную среды для прокси:

$ENV{HTTPS_PROXY} = $proxy;
$ENV{HTTPS_PROXY_USERNAME} = user;
$ENV{HTTPS_PROXY_PASSWORD} = pass;

Учитывая, что для работы требуется внешняя библиотека OpenSSL это вполне логично, откуда ей знать о проксиках объявленных в Userageny, но все же это настоящие грабли!

четверг, 12 августа 2010 г.

Сброс пароля root mysql

Сброс пароля пользователя root в mysql.

1. Останавливаем mysql.
2. Запускаем mysql следующей командой:

/usr/bin/mysqld_safe --skip-grant-tables --user=root &

3. Запускаем клиента mysql
mysql -u root
4. Выполняем sql запрос
UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
где newpwd - новый пароль.
5. Применяем изменения
FLUSH PRIVILEGES;
6. Выходим из mysql клиента выполнив в нем команду exit
7. Перегружаем mysql сервер.

Perl и Cpan

Настройка прокси (proxy) в cpan:
cpan> o conf init /proxy/

среда, 11 августа 2010 г.

Бесперебойник UPS FSP EP1000

Попался мне в руки бесперебойник UPS FSP EP1000. Хорошая вещь, два аккумулятора, но вот софт - супер комбайн на java. А мне всего то и надо, состояние о питании дернуть и команду на отключение послать. Два интерфейса rs232 (2400 8N1) и usb (hiddev). На любезную просьбу выслать протокол фирма не отреагировала, ну да и ладно. Аппаратным снифером последовательно порта были получены знакомые команды (еще Ippon с такими идет, более того при подключении usb idVedor = 0665, idProduct = 5161 что тоже совпадает Описание Serial протокола IPPON (протокол Megatek для COM порта
http://www.networkupstools.org/protocols/megatec.html). Но присутствуют некоторые отличия:
запрос состояния в указанном протоколе Q1, а в этом девайсе QS (снифер рулит!). Что еще работает:
"F", "C", "Q", "T", "SnnRmmmm" - совпадает с описанным протоколом
Байтполя состояния кажись тоже совпадают. Еще интересно "D" - но что делает не разбирался, не зачем.

Так что в простейшем случае RS232 отправляем "QS" и получаем всю необходимую инфу. В случае hiddev
чуть сложнее, но похожие исходники где-то есть в сети (clear_report, send_report, recive_report в этом духе, ответ в виде 46 байт состояния)

Не буду жадничать, отдаю как есть. Компилируется и запускается.
ups_new -F /dev/usb/hiddev1 -V 1637 -P 20833
цифры - это соответственно вендор и продукт в десятичной системе. Кому надо, допилите до лучшей кондиции.
================================== ups_new.c =================================================
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/


#include <stdlib.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <asm/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/hiddev.h>
#include <string.h>
#include <signal.h>

#define TIMEOUT 2 /* это таймаут получения инфо, т.к. прожка может висеть долго */

int fd;
int vend;
int prod;
int verb;
int debug;


void alarm_handler(int signo) {
printf("timeout\n");
fprintf(stderr,"timeout\n");
//if (verb==1) printf("timeout");
//if (debug==1) fprintf(stderr,"timeout\n");
exit(0);
}


//отправляем репорт - буфер и длинна значащих значений
static int send_report(const char *buf, int size)
{
struct hiddev_report_info rinfo;
struct hiddev_usage_ref uref;
int i,ret,err;
if (verb==1) printf("Sending report...");
if (debug==1) fprintf(stderr,"Sending report ...\n");
//заполняем репорт значениями
for (i=0; i<8; i++) {
memset(&uref, 0, sizeof(uref));
uref.report_type = HID_REPORT_TYPE_OUTPUT;
uref.report_id = 0x00;
uref.field_index= 0;
uref.usage_index= i; //байт за байтом из буфера- остальные делаем нулями
uref.usage_code = 0xff000002;
uref.value=0;
if (i < size ) uref.value=buf[i];
err=ioctl(fd, HIDIOCSUSAGE, &uref);
if (err<0 ) return err;
}
memset(&rinfo, 0, sizeof(rinfo));
rinfo.report_type = HID_REPORT_TYPE_OUTPUT;
rinfo.report_id = 0x00;
rinfo.num_fields = 1;
//отправляем репорт
err = ioctl(fd, HIDIOCSREPORT,&rinfo);
if (verb==1) printf(" Done\n");
if (debug==1) fprintf(stderr,"Sending report - Dione\n");
return err;
}

//стартовый запрос инфо об устройстве и сравнение с заданым Вендором и продуктом
static int start_req(int type)
{
struct hiddev_devinfo device_info;
ioctl(fd, HIDIOCGDEVINFO, &device_info);
if (verb==1) printf("Device is Vendor=%i, Product=%i\n",device_info.vendor,device_info.product);
if (debug==1) fprintf(stderr,"Start_req ...\n");
if ((device_info.vendor==vend)&&(device_info.product==prod)) {
return 1;
}
else {
return -1;
}
}


//принимаем репорт 6 (num) строк по 8 байт
static int recive_report(int num, char *buf)
{
struct hiddev_report_info rinfo;
struct hiddev_usage_ref uref;
struct hiddev_event ev[8];
struct timeval tv;
fd_set fdset;

int err,ret,i,j;
int rd;

if (verb==1) printf("Reciving report ...");
if (debug==1) fprintf(stderr,"Reciving report ...\n");
tv.tv_sec = 0;
tv.tv_usec = 300000;
// tv.tv_usec = 100000;
FD_ZERO (&fdset);
FD_SET(fd,&fdset);

rd = select((fd+1),&fdset,NULL,NULL,&tv);
if (debug==1) fprintf(stderr,"recive_report: select - ok\n");

// printf("select = %d\n",rd);
if (rd>0) {
for (i=0; i<num; i++) { //6

rinfo.report_type = HID_REPORT_TYPE_INPUT;
rinfo.report_id = 0;
ret = ioctl(fd, HIDIOCGREPORT,&rinfo);
if (debug==1) fprintf(stderr,"recive_report: ioctl(fd... - ok\n");
if (debug==1) fprintf(stderr,"recive_report: ret=%d\n",ret);

rd = read(fd, ev , sizeof(ev) );
if (debug==1) fprintf(stderr,"recive_report: read(fd... - ok\n");
if (debug==1) fprintf(stderr,"recive_report: rd=%d\n",rd);
for (j=0; j<8; j++) {
buf[i*8+j]=ev[j].value;
//printf("%X ",ev[j].value);
}
// printf("\n");
}
ret = ioctl(fd, HIDIOCGREPORT,&rinfo);
if (debug==1) fprintf(stderr,"recive_report: ret = ioctl(fd... - ok\n");
}
if (verb==1) printf(" Done\n");
if (debug==1) fprintf(stderr,"Reciving report - Done\n");
return 777;
}


static int clear_report(int type)
{
struct hiddev_report_info rinfo;
struct hiddev_event ev[8];
struct timeval tv;
fd_set fdset;
int err,ret,i,j;
int rd;

if (verb==1) printf("Clearing report ...");
if (debug==1) fprintf(stderr,"Clear report ...\n");
tv.tv_sec = 0;
tv.tv_usec = 300000;
// tv.tv_usec = 100000;
FD_ZERO (&fdset);
FD_SET(fd,&fdset);
rd=1;
while ( rd > 0 ) {
rinfo.report_type = HID_REPORT_TYPE_INPUT;
rinfo.report_id = 0;
// ret = ioctl(fd, HIDIOCINITREPORT);
ret = ioctl(fd, HIDIOCGREPORT,&rinfo);
rd = select((fd+1),&fdset,NULL,NULL,&tv);
if (rd>0) {
rd = read(fd, ev , sizeof(ev));
}
}
if (verb==1) printf(" Done\n");
if (debug==1) fprintf(stderr,"Clear report - Done\n");
return 777;
}

void print_help (void) {
printf("======================================================================\n");
printf("Start with command line arguments:\n");
printf("-V n (VENDOR decemal)\n");
printf("-P n (PRODUCT decemal)\n");
printf("-F file_name (device file name /dev/usb/hiddev0)\n");
printf("-D dir_name (dir name for search devices /dev/usb)\n");
printf("-v verbose mode\n");
printf("-h this help\n");
printf("======================================================================\n");
printf("\n");
}

int open_device (char * file) {
if (verb==1) printf("Probe %s... ",file);
if (debug==1) fprintf(stderr,"Open devise - Done\n");
struct stat buf;
if ( stat( file,&buf)==0 ) { //файл есть
if (verb==1) printf("Device is exists\n");
if ((fd = open(file, O_RDONLY)) >= 0) {
if (verb==1) printf("Open fd %s successfuly\n",file);
if (start_req(0)<0) { //не наш вендор
close(fd);
if (verb==1) printf("Device %s is not Vendor=%i, Product=%i. Skip.\n",file,vend,prod);
return (0);
}
else {
if (verb==1) printf("Device %s is Vendor=%i, Product=%i\n",file,vend,prod);
if (verb==1) printf("fd=%i\n",fd);
return (fd);
}
}
else {
perror("hiddev open");
if (verb==1) printf("Device %s is not opened\n",file);
return (0);
}
}
else {
if (verb==1) printf("Device is not exists\n");
}
return (0);
}


int dir_mode (char * dir) {
char dev_name[20];
struct stat buf;
if ( strlen(dir)<2 ) { //не задан каталог для поиска
strcpy(dir,"/dev/usb");
}
if ( stat( dir,&buf)==0 ) { //каталог есть
int i;
for (i=0; i<4; i++) {
if ( strlen(dir)>1 ) sprintf(dev_name,"%s/hiddev%i",dir,i);
else sprintf(dev_name,"/dev/usb/hiddev%i",i);
int fd=open_device(dev_name);
if ( fd >= 0 ) { //нашли нужное устройство и успешно его открыли
return (fd);
}
}
}
else {
if (verb==1) printf("Dir %s is not exists\n",dir);
return (0);
}
}


int main (int argc, char **argv) {
verb=0;
vend=0;
prod=0;
debug=0;
char file[300];
char dir[300];
file[0]=0; //нулевая длина строки
dir[0]=0; //нулевая длина строки
int rez=0;
while ( (rez = getopt(argc,argv,"V:P:F:D:vhd")) != -1){
switch (rez){
case 'V':
vend=atoi(optarg);
break;
case 'P':
prod=atoi(optarg);
break;
case 'F':
strcpy(file,optarg);
break;
case 'D':
strcpy(dir,optarg);
break;
case 'v':
verb=1;
break;
case 'd':
debug=1;
break;
case 'h':
print_help;
exit(0);
break;
case '?':
printf("Comand line Error found !\n");
break;
}
}

if ((vend == 0) || (prod == 0)) {
print_help();
exit(0);
}
// exit(0);

if (verb==1) printf("Verbose mode\n");
if (debug==1) fprintf(stderr,"\n\n====================\n");

fd = -1;

if ( strlen(file)>1 ) { //есть конретное имя устройства
if (verb==1) printf("File name mode - %s\n",file);
fd=open_device(file);
}
else {
if ((verb==1) && (strlen(dir)>1)) printf("Dir name mode - %s\n",dir);
fd=dir_mode(dir);
}
if ( fd < 0 ) { //так и не смогли ничего подходящего открыть
if (verb==1) printf("Device not found\n");
exit(1);
}

if (verb==1) printf("fd %i\n",fd);

char str_cmd_T[8]; //команда теста
char str_cmd_QS[8]; //запрос состояния
str_cmd_T[0]= 84;
str_cmd_T[1]= 13;
str_cmd_QS[0]= 81;
str_cmd_QS[1]= 83;
str_cmd_QS[2]= 13;
str_cmd_QS[3]= 0;
str_cmd_QS[4]= 0;
str_cmd_QS[5]= 0;
str_cmd_QS[6]= 0;
str_cmd_QS[7]= 0;

int err;
int i;

signal(SIGALRM, alarm_handler);
alarm(TIMEOUT);

//start_report(0);

err=clear_report(0);
err=send_report(str_cmd_QS,8);
char rezault[64];
err = recive_report(6,rezault);
for (i=0; i<46; i++) printf("%c",rezault[i]); //последние два байта нам не нужны
// printf(" ok");
printf ("\n");

close(fd);
if (debug==1) fprintf(stderr,"Done All\n");

exit(0);
}

воскресенье, 8 августа 2010 г.

Статьи с сайта IBM по linux.

На сайте IBM иногда можно найти довольно неплохие статьи на нашу тему, а вот навигация по статьям никакая. Вот что бы не потерять ссылки буду их сюда копировать. (может со временем сделают все же нормальную навигацию).

Работа с Bash - командная строка.
https://www.ibm.com/developerworks/ru/edu/au-bash/section3.html
и сразу сходу совет, если не хотите, что бы команда запомнилась в истории команд, поставьте перед ней пробел.
Удобное "приглашение" командной строки выделенное цветом export PS1= "\e[2,36m\u@\h:\w\$\e[0m "

суббота, 7 августа 2010 г.

Почему все же Slackware?!

Часто спрашивают, а почему все же выбор пал на Slackware. Объяснять слишком долго, поэтому подборка ссылок и девиз:

"Дайте человеку Ubuntu, он изучит Ubuntu. Дайте ему SUSE, он изучит SUSE. Но если дать ему Slackware, он изучит Linux."

http://wiki.linuxformat.ru/index.php/LXF119:Slackware

пятница, 23 июля 2010 г.

Разные "фишки" mc.

Век живи, век учись! Буду учиться помаленьку и сюда записывать, надоело по третьему разу искать.

Копирование текста из редактора mc в гуи программки - в mcedit выделяем мышой текст с нажатой shift, а в гуи редакторе кликаем средней кнопкой мыши.

пятница, 2 июля 2010 г.

Как научить firefox играть flv и прочие видеоформаты.

Если firefox начал выдавать что-то вроде "установите плагин" для просмотра видео, то берем со страницы исходник mplayerplug

http://mplayerplug-in.sourceforge.net/

Компилируем его, затем файлы с расширением .so кидаем в папку plugins, а .xpt в папку components. (/usr/lib/firefox/.......)
Перезапускаем лиса.

воскресенье, 20 июня 2010 г.

Создание загрузочной флэшки (usb)

Для начала форматнем в fat32. mkfs.vfat в slackware нет, зато есть mkdosfs
здесь и далее /dev/sdx - это ваша флэшка, буква "х" у каждого своя.

sudo mkdosfs -F 32 /dev/sdx1

Теперь монтируем полученную флэшку:

sudo mount -t vfat /dev/sdx1 /mnt/flash

Монтируем iso образ:

mkdir /tmp/iso
mount /.../образ.iso /tmp/iso -o loop

Копируем содержимое iso в примонтированную флэшку:

cp -vr /tmp/iso/* /mnt/flash

Переименовываем и перемещаем Syslinux файлы в корневую директорию (а вот здесь возможны варианты):

mv /mnt/flash/boot/isolinux/* /mnt/flash/
или
mv /mnt/flash/boot/* /mnt/flash/


Переименуем isolinux.cfg в syslinux.cfg:

mv /mnt/flash/isolinux.cfg /mnt/flash/syslinux.cfg

Размонтируем USB drive

umount /mnt/flash

Устанавливаем Syslinux:

syslinux /dev/sdx1

Ну и на последок проверим установлен ли загрузочный атрибут на раздел нашей флэшки

fdisk /dev/sdx
Если нет буквочки "а", то нажимаем ее в виде команды и вводим номер раздела, затем "w"

http://www.opennet.ru/base/sys/live_flash2.txt.html
http://unetbootin.sourceforge.net/
http://www.pendrivelinux.com/

суббота, 19 июня 2010 г.

Если при создании пакета прожка не понимает DESTDIR

Тогда вместо DESTDIR=/xx применяем INSTALL_ROOT=/xx

Настройка TV-Out и NVidia

После запуска иксов запускаем nvidia-settings. Там в настройках подключаем второй дисплей (TV) и задаем ему параметры. Можно просто как надо отредактировать xorg.conf.
Ну и еще не забыть задать страндарт вывода на TV:
nvidia-xconfig --tv-standard=PAL-B

mplayer -display :0.1 -stop-xscreensaver film.avi

в /etc/mplayer/mplayer.conf добавляем
stop-xscreensaver=yes # во время просмотра не запускать Screensaver

пятница, 18 июня 2010 г.

Выключение компьютера с кнопки Power

Если хотим нажатием кнопки Power выключать компьютер

Создаем файл power в /etc/acpi/events/ следующего содержания:

# /etc/acpi/events/power
# This is called when the user presses the power button

event=button/power
action=/sbin/halt

# /etc/rc.d/acpid restart

А вообще на эту кнопку можно повесить что угодно, хоть запуск любимого плейлиста.

среда, 2 июня 2010 г.

Работа с видео и аудио

Как извлечь звук из avi, vob и т.п.

mplayer исх_файл -ao pcm:file=audio.wav -vc null -vo null
В итоге в audio.wav будет звуковая дорожка.

Нормализация
normalize audio.wav

Перекодировка в mp3
lame -h audio.wav audio.mp3

Если ffmpeg собран с поддержкой libmp3lame то можно сделать одной командой:
ffmpeg исх_файл -vn -acodec libmp3lame -ac 2 -ab 192K audio.mp3

пятница, 21 мая 2010 г.

Установка Stardict - словарь

Понадобился словарик. Лучшее из того, что видел StarDict (исходники)
./configure
В результате - отсутствует gucharmap — таблица символов Юникода. Является частью рабочей среды GNOME. А гнома у меня отродясь не было. Тогда ./configure --disable-gucharmap
В результате - отсутствует festival — "говорилка" для Linux, а она мне и не надо пока. Тогда ./configure --disable-gucharmap --disable-festival
В результате - отсутствует espeak — туда же ее --disable-espeak
А вот дальше уже хуже - нет libgnomeui-2.0 и прочей гномовской требухи.
./configure --disable-gucharmap --disable-festival --disable-gnome-support

Словари:
English-Russian full dictionary (30,4 Мб)
Новый Большой англо-русский словарь (10,7 Мб)
Mueller English-Russian Dictionary (24th Edition) (3,9 Мб)
English-Russian computer dictionary (300 кб)

распаковать и скопировать в /usr/local/share/stardict/dic

среда, 21 апреля 2010 г.

wget + proxy

Понадобилось wget завернуть на proxy-сервер, решений несколько:
1. Можно экспортировать соответсвующие переменные среды на проксик.
2. Можно создать гобальный файл настройки проксика /etc/wget/wgetrc
http_proxy = http://your_proxy:port
ftp_proxy = http://your_proxy:port
# If you do not want to use proxy at all, set this to off.
use_proxy = on

3. Можно создать локальную настройку ~/.wgetrc
http_proxy = http://your_proxy:port
ftp_proxy = http://your_proxy:port

Вот по третьему методу я и сделал, работает.

среда, 31 марта 2010 г.

Drupal и мультисатинг

Статья по мультисайтингу
http://drupal.org/getting-started/6/install/multi-site
http://phantasmagor.ru/node/17
http://www.drupal.ru/node/6226
Мультисайтинг. Выбор таблиц

Будут проблемы
Мультисайтинг и robots.txt - простое решение

Авторизация
settings.php следует указать ini_set('session.name', 'mysite_PHPSESSID'), чтобы пользователи могли залогиниться на нескольких сайтах одновременно.ini_set('session.name', 'NEKOE_SESSION_NAME');

Общие таблицы:
authmap, sessions, users, role, users_roles, profile_fields, profile_values
locales_meta, locales_source, locales_target

locales_* — переводы. Совмещать.
permission — права ролей на хуки, предоставляемые модулями. Совмещается.
role — роли на сайте (анонимный, зарегистрированный, модер, админ). Совмещается.
sessions — сессии юзеров. Объединяю, только с учётом того, что в settings.php следует указать ini_set('session.name', 'mysite_PHPSESSID'), чтобы пользователи могли залогиниться на нескольких сайтах одновременно.
access — доступ пользователей к сайту. Блокировка по IP, имени пользователя, e-mail. Предпочитаю совместить, т.к. чаще всего не использую блокировки вообще. Для крупных сайтов можно разделить.
authmap — таблица для внешних аутентификаций (LDAP, OpenID). В ней указывается соответствие локального имени юзера (uid в таблице users), внешнего (vasya_pupkin@drupal.org), и модуля, который выполняет аутентификацию. Т.к. не использую внешнюю аутентификацию — совмещаю

sftp и хостера

Понадобилось создать симлинк на папку у хостера. А хостер не дает шел. Один из вариантов, создать с использованием php или perl. Но если хостер дает sftp то в нем есть команда ln (без всяких -s). Она и создает симлинк.

Команда подключения к "нестандартному" порту 2222
sftp -o Port=2222 юзер@хост

среда, 24 марта 2010 г.

Установка filezilla

Решил попробовать filezilla.
Скачал http://filezilla-project.org/sourcecode.php
И первый пошел! Нужно wxWidgets, скачал http://www.wxwidgets.org/downloads/
и оказалось, что надо ./configure --enable-unicode
ldconfig
Второй пошел. Нужно libgnutls более новой версии, скачал http://www.gnu.org/software/gnutls/download.html
Не забыть прибить старую версию.

суббота, 20 марта 2010 г.

Drupal установка и настройка 2

Скачал. Распаковал. Установил. (файл default.settings... надо именно скопировать )
Сразу подкрутил безопасность http://drupal.org/project/login_security

Теперь понятные человекам ссылки:
скачал модули http://drupal.org/project/pathauto и http://drupal.org/project/token
«Управление → Конструкция сайта → Модули», и активируем модули Path, PathAuto и Token.
настройка транслитерации. Находим в папке модуля PathAuto файл «i18n-ascii.example.txt», и изменяем его имя на «i18n-ascii.txt»
Идем в меню «Управление», ставим отображение по модулям.
И ищем модуль Path, заходим во вкладку «Синонимы», там заходим в «Настройки автоматических синонимов" - и во вкладке «Основные настройки» устанавливаем галочку «Transliterate prior to creating alias» (Транслитерировать перед созданием синонима). Сохраняемся.

Организаци контента
Кратко, но очень понятно здесь


Меню
Что бы порезать меню на части (верхнее и подменю справа) http://drupal.org/project/menu_block_split
Хлебные крошки (Breadcumb) для расширенной настроки модуль menu_breadcrumb Описание на русском здесь.

Редактор с загрузкой картинок
Как установить
http://remage.su/content/drupal-urok-tretii-prikruchivaem-fckeditor-i-uchim-ego-zagruzhat-izobrazheniya-moduli-drupal
http://content-management-systems.info/index.php?q=node/1231
Модуль FCKeditor
обертка - http://drupal.org/project/fckeditor
редактор - http://www.fckeditor.net/whatsnew
Сначала заливаем обертку, затем в нее в папку fckeditor сам редактор.
Само подключение модуля стандартно, он сразу готов к работе.
Загрузка изображений на сервер.
Модули
http://drupal.org/project/imce
http://drupal.org/project/imce_mkdir
http://drupal.org/project/imce_crop
Надо создать роль (админ или модератор) и дать ей разрешение "access fckeditor"
Далее в "Поля профилей" настроим профиль Advanced, щелкаем «изменить» напротив профиля Advanced.
Basic setup: Устанавливаем галочку Админ или Модератор (кого создали ранее)
Editor appearance: Toolbar – устанавливаем "Drupal Full" (будут все возможности)
Язык – выбираем Ru
И по желанию можно изменить Skin, мне нравится Office2003
CSS: Editor CSS – устанавливаем FCKeditor default (это не обязательно, но могут возникнуть проблемы при использовании стороних тем для сайта)
File browser settings:
File browser type – ставим IMCE
Auto-detect language: отключено (у меня немецки устанвлен интерфейс)
Еще почему-то в стандатрной настройке отсутствует выравнивание по ширине. Для добавления надо в файле fckeditor.config.js в определении FCKConfig.ToolbarSets['DrupalFull'] в раздел с выравниванием добавить 'JustifyFull'
Чтобы рисунки отобразились, так же нужно установить Формат ввода в «Full HTML».
Из соображений безопасности формат ввода «Full HTML» можно давать лишь администратору, или модератору, а обычным пользователям «Filtered HTML», в который нужно добавить необходимые теги.

Пользовательское соглашение при регистрации на сайте
http://content-management-systems.info/node/940

Облако тэгов.
Описание утащено отсюда

Для создания облака тегов, нам потребуются 2 модуля, Taxonomy, который входит в стандартную поставку, и Tagadelic, который можно скачать тут.
Модуль Taxonomy один из ключевых модулей Drupal, он отвечает за категории, и позволяет создавать неограниченное количество схем классификации. Другими словами, если мы хотим создать на сайте раздел новости, мы сначала сделаем классификацию(словарь) «Новости», и при создании статей будем приписывать их к этому словарю, а при выводе пользователю, будем отображать записи принадлежащие к словарю «Новости». По описанию все выглядит немного путанно, но на деле все просто и прозрачно. Скачаем модуль Tagadelic, и активизируем привычным способом (Модуль Taxonomy по умолчанию активизирован, если это не так, исправьте).
Теперь идем в меню «Управление → Таксономия» и нажимаем «Добавить словать»,

Название словаря: Теги (или что-нибудь что понравится вам больше)
Типы материалов: Запись в блоге (Ведь мы создаем блог -) )
В меню «Настройки» устанавливаем галочки «Теги» (Термины будут создаваться пользователями при создании материала, путём набора слов, разделённых запятыми) и «Обязательно» (По крайней мере, один термин должен быть выбран во время создания материала).

Расставить материалы в нужном порядке по ссылке taxonomy/term
Для этого есть модуль weight и его описание-настройка
Понятное описание http://xandeadx.ru/blog/drupal/2
http://xandeadx.ru/blog/drupal/3
http://www.studiored.ru/blog/sozdaem-katalog

Иерархическое редактирование таксономии - модуль taxonomy_manager

Файловый браузер
Модуль filebrowser
Затем в "Создать материал" создаем "Directory listing" и его настраиваем на отображение нужного каталога. Не забыть отметить отображение подкаталогов.

Файловый менеджер для админа

Модуль WebFM

Создания блока "Похожие статьи"
Модуль Similar By Terms, скачать его можно тут.

Подбор цветов
http://www.degraeve.com/color-palette/index.php?
http://colorschemer.com/online.html

Отключить вывод ошибок на экран, только в файл
/admin/settings/error-reporting

Переопределения назвваний статей в строке браузера
Модуль Page_title
Его надо еще донастроить - автоматическая генерация, отображение при редактировании.

SEO мета тэги.
Модуль Meta Tags (Nodewords)
Позволяет редактировать разнообразные meta и автоматом их генерировать.

Вводный курс по Drupal
(скачать архивом)
Пример создания сайта с заказом еды

Модуль для админки Admin menu

Организация сложного макета - модуль Panels и Chaos tool suite (ctools)

Карта сайта - модуль Site map и модуль XmlSitemap

Для "сворачивания" больших текстовых блоков можно использовать модуль Collapse_Text
[collapse] большой текст [/collapse]
Если надо показать уже свернутый текст, используем [collapse collapsed].
Оптимизация
Статья
Настройки, сниппеты www.drupalka.ru
Интересная статья Друпал для «Чайников» (значит я чайник, т.к. мне понравилась)

Drupal и безопасность.

Модуль ограничивающий возможность перебора пароля
http://drupal.org/project/login_security
"из коробки" у друпала отсутствует ограничение на перебор

Видео о безопасности (семинар) http://nikolaevskiykurier.com/mitas/dckyiv09-drupal-dlya-paranoikov-bezopasnost

Drupal и редактор Tinymce

Для удобства редактировани надо модуль wysiwyg и сам редактор tinymce.
http://drupal.org/project/wysiwyg
http://tinymce.moxiecode.com/download.php
Устанавливаем модуль wysiwyg, затем распаковываем в нужное место (sites/all/libraries/) tinymce и настраиваем.

среда, 17 марта 2010 г.

Drupal установка и настройка

Все по установке есть здесь http://remage.su/content/drupal-urok-pervyi-blog-ustanovka-nastroika-i-rusifikatsiya. Так что дальше можно не читать.

Установка.

Берем здесь http://drupal.ru. Там же и локализация "единым файлом"
Установка особых трудностей не вызывает. Надо сделать после распаковки, это поменять права на ./sites/default. Там же переименовать default.settings.php в settings.php и дать ему права на запись, после установки отобрать. Создать там же каталог files и ему права на запись. И заходим браузером на наш сайт.
1. Там выбор языка "Install Drupal in English"другого все равно нет. (потом поменяем).
2. Затем имя базы, логин и пароль к базе
3. Личные данные - название сайта, эл.адрес, пароль к админке.
4. Часовой пояс, тип линков и пр.
И все, заходим в админ панель.

Локализация.
в формате PO, всё в одном файле http://drupal.ru/downloads
http://www.drupal.ru/node/13024

инструкция есть здесь и здесь
1. В модулях (/admin/build/modules) надо активировать модуль Locale (теперь сможем импортировать рус. язык)
2. В импорте языка (/admin/build/translate/import) загружаем наш скачанный файл в формате PO. Выбираем импортировать его в русский язык.
3. В (/admin/settings/language) выберем русский по умолчанию.
Не забываем нажимать кнопки внизу для сохраниния изменений.
Все, сайт и админка будут на русском.

Создание меню.
API меню на русском http://api.drupal.ru/api/group/menu
http://remage.su/content/drupal-urok-pyatyi-menyu-i-s-chem-ego-edyat-sozdanie-vypadayushchikh-menyu-i-razvertyvayushc
http://www.drupal.ru/node/8891

Что бы порезать меню на части (верхнее и подменю справа) http://drupal.org/project/menu_block_split

Хлебные крошки (Breadcumb)

Для расширенной настроки модуль menu_breadcrumb Описание на русском здесь.
Что бы убрать "Главная" из строки навигации, в template.php (в выбранной теме) добавим код:
function phptemplate_breadcrumb($breadcrumb) {
array_shift($breadcrumb); //Удалить первый элемент ("Главная")
if (!empty($breadcrumb)) {
return '< div class="breadcrumb">'. implode(' » ', $breadcrumb) .'< /div > ';
}
}
(не забыть удалить пробелы перед div и /div)
Темы
http://themegarden.org/drupal6/
Темы для админ-панели
http://yarroha.org.ua/content/14/temy-adminki-dlya-drupal.html

понедельник, 15 марта 2010 г.

Защита web-каталога паролем.

В каталог кладем файлик .htaccess со следующим содержанием:

AuthType Basic
AuthName "Administrative zone"
AuthUserFile /путь/.htpasswd
Require valid-user


Затем создаем файл паролей
htpasswd -c /путь/.htpasswd имя (запросит пароль)
htpasswd -bc /путь/.htpasswd имя пароль ("пакетный" режим)
флаг -c создает файл, т.е. второго и следующего пользователя уже вносим без него.

Проверяем права. Если с .htpasswd снять чтение группы, то получаем Internal Server Error.
Работает с 440 (r--r-----)

Если надо защитить каталог со скриптами, то тогда в httpd.conf надо добавить

<Location /cgi-bin/каталог>
и далее все что выше, т.е. AuthType Basic и т.д.
</Location>

Затем в скрипте доставать из переменных окружения REMOTE_USER, т.е. $ENV{ 'REMOTE_USER' }
и уже его обрабатывать на предмет прав и т.п.

WordPress установка и настройка.

Берем здесь http://ru.wordpress.org/, там же ссылка на "кодекс" с краткими инструкциями по настройке.
http://wphelp.ru/
http://blogproblog.com/
http://www.wordpressplugins.ru/
http://www.blog-shon.ru/


Безопасность:
1. Поменять префиксы у базы
2. Изменить логин admin на другой.
3. Создать защиту на основе .htaccess
обзор плагинов безопасности http://blogproblog.com/10_wordpress_security_plugins/
http://wordpress.by/tag/wordpress/
http://ledniov.ru/2009/12/19-plaginov-wordpress-dlya-zashhity-bloga

http://mywordpress.ru/plugins/rustolat/ - транслитератор русских урлов - полезно
http://www.wordpressplugins.ru/critical - большой обзор плагинов

Продвижение и оптимизация:
http://liveseo.org/nastrojka-wordpress/
http://www.wp-info.ru/


Темы:
http://wordpresse.ru/ - очень много и хороших
http://ktonanovenkogo.ru/wordpress/temy-oformleniya-wordpress-ustanovka-shablonov-sostoyat-kak-rabotayut.html - как устроены темы



http://www.vverx.com/wordpress/bezopasnost-wordpress/
http://streha.ru/2007/09/19/zashhiti-sebya.html

Базу что бы поправить
http://www.wordpressplugins.ru/administration/wp-dbmanager.html
http://www.phpmyadmin.net/home_page/index.php
Распаковываем, копируем. и запускаем .../phhMyAdmin/setup/index.php - настраиваем.
http://php-myadmin.ru/doc/config.html



Плагины
Для оптимизации поисковиков all-in-one-seo-pack
http://semperfiwebdesign.com/portfolio/wordpress/wordpress-plugins/all-in-one-seo-pack/

Обзор плагинов:
http://www.master-live.ru/wp.html

http://blog.eskhosting.ru/category/uroki-wordpress/
Настройте шаблон ссылок вашего блога:(Параметры - Постоянные ссылки)
Вместо стандартных ссыло, сделаем, чтобы ссылки выглядели так: http://myblog.com/category/mypost/
Для этого в настройках шаблона ссылок укажите поле “Произвольно” и шаблон: /%category%/%postname%/

Помогает разобраться файлик со следующим содержанием


Главное не забыть его затем удалить.

Список кодов html символов.
http://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%B5%D0%BC%D0%BE%D0%BD%D0%B8%D0%BA%D0%B8_%D0%B2_HTML

суббота, 27 февраля 2010 г.

Тонкая настройка hdd

tune2fs /dev/... поможет настроить много параметров
одни из вариантов "-C nn" - сколько раз монтировалься раздел и с его помощью можно форсировать проверку при следующей загрузке. (обычно макс. кол-во загрузок до следующей проверки 25)
dumpe2fs -l /dev/... покажет инфо по разделу

среда, 24 февраля 2010 г.

jabber, psi, icq

icq.jabber.snc.ru
icq.jabber.kh.ua

понедельник, 22 февраля 2010 г.

zip и русские имена

Проблема с русскими именами файлов в архиве zip созданным под вин. Кодировка.
поможет после распаковки следующая последовательность
convmv --notest -r -f cp-1252 -t cp-850 /path/to/unzipped/files
convmv --notest -r -f cp-866 -t utf-8 /path/to/unzipped/files

а вообще для unzip есть патч, который позволяет выбирать кодировки.

суббота, 20 февраля 2010 г.

Проброс портов в iptables

Для проверки (сканирования) портов
http://tools.tehnofil.ru/port/port.php
http://smart-ip.net/en/tools/ports-scan
http://www.whatsmyip.org/ports/

Что бы со своей же машины тестировать внешнее (инет) соединение
http://www.anonymouse.ru/cgi-bin/nph-proxy_ru.cgi

Онлайн туторал iptables
http://www.citforum.ru/operating_systems/linux/iptables

Послушать запросы на интерфейсе
tcpdump -ni ppp0 port 8080

Посмотреть статистику iptables
iptables -t nat -nvL --line
iptables -nvL --line

Попробовать в модеме
1. SSH->sh
2. iptables -t nat -A PREROUTING -d 212.98.184.222 -p tcp --dport 4662 -j DNAT --to-destination 172.16.71.10:4662

суббота, 30 января 2010 г.

Полезные утилитки.

Календарь
Консольный = "cal -m"
Графический = "orage" (идет в комплекте в xfce). С ключем "-t" переключает при каждом выполнении команды видимый-скрытый режим. Удобно в icewm навесить на даблклик часов.

вторник, 26 января 2010 г.

Bash и все что с ним связано.

Что history не запоминал дублирующиеся команды в .base_progile дабавляем
export HISTCONTROL = "ignoreboth"
попутно команды с первым пробелом то же не будут попадать в history, типа sudo halt, вот здорово ее в спешке случайно из хистори запустить и рыдать, видя, как кусок работы уходит в нибытие.

вторник, 12 января 2010 г.

avrdude и прошивка

Прочитать фьюзы из atmega8 (в файлы пишутся hex значения, типа 0xde):
sudo avrdude -c usbasp -p m8 -U hfuse:r:hfuse.txt:h -U lfuse:r:lfuse.txt:h

Прочитать фьюзы из atmega8 (в файлы пишутся в двоичном виде, типа 0b11011101):
sudo avrdude -c usbasp -p m8 -U hfuse:r:hfuse.txt:b -U lfuse:r:lfuse.txt:b

Онлайн калькулятор для фьюзов:
http://www.engbedded.com/fusecalc/
http://www.elektronik-kompendium.de/public/arnerossius/temp/avrfuse/

Три странички с расшифровкой фьюзов под разные контроллеры:
http://www.psychogenic.com/resources/avr/fuses/fuse-low.pdf
http://www.psychogenic.com/resources/avr/fuses/fuse-high.pdf
http://www.psychogenic.com/resources/avr/fuses/fuse-ext.pdf

Записать фьюзы в atmega8 (в данном примере 8MHz внутренний генератор)
sudo avrdude -c usbasp -p m8 -U lfuse:w:0xE4:m

Записать прошивки в atmega8
sudo avrdude -c usbasp -p m8 -U flash:w:main.hex:i