Bug 35315

Summary: mikhailnov & system-autoupdate to ALT Linux
Product: Team Accounts Reporter: mikhailnov <mikhailnov>
Component: joinAssignee: Dmitry V. Levin <ldv>
Status: CLOSED FIXED QA Contact: Andrey Cherepanov <cas>
Severity: normal    
Priority: P3 CC: asy, glebfm, ldv, rider, zerg
Version: unspecified   
Hardware: all   
OS: Linux   
URL: http://www.altlinux.org/Team/Join/Secretary
Attachments:
Description Flags
public SSH key
none
public GPG key mikhailnov@altlinux.org
none
public SSH key 2
none
public SSH key 3 none

Description mikhailnov 2018-08-30 15:18:54 MSK
Хочу отправить в сизиф и поддерживать уже готовый пакет:
https://gitlab.com/mikhailnov/system-autoupdate/blob/master/system-autoupdate-ALT.spec

Псевдоним: mikhailnov
Желаемый псевдоним @altlinux.org: mikhailnov
Адрес пересылки почты: mikhailnov@dumalogiya.ru
Comment 1 mikhailnov 2018-08-30 15:19:23 MSK
Created attachment 7722 [details]
public SSH key
Comment 2 mikhailnov 2018-08-30 15:30:35 MSK
Created attachment 7723 [details]
public GPG key mikhailnov@altlinux.org
Comment 3 Sergey V Turchin 2018-08-30 15:55:42 MSK
C "control sudo public" вряд ли кто-то пропустит.

Большие %post-ы проще упаковать скриптами и убрать "AutoReq: no".
Тексты лучше не писать на экран, а упаковать в %doc.
Comment 4 Sergey V Turchin 2018-08-30 15:57:15 MSK
Скрипты от других дистрибутивов лучше удалить. Если они кому-то понадобятся, в исходниках почитает.
Comment 5 mikhailnov 2018-08-30 16:22:16 MSK
> C "control sudo public" вряд ли кто-то пропустит.
Ну если не пропустят, то значит пакета не будет. Я не буду заменять правила надежного и проверенного временем sudoers в несколько строк https://gitlab.com/mikhailnov/system-autoupdate/blob/master/etc/sudoers.d/system-autoupdate-polkit на огромные правила policykit на javascript, обрабатываемые через mozjs, только потому что в Альте такие права на /usr/bin/sudo. polkit'a вообще нет, например, на серверах, где я использую system-autoupdate.

> убрать "AutoReq: no"
Он поставлен специально. Например, чтобы не добавил в зависимости snapd, если он когда-нибудь будет опакечен. Это можно обойти, например, конструкцией типа SNAPD="$(which snap)"; "$snap", но это странное занятие, все зависимости, кроме системных типа /bin/sh, grep, gawk уже стоят. В целом я не знаю, нужен ли AutoReq. Раньше он был, потом убрал.

> Тексты лучше не писать на экран, а упаковать в %doc.
В Альте политика при установке пакета не активировать никакие сервисы, а здесь они активируются. В составе идут сервисы-заглушки https://access.redhat.com/solutions/1580343 , а активировать надо timer, а не service systemd, поэтому сам администратор системы, ставящий пакет, не справится. Поэтому выводим текст на экран, объясняющий, какие изменения внесены в систему.


