- Краткое руководство по сборке пакета
- Подготовка к сборке пакета
- Исходный код
- Доступ к репозиторию
- Сборочная среда
- Репозиторий Gear
- Новый пакет
- Документация по написанию спека
- Существующий пакет
- gear-репозиторий майнтайнера
- Архив репозиториев сизифа
- Обновление исходного кода
- Фиксирование изменений
- Сборка
- Самостоятельная сборка ядра обычными средствами сборки, без создания RPM пакетов, на примере std-def
- Настраиваем сборочную среду
- Получаем исходный код
- Конфигурация ядра
- Компиляция ядра
- Инсталляция ядра в систему
- Получение исходного кода ядер Альт с помощью git
- Название git remote и бранчей
- Клонирование репозитория
- Открываем нужный бранч
- Проверка целостности исходного кода
Краткое руководство по сборке пакета
Данное руководство поможет вам самостоятельно создать свой RPM-пакет в дистрибутивах ALT Linux. Больше информациx о тонкостях сборки пакетов и их сопровождению вы можете найти в разделах Руководства и Справочники.
Подготовка к сборке пакета
Помимо желания собрать пакет вам необходимы:
Исходный код
Исходный код для пакета вы можете скачать из Интернета. Предположим, вы скачали архив с исходным кодом foo-1.2.3.tar.gz
Доступ к репозиторию
Вам также потребуется доступ к репозиторию (для сборки необходимы зависимые пакеты). Идеальный вариант — копия Sisyphus или необходимого бранча. Однако можно использовать и удалённый репозиторий. Организация доступа к репозиторию будет рассмотрена ниже.
Сборочная среда
1. Установите программы для сборки пакетов:
apt-get install rpm-build gear
Возможно, понадобятся: hasher, rpm-build-licenses и rpm-utils
2. Подготовьте место на жёстком диске. Минимум 2 Гб. Крайне рекомендуется производить сборку на файловой системе tmpfs — скорость сборки может вырасти в несколько раз! Для использования этого варианта начинайте с size=2300m.
Создайте в домашнем каталоге файл .rpmmacros (обязательна точка в начале) примерно такого содержания:
%_packager Vassily Poupkine
В этом файле также можно указать ключи подписи пакетов (если вы собираетесь выкладывать пакеты в репозитории), макросы сборки и прочие полезные параметры.
Репозиторий Gear
Подготовьте репозиторий gear (являющийся частным случаем git-репозитория). Это необходимое условие для правки уже существующих пакетов и просто удобный инструмент для хранения ваших изменений:
Новый пакет
Если вы создаёте новый пакет «с нуля», выполните следующие команды для подготовки git-репозитория:
mkdir foo cd foo git init
В директории foo, в поддиректории .gear создайте файл .gear/rules со следующим содержимым:
Распакуйте архив с исходным кодом:
gear-update -c /path/to/foo-1.2.3.tar.gz foo
Напишите .spec-файл (спек). Спек-файл — текстовый файл с набором инструкций по сборке пакета RPM.
Документация по написанию спека
Существующий пакет
Для изменения существующего пакета необходимо получить его исходный код. Исходный код находится в одном из двух мест:
- в gear-репозитории майнтайнера на git.alt, если майнтайнер пользуется gear
- в архиве репозиториев сизифа, если майнтайнер gear не пользуется.
gear-репозиторий майнтайнера
Найдите на packages.altlinux.org интересующий вас пакет и посмотрите на репозитории на вкладке Gear. Их может быть больше одного, если над пакетом работает несколько человек. При отсутствии информации о том, кто сейчас ведёт разработку пакета, стоит взять репозиторий того, кто собирал его в последний раз. URL для клонирования репозитория указан в web-интерфейсе. К примеру, для keyjnote:
Архив репозиториев сизифа
Если gear-репозитория у майнтайнера нет, то придётся воспользоваться архивом Sisyphus. Для этого в браузере откройте http://git.altlinux.org/archive/ и найдите нужный вам пакет (к примеру, пакет kmymoney2 располагается в http://git.altlinux.org/archive/k/kmymoney2.git). URL для клонирования пакета указан в web-интерфейсе репозитория. Скажем, для kmymoney2:
Обновление исходного кода
Обновите исходный код из скачанного архива (команда выполняется в gear-репозитории):
gear-update /path/to/kmymoney2-0.9.2.tar.bz2 kmymoney2
Обновите версию и changelog в .spec-файле (вручную, в разделе %changelog или с помощью утилиты add_changelog).
Фиксирование изменений
Чтобы зафиксировать все ваши изменения, выполните:
Появится окно редактора (по умолчанию — vi, вызываемый редактор определяется переменной окружения EDITOR, многие начинающие предпочитают export EDITOR=mcedit) с версией и текстом последней записи changelog. Если нужно, поправьте текст, сохраните изменения и выйдите из редактора. Строки, начинающиеся с символа #, будут проигнорированы. Если выйти без сохранения, то изменения зафиксированы не будут.
Примечание: Changlelog вносится через редактор Vim. Чтобы в Vim сохранить изменения и выйти нужно ввести :wq и нажать Enter
Сборка
Среда сборки попытается собрать пакет в изолированной среде hasher. Если в процессе сборки возникнут ошибки — исправьте их и обязательно зафиксируйте изменения. В случае удачной сборки будут созданы пакеты:
- в каталоге $TMP/repo/SRPMS.hasher/ — исходные пакеты .src.rpm
- в каталоге $TMP/repo/i586/RPMS.hasher/ — собранные бинарные пакеты
Примечание: архитектура (i586) может отличаться названием в зависимости от настроек Hasher и сборочного компьютера.
Внимание! При перезагрузке tmpfs очищается, поэтому скопируйте пакеты в безопасное место.
Самостоятельная сборка ядра обычными средствами сборки, без создания RPM пакетов, на примере std-def
Для скачивания и компиляции ядра в полной конфигурации из исходного кода вам понадобится примерно 20 гигабайт, а для инсталляции ещё около 5 гигабайт дискового пространства. Собранное таким образом ядро не будет на 100% идентично ядру в пакете дистрибутива, так как будет различаться сборочная среда — то какими утилитами и компилятором собиралось ваше ядро.
Настраиваем сборочную среду
Под root ставим необходимые пакеты для сборки ядра (в Сизифе):
# apt-get update # apt-get install -y rpm-build git bc dwarves flex libelf-devel zlib-devel openssl openssl-devel
Получаем исходный код
Получите исходный код как описано в статье «Получение исходного кода ядер Альт с помощью Git» и не забудьте проверить его целостность.
Конфигурация ядра
Конечно можно взять готовый конфиг из /boot/config-* или /proc/config.gz , но вероятно, он не точно соответствует версии ядра, которую вы собираете — поэтому воспроизведем генерацию конфига как она происходит при сборке пакета.
Конфиг собирается из частей находящихся в файлах config* , где к основному конфигу config добавляются конфиги соответствующих архитектуре ( config-архитектура , в примере мы будем использовать переменную bash $HOSTTYPE для её определения) и флейвору (например для std-def добавляется config-std , а для un-def не добавляется).
$ make mrproper $ scripts/kconfig/merge_config.sh -m config config-$HOSTTYPE config-std $ make olddefconfig
Примечание: На этом этапе вы можете редактировать получившийся .config или добавить свой патч. Например, для ускорения сборки и уменьшения размера итогового ядра (собранное ядро уменьшится примерно на 14 гигабайт, а инсталлированное примерно на 4.5 гигабайта) можно отключить отладочную информацию:
$ scripts/config -d DEBUG_INFO
Компиляция ядра
Примечание: Компиляцию лучше производить используя параллельную сборку с опцией -j количество_потоков , рекомендуемое количество потоков равно количеству ядер в системе (вывод утилиты nproc ).
$ make -j$(nproc) bzImage $ make -j$(nproc) modules
Инсталляция ядра в систему
Снова под root, зайдите в каталог с ядром:
# make -j$(nproc) modules_install # make install
Шаг make modules_install поместит модули ядра в каталог /lib/modules/KERNELRELEASE , где KERNELRELEASE — строка с версией ядра (её можно посмотреть запустив под пользователем make kernelrelease , например, это может быть 5.15.77+ .)
Шаг make install поместит файлы config, System.map, vmlinuz в каталог /boot , там же будет сгенерирован initrd . При этом, все файлы будут иметь суффикс -KERNELRELEASE и будут поставлены симлинки initrd и vmlinuz на новое ядро — таким образом, загрузка ядра по умолчанию (из первого пункта загрузчика) будет в это ядро.
Получение исходного кода ядер Альт с помощью git
Все собранные пакеты попадают в Gear репозитории, доступные по адресу https://git.altlinux.org/gears/. Каждый репозиторий называется по имени пакета, а бранчи дистрибутива (sisyphus, p10) находятся в соответствующих бранчах git репозитория. Таким образом, в Сизифе для ядра с флейвором std-def пакет называется kernel-image-std-def , а путь к его gears репозиторию на git.alt будет /gears/k/kernel-image-std-def.git , а git-бранч — sisyphus.
Название git remote и бранчей
Будем использовать схему именования позволяющую работать со множеством репозиториев, бранчей и апстримов.
Git remote для gears репозиториев будет называться gears/флейвор , то есть для std-def, это будет gears/std-def , (затем можно будет добавить gears/un-def или апстримные репозитории), а git бранч назовём флейвор/бранч_дистрибутива , то есть в нашем случае это std-def/sisyphus . Такая схема позволит различить remote и бранчи для разных флейворов.
Клонирование репозитория
Клонируем репозиторий так, чтоб remote назывался gears/std-def (опция -o ) в каталог linux (в будущем другие флейворы тоже будут там) и открываем бранч std-def/sisyphus из него:
$ git clone -n -o gears/std-def https://git.altlinux.org/gears/k/kernel-image-std-def.git linux
linux$ git remote add -f gears/std-def https://git.altlinux.org/gears/k/kernel-image-std-def.git
Примечание: Через какое-то время понадобится обновить исходный код ядра, можно не повторять предыдущие шаги, а сделать git fetch нужному remote и обязательно открыть/обновить нужный бранч (см. ниже).
linux$ git fetch gears/std-def
Открываем нужный бранч
В нужном бранче уже применены все ALT specific патчи, поэтому, достаточно его открыть. Называем его в соответствии с нашей схемой описанной выше.
Первоначальное (после клонирования) открытие бранча — создание локального бранча std-def/sisyphus соответствующего gears/std-def/sisyphus (то есть бранчу sisyphus в remote gears/std-def ).
linux$ git checkout -B std-def/sisyphus gears/std-def/sisyphus
Последующее (после git fetch ) открытие бранча и его обновление:
linux$ git checkout std-def/sisyphus linux$ git pull --rebase
Далее можно убедиться, что ядро свежее посмотрев на даты в git log .
Проверка целостности исходного кода
Проверьте целостность полученного исходного кода как описано в статье «Проверка целостности исходного кода в git репозитории ядра».