Friday 5 December 2008

написание правил udev

Чтобы нормально монтировать различные съёмные устройства очень полезна такая штука как udev,
она позволяет динамически формировать ноды в /dev/, опираясь на различные характеристики устройства.
Для создания нод необходимо написать правила, для моего съёмного винчестера я создал такое правило

KERNEL=="sd*", ATTRS{serial}=="2GE12YDI", ATTRS{manufacturer}=="Seagate", SYMLINK+="seagate"


В правило входят различные ключи:

KERNEL - имя ноды, автоматически назначаемое ядром,

ATTRS - различные атрибуты которые можно узнать командой

SYMLINK - имя ноды, которая будет создана.

udevinfo -a -p /sys/block/sdb

у меня вывод был примерно такой
# udevinfo -a -p /sys/block/sdc

Udevinfo starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

looking at device '/block/sdc':
KERNEL=="sdc"
SUBSYSTEM=="block"
DRIVER==""
ATTR{capability}=="12"
ATTR{stat}==" 1002 29254 63332 21760 127604 3476920 28836216 62613612 0 599412 62635368"
ATTR{size}=="625142448"
ATTR{removable}=="0"
ATTR{range}=="16"

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb6/6-2/6-2:1.0/host15/target15:0:0/15:0:0:0':
KERNELS=="15:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{modalias}=="scsi:t-0x00"
ATTRS{ioerr_cnt}=="0x0"
ATTRS{iodone_cnt}=="0x1f665"
ATTRS{iorequest_cnt}=="0x1f665"
ATTRS{iocounterbits}=="32"
ATTRS{timeout}=="30"
ATTRS{state}=="running"
ATTRS{rev}=="102C"
ATTRS{model}=="FreeAgent Go "
ATTRS{vendor}=="Seagate "
ATTRS{scsi_level}=="3"
ATTRS{type}=="0"
ATTRS{queue_type}=="none"
ATTRS{queue_depth}=="1"
ATTRS{device_blocked}=="0"
ATTRS{max_sectors}=="240"
...

из него можно получить атрибуты точно характеризующие устройство.
Правило нужно записать в файл с расширением rules(обязательно!) в /etc/udev/rules.d/
Если несколько правил создают ноды для одного устройства то будут созданы все ноды.
Более подробно про udev можно узнать здесь

Tuesday 18 November 2008

Запись в ntfs в linux

Винчестера ноутбука стало уже мало, поэтому я купил внешний usb винт seagate free-agent go 320GB,
возник вопрос в как его отформатировать, ext3 не подходит т.к это переносной носитель информации и придётся записывать на него в виндусе,
fat32 не поддерживает больших файлов, поэтому была выбрана ntfs.
Недавно вышла первая стабильная версия полноценного ntfs драйвера ntfs-3g.
Ставится просто
#aptitude install ntfs-3g

прописываем в /etc/fstab

/dev/sdb1 /media/portableHDD ntfs-3g auto,nls=utf8,umask=0,user 0 0


также пришлось выполнить эти магические действия чтобы можно было монтировать от юзера

chown root $(which ntfs-3g)
chmod 4755 $(which ntfs-3g)

Всё готово, теперь можно не удалять фильмы после просмотра!

Wednesday 22 October 2008

Настройка vpn подключения в linux

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

Для настройки vpn подключения необходимо иметь в ядре поддержку PPTP, также необходимо установить пакеты pptpclient, ppp.

Сначала необходимо сконфигурировать сетевой интерфейс, в Debian это делается очень просто в файле /etc/network/interfaces.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

iface eth0 inet dhcp #означает что ip адресс, адресса dns серверов и маршруты получаем от dhcp сервера
post-up /etc/routes #скрипт, который выполняется после поднятия интерфейса, очень полено если dhcp выдаёт кривые маршруты
auto eth0



файл /etc/ppp/peers/prov содержит параметры конкретного подключения


persist
pty "pptp 10.129.10.2 --nolaunchpppd" # адрес vpn сервера
#pty "/usr/sbin/pppoe -I eth0 -T 80 -C prov_name" # В случае использоваия PPPoE все настройки отличаются только этой строчкой
name # здесь писать свой логин
ipparam prov
file /etc/ppp/options.pptp



файл /etc/ppp/options.pptp содержит опции работы ppptp демона


# Использовать pppX в качестве шлюза по умолчанию
defaultroute

