Архив рубрики: спо

Делаем автоматический бекап базы keepassx на флешку в linux

Все мои пароли хранятся и генерируются с помощью программы KeePassX. По понятным причинам хочется, что бы делался бекап и причем автоматически. Раньше я решал эту проблему dropbox, но ситуация поменялась и я больше не мог делать online синхронизацию. Пришлось носить portable версию KeePassX на флешке, а постоянный бекап просто забываешь. Это меня и подвигло к автоматизации этого процесса.

Есть 2 способа — расковырять скрипты gnome-volume-manager но он просто непонятен (а я как бы завязал и на трезвую голову в таком не разобраться) или через pamusb.


Pluggable Authentication Modules (PAM) — Подключаемые Модули Аутентификации — библиотека, предоставляющая API для управления методами аутентификации в Unix-подобных операционных системах. Позволяет программам, которые используют аутентификацию, быть независимыми от схемы аутентификации.

Собственное, как происходит аутентификация и настройка модуля можно прочитать здесь или тут. Добавляем нужную нам флешку и пользователя через pamusb-conf и правим конфиг /etc/pamusb.conf

Во первых:
Должен присутсвовать и должен быть раскоментирован (в debain он по умолчания есть но закомментирован).

<service id=»pamusb-agent»>
<option name=»one_time_pad»>false</option>
</service>

Во вторых:

keepassx:
<user id=»alex»>
<device>myflash</device>
<agent event=»unlock»>cp -u /home/alex/key/pass.kdb /media/MyBigFlash/KeePassX/</agent>
</user>

Надо добавить в секцию

userid — пользователь, которого мы добавили в pamusb-conf.
devise — имя флешки, которое мы задали определенной флешки в pamusb-conf
agent event=»unlock» — выполнить команду при подключении флешки.
После чего запустить pamusb-agent для проверки правильности написания конфига. После удачных опытов добавляем pamusb-agent —daemon в автозагрузку.
Теперь нам достаточно лишь вставить флешку в ПК, что на нее залилась более новая бд KeePassX.
p.s. Флешку надо отмонтировать, иначе база может не обновится, это связано с тем что обычно в linux информация не сразу заливается на флешку.

640Кб должно быть достаточно для каждого или делаем меленькими отсканенные методички

Цитату в заголовке приписываю Билл Гейтсу, он или не он ее произнес — не важно, речь пойдет не о том. Частенько нам приходится сканировать документы, книги, а нам студентам методички (все дальнейшее описание будет вестись на основе моего опыта, полученного на сканирование методичек). Хорошо отсканенную методичку, иногда, полезно при себе иметь, если и есть бумажная версия (методичку можно забыть, не взять — зачем тащить из-за методички пакет/сумку если только методичка сегодня будет и нужна). Хорошо отсканенная методичка это не та, которая будет черт знает сколько весить, а та которой будет удобно пользоваться.

И так мы имеет обычный ПК с Debian Lenny на борту, сканер canon lide 25 ну и набор ПО (gscan2pdf, scantailor, Djvu Solo 3.1 в wine ), ну и собственно методичку по эконометрике.

Сканер настроен поэтому приступим сразу к сканированию. Запускаем программу gscan2pdf и сканируем методичку в разворот. Первые страницы в режиме «оттенки серого», т.к. обложка напечатана на цветной бумаге, остальные в «штриховая графика» с разрешением 300 dpi. (разрешение должно быть одним на весь документ или потом замучаетесь!) Закончив сканирование рекомендую развернуть страницы в альбомную ориентацию и сохранить результат в tiff в отдельную папку. Получился файл размером 22 Мб — многовато для методички, да и читать такое трудновато

Надо обработать! Конечно можно FineReader-ом (лезть под винду) или вручную. Но была найдена замечательная программа scantailor . Открываем, подгружаем наш файл tiff. Можно исправить ориентацию (но мы это уже сделали) поэтому начинаем разрезку. Запускаем ее в автоматическом режиме (не правильное исправим потом).
 
 
Бегло просматриваем и исправляем вручную, где программа накосячила.  Следующий пунк компенсация наклона — нужен в основном для книг или для криворуких 🙂 Нам не надо — пропускаем.

Следующий пункт — полезная область. Из названия ясно, что это выделение тех областей документа, в которых содержится информация. Нам не обязательно лицезреть текстуры бумаги, как отсканировались скрепки и тому подобное. Запускаем в автоматическом режиме, потом исправляем.

