Sophie

Sophie

distrib > Fedora > 13 > i386 > by-pkgid > 2b6d57de11205d1e4ec8b18312057c35 > files > 276

initng-ifiles-0.1.5-4.fc12.i686.rpm

.ii MANUAL

.ii files are distro agnostic init files. During the build process of
initng, the distro specific .i files are generated by the install_process
program.

You may see the install_process program as something like an C preprocessor.
Basically the .ii files are copied line by line into the .i file. However
there are special constructs that can be used to generate distro-specic
code.

These constructs are:

    #exec blocks

    #ifd blocks

    @foo@ statements


#exec BLOCKS:

the exec blocks starts with an "#exec" line, and ends with an "#endexec"
line. Everything between "#exec" and "#endexec" is executed as a shell
script. The output of the shell script is copied into the .i file.

Example:

    #exec
    echo foo
    #endexec

This will create the line "foo" in the .i file.



#ifd BLOCKS:

An #ifd block starts with a "#ifd DISTRO" line, and ends with an "#endd"
line.

install_process will try to probe your distribution and copy the contents of
the Block into the .i file if your distribution is contained in DISTRO.

There may be one ore more "#elsed" line inside the #ifd Block. Think of it
as "else" or "else if" in C.

Let's explain by an example:

    #ifd gentoo
    foo
    #elsed debian ubuntu
    bar
    #elsed
    baz
    #endd

This will produce the line "foo" on gentoo, "bar" on debian and ubuntu, and
"baz" on every other distro. There must be no "#elsed DISTRO" lines after an
"#elsed" line with no distro specifier.



@foo@ STATEMENTS:

You know this problem: udhcpc is installed in /sbin on one distro, and in
/usr/sbin in some other distro. Here the @foo@ statements kick in.

in its basic form, @foo@ will search the PATH for the executable foo, and if
found, it will replace @foo@ with the path of the foo executable.

In addition to the users PATH, install_service will also search in /sbin,
/usr/sbin and /usr/local/sbin. this will allow building initng by
unpriviliged users, whose PATH usually does not contain these directorys.

But what if no foo executable is found? (This might be the case if the
package foo wasn't installed when the user built initng.) In this case,
install_process will use a builtin default path (/usr/sbin), so if no foo
executable is found, @foo@ will produce /usr/sbin/foo.

This default path might not be sufficient for all services, so you have
several possibilities to change it.


#atdefpath:

Use #atdefpath. You can override the builtin default path usr/sbin with it.
If you place an "#atdefpath /usr/bin" line in the .ii file before_ the
@foo@ statement, this for example will override the default path
with /usr/bin.

Any subsequent #atdefpath lines will _override_ previous default paths.

#atdefpath also supports a special feature called multi-line default paths.
An example:

    #atdefpath /usr/bin:/bin:/usr/local/bin
    daemon = @foo@

If a foo executable is not found in the PATH, the "daemon = @foo@" line will
not generate one output line, but three:

    daemon = /usr/bin/foo
    daemon = /bin/foo
    daemon = /usr/local/bin/foo


@/path/file@:

If you use the @/my/path/foo@ construct, install_service will at first look
/if my/path/foo exits. if yes, this line is printed. if no, the PATH is
searched for foo. If install_service can find it in the PATH, then it will
produce a /usr/sbin/foo, if it was found eg. in /usr/sbin. If it also
couldn't be found in the path, then /my/path/foo will be created. Any
previous set default paths will be ignored.


@foo:bar@:

But when you code distro agnostic .ii files, you might also arrive at
another problem: one distro names your daemon "dbus-deamon", while another
has "dbus-daemon-1". to solve this, you can write a statement like:
"@dbus-daemon:dbus-daemon-1@". First, install_process will search your PATH
for dbus-daemon. If it can't find it, it will search the PATH for
dbus-daemon-1. If it also can't find dbus-daemon-1, it will fall back on
dbus-daemon (the first name specified), using the default path (either
builtin or from #atdefpath). You also can write lines like
@/usr/bin/dbus-daemon:dbus-daemon-1@.

Note that this might produce multiple output lines if you use an multi-line
default path, but it will only produce output from the _first_ element.