ОМСКАЯ ГРУППА ПОЛЬЗОВАТЕЛЕЙ LINUX » HOWTO http://omsklug.com Свобода - это ответственность. Вот почему все её так боятся. Бернард Шоу Fri, 10 Nov 2017 17:30:02 +0000 en hourly 1 http://wordpress.org/?v=3.2.1 Как собрать chatbot’а для Tox http://omsklug.com/2015/01/how-to-build-toxbot/ http://omsklug.com/2015/01/how-to-build-toxbot/#comments Sat, 24 Jan 2015 22:00:22 +0000 Shroom http://omsklug.com/?p=1777 .local p {text-align: justify!important; text-justify: inter-word!important;} .local a {color: rgb(16, 8, 96)!important;} .local a:visited {color: Gray!important;} .local a:hover {text-decoration: underline; color: Blue!important;} .local code {font-family: Monospace,Courier!important;}

В этой статье собраны некоторые подводные камни, обнаруженные лично автором при сборке чатбота для tox на Debian GNU/Linux 7 (Wheezy) для архитектуры amd64. Приведены способы обхода обнаруженных ошибок.

Подготовка

Для начала нам нужно установить некоторое количество пакетов с библиотеками и заголовочными файлами и вообще со средствами разработки (если таковых в системе ещё нет). Начнём с инструментария разработчика:

apt-get install build-essential libtool autotools-dev \
automake checkinstall check git yasm

Для удовлетворения сборочных зависимостей и для разных дополнительных плюшек типа аудио/видео, возможности запуска bootstrap-демона и хостинга ноды, ncurses-интерфейса поставим ещё несколько пакетов:

apt-get install libopus-dev libvpx-dev pkg-config \
libconfig-dev ncurses-dev

В принципе, эти рекомендации указаны на странице, посвящённой сборке toxcore. А дальше пойдут некоторые особенности… Кстати, я не рекомендую проходить данный квест, одновременно читая этот текст, поскольку стиль изложения материала довольно свободный и допускает возврат на несколько шагов назад и повтор действий с возможным улучшением стратегии. В общем, информация дана в чисто ознакомительных целях и ни в коей мере не является полноценным HowTo и, тем более, пошаговой инструкцией.

Итак, начнём, так сказать, с базовых вещей. Для шифрования нужна библиотека NaCl (старая и плохо портируемая, но быстрая) или sodium (новая, хорошо переносимая, с совместимым API, но несоколько медленнее). При этом существуют косяки как с первой, так и со второй библиотекой. Косяк с первой: нет объектников randombytes.o и cpucycles.o, которые требуются для сборки toxcore, но которые не являются частью NaCl [см. обсуждение подобной проблемы]. Косяк со второй — её тупо нет в репах для Wheezy (появилась только в Jessie), поэтому нужно сливать сырцы для Jessie и собирать (Естественно, для этого нужно добавить соответствующий репозиторий в /etc/apt/sources.list, настроить pinning, чтобы ненароком не обновить систему и т.п. Хотя можно, конечно, скачать нужный пакет прямо с сайта Debian). Соответственно, на старых системах (или если хочется «скорости»):

apt-get install libnacl-dev

А вообще NaCl лучше собирать из исходников, чтобы было откуда выцарапать randombytes.[c|o].

На новых системах (а также на Ubuntu, Mint, Arch, Gentoo и прочих, где всё новьё можно найти в стандартных репах/ppa/портах и пр.):

apt-get install libsodium-dev libsodium13

На старых же системах, где libsodium придётся брать в виде исходиков для Jessie, нужно дополнительно поставить pkg-config и dh-autoreconf, которые указаны в зависимостях для сборки. Впрочем, первый из них мыуже поставили в самом начале, поэтому остаётся только второй (Я лично ограничился сборкой с использованием NaCl, поэтому не могу сказать, какие глюки можно словить с sodium. Однако, смею предположить, что как минимум отсутствие randombytes.o породит похожие эффекты).

Сборка NaCl

Предположим, мы собрались использовать NaCl.

apt-get source nacl-tools

Из этого получатся пакеты для «-tools» и для «-dev». Здесь в зависимостях для сборки присутствует docbook-to-man, поэтому ставим и его тоже.

Сборка пакета: ничего страшного. Как обычно,

dpkg-buildpackage -b -us -uc

Но перед этим нужно в файлике debian/rules закомментировать строчку вида

