Обзор за неделю [2009-8]

И вновь всё самое интересное из множества моих подписок.

Алиас для показа самых больших файлов и директорий в текущей директории // ЛинСовет: Полезные Советы По Linux;

Ограничение использования CPU каким-либо процессом // ЛинСовет: Полезные Советы По Linux;

Переключение на внешний монитор из командной строки // ЛинСовет: Полезные Советы По Linux;

List only directories from the command line [Получение только списка директорий из командной строки] // Tips4Linux.com;

How many files? [Узнать сколько файлов в директории из командной строки] // Tips4Linux.com;

Записки Плюшевого Крыса: Подсветка синтаксиса в nano // RuNIX.org — планета блогов о *NIX на русском языке.

Русская консоль в Ubuntu без доп. пакетов

Многие сталкивались с проблемой неправильного отображения русского языка в консоли Ubuntu.

Перепробовав несколько вариантов с форума я пришёл к наиболее приемлемому и простому.
Узнать

Установка GRUB

GRUB У меня есть старый компьютер на котором установлено два жёстких диска. Это компьютер используется для экспериментов и хранения старых данных. Несколько недель назад у меня появилась потребность кое-что отсканировать, поэтому я установил на один из жёстких дисков (hd0) Windows XP. Ставил на hd0 так как Ubuntu находилась на hd1, а устанавливать две ОС на один физический диск мне не очень хотелось. Только после установки до меня дошло что загрузчик от Ubuntu находился на том HDD на который я установил Windows, а следовательно программа установки Windows его удалила. Была, конечно, идея переустановить Ubuntu, но этого делать не хотелось, так как Ubuntu уже была настроена так как мне нужно, а настраивать её заново очень не хотелось.

В результате поиска в Интернете я нашёл очень простое, быстрое и элегантное решение:

  1. Загружаемся с Live CD;
  2. Монтируем жёсткий диск в произвольную папку (я примонтировал в /media/disk);
  3. Выполняем
    sudo grub-install /dev/hda --recheck --root-directory=/media/disk

    Опция recheck используется для того чтобы проверить корректность файла /boot/grub/device.map и если что исправить его.

После перезагрузки и извлечения LiveCD, я снова смог загрузится в установленную Ubuntu.

Обзор за неделю [2009-7]

Продолжаю вести обзоры интересных статей за неделю.

/bin/cat: /sys/block/hda/dev: No such file or directory // ЛинСовет: Полезные Советы По Linux // Статья повествует о том как человек поменял на сервере, находящегося под управлением Debian, материнскую плату, процессор и память, а потом заставил его работать без переустановки системы.

Full Circle Magazine на русском // Хабрахабр // На мой взгляд, там есть что можно почитать, но этого очень мало.

Смотрим видео в терминале // ЛинСовет: Полезные Советы По Linux // Теперь и на сервере можно смотреть видео.

JavaScript в Firefox/Wine работает быстрее чем в Firefox/Linux // Linux.org.ru News

Раскладка Ильи Бирмана

Сегодня один мой знакомый дизайнер рассказал об очень полезной, на мой взгляд, вещи — раскладка Ильи Бирмана. Это типографская раскладка которая позволят очень удобно печатать символы типа: « » [ ] { } € ® ™ © ↓ ↑ ← → ∞ ² ½ ³ ⅓ ¼ ‰ и так далее. Все эти символы я ввёл не переключаясь с русской раскладки клавиатуры и не прибегая к другим программам, правда удобно?

На сайте есть бинарные пакеты для Windows и Mac, а для Linux есть файлы и инструкции (аж два варианта: xkb-unicode и Rukbi ) о том что с ними нужно делать.

Я выбрал Ruckbi, так как описание по её установке мне больше понравилось.

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

Теперь не придётся переключаться в IDE на английский для того чтобы ввести „[“, „]“, „{“, „}“! А ещё не нужно пользоваться OpenOffice.org или copypastecharacter.com для получения „«“ и „»“! Класс!