# Использовать вместо шлюза по умолчанию
replacedefaultroute

# Не использовать сжатие
nodeflate

# Не использовать BSD сжатие
nobsdcomp


# Запрашивать аутентификацию перед отправкой или приёмом пакетов
#auth

# Использовать аппаратный контроль потока данных ( RTS/CTS) через последовательный порт.
crtscts

# Использовать аппаратный контроль потока данных ( RTS/CTS) через последовательный порт.
#xonxoff

# Определяет последовательность прерывания подключения
#escape 11,13,ff


# Блокировать устройство после запуска pppd
lock

# Не показывать пароль при использовании PAP аутентификации(включено по умолчанию)
hide-password

# Показывать пароль при использовании PAP аутентификации
#show-password

# Установить значение MRU [Maximum Receive Unit] определяет размер (в байтах) максимального блока, который может быть принят на канальном уровне коммуникационного протокола. pppd
# Минимальное значение MRU равно 128. Значение по умолчанию 1500.
# Значение 296 рекомендуется для медленных подключений (40 байт для TCP/IP заголовка + 256 байт данных).
mru 1500Option nopredictor added. It defines if predictor corrector algorithm is used or not. Option noconviter added. It skips convergence double checking in ...

# Установить значение маски подсети
netmask 255.255.255.0

# При наличии интерфеса с заданным ip адрессом pppd будет пытаться использовать этот адрес, параметр noipdefault пресекает эти попытки
noipdefault

# При включенном параметре pppd после неудачной попытки подключения будет ожидать подключения с другой стороны
#passive

# С этой опцией pppd начнёт передавать свои пакеты только после получения пакета от удалённой системы
# используется при подключении к медленным системам
#silent


# Оставаться в терминале, иначе pppd станет фоновым процессом
#-detach


# Выводить отладочную информацию
#debug

# Добавлять имя домена к имени кмпьютера
#domain

# Включить вывод отладочной информации драйвера PPP уровня ядра
#kdebug n

# Установить значение MTU [Maximum Transmit Unit] используется для определения максимального размера блока (в байтах), который может быть передан на канальном уровне коммуникационного протокола.. Unless the peer
mtu 1492

# Установить имя машины
#name

# Использовать в качестве name hostname, перезаписывает опцию name
#usehostname

# Задать имя удалённой системы для аутентификации
#remotename

# Добавить в ншу таблицу соответствия физических и ip адрессов ip адресс удалённой машины, ассоциированный
# с физическим адрессом нашей сетевой карты (не использовать если сервер находится в другом сегменте сети)
#proxyarp

noproxyarp

# Отключить протоколы IPXCP и IPX.
#noipx

# Не переподключаться в случае разрыва, задано по умолчанию
#nopersist

# Переподключаться в случае разрыва
persist

# Выключить pppd после неудачных попыток подключения
maxfail 2

# Инициализировать соединение только по требованию, например когда приходят пакеты.
# С этой опцией, удалённый IP должен быть задан
#demand

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

# Время которое нужно ждать перед повторным подключением после разрыва связи
holdoff 10

# Задержка в миллисекундах после выполнения подключения до начала передачи пакетов
#connect-delay

# Позволяет задать фильтр, показывающий какие пакеты считать траффиком, а какие нет
# фильтр по дефолту tcpdump считает траффиком все пакеты
#active-filter



Осталось записать в /etc/ppp/chap-secrets логин и пароль и можно подключаться командой pppd call prov

Saturday 18 October 2008

Синхронизация с телефоном в Linux с помощью Gammu

Как известно ничего не даётся так легко и не ценится так высоко, как вовремя сделанная резервная копия. Резервным копированием данных с телефона я и решил заняться. Имеем телефон Nokia 6021, Debian Lenny, подключение через Bluetooth. Для решения задачи я выбрал утилиту gammu в Debian её можно легко поставить
#aptitude install gammu
далее необхоимо исправить файл ~/.gammurc (пример иожно найти в /usr/share/doc/gammu/examples/config/gammurc.gz ), я в него записал

[gammu]
port = 00:16:BC:D6:92:1D
model = 6021
connection = bluephonet
synchronizetime = yes
logfile = gammulog
logformat = textall
use_locking = yes
gammuloc = locfile
startinfo = yes
gammucoding = utf8
rsslevel = teststable
usephonedb = yes

