Убунтариум

индекс
253,47

Стать мэинтейнером. Часть вторая

На второй день мы уже пообвыклись с идеей, что в дебиане и убунту любят действительно свободное программное обеспечение и уже начинаем задумываться о том, как бы нам начать собирать свой первый пакет. Но стоп! А какими программами мы вообще умеем пользоваться? Что?! OpenOffice.org Writer и Kopete? Не, ну так дело не пойдёт. Сегодня я расскажу вам обязательный минимум, который понадобится каждому будущему сопровождающему пакеты (я решил принять этот термин, оставив заморское слово «мэинтейнер» только в заголовке, как дань первой статье), да и просто любому убунтоводу пригодится в жизни.
(Части 1, 3 и 4)


GPG


И начём мы с утилиты GnuPG или просто GPG. Что это такое? GPG — это ваше удостоверение личности, возможность продемонстрировать в интернете, что под вашим именем скрываетесь именно вы, а не злопасный враг, это возможность зашифровать почтовое или jabber-сообщение, это возможность подписать файл, сохранив отпечаток в отдельном файле. Согласитесь, это намного надежнее, чем простой md5-хэш — вы еще и даёте понять, что файл (или файлы) в таком состоянии сохранили именно вы, а не кто-то посторонний. В общем, GPG — это очень полезный и нужный в хозяйстве инструмент. Я не буду рассказывать все его возможности, их можно почитать и в мане, а я расскажу только самое основное. Итак, ставим пакет командой
$ sudo apt-get install gnupg

Теперь нам необходимо создать свою собственную пару ключей. Набираем
$ gpg --gen-key

Стандартный тип ключа (DSA и ElGamal) нас вполне устроит, стандартный размер (2048 бит) тоже. Срок действия (без ограничения) тоже устроит стандартный. Дальше нам надо ввести информацию о себе. Debian предлагает в качестве примера: «Baba Yaga (pensioner) <yaga@deepforest.ru>», где информация в скобках — это комментарий. Его нам вводить необязательно, можно просто ограничиться именем и e-mail'ом:
Ваше настоящее имя: Ivan Ivanov
Email-адрес: ivan@ivanov.iv
Комментарий:
Вы выбрали следующий User ID:
"Ivan Ivanov <ivan@ivanov.iv>"

Если вы введете имя и e-mail, указанные для вашего логина в /etc/passwd, то этот ключ будет по умолчанию использоваться для подписи и шифрования всего, что только можно.
Дальше нам необходимо ввести пароль. В связи с тем, что при подписывании пакета вам не раз придётся его вводить, я не раз слышал высказывания типа «да создай ты отдельный ключ без пароля, чо там такого секретного, никто его у тебя с ноутбука воровать не будет, да и вообще». Не поддавайтесь на такие провокации. Ваш gpg-ключ — это ваш паспорт и даже больше. Создавать ключ без пароля — всё равно что носить сумку со сломанной молнией — даже если мы её всегда держим перед собой и пересекаем метро бегом исключительно бегом — зачем провоцировать потенциальных воров? Поэтому мы придумываем сложный запоминающийся пароль и наконец получаем вожделенную пару ключей:
$ gpg --list-keys
/home/user/.gnupg/pubring.gpg
----------------------------------
pub 1024D/3904FAE7 2009-01-30
uid Ivan Ivanov <ivan@ivanov.iv>
sub 2048g/2DA010F1 2009-01-30

Дальше нам надо отправить наш публичный ключ на какой-нибудь сервер ключей, чтобы любой мог его себе заимпортировать:
$ gpg --keyserver subkeys.pgp.net --send-keys 3904FAE7
gpg: отправляю ключ 3904FAE7 на hkp сервер subkeys.pgp.net

Теперь любой желающий может ввести команду
$ gpg --keyserver subkeys.pgp.net --recv-keys 3904FAE7
и получить ваш публичный ключ. 3904FAE7 в данном случае — это ваш персональный id ключа.
Теперь добавим в ваш ~/.bashrc две строчки:
export DEBFULLNAME="Ivan Ivanov"
export DEBEMAIL="ivan@ivanov.iv"
, которые будут использоваться в дальнейшем при создании и подписании пакетов. На этом мы можем пока оставить GPG и перейти к следующей части.

APT


Да, сейчас мы поговорим о волшебном наборе утилит APT и его применении в сборке пакетов. К сожалению, многие знакомы с этим пакетом довольно поверхностно, а ведь скольких проблем мы могли бы избежать.
Для начала запомним утилиту apt-key. Она нам пригодится, если мы будем подключать сторонний репозиторий. Данная утилита управляет списком доверенных ключей, которыми могут быть подписаны различные репозитории. Если мы выполним команду
$ sudo apt-key list
то получим стандартный список ключей, которыми подписаны официальный репозитории вашего дистрибутива. Как добавить туда ключ еще одного репозитория? Например, так:
$ wget -O - qutim.org/debian/archive.key | sudo apt-key add -
При помощи wget мы скачаем с сайта публичный ключ репозитория qutIM'а и передадим его на вход команде apt-key. Теперь пакеты, подписанные данным ключом, будут считаться «хорошими» и устанавливаться без предупреждений.

