Инструменты пользователя

Инструменты сайта



// Новая система нотификаций в файловой системе

Узнал из новости про очередной RC ядра Linux. А вот и пользовательская утилита: http://pavlinux.ru/fanotify.tar.bz2, ну последней ссылкой, описание на LWN с небольшим примером на Си в конце: http://lwn.net/Articles/339253/

// Psi+ - редактирование контактов в ростере

Столкнулся с проблемой - никоим образом не получалось отредактировать контакт в ростере, хотя горячая клавиша была назначена. В конференции psi-dev@conference.jabber.ru подсказали, посмотреть, а не залочен-ли ростер, оказалось - залочен, исправлять:

  • Настройки → Дополнительно
  • далее находим опцию: options.ui.contactlist.lockdown-roster и ставим в true

Всё!

// OpenSource #067

Очередной выпуск, в котором опубликована четвертая, заключительная статья из цикла «Схемотехника в Linux с помощью gEDA»: «Создание паттерна в PCB», рассказывается как делать паттерны (футпринты) для компонентов, как обычно - в примерах.

Скачать выпуск: http://osa.samag.ru/get/OpenSource067.zip

// Linux, с днем рождения!

19 годков стукнуло.

// OpenSource #066

Вышел 66 выпуск электронного приложения к журналу «Системный администратор», а в нем и моя третья статья из цикла «Схемотехника в Linux с помощью gEDA», в которой рассмотрено создание условного обозначения компонент для gschem. Так же сделано небольшое отступление и рассказано о интеграции gschem и pcb при помощи менеджера проектов xgschm2pcb. В общем качаем и читаем: http://osa.samag.ru/get/OpenSource066.zip

// OpenOffice: не получается отредактировать содержимое (Readonly content cannot be changed)

В случае когда включен режим редактирования файла (кнопка на панели «Edit file» нажата), права доступа к файлу разрешают доступ и в директории можно создавать/удалять файлы, всяких ACL и selinux при этом не используется. В свойствах файла пароля на редактирования не стояло.

При всех этих условиях, меня ввело в замешательство сообщение, при попытке отредактировать файл:

Оказалось (для меня): в OpenOffice можно блокировать отдельные секции для редактирования, поэтому бредем в Format → Sections и наблюдаем такую картину:

Обращаем внимание на раздел «Write protection» и снимаем отметку «Protected» для всех нужных нам секций.

PS для русской версии OpenOffice, я думаю, сами разберетесь.

// QAvr - графический интерфейс для работы с avrdude

Подготовил и выложил пилотную версию 0.1

Подробности: QAvr

В будущем планируется довести до состояние менеджера проекта для совместной работы с geany.

// Arduino как программатор для контроллеров Atmel и сопутствующий софт

За последние дни окончательно убедился, что Arduino не просто игрушка, а настроящие ворота для начинающих постигать мир программирования микроконтроллеров Atmel.

К чему это я, а к тому, что плата Arduino может выступить в роли программатора для самостоятельных конструкций на контроллерах. Как минимум существует два варианта, про которые можно прочитать на сайте http://freeduino.ru: http://freeduino.ru/arduino/isp.html.

Меня больше заинтересовал вариант BitBang программатора, т.к. не нужно каждый раз заливать прошивку в Arduino, когда нужно прошить внешний контроллер. Кроме того, можно прошить сам контроллер в кроватке (допустим если вышел из строя, количество же циклов перезаписи ограничено или залить обновленный boot loader).

В статье выше сказано, что подходят не все платы, это верно, но главное, что бы это была USB плата и на ней был чип FT232R/FT232RL, а вот разьём X3 можно распаять и самому (как это сделал Я - при помощи олово-отсоса очистил отверстия, поставил планочку и пропаял).

Но на этом наши приключения не заканчиваются. Возникает вопрос - чем шить? Ведь BitBang («ножкодрыгание») это достаточно не стандартная для общепринятых API процедура. Соответственно этим нужно заниматься через специализированные библиотеки, коих под Linux я раскопал две для чипов от FTDI:

  • libftd2xx - закрытая (проприетарная) библиотека от производителя, есть в вариантах для i686 и x86_64 (и естественно для Windows), скачать можно тут: http://www.ftdichip.com/Drivers/D2XX.htm, там в же в архиве есть заголовочные файлы, а на сайте можно скачать PDF с руководтством программиста. Вообще, там же рекомендую скачать и документацию на саму микросхему FT232R/FT232RL и информацию про работу в BitBang режиме (дальше потребуется). Библиотека доступна в ArchLinux через AUR.
  • libftdi - библиотека с открытыми исходными кодами, из зависимостей только libusb, а так как последняя может быть собрана и для Windows, теоретически и данная библиотека тоже. Домашняя страница: http://www.intra2net.com/en/developer/libftdi/download.php, имеется так же в репозитории extra в ArchLinux.

