Mail-Toaster
view release on metacpan or search on metacpan
lib/Mail/Toaster/Setup.pm view on Meta::CPAN
);
$self->gnupg_install();
$self->spamassassin_update();
unless ( $self->util->is_process_running("spamd") ) {
if ( -x $start ) {
print "Starting SpamAssassin...";
$self->util->syscmd( "$start restart", verbose=>0 );
print "done.\n";
}
else { print "WARN: couldn't start SpamAssassin's spamd.\n"; }
}
};
sub spamassassin_sql {
# set up the mysql database for use with SpamAssassin
# http://svn.apache.org/repos/asf/spamassassin/branches/3.0/sql/README
my $self = shift;
my %p = validate( @_, { $self->get_std_opts },);
return $p{test_ok} if defined $p{test_ok}; # for testing
if ( ! $self->conf->{install_mysql} || ! $self->conf->{install_spamassassin_sql} ) {
print "SpamAssasin MySQL integration not selected. skipping.\n";
return 0;
}
if ( $OSNAME eq "freebsd" ) {
$self->spamassassin_sql_freebsd();
}
else {
$self->spamassassin_sql_manual();
};
};
sub spamassassin_sql_manual {
my $self = shift;
print
"Sorry, automatic MySQL SpamAssassin setup is not available on $OSNAME yet. You must
do this process manually by locating the *_mysql.sql files that arrived with SpamAssassin. Run
each one like this:
mysql spamassassin < awl_mysql.sql
mysql spamassassin < bayes_mysql.sql
mysql spamassassin < userpref_mysql.sql
Then configure SpamAssassin to use them by creating a sql.cf file in SpamAssassin's etc dir with
the following contents:
user_scores_dsn DBI:mysql:spamassassin:localhost
user_scores_sql_username $self->conf->{install_spamassassin_dbuser}
user_scores_sql_password $self->conf->{install_spamassassin_dbpass}
# default query
#SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '\@GLOBAL' ORDER BY username ASC
# global, then domain level
#SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '\@GLOBAL' OR username = '@~'||_DOMAIN_ ORDER BY username ASC
# global overrides user prefs
#SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '\@GLOBAL' ORDER BY username DESC
# from the SA SQL README
#user_scores_sql_custom_query SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '\$GLOBAL' OR username = CONCAT('%',_DOMAIN_) ORDER BY username ASC
bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:spamassassin:localhost
bayes_sql_username $self->conf->{install_spamassassin_dbuser}
bayes_sql_password $self->conf->{install_spamassassin_dbpass}
#bayes_sql_override_username someusername
auto_whitelist_factory Mail::SpamAssassin::SQLBasedAddrList
user_awl_dsn DBI:mysql:spamassassin:localhost
user_awl_sql_username $self->conf->{install_spamassassin_dbuser}
user_awl_sql_password $self->conf->{install_spamassassin_dbpass}
user_awl_sql_table awl
";
};
sub spamassassin_sql_freebsd {
my $self = shift;
# is SpamAssassin installed?
if ( ! $self->freebsd->is_port_installed( "spamassassin" ) ) {
print "SpamAssassin is not installed, skipping database setup.\n";
return;
}
# have we been here already?
if ( -f "/usr/local/etc/mail/spamassassin/sql.cf" ) {
print "SpamAssassin database setup already done...skipping.\n";
return 1;
};
print "SpamAssassin is installed, setting up MySQL databases\n";
my $user = $self->conf->{install_spamassassin_dbuser};
my $pass = $self->conf->{install_spamassassin_dbpass};
my $dot = $self->mysql->parse_dot_file( ".my.cnf", "[mysql]", 0 );
my ( $dbh, $dsn, $drh ) = $self->mysql->connect( $dot, 1 );
if ($dbh) {
my $query = "use spamassassin";
my $sth = $self->mysql->query( $dbh, $query, 1 );
if ( $sth->errstr ) {
print "oops, no spamassassin database.\n";
print "creating MySQL spamassassin database.\n";
$query = "CREATE DATABASE spamassassin";
$sth = $self->mysql->query( $dbh, $query );
$query =
"GRANT ALL PRIVILEGES ON spamassassin.* TO $user\@'localhost' IDENTIFIED BY '$pass'";
$sth = $self->mysql->query( $dbh, $query );
$sth = $self->mysql->query( $dbh, "flush privileges" );
$sth->finish;
}
else {
print "spamassassin: spamassassin database exists!\n";
$sth->finish;
}
}
lib/Mail/Toaster/Setup.pm view on Meta::CPAN
}
sub squirrelmail_mysql {
my $self = shift;
return if ! $self->conf->{install_mysql};
return if ! $self->conf->{install_squirrelmail_sql};
if ( $OSNAME eq "freebsd" ) {
$self->freebsd->install_port( "pear-DB" );
print
'\nHEY! You need to add include_path = ".:/usr/local/share/pear" to php.ini.\n\n';
$self->freebsd->install_port( "php5-mysql" );
$self->freebsd->install_port( "squirrelmail-sasql-plugin" );
}
my $db = "squirrelmail";
my $user = "squirrel";
my $pass = $self->conf->{install_squirrelmail_sql_pass} || "secret";
my $host = "localhost";
my $dot = $self->mysql->parse_dot_file( ".my.cnf", "[mysql]", 0 );
my ( $dbh, $dsn, $drh ) = $self->mysql->connect( $dot, 1 );
if ($dbh) {
my $query = "use squirrelmail";
my $sth = $self->mysql->query( $dbh, $query, 1 );
if ( !$sth->errstr ) {
print "squirrelmail: squirrelmail database already exists.\n";
$sth->finish;
return 1;
}
print "squirrelmail: creating MySQL database for squirrelmail.\n";
$query = "CREATE DATABASE squirrelmail";
$sth = $self->mysql->query( $dbh, $query );
$query =
"GRANT ALL PRIVILEGES ON $db.* TO $user\@'$host' IDENTIFIED BY '$pass'";
$sth = $self->mysql->query( $dbh, $query );
$query =
"CREATE TABLE squirrelmail.address ( owner varchar(128) DEFAULT '' NOT NULL,
nickname varchar(16) DEFAULT '' NOT NULL, firstname varchar(128) DEFAULT '' NOT NULL,
lastname varchar(128) DEFAULT '' NOT NULL, email varchar(128) DEFAULT '' NOT NULL,
label varchar(255), PRIMARY KEY (owner,nickname), KEY firstname (firstname,lastname));
";
$sth = $self->mysql->query( $dbh, $query );
$query =
"CREATE TABLE squirrelmail.global_abook ( owner varchar(128) DEFAULT '' NOT NULL, nickname varchar(16) DEFAULT '' NOT NULL, firstname varchar(128) DEFAULT '' NOT NULL,
lastname varchar(128) DEFAULT '' NOT NULL, email varchar(128) DEFAULT '' NOT NULL,
label varchar(255), PRIMARY KEY (owner,nickname), KEY firstname (firstname,lastname));";
$sth = $self->mysql->query( $dbh, $query );
$query =
"CREATE TABLE squirrelmail.userprefs ( user varchar(128) DEFAULT '' NOT NULL, prefkey varchar(64) DEFAULT '' NOT NULL, prefval BLOB DEFAULT '' NOT NULL, PRIMARY KEY (user,prefkey))";
$sth = $self->mysql->query( $dbh, $query );
$sth->finish;
return 1;
}
print "
WARNING: I could not connect to your database server! If this is a new install,
you will need to connect to your database server and run this command manually:
mysql -u root -h $host -p
CREATE DATABASE squirrelmail;
GRANT ALL PRIVILEGES ON $db.* TO $user\@'$host' IDENTIFIED BY '$pass';
CREATE TABLE squirrelmail.address (
owner varchar(128) DEFAULT '' NOT NULL,
nickname varchar(16) DEFAULT '' NOT NULL,
firstname varchar(128) DEFAULT '' NOT NULL,
lastname varchar(128) DEFAULT '' NOT NULL,
email varchar(128) DEFAULT '' NOT NULL,
label varchar(255),
PRIMARY KEY (owner,nickname),
KEY firstname (firstname,lastname)
);
CREATE TABLE squirrelmail.global_abook (
owner varchar(128) DEFAULT '' NOT NULL,
nickname varchar(16) DEFAULT '' NOT NULL,
firstname varchar(128) DEFAULT '' NOT NULL,
lastname varchar(128) DEFAULT '' NOT NULL,
email varchar(128) DEFAULT '' NOT NULL,
label varchar(255),
PRIMARY KEY (owner,nickname),
KEY firstname (firstname,lastname)
);
CREATE TABLE squirrelmail.userprefs (
user varchar(128) DEFAULT '' NOT NULL,
prefkey varchar(64) DEFAULT '' NOT NULL,
prefval BLOB DEFAULT '' NOT NULL,
PRIMARY KEY (user,prefkey)
);
quit;
If this is an upgrade, you can probably ignore this warning.
";
}
sub squirrelmail_config {
my $self = shift;
my $sqdir = "/usr/local/www/squirrelmail";
return 1 if -e "$sqdir/config/config.php";
chdir("$sqdir/config");
print "squirrelmail: installing a default config.php\n";
copy('config_default.php', 'config.php');
my $mailhost = $self->conf->{toaster_hostname};
my $dsn = '';
if ( $self->conf->{install_squirrelmail_sql} ) {
my $pass = $self->conf->{install_squirrelmail_sql_pass} || 's3kret';
$dsn = "mysql://squirrel:$pass\@localhost/squirrelmail";
}
my $string = <<"EOCONFIG";
<?php
\$signout_page = 'https://$mailhost/';
\$provider_name = 'Powered by Mail::Toaster';
\$provider_uri = 'http://www.tnpi.net/wiki/Mail_Toaster';
\$domain = '$mailhost';
\$useSendmail = true;
\$imap_server_type = 'dovecot';
\$addrbook_dsn = '$dsn';
\$prefs_dsn = '$dsn';
?>
EOCONFIG
;
$self->util->file_write( "config_local.php", lines => [ $string ] );
if ( -d "$sqdir/plugins/sasql" ) {
if ( ! -e "$sqdir/plugins/sasql/sasql_conf.php" ) {
copy('sasql_conf.php.dist', 'sasql_conf.php');
};
my $user = $self->conf->{install_spamassassin_dbuser};
my $pass = $self->conf->{install_spamassassin_dbpass};
$self->config->apply_tweaks(
file => "$sqdir/plugins/sasql/sasql_conf.php",
changes => [
{ search => q{$SqlDSN = 'mysql://<user>:<pass>@<host>/<db>';},
replace => "\$SqlDSN = 'mysql://$user:$pass\@localhost/spamassassin'",
},
],
);
};
}
sub sqwebmail {
my $self = shift;
my %p = validate( @_, { $self->get_std_opts },);
return $p{test_ok} if defined $p{test_ok};
my $ver = $self->conf->{install_sqwebmail} or do {
$self->audit( 'skipping sqwebmail install (disabled)');
return;
};
my $httpdir = $self->conf->{toaster_http_base} || "/usr/local/www";
my $cgi = $self->conf->{toaster_cgi_bin};
my $prefix = $self->conf->{toaster_prefix} || "/usr/local";
unless ( $cgi && -d $cgi ) { $cgi = "$httpdir/cgi-bin" }
my $datadir = $self->conf->{toaster_http_docs};
unless ( -d $datadir ) {
if ( -d "$httpdir/data/mail" ) { $datadir = "$httpdir/data/mail"; }
elsif ( -d "$httpdir/mail" ) { $datadir = "$httpdir/mail"; }
else { $datadir = "$httpdir/data"; }
}
my $mime = -e "$prefix/etc/apache2/mime.types" ? "$prefix/etc/apache2/mime.types"
: -e "$prefix/etc/apache22/mime.types" ? "$prefix/etc/apache22/mime.types"
: -e "$prefix/etc/apache24/mime.types" ? "$prefix/etc/apache24/mime.types"
: "$prefix/etc/apache/mime.types";
my $cachedir = "/var/run/sqwebmail";
if ( $OSNAME eq "freebsd" && $ver eq "port" ) {
return $self->sqwebmail_freebsd_port();
};
$ver = "5.3.1" if $ver eq "port";
( run in 2.576 seconds using v1.01-cache-2.11-cpan-8f98c5d2c55 )