ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] обновления пакетов с поддержкой systemd
@ 2011-05-17  3:12 Alexey Shabalin
  2011-05-17  3:21 ` Dmitry V. Levin
  0 siblings, 1 reply; 13+ messages in thread
From: Alexey Shabalin @ 2011-05-17  3:12 UTC (permalink / raw)
  To: ALT Linux Team development discussions

Всем привет.
Возможно я кого-то ввел в заблужение (сам ошибался) по поводу
использования родных для systemd файлов.

Вопрос из FAQ:
Q: I have a native systemd service file and a SysV init script
installed which share the same basename, e.g.
/lib/systemd/system/foobar.service vs. /etc/init.d/foobar -- which one
wins?

A: If both files are available the native unit file always takes
precedence and the SysV init script is ignored, regardless whether
either is enabled or disabled. Note that a SysV service that is
enabled but overriden by a native service does not have the effect
that the native service would be enabled, too. Enabling of native and
SysV services is completely independent. Or in other words: you cannot
enable a native service by enabling a SysV service by the same name,
and if a SysV service is enabled but a the respective native service
is not, this will not have the effect that the SysV script is
executed.

То есть, если мы раньше имели включеный сервис /etc/init.d/foobar, а
теперь подложили в rpm-пакет  /lib/systemd/system/foobar.service, то
этот сервис будет выключен и после перезагрузки не стартует.
Надо запустить что-то типа
if chkconfig foobar ; then
  chkconfig foobar on
fi
(если сервис включен, включить его ещё раз - в этот раз уже с
перенаправлением на systemd)
Предполагается, что chkconfig из people/shaba/systemd -
модифицированный для перенаправления команд к systemd.

либо
if chkconfig --no-redirect foobar ; then  # не перенаправлять на systemd
  systemctl enable foobar.sevice         # можно использовать сразу
systemctl, без перенаправления из chkconfig
fi


В fedore во всех пакетах, где добавляют поддержку нативных сервисов
добавляют тригер типа:
%triggerun -- httpd < 0.47.11-1
if /sbin/chkconfig httpd ; then
        /bin/systemctl enable httpd.service >/dev/null 2>&1 || :
fi

или

%triggerun -- avahi < 0.6.28-1
 if /sbin/chkconfig --level 5 avahi-daemon ; then
          /bin/systemctl --no-reload enable avahi-daemon.service
>/dev/null 2>&1 || :
 fi

Как лучше сделать у нас?
Я пока придумал только модифицировать post_service:

--- post_service.def	2011-03-17 01:41:42.000000000 +0300
+++ post_service	2011-05-17 07:02:27.640147135 +0400
@@ -1,5 +1,21 @@
 #!/bin/sh -e

+SYSTEMCTL=/bin/systemctl
+SYSTEMD_SERVICE_DIR=/lib/systemd/system
+SYSTEMD_CGROUP_DIR=/sys/fs/cgroup/systemd
+
+systemd_status=
+systemd_is_active()
+{
+	if [ -z "$systemd_status" ]; then
+		[ -x "$SYSTEMCTL" -a \
+		  -d "$SYSTEMD_CGROUP_DIR" ] &&
+		mountpoint -q "$SYSTEMD_CGROUP_DIR"
+		systemd_status=$?
+	fi
+	return $systemd_status
+}
+
 if ! [ "$RPM_INSTALL_ARG1" -ge 1 ] 2>/dev/null; then
 	echo "post_service: invalid or undefined variable: RPM_INSTALL_ARG1" >&2
 	exit 1
@@ -14,5 +30,9 @@
 	/sbin/chkconfig --add "$1"
 else
 	/sbin/chkconfig "$1" resetpriorities ||:
+	[ -f "$SYSTEMD_SERVICE_DIR/$1.service" ] &&
+		systemd_is_active &&
+		/sbin/chkconfig --no-redirect "$1" &&
+		/sbin/chkconfig "$1" on
 	/sbin/service "$1" condrestart ||:
 fi

Или это можно в какой-нибудь filetrigger сделать?
Как лучше?

-- 
Alexey Shabalin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [devel] обновления пакетов с поддержкой systemd
  2011-05-17  3:12 [devel] обновления пакетов с поддержкой systemd Alexey Shabalin
@ 2011-05-17  3:21 ` Dmitry V. Levin
  2011-05-17  3:42   ` Alexey Shabalin
  0 siblings, 1 reply; 13+ messages in thread
From: Dmitry V. Levin @ 2011-05-17  3:21 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 1023 bytes --]

On Tue, May 17, 2011 at 07:12:07AM +0400, Alexey Shabalin wrote:
[...]
> Надо запустить что-то типа
> if chkconfig foobar ; then
>   chkconfig foobar on
> fi
> (если сервис включен, включить его ещё раз - в этот раз уже с
> перенаправлением на systemd)
[...]
> Я пока придумал только модифицировать post_service:
> 
> --- post_service.def	2011-03-17 01:41:42.000000000 +0300
> +++ post_service	2011-05-17 07:02:27.640147135 +0400
[...]
> @@ -14,5 +30,9 @@
>  	/sbin/chkconfig --add "$1"
>  else
>  	/sbin/chkconfig "$1" resetpriorities ||:
> +	[ -f "$SYSTEMD_SERVICE_DIR/$1.service" ] &&
> +		systemd_is_active &&
> +		/sbin/chkconfig --no-redirect "$1" &&
> +		/sbin/chkconfig "$1" on
>  	/sbin/service "$1" condrestart ||:
>  fi

Я бы предпочел, чтобы либо chkconfig resetpriorities выполнял эту
синхронизацию, либо появился еще один режим в chkconfig для синхронизации.
Вариант с resetpriorities предпочтительнее, поскольку тогда не придется
трогать пользователей chkconfig'а.


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [devel] обновления пакетов с поддержкой systemd
  2011-05-17  3:21 ` Dmitry V. Levin
