Update of /cvsroot/fink/experimental/danielj
In directory sc8-pr-cvs17:/tmp/cvs-serv13467
Added Files:
daemonic
Log Message:
Example script to turn DaemonicFiles into daemondo-using launchd plists.
--- NEW FILE: daemonic ---
#!/usr/bin/perl
use warnings;
use strict;
use XML::Simple;
use Text::ParseWords;
our $prefix = "/sw";
our $daemonDir = "$prefix/etc/daemons";
our $launchdaemonsDir = "/Library/LaunchDaemons";
our @daemons;
our $daemon;
our $tablevel = 0;
sub makekey {
my $key = shift(@_);
my $bool = shift(@_) || "";
my $string = "\t" x $tablevel . "<key>$key</key>\n";
$string .= "\t" x $tablevel . "<true/>\n" if $bool eq "true";
$string .= "\t" x $tablevel . "<false/>\n" if $bool eq "false";
return $string;
}
sub makestring {
my $string = shift(@_);
return "\t" x $tablevel . "<string>$string</string>\n";
}
sub beginarray {
return "\t" x $tablevel++ . "<array>\n";
}
sub endarray {
return "\t" x --$tablevel . "</array>\n";
}
sub begindict {
return "\t" x $tablevel++ . "<dict>\n";
}
sub enddict {
return "\t" x --$tablevel . "</dict>\n";
}
sub cmdarray {
my $words = shift(@_);
my $arg = shift(@_) || undef;
my $string = '';
if (defined $words) {
$string .= makestring($arg) if defined $arg;
foreach (&shellwords($words)) {
$string .= makestring("$_") unless $_ eq "";
}
$string .= makestring(';');
}
return $string;
}
sub readdaemon
{
opendir(DAEMONDIR, $daemonDir) or die "couldn't open directory
$daemonDir: $!";
@daemons = grep /\.xml$/, readdir DAEMONDIR;
closedir DAEMONDIR;
foreach (@daemons) {
s/\.xml$//;
$daemon = $_ if ($ARGV[1] eq $_);
}
die "daemon `$ARGV[1]' not found.\n" unless $daemon;
return XMLin("$daemonDir/$daemon.xml", ForceContent => 1, SuppressEmpty
=> 1);
}
sub enabledaemon
{
my $daemonXML = readdaemon();
#print Dumper($daemonXML);
my $daemonname =
"org.finkproject.daemonic.$daemonXML->{daemon}->{name}";
my $startcmd;
if (exists $daemonXML->{daemon}->{startcmd}->{content}) {
$startcmd = $daemonXML->{daemon}->{startcmd}->{content};
} else {
$startcmd = $daemonXML->{daemon}->{executable}->{content};
$startcmd .= $daemonXML->{daemon}->{parameters}->{content} if
exists $daemonXML->{daemon}->{parameters}->{content};
}
my $stopcmd = $daemonXML->{daemon}->{stopcmd}->{content} || undef;
my $restartcmd = $daemonXML->{daemon}->{restartcmd}->{content} || undef;
my $pidfile = $daemonXML->{daemon}->{pidfile}->{content} || undef;
my $pidstyle = $daemonXML->{daemon}->{pidstyle}->{content} || undef;
my $username = $daemonXML->{daemon}->{username}->{content} || undef;
my $groupname = $daemonXML->{daemon}->{groupname}->{content} || undef;
my $description = $daemonXML->{description}->{content};
open PLIST, ">$launchdaemonsDir/$daemonname.plist" or die "Can't open
$launchdaemonsDir/$daemonname.plist: $!";
print PLIST "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print PLIST "<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST
1.0//EN\n";
print PLIST "http://www.apple.com/DTDs/PropertyList-1.0.dtd >\n";
print PLIST "<plist version=\"1.0\">\n";
print PLIST begindict();
print PLIST makekey('Label');
print PLIST makestring($daemonname);
print PLIST makekey('ProgramArguments');
print PLIST beginarray();
print PLIST makestring("$prefix/bin/daemondo");
print PLIST makestring("--label=$daemonname");
print PLIST cmdarray($startcmd,'--start-cmd');
print PLIST cmdarray($stopcmd,'--stop-cmd');
print PLIST cmdarray($restartcmd,'--restart-cmd');
if (! defined $stopcmd && defined $pidfile) {
print PLIST makestring('--pid=fileauto');
print PLIST makestring("--pidfile=$pidfile");
}
print PLIST endarray();
print PLIST makekey('ServiceDescription');
print PLIST makestring($description);
if (defined $username) {
print PLIST makekey('UserName');
print PLIST makestring($username);
}
if (defined $groupname) {
print PLIST makekey('GroupName');
print PLIST makestring($groupname);
}
print PLIST makekey('OnDemand','false');
print PLIST makekey('RunAtLoad','true');
print PLIST enddict();
print PLIST "</plist>\n";
close PLIST;
}
if ($ARGV[0] eq "enable") {
enabledaemon();
} else {
die "Unknown command `$ARGV[0]'";
}
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Fink-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/fink-commits