Идём дальше. Я обещал рассказать, чем вот этот подход является таким ужасным. Разумеется, будь мы истинными пользователями Slackware, держащими в голове все установленные пакеты с десятками зависимостей, нам не составляло бы труда скомпилировать и поставить еще одну программу из исходников (знакомые пользователи Slackware говорят, что в последних версиях даже появился полноценный менеджер пакетов, возможно даже честно сп...украденный из Debian'а, но они всё равно предпочитают по старинке отслеживать все зависимости вручную). Но мы же с вами знаем, что такое пакетный дистрибутив, зависимости, контроль версий в конце концов. Ставить pidgin в /opt/ некультурно хотя бы по той простой причине, что однажды забывшись, мы ткнём в меню кнопку pidgin и запустим старую версию, с неработающей аськой.
«Можно ведь указать префикс /usr/», — скажете вы. Конечно, и первое же обновление пакета в репозитории потрёт вашу исправленную версию. Кому это в самом деле нужно? Нет, мы сделаем всё культурно. Поскольку pidgin большой, некрасивый и тяжелый пакет, и вообще я его не люблю, я расскажу вам всё на примере пакета ccache, кэширующего объектные файлы компилятора при сборке.
Как известно, данный пакет делает файлы «gcc», «g++» и еще несколько подобных — симлинками на свой исполняемый файл /usr/bin/ccache, а сам смотрит на название вызванного файла, в соответствии с которым и подставляет нужный компилятор. Но вот в чём проблема — многие исходники при компиляции обращаются к файлу «c++», который должен быть симлинком на любой подходящий компилятор, а компилятора «c++» ccache и не знает. Что же делать? Я решил не мучиться, не переучивать исходники и не создавать лишних файлов, а обойтись грязным хаком.
Итак, чтобы работать с исходными пакетами, мы смотрим файл /etc/apt/sources.list. Если мы видим там закомментированные строки, начинающиеся на «deb-src», смело их раскомментируем, это указания, где брать файлы пакетов с исходниками.
Теперь мы берем знакомую нам практически с детства заветную команду apt-get и выполняем ее три раза с разными параметрами:
$ sudo apt-get update
$ sudo apt-get install devscripts lintian
$ apt-get source ccache
Первой командой мы обновляем список доступных пакетов после редактирования sources.list, второй устанавливаем скрипты, необходимые для сборки пакетов, а третьей скачиваем пакет с исходниками ccache. Заметьте, чтобы скачать пакет с исходниками, нам даже не нужны права суперпользователя. Тем временем APT нам сообщает:
Получено:1 http.us.debian.org sid/main ccache 2.4-16 (dsc) [1118B]
Получено:2 http.us.debian.org sid/main ccache 2.4-16 (tar) [86,4kB]
Получено:3 http.us.debian.org sid/main ccache 2.4-16 (diff) [44,1kB]
Получено 132kБ за 2s (51,1kБ/c)
dpkg-source: извлечение ccache в ccache-2.4
dpkg-source: инфо: распаковывается ccache_2.4.orig.tar.gz
dpkg-source: инфо: накладывается ccache_2.4-16.diff.gz

Обратите внимание: исходный пакет состоит из трёх файлов: файла .orig.tar.gz — это архив с неизмененными исходниками — такими, какими их распространяет сам разработчик программы, файл .diff.gz — это diff-файл, хранящий в себе все изменения исходников, включая debian-инструкции по сборке (об этих инструкциях в следующий раз), и файл .dsc, в котором хранится краткая информация о пакете, хэши первых двух файлов, а сам dsc-файл подписан GPG-подписью автора пакета. При желании мы могли бы получить открытый ключ и проверить эту подпись, но поскольку пакет взят нами из официального репозитория, то мы такими глупостями заниматься не будем. Поэтому мы заходим в каталог ccache-2.4 и при помощи любимого текстового редактора меняем в файле execute.c строку "x_asprintf(&fname, "%s/%s", tok, name);" на строки:
if (strcmp(name, "c++") == 0) {
x_asprintf(&fname, "%s/%s", tok, "g++");
} else {
x_asprintf(&fname, "%s/%s", tok, name);
}

Понятно, что большинству из вас эта программа и этот патч никогда не понадобятся, но по крайней мере в следующий раз при желании исправить пакет, например, заменить в нём иконки на свои любимые или добавить в «О программе» строку «Здесь был Вася», вы будете представлять, что делать.
Итак, мы исправили исходники, что нам надо сделать дальше? Совершенно верно, надо увеличить номер версии пакета. Набираем всё в том же каталоге команду
$ dch -i
При этом запустится ваш любимый редактор (у меня это vim), в котором уже будет открыт changelog, и добавлен шаблон записи о новой версии. Если вы к моменту выполнения этой команды уже перезапускали ваш bash или просто переоткрывали консоль, то в качестве автора изменений будут подставлены ваше имя и e-mail, которые мы добавляли в файл ~.bashrc. У меня, например, предложенный шаблон выглядит так:
ccache (2.4-16.1) unstable; urgency=low

* Non-maintainer upload.
*

-- Vsevolod Velichko <torkvemada@nigma.ru> Fri, 30 Jan 2009 06:05:36 +0300

Запись «Non-maintainer upload» добавлена автоматически, чтобы показать, что данную версию пакета создал не сопровождающий пакета, а сторонний человек. Предложеннный номер версии нас не устраивает, давайте его увеличим и добавим немножко информативности в сведения об изменениях. В результате наша запись принимает вот такой вид:
ccache (2.4-17) unstable; urgency=low

* Non-maintainer upload
* Patched for the "c++" as compiler name support

-- Vsevolod Velichko <torkvemada@nigma.ru> Fri, 30 Jan 2009 06:05:36 +0300
Сохраняем и выходим. Теперь надо посмотреть, все ли необходимые для сборки данного пакета программы у нас есть. Открываем в любимом редакторе файл ccache-2.4/debian/control и ищем в нем следующую строку:
Build-Depends: debhelper (>> 6), autotools-dev, zlib1g-dev
В ней записано, какие пакеты, кроме стандартных, потребуются для сборки пакета. Набираем для гарантии:
$ sudo apt-get install debhelper autotools-dev zlib1g-dev
убеждаемся, что все требуемые пакеты поставились или уже стоят, после чего можем переходить собственно к сборке.
Другим способом установить все необходимые для сборки пакеты является:
$ sudo apt-get build-dep ccache
Этот способ подходит вам, когда все ваши изменения находятся на уровне патчей и не добавляют в программу ничего, что требовало бы новых зависимостей — каких-то дополнительных библиотек, запуска внешних программ при сборке, или еще чего.
Всё в том же каталоге ccache-2.4 набираем волшебную команду
$ debuild --lintian-opts -i
Команда со столь неблагозвучным названием, как debuild, занимается ничем иным, как тем, что собирает пакет, затем натравливает на него программу lintian, которая отлавливает нехорошо оформленные пакеты, а в завершение добивает собранный пакет командой debsign, которая подписывает собранный пакет (на этом этапе, если в changelog вы правильно указали своё имя и email, у вас спросят пароль от вашего gpg-ключа, который мы генерировали в первой части). Посмотрим на вывод lintian, он сообщает нам, какие ошибки были обнаружены при сборке:
Now running lintian…
W: ccache source: source-nmu-has-incorrect-version-number 2.4-17
N:
N: A source NMU should have a Debian revision of "-x.x" (or "+nmuX" for a
N: native package). This is to prevent stealing version numbers from the
N: maintainer.
N:
N: Maybe you didn't intend this upload to be a NMU, in that case, please
N: doublecheck that the most recent entry in the changelog is byte-for-byte
N: identical to the maintainer or one of the uploaders. If this is a local
N: package (not intended for Debian), you can suppress this warning by
N: putting «local» in the version number or «local package» on the first
N: line of the changelog entry.
N:
N: Refer to Debian Developer's Reference section 5.11.2 (NMU version
N: numbering) for details.
N:
N: Severity: normal; Certainty: certain
N:

