From Fedora Project Wiki
m (Finalization for review.)
Line 8: Line 8:
If existed already, then just echo relevant binary path to the file. Thus, here is an example of package with shell "foo" underneath /usr/bin:
If existed already, then just echo relevant binary path to the file. Thus, here is an example of package with shell "foo" underneath /usr/bin:


<code>
<pre>
%post
%post
if [ "$1" = 1 ]; then
if [ "$1" = 1 ]; then
Line 21: Line 21:
     sed -i '\!^%{_bindir}/foo$!d' %{_sysconfdir}/shells
     sed -i '\!^%{_bindir}/foo$!d' %{_sysconfdir}/shells
fi
fi
</code>
</pre>


[[Category:Packaging guidelines drafts]]
[[Category:Packaging guidelines drafts]]

Revision as of 18:33, 23 January 2014

Preamble

/etc/shells is a text file which controls system login shell of users. It contains a set of valid shells which can be used in the system.

See: SHELLS(5)

How to handle new shells in Fedora packages

As this file can be edited by any people as default, we need to first determine if relevant lines are already existed. If existed already, then just echo relevant binary path to the file. Thus, here is an example of package with shell "foo" underneath /usr/bin:

%post
if [ "$1" = 1 ]; then
    if [ ! -f %{_sysconfdir}/shells ] ; then
        echo "%{_bindir}/foo" > %{_sysconfdir}/shells
  else
    grep -q "^%{_bindir}/foo$" %{_sysconfdir}/shells || echo "%{_bindir}/foo" >> %{_sysconfdir}/shells
fi

%postun
if [ "$1" = 0 ] && [ -f %{_sysconfdir}/shells ] ; then
    sed -i '\!^%{_bindir}/foo$!d' %{_sysconfdir}/shells
fi