@ 2011-05-17  3:42   ` Alexey Shabalin
  2011-05-17 12:35     ` Alexey Shabalin
  0 siblings, 1 reply; 13+ messages in thread
From: Alexey Shabalin @ 2011-05-17  3:42 UTC (permalink / raw)
  To: ALT Linux Team development discussions

17 мая 2011 г. 7:21 пользователь Dmitry V. Levin  написал:
> On Tue, May 17, 2011 at 07:12:07AM +0400, Alexey Shabalin wrote:
> [...]
>> Надо запустить что-то типа
>> if chkconfig foobar ; then
>>   chkconfig foobar on
>> fi
>> (если сервис включен, включить его ещё раз - в этот раз уже с
>> перенаправлением на systemd)
> [...]
>> Я пока придумал только модифицировать post_service:
>>
>> --- post_service.def  2011-03-17 01:41:42.000000000 +0300
>> +++ post_service      2011-05-17 07:02:27.640147135 +0400
> [...]
>> @@ -14,5 +30,9 @@
>>       /sbin/chkconfig --add "$1"
>>  else
>>       /sbin/chkconfig "$1" resetpriorities ||:
>> +     [ -f "$SYSTEMD_SERVICE_DIR/$1.service" ] &&
>> +             systemd_is_active &&
>> +             /sbin/chkconfig --no-redirect "$1" &&
>> +             /sbin/chkconfig "$1" on
>>       /sbin/service "$1" condrestart ||:
>>  fi
>
> Я бы предпочел, чтобы либо chkconfig resetpriorities выполнял эту
> синхронизацию, либо появился еще один режим в chkconfig для синхронизации.
> Вариант с resetpriorities предпочтительнее, поскольку тогда не придется
> трогать пользователей chkconfig'а.

Боюсь, что я этого не осилю. Максимум, что могу - сделать всегда
включение сервиса при resetpriorities :)

-- 
Alexey Shabalin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [devel] обновления пакетов с поддержкой systemd
  2011-05-17  3:42   ` Alexey Shabalin
@ 2011-05-17 12:35     ` Alexey Shabalin
  2011-05-17 13:59       ` Dmitry V. Levin
  0 siblings, 1 reply; 13+ messages in thread
From: Alexey Shabalin @ 2011-05-17 12:35 UTC (permalink / raw)
  To: ALT Linux Team development discussions

17 мая 2011 г. 7:42 пользователь Alexey Shabalin <a.shabalin@gmail.com> написал:
> 17 мая 2011 г. 7:21 пользователь Dmitry V. Levin  написал:
>> On Tue, May 17, 2011 at 07:12:07AM +0400, Alexey Shabalin wrote:
>> [...]
>>> Надо запустить что-то типа
>>> if chkconfig foobar ; then
>>>   chkconfig foobar on
>>> fi
>>> (если сервис включен, включить его ещё раз - в этот раз уже с
>>> перенаправлением на systemd)
>> [...]
>>> Я пока придумал только модифицировать post_service:
>>>
>>> --- post_service.def  2011-03-17 01:41:42.000000000 +0300
>>> +++ post_service      2011-05-17 07:02:27.640147135 +0400
>> [...]
>>> @@ -14,5 +30,9 @@
>>>       /sbin/chkconfig --add "$1"
>>>  else
>>>       /sbin/chkconfig "$1" resetpriorities ||:
>>> +     [ -f "$SYSTEMD_SERVICE_DIR/$1.service" ] &&
>>> +             systemd_is_active &&
>>> +             /sbin/chkconfig --no-redirect "$1" &&
>>> +             /sbin/chkconfig "$1" on
>>>       /sbin/service "$1" condrestart ||:
>>>  fi
>>
>> Я бы предпочел, чтобы либо chkconfig resetpriorities выполнял эту
>> синхронизацию, либо появился еще один режим в chkconfig для синхронизации.
>> Вариант с resetpriorities предпочтительнее, поскольку тогда не придется
>> трогать пользователей chkconfig'а.
>
> Боюсь, что я этого не осилю. Максимум, что могу - сделать всегда
> включение сервиса при resetpriorities :)

В общем у меня получилось следущее:

	    return setService(name, type, where, 0);
         } else if (!strcmp(state, "reset"))
 	    return setService(name, type, where, -1);
-	else if (!strcmp(state, "resetpriorities"))
+	else if (!strcmp(state, "resetpriorities")) {
+	    if (!noRedirectItem && isOn(name, level)) {
+		forwardSystemd(name, type, "enable");
+	    }
 	    return setService(name, type, where, -2);
+	}
 	else
 	    usage(EXIT_FAILURE);
     }

Если используется systemd и если раньше сервис был включён, то при
запуске с resetpriorities ещё запускается systemctl enable для
сервиса.
Так устроит?

-- 
Alexey Shabalin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [devel] обновления пакетов с поддержкой systemd
  2011-05-17 12:35     ` Alexey Shabalin