Правда, удобно? Не только расскажут, в чём ошибка, но и отправят к соответствующему разделу документации разработчика Debian. Тут я хочу отметить, что в Debian утилита lintian намного строже относится к пакетам, чем в Ubuntu, поэтому если вы хотите получить идеальный пакет — соберите его в Debian, а потом портируйте в убунту, комар носа не подточит. В данном случае нам сообщили, что наша единственная ошибка состоит в том, что преднамеренно изменив предложенный нам номер новой версии, мы изменили его неправильно. Теперь выйдем из каталога на уровень выше и установим собранный пакет:
$ sudo dpkg -i ccache_2.4-17_amd64.deb

Что нам осталось? Самый внимательный читатель, дочитавший до этого места, обязательно задастся вопросом: а что, если выйдет новая версия ccache, с номером версии больше, чем 2.4-17? На этот вопрос есть не менее двух решений. Первое указать при сборке версию не 2.4-17, а заведомо большую, например, 5.7-99. Но и такое решение однажды оказалось недейственным, когда пропатченный мною proftpd неожиданно заменился новой версией, которая наконец доросла до указанного мною номера. Второе решение немножко более элегантное. Набираем:
$ sudo aptitude hold ccache
Данная команда поставит на ccache статус hold, то есть зафиксирует текущую установленную версию и не будет устанавливать из репозитория более новые.

Итог


Данная статья на самом деле должна была быть еще больше, но в силу позднего (или даже уже раннего) времени, а также довольно большого объёма того, что я уже набрал, осветить всё, что я хотел, не представляется возможным. Я решил отбросить как минимум рассказ про команды sed и awk, понадеявшись на то, что вы освоите их при необходимости сами.
Что еще осталось за кадром? Создание репозитория из собранных вами пакетов. Данный рассказ займёт больше нескольких строчек, поэтому он остался на следующий раз.
Еще возможно кто-то скажет, что приведенный способ патчить пакет тоже не является верным, и будет абсолютно прав. Если мы задумаемся о том, что нам придётся проделывать всю ту же процедуру редактирования файлов при желании пропатчить новую версию пакета, становится ясно, что наш способ подходит только для быстрой правки — например, если разработчики обещали внести исправление в пиджин в новой версии, а мы хотим его применить уже сейчас. Для исправлений на постоянной основе нам пригодятся утилиты diff и dpatch. Но их я вам предлагаю уже освоить самим в качестве домашнего задания, равно как и самостоятельно собрать исправленный пакет pidgin для ваших нужд. Оставляйте ваши пожелания, что бы вы хотели узнать, я постараюсь в следующих частях это максимально осветить.
+48
30 января 2009, 07:01
45