После исправления косяков, а их было мало, переходим к следующему этапу. В «Макете страниц» нам надо задать макет страниц — логично 🙂 Определяем поля, выравниваем страницы по размеру, естественно в автоматическом режиме. И мы в финале!
 
 
На последнем этапе «Вывод» задаем dpi у нас 300. Режим -Черно-белый, удалять пятна оставим по дефолту. И запускам автоматический режим 🙂 Это самая ресурсоёмкая операция — большая нагрузка на процессор, так что запускаем и идем пить чай (хотя для методички хватило времени что б только поставить чайник).
 
В указанной для выхода получаем набор tiff пронумерованных, очищенных. Получили 39 tiff общим объемом 2,9 мб — чувствуете разницу? 
Отдельные страницы это хорошо, но нам нужно это все собрать. Основных вариантов 2 — pdf или djvu. Т.к. я за правильное использование форматов, то выбираем djvu. В интернете куча скриптом и рецептов, как собрать это все в 1 документ, но не один мне не понравился (найдете что-то удобное и гибкое для linux флаг вам в руки). Поэтому я установи Djvu Solo 3.1 в wine.
Добавляем все нужные нам изображения (в начале или в конце может быть пустое изображения от несуществующей половинки обложки). 

И завершающий этап — жмем FileEncode As  Djvu выбираем Bundled и задаем куда мы хотим сохранить и под каким названием. После подтверждения появится диалог:

Указываем разрешение (ну больше 300 явно не стоит, всеравно мы сканили с 300), можно указать 200. Указываем Bitonal (2 тоновый или русским языком говоря черно-белый) и жмем заветную кнопку OK.
В итоге получаем файл djvu, у меня размером в 392,2 КБ. Кстати, если  мы бы сжали в djvu тот первый отсканированный вариант, то объем  получился бы от 1 до 2 мб, что то же не плохо.
 
 
У нас теперь методичка, которую приятно просматривать, маленького размера в читаемом виде. Это не распознанный текст, но всеравно очень даже.
p.s. я буду рад, если моя заметка поможет сделать хоть на 1 книгу меньше, которая криво отсканена в pdf и занимающую 90 мб

автоматизация в учебе

Толпы студентов у доски с расписанием — у кого то это вызывает приступы ностальгии, у меня отвращение. Почти у каждого института есть свои сайт, где можно скачать расписание, посмотреть полезную информация. У некоторых это сделано хорошо, у некоторых плохо.
Мой институт имеет 2 сайта один так себе, другой ужасный 🙁 Главный immf.ru много полезной информации, в удобном виде, но часть информации закрыта — просят получить логин/пароль в каком то кабинете. Другой my.immf.ru страшный и ужасный — сайт студентов, лажа полная, но все открыто. Открыто и расписание (не понимаю зачем закрывать доступ к расписанию на главном), но часто забывают обновить.
Но одногрупник нашел маленькую недоработку — можно ходить по директориям http://www.immf.ru/download/  . И конечно же там в открытом виде лежит расписание http://www.immf.ru/download/Raspisanie/   в pdf файлах 🙂
Каждый раз вбивать строку в браузер и смотреть, не обновилось ли расписание, мне лень, решил написать скрипт (сначала просто он качал затем и научился уведомлять). Конечно, все будет выполнено средствами linux
Сам скриптик

#!/bin/bash
wget -N --output-file=/tmp/log_wget.txt -P /home/alex/  http://www.immf.ru/download/Raspisanie/shedule_sokr.pdf
if grep -q 'сохранён' /tmp/log_wget.txt
then perl ./jabberMS
fi

Wget мы качаем файлик расписания, если он новее чем у нас на в указанной директории и пишет лог. Дальше grep мы проверяем лог на слово сохранен (если файл не новее то этого слова там не будет). И если условие выполняется, то мы можем отправлять сообщение (файл уже у нас). Дело в том, что я нашел 2 способа программно отправить сообщения в jabber — sendxmpp и скрипт на perl. Заставить работать sendxmpp я так и не смог. Поэтому пришлось воспользоваться скриптом

#!/usr/bin/perl

use Net::XMPP;
use locale;
use utf8;
my $c=new Net::XMPP::Client();
Connect(hostname=>"наш сервер с которого отправляем");
AuthSend(
username=>"логин",
password=>"пароль",
resource=>"Perl");
my $m=new Net::XMPP::Message();
$m->SetMessage(
to=>"hardworm@jabber.ru",
from=>"hardworm@jabber.ru",
body=>"Raspisanie obnovilos");
$c->Send($m);
$c->Disconnect();

Ну и в конце скрипта написано кому, от кого ну и само сообщение. Загоняем в cron наш скрипт, допустим выполняем его каждые 3 часа.

Планируется, всетаки, заставить работать sendxmpp. Возможно, это все сделано все не красиво с программерской точки зрения, зато работает 🙂