Для первой библиотеки (libftd2xx), есть набор патчей для avrdude. На сайте FreeDuino есть ссылка на сборку для Windows. Я выложил в AUR правила для сборки последней версии avrdude с этими патчами: avrdude-serjtag (потому как патчи изначально родились в недрах проекта serjtag).

На сайте libftdi лежит патч для древней версии uisp, поэтому подумав, и потратив 1.5 дня сделал на основе патчей serjtag свой патч ftdi-bitbang-5.10-1.patch, который использует эту библиотеку. Проверил прошивая и устанавливая fuse-биты на ATTiny2313. Естественно сделал правила для сборки и поместил в AUR: avrdude-ftdi. Вариант, если нужно отстроить на архитектуру отличную от x86/x86_64 или если бинарная версия проприетарной библиотеки рушится на вашей системе (тем более, что обновлялась она с 2008 года).

Вот тут товарищ Di Halt более подробно рассказывает про программатор на такой же микросхеме, которая стоит на Arduino. Там он говорит об одной неприятной особенности: после прошивки не отпускается линия RESET и решает проблему аппаратно. Можете поступить так же, но оказалось что, что в исходных кодах avrdude достаточно добавить одну строчку - выставление высокого уровня на линии RESET перед закрытием порта и выходом. Патч делающий это для использования с libftd2xx и набором патчей serjtag можно поглядеть тут: http://aur.archlinux.org/packages/avrdude-serjtag/avrdude-serjtag/clean-reset-pin.diff. При сборке пакетов avrdude-serjtag и avrdude-ftdi изменения отраженные в этом патче уже применены, так что, счастливым обладателям ArchLinux достаточно просто собрать и поставить пакет :)

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

#arduino duemilanove
programmer
  id    = "duemilanove";
  desc  = "FT232R Synchronous BitBang";
  type  = ft245r;
  miso  = 3;  # CTS X3(1)
  sck   = 5;  # DSR X3(2)
  mosi  = 6;  # DCD X3(3)
  reset = 7;  # RI X3(4)
;

programmer
  id    = "ft245r";
  desc  = "FT245R Synchronous BitBang";
  type  = ft245r;
  miso  = 1; # D1
  sck   = 0; # D0
  mosi  = 2; # D2
  reset = 4; # D4
;

Не мог понять, пока не почитал внимательно приложение к даташиту FT232R подробно рассказывающее про Bit Bang режимы этой микросхемы. Если коротко: для программатора нужно 4 линии, микросхема предоставляет 8 линий, на которых можно играться уровнями. Естественно в каждом конкретном программаторе могут использоваться любые 4 из этих 8ми линий.

Каждая линия отражает бит с номером от 0 до 7. На Arduino на разъем X3 выведены контакты микросхемы с номерами 11, 9, 10, 6, подключаемых по следущей схеме:

11 - MISO
 9 - SCK
10 - MOSI
 6 - RESET

В документации находим табличку, в которой представлены номера выводов и какой бит они предоставляют, и получаем такую таблицу соответствий:

Имя линии Номер вывода микросхемы Имя вывода Номер вывода разъема X3 Номер/Имя бита (согласно таблицы)
MISO 11 CTS 1 D3
SCK 9 DSR 2 D5
MOSI 10 DCD 3 D6
RESET 6 RI 4 D7

Смотрим на последнюю колонку: вот они откуда и берутся эти самые 3, 5, 6, 7 в описании программатора в avrdude.conf. Т.е. эти номера - это номера битов. С остальными программаторами дело обстоит схожим образом. Одного я не понял, почему этого нет в документации? Или плохо искал?

На этом пока все, сейчас обощаю идеи о среде разработки (на данный момент на базе Makefile) и опубликую заметку.

// epssplit & jpeg2ps

Про эти утилиты писал года три назад в статье: Резка большеформатных изображений на листы формата А4 для последующего склеивания