@ 2011-05-17 13:59       ` Dmitry V. Levin
  2011-05-21 12:42         ` Alexey Shabalin
  2012-01-24 21:19         ` Dmitry V. Levin
  0 siblings, 2 replies; 13+ messages in thread
From: Dmitry V. Levin @ 2011-05-17 13:59 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 2266 bytes --]

On Tue, May 17, 2011 at 04:35:13PM +0400, Alexey Shabalin wrote:
> 17 мая 2011 г. 7:42 пользователь Alexey Shabalin <a.shabalin@gmail.com> написал:
> > 17 мая 2011 г. 7:21 пользователь Dmitry V. Levin  написал:
> >> On Tue, May 17, 2011 at 07:12:07AM +0400, Alexey Shabalin wrote:
> >> [...]
> >>> Надо запустить что-то типа
> >>> if chkconfig foobar ; then
> >>>   chkconfig foobar on
> >>> fi
> >>> (если сервис включен, включить его ещё раз - в этот раз уже с
> >>> перенаправлением на systemd)
> >> [...]
> >>> Я пока придумал только модифицировать post_service:
> >>>
> >>> --- post_service.def  2011-03-17 01:41:42.000000000 +0300
> >>> +++ post_service      2011-05-17 07:02:27.640147135 +0400
> >> [...]
> >>> @@ -14,5 +30,9 @@
> >>>       /sbin/chkconfig --add "$1"
> >>>  else
> >>>       /sbin/chkconfig "$1" resetpriorities ||:
> >>> +     [ -f "$SYSTEMD_SERVICE_DIR/$1.service" ] &&
> >>> +             systemd_is_active &&
> >>> +             /sbin/chkconfig --no-redirect "$1" &&
> >>> +             /sbin/chkconfig "$1" on
> >>>       /sbin/service "$1" condrestart ||:
> >>>  fi
> >>
> >> Я бы предпочел, чтобы либо chkconfig resetpriorities выполнял эту
> >> синхронизацию, либо появился еще один режим в chkconfig для синхронизации.
> >> Вариант с resetpriorities предпочтительнее, поскольку тогда не придется
> >> трогать пользователей chkconfig'а.
> >
> > Боюсь, что я этого не осилю. Максимум, что могу - сделать всегда
> > включение сервиса при resetpriorities :)
> 
> В общем у меня получилось следущее:
> 
> 	    return setService(name, type, where, 0);
>          } else if (!strcmp(state, "reset"))
>  	    return setService(name, type, where, -1);
> -	else if (!strcmp(state, "resetpriorities"))
> +	else if (!strcmp(state, "resetpriorities")) {
> +	    if (!noRedirectItem && isOn(name, level)) {
> +		forwardSystemd(name, type, "enable");
> +	    }
>  	    return setService(name, type, where, -2);
> +	}
>  	else
>  	    usage(EXIT_FAILURE);
>      }
> 
> Если используется systemd и если раньше сервис был включён, то при
> запуске с resetpriorities ещё запускается systemctl enable для
> сервиса.
> Так устроит?

Судя по описанию, да.

P.S. код я не смотрел.


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [devel] обновления пакетов с поддержкой systemd
  2011-05-17 13:59       ` Dmitry V. Levin
