29 авг. 2014 г.

Русификация и установка Midnight Commander 4.8 в CentOS 5

Как известно в стандартных репозиториях centos-a 5 максимальная версия mc - 4.6, который нифига не поддерживает смену кодировок в редакторе. Без этого очень сложно жить на сервере - сайты русскоязычные, кодировки виндовые, жуть. Поэтому будем апдейтиться ! А заодно с апдейтом миднайта поменяем и локаль.
Итак для русификации локали нам потребуется: 

13 мар. 2014 г.

Проверка работы процесса

В стековерфлоу куча примеров, но также куча нерабочих. Вот так работает:

if pgrep process >/dev/null 2>&1
  then
     echo "process is running"
  else
     echo "process is not running"
fi

6 мар. 2014 г.

Отправка email c аттачментом в command line linux

Самый простой вариант, который мне нагуглился

mailx -a /path/to/file email@address

Однако контент тип (MIME-TYPE) атача определяется автоматически. Мне же потребовалось явное указание text/plain, mailx ставил что-то типо octet/stream и в мыле никакого аттача не было, все отображалось текстом. Есть еще простая и замечательная команда mpack, в которой уже можно указать mime-type, но как оказалось не для текста (только audio/video/image).
Строчка такая:

mpack -s 'subject' file.txt -c mime-type email@example.com

В итоге наткнулся на отправку через mutt (с этим консальным  mail-монстром мне уже приходилось немного пересекаться и даже аттач отправлять, но с текстом также возникали проблемы). Итак, вот как это делается

echo | mutt -s 'subject' -a file.txt -- email@example.com

Осталось отметить в жирной рамочке )

24 дек. 2013 г.

Террабайт в облаке mailru (linux way)

У многих айтишников когда они слышат mailru возникает всякие нехорошие ассоциации. Не буду лукавить - у меня такие впечатления тоже где-то сидят. Однако многие знакомые в последнее время как-то нездорово перевсполошились по поводу сией корпорации добра. И думаю не зря всполошились. Речь пойдет о дисковом пространстве в облаке.

До сего времени я пользовался такого рода бесплатными услугами от яндекса - 10 гб в принципе хватало, но пользовался не особо часто ибо скорость по webdav честно говоря не впечатляла. В конце лета корпорация добра уже запустила услугу дискового облака со 100гб с доступом по веб и со своей аппликухи в винде, но без всякого намека на линуксопригодность. И вот не так давно они таки открыли доступ по уже знакомому протоколу webdav (да еще и с 1ТБ бесплатно) коим можно спокойно пользоваться и монтировать диск практически в любой современной ОС. Как это делать в GNU/Debian Linux я уже описывал на примерах с яндексом. У мэйла единственное отличае - это логин (в данном случае - адрес мыла полностью xxx@bk.ru, xxx@mail.ru и т.д).

Так вот к чему вся эта присказка -  а к тому что скорость и латентность доступа откровенно говоря очень даже неплохие, да и целый террабайт как бы тоже не плохо. Конечно dav сам по себе не очень быстрый (вроде как это rest по http), но отключив кеш и заливая небольшие файлы пользоваться вполне годно - я бы сказал даже можно использовать для своих нужд на сервере для хранения не сильно требовательной статики (допустим для личного блога фотографа с кучей картинок очень даже не плохой вариант - dav для аплоада, паблик http с mailru).

Вот такие облака - ждем ответа от конкурентов :)

18 окт. 2012 г.

Midnight Commander. Двигаем текстовые блоки.

Наверняка в любом уважающем себя тектовом редакторе есть возможность управления блоками выделенного текста. В самом простом своем виде оно сводится к нажатияем клавиш tab и shift-tab для сдвига блока вправо и влево соответственно. В текстовом редакторе midnight commander-а вы такой, казалось бы, элементарной вещи не найдете в дефолтовых настройках.