комментарии (79)

0
Deepwalker #
И в самом деле — почему то никогда не пользовался source. Всегда качал с сайта. Спасибо.

P.S. Жаль заголовок не поправили.
+1
dema #
Вместо:

sudo apt-get install debhelper autotools-dev zlib1g-dev

обычно достаточно

sudo apt-get build-dep ccahe
0
torkve #
100%-ое попадание, тут я в 6 утра стормозил :)
Сейчас исправлю.
+2
Takeji #
Совершенно верно, надо увеличить номер версии пакета. Набираем всё в том же каталоге команду

$ dch -i

Небольшая поправка, Вы не являетесь официальным сопровождающим пакета, поэтому изменять версию не рекомендуется. Вместо этого следует менять локальный префикс пакета:
--local, -l suffix
Add a suffix to the Debian version number for a local build.

Например, вот так:
dch -l local1
0
torkve #
А вы попробуйте, dch -i, как из примера видно, определяет, что вы не мэинтейнер и увеличивает версию в рекомендуемом формате: до 2.4-16.1. Если почитать приведенный вывод lintian, то там об этом даже явно написано:
N: A source NMU should have a Debian revision of "-x.x" (or "+nmuX" for a
N: native package). This is to prevent stealing version numbers from the
N: maintainer.

Собственно мы исправляли предложенный вариант и неправильно увеличивали номер версии с единственной целью — продемонстрировать, как работает и ругается lintian.
0
Takeji #
Да, Вы правы. Просто на мой взгляд давать свой локальный префикс пересобранным пакетам нагляднее
0
OldFornit #
не хочу показаться брюзгой — но чем это отличается от инфомации в maint-guide-ru?
Кроме того, что это рассказано Вами.
Не надо изобретать велосипеды — все это уже написано, и гораздо лучше пользоваться документацией именно от разработчиков дистрибутива.
Относительно создания своего репозитария — аналогично, уже написано самими разработчиками. Достаточно грамотно сформулировать запрос apt-cache search'у
0
spanasik #
> Достаточно грамотно сформулировать запрос apt-cache search'у

Можно поподробнее? (конечно, если не затруднит)
0
torkve #
Например, apt-ftparchive, reprepro, mini-dinstall, может еще что-то. Об этом, собственно, я в следующий раз хотел рассказать :)
+2
OldFornit #
ну конечно не затруднит.

Вариант 1.
Мы пользуемся утилитой apt-build — в этом случае репозитарий собранных пакетов будет создаваться автоматически и сам же пропишеться в sources.list

Вариант 2.
Мы хотим создать просто зеркало репозитария — в этом случае смотрим apt-mirror, debmirror и debpartial-mirror

Вариант 3.
Мы хотим сделать некий кеш. В этом случае нас интересуют:
apt-cacher — кеширующий прокси-сервер для работы с репозиторями пакетов Debian
approx — кеширующий прокси-сервер для работы с репозиторями пакетов Debian
apt-proxy — прокси для доступа к репозиториям с возможностью создания частичных зеркал
и подобные.

Вариант 4.
У нас есть кеш скаченых пакетов и мы хотим им поделиться с кем-либо, создав из них репозитарий — в этом случе курим apt-move.

Вариант 5.
У нас есть просто набор deb-файлов, которые мы хотим оформить в репозито(а)рий. Причем эти файлы могут быть в собраны Вами же — без разницы. Просто набор файлов. В том и с сырцами. В этом случае варим с молоком dpkg-scanpackages /dpkg-scansources

И таких вариантов куча, и, в принципе, методы решения задач мы можем комбинировать.
+3
torkve #
А еще вообще всё написано в манах и исходниках программ, достаточно только покурить их с недельку. А еще есть толстый красивый документ Debian Policy, освещающий все аспекты бытия и листы рассылки debian-devel и debian-mentors для тех, кому всех аспектов бытия почему-то не хватило.
И чтобы всё это воскурить, надо потратить кучу времени, разбираясь, где с чего начать, как всем этим заниматься, что куда писать и к кому собственно обращаться для добавления пакета в репозиторий, ну и так далее. Я знаю это по собственному опыту, потому что начинал я этим заниматься сам, а когда решил всё-таки включить пакет в официальный репозиторий Debian, то всплыло столько интересных моментов, что допиливаю я его до сих пор. И спасибо одному российскому Debian Developer'у, который потратил много времени, рассказывая мне все тонкости.
Всем известно, что у Убунту, наверное, самое большое и мощное коммьюнити, но при этом подавляющее число пользователей не являются гиками и специалистами вообще. Поэтому я хочу составить доступное удобное руководство, которое позволило бы разобраться со всем необходимым, не привлекая толпы посторонних людей, и не изучая страницы англоязычной переписки на debian-devel.