RTorrent – my way

В своей первой заметке в этом блоге я решил написать именно про RTorrent — клиент p2p сетей работающих по протоколу bitorrent. Потратив солидное количество времени на поиск нужных мне настроек и перерыв десятки мануалов хотелось бы облегчить жизнь идущим за мной энтузиастам.

Требования были следующие:
— автоматическая загрузка клиента при старте системы
— работа в фоновом режиме
— распределение контента по различным категориям(папкам) после окончания загрузки.
— информативный интерфейс(не графический)
— быстрый графический интерфейс
— наличие пакета в репозитарии Ubuntu
— умеренный расход оперативной памяти и т.д.

По всем этим параметрам подходил RTorrent. Поскольку я не очень большой любитель компилировать софт из исходников и не до конца избавился от microsoft-зависимости, выбрал самый простой путь — ставить из репозитория.
Нагуглил несколько сносных инструкций для установки. Инструкция №1, инструкция №2.

Если рассматривать весь процесс по шагам то выходит следующее:
Шаг 1. — установка

Ставим необходимые пакеты.

sudo apt-get install rtorrent screen apache2 php5-cgi php5-common php5-sqlite php5-xmlrpc sqlite unzip php5-curl

В случае использования только консольной версии без веб интерфейса необходимо установить только пакеты rtorrent, screen и все затребованные зависимостями пакеты.

Шаг 2. — конфигурация Rtorrent
В домашней директории пользователя необходимо создать файл конфигурации с названием .rtorrent.rc и определить там все необходимые параметры.
Мой файл конфигурации выглядит так:
(Все тонкости будуь описаны позже)

# This is an example resource file for rTorrent. Copy to
# ~/.rtorrent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.

# Maximum and minimum number of peers to connect to per torrent.
min_peers = 1
max_peers = 1000

# Same as above but for seeding completed torrents (-1 = same as downloading)
min_peers_seed = 1
max_peers_seed = 100

# Maximum number of simultanious uploads per torrent.
#max_uploads = 15

# Global upload and download rate in KiB. «0» for unlimited.
download_rate = 800
upload_rate = 500

# Default directory to save the downloaded torrents.
directory = /media/raid/download/all/

# Default session directory. Make sure you don’t run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = /media/raid/rtorrent/