@ 2011-05-21 12:42         ` Alexey Shabalin
  2011-05-27 17:11           ` Dmitry V. Levin
  2012-01-24 21:19         ` Dmitry V. Levin
  1 sibling, 1 reply; 13+ messages in thread
From: Alexey Shabalin @ 2011-05-21 12:42 UTC (permalink / raw)
  To: ALT Linux Team development discussions

>> >>> Надо запустить что-то типа
>> >>> if chkconfig foobar ; then
>> >>>   chkconfig foobar on
>> >>> fi
>> >>> (если сервис включен, включить его ещё раз - в этот раз уже с
>> >>> перенаправлением на systemd)
>> >> [...]
>> >>> Я пока придумал только модифицировать post_service:
>> >>>
>> >>> --- post_service.def  2011-03-17 01:41:42.000000000 +0300
>> >>> +++ post_service      2011-05-17 07:02:27.640147135 +0400
>> >> [...]
>> >>> @@ -14,5 +30,9 @@
>> >>>       /sbin/chkconfig --add "$1"
>> >>>  else
>> >>>       /sbin/chkconfig "$1" resetpriorities ||:
>> >>> +     [ -f "$SYSTEMD_SERVICE_DIR/$1.service" ] &&
>> >>> +             systemd_is_active &&
>> >>> +             /sbin/chkconfig --no-redirect "$1" &&
>> >>> +             /sbin/chkconfig "$1" on
>> >>>       /sbin/service "$1" condrestart ||:
>> >>>  fi
>> >>
>> >> Я бы предпочел, чтобы либо chkconfig resetpriorities выполнял эту
>> >> синхронизацию, либо появился еще один режим в chkconfig для синхронизации.
>> >> Вариант с resetpriorities предпочтительнее, поскольку тогда не придется
>> >> трогать пользователей chkconfig'а.
>> >
>> > Боюсь, что я этого не осилю. Максимум, что могу - сделать всегда
>> > включение сервиса при resetpriorities :)
>>
>> В общем у меня получилось следущее:
>>
>>           return setService(name, type, where, 0);
>>          } else if (!strcmp(state, "reset"))
>>           return setService(name, type, where, -1);
>> -     else if (!strcmp(state, "resetpriorities"))
>> +     else if (!strcmp(state, "resetpriorities")) {
>> +         if (!noRedirectItem && isOn(name, level)) {
>> +             forwardSystemd(name, type, "enable");
>> +         }
>>           return setService(name, type, where, -2);
>> +     }
>>       else
>>           usage(EXIT_FAILURE);
>>      }
>>
>> Если используется systemd и если раньше сервис был включён, то при
>> запуске с resetpriorities ещё запускается systemctl enable для
>> сервиса.
>> Так устроит?
>
> Судя по описанию, да.
>
> P.S. код я не смотрел.

Чёрт, с этим исправлением возникает другая проблема.
В ALTLinux много имён init-скриптов не соответствуют названиям из upstream.
Например udev -> udevd,  bluetooth -> bluetoothd.service и т.п.
(добавляется d в конце имени).
Для работы с systemd на такие имена сделаны симлинки
# ls -l /lib/systemd/system/udevd.service
lrwxrwxrwx 1 root root 12 Май 21 17:39
/lib/systemd/system/udevd.service -> udev.service
[root@shabalin-nb ~]# ls -l /lib/systemd/system/bluetoothd.service
lrwxrwxrwx 1 root root 17 Май 21 17:39
/lib/systemd/system/bluetoothd.service -> bluetooth.service

Это работает  для start|stop (systemctl start|stop foo.service или
service foo start|stop ),
но не работает для enable|disable ( systemctk enable|disable
foo.service или chkconfig foo enable|disable)
Ругается что это symlink и хочет правильное имя.

Как это объезжать?
- привести имена init-скриптов к апстримному виду
- привести имена .service файлов к ALTLinux виду
- научить systemd делать enable|disable для симлинков (а симлинк может
быть и на /dev/null - для systemd это нормальный способ выключить или
замаскировать сервис).

-- 
Alexey Shabalin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [devel] обновления пакетов с поддержкой systemd
  2011-05-21 12:42         ` Alexey Shabalin
@ 2011-05-27 17:11           ` Dmitry V. Levin
  2011-05-30 13:10             ` Alexey Shabalin
                               ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Dmitry V. Levin @ 2011-05-27 17:11 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 1830 bytes --]

On Sat, May 21, 2011 at 04:42:31PM +0400, Alexey Shabalin wrote:
> Чёрт, с этим исправлением возникает другая проблема.
> В ALTLinux много имён init-скриптов не соответствуют названиям из upstream.
> Например udev -> udevd,  bluetooth -> bluetoothd.service и т.п.
> (добавляется d в конце имени).

