Bug 34862

Summary: alterator-services не изменяет Start-Kill
Product: Sisyphus Reporter: Speccyfighter <zxwarior>
Component: alterator-service-functionsAssignee: manowar <manowar>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: antohami, bga, manowar, mike, sem, shaba
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 33000    
Attachments:
Description Flags
Fix for sysV systems none

Description Speccyfighter 2018-04-27 23:13:32 MSK
Текущее:

# chkconfig --list ntpd
ntpd            0:выкл  1:выкл  2:вкл   3:вкл   4:вкл   5:вкл   6:выкл

# ls -lR /etc/rc.d/rc*.d/*ntpd
lrwxrwxrwx 1 root root 14 май 22  2016 /etc/rc.d/rc0.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 22  2016 /etc/rc.d/rc1.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 17  2017 /etc/rc.d/rc2.d/S90ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 17  2017 /etc/rc.d/rc3.d/S90ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 17  2017 /etc/rc.d/rc4.d/S90ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 17  2017 /etc/rc.d/rc5.d/S90ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 22  2016 /etc/rc.d/rc6.d/K60ntpd -> ../init.d/ntpd

# /etc/rc.d/init.d/ntpd status
ntpd is running


Модуль альтератора services
Выбрано:
- Остановить
- Запускать при загрузке системы (маркер снят)
Применить.

Применение останавливает сервис

# /etc/rc.d/init.d/ntpd status
ntpd is stopped

но не выключает его

# chkconfig --list ntpd
ntpd            0:выкл  1:выкл  2:вкл   3:вкл   4:вкл   5:вкл   6:выкл

# ls -lR /etc/rc.d/rc*.d/*ntpd
lrwxrwxrwx 1 root root 14 май 22  2016 /etc/rc.d/rc0.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 22  2016 /etc/rc.d/rc1.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 17  2017 /etc/rc.d/rc2.d/S90ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 17  2017 /etc/rc.d/rc3.d/S90ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 17  2017 /etc/rc.d/rc4.d/S90ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 17  2017 /etc/rc.d/rc5.d/S90ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 22  2016 /etc/rc.d/rc6.d/K60ntpd -> ../init.d/ntpd


Если сервис остановлен и выключен

# chkconfig ntpd off

# ls -lR /etc/rc.d/rc*.d/*ntpd
lrwxrwxrwx 1 root root 14 май 22  2016 /etc/rc.d/rc0.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 22  2016 /etc/rc.d/rc1.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 апр 27 22:53 /etc/rc.d/rc2.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 апр 27 22:53 /etc/rc.d/rc3.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 апр 27 22:53 /etc/rc.d/rc4.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 апр 27 22:53 /etc/rc.d/rc5.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 22  2016 /etc/rc.d/rc6.d/K60ntpd -> ../init.d/ntpd

# /etc/rc.d/init.d/ntpd status
ntpd is stopped


то 
- Запустить
- Запускать при загрузке системы (маркер установлен)

запустит сервис

# /etc/rc.d/init.d/ntpd status
ntpd is running

но не включит его

# chkconfig --list ntpd
ntpd            0:выкл  1:выкл  2:выкл  3:выкл  4:выкл  5:выкл  6:выкл

# ls -lR /etc/rc.d/rc*.d/*ntpd
lrwxrwxrwx 1 root root 14 май 22  2016 /etc/rc.d/rc0.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 22  2016 /etc/rc.d/rc1.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 апр 27 22:53 /etc/rc.d/rc2.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 апр 27 22:53 /etc/rc.d/rc3.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 апр 27 22:53 /etc/rc.d/rc4.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 апр 27 22:53 /etc/rc.d/rc5.d/K60ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 14 май 22  2016 /etc/rc.d/rc6.d/K60ntpd -> ../init.d/ntpd