P.s. И, кстати говоря, русская версия maint-guide, когда я ее последний раз видел, была очень сильно устаревшей и неполной по сравнению с нормальной английской.
0
spanasik #
Я не понял (сорри) пока, как сделать свой новый пакет с репозитарием.

Как быть в Debian/Ubuntu, если есть программа, как её правильно запаковать, и создать репозитарий? Про это будет в цикле статей?

Если программа на Питоне, и её можно раздавать в tar.gz — это насколько плохо? Обновляться по идее она и сама может, скачивая всё необходимое с сервера.

Хочется узнать, почему и как надо делать хорошо и правильно :-)

Извиняюсь за такие вот глупые вопросы, просто человеческим языком, как Вы пишете, мало информации, уверен, что если будет больше, Debian/Ubuntu станет гораздо популярнее.

Спасибо!
+1
OldFornit #
если программа на пайтоне — то можно воспользоваться утилитой checkinstall.
0
torkve #
Всё будет, я только начал :) Просто чтобы рассказывать именно об упаковке, надо сначала представлять, что нам из этого может понадобиться и как этим всем пользоваться :) В следующий раз будет как раз уже про сборку пакетов.
0
torkve #
Да, а для питона есть какой-то свой аналог перлового CPAN и утилита checkinstall, тут OldFornit совершенно прав.
И отдельно можете почитать Python Policy, описывающее особые правила, применяемые в Debian к питону и его модулям.
0
spanasik #
Имеется в виду end-user продукт. На питоне, в общем-то, много чего написано — я думаю, для юзера не должно быть никакой разницы, на чём написана программа, на питоне, си или ещё чём-то. Правильнее, мне кажется, использовать deb.

Другое дело, что интересно понять, что проще и удобнее для юзера — распространять в tar.gz, или делать собственный репозиторий. С точки зрения юзера.

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

Т.е. интересует юзабилити, хочется такой же простоты как с setup.exe — для юзера. Юзер ведь не обязан знать про то, о чём мы тут говорим. В идеале всё должно сводиться к одному клику, или apt-get install.
0
torkve #
Ну, для пользователя проще всего будет поставить программу откуда-нибудь из репозитория. В убунту с его ежедневным поиском обновлений это вообще не вызовет никаких проблем — как только залили новую версию в репозиторий — на следующий день она уже предлагается пользователю для установки, только нажми кнопочку «установить». А архив надо откуда-то скачать, распаковать, поставить…
Так что оптимальным вариантом будет естественно собрать пакет и пропихнуть в офф. репозиторий. Для изучения особенностей питоновских пакетов — опять же смотрить Python Policy плюс скачайте src-пакет еще какой-нибудь программы на питоне, которую уже добавили в репозиторий. Будет намного проще :)
0
darkk #
Вот только обновления версий выходят раз в полгода, а в рамках одного релиза идёт feature freeze, разве не так? :-)
0
torkve #
Это в убунту, и там только в определенный момент идёт фриз новых версий, а принимаются только исправления найденных багов. В дебиане то же самое происходит со stable версией, которая выпускается раз в ~2 года, а в unstable у меня пакеты каждую неделю обновляются :)
0
darkk #
А по вашему опыту — unstable по сравнению с testing предназначен для совсем джедаев с красными гл световыми мечами?
+1
torkve #
Да нет, ничего подобного :) В дебиане на самом деле всё просто: обычные пользователи в большинстве своём отлично пользуются unstable, по версиям пакетов он примерно соответствует свежим релизам убунту, лишь немного новее. Осторожные пользователи, которые не гонятся за новыми мегафичами, пользуются testing. Системные администраторы, знающие, что всё дело в волшебных пузырьках, а всё прочее — суета сует, ставят на сервера stable. А вот те, кому хочется нежных ласок с системой, регулярно падающий софт и т.д. и т.п., но зато САМЫЕ новые фичи — ставят experimental.
0
darkk #
А по каким критериями идёт пропихивание пакетов из unstable в tesing?
0
torkve #
Packages are usually installed into the testing distribution after they have undergone some degree of testing in unstable.

Примерно вот так :)
Остальное: тут и тут.
0
darkk #
Спасибо за ссылки — при линейном чтении до пятой главы я еще не разу не доходил :-)
0
OldFornit #
или изучить возможности easy-install — нам никто это не запрещает ;-)
0
torkve #
Да-да) Но зачем простому пользователю изучать easy_install, если ему всё уютно поставится из пакетов?)
0
OldFornit #
да, русская версия на самом деле очень устаревшая.

Просто что я хотел сказать — если уж человек чувствует, что ему настала пора собирать пакеты самому, то он должен быть достаточно уже подкован в знании системы. А тут, естественно, без чтения именно оригинальной документации не обойтись.

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

Никогда, особенно когда только начинали работать с *nix не сталкивались со статьями о настройке шлюзов, где самый первый пункт — это пересборка ядра и echo «1» > /proc…?
И ведь сейчас начинающие зачастую именно так по статьям и делают, хотя ядро допустим сейчас всегда уже готово в такого рода задачи, а вместо echo «1» достаточно отредактировать /etc/sysctl.conf.
Также можно сильно мучаться, пересобирать iptables и долго думать на предмет скриптов, а можно установить arno-iptables-firewall и, при необходимости, допилить правила.
0
darkk #
Это всё верно, просто у разных инструментов разный порог вхождения.
Например, ebuild в gentoo предполагает, что пользователь должен знать и уметь bash и, вообщем-то, больше почти ничего не надо — короткой заметки в handbook-е по волшебным переменным достаточно.

