The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
# Sysync
# 
# Copyright (C) 2012 Ohio-Pennsylvania Software, LLC.
#
# This file is part of sysync.
# 
# sysync is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
# 
# sysync is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
# 
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

use strict;

use File::Copy;
use Digest::MD5 qw(md5_hex);
use YAML;

my $sysdir = '/var/sysync';

unless ($< == 0)
{
    warn "may only be ran as root\n";
    exit(0);
}

sub main
{
    unless (-d $sysdir)
    {
        mkdir("$sysdir");
        chmod 0700, "$sysdir";
    }

    mkdir("$sysdir/users")  unless -d "$sysdir/users";
    mkdir("$sysdir/groups") unless -d "$sysdir/groups";
    mkdir("$sysdir/hosts")  unless -d "$sysdir/hosts";
    mkdir("$sysdir/stage/") unless -d "$sysdir/stage";
    mkdir("$sysdir/stage-files/") unless -d "$sysdir/stage-files";
    mkdir("$sysdir/files/") unless -d "$sysdir/files";
    mkdir("$sysdir/keys")   unless -d "$sysdir/keys";
    chmod 0700, "$sysdir/keys";

    unless (-e '/var/sysync/keys/sysync_rsa')
    {
        print "Generating ssh keys for sysync...\n";
        system(q[ssh-keygen -N "" -f /var/sysync/keys/sysync_rsa]);
    }

    print "Installing /usr/sbin/sysync\n";
    copy('./bin/sysync', '/usr/sbin/sysync');
    chmod 0755, '/usr/sbin/sysync';

    print "Installing /usr/sbin/sysyncd\n";
    copy('./bin/sysyncd', '/usr/sbin/sysyncd');
    chmod 0755, '/usr/sbin/sysyncd';

    print "Copying /etc/init.d/sysync\n";
    copy('./defaults/sysync', '/etc/init.d/sysync');
    chmod 0755, '/etc/init.d/sysync';

    print "Adding to init.d...\n";

    # add to rc.d
    # symlink('../init.d/sysync', '/etc/rc0.d/K20sysync');
    # symlink('../init.d/sysync', '/etc/rc1.d/K20sysync');
    # symlink('../init.d/sysync', '/etc/rc2.d/S20sysync');
    # symlink('../init.d/sysync', '/etc/rc3.d/S20sysync');
    # symlink('../init.d/sysync', '/etc/rc4.d/S20sysync');
    # symlink('../init.d/sysync', '/etc/rc5.d/S20sysync');
    # symlink('../init.d/sysync', '/etc/rc6.d/K20sysync');

    copy('./defaults/hosts.conf', "$sysdir/hosts.conf")
        unless -e "$sysdir/hosts.conf";

    copy('./defaults/ssh.conf', "$sysdir/ssh.conf")
        unless -e "$sysdir/ssh.conf";

    copy('./defaults/sysync.conf', "$sysdir/sysync.conf")
        unless -e "$sysdir/sysync.conf";
    
    copy('./defaults/default.conf', "$sysdir/hosts/default.conf")
        unless -e "$sysdir/hosts/default.conf";

    print "Sysync successfully installed.\n";

    return 0;
}

exit __PACKAGE__->main;