Вопрос, эти названия из upstream существуют в виде init-скриптов, или в
каком-то ином виде?  Например, если апстрим реализует некий демон
SERVICEd, то init-скрипт у нас с высокой вероятностью будет называться
SERVICEd а не SERVICE.  Просьба прояснить картину.

> Для работы с systemd на такие имена сделаны симлинки
> # ls -l /lib/systemd/system/udevd.service
> lrwxrwxrwx 1 root root 12 Май 21 17:39
> /lib/systemd/system/udevd.service -> udev.service
> [root@shabalin-nb ~]# ls -l /lib/systemd/system/bluetoothd.service
> lrwxrwxrwx 1 root root 17 Май 21 17:39
> /lib/systemd/system/bluetoothd.service -> bluetooth.service
> 
> Это работает  для start|stop (systemctl start|stop foo.service или
> service foo start|stop ),
> но не работает для enable|disable ( systemctk enable|disable
> foo.service или chkconfig foo enable|disable)
> Ругается что это symlink и хочет правильное имя.
> 
> Как это объезжать?
> - привести имена init-скриптов к апстримному виду

В этом случае сломаются обновление пакетов и привычки у людей.

> - привести имена .service файлов к ALTLinux виду

В этом случае может ухудшиться переносимость .service-файлов.

Если идти путем переименования, то придется рассматривать каждый случай
в отдельности.

> - научить systemd делать enable|disable для симлинков (а симлинк может
> быть и на /dev/null - для systemd это нормальный способ выключить или
> замаскировать сервис).

Если симлинк ведет на /dev/null, то как ему можно сделать enable|disable?


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [devel] обновления пакетов с поддержкой systemd
  2011-05-27 17:11           ` Dmitry V. Levin
@ 2011-05-30 13:10             ` Alexey Shabalin
  2011-05-30 14:22             ` Alexey Shabalin
  2011-06-10 18:49             ` Alexey Shabalin
  2 siblings, 0 replies; 13+ messages in thread
From: Alexey Shabalin @ 2011-05-30 13:10 UTC (permalink / raw)
  To: ALT Linux Team development discussions

27 мая 2011 г. 21:11 пользователь Dmitry V. Levin написал:
> On Sat, May 21, 2011 at 04:42:31PM +0400, Alexey Shabalin wrote:
>> Чёрт, с этим исправлением возникает другая проблема.
>> В ALTLinux много имён init-скриптов не соответствуют названиям из upstream.
>> Например udev -> udevd,  bluetooth -> bluetoothd.service и т.п.
>> (добавляется d в конце имени).
>
> Вопрос, эти названия из upstream существуют в виде init-скриптов, или в
> каком-то ином виде?  Например, если апстрим реализует некий демон
> SERVICEd, то init-скрипт у нас с высокой вероятностью будет называться
> SERVICEd а не SERVICE.  Просьба прояснить картину.

В виде init-скриптов для RedHat.  Да и другие дистрибутивы стараются
держать имена сервисов аналогичными с RedHat.
Ну и systemd делался изначально для федоры с оглядкой на имена
сервисов в федоре.
В .service файлах зависимости указываются по именам сервисов, а сервис
может быть как .service файл для systemd, так и init-скрит.

>> Для работы с systemd на такие имена сделаны симлинки
>> # ls -l /lib/systemd/system/udevd.service
>> lrwxrwxrwx 1 root root 12 Май 21 17:39
>> /lib/systemd/system/udevd.service -> udev.service
>> [root@shabalin-nb ~]# ls -l /lib/systemd/system/bluetoothd.service
>> lrwxrwxrwx 1 root root 17 Май 21 17:39
>> /lib/systemd/system/bluetoothd.service -> bluetooth.service
>>
>> Это работает  для start|stop (systemctl start|stop foo.service или
>> service foo start|stop ),
>> но не работает для enable|disable ( systemctk enable|disable
>> foo.service или chkconfig foo enable|disable)
>> Ругается что это symlink и хочет правильное имя.
>>
>> Как это объезжать?
>> - привести имена init-скриптов к апстримному виду
>
> В этом случае сломаются обновление пакетов и привычки у людей.
Для обновления можно использовать тригеры.
И возможно этот путь самый реалистичный.

>> - привести имена .service файлов к ALTLinux виду
>
> В этом случае может ухудшиться переносимость .service-файлов.
Да, придётся всё отслеживать. Можно в пакет добавлять
Provides/Requires типа systemd(foo).

> Если идти путем переименования, то придется рассматривать каждый случай
> в отдельности.
>
>> - научить systemd делать enable|disable для симлинков (а симлинк может
>> быть и на /dev/null - для systemd это нормальный способ выключить или
>> замаскировать сервис).
>
> Если симлинк ведет на /dev/null, то как ему можно сделать enable|disable?
не важно, можно ли сделать enable|disable на симлинк /dev/null, важно
что при start|stop ничего происходить не будет.
А сейчас enable|disable с любыми симлинками запрещены. Поэтому,
например, невохможно коректно обновить udev. post скрипт обламывется и
в системе остаётся два udev.

