This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Postinstall script errors


Am 12.08.2010 15:37, schrieb Jeremy Ramer:
> On Thu, Aug 12, 2010 at 3:59 AM, Corinna Vinschen
> <corinna-cygwin@cygwin.com> wrote:
>> On Aug 11 09:18, Jeremy Ramer wrote:
>>> I recently upgraded from cygwin 1.5 to 1.7. At the end of the install
>>> there were errors with some of the postinstall scripts.  From the
>>> setup.full.log:
>>>
>>> 2010/08/11 08:39:53 running: C:\cygwin\bin\bash.exe --norc --noprofile
>>> /etc/postinstall/bash.sh
>>> ln: creating symbolic link `/dev/stdin': File exists
>>> 2010/08/11 08:39:54 abnormal exit: exit code=1
>>> 2010/08/11 08:39:54 running: C:\cygwin\bin\bash.exe --norc --noprofile
>>> /etc/postinstall/passwd-grp.sh
>>> 2010/08/11 08:39:55 abnormal exit: exit code=1
>>>
>>>
>>> I tried manually running the scripts with mixed results
>>>
>>> $ bash --norc --noprofile /etc/postinstall/bash.sh ; echo $?
>>> 0
>>>
>>> $ bash --norc --noprofile /etc/postinstall/passwd-grp.sh ; echo $?
>>> 1
>>>
>>> I tired manually running the commands inside passwd-grp.sh and they
>>> all return 0. So I'm not sure what exactly is failing.  Is there
>>> anything I should do to investigate?
>>
>> That's probably a fault in the postinstall scripts.  It would be nice if
>> you could provide more details about what fails exactly in the script,
>> or better, what in the script has a non-0 exit code.  That would help us
>> lazy maintainers to fix the scripts faster.
> 
> The issue with the passwd-grp.sh script seems to be the last two lines.
> 
> [ "$created_passwd" = "yes" ] && /bin/chgrp --silent root /etc/passwd
> [ "$created_group" = "yes"  ] && /bin/chgrp --silent root /etc/group
> 
> I verified that $created_passwd and $created_group were both no so
> both conditionals will fail. But because the last conditional is the
> last thing run, the script returns 1.  Adding an exit 0 to the script
> fixes it, but I'm not sure if that accomplishes what you want from the
> script.

PLEASE DON'T.

Adding an "exit 0" will mask the error and just reinstate the former state of
silently failing postinstall scripts more rigidly. This is not desirable. The
proper way to fix this is:

set -e  # this is providing that the whole script is written properly.
        # it causes immediate exit after one command (outside if, and
        # outside || or && lists) fails - usually desirable, but takes more
        # work because you can't write the scripts as sloppily as the
        # snippet you've just shown from passwd-grp.sh.
#
# ...other work...
#
if [ "$created_passwd" = "yes" ] ; then
	/bin/chgrp --silent root /etc/passwd
fi

if [ "$created_group" = "yes"  ] ; then
	/bin/chgrp --silent root /etc/group
fi

-- 
Matthias Andree

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]