Несколько раз я пытался разобраться в документации разработчика debian — каждый раз становилось невыносимо грустно где-то главе к третей…
Может быть я какую-то не ту документацию читаю?
0
OldFornit #
может просто не созрел? ;-)
Я подобным образом окого года созревал до понимания netams'a. Теперь уже более-менее понимаю и могу настроить под мои нужды.
0
darkk #
Ну не знаю… Почему-то я не считаю, что собирать софт должно быть сложнее, чем его писать. :-)

А по поводу netams-а могу сказать одно — не знаю как сейчас, но полтора года назад был ужасно сырым (и это при версии 3.х!!!): даже zombie-процессы за собой не подбирал и сегфолтился на раз-два-три, а ЛЮБОЙ сегфолт — это ошибка разработчика, а не пользователя… Ну и использование тредов там, где достаточно процессов — тоже не способствовало стабильности.

Настроить его на правильный учёт по нужным мне тарифам я смог за неделю, но при этом пользоваться его встроенным генератором статистики не получалось — при попытке сгенерировать что-то он падал в корку, при попытке использовать встроенный шедалер — падал в корку.
Пару сегфолтов я пофиксил, матерясь, а потом плюнул и перешел на голые счетчики iptables, т.к. роутер и считалка трафика были одной и той же машиной.
+1
torkve #
Понимаете, если пользователь сделает echo 1 > /proc/..., то он всё равно как минимум включит роутинг на своём шлюзе, а потом, со временем, при попытке оптимизации своих скриптов или просто исследовании /etc наткнется на упоминание нужной переменной в sysctl.conf и разберется, как сделать лучше. Даже если у него не сработает пример из руководства — он сможет залезть в ман и найти, что в руководстве оказалось неверным применительно к новой версии. В любом случае материал мана будет восприниматься гораздо лучше, а не как абстрактный набор каких-то команд, не связанных в стройную последовательность. Отсутствие руководств вообще — это хуже, чем наличие устаревших руководств.
Я хочу, чтобы для сборки пакетов не надо было специального созревания. Чтобы пользователь прочитал краткое руководство и сразу сел их собирать. Вот когда при заливке в репозиторий ему скажут: «тут у вас бага, поправьте», он уже залезет в официальное руководство и восполнит пробелы. И это ему будет гораздо проще, поскольку он уже будет понимать процесс сборки, а не теряться в томах Policy.
0
darkk #
Отсутствие руководств вообще — это хуже, чем наличие устаревших руководств.

На эту тему также есть мнение, что неверная документация хуже её отсутствия. Конечно, это не касается неполной или «неряшливой» документации.
0
torkve #
Вопрос в том, насколько она неверная. «Устаревшая и поэтому неверная в деталях» и «вызывающе неверная» — это две большие разницы, согласитесь. Тем более, что у данных материалов явно видны даты публикации, которые при чтении надо будет учитывать :)
0
darkk #
Нет-нет, я не спорю, под «неряшливой» я и имел ввиду в том числе и устаревшую.

А не хотите третью часть (про сборку деб-пакетов) разобрать на примере какой-нибудь софтины… Ну не знаю, например redsocks ;-)
0
torkve #
Не вопрос :) Скажите только список возможных зависимостей, чтобы я не развлекался, выискивая их сам.
0
darkk #
В README только libevent, из компиляторов — только gcc.
Если будут вопросы, контакты мои в профиле :-)
+1
OldFornit #
это замечательное стремление. Но нет ощущение, что произойдет то же самое, как и на bash.org.ru?

Может это и шовинизм, но не надо каждого пользователя приучать к мысли, что он может так просто стать сопровождающим пакета, всего лишь почитав пару статей. Уж лучше посидеть на том же самом apt-get.org и поискать, чем собирать кривой пакет, им делиться, а потом в слезах кричать — ubuntu/debian кака и никогда им не пользуйтесь.

Помните, после чего php стали считать быдлоязыком? Хотя сам язык для своих задачь очень даже неплох.

Может сложиться впечатление, что я призываю запрещать пользователям делать свои пакеты, делиться ими со знакомыми. Нет. Я всего-навсего призываю сначала их научиться учиться. Изучить систему, в которой работают.

В конце-концов, высокий порог вхождения — это хорошо.