Сейчас дошли руки приготовить пакеты для AUR: epssplit, jpeg2ps, так что, в ArchLinux с установкой стало проще :)

По поводу преобразование растра в PS/EPS можно почитать в статье Евгения Балдина в «Linux Format»: LaTeX. Часть 4: Графика

// Резервное копирование при помощи rsync+ssh

Статей на эту тему много, к примеру:

Но нигде не нашел внятного объяснения как сохранять права доступа, группу и владельца, особенно, если удаленный сервер (backup-сервер) работает не от пользователя root.

В общем, постановка задачи:

  • инкрементный бекап
  • клиент-сервер
  • сохранять права доступа, владельца и группу
  • сохранять только указанные директории, представлять возможность исключения по паттерну, делать исключения в исключениях :)
  • выполнение каких-то операций пред выполнением резервирования

Настройка backup-сервера

Тут все достаточно просто, должны быть установлены пакеты openssh, rsync и их зависимости, openssh должен быть настроен и запущен.

Далее, создаем пользователя под которым будут храниться резервные копии, пусть это будет backup:

adduser backup

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

После чего, в его домашнем каталоге создаем подкаталоги lock и files:

mkdir lock file

Затем создаем там же, в домашнем каталоге, файл rsyncd.conf с примерно таким содержимым:

# малость системной информации, подробнее 'man rsyncd.conf'
use chroot = no
max connections = 4
syslog facility = local5
pid file = /home/backup/lock/rsyncd.pid
lock file = /home/backup/lock/rsyncd.lock

[backup]
    comment = Backup area
    # хранить информацию о правах, владельце и группе в цифровом виде, если не нужно - поставьте no
    numeric ids = yes
    # эта опция позволяет хранить информацию о правах, владельце, группе в xattr, об этом далее
    fake super = yes
    # путь к корню, где будут храниться копии
    path = /home/backup/files
    # по умолчанию, все модули - read only, нам же нужно писать
    read only = no

Комментарии по тексту, думаю остальное избыточно.

Теперь ремарка… об этих самых xattr: Я столкнулся с тем, что при попытке записи, выдавалось сообщение об ошибке, и эти самые атрибуты не писались, гугл ответа не дал. Поставил пакет, зовется attr, который нужен для управления расширенными атрибутами файлов. Вдумчивое чтение 'man 5 attr' дало следующее:

Currently, support for extended attributes is implemented on Linux by
the ext2, ext3, ext4, XFS, JFS and reiserfs filesystems.

А, как следствие, вдумчивое чтение 'man mount' дало информацию о параметре монтирования user_xattr. У меня файловая система ext4, там этот атрибут по-умолчанию выключен, для сохранения информации о владельце/группе нужно его включить. Поэтому в /etc/fstab для нужной файловой системы после defaults добавил user_xattr, получилось примерно следующее:

UUID=780ae01a-6fe2-416f-baa2-0d700cd9574f /home ext4 defaults,user_xattr 0 1

По сути, это все, что относится к серверной настройке, после потребуется только создания своего индивидуального подкаталога для каждого резервируемого хоста внутри 'files', я рекомендую создавать эти каталоги по имени хоста (вывода команды hostname). Пока создадим там каталог host1

Резервируемый хост

Тут нужно набросать скриптик и несколько конфигурационных файлов прописать его в cron для регулярного выполнения:

  • backup.sh - сам скрипт, понимает 3 аргумента:
    • backup - выполняет резервирование
    • list - показывает содержимое бекапа на сервере
    • restore <что> <куда> - восстанавливает данные из резервной копии
  • backup.conf - конфиг, что бы можно было оперативно размножить по разным хостам
  • backup.list - список файлов и директорий подлежащих резервированию
  • backup.exclude - список паттернов для исключения из резервирования (man rsync)
  • backup.include - писок исключений (отменяет некоторые паттерны в exclude, смотреть man rsync)
  • backup_cron - небольщой скрипт для выполнения планировщиком, я его положил в /etc/cron.hourly/, добавив префик zz_, что бы выполнялся последним.
  • hook.d/ - директория со скриптами, которые выполняется перед выполнением резервирования