# Watch a directory for new to rrents, and stop those that have been
# deleted.
schedule=watch_directory_1,5,10,»load_start=/media/raid/download/links/all/*.torrent,d.set_directory=/media/raid/download/all/,d.set_custom1=/media/raid/soft/»
schedule=watch_directory_2,5,10,»load_start=/media/raid/download/links/soft/*.torrent,d.set_directory=/media/raid/download/soft/,d.set_custom1=/media/raid/soft/»

on_finished = move_complete,»execute=mv,-u,$d.get_base_path=,$d.get_custom1= ;d.set_directory=$d.get_custom1=»

#schedule =watch_directory,5,5,load_start=/media/raid/download/links/*.torrent

schedule = untied_directory,5,5,stop_untied=

# Close torrents when diskspace is low.
schedule = low_diskspace,5,60,close_low_diskspace=1000M

# Stop torrents when reaching upload ratio in percent,
# when also reaching total upload in bytes, or when
# reaching final upload ratio in percent.

# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
#schedule = ratio,60,60,»stop_on_ratio=200,200M,2000″

# The ip address reported to the tracker.
#ip = 127.0.0.1
#ip = rakshasa.no

# The ip address the listening socket and outgoing connections is
# bound to.
#bind = 127.0.0.1
#bind = rakshasa.no

# Port range to use for listening.
port_range = 6890-6900

# Start opening ports at a random position within the port range.
port_random = yes

# Check hash for finished torrents. Might be usefull until the bug is
# fixed that causes lack of diskspace not to be properly reported.
check_hash = yes

# Set whetever the client should try to connect to UDP trackers.
use_udp_trackers = yes

# Alternative calls to bind and ip that should handle dynamic ip’s.
#schedule = ip_tick,0,1800,ip=rakshasa
#schedule = bind_tick,0,1800,bind=rakshasa

# Encryption options, set to none (default) or any combination of the following:
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
#
# The example value allows incoming encrypted connections, starts unencrypted
# outgoing connections but retries with encryption if they fail, preferring
# plaintext to RC4 encryption after the encrypted handshake
#
encryption = allow_incoming,try_outgoing,enable_retry

# Enable DHT support for trackerless torrents or when all trackers are down.
# May be set to «disable» (completely disable DHT), «off» (do not start DHT),
# «auto» (start and stop DHT as needed), or «on» (start DHT immediately).
# The default is «off». For DHT to work, a session directory must be defined.
#
dht = auto

# UDP port to use for DHT.
#
dht_port = 6901

# Enable peer exchange (for torrents not marked private)
#
peer_exchange = yes

#
# Do not modify the following parameters unless you know what you’re doing.
#

# Hash read-ahead controls how many MB to request the kernel to read
# ahead. If the value is too low the disk may not be fully utilized,
# while if too high the kernel might not be able to keep the read
# pages in memory thus end up trashing.
#hash_read_ahead = 10

# Interval between attempts to check the hash, in milliseconds.
#hash_interval = 100

# Number of attempts to check the hash while using the mincore status,
# before forcing. Overworked systems might need lower values to get a
# decent hash checking rate.
#hash_max_tries = 10
scgi_port = localhost:5000
safe_sync = yes

Шаг 3. — конфигурация screen
Для непрерывной работы Rtorrenta нам потребуется использовать консольный оконный менеджер — SCREEN

Для загрузки rtorrenta при старте системы я использовал скрипт с сайта разработчика.
Мне пришлось его немного подправить(правил ключи для запуска screen), в моём варианте скрипт выглядит так:

#!/bin/sh
#############
######
#############
# This script depends on screen.
# For the stop function to work, you must set an
# explicit session directory using ABSOLUTE paths (no, ~ is not absolute) in your rtorrent.rc.
# If you typically just start rtorrent with just «rtorrent» on the
# command line, all you need to change is the «user» option.
# Attach to the screen session as your user with
# «screen -dr rtorrent». Change «rtorrent» with srnname option.
# Licensed under the GPLv2 by lostnihilist: lostnihilist _at_ gmail _dot_ com
##############
######
##############

#######################
##Start Configuration##
#######################
# You can specify your configuration in a different file
# (so that it is saved with upgrades, saved in your home directory,
# or whateve reason you want to)
# by commenting out/deleting the configuration lines and placing them
# in a text file (say /home/user/.rtorrent.init.conf) exactly as you would
# have written them here (you can leave the comments if you desire
# and then uncommenting the following line correcting the path/filename
# for the one you used. note the space after the «.».
# . /etc/rtorrent.init.conf

#Do not put a space on either side of the equal signs e.g.
# user = user
# will not work
# system user to run as
user=»vini»

# the system group to run as, not implemented, see d_start for beginning implementation
# group=`id -ng «$user»`

# the full path to the filename where you store your rtorrent configuration
config=»`su -c ‘echo $HOME’ $user`/.rtorrent.rc»

# set of options to run with
options=»»

# default directory for screen, needs to be an absolute path
base=»`su -c ‘echo $HOME’ $user`»

# name of screen session
srnname=»rtorrent»

# file to log to (makes for easier debugging if something goes wrong)
logfile=»/var/log/rtorrentInit.log»
#######################
###END CONFIGURATION###
#######################
PATH=/usr/bin:/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin
DESC=»rtorrent»
NAME=rtorrent
DAEMON=$NAME
SCRIPTNAME=/etc/init.d/$NAME

checkcnfg() {
exists=0
for i in `echo «$PATH» | tr ‘:’ ‘\n’` ; do
if [ -f $i/$NAME ] ; then
exists=1
break
fi
done
if [ $exists -eq 0 ] ; then
echo «cannot find rtorrent binary in PATH $PATH» | tee -a «$logfile» >&2
exit 3
fi
if ! [ -r «${config}» ] ; then
echo «cannot find readable config ${config}. check that it is there and permissions are appropriat$
exit 3
fi
session=`getsession «$config»`
if ! [ -d «${session}» ] ; then
echo «cannot find readable session directory ${session} from config ${config}. check permissions» $
exit 3
fi
}

d_start() {
[ -d «${base}» ] && cd «${base}»
stty stop undef && stty start undef
su -c «screen -ls | grep -sq «\.${srnname}[[:space:]]» » ${user} || su -c «screen -dmUSfa ${srnname} 2>&$
# this works for the screen command, but starting rtorrent below adopts screen session gid
# even if it is not the screen session we started (e.g. running under an undesirable gid
#su -c «screen -ls | grep -sq «\.${srnname}[[:space:]]» » ${user} || su -c «sg \»$group\» -c \»screen -f$
su -c «screen -S «${srnname}» -X screen rtorrent ${options} 2>&1 1>/dev/null» ${user} | tee -a «$logfile$
}

d_stop() {
session=`getsession «$config»`
if ! [ -s ${session}/rtorrent.lock ] ; then
return
fi
pid=`cat ${session}/rtorrent.lock | awk -F: ‘{print($2)}’ | sed «s/[^0-9]//g»`
if ps -A | grep -sq ${pid}.*rtorrent ; then # make sure the pid doesn’t belong to another process
kill -s INT ${pid}
fi
}

getsession() {
session=`cat «$1» | grep «^[[:space:]]*session[[:space:]]*=» | sed «s/^[[:space:]]*session[[:space:]]*$
echo $session
}

checkcnfg

case «$1» in
start)
echo -n «Starting $DESC: $NAME»
d_start
echo «.»
;;
stop)
echo -n «Stopping $DESC: $NAME»
d_stop
echo «.»
;;
restart|force-reload)
echo -n «Restarting $DESC: $NAME»
d_stop
sleep 1
d_start
echo «.»
;;
*)
echo «Usage: $SCRIPTNAME {start|stop|restart|force-reload}» >&2
exit 1
;;
esac

exit 0

Следующие 2 шага будут дописаны позже!

Шаг 4. — прикручивание веб интерфейса

Шаг 5. — оживление rtorrent после падения по CRON

Обзор общих записей [2009-6]

У общих записей из Google Reader есть один очень негативный момент — по ним невозможно искать! А в них оседает очень много интересной информации, которую тупо перепечатывать в блог не очень хочется. После очередного поиска в общих записях нужной мне статьи я решил, что было бы удобно сделать в блоге обзор того что за какой-то период времени в них попало. Думаю, что в качестве периода лучше всего выбрать неделю. Итак, встречайте первый обзор моих общих записей из Google Reader.

Думаю, что зачастую заголовков будет достаточно. Итак самое интересное из общих записей на данный момент:

F10 и консоль в Ubuntu

Многие при работе в консоли сталкивались с тем, что функциональная клавиша F10 не работает. Для себя эту проблему я решил довольно просто

Открыв консоль стандартным способом Приложения-Стандартные-Терминал.
Открываем меню Edit-Keyboard Shortcuts
Окно терминала
и там отмечаем пункт Disable menu shortcut key

Окно терминала

После всего проделанного пользоваться mc стало гораздо удобнее!

Запрет обновления ядра Linux

На MSI Wind установлен WiFi модуль от Realtek. И к сожалению к нему до сих пор нет нормальных драйверов, поэтому при обновлении ядра приходится заново собирать для него драйвера из исходных кодов. Как это избежать? Очень просто — заблокируйте обновление ядра.

Откройте Synaptic [Система — Администрирование — Менеджер пакетов Synaptic]. И заблокируйте версии для следующих пакетов:

linux-generic
linux-libc-dev
linux-restricted-modules-common
linux-restricted-modules-generic

Для этого выделите нужный пакет и выберите пункт меню [Пакет — Заблокировать версию]:
Заблокировать обновление ядра Linux // Synaptic

Теперь при проверке обновлений через Менеджера Обновлений на его заявление о том что Не все обновления возможно установить отвечайте кнопкой Закрыть и после этого можно щёлкнуть на кнопку Установить обновления.

Всё. У меня так система работает с октября 2008 года.

Средства визуального проектирования Баз Данных в Linux

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

Для начала нужно было найти программу, которая отвечает следующим требованиям:

  • Работает в Ubuntu Linux без использования Wine и других эмуляторов Windows. Марк Шаттлворт сказал, что использование Wine неправильный путь, и я с ним согласен;
  • Не должна связываться с БД, так как это не к чему, да и хостеры зачастую не дают доступа к MySQL извне.
  • Умеет создавать ER-модель БД;
  • Умеет создавать из модели SQL-код, пригодный для использования в MySQL.

Первое на что я обратил внимание, естественно, была программа MySQL Workbench (скачать MySQL Workbench). После установки версии 5.1.5aplha и не долгих тестов я был очень рад, так как понял что это именно то, что я хотел. Но моя радость была не долгой. После того как я приступил к созданию модели нужной мне БД програма начала вести себя неадекватно и вылетала при каждом удобном случае. После долгих попыток «договориться» с программой не приведших вообще ни к какому результату, был продолжен поиск аналогичных программ.

Была найдена статья «Обзор средств визуального проектирования БД в Linux». И начался перебор программ.

Было опробовано дополнение к IDE Eclipse — AmaterasERD. Плагин хорош только для быстрого набрасывания модели БД. Поддерживает построение отношений таблиц, но при этом нельзя указать какое действие должно производиться с зависимой таблицей (RESTRICT, CASCADE и т.д.). Да и превращение модели в SQL-код я не нашёл.

Был опробован GNU Ferret. Это что-то совсем аскетичное и на уровне начала 90-х.

OpenOffice.org: Базы данных — это сродни Microsoft Access и для данной задачи оказался бесполезен.

Execute Query — мощная среда, но в следствии того что я не могу подключиться к БД хостера мне не помогла. Также не имеет типов данных TEXT, BLOB и иже с ними.

Power*Architect Data Modeling Tool — удобное средство, но так же как и Execute Query имеет не все типы данных. Слегка аскетичное.

dbWrench — умеет делать всё что мне нужно, имеет приятный интуитивнопонятный интерфейс, работает быстро. Отличная альтернатива ещё очень сырому MySQL Workbench, НО она платная! 149 USD! Есть триал версия, которая работает 30 дней.

Есть ещё один интересный плагин для Eclipse от компании Soyatec, но я его ещё неиспытывал.

Выводы
В мире Linux есть много инструментов, которые могут выполнить поставленные мною задачи. Какие-то хуже, какие-то лучше, но идеального я так и не нашёл. Завтра испытаю плагин для Eclipse от Soyatec. Если он окажется лучше dbWrench, то буду проектировать БД в нём, а пока победитель моего обзора однозначно dbWrench, хоть он и платный!

Добавлено 28 января 2009 в 11:00
Плагин для Eclipse от компании Soyatec установить не удалось в силу моего низкого уровня знаний зависимостей плагинов среды Eclipse. Требуется плагин org.eclipse.pde, а я его найти и установить не смог.

Материалы распространяются под лицензией Creative Commons: Атрибуция — Некоммерческое использование — С сохранением условий (Attribution-NonCommercial-ShareAlike) 3.0 Unported.
Рейтинг@Mail.ru