На правах ИМХО ;-)
0
torkve #
Так, сударь, в убунту УЖЕ юзер-френдли порог вхождения. Я до сих временами вспоминаю добрым словом человека, собравшего версию 0.1 кутима для убунту, в следующий раз расскажу, почему. Просто документации на русском языке у убунту мало, а дискриминировать и говорить, что «русские лучше и не будут собирать быдлопакеты» — было бы как-то глупо. Я лучше постараюсь научить собирать сразу получше и поправильнее, и это будет хорошо.
А в дебиане — неужели вы думаете, что там кто-то снизит порог вхождения?) Там и так ежедневно приходят десятки предлагаемых пакетов, но при этом у них есть суровые спонсоры, проверяющие пакет, ftp-masters, которые тоже смотрят на пакет и могут еще всех отправить в топку, плюс команды debian-security и debian-legal, которые тоже изучат ваш пакет вдоль и поперек.
0
OldFornit #
так. Разводить холивар debian vs ubuntu я не собираюсь ;-)
Если документации к бубунте на русском мало — идите читайте документацию к дебиану. Не думаю, что разница будет такая же, как и со слакой.
Уж по дебиану то документации хватает…

А по поводу тех, кто будет отправлять «в топку» — раз они нас проверяют, значит и будем их засыпат своим «творчеством».

Я, кстати, ничего не имею против Вашей статьи и Ваших комментариев. Честно и статье плюс поставил, и некоторым комментариям.

Я против современных «пользователей», которые воспримут Ваше статью просто как шаблон. Которые как бибизянка — потыкают на кнопофки и, возможно, что-то сломают.
Которые скажут — а для сего мне список конфликтов и зависимостей описывать? У меня же все заработало.

В наше время мало осталось людей, которые будут делать что-то — именно думая и зная, для чего они это делают.

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

З.Ы. Опять таки на правах ИМХО.
0
torkve #
Надо менять пользователей :) Отсутствие документации не спасёт)
0
OldFornit #
надо воспитывать пользователей ;-)
0
darkk #
Замечательно! Как раз всё никак не соберусь с gentoo перейти на debian/testing, т.к. сборка пакетов в debian заметно сложнее ebuild-ов из gentoo с первого взгляда. Хотя бы по сравнению объемов документации, в gentoo — одна страница введения в рамках хэндбука (которого достаточно почти для всего) с ссылками на dev.gentoo.com, а в debian — документ о 20 главах…
0
OldFornit #
ну скажем так — мне за лет 5 пришлось 4 раза встретиться со случаем, что надо что-то в дебиане пересобрать.
Все случаи благодаря apt-src и debuild binary были тривиальными.

Ведь зачастую нам что надо? Нам надо не стать сопроводителем определнного пакета, а просто пересобрать уже существующий с нужными опциями. А это на самом деле очень просто — грамотные маинтентеры эту предусматривают и, например, в файле debian/rules пишут все необходимые комментарии. Или пишут дополнительные правила, которые элементарно подключить.

Так, надо было пересобрать freeradius на предмет поддержки postgres'а. Это заняло минут 20, в том числе 5 минут изучени и правки файла с правилами сборки.
0
darkk #
Да, сборка дебианизированного пакета тривиальна, согласен, но мне иногда бывает необходимо собрать последнюю версию какой-нибудь редкой библиотеки или же поставить какой-нибудь софт, который вообще еще не опакетили для debian.
В gentoo это сделать проще, но, увы, оверхэд на сборку остальной системы всё-таки весьма ощутим.
0
giner #
Для личного пользования собрать и совсем просто :)
Вот пример: maximum-value.blogspot.com/2008/09/deb_17.html
+1
darkk #
Вот потом и появляются пакеты с бинарниками, которые от libc не зависят ;-)
Для личного пользования в конце концов и checkinstall сойдет, но хочется же наработки и контрибутить иногда =)
0
Qiwichupa #
а вот достаточно ли надежен checkinstall? я наблюдаю в интернетах множество отсылок к нему, но периодически его ругают, мол что-то в нем не так (что — не поясняют, гады )). Речь естественно о сборке для себя.
0
darkk #
Не знаю, несколько лет его уже не использовал.
Он глючил, конечно, иногда, но если включить ручное редактирование списка опакечиваемых файлов — жить можно.
0
darkk #
P.S. Есесно о зависимостях он почти и не слышал со всеми вытекающими последствиями :-)
0
asfd #
А вдруг при отправке на сервер ключа:

0
asfd #
gpg --keyserver subkeys.pgp.net --send-keys 3904FAE7

его перехватит злоумышленник
0
darkk #
Почитайте что-нибудь про PKI или системы шифрования с открытым ключем вообще.
0
asfd #
а рассказать в двух словах? o_O
0
darkk #
В двух словах — «пусть заперехватывается» :-)
0
asfd #
Ну вот публичный ключ на сервер отправлен. А его перехватил злоумышленник и подставил свой публичный ключ. Теперь если кто-то хочет сверить, скачивает паш публичный, оп-па, а он не тот.
0
asfd #
*ваш
0
darkk #
Но его публичный ключ не будет подписан кем-либо.
0
asfd #
Нет, я не то имею в виду.

Вот вы отправляете ключ на сервер. Злоумышленник в этот момент вламывается и вместо вашего ключа на сервер идёт его и там хранится как, якобы, ваш. Такое ведь возможно?
0
darkk #
Конечно, но его ключ не заверен никем. Прочитайте про web of trust (оно же «сеть доверия») на, к примеру, pgpru.com.

