Помогите собрать systemd из исходников.

Автор CoolAller, 16 января 2016, 00:59:46

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

CoolAller

В общем есть проблема с systemd из реп, проблема описана в этой теме. Поэтому нужно собрать deb пакет из исходников, предварительно добавив туда пару строк кода.
Качаю исходные тексты: apt-get source systemd, получаю:
systemd_215.orig.tar.xz
systemd_215-17+deb8u2.debian.tar.xz
systemd_215-17+deb8u2.dsc

Нужный файл для правки содержится в systemd-215, правлю, потом запускаю ./configure, сначала он плевался на отсутствие пакетов python-lxml и gperf, потом после их установки выдал вот это:

checking for PYTHON_DEVEL... no
checking for PYTHON_DEVEL... no
checking for sphinx-build-2.7... no
checking for sphinx-build... no
checking for library containing dlsym... -ldl
checking sys/capability.h usability... no
checking sys/capability.h presence... no
checking for sys/capability.h... no
configure: error: *** POSIX caps headers not found

Может кто-то помочь?

yoric

libcap-dev стоит? И учитесь пользоваться apt-file
apt-file update
apt-file find sys/capability.h

Yrii

#2
CoolAller, Собственно я собрал, для amd64. Если всё же не получиться собрать - пиши, залью свои пакеты.
apt-get source systemd
cd systemd-215/
apt-get build-dep systemd
редактируем src/login/pam_systemd.c
dch --bin-nmu -p
debuild -b -uc -us

всё.
Естественно всё это лучше делать в chroot/pbuilder.

Cообщение объединено 16 января 2016, 13:07:50

п.с. я думаю надо перенести тему в раздел "Разработка" ибо:
ЦитироватьРаздел для разработчиков и всего, что связано с программированием, сборкой пакетов и тестированием.

CoolAller

#3
Цитата: yoric от 16 января 2016, 11:06:46apt-file find sys/capability.h
Это понятно, но что делать с "checking for PYTHON_DEVEL... no", просто игнорировать?

Yrii,если не трудно, пожалуйста залейте ваш пакет куда-нибудь, я позже попробую еще раз собрать.

Yrii

#4
https://yadi.sk/d/IAelonFqn78Nb
Т.к. у меня этот баг не проявляется ибо у меня другое DE, то сами пакеты я не ставил.

yoric

Цитата: CoolAller от 16 января 2016, 15:43:20Это понятно, но что делать с "checking for PYTHON_DEVEL... no", просто игнорировать?
Если получится, можно и проигнорировать. Поэтапно устраняйте ошибки. А дальше проба покажет.

CoolAller

#6
Yrii, объясните пожалуйста как правильно собирать пакеты, я обычно запускаю configure, мониторю ошибки и по возможности их устраняю, потом запускаю make, в вашей инструкции выше вы опустили эти шаги, поэтому я не совсем понял как правильно собирать deb пакеты из исходных текстов. Или команда debuild все это сама делает? Еще хотелось бы узнать, что делает команда dch --bin-nmu -p ? Поясните плиз. Еще один момент, собрал по вашей инструкции в процессе появлялись какие-то предупреждения ошибки но все же как-то собралось, собственно возникает вопрос есть ли шанс как-то собрать без этих ошибок? Можете пояснить как лучше собрать в chroot/pbuilder?
PS. Качал ваши пакеты, там другая версия, у вас наверно testing?

Не знаю правильно ли я делаю или нет, но я обычно делаю chroot так:
Создаю каталог:
# mkdir /mnt/chroot
Монтирую dev, proc и sys:
# mount --bind /dev /mnt/chroot/dev
# mount --bind /proc /mnt/chroot/proc
# mount --bind /proc /mnt/chroot/sys
Копирую исходный текст пакета в  /mnt/chroot/tmp
После захожу в chroot:
# chroot /mnt/chroot

Yrii

#7
Скачиваем исходный код, распаковываем и накладываем патчи (это всё автоматически делается):
apt-get source systemd

Переходим в папку:
cd systemd-215/

Устанавливаем все пакеты, необходимые для сборки данной версии:
apt-get build-dep systemd

Редактируем src/login/pam_systemd.c

Изменяем changelog и версию:
-p это чтоб каталог не переименовывался;
--bin-nmu это я добавил "номер пересборки", но можно использовать другие варианты -i или -l "префикс".
Главное чтоб версия была больше, иначе придется делать hold на пакет, что не желательно ибо можно упустить возможное обновление пакета из оф. репозитория
dch --bin-nmu -p