Тема из 3-рёх сообщений на форуме:
https://forum.altlinux.org/index.php?topic=41514.0
Comment 1 Антон Мидюков 2018-09-09 17:04:37 MSK
Надо вникнуть вот в этот участок кода:
http://git.altlinux.org/people/manowar/packages/?p=alterator-service-functions.git;a=blob_plain;f=alterator-service-functions/alterator-service-functions;hb=9a9428ba5bff0b578496bb21921f00840f829e68

        enable)            
            case "$*" in
                *:prefer-socket:*)
                    # We are asked to enable the service for
                    # the socket activation only, if possible.
                    if sd_service_exists "$name.service" && \
                            sd_service_exists "$name.socket"
                    then
                        sd_service_control "$name.service" disable && \
                            sd_service_control "$name.socket" enable || \
                                return $?

                        # However, always enable the SysV service.
                        if sd_sysv_avail && \
                                sysv_service_script_exists "$name"
                        then
                            sysv_service_control "$name" enable
                        fi
                    else
                        _service_control "$name" enable
                    fi
                    ;;
                *:prefer-service:*|*:prefer-main:*)
                    # We are asked to enable the main service
                    # unit only, if possible.
                    if sd_service_exists "$name.service" && \
                            sd_service_exists "$name.socket"
                    then
                        sd_service_control "$name.service" enable || \
                            return $?
                        if ! _service_control "$name.service" is-indirect; then
                            # Disable the socket part only if the main
                            # service isn't indirect. Otherwise
                            # the main service would be completely
                            # disabled with systemd.
                            sd_service_control "$name.socket" disable
                        fi
                    else
                        _service_control "$name" enable
                    fi
                    ;;
                *:all:*|*:also-socket:*)
                    # We are asked to also enable the socket
                    # unit, if exists.
                    _service_control "$name" enable || return $?
                    if sd_service_exists "$name.socket"; then
                        sd_service_control "$name.socket" enable
                    fi
                    ;;
                *)
                    _service_control "$name" enable
                    ;;
            esac
            ;;
        is-enabled)
            # If the SysV native service exists and is disabled
            # report false.
            if sd_sysv_avail && \
                    sysv_service_script_exists "$name"
            then
                sysv_service_control "$name" is-enabled || return $?
            fi

            # If the socket unit is enabled -- it's considered
            # enough.
            sd_service_exists "$name.socket" && \
              sd_service_control "$name.socket" is-enabled && \
                return 0

            _service_control "$name" is-enabled
            ;;
        disable)
            # Completely disable the service by turning off
            # its socket unit along with the main service.
            _service_control "$name" disable || return $?
            if sd_service_exists "$name.socket"; then
                sd_service_control "$name.socket" disable
            fi
            ;;
	    *)
		    _service_control "$name" "$cmd"
		    ;;

Перевешиваю на alterator-service-functions
Comment 2 Антон Мидюков 2018-09-10 05:21:49 MSK
Created attachment 7752 [details]
Fix for sysV systems

Функция _service_control не отрабатывает на sysV как надо, так как проверяется наличие в системе только systemctl, а он есть во всех системах на sysV! Нужно проверять также ещё и наличие /lib/systemd/systemd-sysv-install
Comment 3 Michael Shigorin 2018-09-10 12:04:32 MSK
Насколько понимаю, теперь модно проверять по коду возврата /sbin/sd_booted
(входит в пакет service с версии 0.5.24-alt1 2013 г.в.).
Comment 4 manowar@altlinux.org 2018-09-10 12:12:45 MSK
(В ответ на комментарий №3)
> Насколько понимаю, теперь модно проверять по коду возврата /sbin/sd_booted
> (входит в пакет service с версии 0.5.24-alt1 2013 г.в.).

Я даже больше скажу: этот самый SD_BOOTED уже во-всю используется в alterator-service-functions.
Comment 5 Антон Мидюков 2018-09-10 13:29:31 MSK
(В ответ на комментарий №4)
> (В ответ на комментарий №3)
> > Насколько понимаю, теперь модно проверять по коду возврата /sbin/sd_booted
> > (входит в пакет service с версии 0.5.24-alt1 2013 г.в.).
> 
> Я даже больше скажу: этот самый SD_BOOTED уже во-всю используется в
> alterator-service-functions.

Я его видел, но не понял, что это такое. Переделать патч или так сгодится? Тестовое задание 212785 с ним готово и протестировано. Или сами исправите?
Comment 6 manowar@altlinux.org 2018-09-10 14:11:57 MSK
(В ответ на комментарий №5)
> (В ответ на комментарий №4)
> > (В ответ на комментарий №3)
> > > Насколько понимаю, теперь модно проверять по коду возврата /sbin/sd_booted
> > > (входит в пакет service с версии 0.5.24-alt1 2013 г.в.).
> > 
> > Я даже больше скажу: этот самый SD_BOOTED уже во-всю используется в
> > alterator-service-functions.
> 
> Я его видел, но не понял, что это такое. Переделать патч или так сгодится?
> Тестовое задание 212785 с ним готово и протестировано. Или сами исправите?

  Исправьте на sd_booted и проверьте, пожалуйста, раз у вас всё настроено для тестирования.
Comment 7 Repository Robot 2018-09-10 16:09:08 MSK
alterator-service-functions-3.0.0-alt4 -> sisyphus:

Mon Sep 10 2018 Anton Midyukov <antohami@altlinux> 3.0.0-alt4
- Fixed for SysV systems (Closes: 34862)
Comment 8 Michael Shigorin 2018-09-12 18:01:47 MSK
Спасибо!  Отправишь в p8?
Comment 9 Антон Мидюков 2018-09-12 18:10:07 MSK
(В ответ на комментарий №8)
> Спасибо!  Отправишь в p8?

task 212829