#!/usr/bin/perl # # Drakwizard # Copyright (C) 2003 Florent Villard # Copyright (C) 2004 Antoine Ginies # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. package MDK::Wizard::Kolab; use strict; use common; use MDK::Wizard::IFCFG; use MDK::Wizard::Wizcommon; my $wiz = new MDK::Wizard::Wizcommon; my $HOSTNAME = chomp_(`hostname`); my $IPSERVER = $wiz->{net}->itf_get("IPADDR"); if (!$IPSERVER) { my $interface = 'eth0'; ($IPSERVER) = `/sbin/ip addr show dev $interface` =~ /^\s*inet\s+(\d+\.\d+\.\d+\.\d+)/m; } my $DOMAINNAME = chomp_(`domainname`); my $kolab_config = "/etc/kolab/kolab.conf"; my $o = { name => N("Kolab configuration wizard"), init => sub { if (member($DOMAINNAME, qw(localdomain (none)))) { return 0, N("You need to readjust your domainname, not equal to localdomain or none. Please launch drakconnect to adjust it.") } 1 }, var => { HOSTNAME => $HOSTNAME, ip1 => $IPSERVER, maildomain => $DOMAINNAME, password => '', }, needed_rpm => [ 'kolab-server', 'postfix', 'openldap-servers', 'proftpd' ], # defaultimage => $ENV{__WIZ_HOME__}, }; $o->{pages} = { welcome => { name => N("Welcome to the Kolab Groupware server configuration Wizard.") . "\n\n" . N("Kolab is a secure, scalable and reliable groupware server. Some of the major features include: a web administration interface, a shared address book with provision for mailbox users as well as contacts and a POP3 as well as IMAP4(rev1) access to mail") . "\n\n" . N("Warning: Kolab needs to configure many other services: Proftpd, LDAP, Cyrus, Postfix, Imap, Saslauth. Wizard will make a backup of all your previous configuration files for these services."), no_back => 1, next => 'password', }, # hostname => { # name => N("Hostname"), # data => [ # { label => N("Hostname:"), val => \$o->{var}{HOSTNAME} }, # { label => N("Mail domain:"), val => \$o->{var}{maildomain} }, # ], # next => 'password', # }, password => { name => N("Enter pasword for the manager account of Kolab server."), complete => sub { if ($o->{var}{password} ne $o->{var}{password2} || $o->{var}{password} eq "") { $::in->ask_warn(N("Error:"), N("Password mismatch, or null password, please correct.")); return 1; } }, data => [ { label => N("Password:"), val => \$o->{var}{password}, hidden => 1 }, { label => N("Password again:"), val => \$o->{var}{password2}, hidden => 1 }, ], next => 'summary', }, summary => { name => N("The wizard will now configure Kolab server with these parameters"), data => [ { label => N("Hostname:"), fixed_val => \$o->{var}{HOSTNAME} }, { label => N("Mail domain:"), fixed_val => \$o->{var}{maildomain} }, ], post => \&do_it, next => 'end', }, end => { name => N("Congratulations") . "\n\n" . N("The kolab server is now configured and running. Log in as 'manager' with the password you entered at https://127.0.0.1/kolab/admin/"), end => 1, next => 0, }, }; sub new { my ($class) = @_; bless { o => $o, }, $class; } sub backup_conf { my @conf = qw(/etc/postfix/main.cf /etc/postfix/master.cf /etc/postfix/transport /etc/postfix/virtual /etc/cyrus.conf /etc/imapd.conf /etc/proftpd.conf /etc/openldap/slapd.conf /etc/sysconfig/saslauthd ); foreach (@conf) { -f $_ and MDK::Common::cp_af($_, $_.".orig"); } cp_af("/var/lib/ldap/", "/var/lib/ldap.orig"); } sub check_password { } sub do_it { return if $::testing; my $in = 'interactive'->vnew('su', 'Kolab server'); my $w = $in->wait_message(N("Kolab server"), N("Configuring Kolab server on your system...")); backup_conf(); system("service $_ stop") foreach qw(ldap saslauthd cyrus-imapd httpd postfix); system("groupadd -g 60001 kolab"); local *F; open(F, "|/usr/sbin/kolab_bootstrap.real -b\n"); print F "$o->{var}{HOSTNAME} $o->{var}{maildomain} $o->{var}{password} "; close F; substInFile { s/bind_pw :.*/bind_pw : $o->{var}{password}/; } $kolab_config; system("chkconfig --level 35 $_ off") foreach qw(ldap saslauthd cyrus-imapd httpd postfix); system("service kolab-server restart"); undef $w; } 1;