обязательными опциями являются только port и connection.
connection это тип подключения, в нашем случае подключение происходит через bluetooth, вообще тип также зависит от телефона, соответствие можно установить, воспользовавшись этим документом. port это адрес устройства, в случае с bluetooth его можно получить коммандой hcitool scan, в случае кабеля это будет /dev/phone.
Нужно настроить привязку телефона и компьютера, описано тут
Далее начинаем использовать Gammu

SMS


$ gammu getsmsfolders
даёт папки с SMS.
SMS можно забэкапить командой
$ gammu backupsms имя_файла
при этом также можно удалить ВСЕ sms с телефона( очень полезная функция, в моём телефоне нет функции удаления всех sms и их приходится удалять по одной), также sms можно удалять по одной командой
$gammu deleteallsms номер_папки
восстановить sms можно командой
$gammu restoresms имя_файла

Phonebook


Вот ради чего всё и затевалось: бэкап телефонной книги
$ gammu backup имя_файла.vcf

Можно забэкапить все данные с телефона, в этом случае нужно выбрать произвольное расширение файла, но он будет бинарным,

.vcs - Только календарь(VCalendar)
.vcf - Только контакты(VCard file)
Другое расширение (Gammu text file): бэкапить всё

подробнее здесь
Восстановление данных командой
$ gammu restore имя_файла.vcf

Очистить память можно с помошью команды
$ gammu clearall


Filesystem


Для просмотра содержимого файловой системы команда
$ gammu getfilesystem

Для установки приложения
$ gammu nokiaaddfile Application имя_файла_без_расширения

Аналогичным образом можно закачивать картинки, мелодии и т.д. в этом случае команда будет выглядеть так
$ gammu nokiaaddfile Gallery|Gallery2|Camera|Tones|Tones2|Records|Video|Playlist|MemoryCard имя_файла_без_расширения

Подробности здесь

Tuesday 1 July 2008

Настройка adsl в linux

Вот и наступили каникулы, вдалеке от москвы в лучшем случае можно получить медленное adsl подключение. Подлючение к телефонной линии естественно производиться через модем, подключение компьютера к модему производиться витой парой, компьютеру присваивается статический ip вида 192.168.1.x .На сайтах некоторых провайдеров есть инструкции по настройке подключения в linux, на сайте моего провайдера (elcom.ru) таких не оказалось, в службе тех поддержки тоже ничем помочь не смогли, после долгих и безуспешных попыток настроить подключение классическими методами(создание файлов /etc/ppp/peers/elcom и т.д. ) я открыл для себя пакет утилит rp-pppoe, далее подключение производиться очень просто
устанавливаем софт
tar xzvf rp-pppoe-3.5.tar.gz
# ./configure
# make
# make install


запускаем
#adsl-setup
и отвечаем а вопросы

после чего можно подключаться
#adsl-start

и отключаться
#adsl-stop

Год назад, настраивая dial-up подключение у того же провайдера тоже было много проблем, в техподдержке ничего не говорили и я долго ковырялся в конфигах пока методом тыка не обнаружил что необходимо поставить опцию stupid-mode, которой, кстати, нет в kppp, она есть в gnome-ppp, но я предпочёл wvdial.

Monday 4 February 2008

Проблемы с созданием dvi c помощью программы latex из пакета tetex в Debian GNU/Linux etch

Поставил tetex-bin, tetex-extra, tetex-base, latex-ucs, kile,при включении картинок в форматах png, jpg, pdf и использовании программы pdflatex корректно создавался pdf файл, но при включении картинок в eps и использовании программы latex опять же создавался pdf, а не dvi файл, в котором рисунков не было. После прочтения man latex, была использована такая команда latex -output-format dvi test.tex, что не дало результатов. Я с удивлением обнаружил, что latex и pdflatex являются символьными ссылками на pdfelatex. После изучения вопроса было выяснено что при вызове pdfelatex должен определять формат выходного файла сам, решение было найдено здесь и здесь и заключается оно в использовании такой шапки:
\newif\ifpdf
\ifcase\pdfoutput
\pdffalse % we are not running PDFLaTeX
\else
\pdftrue % we are running PDFLaTeX
\fi



\documentclass[a4paper, 12pt]{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage[russian,english]{babel}
\usepackage[pdftex,unicode]{hyperref}