Bug 38345 - hasher: src.rpms belong to user_bN if --number N
Summary: hasher: src.rpms belong to user_bN if --number N
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: hasher (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Dmitry V. Levin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-04-09 17:12 MSK by viy
Modified: 2020-04-10 23:28 MSK (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description viy 2020-04-09 17:12:08 MSK
Если явно указывать --number=N (и, возможно, не дефолтный путь к hasher dir)
то не отрабатывет chown <user> для полученных пакетов в SRPMS.hasher

у меня для --number=1 пакеты принадлежат igor_b1
hasher1/repo/SRPMS.hasher $ l
итого 3196
-rw-r--r-- 1 igor_b1 igor_b1 2395014 апр  9 17:04 node-mocha-7.1.0-alt1.src.rpm
-rw-r--r-- 1 igor_b1 igor_b1  876267 апр  9 15:13 perl-CPAN-2.27-alt1.src.rpm

в то время как без --number по дефолтному пути пакеты принадлежат igor
hasher/repo/SRPMS.hasher $ l
итого 34556
-rw-r--r-- 1 igor igor_b2    34545 янв 13 00:12 autorepo-scripts-0.618-alt1.src.rpm
-rw-r--r-- 1 igor igor_b     58334 апр  6 17:53 girar-nmu-2.011.0-alt1.src.rpm
-rw-r--r-- 1 igor igor_b4    67372 мар 30 22:37 perl-RPM-Source-Convert-0.682-alt1.src.rpm
-rw-r--r-- 1 igor igor_b1    24151 мар 26 20:53 perl-Source-Repository-Mass-0.432-alt1.src.rpm
-rw-r--r-- 1 igor igor_b    138278 апр  8 10:28 python-module-pybluez-0.22-alt1.src.rpm
Comment 1 Gleb F-Malinovskiy 2020-04-09 21:14:32 MSK
(Ответ для viy на комментарий #0)
> Если явно указывать --number=N (и, возможно, не дефолтный путь к hasher dir)
> то не отрабатывет chown <user> для полученных пакетов в SRPMS.hasher

Вы уверены, что вся разница не в том, что при перемещении из чрута
* owner сохраняется если chroot и repo на одной файловой системе
* owner не сохраняется если chroot и repo на разных файловых системах
?
Comment 2 viy 2020-04-09 21:29:07 MSK
(Ответ для Gleb F-Malinovskiy на комментарий #1)
> (Ответ для viy на комментарий #0)
> > Если явно указывать --number=N (и, возможно, не дефолтный путь к hasher dir)
> > то не отрабатывет chown <user> для полученных пакетов в SRPMS.hasher
> 
> Вы уверены, что вся разница не в том, что при перемещении из чрута
> * owner сохраняется если chroot и repo на одной файловой системе
> * owner не сохраняется если chroot и repo на разных файловых системах
> ?

возможно. похоже. для --number=N у меня и chroot и repo в $TMPDIR,
тогда как без --number= у меня repo через симлинк в другой файловой системе.

соответственно, без --number= я могу подписывать пакеты сразу,
а с --number= приходится делать sudo chown igor *.src.rpm.
Хотелось бы, чтобы chown igor_bN -> igor делал hasher автоматически.
Comment 3 Dmitry V. Levin 2020-04-09 21:38:27 MSK
(In reply to viy from comment #2)
> возможно. похоже. для --number=N у меня и chroot и repo в $TMPDIR,
> тогда как без --number= у меня repo через симлинк в другой файловой системе.
> 
> соответственно, без --number= я могу подписывать пакеты сразу,
> а с --number= приходится делать sudo chown igor *.src.rpm.
> Хотелось бы, чтобы chown igor_bN -> igor делал hasher автоматически.

Мне кажется, что вам нужно запускать скрипт наподобие
http://git.altlinux.org/people/ldv/packages/?p=girar.git;a=blob;f=ga/scripts/ga-x-repo-copyself
на все "чужие" файлы.
Comment 4 viy 2020-04-09 22:17:00 MSK
(Ответ для Dmitry V. Levin на комментарий #3)
> > а с --number= приходится делать sudo chown igor *.src.rpm.
> > Хотелось бы, чтобы chown igor_bN -> igor делал hasher автоматически.
> 
> Мне кажется, что вам нужно запускать скрипт наподобие
> http://git.altlinux.org/people/ldv/packages/?p=girar.git;a=blob;f=ga/scripts/
> ga-x-repo-copyself
> на все "чужие" файлы.

Не совсем понятно. sudo chown igor *.src.rpm мне хватает,
если я буду запускать что-либо наподобие ga-x-repo-copyself,
проблема останется - по умолчанию файлы "чужие",
чтобы их сделать "своими", нужно руками запустить скрипт,
не важно, sudo chown igor *.src.rpm или ga-x-repo-copyself.

нельзя ли копирование из chroot в repo вызывать в hasher от основного пользователя? возможно, как опция?
Comment 5 Gleb F-Malinovskiy 2020-04-09 22:30:28 MSK
(Ответ для viy на комментарий #4)
> (Ответ для Dmitry V. Levin на комментарий #3)
> > > а с --number= приходится делать sudo chown igor *.src.rpm.
> > > Хотелось бы, чтобы chown igor_bN -> igor делал hasher автоматически.
> > 
> > Мне кажется, что вам нужно запускать скрипт наподобие
> > http://git.altlinux.org/people/ldv/packages/?p=girar.git;a=blob;f=ga/scripts/
> > ga-x-repo-copyself
> > на все "чужие" файлы.
> 
> Не совсем понятно. sudo chown igor *.src.rpm мне хватает,
> если я буду запускать что-либо наподобие ga-x-repo-copyself,
> проблема останется - по умолчанию файлы "чужие",
> чтобы их сделать "своими", нужно руками запустить скрипт,
> не важно, sudo chown igor *.src.rpm или ga-x-repo-copyself.

Ну ведь лучше же copyself, чем sudo.  Возможно, вам будет удобнее просто всегда делать repo на другой файловой системе чтобы избежать этого эффекта совсем.

> нельзя ли копирование из chroot в repo вызывать в hasher от основного
> пользователя? возможно, как опция?

Оно и вызывается от основного пользователя.  Файлы, которыйе принадлежат саттелиту просто перемещаются по файловой системе.  Да, их можно было бы всегда копировать чтобы права поменялись, но тогда мы добавим лишние действия и увеличим нагрузку на файловую систему.  Чаще всего эти права не очень важны.
Comment 6 Dmitry V. Levin 2020-04-09 22:34:21 MSK
(In reply to viy from comment #4)
> (Ответ для Dmitry V. Levin на комментарий #3)
> > > а с --number= приходится делать sudo chown igor *.src.rpm.
> > > Хотелось бы, чтобы chown igor_bN -> igor делал hasher автоматически.
> > 
> > Мне кажется, что вам нужно запускать скрипт наподобие
> > http://git.altlinux.org/people/ldv/packages/?p=girar.git;a=blob;f=ga/scripts/
> > ga-x-repo-copyself
> > на все "чужие" файлы.
> 
> Не совсем понятно. sudo chown igor *.src.rpm мне хватает,
> если я буду запускать что-либо наподобие ga-x-repo-copyself,
> проблема останется - по умолчанию файлы "чужие",
> чтобы их сделать "своими", нужно руками запустить скрипт,
> не важно, sudo chown igor *.src.rpm или ga-x-repo-copyself.
> 
> нельзя ли копирование из chroot в repo вызывать в hasher от основного
> пользователя? возможно, как опция?

hasher делает mv.  В тех случаях, когда этот mv оказывается в пределах одной файловой системы, mv делает rename, в противном случае это copy.

Если вам всегда нужно copy, сделайте, пожалуйста, этот copy самостоятельно.
Comment 7 viy 2020-04-10 21:12:47 MSK
(Ответ для Dmitry V. Levin на комментарий #6)
> Если вам всегда нужно copy, сделайте, пожалуйста, этот copy самостоятельно.

текущее поведение удобно пользователям gear, менее удобно тем, кто заливает srpm, но не критично, обходится лишней командой.

Разработчики сложных систем напарываются на эту фичу и объезжают ее скриптом.
к примеру, в girar, как понимаю, столкнулись когда то с этой проблемой, объехали ее с помощью доп. скрипта ga-x-repo-copyself и забыли.

Я сам когда-то годы назад прописал в ~/.bashrc при старте создание симлинка из $TMP/hasher/repo в каталог в ~, и все работало. Но последнее время стал активно пользоваться параллельным запуском в $TMP/hasherN, где проблема вылезла опять,
я подумал сначала, что это регрессия в hasher. Спасибо за разъяснение.

Это выглядит, как плохое usability. Поведение по умолчанию удобно не всем.

Я готов добавить опцию командной строки и переменную config для переключения
поведения у тех, кому это нужно.
Будет ли в таком случае мой патч принят?
Comment 8 Dmitry V. Levin 2020-04-10 22:03:58 MSK
(In reply to viy from comment #7)
> (Ответ для Dmitry V. Levin на комментарий #6)
> > Если вам всегда нужно copy, сделайте, пожалуйста, этот copy самостоятельно.
> 
> текущее поведение удобно пользователям gear, менее удобно тем, кто заливает
> srpm, но не критично, обходится лишней командой.
> 
> Разработчики сложных систем напарываются на эту фичу и объезжают ее скриптом.
> к примеру, в girar, как понимаю, столкнулись когда то с этой проблемой,
> объехали ее с помощью доп. скрипта ga-x-repo-copyself и забыли.

Нет, ga-x-repo-copyself используется для того, чтобы передать права владения файлами (всего репозитория) от одного пользователя к другому, к hasher это никакого отношения не имеет.  Подобная задача возникает время от времени, поэтому я привёл ссылку на уже существующий инструмент.

> Я сам когда-то годы назад прописал в ~/.bashrc при старте создание симлинка
> из $TMP/hasher/repo в каталог в ~, и все работало. Но последнее время стал
> активно пользоваться параллельным запуском в $TMP/hasherN, где проблема
> вылезла опять,
> я подумал сначала, что это регрессия в hasher. Спасибо за разъяснение.
> 
> Это выглядит, как плохое usability. Поведение по умолчанию удобно не всем.
> 
> Я готов добавить опцию командной строки и переменную config для переключения
> поведения у тех, кому это нужно.
> Будет ли в таком случае мой патч принят?

Патч на mv?  Думаю, что апстрим откажет с аргументацией: если вам нужен cp, то вызывайте cp.  В hasher нужен mv.  Если вам действительно по какой-то загадочной причине нужно передавать владение файлами, которые изготовил hasher, от одного пользователя другому, то почему этот механизм нужно встраивать именно в hasher?  Объясните, я не понимаю.
Comment 9 viy 2020-04-10 22:17:04 MSK
(Ответ для Dmitry V. Levin на комментарий #8)
> встраивать именно в hasher?  Объясните, я не понимаю.

Удобство. 
пример моего workflow, чиню srpm пакеты. 
$ rpm -i /path/to/srpm
$ vim *.spec
$ hashertarbuild -bs *.spec
Written ~/RPM/SRPMS/name-version.tar
hsh $TMP/hasher1 <options> ~/RPM/SRPMS/name-version.tar
...
hasher создал из ~/RPM/SRPMS/name-version.tar
 $TMP/hasher1/repo/SRPMS.hasher/name-version.srpm
заливать в Сизиф $TMP/hasher1/repo/SRPMS.hasher/name-version.srpm
сразу не могу, файл не имеет прав на запись.
rpm --resign не проходит.
меняю sudo chown igor $TMP/hasher1/repo/SRPMS.hasher/*
заливаю girar-build-srpm $TMP/hasher1/repo/SRPMS.hasher/*

Хотелось бы упросить workflow.
возможно, альтернативно было не менять пользователя, а выдавать на src.rpm права 
664? это менее радикально, а для моих целей тоже подойдет - я себя раз впишу в группы пользователей user_bN.
Comment 10 Dmitry V. Levin 2020-04-10 23:28:09 MSK
(In reply to viy from comment #9)
> (Ответ для Dmitry V. Levin на комментарий #8)
> > встраивать именно в hasher?  Объясните, я не понимаю.
> 
> Удобство. 
> пример моего workflow, чиню srpm пакеты. 
> $ rpm -i /path/to/srpm
> $ vim *.spec
> $ hashertarbuild -bs *.spec
> Written ~/RPM/SRPMS/name-version.tar
> hsh $TMP/hasher1 <options> ~/RPM/SRPMS/name-version.tar
> ...
> hasher создал из ~/RPM/SRPMS/name-version.tar
>  $TMP/hasher1/repo/SRPMS.hasher/name-version.srpm
> заливать в Сизиф $TMP/hasher1/repo/SRPMS.hasher/name-version.srpm
> сразу не могу, файл не имеет прав на запись.
> rpm --resign не проходит.
> меняю sudo chown igor $TMP/hasher1/repo/SRPMS.hasher/*
> заливаю girar-build-srpm $TMP/hasher1/repo/SRPMS.hasher/*
> 
> Хотелось бы упросить workflow.
> возможно, альтернативно было не менять пользователя, а выдавать на src.rpm
> права 
> 664? это менее радикально, а для моих целей тоже подойдет - я себя раз впишу
> в группы пользователей user_bN.

Спасибо, что подтвердили моё предположение.
Оставьте, пожалуйста, hasher в покое.

Доработайте или напишите обёртку для rpm --resign, который всегда открывает файл на запись, даже когда не пишет в него.