rm -f $(CURDIR)/build/$(SHORTHOSTNAME)/lib/*.o

чтобы иметь возможность упаковать вместе с основной библиотекой и нужные нам объектники (ну или просто чтобы найти их после сборки). На самом деле по зрелом размышлении можно понять, что сборка пакета по сути не нужна. Можно ограничиться готовым пакетом из репы. Однако, при этом в любом случае нужно в верхнем каталоге дерева исходников libnacl выполнить магический скрипт ./do, который, собственно, и занимается сборкой либы. И уже после этого можно выдернуть и куда-нибудь сложить cpucycles.o и randombytes.o. Этот вариант будет даже более правильным с точки зрения поддержания чистоты пакетов.

Сборка ToxCore

Со стандартными либами покончено. можно сливать с гитхаба исподники toxcore:

git clone git://github.com/irungentoo/toxcore.git

После этого нужно перейти в каталог toxcore и фигачить далее по тексту руководства. Почти. Потому что, как обычно, появятся небольшие нюансы. Начнётся всё просто замечательно:

autoreconf -i

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

./configure --enable-nacl --enable-log --enable-ntox \
--enable-daemon --disable-testing

(в данном случае вся фишка в --enable-nacl; всё остальное — по желанию) закончится ошибкой. Нам скажут, что либа NaCl якобы не найдена, и предложат явно указать путь к ней. Хорошо, сделаем то, что просят, и даже больше, предполагая, что те самые cpucycles.o и randombytes.o лежат в одном из каталогов, известных линкеру (например, в /usr/lib рядом с libnacl.a):

./configure --enable-nacl --enable-log --enable-ntox \
--enable-daemon --disable-testing --with-nacl-libs=/usr/lib \
--with-nacl-headers=/usr/include/nacl

После того, как конфигуратор удовлетворится этой подсказкой, можно делать

make

Однако, сборка тоже не пройдёт с первого раза. Это, вероятно, связано как раз с ошибочным мнением разрабов toxcore о том, что randombytes.o принадлежит libnacl. Но это метафизика, а нам нужно что-нибудь уже собрать. Короче, процесс останавливается на линковке tox-bootstrapd с воплями о том, что в нескольких модулях найдены «undefined reference to ‘randombytes’». Хорошо, предоставим костыль в виде

make LIBS=''/usr/lib/randombytes.o''

после чего чудесным образом (Ну то есть сразу после ошибки запускаем «костыль» — и всё. Не нужно ничего нигде чистить, менять, копаться в файлах и др.пр.) дособерётся демон tox-bootstrapd (Естественно, если нет необходимости в этом функционале (а её в подавляющем большинстве случаев нет) и не был указан параметр --enable-daemon при вызове ./configure, то всё соберётся без проблем). После этого параноики могут проверить качество сборки, запустив

make check

(кстати, все тесты должны завершиться успешно), а все остальные могут сразу же приступить к сборке deb-пакета (ну или любого другого пакета на выбор) и его установке. Например, так:

sudo checkinstall -D make install

По умолчанию либы и бинарники будут установлены в /usr/local, поскольку мы не меняли эти пути в параметрах конфигуратора. Собственно, никто не мешает при вызове ./configure добавить параметр --prefix=/usr. Однако, это не является критичным для сборки бота.

Сборка ToxBot

Теперь, собственно, то, ради чего затевался весь этот сыр-бор. Сборка чат-бота.

Перед тем, как что-то собирать, это что-то нужно стянуть с гитхаба:

git clone git://github.com/JFreegman/ToxBot.git

Далее всё тривиально. Почти, опять же… Если взглянуть на руководство по установке, может возникнуть ложное чувство уверенности в своих силах и полного контроля над происходящим. В самом-то деле, что уж, так сложно единственную команду make запустить что ли?! Однако, в реальности всё не так, как на самом деле… Наверняка сборка загнётся опять же на этапе линковки, и линкер будет орать, что нашёл «undefined reference to `clock_gettime’» где-то в недрах toxcore. В принципе, он прав, потому что эта функция находится в библиотеке librt, а про неё линкеру никто ничего не рассказал. Поэтому придётся лезть в Makefile и менять строчку

LDFLAGS = $(shell pkg-config --libs $(LIBS))

на почти такую же, только с упоминанием нужной библиотеки:

LDFLAGS = -lrt $(shell pkg-config --libs $(LIBS))

После этого всё должно пройти без ошибок. Результат сборки — свежий бинарник toxbot, который не требует настройки и заводится с полпинка. Дальнейшие вопросы вроде «что делать, чтобы он признал хозяина?» и «как пробиться через заботливо закрытый файрвол?» автор статьи оставляет в качестве упражнения для читателя. Поверьте, это абсолютно несложно и даже описано в документации.


Спасибо за внимание!

Как обычно, полный текст этой статьи можно совершенно бесплатно, без регистрации, без смс свободно скачать отсюда в формате PDF.

]]>
http://omsklug.com/2015/01/how-to-build-toxbot/feed/ 0
Как освежить отношения с партнёром по e-mail http://omsklug.com/2013/09/face-email-header-creation-and-usage/ http://omsklug.com/2013/09/face-email-header-creation-and-usage/#comments Wed, 25 Sep 2013 08:22:31 +0000 Shroom http://omsklug.com/?p=1558 .local p {text-align: justify!important; text-justify: inter-word!important;} .local a {color: rgb(16, 8, 96)!important;} .local a:visited {color: Gray!important;} .local a:hover {text-decoration: underline; color: Blue!important;} .local code {font-family: Monospace,Courier!important;}

Всё, что вы хотели знать о заголовке (X-)Face, но боялись спросить

Статья рассказывает о заголовочных полях сообщений электронной почты X-Face и Face, о способах их генерации и внедрения в письмо. Также затронуты темы фильтрации изображений с помощью утилит из пакетов netpbm и ImageMagick.

Что такое e-mail message headers?

Заголовки (вернее, заголовочные поля) сообщений e-mail — это служебные поля данных, расположенные непосредственно перед телом сообщения и содержащие (как минимум) информацию об отправителе, дате отправки, получателе и пути следования письма. Физически они представляют собой строки, начинающиеся с зарезервированного служебного слова и заканчивающиеся переводом строки. От тела письма заголовок отделяется пустой строкой. В принципе, всё это давно было о писано в RFC 822 («Internet Message Format»), который к данному моменту окончательно устарел и был в своё время заменён на RFC 2822, который тоже уже устарел и был заменён на более новый RFC 5322.

Однако, если мы внимательно почитаем эти документы, то не найдём в них упоминаний ни о каких полях (X-)Face. В общем-то, это и правильно, поскольку RFC дают лишь то, что необходимо и достаточно для организации той или иной информационной инфраструктуры. А те поля, о которых пойдёт речь дальше, являются расширениями.

Для чего нужны поля (X-)Face?

Если очень коротко, то в этих полях может содержаться портрет отправителя письма или какой-нибудь логотип. Например, в Claws Mail это выглядит примерно так:


Пример отображения поля Face в почтовом клиенте Claws Mail

А теперь о том, как обстоят дела на самом деле…

А на самом деле о полноценном изображении речи в принципе не идёт. Во-первых, сам по себе размер картинки 48×48 точек не предполагает каких-либо эстетических изысков, поэтому портретное сходство будет веcьма общим. Во-вторых, ограничение на количество цветов делает задачу передачи этого самого сходства весьма нетривиальной. Например, формат X-Face определяет возможность передачи только чёрно-белой картинки. Поле Face может содержать уже цветную картинку, но количество цветов в ней, скорее всего, не будет превышать 30, поскольку есть очень жёсткие ограничения на объём информации.

Однако, нет поводов для беспокойства. Автор формата X-Face Джеймс Эштон на своей страничке буквально говорит о том, что «сделанные тщательно, с использованием дизеринга, [чёрно-белые] изображения лиц на удивление узнаваемы, даже с их небольшим размером». На самом деле никто не запрещает вместо портрета использовать скан личной подписи или какой-нибудь символ. А может быть и пару-тройку слов. Тем более, что изображение может быть цветным… Однако, описание подобных нетривиальных способов использования полей (X-)Face выходит за рамки данной статьи.

Способы создания картинок для поля Face

Поскольку поле X-Face давно можно считать морально устаревшим, сразу перейдём к генерации изображений для Face. Тем же, кто интересуется историческими артефактами, можно посоветовать поставить пакет compface, который, собственно, и предназначен для создания картинок в старом формате. Если же вы хотите моментально оценить, нужен ли вам X-Face, можно заглянуть на страницу онлайн-конвертора изображений в этот формат (благодарности за предоставленную ссылку — alexandrorodrigez).

Итак, для начала рассмотрим, какие ограничения накладываются на изображение для поля Face. Во-первых, это картинка в формате PNG. Во-вторых, размер изображения остаётся таким же, как и в X-Face и составляет 48×48 точек. В-третьих, размер файла жёстко ограничен сверху. Человек, предложивший использовать новый формат поля, Ларс Магне Ингебригтсен (по совместительству — автор программы Gnus) даёт довольно подробный расчёт размера этого самого png-файла, исходя из ограничений на размер поля по RFC, BASE64-кодирования и наличия дополнительной служебной информации. В сухом остатке получаем 725 байт максимум… Да, я тоже сначала подумал, что это невозможно. Однако, сейчас мы с вами узнаем, как же можно упихать в эти жалкие 700 байт какую-нибудь прикольную картинку.

Авторский способ

Собственно, Ларс предлагает конвертировать любую картинку в формат Face примерно вот так:

djpeg face.jpg | ppmnorm | pnmscale -width 48 -height 48 | ppmquant 7 | pnmtopng > face.png

Единственный параметр, который здесь можно менять, — это количество цветов, до которого ограничивается палитра выходного изображения (параметр для команды ppmquant). И то, в большинстве случаев менять его можно только в меньшую сторону, что отнюдь не способствует повышению эстетической ценности результата. Есть, правда, более гибкая команда — pnmquant, которой кроме количества уровней квантования можно также задавать алгоритмы, по которым будет производиться уменьшение цветов и предварительная фильтация. Тем не менее, результат оставляет желать лучшего:


Результат работы утилит из пакета netpbm

Если хотите побаловаться с этими утилитами самостоятельно, их можно найти в пакетах netpbm и libjpeg-progs.

Продвинутый способ

Для его использования нам понадобится откровенно тяжёлый (во всех смыслах) пакет ImageMagick. Однако, и качество результата будет значительно выше. Сразу же замечу, что чем меньше в исходном изображении мелких деталей и различимых цветов, чем больше крупных областей, залитых одним цветом, и чем ближе его размер к нужному нам 48×48 точек, тем меньше будет размер полученной картинки в байтах и тем больше у неё будет сходства с оригиналом.

Однако, ближе к делу! Вот пример командной строки, которая из картинки 225×269 (19Кб) делает картинку объёмом всего 722 байта (обратите внимание, что передпараметрами стоит одиночный знак «–», а не двойной «– –»):

convert face_big.jpg -filter gaussian -define filter:blur=0.75 -resize 48x48 -gravity center -extent 48x48 -unsharp 0x1 -normalize -quantize RGB +dither -colors 32 -posterize 6 -strip face.png

Если, как было указано выше, большого количества мелких деталей нет (или линейный размер исходного изображения не более, чем в 3-4 раза превышает целевой), то параметры -filter gaussian -define filter:blur=0.75 можно опустить. Они используются в качестве ВЧ-фильтра для исключения «шумовой» информации, которая будет практически неразличима в маленьком формате, но приведёт к увеличению объёма файла.

Параметр -resize 48x48 используется для изменения размера, а -gravity center -extent 48x48для центрирования изображения внутри квадрата 48×48. То есть, если картинка изначально квадратная, её можно не центрировать.

Команды -unsharp 0x1 -normalize позволяют несколько увеличить резкость после уменьшения размера и повысить контрастность и насыщенность за счёт нормализации цветов (это процесс растягивания гистограммы изображения с переводом 2% самых тёмных точек в чёрный цвет и 1% самых светлых — в белый).

Далее пойдёт некоторое количество магии, которая, собственно, и позволяет выкинуть бóльшую часть избыточности. Параметр -quantize RGB задаёт цветовое пространство для дальнейших преобразования палитры. Параметр +dither отключает (как это ни покажется странным со значком «+») дизеринг (процесс, который вносит искусственно сформированный шум, скрывая резкие переходы цветов и существенно увеличивая при этом размер файла). Параметр -colors 32 ограничивает палитру изображения 32 цветами (5 бит на пиксель). В данном случае 32 цвета — это отнюдь не догма, а отправная точка. Если объём результирующего файла оказался меньше 650 байт, можно попробовать повысить качество, ограничив палитру не 32, а 64 цветами (6 бит на пиксель). Если же по какой-то причине размер превысил жёсткое ограничение в 725 байт, количество цветов придётся уменьшить. Наконец, параметр -posterize 6 используется для дополнительного уменьшения количества цветов и увеличения площадей, залитых одним цветом, что способствует лучшему сжатию. Заметьте, что если поменять местами параметры -posterize и -colors, выигрыш в объёме будет не столь заметен. Это объясняется тем, что такая последовательность сначала пытается покрыть рисунок сеткой изолиний для выявления областей примерно одинакового цвета, а потом уменьшает количество цветов. Это приводит к тому, что найденные смежные области после сокращения палитры в общем случае не будут иметь один и тот же цвет, что приведёт к худшему сжатию. Но если сначала уменьшить количество цветов, а затем выявлять области с похожими цветами, эта стратегия даст значительный прирост количества связных областей, залитых одним и тем же цветом.

Из вышеизложенного следует логичный вопрос: если мы уменьшили количество цветов постеризацией, почему бы дополнительно не снизить количество бит на пиксель до 4 (использовать 16-цветную палитру)? Давайте проверим:

convert face_big.jpg -filter gaussian -define filter:blur=0.75 -resize 48x48 -gravity center -extent 48x48 -unsharp 0x1 -normalize -quantize RGB +dither -colors 32 -posterize 6 -colors 16 -strip face.png


Пример файла, полученного на выходе утилиты convert из пакета ImageMagick

Получили файл объёмом 683 байта (против 722 с 32 цветами). Весьма неплохо. Если хочется попытаться чуть-чуть улучшить качество, можно постеризовать изображение не до 6, а до 7 или 8 оттенков. Однако, это не всегда приводит к заметному улучшению, зато практически всегда увеличивает размер файла. Если же размер всё ещё больше 725 байт, можно попробовать использовать -posterize 5 (4 и ниже не рекомендую, поскольку это приведёт к серьёзным искажениям). Если и это не помогло, вероятно, следует выбрать другую картинку.

Да, кстати… Чуть не забыл! Параметр -strip не стóит недооценивать, даже несмотря на то, что он идёт последним. Он выполняет весьма важную в данном контексте функцию: убирает мета-информацию из файла. А это как минимум дата создания и модификации, которые занимают ещё пару-тройку десятков драгоценных байтов.

Использование

Теперь вернёмся к тому, ради чего, собственно, всё это и затевалось. То есть, к почтовым клиентам, которые поддерживают отображение полей (X-)Face.

  • Claws Mail отображает эти заголовки самостоятельно, без помощи плагинов.
  • Gnus, естественно, показывает (X-)Face, поскольку автор программы решил «доработать» старый формат поля именно для этого софта.
  • Thunderbird может показывать их с помощью плагинов; к данному моменту, вероятно, в живых остались только Mnenhy и Display Contact Photo.
  • KMail тоже умеет (вероятно, достаточно давно).
  • Balsa не афиширует эту возможность, хотя Ларс Ингебригтсен считает, что там вроде бы всё в порядке.
  • The Bat! считает, что это поле не является стандартным и, кроме того, проще прикрепить фотографию к контакту в адресной книге; соответственно, изображение не показывает (хотя был плагин для X-Face).

Если отображение заголовков обычно не является проблемой, то вставить заголовок в письмо не всегда является тривиальной задачей. Хорошо, если почтовый клиент позволяет хотя бы просто добавлять свои строки в дополнительные поля. Тогда можно пропустить полученный png-файл через утилиту base64 и вставить получившийся мусор закодированный файл в поле ввода, предоставленное клиентом. Но есть и такие, которые позволяют сгенерировать (X-)Face для каждого аккаунта автоматически. В качестве примера рассмотрим процедуру добавления поля Face в двух почтовых клиентах.

Claws Mail

Здесь всё просто. Всего-то нужно

  1. в главном меню программы выбрать пункт «Настройки…»,
  2. далее выбрать «Редактировать учётные записи…»,
  3. в появившемся окне выбрать нужную учётку (если их несколько, естественно, при необходимости придётся повторить процедуру для каждой),
  4. \item нажать на кнопку «Изменить»,
  5. в появившемся окне в списке слева выбрать пункт «Отправить»,
  6. установить чекбокс «Добавить заданный заголовок» и нажать на кнопку «Изменить»,
  7. в открывшемся окне в поле «Заголовок» выбрать «Face»,
  8. для заполнения поля «Значение» нажать кнопку «Просмотр» и выбрать подготовленный по вышеописанной процедуре png-файл,
  9. если не было ругани, нажать кнопку «Добавить»,
  10. закрыть все открытые окна настроек кнопкой «OK» (или «Закрыть»).

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

Thunderbird

Сначала хотелось бы сказать большое спасибо alexandrorodrigez’у (OmskLUG) за то, что он нашёл время и энергию для определения работающего способа вставки и отображения заголовка (X-)Face для Thunderbird.

Итак, что нужно делать:

  1. зайти в Config Editor (Tools → Options → Advanced → General → Config Editor);
  2. добавить поля mail.identity.idN.headers (где N — номер почтового ящика) со значением «X-Face, Face» (без кавычек, естественно); безусловно, если это поле уже существует, то «X-Face, Face» нужно добавить через запятую к существующему списку значений};
  3. создать поле mail.identity.idN.header.X-Face и в качестве значения скопировать в него строку вашего 1-битного изображения, или
  4. создать поле mail.identity.idN.header.Face и в качестве значения скопировать в него base64-encoded строку вашего цветного изображения;
  5. закрыть Config Editor

Для проверки посылаем письмо с того аккаунта, который мы только что модифицировали. Если никаких специальных плагинов не подключено, в полученном письме увидим в числе прочих заполненное нами поле (X-)Face. Если же стоит, например, указанный выше плагин Display Contact Photo, рядом с обычными заголовками появится картинка. Примерно вот так:


Пример отбражения поля Face в почтовом клиенте Thunderbird

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


Спасибо за внимание!

Как обычно, полный текст этой статьи можно совершенно свободно скачать отсюда в формате PDF.

]]>
http://omsklug.com/2013/09/face-email-header-creation-and-usage/feed/ 0
Как собрать пакет WHDD http://omsklug.com/2012/12/whdd-assemble-and-install/ http://omsklug.com/2012/12/whdd-assemble-and-install/#comments Sat, 15 Dec 2012 07:04:12 +0000 Shroom http://omsklug.com/?p=1344 Аннотация

В статье рассказывается, как быстро собрать пакет WHDD для Debian-based дистрибутивов GNU/Linux.

1 Что такое WHDD?

  Собственно, эту информацию можно найти в README. Буквально там говорится следующее. «WHDD — это утилита для диагностики и восстановления блочных устройств (практически аналог MHDD для Linux)». Функционал пока весьма скромен, однако вполне полезен. WHDD умеет распознавать подключенные блочные устройства, может выдать информацию о параметрах S.M.A.R.T., а также может протестировать диск в двух режимах: «только чтение» (данные остаются на месте) и «запись нулей» (соответственно, все данные при этом будут потеряны). Естественно, эта утилита умеет и отображать результаты тестирования, при этом интерфейс практически один к одному повторяет таковой у MHDD.

2 Где найти?

  На момент написания этого Mini-HowTo (декабрь 2012 года) ни в одном дистрибутиве, кроме Gentoo, пакета WHDD не было. Если верить статье WHDD как аналог MHDD под GNU/Linux (http://syslinux.ru/node/1364), в Gentoo «whdd с марта 2012 года находится в основном дереве портежей, и максимум, что нужно сделать — это размаскировать этот пакет». Поэтому для Debian придётся скачать исходники из репозитория на github (https://github.com/krieger-od/whdd/ или сразу получить архив с последней версией исходников отсюда: https://github.com/krieger-od/whdd/archive/master.zip) и собрать программу на своей машине. Ничего страшного и сложного в этом нет; сейчас объясню, как это сделать.

3 Что понадобится?

  1. Естественно, прежде всего для сборки нужны исходники. Предполагаем, что они уже скачаны. Затем их нужно куда-то распаковать. Пусть, например, это будет каталог zoo в домашнем каталоге пользователя. Поскольку исходники находятся в zip-архиве, распаковать их в zoo, я надеюсь, не составит никакого труда (иначе вся информация, изложенная здесь, будет для вас абсолютно бесполезной).
  2. Библиотеки для работы программы:
    1. libmenuw.so и libncursesw.so находятся в пакете libncursesw5 («w» — это wide-character, то есть поддержка многобайтных символов);
    2. libtinfo.so находится в пакете libtinfo5;
    3. libc.so, libm.so, libdl.so, librt.so, libpthread.so являются частью пакета libс6, который ставится при установке, поскольку без него система просто не сможет работать. Поэтому о них можно не беспокоиться.
  3. Пакеты для сборки:
    1. libncursesw5-dev;
    2. libtinfo-dev;
    3. dialog;
    4. libncurses5-dev (обратите внимание — это пакет заголовков для libncurses без поддержки многобайтных символов, без него не находится unctrl.h, на который ссылается dialog.h);
    5. libc6-dev (если вы до этого момента никогда и ничего не собирали на своей машине, вам нужно его поставить; если же собирали, скорее всего, он у вас уже есть).
  4. Инструменты для сборки:
    gcc
    Компилятор C от GNU, если кто не в курсах. По умолчанию обычно не ставится, поэтому, если вы не разработчик, скорее всего, придётся поставить и его.
    make
    Система для автоматического разрешения зависимостей и оптимизации процесса сборки. Полезна не только для программистов, поскольку изначально предназначена для описания процесса создания неких конечных файлов из некоторого количества исходных. Основная особенность — процессы обработки запускаются только для тех файлов, которые были изменены после последней сборки.
    cmake
    Кросс-платформенный генератор make-файлов. При установке пакета тянет за собой emacsen-common (опосредованно, через зависимость от cmake-data), так что не пугайтесь.
    checkinstall
    Весьма полезная утилита, которая позволяет отслеживать файлы и каталоги, которые получаются в процессе сборки и установки софта из исходников (с помощью make && make install), и делать из них полноценный .deb-пакет. Собственно для процесса сборки не нужна, поэтому её можно не ставить. Однако я настоятельно рекомендую использовать именно её вместо традиционного make install, поскольку установленный пакет вычистить из системы значительно проще, нежели рыскать по дереву каталогов в поисках хвостов установленной когда-то программы, особенно если исходников уже давно нет и make uninstall сделать просто невозможно.

Если вы время от времени намерены собирать что-нибудь из исходников, вероятно, имеет смысл поставить пакет build-essential, в зависимостях которого указаны и libc6-dev, и gcc, и make.

 Итак, резюмируя вышесказанное одной командой,
# apt-get install build-essential libncursesw5-dev \
libtinfo-dev libncurses5-dev dialog libc6-dev cmake \
checkinstall libncursesw5 libtinfo5

  Обратите внимание на символ «\» (бэкслэш) на концах строк: здесь он приведён, чтобы показать, что вторая и третья строка являются продолжением первой. Никакой другой цели, кроме эстетической (избежать слишком длинной строки), в его использовании не было. В настоящем терминале можно обойтись и без него (записать команду со всеми параметрами просто в одну строчку), хотя там он выполняет ту же функцию — говорит оболочке о том, что строка не закончилась и будет продолжена дальше.

4 Как собрать?

  Для сборки проекта необходимо перейти в каталог с исходными текстами и выполнить всего две команды:
$ cmake . && make

  Обратите внимание на то, что эти две команды записаны в одной строке, причём оператор && гарантирует выполнение второй команды только после успешного завершения первой. Точка после cmake важна, так как задаёт рабочий каталог, в котором находятся параметры для cmake и в котором будет сгенерирован make-файл. Также можно запустить сборочный скрипт, который находится в этом же каталоге с исходниками:
$ ./build.sh
Но по сути этот скрипт запускает те же две команды сборки и предлагает выполнить make install для установки.

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

5 Как установить?

  Если вы выбрали путь наименьшего сопротивления и согласились выполнить make install (из-под административного аккаунта, то есть, от имени root‘а), можете пропустить этот раздел и сразу запустить whdd:
# whdd-cli
или
# whdd-curses

  Если же вы являетесь адептом строгого и рационального Debian-way, то сначала вы соберёте .deb-пакет, а затем установите его, и ваша система останется прозрачной, логичной и управляемой.

  Итак, checkinstall… Как вы, вероятно, заметили, сборка программы идёт с правами обычного пользователя, поскольку процесс происходит в пользовательском каталоге. То же самое касается и сборки пакета. Установка же предполагает запись в системные директории, что потребует наличия прав администратора. Сам по себе checkinstall, запущенный без параметров, соберёт пакет и попытается его установить. Таким образом, если вы хотите собрать пакет и сразу же установить его (автоматически), вы можете сделать это, выполнив
# checkinstall
с правами администратора. Если же вы хотите только собрать пакет без непосредственной установки, вы можете задать параметр --install=no, выполнив
$ checkinstall --install=no
с правами обычного пользователя.

  После запуска вам предложат создать описание пакета. Оно может содержать более одной строки, но если вы не собираетесь ни с кем делиться, можете оставить его пустым. После этого вас попросят принять как есть или изменить по своему усмотрению несколько параметров:

Этот пакет был создан с использованием данных значений:
0 -  Maintainer: [ root@localhost ]
1 -  Summary: [  ]
2 -  Name:    [ krieger-od-whdd-c8a8691 ]
3 -  Version: [ c8a8691 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ krieger-od-whdd-c8a8691 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [  ]
12 - Conflicts: [  ]
13 - Replaces: [  ]

Введите номер для изменения параметра или нажмите ВВОД для продолжения:

  Опять же, если вы не собираетесь распространять этот пакет, можете только изменить на что-то вменяемое имя пакета (2 - Name), версию (3 - Version) и предоставляемые пакеты (11 - Provides). Впрочем, последнее необязательно. Имя должно отражать реальное название софта, версия должна быть адекватной для того, чтобы можно было легко апгрейдиться после выхода новых и/или официальных версий (для whdd последняя версия на момент написания этого текста была 1.1), поле предоставляемых пакетов сообщает пакетному менеджеру информацию для разрешения зависимостей.

  Если хочется всё сделать правильно, тогда очень желательно дополнительно изменить поля «Ответственный за поддержку» (0 - Maintainer, обычно пишется имя, а затем адрес электронной почты в угловых скобках), «Краткое описание» (1 - Summary, сюда можно вставить первое предложение из README), «Раздел» (6 - Group, ветка дерева пакетов, в которую попадёт этот пакет; для whdd можно выставить util или admin), «Зависимости» (10 - Requires, здесь указываются пакеты, без наличия которых в системе приложение не запустится, и их версии). Вот что получилось в результате у меня (версии библиотек указаны для Debian 7 Wheezy/testing):

Этот пакет был создан с использованием данных значений:
0 -  Maintainer: [ Philaret Nikonov <phil@hyperion.cc> ]
1 -  Summary: [ WHDD is a diagnostic and recovery tool for
     block devices (near to replace MHDD for Linux). ]
2 -  Name:    [ whdd ]
3 -  Version: [ 1.1-git20121213-c8a8691 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ util ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ krieger-od-whdd-c8a8691 ]
9 -  Alternate source location: [  ]
10 - Requires: [ libc6 (= 2.13-37), libncursesw5 (=5.7), libtinfo5 (=5.7) ]
11 - Provides: [ whdd ]
12 - Conflicts: [  ]
13 - Replaces: [  ]

Введите номер для изменения параметра или нажмите ВВОД для продолжения:

Installing with make install...

  В сущности, это всё. После нажатия <Enter> checkinstall соберёт пакет и (если ему этого не запретили явно) попытается его установить. После того, как пакет был успешно установлен, дерево исходников можно с лёгким сердцем удалять до следующего релиза.

6 Кого спросить?

  Итак, с вопросом «что делать?» мы (надеюсь) разобрались, остался вопрос «кто виноват?» То есть, «кому задавать вопросы, если всё пошло не так?»

  Во-первых, конечно же, авторам программы WHDD. Их координаты можно найти в файле README, который лежит в каталоге doc дерева исходных текстов, или в указанном выше репозитории на github.

  Во-вторых, автору этого текста. Его можно найти в джаббер-конференции омских линуксоидов (omsklug@conference.jabber.ru) под ником Shroom.

  Ну и, наконец, всем участникам вашего местного (или ближайшего к вам) LUG’а и вообще любым первым встречным линуксоидам.

  Спасибо за внимание!

Эту статью можно скачать в формате PDFотсюда совершенно свободно.

]]>
http://omsklug.com/2012/12/whdd-assemble-and-install/feed/ 2
Как установить BURG на Ubuntu http://omsklug.com/2012/09/burg-ubuntu/ http://omsklug.com/2012/09/burg-ubuntu/#comments Fri, 28 Sep 2012 16:20:14 +0000 Plus http://omsklug.com/?p=1218 Возникла необходимость сделать загрузочный внешний диск на Ubuntu для всяческих странных нужд. GRUB2 немного испугал. Поэтому решил поставить BURG. Да и приятней на вид. Лучше его брать из PPA – там он свежей.

sudo add-apt-repository ppa:n-muench/burg
sudo apt-get update
sudo apt-get install burg burg-themes

Устанавливаем на диск, у меня диск внешний, поэтому hd1, если диск у вас в системе, то он скорей всего hd0:
sudo burg-install "(hd1)"

Обновляем загрузочный список BURG:
sudo update-burg

Ну и затем одна из замечательных фишек BURG: мы можем посмотреть, как будет выглядеть загрузка!

sudo burg-emu

Клавиши для работы с BURG:

  • t — открыть меню выбора тем
  • f — переключаться в folding mode
  • n — перейти к следующему элементу этого же класса
  • w — перейти к следующему элементу Windows
  • u — перейти к следующему элементу Ubuntu
  • e — редактировать команду запуска выделенного элемента
  • 2 — открыть два окна терминала
  • h — показать “Помощь”
  • i — показать “О программе”
  • q — вернуться в старое меню GRUB
  • f2 — менять темы
  • f3 — менять разрешение
  • F5/ctrl-x — закончить редактирование
  • F6 — переключить окно в режимо двойного терминала
  • F7 — список свернутых элеметов запуска
  • F8 — переключаться между текстовым и графическим режимом
  • F9 — выключить систему
  • F10 — перезагрузить систему
  • ESC — выйти из диалога или меню на уровень выше
]]>
http://omsklug.com/2012/09/burg-ubuntu/feed/ 1