Итак, сами скрипты.

  • backup.sh
    #!/bin/bash
    
    #
    ### Скрипт для инкрементного бекапа при помощи rsync+ssh
    #   с сохранением прав/владельца файла в расширенных
    #   атрибутов (требуется монтирование файловой системы на
    #   которую будет производится резервирование с опцией user_xattr)
    #
    # Version: 20100512.1
    #
    # «THE BEER-WARE LICENSE» (Revision 42):
    # hatred@inbox.ru wrote this file. As long as you retain
    # this notice you can do whatever you want with this stuff.
    # If we meet some day, and you think this stuff is worth it,
    # you can buy me a beer in return. Alexander 'hatred' Drozdoff 
    #
    
    source backup.conf
    
    [ -z "$host" ] && host=`hostname`
    
    exclude=backup.exclude
    include=backup.include
    backups=backup.list
    
    DAY=$(env LANG=C date +"%F_%H")
    
    do_hooks()
    {
        for pkg in hook.d/*
        do
            [ -x $pkg ] && ./$pkg
        done
    }
    
    do_backup()
    {
        is_incr_exists=$(ssh $ssh_user@$host "stat files/$dest/incr/$DAY > /dev/null 2>&1 && echo yes || echo no")
        if [ "$is_incr_exists" == "yes" ]; then
            ssh $ssh_user@$host rm -rf files/$dest/incr/$DAY
        fi
    
        do_hooks
    
        rsync -av -R \
            -e "ssh -l $ssh_user" \
            --fake-super \
            --delete \
            --delete-excluded \
            --inplace \
            --backup \
            --backup-dir=/$dest/incr/$DAY \
            --exclude-from=$exclude \
            --include-from=$include \
            $(cat $backups) \
            $host::backup/$dest/full/
    }
    
    do_list()
    {
        rsync -v -e "ssh -l $ssh_user" $host::backup/$dest/$1
    }
    
    do_restore()
    {
        rsync -av -e "ssh -l $ssh_user" --super --safe-links $host::backup/$dest/$1 $2
    }
    
    do_help()
    {
    cat << _EOF_
      Use: $0 <backup|list|restore> [SRC] [DEST]
    _EOF_
    }
    
    action=$1
    shift
    
    case $action in
        backup)
            do_backup
        ;;
        list)
            do_list $@
        ;;
        restore)
            do_restore $@
        ;;
        *)
            do_help
        ;;
    esac
  • backup.conf
    # пользователь на бекап сервере, под которым хранятся резервные копии (того что мы создавали)
    ssh_user=backup
    
    # IP или HOST backup-сервера
    host=backup.server
    
    # Имя поддиректории в files на backup-сервере для хранения данных конкретного хоста
    dest=host
  • backup.list, просто список директорий и файлов, главное, если хотите сохранять саму директорию, а не его содержимое, не ставьте в конце «/», т.е. вместо «/etc/» пишите «/etc». примерное содержимое:
    /etc
    /home
    /root
    /var/backup
  • backup.exclude, список паттернов (man rsync). Обратите внимание, испключается последний элемент, т.е. /var/cache/*/* сохранит директории/файлы в /var/cache/, но исключит их содержимое . примерный список
    *~
    *.back
    /sys
    /dev
    /tmp
    /proc
  • backup.include, у меня пустой, позволяет делать отдельные исключения к exclude, т.е. для примера выше, если вписать /proc/cpuinfo, то cpuinfo будет сохраняться.
  • backup_cron, правится под ваши нужды, у меня примерно такой:
    #!/bin/bash
    
    cd /home/backup/backup/
    ./backup.sh backup > log/backup-$(date +%H).log 2>&1
    

    Куда его помещать, я уже выше писал, можно и просто crontab -e от root и прописать там в нужно время

Все, осталось под пользователем root создать ssh-ключи и передать их на backup-сервер:

ssh-keygen # (тут главное не ставьте парольную фразу, или заводите ssh-agent, но это другая история)
ssh-copy-id -i ~/.ssh/id_rsa backup@backup.server # спросит пароль пользователя backup, передаст ключ

По сути всё. Что в результате имеем: на сервере в каталоге host1/full хранится полная копия всех файлов на момент последнего запуска скрипта, передаются только измененные файлы, в каталоге host1/incr/YYYY-MM-DD_HH хранится копия перезаписываемого файла (т.е. если файл изменился, перед тем как он запишется в full, он оттуда сохраняется в incr/YYYY-MM-DD_HH, реализуя таким образом схему инкрементного бекапа).

Восстанавливать примерно так:

mkdir restore
./backup.sh restore full/ restore/
./backup.sh restore incr/2010-05-10_14/ restore/

Восстановит в т.ч. и атрибуты и владельца/группу, естественно восстановление нужно делать от пользователя root.

Скрипты я оформил, положил вместе со всеми остальными в git, получить можно:

git clone http://hatred.homelinux.net/git/scripts.git

в каталоге backup, там же посмотрите скрипт hook.d/pacman.sh, сохраняющем список пакетов перед резервированием.

Источники информации в системе

  • man rsync
  • man rsyncd.conf
  • man attr
  • man 5 attr
  • man mount

// OpenSource #058

В этом выпуске вторая часть моей статьи по схемотехнике в Linux: «Схемотехника в Linux с помощью gEDA. Часть 2: pcb»

Скачать выпуск: http://osa.samag.ru/get/OpenSource058.zip

PS выпуск первоапрельский, но вредительства нет :)

