diff options
Diffstat (limited to 'examples')
-rwxr-xr-x | examples/depmod.pl | 3 | ||||
-rw-r--r-- | examples/var_service/README | 59 |
2 files changed, 62 insertions, 0 deletions
diff --git a/examples/depmod.pl b/examples/depmod.pl index 8c6548d28..f324b121a 100755 --- a/examples/depmod.pl +++ b/examples/depmod.pl | |||
@@ -173,6 +173,9 @@ sub add_mod_deps | |||
173 | 173 | ||
174 | $depth .= " "; | 174 | $depth .= " "; |
175 | warn "${depth}loading deps of module: $this_module\n" if $verbose; | 175 | warn "${depth}loading deps of module: $this_module\n" if $verbose; |
176 | if (length($depth) > 50) { | ||
177 | die "too much recursion (circular dependencies in modules?)"; | ||
178 | } | ||
176 | 179 | ||
177 | foreach my $md (keys %{$mod->{$this_module}}) { | 180 | foreach my $md (keys %{$mod->{$this_module}}) { |
178 | add_mod_deps ($depth, $mod, $mod2, $module, $md); | 181 | add_mod_deps ($depth, $mod, $mod2, $module, $md); |
diff --git a/examples/var_service/README b/examples/var_service/README new file mode 100644 index 000000000..06817c8bc --- /dev/null +++ b/examples/var_service/README | |||
@@ -0,0 +1,59 @@ | |||
1 | In many cases, network configuration makes it necessary to run several daemons: | ||
2 | dhcp, zeroconf, ppp, openvpn and such. They need to be controlled, | ||
3 | and in many cases you also want to babysit them. runsvdir is a good tool for this. | ||
4 | examples/var_service directory provides a few examples. It is meant to be used | ||
5 | this way: copy it somewhere (say, /var/service) and run something like | ||
6 | |||
7 | env - PATH=... <other vars=...> runsvdir /var/service & | ||
8 | |||
9 | from one of system startup scripts. (Google "man runsvdir" and "man runsv" | ||
10 | for more info about these tools). | ||
11 | |||
12 | Some existing examples: | ||
13 | |||
14 | var_service/dhcp_if - | ||
15 | controls a udhcpc instance which provides dhpc-assigned IP | ||
16 | address on interface named "if". Copy/rename this directory as needed to run | ||
17 | udhcpc on other interfaces (var_service/dhcp_if/run script uses _foo suffix | ||
18 | of the parent directory as interface name). When IP address is obtained or lost, | ||
19 | var_service/dhcp_if/dhcp_handler is run. It saves new config data to | ||
20 | /var/run/service/fw/dhcp_if.ipconf and (re)starts /var/service/fw service. | ||
21 | This example can be used as a template for other dynamic network link services | ||
22 | (ppp/vpn/zcip). | ||
23 | |||
24 | var_service/ifplugd_if - | ||
25 | watches link status of interface if. Downs and ups /var/service/dhcp_if | ||
26 | service accordingly. In effect, it allows you to unplug/plug-to-different-network | ||
27 | and have your IP properly re-negotiated at once. | ||
28 | |||
29 | var_service/dhcp_if_pinger - | ||
30 | Uses var_service/dhcp_if's data (/var/service/dhcp_if/dhcp_if.out file) | ||
31 | to determine router IP. Pings it. If ping fails, restarts /var/service/dhcp_if | ||
32 | service. Basically, an example of watchdog service for networks | ||
33 | which are not reliable and need babysitting. | ||
34 | |||
35 | var_service/fw - | ||
36 | A *one-shot* service which reconfigures network based on current known state | ||
37 | of ALL interfaces. Uses conf/*.ipconf (static config) and /var/run/service/fw/*.ipconf | ||
38 | (dynamic config from dhcp/ppp/vpn/etc) to determine what to do. | ||
39 | One-shot-ness of this service means that it shuts itself off after single run. | ||
40 | IOW: it is not a constantly running daemon sort of thing. | ||
41 | It starts, it configures the network, it shuts down, all done | ||
42 | (unlike infamous NetworkManagers which sit in RAM forever, doing hell knows what). | ||
43 | |||
44 | However, any dhcp/ppp/vpn or similar service can restart it anytime | ||
45 | when it senses the change in network configuration. | ||
46 | This even works while fw service runs: if dhcp signals fw to (re)start | ||
47 | while fw runs, fw will not stop after its execution, but will re-execute once, | ||
48 | picking up dhcp's new configuration. | ||
49 | This is achieved very simply by having | ||
50 | # Make ourself one-shot | ||
51 | sv o . | ||
52 | at the very beginning of fw/run script, not at the end. | ||
53 | Therefore, any "sv u /var/run/service/fw" command by any other | ||
54 | script "undoes" o(ne-shot) command if fw still runs, thus | ||
55 | runsv will rerun it; or start it in a normal way if fw is not running. | ||
56 | |||
57 | System administrators are expected to edit fw/run script, since | ||
58 | network configuration needs are likely to be very complex and different | ||
59 | for non-trivial installations. | ||