-- 
Alexey Shabalin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [devel] обновления пакетов с поддержкой systemd
  2011-05-27 17:11           ` Dmitry V. Levin
  2011-05-30 13:10             ` Alexey Shabalin
@ 2011-05-30 14:22             ` Alexey Shabalin
  2011-06-10 18:54               ` Alexey Shabalin
  2011-06-10 18:49             ` Alexey Shabalin
  2 siblings, 1 reply; 13+ messages in thread
From: Alexey Shabalin @ 2011-05-30 14:22 UTC (permalink / raw)
  To: ALT Linux Team development discussions

27 мая 2011 г. 21:11 пользователь Dmitry V. Levin написал:

> Если идти путем переименования, то придется рассматривать каждый случай
> в отдельности.
Всё равно придётся рассматривать каждый случай отдельно.
Например, пакет udev несёт в себе все нужные симлинки для systemd, и
для него не надо делать enable|disable.
Если сервис обязательный для работы (как udev), он содержит симлинки в
/lib/systemd/system/multi-user.target.wants (или в другом target).
Если сервис не обязательный, то enable|disable создаёт|удаляет
симлинки в /etc/systemd/system/multi-user.target.wants (или в другом
target).

-- 
Alexey Shabalin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [devel] обновления пакетов с поддержкой systemd
  2011-05-27 17:11           ` Dmitry V. Levin
  2011-05-30 13:10             ` Alexey Shabalin
  2011-05-30 14:22             ` Alexey Shabalin
@ 2011-06-10 18:49             ` Alexey Shabalin
  2011-08-11 11:36               ` Alexey Shabalin
  2 siblings, 1 reply; 13+ messages in thread
From: Alexey Shabalin @ 2011-06-10 18:49 UTC (permalink / raw)
  To: ALT Linux Team development discussions

27 мая 2011 г. 21:11 пользователь Dmitry V. Levin написал:
> On Sat, May 21, 2011 at 04:42:31PM +0400, Alexey Shabalin wrote:
>> Чёрт, с этим исправлением возникает другая проблема.
>> В ALTLinux много имён init-скриптов не соответствуют названиям из upstream.
>> Например udev -> udevd,  bluetooth -> bluetoothd.service и т.п.
>> (добавляется d в конце имени).
>
> Вопрос, эти названия из upstream существуют в виде init-скриптов, или в
> каком-то ином виде?  Например, если апстрим реализует некий демон
> SERVICEd, то init-скрипт у нас с высокой вероятностью будет называться
> SERVICEd а не SERVICE.  Просьба прояснить картину.
>
>> Для работы с systemd на такие имена сделаны симлинки
>> # ls -l /lib/systemd/system/udevd.service
>> lrwxrwxrwx 1 root root 12 Май 21 17:39
>> /lib/systemd/system/udevd.service -> udev.service
>> [root@shabalin-nb ~]# ls -l /lib/systemd/system/bluetoothd.service
>> lrwxrwxrwx 1 root root 17 Май 21 17:39
>> /lib/systemd/system/bluetoothd.service -> bluetooth.service
>>
>> Это работает  для start|stop (systemctl start|stop foo.service или
>> service foo start|stop ),
>> но не работает для enable|disable ( systemctk enable|disable
>> foo.service или chkconfig foo enable|disable)
>> Ругается что это symlink и хочет правильное имя.
>>
>> Как это объезжать?
>> - привести имена init-скриптов к апстримному виду
>
> В этом случае сломаются обновление пакетов и привычки у людей.
>
>> - привести имена .service файлов к ALTLinux виду
>
> В этом случае может ухудшиться переносимость .service-файлов.
>
> Если идти путем переименования, то придется рассматривать каждый случай
> в отдельности.
>
>> - научить systemd делать enable|disable для симлинков (а симлинк может
>> быть и на /dev/null - для systemd это нормальный способ выключить или
>> замаскировать сервис).

в версии 28-alt3 я убрал ограничение на симлинки. Теперь можно делать
enable|disable на симлинки.
start|stop можно было делать и раньше.
Экспериментировал с bluetoothd.service - вроде все нормально.
Даже работает, если включать bluetoothd.service, а выключать уже
bluetooth.service - выдаёт предупреждение, но ошибок нет.

> Если симлинк ведет на /dev/null, то как ему можно сделать enable|disable?
про симлинки на /dev/null можно не беспокоится, ни start, ни enable
для них не работает.