// Очередная версия и очередной обзор Darktable

Очередная версия 0.5, для пользователей ArchLinux в AUR есть правила для сборки git-версии.

Обзор, достаточно добротный: http://www.linuxgraphics.ru/articles.php?article_id=93

// Графический индикатор разряда батареи в IceWM

Решил тут собрать небольшое окружение на основе IceWM, вернуться, так сказать к истокам (работал он у меня в бытность ещё P100/24RAM). Но т.к. теперь ему предстояло работать на ноутбуке, в режиме питания от батареи было бы хорошо иметь возможность наблюдать статус разряда.

// Из одной установки ArchLinux

Подогнали тут машинку, мамка Asus CUBX-L, процессор Intel Celeron 600MHz, RAM около 415Mb (free кажет 416800Kb, что-то не могу подобрать комбинацию, там 3 планки стоят). У меня вообще в последнее время какая-то тенденция с оживлением всякого старого железа, лотеком прям себя ощущаю.

Образ с которого устанавливаюсь 2009.08, так вот, на машинке или сам привод немного подгоняет, или диск так записан (возможности проверить на другом нет), но при попытке установке пакетов, вылетает на том, что не может проверить контрольные суммы у некоторых пакетов. Причем, установка пакетов у меня выбрана не с диска, а с сети - благо у меня локальное зеркало есть. Это навело на мысль - удалить пакеты, чтобы перезакачались: была такая проблема на моём EeePC - подглючивала сетевая карта.

Сказано - сделано. Иду в /mnt/var/cache/pacman/pkg и… правильно, пытаюсь удалить некорректные пакеты, а оно мне что? А оно мне говорит - а нет таких файлов. Опппппааааа… ЧДКВ?

Смотрю какой командой запускается pacman:

pacman --root /mnt --config /tmp/pacman.conf --noconfirm -S <список пакетов>

Смекаю, я же зеркало выбирал, значит должно быть отражено в конфигурационном файле, а вдруг там ещё что, понаписано… Открываю:

nano /tmp/pacman.conf

и что я вижу? там в секции [options] указаны два параметра для CacheDir, один верно ведет в /mnt/var/cache/pacman/pkg, а другой, на те пакеты, что на диске: /src/… и так получилось, что пакеты, на которые ругалось, не изменились с августа прошлого года, а т.к. диск/привод гонят - прочитаться не смогли, на что ругнулось, что контрольные суммы не получилось просчитать.

Удаляю эту строчку, после чего возвращаюсь на пункт Install packages и пробую заново устанавливать пакеты - удача :)

To be continued…

// info с человеческим лицом

Все знают про man страницы (man чаво?) и удобную программу apropos, все, надеюсь, ими активно пользуются.

Все знают и про info-страницы, рожденные в недрах проекта GNU, но, управление у программы info достаточно… неудобное, just for me.

Вчера дошли руки, посмотреть альтернативный браузер документации в формате инфо. Но моей лени хватило только набрать команду pacman -Ss info, среди вывода нашел такое:

community/pinfo 0.6.9-3
    A hypertext info file viewer

Поставил, запустил… Ну все, теперь и info активно пользоваться будут:

  • навигация в стиле links/elinks/w3m, вперед-назад - по Enter и стралками влево-вправо
  • выход - q
  • поиск - s или /
  • список всех топиков - d или b
  • переход к узлу - g

просто и со вкусом. Внешние ссылки открываются, по умолчанию, в lynx, но, думаю (не разбирался пока), заменить на что-то своё будет не проблема.

Ну и снимок: