Girar на коленке: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «{{Stub}} XXX: HERE BE DRAGONZ На этой странице приведены мои заметки, неполные и кривые. Нормальную документацию по разворачиванию girar предлагается написать его разработчикам. Задача: сделать собственное окружение girar для разрабоки и тестирования. Идея: взять...»)
 
м (→‎Настраиваем: girar-create-girar-repo vs дубли)
 
(не показано 8 промежуточных версий 1 участника)
Строка 42: Строка 42:
           -nographic -m 4G \
           -nographic -m 4G \
           -smp cpus=6 \
           -smp cpus=6 \
           -netdev user,id=eth0,hostfwd=tcp::5022-:22 \
           -netdev user,id=eth0,hostfwd=tcp::2022-:22 \
           -net nic,netdev=eth0 \
           -net nic,netdev=eth0 \
           systemd-iv-20240221-x86_64.qcow2c
           systemd-iv-20240221-x86_64.qcow2c
Строка 48: Строка 48:
Полезен alias в .ssh/config:
Полезен alias в .ssh/config:


  Host    qemu
  Host    qg
         Hostname localhost
         Hostname localhost
         Port 5022
         Port 5022
Строка 54: Строка 54:
== girar ==
== girar ==


Беру свой форк https://git.altlinux.org/people/iv/packages/girar.git?a=shortlog;h=refs/heads/WIP-la64 , так как именно над ним планирую работать.
Беру свой форк https://git.altlinux.org/people/iv/packages/girar.git?a=shortlog;h=refs/heads/hacks , так как именно над ним планирую работать.
 
git clone -o iv -b hacks https://git.altlinux.org/people/iv/packages/girar.git
cd girar


Собираю
Собираю
Строка 68: Строка 71:


  ln -s  /var/lib/girar/repo /
  ln -s  /var/lib/girar/repo /


== Настраиваем ==
== Настраиваем ==
Строка 77: Строка 79:
  vim /usr/libexec/girar-builder/gb-sh-conf-site  
  vim /usr/libexec/girar-builder/gb-sh-conf-site  


TODO: что получилось и зачем?
Выставим
 
GB_USER_PREFIX=alt_
GB_LIST_OF_CHECKS_ALLOWED_TO_FAIL=''
 
GB_APT_CACHE_LIMIT можно удалить, в GB_TRUST_GPG_NAMES допишем себя. Можно заодно в GB_REPO_RPMARGS весь payload заменить на 'w2T.xzdio', например.


Поправим и /etc/girar/repo/.default: допишем себя.
Поправим и /etc/girar/repo/.default: допишем себя в TRUST_NAMES и SUPERUSERS.


  GIRAR_TRUST_GPG_NAMES="incominger secondary alt-sisyphus-ports alt-p9-ports alt-p9 alt-sisyphus updates iv"
  GIRAR_TRUST_GPG_NAMES="incominger secondary alt-sisyphus-ports alt-p9-ports alt-p9 alt-sisyphus updates iv"
Строка 90: Строка 97:


Включим и запустим proxy daemons:
Включим и запустим proxy daemons:
systemctl start girar-proxyd-acl
systemctl start girar-proxyd-depo
systemctl start girar-proxyd-depot


  systemctl enable girar-proxyd-acl
  systemctl enable --now girar-proxyd-acl
  systemctl enable girar-proxyd-depot
  systemctl enable --now girar-proxyd-depot
  systemctl enable girar-proxyd-repo
  systemctl enable --now girar-proxyd-repo
 


Будем создавать репозиторий по имени test.


Сгенерируем awaiter'у ключ, которым он будет подписывать собранные пакеты -- без пароля, RSA 4096:
Сгенерируем awaiter'у ключ, которым он будет подписывать собранные пакеты -- без пароля, RSA 4096:
Строка 123: Строка 128:




Настрим собирающую сторону:
Настроим собирающую сторону:


  apt-get install hasher
  apt-get install hasher
Строка 168: Строка 173:
  ssh build-awaiter0-test-x86_64
  ssh build-awaiter0-test-x86_64


Пришла пора создать репозиторий. Возьмём какие-нибудь rpm-ки (TODO: опубликовать костыль), и превратим в заготовку репозитория при помощи честно украденного у Глеба скрипта:
Пришла пора создать репозиторий. Для этого понадобятся какие-нибудь пакеты, причём желательно, чтобы они попали во все нужные Вам компоненты (добавлять компоненты в существующий репозиторий немного сложнее). Можно воспользоватся [https://git.altlinux.org/people/iv/packages/?p=fakepkg-for-every-component.git;a=shortlog;h=refs/heads/main моим костылём], а точнее результатом его сборки, в качестве начального наполнения репозитория: скопируйте в виртуалку все rpm и (ВАЖНО) src.rpm тоже не забудьте; при этом (тоже важно) убедитесь, что в каталоге, передаваемом как начальное содержимое, нет дублей имён пакетов (в том числе симлинков вида ../../files/*/RPMS/*).
 
Превратим кучку пакетов в заготовку репозитория при помощи честно украденного у Глеба скрипта:


  girar-create-girar-repo ./test-repo/ /repo/before/
  girar-create-girar-repo ./test-repo/ /repo/before/
Строка 180: Строка 187:
  rm -rf /repo/before/
  rm -rf /repo/before/


awaiter и pender запускаются кроном
crontab -e -u awaiter
Запускаем команду:
USER=awaiter0 /usr/libexec/girar-builder/gb-toplevel-build test
crontab -e -u pender
И там команда
/usr/libexec/girar-builder/gb-toplevel-commit test
== Создадим пользователя ==
Удобно хранить все ключи в одной папке:
mkdir ssh_keys
И закинем туда свой публичный ключ.
У нас нет gitery, поэтому нужен костыль
mkdir -p /people/iv
Можно создавать пользователя:
/usr/libexec/girar-admin/girar-admin user-add iv 'Ivan A. Melnikov' < ssh_keys/iv
setquota на нас поругается, но это не важно.
Добавим пользователя в группу мейнтейнеров, чтобы он мог коммитить задачи:
/usr/libexec/girar-admin/girar-admin maintainer-add iv
Те же три команды можно повторить и для других пользователей, если они нужны.


== Дополнительные правки ==
== Дополнительные правки ==
Строка 192: Строка 237:


Создайте и удалите задачу 1 -- это нужно для внутренних структур данных.
Создайте и удалите задачу 1 -- это нужно для внутренних структур данных.
Трижды перезагрузитесь на удачу.


Начиная с задачи 2 можно пробовать собирать SRPMки.
Начиная с задачи 2 можно пробовать собирать SRPMки.

Текущая версия от 18:51, 27 ноября 2024

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


XXX: HERE BE DRAGONZ

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

Задача: сделать собственное окружение girar для разрабоки и тестирования.

Идея: взять виртуалку, развернуть на ней gyle, сделать её же сборочной машиной; можно будет подключить внешний репозиторий и собирать SRPMки.

Плюсы:

  • тривиальная инфраструктура
  • готовым образом можно легко поделиться

Минусы:

  • неполный репозиторий локально -- не все проверки работают;
  • нельзя собирать из git (нужен gitery, а на одном хосте с girar'ом его похоже не развернёшь)

ОСь

Сизиф, systemd. Можно брать sysv, но мне не интересно. Можно, наверное, брать облачный образ, но они не слишком свежи, поэтому соберём свой при помощи m-p:

ifeq (vm,$(IMAGE_CLASS))
vm/systemd-iv: vm/systemd-net use/net/networkd/resolved use/tty/S0 use/deflogin
        @$(call add,BASE_PACKAGES,update-kernel)
        @$(call add,BASE_PACKAGES,apt-scripts)
        @$(call add,BASE_PACKAGES,vim-console less ripgrep)
        @$(call add,BASE_PACKAGES,resize)
        @$(call add,BASE_PACKAGES,systemd-settings-disable-kill-user-processes)

        @$(call set,ROOTPW,root)
        @$(call set,VM_SIZE,21474836480)
endif

Важно наличие systemd-settings-disable-kill-user-processes.

 make APTCONF=/path/to/sisyphus-x86_64.conf BRANCH=sisyphus DEBUG=1 REPORT=1 STDOUT=1 KFLAVOURS=un-def  vm/systemd-iv.qcow2c

Копирую себе полученный образ и запускаю виртуалку

qemu-system-x86_64 -enable-kvm \
         -nographic -m 4G \
         -smp cpus=6 \
         -netdev user,id=eth0,hostfwd=tcp::2022-:22 \
         -net nic,netdev=eth0 \
         systemd-iv-20240221-x86_64.qcow2c

Полезен alias в .ssh/config:

Host    qg
        Hostname localhost
        Port 5022

girar

Беру свой форк https://git.altlinux.org/people/iv/packages/girar.git?a=shortlog;h=refs/heads/hacks , так как именно над ним планирую работать.

git clone -o iv -b hacks https://git.altlinux.org/people/iv/packages/girar.git
cd girar

Собираю

 gear-hsh --no-sisyphus-check

Закидываю girar-0.7-alt1.1.x86_64.rpm на VM и ставлю:

apt-get update
apt-get install girar-0.7-alt1.1.x86_64.rpm

Немного странного:

ln -s  /var/lib/girar/repo /

Настраиваем

Копируем шаблон конфигурации и правим:

cp /usr/share/doc/girar-0.7/conf/gb-sh-conf-site /usr/libexec/girar-builder/
vim /usr/libexec/girar-builder/gb-sh-conf-site 

Выставим

GB_USER_PREFIX=alt_
GB_LIST_OF_CHECKS_ALLOWED_TO_FAIL=

GB_APT_CACHE_LIMIT можно удалить, в GB_TRUST_GPG_NAMES допишем себя. Можно заодно в GB_REPO_RPMARGS весь payload заменить на 'w2T.xzdio', например.

Поправим и /etc/girar/repo/.default: допишем себя в TRUST_NAMES и SUPERUSERS.

GIRAR_TRUST_GPG_NAMES="incominger secondary alt-sisyphus-ports alt-p9-ports alt-p9 alt-sisyphus updates iv"
GIRAR_REPO_SUPERUSERS='iv'
GIRAR_ALLOW_SAME_NEVR=1

GIRAR_DEFAULT_REPO=test
GIRAR_DISABLE_ACL_NOTIFICATIONS=1


Включим и запустим proxy daemons:

systemctl enable --now girar-proxyd-acl
systemctl enable --now girar-proxyd-depot
systemctl enable --now girar-proxyd-repo


Будем создавать репозиторий по имени test.

Сгенерируем awaiter'у ключ, которым он будет подписывать собранные пакеты -- без пароля, RSA 4096:

su - awaiter
gpg --gen-key

Fingerprint полученного ключа нужно прописать в настройки girar-builder для репозитория. Создадим их:

# cat /usr/libexec/girar-builder/gb-sh-conf-test
GB_REPO_NAME=test
GB_REPO_REAL_NAME=sisyphus
GB_REPO_CODENAME="$(date +%s)"
GB_REPO_LABEL=Sisyphus
GB_ARCH="x86_64"
GB_REPO_UP_NAME=
GB_REPO_DOWN_NAME=
GB_REPO_REL_SUFF_MUST_NOT='*.M[4-9][0-9]*'
GB_REPO_REL_SUFF_MUST_HAVE=
GB_REPO_SIGNER="373EC112D73F5992955392817BFFEECFF2732FBE"

GB_ALLOW_SAME_NEVR=1
GB_SKIP_DEBUGINFO_INSTALL_CHECKS=yes


Настроим собирающую сторону:

apt-get install hasher

useradd builder0
hasher-useradd builder0

В /etc/hasher-priv/system:

prefix=~:/tmp
allow_ttydev=yes
allowed_mountpoints=/proc,/dev/pts,/dev/shm,/sys,/sys/fs/cgroup
allowed_devices=/dev/kvm
rlimit_hard_nproc=32768
rlimit_soft_nproc=16384

rlimit_hard_memlock=33554432
rlimit_soft_memlock=33554432

wlimit_time_elapsed=360000
wlimit_time_idle=360000

Перезапустите и включите hasher-privd.

Awaiter'у нужно сгенерировать ключ:

su - awaiter
ssh-keygen -t ed25519

Нужен alias специального вида в .ssh/config:

Host build-awaiter0-test-x86_64
        HostName localhost
        User builder0


Этот ключ нужно положить builder'у, например, от рута:

# cp /var/lib/girar/awaiter/.ssh/id_ed25519.pub /etc/openssh/authorized_keys/builder0

Проверим, и заодно примем host key:

su - awaiter
ssh build-awaiter0-test-x86_64

Пришла пора создать репозиторий. Для этого понадобятся какие-нибудь пакеты, причём желательно, чтобы они попали во все нужные Вам компоненты (добавлять компоненты в существующий репозиторий немного сложнее). Можно воспользоватся моим костылём, а точнее результатом его сборки, в качестве начального наполнения репозитория: скопируйте в виртуалку все rpm и (ВАЖНО) src.rpm тоже не забудьте; при этом (тоже важно) убедитесь, что в каталоге, передаваемом как начальное содержимое, нет дублей имён пакетов (в том числе симлинков вида ../../files/*/RPMS/*).

Превратим кучку пакетов в заготовку репозитория при помощи честно украденного у Глеба скрипта:

girar-create-girar-repo ./test-repo/ /repo/before/

Создадим репозиторий по имени test, для которого у нас уже есть конфиг и сборочный узел:

girar-clone-repo test /repo/before/

Заготовку можно удалить

rm -rf /repo/before/

awaiter и pender запускаются кроном

crontab -e -u awaiter

Запускаем команду:

USER=awaiter0 /usr/libexec/girar-builder/gb-toplevel-build test


crontab -e -u pender

И там команда

/usr/libexec/girar-builder/gb-toplevel-commit test

Создадим пользователя

Удобно хранить все ключи в одной папке:

mkdir ssh_keys

И закинем туда свой публичный ключ.

У нас нет gitery, поэтому нужен костыль

mkdir -p /people/iv

Можно создавать пользователя:

/usr/libexec/girar-admin/girar-admin user-add iv 'Ivan A. Melnikov' < ssh_keys/iv 

setquota на нас поругается, но это не важно.

Добавим пользователя в группу мейнтейнеров, чтобы он мог коммитить задачи:

/usr/libexec/girar-admin/girar-admin maintainer-add iv

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

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

В /usr/libexec/girar-builder/remote/gb-remote-plant можно подкинуть ещё репоизториев, чтобы они использовались при сборке и install check'ах.

То же самое стоит сделать с /usr/libexec/girar-builder/gb-task-repo-unmets, или выключить проверку на unmets.

Проверку на bad elf symbols в неполном репозитории скорее всего тоже придётся отключить

И поехали

Создайте и удалите задачу 1 -- это нужно для внутренних структур данных.

Трижды перезагрузитесь на удачу.

Начиная с задачи 2 можно пробовать собирать SRPMки.