История возникновения и развития *nix систем

 Черновой не законченный вариант выступления

UNIX — группа переносимых, многозадачных и многопользовательских операционных систем.
Первая система UNIX была разработана в 1969 г. в подразделении Bell Labs компании AT&T. С тех пор было создано большое количество различных UNIX-систем.
До этого ОС создавались индивидуально под компьютеры, ведь их были единицы, не было единых стандартов в работе «железа». IBM была монополистом на рынке больших компьютеров, а персональных и не было. Необходимость в «универсальной» ОС появилась с появлением миникомпьютеров PDP от компании DEC. Они были относительно дешевыми (университеты и предприятия могли себе их позволить), были меньше чем обычная комната, что было редкостью для компьютеров IBM, и их было несколько моделей. Были сформированы основопологающие принципы:

  • использование простых текстовых файлов для настройки и управления системой;
  • широкое применение утилит, запускаемых в командной строке;
  • взаимодействие с пользователем посредством виртуального устройства — терминала;
  • представление физических и виртуальных устройств и некоторых средств межпроцессового взаимодействия как файлов;

Но первые системы писались на Assembler и не могли быть переносимыми и программы написанные для этих ОС так же. В начале 70х годах был разработан язык программирования для Unix систем «Си». C 74 года система бесплатно распространялась среди университетов и академических учреждений. Bell Labs выпустила 7 «редакций» unix. К 78 году unix была установлена более чем на 600 машинах. Компания AT&T в 80х годах осознала ценность системы и начала выпускать коммерческие Unix. Однако уже в 78 году появилась не коммерческая, открытая система Unix  BSD созданная в институте Беркли. Дальше было создано огромное количество unix систем как открытых так и коммерческих.
В 1983 году был создан проект Ричардом Столлменом GNU (GNU is not unix) в котором разработаны множество свободных инструментов  — компиляторы, библиотека языка и т.д. но не было создано самое главное — ядро.
Ядро написал в 1991 году финский студент Линус Торвальдс. Изначально это была программа-терминал для соединения с университетским компьютером, которая переросла в ОС. Ядру требовалось окружения и инструменты, а проекту GNU ядро. По просьбе Столлмана ядро с окружением — операционная система стала называться GNULinux.
17 сентября 1991 года появилась 0.01 версия linux. 14 марта 1994 linux 2.0. 4 января 2001 — Linux версии 2.4.0. 8 декабря 2003 — Linux версии 2.6.0

сборка ядра 2.6.31

Вышло очередное ядро linux 2.6.31 и было сказано что:
Проведена работа по улучшению отзывчивости системы при выполнении типовых десктоп операций в условиях нехватки оперативной памяти. Удалось добиться уменьшения на 50% числа запросов, попадающих на вытесненные в раздел подкачки страницы памяти, и на 1/3 уменьшить число обращений к свопу (pswpin), что продемонстрировало в тестах увеличение интерактивности при работе с десктопом примерно в два раза;
Звучит очень привлекательно с моими то 512 мб ОЗУ. Ринулся качать, а потом и смотреть как собирать ядро. Нашел вот это — подробно описано что требуется и как собирать ядро на Debian Lenny. Чуть полазив по конфигу начал компилировать но …. облом
cc -m32 -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include -I../../arch/x86/include -U_FORTIFY_SOURCE lguest.c -o lguest
lguest.c:21:25: error: sys/eventfd.h: No such file or directory
lguest.c: In function ‘create_thread’:
lguest.c:1021: warning: implicit declaration of function ‘eventfd’
make: *** [lguest] Error 1

Пару часов часов гуглинья привели к на эту страницу .  Проделав нехитрое действие, а именно в катологе исходных текстов ядра отредактировать файл Documentation/lguest/Makefile  заменив строчку all: lguest  на all:
Дальше все отлично собралось и установилось. Система действительно отзывчивее да и в swap лезет меньше. Кстати сократилось и время загрузки системы, возможно из-за того что много лишнего выбросил, а может и не из-за этого.
p.s. А через 2 дня я купил 2 Gb оперативной памяти и пришлось пересобирать ядро из-за своих оптимизаций, при которых система видела меньше 1 Gb

Откаты за откатами или как нагреть руки на образовании

Сегодня бывший одноклассник кинул ссылку на запись в блоге. Потом еще пару линуксойдов кинули ссылку и не зря так взбудоражились.

Как известно был принят проект о переводе школ на СПО, выделены деньги на развитие «школьного дистрибутива», распространение и обучение. И конечно наши чиновники опустили туда свои поганые пакши.

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