Однако для данной фичи есть заготовка в файле конфигураций горячих клавиш. Сам файл настроек находится здесь:
/etc/mc/mc.keymap
В файле есть строчки BlockShiftLeft и BlockShiftRight, которые никак не определены. Так вот их то и нужно определить. Это и будут клавиши для сдвига выделенного блока. Однако не все клавиши можно назначить(это не считая назначенных), хотя возможно в этом виноваты возможности терминала. В моем случае подошли alt-shift-u и alt-shift-i соответственно.

5 авг. 2012 г.

Консольный неро или как записать cd\dvd в linux ?

Мне всегда было известно, что в linux существует множество инструментов прожига дисков - как графических так и консольных. Однако удобства графического интерфейса и простоты консоли в этой сфере всегда не хватало. И вот вдруг понадобилось мне записать диск с аудио дорожками (2012й год на дворе - никто уже не пишет диски !)  И всё же - прослишивание CD для меня это нечто больше чем для некоторых.  Так вот, наконец-то ! мною была найдена надстройка над консольными утилитами (wodim, dvd+rw-tools, genisoimage). Наконец-то можно забыть все параметры прожига и конвертирования ! Утилита очень даже приличная. Без всяких проблем мною сходу был записан Audio-CD из flac-файлов.


Единственной проблемой оказалось отсутствие команды cdrecord в моем squeeze. Проблема решается просто:
ln -s /usr/bin/wodim /usr/bin/cdrecord
Остальные пути можно проверить в настройках утилиты.
Ах да, самое главное - название тулзы mybashburn.
Счастливого прожига !

25 апр. 2012 г.

Монтируем Яндекс.Диск over WebDAV (davfs2)


В последнее время появилось огромное количество облачных хранилищ персональных файлов. Вот уже и гугл и яндекс запустили свои сервисы. Сегодня мы попробуем сервис от яндекса (ввиду наибольшего размера и географической близости). На сайте яндекса есть инструкция по использованию сервиса через WebDAV посредством утилит гнома. Мы же будем монтировать посредством fstab. Итак.
  1. Устанавливаем пакет davfs2:
    apt-get install davfs2
    
  2. Создаем директорию для монтирования диска
    mkdir /mnt/yandex
    
  3. Добавляем строчку в fstab:
    https://webdav.yandex.ru:443/ /mnt/yandex davfs uid=linuxuser,gid=linuxuser,file_mode=644,dir_mode=755,user,noauto,rw 0 0
    
    где linuxuser - системный пользователь.
  4. Установим данные пользователя сервиса в конфигах, чтобы не вводить данные каждый раз при монтировании:
    echo 'https://webdav.yandex.ru:443 login "password"' >> /etc/davfs2/secrets
    
    login, password - данные яндекс сервиса. ! Обязательно нужны кавычки для логина/пароля со знаками препинания !
  5. Ставим права запуска для mount.davfs:
    chmod u+s /sbin/mount.davfs
    
  6. Монтируем от пользователя
    mount /mnt/yandex
    
В моем случае возникли проблемы при монтировании - /sbin/mount.davfs: / is the home directory of user distccd. Полечилось выставлением опции в настройках devfs2:
ignore_home distccd
Аналогичным способом можно подключать сервисы от других поставщиков облачных хранилищ (dropbox, moeoblako и др.)

19 апр. 2012 г.

Маршрутизация определенного ip-адреса на резервный канал.

Имеем маршрутизатор в лице PC-debian cо следующими параметрами:
dev  addr           gw             bcast
eth0 192.168.1.1    192.168.1.1    192.168.1.0/24
eth1 1.1.1.125      1.1.1.126    1.1.1.124/30
eth2 2.2.2.86       2.2.2.85     2.2.2.84/30

