Bug 15268

Summary: При установке на чистую систему не создаётся пользователь postgres
Product: Sisyphus Reporter: Sergey N. Yatskevich <syatskevich>
Component: postgresql-commonAssignee: Alexei Takaseev <taf>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: mike, taf
Version: unstable   
Hardware: all   
OS: Linux   

Description Sergey N. Yatskevich 2008-04-08 15:21:22 MSD
В postgresql8.3-server%prein не создаётся (при необходимости) пользователь и
группа postgres и из-за этого установка проходит со сбоями и в дальнейшем
система не работает. Приходится вручную создавать пользователя и группу и
назначать соответствующие права на каталоги, либо переустанавливать пакет после
создания пользователя.
Comment 1 Michael Bochkaryov 2008-04-08 16:12:17 MSD
Пакет postgresql8.3-server требует по зависимостям postgresql-common, который в
секции %pre как раз и создает как пользователя, так и группу postgres.

Проверено на свежесгенерированной VE, баг не воспроизводится, пользователь и
группа успешно создаются.

В принципе, можно функциональность продублировать, но я не уверен, что это стоит
делать.
Comment 2 Sergey N. Yatskevich 2008-04-08 17:26:41 MSD
Проблема в том, что Вы пытаетесь создать группу с предопределённым номером 46 и
если он занят, то создание группы обламывается, а с ним и создание пользователя.
Что у меня и произошло. Насколько необходимо создавать группу и пользователя
именно с номером 46? Может лучше пусть система выбирает?
Comment 3 Sergey N. Yatskevich 2008-04-08 17:29:35 MSD
Наверное я не очень точно сказал - на чистую. Имелось в виду - на систему, на
которой не было пользователя postgres. А так там много чего установлено.
Comment 4 Michael Bochkaryov 2008-04-08 19:33:42 MSD
(In reply to comment #2)
> Проблема в том, что Вы пытаетесь создать группу с предопределённым номером 46 и
> если он занят, то создание группы обламывается, а с ним и создание пользователя.

Есть такое дело, но таки не в этом пакете, а в postgresql-common, который пока
что  не мой, а mithraen@ :)

Думаю, багу стоит перевесить на postgresql-common, что и делаю.
Comment 5 Michael Bochkaryov 2008-04-08 19:40:05 MSD
2mithraen: а фиксированное выставление UID/GID 46 при создании пользователя
postgres было по какой-то важной причине выставлено?
Comment 6 Vladimir V. Kamarzin 2008-04-09 09:37:22 MSD
Так делать не надо. Если хочется фиксированный uid/gid, то нужно оформить FR на
пакет setup, чтобы оно было сразу искаропки.
Comment 7 Denis Smirnov 2008-04-14 02:55:16 MSD
Такс... как убить сразу двух зайцев?
В смысле попытаться все-таки создавать с фиксированым номером, но если он занят
-- с любым другим?
Comment 8 Vladimir V. Kamarzin 2008-04-14 09:12:35 MSD
Ну видимо нечто вроде

getent group 46 || /usr/sbin/groupadd -r -f %pg_group >/dev/null 2>&1 ||:
getent passwd 46 || /usr/sbin/useradd -g %pg_group -c 'pgsql' \
        -d %pg_home -s /dev/null -r %pg_user >/dev/null 2>&1 ||:
Comment 9 Sergey N. Yatskevich 2008-04-14 12:51:13 MSD
Может всё же кто-нибудь знающий объяснит мне,зачем нужно неприменно
регистрировать группу и пользователя под id 46, если и без этого можно обойтись?
Comment 10 Michael Bochkaryov 2008-04-14 19:19:44 MSD
(In reply to comment #9)
> Может всё же кто-нибудь знающий объяснит мне,зачем нужно неприменно
> регистрировать группу и пользователя под id 46, если и без этого можно обойтись?

А уж если учесть, что на сегодня в пакете setup группа и пользователь postgres
присутствуют в файле /etc/passwd именно под UID/GID 46, то по новой можно
добавлять и без жесткой привязки.

Если же кто-то вручную вынес системного пользователя - значит у него были на то
причины.

В общем, до появления внятного полиси на эту тему я бы предложил убрать в
postgresql-common явное задание UID и GID.
Comment 11 Michael Shigorin 2008-04-14 19:33:39 MSD
Хм, я бы предложил как раз оставить.

Аргументация -- сервис под этим псевдопользователем работает с данными и если
есть возможность сохранить совместимость численных uid/gid между инсталяциями --
это надо сделать.

Мишка, я как-то об это конкретные шишки набил, натягивая бэкап поверх новенького
VE template.  Хорошо, что сам заметил дивные права в результате.

Если кто-то вынес системного пользователя -- он ССЗБ и пусть продолжает
кувыркаться как хочет.
Comment 12 Sergey N. Yatskevich 2008-04-14 20:51:58 MSD
Тогда надо вообще убрать команду создания пользователя и группы, зачем, если они
и так есть? Вместо этого поставить проверку наличия нужного пользователя и
группы и злобно ругаться при их отсутствии, отказываясь от всяких гарантий
(будет хотя бы понятно что ты ССЗБ).
Comment 13 Michael Shigorin 2008-04-14 21:45:26 MSD
Потому что в системе, которая растёт от древнего setup, может не быть этих
пользователей-групп (они отдыхают в /etc/{passwd,shadow}.rpmnew в таком разе).

Серёж, я по этим граблям походил уже достаточно, чтобы сказать именно то, что
сказал: делать -- надо, если есть зарегистрированные в setup uid/gid --
пользоваться следует именно ими.

См. тж. драфт/обсуждение здесь: http://freesource.info/wiki/AltLinux/Policy/UidGid
Comment 14 Michael Bochkaryov 2008-04-15 11:31:36 MSD
(In reply to comment #11)
> Мишка, я как-то об это конкретные шишки набил, натягивая бэкап поверх новенького
> VE template.  Хорошо, что сам заметил дивные права в результате.

Миш, хитровымученных вариантов может быть много. В данном случае проблема
усугубляется еще и несовместимостью данных между разными версиями PostgreSQL.

Миграция данных между _разными_ системами - это вобще отдельная тема, которую
лучше отдельно обсуждать.

> Если кто-то вынес системного пользователя -- он ССЗБ и пусть продолжает
> кувыркаться как хочет.

Ну, резервное копирование с привязкой к UID/GID и без переноса данных о
пользователях/группах - это тоже повод для самостоятельного кувыркания :)

JIMHO, будет вполне достаточно такого варианта:
1. В дефолтном /etc/passwd есть пользователь с фиксированными UID/GID (уже).
2. При установке пакета производится попытка создать пользователя, но уже без
привязки к UID/GID (нужно убрать привязку).

Кроме того, это надо решать в рамках полиси для всех пакетов, создающих
псевдопользователей. А иначе мы просто видоизменим бардак, а не решим проблему.
Comment 15 Michael Shigorin 2008-04-15 15:39:53 MSD
(In reply to comment #14)
> JIMHO, будет вполне достаточно такого варианта:
> 1. В дефолтном /etc/passwd есть пользователь с фиксированными UID/GID (уже).

2a. При установке пакета производится попытка создать пользователя с ними же

> 2. При установке пакета производится попытка создать пользователя, но уже без
> привязки к UID/GID (нужно убрать привязку).
> Кроме того, это надо решать в рамках полиси для всех пакетов, создающих
> псевдопользователей. А иначе мы просто видоизменим бардак, а не решим проблему.

Так вот в полиси я всерьёз собираюсь стоять на том, что uid/gid для псевдо,
имеющих данные, _надо_ фиксировать и пытаться создавать именно одинаковые.  С
фолбэком на какие попало (не взрываться же).
Comment 16 Denis Smirnov 2008-04-17 13:50:52 MSD
Так сейчас что делать будем?
Comment 17 Michael Shigorin 2008-04-17 14:29:57 MSD
(In reply to comment #16)
> Так сейчас что делать будем?
Предлагаю: создать_группу_и_пользователя_с_46 || создать_каких_выйдет
Comment 18 Michael Bochkaryov 2008-04-18 14:44:09 MSD
(In reply to comment #17)
> > Так сейчас что делать будем?
> Предлагаю: создать_группу_и_пользователя_с_46 || создать_каких_выйдет

Вполне нормальное решение, пока с полиси не определились.
Comment 19 Denis Smirnov 2008-04-19 00:27:34 MSD
Шлите патчи :)
Comment 20 Repository Robot 2009-10-31 12:24:54 MSK
postgresql-common-1.0-alt6 -> sisyphus:

* Sat Oct 31 2009 Denis Smirnov <mithraen@altlinux> 1.0-alt6

- fix user/group creation (ALT#15268)