On Sun, May 17, 2020 at 08:16:25PM +0300, Vladimir D. Seleznev wrote: > On Sun, May 17, 2020 at 07:46:17PM +0300, Arseny Maslennikov wrote: > > On Sun, May 17, 2020 at 07:06:48PM +0300, Vladimir D. Seleznev wrote: > > > On Sun, May 17, 2020 at 06:53:40PM +0300, Arseny Maslennikov wrote: > > > > On Sun, May 17, 2020 at 05:40:55PM +0300, Vladimir D. Seleznev wrote: > > > > > Hi! > > > > > > > > > > Сейчас для пакета prosody создаётся пользователь и группа с именем > > > > > _prosody, в то время как апстрим по-умолчанию ожидает имя prosody, и это > > > > > в пакете никак не учитывается. Эту проблему можно решить или созданием > > > > > для пакета пользователя и группы ожидаемого имени, или правкой > > > > > исходников. > > > > > > > > > > У обоих способов решения проблемы есть минусы: в первом случае теряется > > > > > обратная совместимость, и пользователям надо вручную предпринять > > > > > действия для переезда, во втором надо следить, чтобы ничего не > > > > > разъехалось. > > > > > > > > > > В задании #251769 некоторые исправления работоспособности prosody, а > > > > > заодно создание пользователя и группы с именем, ожидаемые апстримом, и > > > > > громким сообщением при обновлении пакета о необходимости проверить > > > > > конфигурацию. > > > > > > > > > > Я не уверен, что это хороший способ поправить ситуацию, и не уверен, > > > > > какой из двух хуже. Если у кого-то есть идеи лучше или возражения — > > > > > озвучьте. Если возражений не будет — отправлю это задание в Сизиф в > > > > > среду. > > > > > > > > > > > > > Бегло посмотрел > > > > http://git.altlinux.org/gears/p/prosody.git?p=prosody.git;a=blob;f=prosody/util/startup.lua;h=24ed60267882d8ce44b00fa2292d295ecb891504;hb=59600a897bda36bd2dbda45037d592c6f6a8f561#l446 > > > > > > > > Упоминаются prosody_user, prosody_group на строчках 465-466. У нас по > > > > крайней мере в сервис-юните написано "запускать/останавливать при помощи > > > > /usr/bin/prosodyctl", т. е. эта функция используется. Может быть, > > > > в конфигурации по умолчанию можно это указать? > > > > Если есть другие места, которые не ходят к prosody_{user,group}, это баг > > в апстриме, который надо репортить. > > Если нельзя, то... > > Прочитай код: они ходят к^W^W берут значение из prosody_{user,group}, а > если они пустые — используют константу "prosody", объявленную на месте. Я-то прочитал то, на что указал, а ты, к сожалению, невнимательно читаешь. Эту константу и предлагается сделать опцией этапа сборки, которую в альт-пакете мы выставим как следует. > > > > > > > Вот тут > > > http://git.altlinux.org/gears/p/prosody.git?p=prosody.git;a=blob;f=prosody/util/startup.lua;h=24ed60267882d8ce44b00fa2292d295ecb891504;hb=59600a897bda36bd2dbda45037d592c6f6a8f561#l465 > > > и вот тут > > > http://git.altlinux.org/gears/p/prosody.git?p=prosody.git;a=blob;f=prosody/prosodyctl;h=982b102ee71bc26d9ca5671cd5bfe057e9aee81b;hb=59600a897bda36bd2dbda45037d592c6f6a8f561#l703 > > > принимается решение об использовании пользователя prosody. Уже два > > > независимых места. > > > > Оба в prosodyctl. > > Нет, оба в разных местах. > Одно из которых вызывается только из prosodyctl, о чём любезно и написали по ссылке на util/startup.lua. > > > Можно, конечно, их запатчить, и следить за всеми > > > появлениями таких мест, но я не уверен, что это оправдано. > > > > ...можно патч им отправить на эти места, на configure, на makefile. Ладно, чего препираться. Вариант патча внизу, take care. Я в луа ни бум-бум, прошу больно не бить. > > http://git.altlinux.org/gears/p/prosody.git?p=prosody.git;a=blob;f=prosody/HACKERS;h=cae98091e1fb630d9fec9d24543d4d006743ac5a;hb=59600a897bda36bd2dbda45037d592c6f6a8f561 > > https://prosody.im/discuss#mailing_list > > Спросить, достаточно ли этого. > > > > У них уже есть прецеденты рерайта /usr/bin/prosodyctl и > > /usr/bin/prosody, см. makefile. > > > > > > > > Но всё ещё пока задание не отправлено в Сизиф. > > > > ./configure \ --install-as='_prosody' \ <...> -------8<------------ diff --git a/configure b/configure index 2b58efe5..87e5a636 100755 --- a/configure +++ b/configure @@ -19,6 +19,7 @@ OPENSSL_LIB="crypto" CC="gcc" LD="gcc" RUNWITH="lua" +DAEMON_USER_GROUP="prosody" EXCERTS="yes" PRNG= PRNGLIBS= @@ -56,6 +57,8 @@ Configure $APP_NAME prior to building. or \$LUA_DIR/bin if --with-lua is used. --runwith=BINARY What Lua binary to set as runtime environment. Default is $RUNWITH +--install-as=USER What user and primary group $APP_NAME should be installed and run as. + Default is "prosody" --with-lua-include=DIR You can also specify Lua's includes dir. Default is \$LUA_DIR/include --with-lua-lib=DIR You can also specify Lua's libraries dir. @@ -239,6 +242,9 @@ do RUNWITH="$value" RUNWITH_SET=yes ;; + --install-as) + DAEMON_USER_GROUP="$value" + ;; --no-example-certs) EXCERTS= ;; @@ -576,6 +582,7 @@ LDFLAGS=$LDFLAGS CC=$CC LD=$LD RUNWITH=$RUNWITH +DAEMON_USER_GROUP=$DAEMON_USER_GROUP EXCERTS=$EXCERTS RANDOM=$PRNG RANDOM_LIBS=$PRNGLIBS diff --git a/makefile b/makefile index 0b1c8788..47e551d7 100644 --- a/makefile +++ b/makefile @@ -89,6 +89,7 @@ prosody.install: prosody prosodyctl.install: prosodyctl sed "1s| lua$$| $(RUNWITH)|; \ + s|^CFG_DAEMON_USER_GROUP=.*;$$|CFG_DAEMON_USER_GROUP='$(DAEMON_USER_GROUP)';|; \ s|^CFG_SOURCEDIR=.*;$$|CFG_SOURCEDIR='$(INSTALLEDSOURCE)';|; \ s|^CFG_CONFIGDIR=.*;$$|CFG_CONFIGDIR='$(INSTALLEDCONFIG)';|; \ s|^CFG_DATADIR=.*;$$|CFG_DATADIR='$(INSTALLEDDATA)';|; \ diff --git a/prosodyctl b/prosodyctl index 82b5faaa..a3b327d2 100755 --- a/prosodyctl +++ b/prosodyctl @@ -10,6 +10,7 @@ -- prosodyctl - command-line controller for Prosody XMPP server -- Will be modified by configure script if run -- +CFG_DAEMON_USER_GROUP=CFG_DAEMON_USER_GROUP or "prosody"; CFG_SOURCEDIR=CFG_SOURCEDIR or os.getenv("PROSODY_SRCDIR"); CFG_CONFIGDIR=CFG_CONFIGDIR or os.getenv("PROSODY_CFGDIR"); CFG_PLUGINDIR=CFG_PLUGINDIR or os.getenv("PROSODY_PLUGINDIR"); @@ -739,7 +740,7 @@ function cert_commands.import(arg) end local owner, group; if pposix.getuid() == 0 then -- We need root to change ownership - owner = configmanager.get("*", "prosody_user") or "prosody"; + owner = configmanager.get("*", "prosody_user") or CFG_DAEMON_USER_GROUP; group = configmanager.get("*", "prosody_group") or owner; end local cm = require "core.certmanager"; diff --git a/util/startup.lua b/util/startup.lua index 580410c9..dc5f0d3a 100644 --- a/util/startup.lua +++ b/util/startup.lua @@ -1,5 +1,5 @@ -- Ignore the CFG_* variables --- luacheck: ignore 113/CFG_CONFIGDIR 113/CFG_SOURCEDIR 113/CFG_DATADIR 113/CFG_PLUGINDIR +-- luacheck: ignore 113/CFG_DAEMON_USER_GROUP 113/CFG_CONFIGDIR 113/CFG_SOURCEDIR 113/CFG_DATADIR 113/CFG_PLUGINDIR local startup = {}; local prosody = { events = require "util.events".new() }; @@ -416,7 +416,7 @@ function startup.switch_user() if arg_root then table.remove(arg, 1); end if prosody.current_uid == 0 and config.get("*", "run_as_root") ~= true and not arg_root then -- We haz root! - local desired_user = config.get("*", "prosody_user") or "prosody"; + local desired_user = config.get("*", "prosody_user") or CFG_DAEMON_USER_GROUP; local desired_group = config.get("*", "prosody_group") or desired_user; local ok, err = pposix.setgid(desired_group); if ok then