-- 
Alexey Shabalin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [devel] обновления пакетов с поддержкой systemd
  2011-05-30 14:22             ` Alexey Shabalin
@ 2011-06-10 18:54               ` Alexey Shabalin
  0 siblings, 0 replies; 13+ messages in thread
From: Alexey Shabalin @ 2011-06-10 18:54 UTC (permalink / raw)
  To: ALT Linux Team development discussions

30 мая 2011 г. 18:22 пользователь Alexey Shabalin написал:
> 27 мая 2011 г. 21:11 пользователь Dmitry V. Levin написал:
>
>> Если идти путем переименования, то придется рассматривать каждый случай
>> в отдельности.
> Всё равно придётся рассматривать каждый случай отдельно.
> Например, пакет udev несёт в себе все нужные симлинки для systemd, и
> для него не надо делать enable|disable.
> Если сервис обязательный для работы (как udev), он содержит симлинки в
> /lib/systemd/system/multi-user.target.wants (или в другом target).
> Если сервис не обязательный, то enable|disable создаёт|удаляет
> симлинки в /etc/systemd/system/multi-user.target.wants (или в другом
> target).

Здесь тоже нормально. Для таких общесистемных сервисов, которые несут
с собой нужные симлинки,
нужно что бы в .service файлах отсутствовала секция [Install]. Тогда
systemct не будет знать куда их прописывать для enable, и будет
игнорировать с предупреждением. Например:
# systemctl enable udev.service (или udevd.service - без разницы )
Unit files contain no applicable installation information. Ignoring.

-- 
Alexey Shabalin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [devel] обновления пакетов с поддержкой systemd
  2011-06-10 18:49             ` Alexey Shabalin
@ 2011-08-11 11:36               ` Alexey Shabalin
  0 siblings, 0 replies; 13+ messages in thread
From: Alexey Shabalin @ 2011-08-11 11:36 UTC (permalink / raw)
  To: ALT Linux Team development discussions

10 июня 2011 г. 22:49 пользователь Alexey Shabalin написал:
> 27 мая 2011 г. 21:11 пользователь Dmitry V. Levin написал:
>> On Sat, May 21, 2011 at 04:42:31PM +0400, Alexey Shabalin wrote:
>>> Чёрт, с этим исправлением возникает другая проблема.
>>> В ALTLinux много имён init-скриптов не соответствуют названиям из upstream.
>>> Например udev -> udevd,  bluetooth -> bluetoothd.service и т.п.
>>> (добавляется d в конце имени).
>>
>> Вопрос, эти названия из upstream существуют в виде init-скриптов, или в
>> каком-то ином виде?  Например, если апстрим реализует некий демон
>> SERVICEd, то init-скрипт у нас с высокой вероятностью будет называться
>> SERVICEd а не SERVICE.  Просьба прояснить картину.
>>
>>> Для работы с systemd на такие имена сделаны симлинки
>>> # ls -l /lib/systemd/system/udevd.service
>>> lrwxrwxrwx 1 root root 12 Май 21 17:39
>>> /lib/systemd/system/udevd.service -> udev.service
>>> [root@shabalin-nb ~]# ls -l /lib/systemd/system/bluetoothd.service
>>> lrwxrwxrwx 1 root root 17 Май 21 17:39
>>> /lib/systemd/system/bluetoothd.service -> bluetooth.service
>>>
>>> Это работает  для start|stop (systemctl start|stop foo.service или
>>> service foo start|stop ),
>>> но не работает для enable|disable ( systemctk enable|disable
>>> foo.service или chkconfig foo enable|disable)
>>> Ругается что это symlink и хочет правильное имя.
>>>
>>> Как это объезжать?
>>> - привести имена init-скриптов к апстримному виду
>>
>> В этом случае сломаются обновление пакетов и привычки у людей.
>>
>>> - привести имена .service файлов к ALTLinux виду
>>
>> В этом случае может ухудшиться переносимость .service-файлов.
>>
>> Если идти путем переименования, то придется рассматривать каждый случай
>> в отдельности.
>>
>>> - научить systemd делать enable|disable для симлинков (а симлинк может
>>> быть и на /dev/null - для systemd это нормальный способ выключить или
>>> замаскировать сервис).
>
> в версии 28-alt3 я убрал ограничение на симлинки. Теперь можно делать
> enable|disable на симлинки.
> start|stop можно было делать и раньше.
> Экспериментировал с bluetoothd.service - вроде все нормально.
> Даже работает, если включать bluetoothd.service, а выключать уже
> bluetooth.service - выдаёт предупреждение, но ошибок нет.

В новой версии 33-alt1 опять нельзя сделать enable|disable для симлинка.
Этот код сильно переписали, и я пока не нашёл способа изменить.

