Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 1081 - Исправление в скриптах инициализации   Make a simular bug
Summary: Исправление в скриптах инициализации
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Общее (show other bugs)
Version: 1.0.8
Hardware: PC Linux
: P5 minor
Target Milestone: ---
Assignee: Vitaly Lipatov
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 777
  Show dependency treegraph
 
In work:
Reported: 2008-01-20 14:54 MSK by megov
Modified: 2008-02-23 21:56 MSK (History)
0 users

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description megov 2008-01-20 14:54:18 MSK
В Fedora Core (наблюдал лично в 2, 6 и 8), а возможно и в других дистрибутивах, при входе по su, в PATH отсутствует /sbin. Это приводит к следующему - при выполнении скриптов /etc/init.d/linux-cifs и /etc/init.d/haspd из стандартной последовательности SystemV init при загрузке или смене ранлевелов все отрабатывает нормально. При выполнении этих же скриптов из под su - ругается на lsmod/modprobe/rmmod. Решение тривиально - добавить в вызовы lsmod/modprobe/rmmod абсолютные пути, поскольку по стандарту они вроде должны быть в /sbin. Также, при вызове linux-cifs и отсутствии автоматически монтируемых по cifs ресурсов, в строке 137 функции start() происходит выполнение  с ненулевым кодом возврата. Это неверно обрабатывется SysV init, т.к. при успешном запуске, скрипт должен вернуть 0. В результате создается ситуация, когда linux-cifs успешно загружен, а SysV init пишет - failed. 
Ориентировочные патчи прилагаются:

>--- /etc/init.d/haspd   2007-12-04 17:19:53.000000000 +0300
>+++ /root/init-setup/haspd-sgc-patched  2008-01-14 14:11:44.000000000 +0300
>@@ -132,15 +132,15 @@
>                chmod 660 /dev/Hardlock
>        fi
> 
>-    modprobe parport_pc
>+    /sbin/modprobe parport_pc
> 
>     # try load module by modprobe
>-    modprobe $MODULENAME 2>/dev/null && { echo -n -e "\n\tmodprobe $MODULENAME" ; success ; return ; }
>+    /sbin/modprobe $MODULENAME 2>/dev/null && { echo -n -e "\n\t/sbin/modprobe >$MODULENAME" ; success ; return ; }
> 
>     if [ -r "$DEFMODULEPATH" ] ; then
>             local INSMODF=
>             [ "$EXTMO" = "o" ] && INSMODF="-f"
>-           insmod $INSMODF $DEFMODULEPATH && { echo -n -e "\n\tinsmod $DEFMODULEPATH" ; success ; return ; }
>+           /sbin/insmod $INSMODF $DEFMODULEPATH && { echo -n -e "\n\t/sbin/insmod $DEFMODULEPATH" ; success ; return ; }
>            #echo -n "Incorrect module. Your system: " ; uname -a ; dmesg | tail -n2
>     fi
>     echo -n -e "$DEFMODULEPATH is not found,\nyou can try compile it with 'service haspd build' command."
>@@ -239,7 +239,7 @@
> 
>     echo -n "Unloading HASP LPT kernel module... "
>     is_moduled || { passed ; return ; }
>-    rmmod aksparlnx || { failure ; return ; }
>+    /sbin/rmmod aksparlnx || { failure ; return ; }
>     success
> 
> }
---------------------
>--- /etc/init.d/linux-cifs      2007-10-12 21:16:36.000000000 +0400
>+++ /root/init-setup/linux-cifs.sgc-patched     2007-10-21 17:53:33.000000000 +0400
>@@ -82,7 +82,7 @@
> 
> is_moduled()
> {
>-    lsmod | grep $MODULENAME > /dev/null
>+    /sbin/lsmod | grep $MODULENAME > /dev/null
> }
> 
> umount_cifs()
>@@ -108,16 +108,16 @@
>          #test -r /proc/fs/cifs/Etersoft && { passed ; return ; }
>          umount_cifs
>          echo -n "Removing CIFS kernel module... "
>-         rmmod $MODULENAME || { failure ; return ; }
>+         /sbin/rmmod $MODULENAME || { failure ; return ; }
>     fi
> 
>     # Preload module dependencies
>-    modprobe nls_base 2>/dev/null
>+    /sbin/modprobe nls_base 2>/dev/null
>     # kernel depends
>     # || { echo -n "nls_base is not loaded" ; failure ; } 
>     echo -n "Loading CIFS kernel module... "
>     if [ -r "$DEFMODULEPATH" ] ; then
>-           insmod $DEFMODULEPATH && { echo ; echo -n "    insmod $DEFMODULEPATH" ; success ; return ; }
>+           /sbin/insmod $DEFMODULEPATH && { echo ; echo -n "    /sbin/insmod $DEFMODULEPATH" ; success ; return ; }
>            echo -n "Incorrect module. Your system: " ; uname -a ; dmesg | tail -n2
>     fi
>     echo -n "$MODULENAME from Etersoft is not found,"
>@@ -135,6 +135,7 @@
>         echo -n "Disable Linux extensions for CIFS..."
>         echo 0 > /proc/fs/cifs/LinuxExtensionsEnabled && success || failure
>        test -n "$WASCIFS" && mount_cifs
>+       set > /dev/null #to set exit code to 0 upon return from start script
>     else
>         failure
>     fi
>@@ -145,7 +146,7 @@
>     echo -n "Unloading CIFS kernel module... "
>     umount_cifs
>     is_moduled || { passed ; return ; }
>-    rmmod $MODULENAME || { failure ; echo "You have to umount all CIFS resources."; return ; }
>+    /sbin/rmmod $MODULENAME || { failure ; echo "You have to umount all CIFS resources."; return ; }
>     success
> 
> }
Comment 1 Vitaly Lipatov 2008-01-20 15:35:08 MSK
При выполнении команды 
$ su 
меняется UID пользователя на 0 (root), все переменные окружения
остаются пользовательскими - $HOME, $PATH и пр. В PATH для пользователя закономерно не вписаны путь к /sbin.
Правильным способом является использование команды
$ su -
при этом происходит полноценный вход в систему под root, со всем необходимым окружением.

Может быть нужно информировать пользователя, что у него неверное окружение?

Исправление путей в haspd и linux-cifs я внёс, будет в следующих сборках.
За код возврата из start() отдельное спасибо, также исправил.