> Большие %post-ы проще упаковать скриптами
Эти post-ы Альтоспецифичные, т.к. в иных дистрибутивах может быть иная политика автоактивирования сервисов и нет control. Директория /usr/lib/* не используется, а в имеющуюся /usr/share/system-autoupdate/ класть исполняемые скрипты не комильфо, сейчас в ней нет ничего исполняемого, все скрипты из нее сорсятся, а не выполняются. Можно вынести в отдельный скрипт и его сорсить из %post, но это лучше сделать в будущем, если буду опакечивать под другие RPM-дистрибутивы, т.к. тогда станет понятно, какие скрипты нужны для других дистрибутивов.

> Скрипты от других дистрибутивов лучше удалить. Если они кому-то понадобятся, в
исходниках почитает.
Готово: https://gitlab.com/mikhailnov/system-autoupdate/commit/0f741e4d06ca84150035cd7372b2a3a5a1ec6af5
Comment 6 mikhailnov 2018-08-30 16:25:29 MSK
Но если кто придумает, как малой кровью переделать sudoers в polkit, то можно будет избавиться от control sudo public.
Comment 7 Sergey Y. Afonin 2018-08-30 16:36:50 MSK
(In reply to comment #5)

> потому что в Альте такие права на /usr/bin/sudo. polkit'a вообще нет, 
> например, на серверах, где я использую system-autoupdate.

Пользователь с правами добавляется в группу wheel, и всё. Первый пользователь, добавляемый инсталлятором, в неё попадает автоматом кажется. Так что вполне пойдёт control sudo wheelonly, думаю.
Comment 8 Sergey V Turchin 2018-08-30 16:37:32 MSK
(В ответ на комментарий №5)
> Я не буду заменять
Не заменяйте, но "control sudo public" делать не надо.

> > убрать "AutoReq: no"
> Он поставлен специально. Например, чтобы не добавил в зависимости snapd, если
> он когда-нибудь будет опакечен. Это можно обойти, например, конструкцией типа
> SNAPD="$(which snap)"; "$snap", но это странное занятие
Нормальное.

>, все зависимости, кроме
> системных типа /bin/sh, grep, gawk уже стоят.
Проект более не развивается? Лучше довериться автомату, подчищая лишнее.

> В целом я не знаю, нужен ли AutoReq. Раньше он был, потом убрал.
Нужен.

> > Тексты лучше не писать на экран, а упаковать в %doc.
> выводим текст на экран, объясняющий, какие изменения внесены
> в систему.
Тогда сделайте копию объяснений в документации, идущей с пакетом.

> > Большие %post-ы проще упаковать скриптами
> Эти post-ы Альтоспецифичные,
> т.к. в иных дистрибутивах может быть иная политика
Тут как раз Альт, а не "иной дистрибутив".

> автоактивирования сервисов и нет control. Директория /usr/lib/* не
> используется, а в имеющуюся /usr/share/system-autoupdate/ класть исполняемые
> скрипты не комильфо
Комильфо.
Comment 9 Sergey V Turchin 2018-08-30 16:50:02 MSK
(В ответ на комментарий №7)
> пойдёт control sudo wheelonly, думаю.
Нет. Вообще дергать control не надо в %post .

Как и сервисы так, как сделано.
Вполне сгодиться
%post
%post_service name
%preun
%preun_service name
и
файл в /lib/systemd/system-preset/
Comment 10 Sergey Y. Afonin 2018-08-30 17:01:21 MSK
(In reply to comment #9)

> > пойдёт control sudo wheelonly, думаю.

> Нет. Вообще дергать control не надо в %post .

Я как-то коряво пояснил, да... Я имел ввиду, что пользователя в группу wheel добавлять, которому это разрешено. sudo wheelonly - это же по-умолчанию в ALT:
https://packages.altlinux.org/en/Sisyphus/srpms/sudo/spec

%post
%post_control -s wheelonly sudo
Comment 11 Sergey V Turchin 2018-08-30 17:07:16 MSK
(В ответ на комментарий №10)
> добавлять, которому это разрешено. sudo wheelonly - это же по-умолчанию в ALT:
Относительно.

Лучше поискать способы не менять настройки системы.
control все-таки больше для админа и за него менять настройки системы не очень корректно.
Comment 12 Sergey V Turchin 2018-08-30 17:11:06 MSK
Представьте, что устанавливается дистрибутив или обновляется много пакетов, из которых 10 пакетов дергают `control sudo` в разные стороны.
Comment 13 mikhailnov 2018-08-30 17:16:40 MSK
> Пользователь с правами добавляется в группу wheel, и всё.
Речь идет о запуске sudo от nologin-пользователя polkitd. Без дергания control
он не может запустить /usr/bin/sudo. Я понимаю, что так делать не надо, но по-другому никак.

> Не заменяйте, но "control sudo public" делать не надо
Без этого после перезагрузки графически кнопки выключения/перезагрузки системы
в XFCE/Mate/LXDE/... будут заблокированы навечно.

> Тогда сделайте копию объяснений в документации, идущей с пакетом.
А можно пример документации, как она оформляется? И есть ли
кросс-дистрибутивные решения? 

> Проект более не развивается? Лучше довериться автомату, подчищая лишнее.
Включил AutoReq.
https://gitlab.com/mikhailnov/system-autoupdate/commit/c1b3f77c35681586316a5b826218028f71e7852c
. Но это взрывоопасно.

> Комильфо.
Не очень :)

> Тут как раз Альт, а не "иной дистрибутив".
А чем мешают большие скрипты непосредственно в спеке, кроме невозможности их
удобно проверить через shellcheck ?

> %post_service name
%postun_service надо или оно автоматом?
Comment 14 mikhailnov 2018-08-30 17:19:13 MSK
Предлагаете сделать
%post_control -s public sudo ?
Comment 15 mikhailnov 2018-08-30 17:23:38 MSK
sudo от nologin-пользователя polkitd вызывается здесь:
https://gitlab.com/mikhailnov/system-autoupdate/blob/master/usr/share/polkit-1/rules.d/90-system-autoupdate.rules
Comment 16 mikhailnov 2018-08-30 17:29:14 MSK
notify_all_shutdown_error - https://gitlab.com/mikhailnov/system-autoupdate/blob/master/usr/share/system-autoupdate/common-funcs.sh#L146

check_shutdown - https://gitlab.com/mikhailnov/system-autoupdate/blob/master/usr/share/system-autoupdate/common-funcs.sh#L187

check_shutdown нужно от root, чтобы снять блокировку выключения системы, если сервис обновления по какой-либо причине находится в состоянии failed
Comment 17 mikhailnov 2018-08-30 17:31:23 MSK
Наверняка кто-нибудь предложит написать демона, с которым нужно общаться без sudo, но это лишняя нагрузка на систему и все-таки потенциально бОльшая дыра в безопасности.
Comment 18 mikhailnov 2018-08-30 17:40:46 MSK
Еще положить все просто в %doc мало, никто же не будет читать, а хочется проинформировать пользователя, какие сервисы активированы и что происходит.
Comment 19 mikhailnov 2018-08-30 19:33:52 MSK
Anton Farygin <rider@altlinux.org> согласился стать ментором. Добавлен в CC.
Comment 20 Sergey V Turchin 2018-08-31 10:19:33 MSK
(В ответ на комментарий №18)
> Еще положить все просто в %doc мало, никто же не будет читать, а хочется
> проинформировать пользователя, какие сервисы активированы и что происходит.
Проинформируйте, что ему надо почитать /какие/сервисы/активированы.txt вместо вывода на экран портянки, которую еще надо не потерять, если ее вообще увидят.
Comment 21 Sergey V Turchin 2018-08-31 10:24:52 MSK
(В ответ на комментарий №13)
> > Пользователь с правами добавляется в группу wheel, и всё.
> Речь идет о запуске sudo от nologin-пользователя polkitd. Без дергания control
> он не может запустить /usr/bin/sudo. Я понимаю, что так делать не надо, но
> по-другому никак.
Т.к. все без этого живут, то способ точно есть.

> > Тогда сделайте копию объяснений в документации, идущей с пакетом.
> А можно пример документации, как она оформляется? И есть ли
> кросс-дистрибутивные решения? 
Для начал хоть README.txt :-)
 
> > Тут как раз Альт, а не "иной дистрибутив".
> А чем мешают большие скрипты непосредственно в спеке, кроме невозможности их
> удобно проверить через shellcheck ?
Возможностью удобно прочитать всё по отдельности.

> > %post_service name
> %postun_service надо или оно автоматом?
Раз такой отсутствует, то, как-минимум, в нем нет необходимости.
Comment 22 mikhailnov 2018-08-31 12:50:04 MSK
Хорошо, попробую сделать.

> Т.к. все без этого живут, то способ точно есть.
Никто просто не пробовал запускать sudo из правила polkit
Comment 23 mikhailnov 2018-08-31 12:50:44 MSK
Собственно, начиная с версии 0.106 у polkit новый формат правил, раньше он работал от root, а не polkitd.
Comment 24 Sergey V Turchin 2018-08-31 12:59:16 MSK
(В ответ на комментарий №22)
> > Т.к. все без этого живут, то способ точно есть.
> Никто просто не пробовал запускать sudo из правила polkit
Ответ вполне может быть тот же. Я не углублялся, поэтому по сути сказать не могу.
Comment 25 mikhailnov 2018-08-31 19:15:33 MSK
По результатам обсуждения с asy@ пришел к выводу, что нужно сделать так:

* control sudo public убрать из %post
* убрать автоматически включаемые сервисы systemd путем убирания макросов %systemd*/%service*
* enabled и disabled в /lib/systemd/system-preset/*.preset оставить
* внутри самого system-autoupdate сделать команду enable, которая будет:
* * прописана в описании пакета
* * информация о ней будет выводится кратко в %post при первой установке пакета
* * делать systemctl enable system-autoupdate.timer system-autoupdate-sanity.service
* * записывать состояние control sudo
* * делать control sudo public
* команда disable будет делать:
* * systemctl disable system-autoupdate.timer system-autoupdate-sanity.service
* * control sudo $прежнее_состояние

Таким образом, администратору будет достаточно сделать `system-autoupdate-runner enavle` для включения автообновления и `system-autoupdate-runner disable для выключения`.

В таком виде подойдет для сизифа?

===============================

Также я хочу сделать более короткую команду, чем system-autoupdate-runner. Поэтому вопрос, как лучше сделать:
* симлинк /usr/bin/saur --> /usr/sbin/system-autoupdate-runner
* или alias saur="system-autoupdate-runner" в /etc/profile.d/* ?
Comment 26 Sergey V Turchin 2018-09-04 11:03:36 MSK
(В ответ на комментарий №25)
> * симлинк /usr/bin/saur --> /usr/sbin/system-autoupdate-runner
Если без параметров, то смысла алиас делать никакого нет. К тому же он shell-озависим. Главное, чтоб имя было достаточно уникальное на всякий.

P.S.
sauron и sauroff ;-)
Comment 28 Anton Farygin 2018-09-12 08:06:12 MSK
поле Packager можно (и лучше) не заполнять - его заполнят автоматически.

мне не нравится странная и не очень нужная логика определения локали в %post скрипте. Лучше вывести сообщение на английском. Тем более что оно просто попадёт в лог и его прочитают с вероятностью, стремящейся к нулю.

в preun скрипте не обязательно обрабатывать остальные случаи, можно просто игнорировать. Посмотрите в других пакетах - там запись очень короткая и читаемая.


И для чистоты спека лучше зачистить от ненужных комментариев:
(я про комментарии макросов, например __requires_exclude_from )

Удаление файлов лучше из спека перенести в Makefile, добавив туда угадав дистрибутива с возможностью указания логики вручную.

Пакет без email-а @altlinux.org в changelog не пройдёт нашу сборочницу.

Для Секретаря:
кандидат в ментейнеры готов к переходу на следующую стадию.
Comment 29 mikhailnov 2018-09-12 10:54:58 MSK
В %preun так специально: если и только если пакет удаляется полностью, а не обновляется, вызываем saur disable, который снимает блокировку выключения (а вдруг она не снята до ужаления?) и systemctl disable все сервисы, из-за чего нет смысла в %preun_service.
Comment 30 mikhailnov 2018-09-12 10:59:27 MSK
А если при обновлении изменится унит systemd, в текущем виде будет сделан systemctl daemon-reload?
Comment 31 mikhailnov 2018-09-12 15:08:26 MSK
Упс.
cat /usr/sbinpreun_service:
"$SYSTEMCTL" --no-reload -q disable "$1.service"
А мне надо .timer, помимо .service
Обойдемся без %preun_service и повесим багу: https://bugzilla.altlinux.org/show_bug.cgi?id=35388
Изначальный вариант с %systemd_preun таких проблем не имел, собственно, но он уже не имеет смысла.

Небольшие правки в спек внес: https://gitlab.com/mikhailnov/system-autoupdate/compare/689594be...master
Comment 32 mikhailnov 2018-09-17 12:25:46 MSK
Пинг) Готов еще один пакет:
https://gitlab.com/mikhailnov/pulsejoin
Comment 33 Dmitry V. Levin 2018-09-18 00:45:29 MSK
(In reply to comment #1)
> Created an attachment (id=7722) [details]
> public SSH key

Согласно https://www.altlinux.org/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D0%BC%D0%B8_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0 рекомендуется использовать ключ большей длины (ED25519 либо RSA размером не менее 4K).
Comment 34 mikhailnov 2018-09-18 09:17:02 MSK
Created attachment 7758 [details]
public SSH key 2
Comment 35 mikhailnov 2018-09-18 09:17:34 MSK
Новый ключ имеет длину 4096 и фразу-пароль.
Comment 36 Anton Farygin 2018-09-20 14:38:37 MSK
Дима, кандидату сразу можно дать доступ в git и к сборочнице для тестовой сборки.
Comment 38 Anton Farygin 2018-09-27 07:38:01 MSK
2ldv: ментейнер готов к переходу на следующий шаг.
Comment 39 Dmitry V. Levin 2018-09-29 12:40:47 MSK
(In reply to comment #35)
> Новый ключ имеет длину 4096 и фразу-пароль.

$ ssh-keygen -l -f mikhailnov.ssh
4069 SHA256:iOnC8zdn1DMyUiinKzRRmFjqVXIGzMBffO0zBAndrYA user@alt-p8-edu (RSA)

Изивините, но 4069 < 4096.
Comment 40 Dmitry V. Levin 2018-09-29 12:41:12 MSK
Адрес для пересылки создан,
T/J/S -> 2.2.
Comment 41 mikhailnov 2018-09-29 13:33:42 MSK
Created attachment 7793 [details]
public SSH key 3
Comment 42 Dmitry V. Levin 2018-09-29 15:35:35 MSK
ssh ключ на gitery.alt и gyle.alt зарегистрирован,
T/J/S -> 3.0.
Comment 43 mikhailnov 2018-09-29 17:28:25 MSK
Не могу запустить сборку, т.к. публичный GPG-ключ не добавлен.

$ gpg --list-keys
/home/user/.gnupg/pubring.gpg
-----------------------------
pub   4096R/55E84CE1 2016-11-01
uid                  Mikhail Novosyolov <mikhailnov@altlinux.org>
uid                  Mikhail Novosyolov <mikhailnov@dumalogiya.ru>
sub   4096R/0B6AFF61 2016-11-01


$ ssh girar build packages/system-autoupdate.git 1.13-alt1.1
new task #213793: owner=mikhailnov repo=sisyphus
gpg: WARNING: unsafe ownership on homedir `/usr/lib/alt-gpgkeys'
gpg: Signature made Sat Sep 29 14:23:08 2018 UTC
gpg:                using RSA key 0xC49BD06755E84CE1
gpg: Can't check signature: public key not found
task add: 1.13-alt1.1: tag signature verification failure
removing task #213793 ... done

http://git.altlinux.org/people/mikhailnov/packages/?p=system-autoupdate.git;a=tag;h=refs/tags/1.13-alt1.1
Comment 44 Anton Farygin 2018-09-29 18:23:35 MSK
кандидата можно перевести на следующую стадию.
Comment 45 mikhailnov 2018-10-23 14:01:23 MSK
Напоминаю про доступ к сборочнице.
Comment 46 Dmitry V. Levin 2018-10-30 00:58:11 MSK
Пакет alt-gpgkeys обновлён.

T/J/S -> 4.0.
Comment 47 Anton Farygin 2019-05-14 22:47:36 MSK
Кандидат освоил наши технологии сборки и готов к полноценному ментейнерству. Прошу завершить его приём в члены Team.
Comment 48 Dmitry V. Levin 2019-05-28 19:23:18 MSK
Адрес подписан на devel@.
Пользователь добавлен в группу мантейнеров.

Желаю удачного мантейнерства!
Comment 49 mikhailnov 2019-05-28 23:47:10 MSK
Всем спасибо, в т.ч. за пожелания!