Более того, насколько я знаю, чтоб стать debian-девелопером и подписывать пакеты своим ключем, надо чтоб ваш ключ заверил кто-то из debian-девелоперов при личной встрече.
0
asfd #
Вот, это я и хотел узнать. При личной встрече. Спасибо.
0
darkk #
Ну да, собственно такие встречи, если на них есть более двух человек называются «сессии заверителей». Вообще на pgpru.com много хороших статей на эту тему.
0
asfd #
а про сеть доверия сейчас почитаю o_O
0
darkk #
По сути это «децентрализованная» альтернатива централизованным CA и самая geek-нутая социальная сеть :-)
0
torkve #
Да, всё обстоит именно так :) У каждого ключа есть так называемый оттиск — fingerprint — что-то типа хэша, что можно вставить в подпись письма или распечатать на бумажке. А у каждого загруженного себе ключа есть статус доверия:
1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately

И ты когда загружаешь ключ, указываешь, насколько ты ему доверяешь. Соответственно, увидев лично человека и получив у него оттиск ключа, ты его можешь сверить и выставить предпочтительный статус доверия.
0
darkk #
Как я понимаю, заверение ключа и доверие ключу — две в меру ортогональные сущности… Как я понимаю, можно ключ подписать, но не доверять ему, или нет?
0
torkve #
Ну, ты можешь выставить статус «недоверия», подразумевающий, что ты не знаешь, кто это он или «делаешь вид, что не знаешь». Это собственно в пункте 1 прямым текстом сказано. То есть ты не подтверждаешь тем самым достоверность владельца ключа или считаешь его ключ скомпрометированным, украденным или еще каким. Статус 5 выставляется когда ты обладаешь даже приватным ключом, то есть доверяешь подписывающему полностью. Как правило, это выставляется только своему собственному ключу.
0
darkk #
А еще при подписи ключа есть степень валидации от 0 до 3:
0 — ничего не утверждаю про степень валидации
1 — поглядел в глаза
2 — поглядел в глаза и на отпечаток ключа
3 — поглядел в глаза, в паспорт и на отпечаток ключа
0
torkve #
Ух ты, вот такого не знал, чужие ключи подписывать не доводилось :) Спасибо)
0
torkve #
А вообще, учитывая гиканутость сообщества и разработчиков, должно быть так:
2 — поглядел в глаза и в паспорт
3 — поглядел в глаза, в паспорт и на отпечаток ключа
0
darkk #
Это был вольный перевод man gpg :-)
0
darkk #
Я про то, что циферок разных много, но мало кто ими всеми пользуется :-)

Посмотрел сейчас свой небольшой keyring — значения trust ни у кого не выставлены. Да и certificate check level только в одном случае есть.
0
torkve #
Это публичный ключ. Его и так можно будет свободно с этого сервера скачать. Его цель именно в том, чтобы имея данный ключ, проверить — тот ли самый человек подписал данные. А вот ваш приватный ключ никому отсылать или отдавать нельзя ни в коем случае.
Алгоритм GPG/PGP собственно работает следующим образом. Есть приватный ключ владельца, которым можно подписать любые данные. И есть публичный ключ, который пытается проверить подпись. Если подпись проверена успешно, то считается, что файл подписали именно вы, а не кто-то другой. Именно поэтому публичный ключ может иметь любой — с его помощью нельзя притвориться вами, только проверить данные. Я всё это, конечно, объясняю на пальцах, лучше почитайте русскую википедию, там это немножко лучше написано. Там внизу также есть ссылки, по которым можно походить и почитать поподробнее.
0
asfd #
Да я другое имел в виду, это я всё знаю.
0
E1vBaX #
часть до хабраката напомнила
Пароль: «русскими_буквами» в английской раскладке © баш
0
torkve #
Ээ, не понял, если честно. Объясните? :)
0
E1vBaX #
омг. Простите. Я лопух :) несколько вкладок было открыто и ошибся. Не то откоментил :)
0
roller #
столкнулся с проблемой при генерации ключа
«Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need 291 more bytes)»
я сижу из ssh… что я только не вводил и сколько кнопок не нажимал… гугл говорит надо послать большой файл в /dev/null, но что-то cat /dev/sdc > /dev/null результата не приносит :( как быть?
0
torkve #
А вы слали файл в /dev/null параллельно с генерацией ключа или нет?) Запустите в одной сессии cat /dev/sdc > /dev/null, а в другой в это же время — генерацию ключа.
Вообще говоря, создавать ключ через ssh-соединение крайне не рекомендуется в силу требований всё той же безопасности. Сейчас уже не найду ссылку, где бы это было написано, но когда-то GPG крайне просил меня этого не делать. Поэтому если есть возможность поставить на свою linux/windows машину gnupg — лучше сгенерировать ключ на своей машине, потом экспортировать приватный и публичный ключ в файлы и заимпортировать их на удаленной машине. Файлы с ключами, особенно с приватным, после этого, разумеется, надо тщательно стереть.
0
roller #
естественно, я запускал процесс генерации параллельно с пересылкой файла :)
так вот, попутно нашел какой-то пакет, который должен был воспользоваться датчиком случайных чисел встроенным в процессор, в AMD Turion X2 никаких встроенных датчиков не оказалось :(

про то, что ключи можно на любой машине сгенерить я как то забыл, cygwin + pgp помог

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