>> Если симлинк ведет на /dev/null, то как ему можно сделать enable|disable?
> про симлинки на /dev/null можно не беспокоится, ни start, ни enable
> для них не работает.
>
> --
> Alexey Shabalin
>



-- 
Alexey Shabalin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [devel] обновления пакетов с поддержкой systemd
  2011-05-17 13:59       ` Dmitry V. Levin
  2011-05-21 12:42         ` Alexey Shabalin
@ 2012-01-24 21:19         ` Dmitry V. Levin
  1 sibling, 0 replies; 13+ messages in thread
From: Dmitry V. Levin @ 2012-01-24 21:19 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 2705 bytes --]

On Tue, May 17, 2011 at 05:59:55PM +0400, Dmitry V. Levin wrote:
> On Tue, May 17, 2011 at 04:35:13PM +0400, Alexey Shabalin wrote:
> > 17 мая 2011 г. 7:42 пользователь Alexey Shabalin <a.shabalin@gmail.com> написал:
> > > 17 мая 2011 г. 7:21 пользователь Dmitry V. Levin  написал:
> > >> On Tue, May 17, 2011 at 07:12:07AM +0400, Alexey Shabalin wrote:
> > >> [...]
> > >>> Надо запустить что-то типа
> > >>> if chkconfig foobar ; then
> > >>>   chkconfig foobar on
> > >>> fi
> > >>> (если сервис включен, включить его ещё раз - в этот раз уже с
> > >>> перенаправлением на systemd)
> > >> [...]
> > >>> Я пока придумал только модифицировать post_service:
> > >>>
> > >>> --- post_service.def  2011-03-17 01:41:42.000000000 +0300
> > >>> +++ post_service      2011-05-17 07:02:27.640147135 +0400
> > >> [...]
> > >>> @@ -14,5 +30,9 @@
> > >>>       /sbin/chkconfig --add "$1"
> > >>>  else
> > >>>       /sbin/chkconfig "$1" resetpriorities ||:
> > >>> +     [ -f "$SYSTEMD_SERVICE_DIR/$1.service" ] &&
> > >>> +             systemd_is_active &&
> > >>> +             /sbin/chkconfig --no-redirect "$1" &&
> > >>> +             /sbin/chkconfig "$1" on
> > >>>       /sbin/service "$1" condrestart ||:
> > >>>  fi
> > >>
> > >> Я бы предпочел, чтобы либо chkconfig resetpriorities выполнял эту
> > >> синхронизацию, либо появился еще один режим в chkconfig для синхронизации.
> > >> Вариант с resetpriorities предпочтительнее, поскольку тогда не придется
> > >> трогать пользователей chkconfig'а.
> > >
> > > Боюсь, что я этого не осилю. Максимум, что могу - сделать всегда
> > > включение сервиса при resetpriorities :)
> > 
> > В общем у меня получилось следущее:
> > 
> > 	    return setService(name, type, where, 0);
> >          } else if (!strcmp(state, "reset"))
> >  	    return setService(name, type, where, -1);
> > -	else if (!strcmp(state, "resetpriorities"))
> > +	else if (!strcmp(state, "resetpriorities")) {
> > +	    if (!noRedirectItem && isOn(name, level)) {
> > +		forwardSystemd(name, type, "enable");
> > +	    }
> >  	    return setService(name, type, where, -2);
> > +	}
> >  	else
> >  	    usage(EXIT_FAILURE);
> >      }
> > 
> > Если используется systemd и если раньше сервис был включён, то при
> > запуске с resetpriorities ещё запускается systemctl enable для
> > сервиса.
> > Так устроит?
> 
> Судя по описанию, да.
> 
> P.S. код я не смотрел.

Посмотрел код.  Нет, так совсем не годится.  Надо сперва менять состояние
(т.е. вызывать setService, который, между прочим, вызывает
"systemctl daemon-reload"), а потом уже форвардить результат в systemd.
То же самое касается и "chkconfig reset".


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2012-01-24 21:19 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-17  3:12 [devel] обновления пакетов с поддержкой systemd Alexey Shabalin
2011-05-17  3:21 ` Dmitry V. Levin
2011-05-17  3:42   ` Alexey Shabalin
2011-05-17 12:35     ` Alexey Shabalin
2011-05-17 13:59       ` Dmitry V. Levin
2011-05-21 12:42         ` Alexey Shabalin
2011-05-27 17:11           ` Dmitry V. Levin
2011-05-30 13:10             ` Alexey Shabalin
2011-05-30 14:22             ` Alexey Shabalin
2011-06-10 18:54               ` Alexey Shabalin
2011-06-10 18:49             ` Alexey Shabalin
2011-08-11 11:36               ` Alexey Shabalin
2012-01-24 21:19         ` Dmitry V. Levin

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git