mirror of
https://github.com/webmin/webmin.git
synced 2026-05-04 22:30:33 +01:00
Work on launchd support
This commit is contained in:
@@ -379,6 +379,41 @@ elsif ($init_mode eq "systemd" && $access{'bootup'}) {
|
||||
]);
|
||||
|
||||
}
|
||||
elsif ($init_mode eq "launchd" && $access{'bootup'}) {
|
||||
# Show launchd agents
|
||||
print &ui_form_start("mass_launchd.cgi", "post");
|
||||
@links = ( &select_all_link("d"),
|
||||
&select_invert_link("d"),
|
||||
&ui_link("edit_launchd.cgi?new=1", $text{'index_ladd'}) );
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_columns_start([ "", $text{'index_lname'},
|
||||
$text{'index_uboot'},
|
||||
$text{'index_ustatus'}, ]);
|
||||
foreach $u (&list_launchd_agents()) {
|
||||
$l = "edit_launchd.cgi?name=".&urlize($u->{'name'});
|
||||
print &ui_columns_row([
|
||||
&ui_checkbox("d", $u->{'name'}, undef),
|
||||
&ui_link($l, $u->{'name'}),
|
||||
$u->{'boot'} == 1 ? $text{'yes'} :
|
||||
"<font color=#ff0000>$text{'no'}</font>",
|
||||
$u->{'status'} ? $text{'yes'} :
|
||||
"<font color=#ff0000>$text{'no'}</font>",
|
||||
]);
|
||||
}
|
||||
print &ui_columns_end();
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_form_end([ [ "start", $text{'index_start'} ],
|
||||
[ "stop", $text{'index_stop'} ],
|
||||
[ "restart", $text{'index_restart'} ],
|
||||
undef,
|
||||
[ "addboot", $text{'index_addboot'} ],
|
||||
[ "delboot", $text{'index_delboot'} ],
|
||||
undef,
|
||||
[ "addboot_start", $text{'index_addboot_start'} ],
|
||||
[ "delboot_stop", $text{'index_delboot_stop'} ],
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
# reboot/shutdown buttons
|
||||
print &ui_hr();
|
||||
|
||||
@@ -28,7 +28,9 @@ use WebminCore;
|
||||
|
||||
This variable is set based on the bootup system in use. Possible values are :
|
||||
|
||||
=item osx - MacOSX hostconfig files
|
||||
=item osx - MacOSX hostconfig files, for older versions
|
||||
|
||||
=item launchd - MacOS Launchd, for newer versions
|
||||
|
||||
=item rc - FreeBSD 6+ RC files
|
||||
|
||||
@@ -38,14 +40,17 @@ This variable is set based on the bootup system in use. Possible values are :
|
||||
|
||||
=item win32 - Windows services
|
||||
|
||||
=item upstart - Upstart, seend on Ubuntu 11
|
||||
=item upstart - Upstart, seen on Ubuntu 11
|
||||
|
||||
=item systemd - SystemD, as seen on Fedora 16
|
||||
=item systemd - SystemD, seen on Fedora 16
|
||||
|
||||
=cut
|
||||
if ($config{'init_mode'}) {
|
||||
$init_mode = $config{'init_mode'};
|
||||
}
|
||||
elsif (&has_command("launchd")) {
|
||||
$init_mode = "launchd";
|
||||
}
|
||||
elsif ($config{'hostconfig'}) {
|
||||
$init_mode = "osx";
|
||||
}
|
||||
@@ -2235,4 +2240,55 @@ elsif ($out =~ /stopped/i) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
# list_launchd_agents()
|
||||
# Returns an array of hash refs, each of which is a launchd daemon/agent
|
||||
sub list_launchd_agents
|
||||
{
|
||||
my @rv;
|
||||
|
||||
# Get the initial list of actions
|
||||
my $out = &backquote_command("launchctl list");
|
||||
&error("Failed to list launchd agents : $out") if ($?);
|
||||
foreach my $l (split(/\r?\n/, $out)) {
|
||||
next if ($l =~ /^PID/); # Header line
|
||||
my ($pid, $status, $label) = split(/\s+/, $l);
|
||||
next if ($label =~ /^0x/); # Not really a launchd job
|
||||
push(@rv, { 'name' => $label,
|
||||
'status' => $pid eq "-" ? 0 : 1,
|
||||
'pid' => $pid eq "-" ? undef : $pid, });
|
||||
}
|
||||
|
||||
# Get details on each one
|
||||
foreach my $a (@rv) {
|
||||
my $out = &backquote_command("launchctl list ".quotemeta($a->{'name'}));
|
||||
my %attrs;
|
||||
foreach my $l (split(/\r?\n/, $out)) {
|
||||
if ($l =~ /"(\S+)"\s*=\s*"([^"]*)";/ ||
|
||||
$l =~ /"(\S+)"\s*=\s*\S+;/) {
|
||||
$attrs{lc($1)} = $2;
|
||||
}
|
||||
}
|
||||
$a->{'start'} = $attrs{'program'};
|
||||
$a->{'file'} = &get_launchd_file($a->{'name'});
|
||||
# XXX started at boot?
|
||||
}
|
||||
|
||||
return @rv;
|
||||
}
|
||||
|
||||
# get_launchd_file(name)
|
||||
# Returns the path to the launchd config file for some name
|
||||
sub get_launchd_file
|
||||
{
|
||||
my ($name) = @_;
|
||||
foreach my $dir ("/Library/LaunchAgents",
|
||||
"/Library/LaunchDaemons/",
|
||||
"/System/Library/LaunchAgents",
|
||||
"/System/Library/LaunchDaemons") {
|
||||
my $path = $dir."/".$name.".plist";
|
||||
return $path if (-r $path);
|
||||
}
|
||||
return "/Library/LaunchDaemons/".$name.".plist";
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
@@ -50,6 +50,8 @@ index_ustatus=Running now?
|
||||
index_uadd=Create a new upstart service.
|
||||
index_sadd=Create a new systemd service.
|
||||
index_always=Always
|
||||
index_ladd=Create a new launchd agent.
|
||||
index_lname=Agent name
|
||||
|
||||
edit_title=Edit Action
|
||||
create_title=Create Action
|
||||
@@ -187,6 +189,7 @@ mode_win32=Windows services
|
||||
mode_rc=FreeBSD RC scripts
|
||||
mode_upstart=Upstart
|
||||
mode_systemd=Systemd
|
||||
mode_launchd=LaunchD
|
||||
|
||||
upstart_title1=Create Upstart Service
|
||||
upstart_title2=Edit Upstart Service
|
||||
|
||||
Reference in New Issue
Block a user