default gw 1.1.1.126
Задача. Маршрутизовать ip (192.168.1.15) из сети 192.168.1.0/24 на запасной канал (eth2). Основным является eth1.
  1. Создаем таблицу маршрута
    echo 210 reserv >> /etc/iproute2/rt_tables
    
  2. Задаем новое правило: для всех пакетов, приходящих с IP-адреса 192.168.1.15, перенаправление будет осуществляться согласно таблице reserv:
    ip rule add from 192.168.1.15 table reserv
    ip rule ls
    
  3. Прописываем правило для новой таблицы и очистка кэша маршрутов для вступления в силу сделанных изменений:
    ip route add default via 2.2.2.85  dev eth2 table reserv
    ip route flush cache
    
  4. Добавляем правило подстановки ip-адреса в NAT таблицу iptables
    iptables -t nat -A POSTROUTING -j SNAT -s 192.168.1.15 \
    -o eth2 --to 2.2.2.86
    
Более подробно можно почитать тут
http://www.ibm.com/developerworks/ru/library/l-static-routing/
Успехов !

30 нояб. 2011 г.

QtScript. От простого к сложному.

Давно хотел написать что-нибудь об этом замечательном фреймворке, с которым работаю достаточно много времени. Qt можно сказать перевернул моё отношение к с++. В этой заметке хочу рассказать об использование интересного и полезного инструмента - QtScript. О его назначении, что это такое и с чем его едят, можно почитать достаточно подробно в русском варианте здесь.
Итак, сразу перейдем к делу. Простейший вариант обработки скрипта:
// создаем среду для исполнения кода Qt Script
QScriptEngine engine;
// выполняем код "100 + 1" и возвращаем значение
QScriptValue value = engine.evaluate("100 + 1");
// проверяем ошибки
if (engine.hasUncaughtException()) 
    qCritical() << engine.uncaughtExceptionBacktrace();
// преобразуем QScriptValue в C++ тип
int cppvalue = value.toInteger();
Допустим, нам требуется передать некий объект в скрипт и проделать с ним какие-то действия. Как написано в документации - "Любой экземпляр, основанный на QObject, можно сделать доступным для использования в сценариях.".
// объект для передачи в скрипт
QLabel * label = new QLabel;
// создаем объект-обёртку для использования в QtScript
QScriptValue objectValue = engine.newQObject();
// передаем его непосредственно в глобальное окружение скрипта
engine.globalObject().setProperty("label", engine.newQObject(label));
Теперь в коде скрипта доступна глобальная переменная label. Переменная служит в качестве посредника для базового объекта C++.
Далее можно смело в коде скрипта делать так:
label.setText("Hello World !");
и наш лэйбл отобразит отобразит все что нам нужно.

27 окт. 2011 г.

ape cue → separated flac

Возникла необходимость конвертировать ape.cue файл в раздельные flac-и
Для debian-а потребуются :
echo 'deb http://mirror.yandex.ru/debian-multimedia/ stable main' \
>> /etc/apt/sources.list
apt-get update
apt-get install monkeys-audio shntool wavpack cuetools flac
и следующий скрипт
#!/bin/sh
    
    cuebreakpoints 1.cue | shnsplit -o flac 1.ape
    cuetag 1.cue split-track*.flac
    c=0
    
    for i in `echo *.flac`
    do
        name=`metaflac --show-tag=TITLE $i | \
            sed -E -e 's,TITLE=,,' -e 's,[[:space:]]+, ,g'`
        c=`expr ${c} + 1`
        filename=`echo  0${c} - ${name}`
        mv ${i} "${filename}".flac
    done
1.cue - исходный cue
1.ape - исходный ape
На выходе получаем flac - файлы типа
01 - XXXXX
02 - XXXXX
0X - XXXXX
с тегами из cue.

28 мая 2010 г.

PostgreSQL. Экстремальная реинкарнация данных.