Собираем пакет и проверяем его с помощью lintian:
debuild -b -uc -us

В данном случае .configure не надо делать, это делает debian/rules
Там же, если надо, меняются опции configure.

ЦитироватьЕще один момент, собрал по вашей инструкции в процессе появлялись какие-то предупреждения ошибки но все же как-то собралось, собственно возникает вопрос есть ли шанс как-то собрать без этих ошибок?
Предупреждения и "ошибки" могут появятся, но это "нормально". Главное, что собрался пакет :-)

ЦитироватьКачал ваши пакеты, там другая версия, у вас наверно testing?
Нет, stable, внимательно сравните. Там версия такая же только добавилось +b1.

ЦитироватьМожете пояснить как лучше собрать в chroot/pbuilder?
Я собираю в pbuilder ибо так получается, образно говоря, всегда новое и чистое окружение.
Т.е. ты зашел в образ pbuilder - сделал дело - вышел - образ вернулся в первоначальное состояние. (ну, если не использовать соответствующую опцию для сохранения результата)

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

Почитать:
Руководство начинающего разработчика Debian:
На сайте: https://www.debian.org/doc/manuals/maint-guide/
Можно скачать pdf: https://www.debian.org/doc/manuals/maint-guide/maint-guide.ru.pdf
Или поставить пакет maint-guide-ru и тогда в системе будет pdf, epub и html версия

Введение в создание пакетов Debian:
Можно скачать pdf: https://www.debian.org/doc/manuals/packaging-tutorial/packaging-tutorial.ru.pdf
Или поставить пакет packaging-tutorial

CoolAller

#8
Большое спасибо за развернутый ответ!

Цитата: Yrii от 16 января 2016, 23:13:40Я собираю в pbuilder ибо так получается, образно говоря, всегда новое и чистое окружение.
Можно об этом подробнее? Коротко о том как создать, можно просто команды накидать. Я позже tutorial почитаю, спасибо за ссылки, сейчас хотелось бы просто пакеты создать.



Cообщение объединено 16 января 2016, 23:24:53

Цитата: Yrii от 16 января 2016, 23:13:40Там версия такая же только добавилось +b1.
Я просто хотел установить только один пакет systemd, а установщик рапортует о том, что в системе установлены пакеты systemd без +b1 и отказывается устанавливать пакет, обновлять все пакеты я пока не стал. Почему вообще появилось это +b1? Я собрал по вашей инструкции выше, у меня собралось без +b1, с чем это связано?

Yrii

#9
Устанавливаем pbuilder. Для удобства прописываем его в sudo ибо он работает от root (это один из его минусов).

Создаем/редактируем файл конфигурации /etc/pbuilderrc (или /root/.pbuilderrc).
Пример конфигурационного файла есть тут: /usr/share/pbuilder/pbuilderrc
Он может отработать и без этого файла, но лучше создать...

Далее опишу без доп. возможностей/опций. Просто минимальный образ jessie.

Создаем/настраиваем базовый архив, который будет содержать наше CHROOT окружение:
sudo pbuilder create

Результат мы найдем тут (по умолчанию):
/var/cache/pbuilder/base.tgz

Если надо зайти в образ (изменения не сохраняются):
sudo pbuilder --login

Если надо сделать изменения в образе и сохранить, то добавить опцию: --save-after-login

Выйти из окружения - просто набрать exit.

Когда мы заходим в образ, то создается временная директория (образ распаковывается).
В эту папку можно копировать свои файлы, которые будут доступны в CHROOT окружении.
/var/cache/pbuilder/build/$Номер/<Тут среда chroot debian>

Воспользуйся поиском по этому форуме. Найдешь много инфы.

Cообщение объединено 16 января 2016, 23:35:59

ЦитироватьЯ просто хотел установить только один пакет systemd, а установщик рапортует о том, что в системе установлены пакеты systemd без +b1 и отказывается устанавливать пакет, обновлять все пакеты я пока не стал.
все правильно ибо пересобрался весь systemd и в зависимостях там пакеты с +b1

ЦитироватьПочему вообще появилось это +b1?
это из-за dch --bin-nmu, в принципе, можно dch не использовать (это просто я по привычки добавил) или использовать др. опции

ЦитироватьЯ собрал по вашей инструкции выше, у меня собралось без +b1, с чем это связано?
При использовании dch надо "создать"/сохранить файл. Иначе версия не поменяется.

CoolAller