Ветвление Fedora IoT

Branched — это имя, данное версии Fedora, которая «ответвилась» от развивающегося дерева Rawhide и станет следующим стабильным выпуском Fedora. В этом документе подробно описаны шаги по ветвлению Fedora IoT из Rawhide.

Чтобы выполнить эти шаги и открыть любые pull request-ы, вам нужна действующая учётная запись Fedora.

Работа с репозиторием pungi-iot

Клонируйте и создайте форк репозитория Fedora IoT Pungi, чтобы внести изменения в файлы конфигурации, используемые для сборки Fedora IoT.

git clone https://pagure.io/fedora-iot/pungi-iot.git

Создайте новую ветку и отправьте её в вышестоящий репозиторий. Замените $release на новый числовой номер ветки Fedora. Это не делается как PR и должно быть отправлено напрямую в вышестоящий репозиторий; для этого вам понадобятся права на коммит.

git checkout main; git pull; git checkout -b f$release; git push --set-upstream upstream f$release

Пример, использованный для Fedora 40:

git checkout main; git pull; git checkout -b f40 ; git push --set-upstream upstream f40

Rawhide (main)

В вашем локальном форке создайте новую ветку для изменений в Rawhide (main).

Обновите ключ подписи для Rawhide из основного репозитория Fedora Pungi. Начиная с ветвления Fedora 40, вы можете найти его здесь.

Скопируйте ключ, используемый в Rawhide, в fedora-iot.conf, заменив предыдущий ключ.

Пример:

sed -i 's|$OLD_SIGNING_KEY|$NEW_RAWHIDE_KEY|g' fedora-iot.conf

Пример, использованный при ветвлении Fedora 40:

sed -i 's|a15B79cc|e99d6ad1]|g' fedora-iot.conf

Main останется как «Rawhide», но нам нужно обновить выпуск до следующей версии Fedora.

sed -i 's|40|41|g' fedora-iot.conf nightly.sh sync-release.sh twoweek-nightly.sh

Зафиксируйте изменения:

git commit -a -m "F-41: Update for branching" -s

Просмотрите изменения и, если они вас устраивают, отправьте их в ваш форк и откройте pull request для проверки другими. Пример PR

Branched (следующий стабильный выпуск Fedora)

Теперь нам нужно поработать над новым выпуском, или веткой Fedora, которую мы создали в начале, и указать номер выпуска (например, «40») вместо «Rawhide».

Пример:

git checkout f$release

Использовано при ветвлении Fedora 40:

git checkout f40

В вашем локальном форке создайте новую ветку для изменений.

Обновите символические ссылки, чтобы убедиться, что мы используем последний завершённый вышестоящий compose в Fedora

sed -i 's|latest-Fedora-Rawhide|latest-Fedora-40|g' fedora-iot.conf

Обновите URL-адреса Fedora на «branched»:

sed -i 's|compose/rawhide|compose/branched|g' fedora-iot.conf

Обновите репозитории iot, чтобы использовать «devel» вместо «rawhide»:

sed -i 's|fedora/rawhide/|fedora/devel/|g' fedora-iot.conf

Обновите вхождения «main» на номер выпуска:

sed -i 's|main|f40|g' fedora-iot.conf
Вам потребуется вручную вернуть репозитории comps и bootc base-images обратно на main. В comps или base-images нет веток. (Файлы comps — это XML-файлы, используемые различными инструментами Fedora для группировки пакетов в функциональные группы. Для получения дополнительной информации посетите нажмите здесь.

Обновите «global_ksurl»:

sed -i 's|=HEAD|=origin/f40|g' fedora-iot.conf

Обновите расположение, куда копируется выпуск во время процесса compose и где он размещается для загрузки и rsync-синхронизации на различные зеркала Fedora. Этот путь создаётся при выполнении twoweek-nightly.sh и может быть найден на главном зеркале проекта Fedora.

sed -i 's|/pub/alt/iot/rawhide/|/pub/alt/iot/branched/|g' twoweek-nightly.sh

Зафиксируйте изменения:

git commit -a -m "F-40: Update for branching" -s

Просмотрите изменения и, если они вас устраивают, отправьте их в ваш форк и откройте pull request для проверки другими. Пример PR

Работа с репозиторием OStree

Этот репозиторий используется для настройки ostree Fedora IoT и включает пакеты, службы и различные параметры, включая selinux и unified-core.

Клонируйте и создайте форк вышестоящего репозитория ostree:

git clone https://pagure.io/fedora-iot/ostree.git

Создайте новую ветку и отправьте её в вышестоящий репозиторий. Замените $release на новый числовой номер ветки Fedora:

git checkout main; git pull; git checkout -b f$release; git push --set-upstream upstream f$release

Пример, использованный для Fedora 40 (следующего стабильного выпуска Fedora):

git checkout main; git pull; git checkout -b f40 ; git push --set-upstream upstream f40

Rawhide (main)

Создайте ветку в вашем локальном форке и внесите следующие изменения для Rawhide:

sed -i 's|40|41|g' config.ini fedora-40.repo fedora-iot-base.yaml fedora-iot.yaml
mv fedora-40.repo fedora-41.repo
git add fedora-41.repo
git commit -a -m "IoT: Update rawhide for F-41" -s

Просмотрите изменения и, если они вас устраивают, отправьте их в ваш форк и откройте pull request для проверки другими.

Branched (следующий стабильный выпуск Fedora)

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

Измените URL-адреса с development/rawhide на development/40:

sed -i 's|development/rawhide|development/40|g' config.ini

Обновите вхождения rawhide, заменив их на devel:

sed -i 's|rawhide|devel|g' config.ini fedora-40.repo fedora-iot-base.yaml fedora-iot.yaml fedora-iot-updates-stable.yaml fedora-iot-updates-testing.yaml

Напишите сообщение коммита:

git commit -a -m "Setup for F-40 branched" -s

Просмотрите изменения и, если они вас устраивают, отправьте их в ваш форк и откройте pull request для проверки другими.

Дополнительные проверки

  • проверьте, что тег Fedora IoT был создан в koji. Для проверки вам потребуется установить пакет koji в Fedora

    • Убедитесь, что теги перечислены для новых веток: koji list-tags|grep f*-iot

  • убедитесь, что ключ подписи был обновлён в Ansible (ищите часть, относящуюся к iot)

  • Обязательно обновите Ansible и создайте задание cron для выпуска разработки (devel). Задания cron можно найти здесь.

  • Создайте treefile в репозиториях base-images и fedora-iot-bootc, указывающий на недавно ответвлённый выпуск. Это может устареть с переходом на Konflux. Пример treefile, использованного для compose Fedora 41, можно найти здесь. В branched compose используется fedora-devel.

Вам потребуется создать файл, так как он удаляется на этапе Final. Пример для devel-iot (ВАЖНО — обязательно обновите используемую ветку, в примере это f41):

# IoT devel compose
MAILTO=releng-cron@lists.fedoraproject.org
00 14 * * * root touch /tmp/fedora-compose-devel-iot && TMPDIR=`mktemp -d /tmp/devel.XXXXXX` && cd $TMPDIR && git clone https://pagure.io/fedora-iot/pungi-iot.git && cd pungi-iot && git checkout f41 && ./twoweek-nightly.sh RC-$(date "+\%Y\%m\%d").0 && rm /tmp/fedora-compose-devel-iot

Добавьте его в раздел IoT файла main.yml, найденного здесь:

# put cron job in for IoT devel compose
- name: IoT devel compose cron
  ansible.builtin.copy:
    src: devel-iot
    dest: /etc/cron.d/devel-iot
    mode: "644"
  when: inventory_hostname.startswith('compose-iot01.iad2')