Волею случая (а может быть благодаря хитрым хацкерам), стал я жертвой потери всех логов на сервере.
Наиболее чувствительным к потере оказался сервер postgresqsl - стартовать он в таких условиях категорически отказывался. В существующем кластере попросту испарились каталоги pg_log , pg_clog , pg_xlog. И как это ни странно бэкапов в виде дампов на сервере не велось :) . Слава богам, но сами данные остались не тронутыми. Перво на перво, что пришло в голову - сделать бэкап всего этого дела. Кроме того в сети наткнулся на подобные случаи и восстановил xlog. Осталось дело за малым - восстановить clog. Делается это следующим образом: генерируется файлик соответствующего имени заполненный нуликами с помошью утилиты dd:
dd bs=67108864 count=1 if=/dev/zero of=/database/postgres/pg_clog/0000
где bs - размер файла
of - имя файла лога
Имя файла лога можно посмотреть в логе постгриса при старте - он как раз не стартует из-за его отсутствия।
Вот и всё - сервер стартует !
Да сохранит вас священный бэкап ! :)

1 мая 2010 г.

rockbox on cowon

Не так давно мне предоставилась счастливая возможность пополнить ряды обладателей, не побоюсь этого слова, самого лучшего портативного плеера в мире марки cowon. Для непросвященных могу лишь сказать что cowon d2 стал обладателем нескольких наград в престижных интернет и печатных изданиях. Собственно говоря, поэтому мой выбор пал на обновленный d2 - d2+.
Как на любом другом плеере в cowon прошивка проприетарная. Однако, как мне стало известно, существуют и открытые прошивки для таких портативных устройств как муз. плееры. Покопавшись в сети, ничего подобного даже близко к RockBox-у я не нашел. Масштабность и мощь проекта впечатляет. RockBox стартовал аж в 2001 году - на тот момент я о mp3 плеерах вовсе ничего не слышал :) . Так вот, обсуждать встроенную прошивку мы конечно не будем (должен заметить прошивка сделана вполне с умом) - это тема для "других" блогов. Сегодня я поделюсь о первом использовании rockbox-а на cowon d2+.
Есть несколько способов поставить rockbox. Первый из них - это скачать автоматический инсталлятор RockBox Utility со всевозможными визардами. Второй - скачать билд для определенной модели плеера и пропатчить родную прошивку загрузчиком. Ну и третий способ - по которому собственно я и пошел - это скачать сорцы и скомпилить :)
Что нам для этого нужно:
  1. Собственно исходы rockbox. Я взял последний релиз. Для любителей всего самого свежего есть доступ к svn.
  2. GCC компилятор собранный под архитектуру процессора плеера. В моем случае это arm.
  3. Линкер из пакета binutils так же собранный под архитектуру процессора плеера.
  4. Родная проприетарная прошивка. Можно взять туже самую что была установлена на плеере. К примеру 2.13.
  5. Патчер прошивки. Необходим для внесения изменений в родную прошивку, с целью загрузки rockbox-а. Патчер есть в исходниках rockbox-а.
Теперь обо всем поподробнее.
Скачиваем сорцы, распаковываем:
wget http://download.rockbox.org/release/3.5.1/rockbox-3.5.1.7z
p7zip -d rockbox-3.5.1.7z
cd rockbox-3.5.1/tools
Далее нужно собрать gcc для arm архитектуры. Можно собирать самому, а можно воспользоваться скриптом из поставки сорцов. Скрипт выкачивает и собирает "предпочтительные" версии gcc-core и binutils:
./rockboxdev.sh (выбираем arm) 
Ставим переменные окружения нового компилятора:
export PATH=$PATH:/usr/local/arm-elf/bin
Собираем собственно rockbox:
cd ..
./tools/configure (выбираем 33, потом N)
make
make zip
Собираем загрузчик для rockbox:
mkdir btldr
cd btldr
./../tools/configure (выбираем 33, потом B)
make
Теперь нужно собрать утилиту для патчинга родной прошивки собранным загрузчиком rockbox:
cd ../rbutil/mktccboot
make
Скачиваем родную прошивку:
wget http://www.cowonglobal.com/download/Firmware/cowonD2+/D2N_P_2.13.zip
unzip D2N_P_2.13.zip
Патчим:
cp ../../btldr/bootloader.bin bootloader.bin
./mktccboot D2N_P.bin bootloader.bin D2N_P_patched.bin
Получившуюся патченную прошивку кладем в корень плеера (как при обычномобновлении).  Распаковываем rockbox.zip в корень SD-карты. Теперь при включении резко ставим рычажок в положение hold (блокировка) до появления логотипа rockbox.
Осталось только воспользоваться всеми "прелестями" опенсорцной прошивки.

2 апр. 2010 г.

Апачный томкат

 
Кто бы мог подумать что есть прок в использовании двух веб-серверов одновременно. Однако это так. Многие уже на этом убеждались - и я в частности. Достаточно вспомнить наиболее популярно применяемую связку nginx + apache. В большинстве случаев такие связки применяются для разделения типа контента и распределения нагрузки.
Сегодня я попытаюсь рассказать о связке Apache Web Server + Apache Tomcat.
Поэтапно выглядит это следующим образом (как всегда debian):

1. Апт-гетим
apt-get install apache2 libapache2-mod-jk tomcat5.5
2. Редактируем /etc/libapache2-mod-jk/workers.properties
workers.tomcat_home=путь до томката
workers.java_home=путь до явы
3. Редактируем /etc/apache2/apache2.conf. Правим наш ВиртуалХост и добавляем строчку JkMount /имя сервлета/* ajp13_worker Не забываем о самом сервлете - оно должно совпадать)

4. Рестартуем серверы.

Теперь все запросы начинающиеся с "/имя сервлета/" с апача будут направляться на томкат через специальный протокол. Всё остальное будет отдаваться по старому (как правило статика). Кстате можно выключить прослушку порта томкатом убрав в server.xml

15 мар. 2010 г.

Тесты нагрузки.

Существует огромное множество веб-серверов для java-приложений. От маленьких и легких "Simple" и "NanoHTTPD" до больших и могучих , таких как "SunJavaWebServer".
Тестировать все не имеет смысла, так как многие из них построены на одной базе, в частности на tomcat-е их построено предостаточно. Кому интересно вот далеко не полный список открытых веб-серверов http://java-source.net/open-source/web-servers.
Итак, сегодня наши пациенты:
  • Apache Tomcat 6.0.24
  • Sun Java WebServer 7.0u7
  • Jetty 7.0.1
  • Glassfish 2.1.1
1. Самый простой тест по нагрузке:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class TestingServlet extends HttpServlet {
    public void doGet(HttpServletRequest, HttpServletResponse 
     response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println("Hello, world!");
        out.close();
    }
}
Выполняем уже привычный тест:
ab -n 10000 -n 10000 http://localhost:8083/helloworld/test

Получаем следующие результаты:
  • Apache Tomcat 6.0.24 - 3.05 сек
  • Sun Java WebServer 7.0u8 - 4.48 сек
  • Glassfish 2.1.1 - 6.48 сек
  • Jetty 7.0.1 - 19.84 сек
Как видно , явный аутсайдер - это Jetty с ее 19.48 секундами на загрузку 10000 страниц. Быстрее всех оказался как это ни странно всем известный Tomcat.

1 мар. 2010 г.

ssh через proxy

Не так давно в сети обнаружил интересную софтину для туннелирования траффика openssh через прокси сервер. Утилита называется corkscrew.
Для дебиана 5 есть собранная версия 2.0 в репозитории.
Теоретически через нее можно прогонять траффик для любой программы - главное правильно настроить перенаправление. Для openssh же все очень просто:
  1. Ставим corkscrew.
  2. Правим ~/.ssh/config или /etc/ssh_config. Создаем если нет.
  3. Добавляем
    Host *
    ProxyCommand corkscrew http-proxy.example.com 8080 %h %p
    #, где 
    # Host - хосты на которые ходим через прокси. * - значит на всё.
    # http-proxy.example.com - наш прокси сервер
    # 8080 - наш порт
    
  4. Работаем :)
Для меня преимущество данного метода в том что по ssh (sshfs) у меня примонтирован диск с музыкой из дома - а напрямую ходить невозможно. Главное после этого не забыть правильно задать хосты на которые будем ходить через прокси в строке Host файла config - иначе прокси не будет видеть локальные серверы.