Instalação completa de servidor de e-mail

Publicado por Anderson Leite 12/12/2006

[ Hits: 8.655 ]

Homepage: www.andersonleite.net

Download servidor_email_v5.0.2.sh




Este script ainda está em desenvolvimento, infelizmente não tenho servidores de teste disponíveis para fazer todos os testes possíveis, se puderem, testem e reportem os erros que encontrarem.

O script é baseado no artigo que revisei e publiquei aqui no VOL, que está no seguinte link:

http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=5501

  



Esconder código-fonte

#!/bin/bash
########################################################################################
#
#Artigos SecForum: Instalando um servidor de e-mail completo utilizando Debian Sarge
#http://www.secforum.com.br/article.php?sid=3402
#
#Artigo escrito por Anderson Leite para o SecForum abordando a instalacao de um servidor de e-#mail completo utilizando Debian Sarge e postfix, com suporte a dominios virtuais, cota de e-#mail, anti-virus, anti-spam, ferramentas de relatorio, graficas e em modo texto, #autenticacao SMTP, acesso POP3 e IMAP, e ferramenta de gerenciamento web do Postfix - #Postfixadmin.
#
#Este tutorial foi totalmente baseado no tutorial do Marco Maximo, disponivel no site do
#Viva O Linux (http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=526), foram #realizadas algumas correcoes, e algumas modificacoes para que o mesmo pudesse ser totalmente #compativel com o Debian Sarge, rodando SASL2 para a autenticacao SMTP. Tambem foram #adicionados passos de instalacao de ferramentas para geracao de relatorios gerenciais, como #o Mailgraph, Isoqlog e o Pflogsumm, correcoes e melhorias sao muito bem vindas.
#
#
########################################################################################

#######################################
# Definindo algumas coisas basicas:   #
#######################################
TMPDIR=/tmpinstall
SENHA_EMAIL_UTESTE01="acucar"
SENHA_EMAIL_UTESTE02="mel"
EMAIL_SUPORTE="equipedeti@meudominio.com.br"
# Estas variaveis vão sair daqui. Serão declaradas mais abaixo, vou deixa-las aqui por enquanto
#IP_SERVIDOR="192.168.100.120"
#MINHA_REDE="192.168.100.0"
#SENHA_ROOT_MYSQL="saladamixta"
#SENHA_USUARIO_DB_POSTFIX="laranja"
#SENHA_USUARIO_DB_MAILDROP="beterraba"
#SENHA_USUARIO_POSTFIXADMIN="limao"
#SENHA_USUARIO_SILVA="acucar"
#MEU_DOMINIO="meudominio.com.br"
VERSAO_SCRIPT="0.1.2-vakao - 21/11/2006, originalmente por csena2k2@gmail.com, esteroides adicionados por asleite@velonet.net :)"

######################
# AVISOS IMPORTANTES #
######################

echo -e \\n
echo -e "Este script irá instalar e configurar um servidor de emails completo no seu Debian Sarge, com suporte a domínios virtuais, cota de e-mail, anti-vírus, anti-spam, ferramentas de relatório, gráficas e em modo texto, autenticação SMTP, acesso POP3 e IMAP, também com a ferramenta de gerenciamento web do Postfix - Postfixadmin."\\n

echo -e "Este script baseou-se no artigo do SecForum: Instalando um servidor de e-mail completo utilizando Debian Sarge, em http://www.secforum.com.br/article.php?sid=3402 . Recomendamos sua leitura para entender melhor os detalhes envolvidos."\\n

echo -e "Tabém recomendamos ler este outro artigo: http://www.howtoforge.com/fedora_virtual_postfix_mysql_quota_courier "\\n

echo -e "ATENÇÂO:"  
echo -e "Este script ainda é EXPERIMENTAL, então use por sua conta e risco, mas dicas e sugestões são bem vindas." 
echo -e "E por favor nao deixe de nos avisar das suas instalações bem sucedidas!"\\n

echo "Versão: $VERSAO_SCRIPT"
echo -e \\n

echo "Pressione ENTER para continuar ou CONTROL+C para abortar!"
read p

#############################
# Aqui comeca a brincadeira #
#############################

# Cria o diretorio temporario
mkdir $TMPDIR

# Mudando o release do Debian para testing (mais atualizações, versões mais novas, etc):
echo -e "Alterando o release do Debian para testing... aguarde"
cp /etc/apt/sources.list /etc/apt/sources.list.orig
cat <<EOF > /etc/apt/sources.list
deb http://security.debian.org/ stable/updates main contrib non-free

deb http://ftp.uk.debian.org/debian/ testing main non-free contrib
deb-src http://ftp.uk.debian.org/debian/ testing main non-free contrib
EOF

# instalando o iproute (que será usado para definirmos a interface de rede inicial a ser utilizada na configuração e testes):
echo "Atualizando a lista de pacotes disponiveis, isso pode demorar um pouco, dependendo da velocidade de sua conexão à internet"
apt-get update
apt-get upgrade
apt-get -f install

echo "Instalando o pacote iproute"
apt-get install iproute

# Definir qual interface será utilizada na configuração do servidor de e-mail (isto supre a necessidade das variaveis IP_SERVIDOR e MINHA_REDE)
# Pego as interfaces instaladas no servidor, e com status UP
ip addr | grep -v link | grep -v LOOP | grep -v 127.0. | grep UP > $TMPDIR/ifaces.txt

echo "As interfaces de rede abaixo estão configuradas no servidor, e com status UP neste momento:"
# Faço um for para listar as interfaces, com seus respectivos IP's
for i in `cat $TMPDIR/ifaces.txt | cut -f 2 -d " "`; 
   do 
   z=`echo $i| cut -f 1 -d ":"`
   echo "Inteface $z, com o IP `ifconfig $z| grep inet`"; 
   done

echo "Digite o nome da interface a ser utilizada nos testes (ex: eth0) e tecle enter para continuar"
echo "Dica: utilize para a instalação e testes a sua interface de rede interna"
echo " "
read iface

# Faz a declaracao das variaveis de acordo com a interface informada pelo usuario
IP_SERVIDOR=`ifconfig $iface | grep inet| cut -f 2 -d ":" | cut -f 1 -d " "`

# Para definir qual a rede, iremos fazer um case com a mascara de rede
# Estamos utilizando os dois ultimos octetos
# Só fiz os cases para os exemplos mais comuns, outros podem ser adicionados
echo " "
echo "Tentando detectar a mascara de rede automaticamente..."
MASCARA=`ifconfig $iface | grep inet| cut -f 4 -d ":" | cut -f 1 -d " "| cut -f 3,4 -d "."`
case "$MASCARA" in
    0.0)
        echo -n "Mascara de rede classe B"
   echo " "
   REDE_TMP=`echo $IP_SERVIDOR | cut -f 1,2 -d "."`
        MINHA_REDE=`echo "$REDE_TMP.$MASCARA" `
   echo "IP da minha rede: $MINHA_REDE"
        ;;
    255.0)
        echo -n "Mascara de rede classe C"
   echo " "
   REDE_TMP=`echo $IP_SERVIDOR | cut -f 1,3 -d "."`
        MINHA_REDE=`echo "$REDE_TMP.0" `
   echo "IP da minha rede: $MINHA_REDE"
        ;;

    255.128)
        echo -n "Mascara de subrede 128"
   echo " "
   # Neste caso, precisamos do endereço de broadcast, para definirmos se o host está na primeira ou na segunda metade da rede
   BCAST=`ifconfig $iface | grep inet| cut -f 3 -d ":" | cut -f 1 -d " "`
   if [ $BCAST <> 127 ]
      then
   REDE_TMP=`echo $IP_SERVIDOR | cut -f 1-3 -d "."`
   MINHA_REDE=`echo "$REDE_TMP.0"`
   echo "IP da minha rede: $MINHA_REDE"
      else
   REDE_TMP=`echo $IP_SERVIDOR | cut -f 1-3 -d "."`
   MINHA_REDE=`echo "$REDE_TMP.128"`
   echo "IP da minha rede: $MINHA_REDE"
   fi
   ;;
    *)
        echo "Deteccao automatica do IP de rede falhou, por favor, informe-o abaixo"
        read MINHA_REDE
        ;;
esac

echo -e "1 - Instalar os pacotes necessários disponíveis no repositório APT:"\\n
echo " "
echo "Após o download, você poderá precisar responder algumas perguntas durante a instalação dos pacotes, no momento as opções padrão são boas para nós"

apt-get install mysql-server-4.1 hddtemp nail mysql-server mysql-client libmysqlclient14-dev courier-imap courier-authmysql courier-imap-ssl courier-pop courier-pop-ssl gcc libc6-dev g++ libgdbm-dev gcc-3.4 cpp make postfix postfix-mysql postfix-tls sasl2-bin libsasl2-modules-sql libpam-mysql clamav-daemon clamav-freshclam amavisd-new phpmyadmin php4 apache2 php4-mysql libapache2-mod-php4 libgsasl7 libsasl2 libsasl2-dev libsasl2-modules libfile-mmagic-perl libconfig-inifiles-perl libconvert-tnef-perl libconvert-uulib-perl libio-zlib-perl libarchive-tar-perl libarchive-zip-perl libparse-syslog-perl libunix-syslog-perl libmime-perl libmime-base32-perl libfile-scan-perl libnet-server-perl libnet-smtp-server-perl libmd5-perl ncftp unzip ftp gnupg arj cabextract unrar-free

echo "Instalando mais alguns pacotes extras"

# Remover o webmail da instalação agora, será instalado mais tarde, de acordo com a escolha do usuário
# apt-get install mc mondo mindi nmap phpmyadmin squirrelmail squirrelmail-locales spamassassin ntpdate sudo unrar lha arc zoo 
apt-get install mc mondo mindi nmap phpmyadmin spamassassin ntpdate sudo unp arc zoo 

echo -e \\n

# Trabalhar com um diretorio para instalacao, tudo dentro do $TMPDIR é removido em caso de boot (acidental, por falta de energia, ou para testes)
echo -e "2 - Baixar o postfixadmin e maildrop em $TMPDIR:"\\n

cd $TMPDIR

wget -c http://www.servtec.eti.br/downloads/ServidorEmailDebianSarge/postfixadmin-2.1.0-MODIFICADO.tar.gz
wget -c http://umn.dl.sourceforge.net/sourceforge/courier/maildrop-1.6.3.tar.bz2

echo -e "Descompactando PostfixAdmin em /var/www:"\\n

cd /var/www
tar -zxvf $TMPDIR/postfixadmin-2.1.0-MODIFICADO.tar.gz


chown -R www-data.www-data /var/www/postfixadmin-2.1.0

cd /var/www/postfixadmin-2.1.0
chmod 640 *.php *.css
cd /var/www/postfixadmin-2.1.0/admin/
chmod 640 *.php .ht*
cd /var/www/postfixadmin-2.1.0/images/
chmod 640 *.gif *.png
cd /var/www/postfixadmin-2.1.0/languages/
chmod 640 *.lang
cd /var/www/postfixadmin-2.1.0/templates/
chmod 640 *.tpl
cd /var/www/postfixadmin-2.1.0/users/
chmod 640 *.php  

#voltando para o $TMPDIR
cd $TMPDIR

echo -e "Baixando o PHPSysinfo"\\n
wget -c http://optusnet.dl.sourceforge.net/sourceforge/phpsysinfo/phpsysinfo-2.5.2-rc3.tar.gz

echo -e "Instalando o PHPSysinfo"
cd /var/www
tar -zxvf $TMPDIR/phpsysinfo-2.5.2-rc3.tar.gz
mv /var/www/phpsysinfo /var/www/info

cat <<EOF > /var/www/info/config.php
<?php
$webpath = "";
$default_lng='pt-br';
$default_template='black';
$hide_picklist = true;
$sensor_program = "";
$show_mount_point = true;
$show_bind = false;
$show_inodes = true;
$loadbar = false;
$addpaths = array();
$showerrors = true;
$temperatureformat = "c";
$hddtemp_avail = "tcp";      // read data from hddtemp deamon (localhost:7634)
$hddtemp_avail = "suid";     // read data from hddtemp programm (must be set suid)
$hide_mounts[] = '/dev/shm';
?>

EOF

#voltando para o $TMPDIR
cd $TMPDIR

echo -e \\n
echo -e "3 - Configurações"\\n

echo -e "3.1 - Definir a senha do usuário root do MySQL:"\\n
echo " "
echo "Informe a senha a ser utilizada pelo usuário root"
read SENHA_ROOT_MYSQL
mysqladmin -u root password '$SENHA_ROOT_MYSQL'
# Zera o arquivo de senhas, serão apresentadas ao usuário no fim da instalação
> $TMPDIR/senhas.sistema.txt
# Grava a senha do root no arquivo de senhas (zera o arquivo novamente, só pra garantir)
echo "Senha do usuário root no MySQL: $SENHA_ROOT_MYSQL" > $TMPDIR/senhas.sistema.txt

echo " "
echo -e "3.2 - Ativando o log do MySQL:"\\n


#echo "log = /var/log/mysql.log" >> /etc/mysql/my.cnf

# A forma abaixo é um pouco mais "estilosa" :)
# Backup do original
cp /etc/mysql/my.cnf /etc/mysql/my.cnf.orig
# Fazendo o trabalho sujo
cat /etc/mysql/my.cnf | sed “s/#log            = /var/log/mysql.log/log            = /var/log/mysql.log/g” > /tmp/tmp_mycnf
cp -f /tmp/mycnf /etc/mysql/my.cnf


echo -e "Reiniciar o serviço do MySQL para ativar as mudanças:"\\n

/etc/init.d/mysql restart

echo -e "3.3 - Adicionar um usuário e grupo para o maildrop no sistema"\\n

echo -e "Criando usuário e grupo com uid=128, gid=128"\\n

groupadd -g 128 maildrop
useradd -d /var/spool/mail -g 128 -u 128 -s /bin/false maildrop

echo -e "3.4 - Criar o banco do postfix no MySQL:"\\n

echo "Precisamos definir tres senhas: uma para o usuário do maildrop, uma para o usuario do postfixadmin, e uma para o usuário do postfix no MySQL"
echo " "
echo "Informe a senha para o usuário do Postfix"
read SENHA_USUARIO_DB_POSTFIX
echo " "
echo "Informe agora a senha para o usuário do Maildrop"
read SENHA_USUARIO_DB_MAILDROP
echo " "
echo "Informe agora a senha para o usuário do PostfixAdmin"
read SENHA_USUARIO_POSTFIXADMIN
echo " "

# Salva as senhas num arquivo texto, para referencia no fim da configuração.
echo "Senha do usuário postfix no MySQL: $SENHA_USUARIO_DB_POSTFIX" >> $TMPDIR/senhas.sistema.txt
echo "Senha do usuário maildrop no MySQL: $SENHA_USUARIO_DB_MAILDROP" >> $TMPDIR/senhas.sistema.txt
echo "Senha do usuário postfixadmin no MySQL: $SENHA_USUARIO_POSTFIXADMIN" >> $TMPDIR/senhas.sistema.txt

mysql -u root -p$SENHA_ROOT_MYSQL <<EOF
# INICIO DO postfix_mysql.db =================
#
# Postfix / MySQL
#
# Cria o usuário e senha do Postfix e Maildrop para
# acesso ao banco
#

USE mysql;

INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('$SENHA_USUARIO_DB_POSTFIX'));
INSERT INTO user (Host, User, Password) VALUES ('localhost','maildrop',password('$SENHA_USUARIO_DB_MAILDROP'));
INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','postfix','Y');
INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','maildrop','Y');

FLUSH PRIVILEGES;

#
# Cria o usuario de administração do PostfixAdmin
#

USE mysql;

INSERT INTO user (Host, User, Password) VALUES ('localhost','postfixadmin',password('$SENHA_USUARIO_POSTFIXADMIN'));
INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv)
VALUES ('localhost', 'postfix', 'postfixadmin', 'Y', 'Y', 'Y', 'Y');

FLUSH PRIVILEGES;


#
# Cria o banco postfix
#

CREATE DATABASE postfix;

USE postfix;

#
# Table structure for table admin
#
CREATE TABLE admin (
  username varchar(255) NOT NULL default '',
  password varchar(255) NOT NULL default '',
  domain varchar(255) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  modified datetime NOT NULL default '0000-00-00 00:00:00',
  active tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (username),
  KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Admins';
         
#
# Table structure for table alias
#
USE postfix;

CREATE TABLE alias (
  address varchar(255) NOT NULL default '',
  goto text NOT NULL,
  domain varchar(255) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00', 
  modified datetime NOT NULL default '0000-00-00 00:00:00',
  active tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (address),
  KEY address (address)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Aliases';
               
#
# Table structure for table domain
#
USE postfix;

CREATE TABLE domain (
  domain varchar(255) NOT NULL default '',
  description varchar(255) NOT NULL default '',
  aliases int(10) NOT NULL default '0',
  mailboxes int(10) NOT NULL default '0',
  maxquota int(10) NOT NULL default '0',
  transport varchar(255) NOT NULL default 'maildrop',
  backupmx tinyint(1) NOT NULL default '0',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  modified datetime NOT NULL default '0000-00-00 00:00:00',
  active tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (domain),
  KEY domain (domain)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Domains';
                        
#
# Table structure for table domain_admins
#
USE postfix;

CREATE TABLE domain_admins (
  username varchar(255) NOT NULL default '',
  domain varchar(255) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  active tinyint(1) NOT NULL default '1',
  KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Domain Admins';
                        
#
# Table structure for table log
#
USE postfix;

CREATE TABLE log (
  timestamp datetime NOT NULL default '0000-00-00 00:00:00',
  username varchar(255) NOT NULL default '',
  domain varchar(255) NOT NULL default '',
  action varchar(255) NOT NULL default '',
  data varchar(255) NOT NULL default '',
  KEY timestamp (timestamp)
) TYPE=MyISAM COMMENT='Postfix Admin - Log';

#
# Table structure for table mailbox
#
USE postfix;

CREATE TABLE mailbox (username varchar(255) NOT NULL default '', password varchar(255) NOT NULL default '', name varchar(255) NOT NULL default '',  home char(255) default '/postfix/',  maildir varchar(255) NOT NULL default '',  quota int(10) NOT NULL default '0',  domain varchar(255) NOT NULL default '',  created datetime NOT NULL default '0000-00-00 00:00:00',
  modified datetime NOT NULL default '0000-00-00 00:00:00',
  active tinyint(1) NOT NULL default '1',
  passwd_expire enum('N','Y') default 'Y',
  uid int(10) unsigned default '128',
  gid int(10) unsigned default '128',   
  PRIMARY KEY  (username),
  KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes';
                          
#
# Table structure for table vacation
#
USE postfix;

CREATE TABLE vacation (
  email varchar(255) NOT NULL default '',
  subject varchar(255) NOT NULL default '',
  body text NOT NULL,
  cache text NOT NULL,
  domain varchar(255) NOT NULL default '',
  created datetime NOT NULL default '0000-00-00 00:00:00',
  active tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (email),
  KEY email (email)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Vacation';                                        

EOF

# Fim da criacao de bancos e tabelas no mysql

echo -e "O banco e as tabelas, bem como o usuário do postfix foram criados."\\n

echo -e "Verifique a criação das tabelas usando o PHPMyAdmin, acesando o http://$IP_SERVIDOR/phpmyadmin pelo seu navegador"\\n

echo "Pressione ENTER para continuar"
read p

# Essas mensagens são dispensaveis... for now
#echo -e "Na tabela alias é onde serão criados os redirecionamentos de e-mail."\\n
#echo "Descrição: Na tabela domain é aonde você cria e indica o domínio."

echo -e \\n
echo "Descrição: A tabela mailbox é a principal tabela, onde serão criados os usuários e suas configurações como senha, diretório, cota de disco, etc."
echo -e \\n
echo "Descrição: tabela admin. Essa tabela é usado pelo PostfixAdmin para criar os administradores que irão ser responsáveis pela administração das contas dos respectivos domínios."
echo -e \\n
echo "O nosso banco de email está criado. O que temos que fazer, é "ensinar" ao Postfix a conectar-se no MySQL e pegar os dados que ele precisa sobre o usuario, mas antes, vamos configurar o Courier-IMAP."
echo -e \\n
echo "Pressione ENTER para continuar"
read p

echo -e "3.5 - Copiando o arquivo de exemplo de warning de cota:"\\n
cd /etc/courier
cp /usr/share/doc/courier-base/examples/quotawarnmsg.example quotawarnmsg

echo -e "3.6 - Configurar o courier para autenticar no MySQL:"\\n
echo "As configurações default dos arquivos imapd e pop3d, ao meu ver, já são boas."
echo "Altere caso você sinta necessidade."
echo "Criaremos /etc/courier/authmysqlrc. Esse arquivo é responsável pelas configurações do Courier para que ele conecte no MySQL e autentique os usuários. Edite-o conforme as suas configurações. "
echo -e \\n

# vim /etc/courier/authmysqlrc

cat <<EOF > /etc/courier/authmysqlrc
MYSQL_SERVER            localhost
MYSQL_USERNAME          postfix
MYSQL_PASSWORD          $SENHA_USUARIO_DB_POSTFIX
MYSQL_SOCKET            /var/run/mysqld/mysqld.sock
MYSQL_PORT              3306
MYSQL_OPT               0
MYSQL_DATABASE          postfix
MYSQL_USER_TABLE        mailbox
MYSQL_CRYPT_PWFIELD     password
MYSQL_UID_FIELD         uid
MYSQL_GID_FIELD         gid
MYSQL_LOGIN_FIELD       username
MYSQL_HOME_FIELD        home
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir
MYSQL_QUOTA_FIELD       quota
MYSQL_WHERE_CLAUSE      active=1
EOF

echo -e "Fazendo backup do /etc/courier/authdaemonrc para /etc/courier/authdaemonrc_OLD"\\n

if (test -f /etc/courier/authdaemonrc_OLD)
 then
    echo "Arquivo de backup já Existe"
 else 
    echo "Criando backup:"
    mv /etc/courier/authdaemonrc /etc/courier/authdaemonrc_OLD
fi

echo -e "Adicionando novo conteúdo ao /etc/courier/authdaemonrc"\\n 

cat <<EOF > /etc/courier/authdaemonrc
authmodulelist="authmysql"
authmodulelistorig="authcustom authcram authuserdb authldap authpgsql authmysql authpam"
daemons=5
version=""
authdaemonvar=/var/run/courier/authdaemon
EOF

echo "Pressione ENTER para continuar"
read p

echo -e "3.7 - Reiniciar os serviços, e testar se estão ativos:"\\n

/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-pop restart

echo -e \\n
echo -e "Testando o IMAP e POP 3com o Telnet:"\\
echo "Para testar com o telnet, abra uma outra janela e use os seguinte comandos:"
echo "\"telnet 0 143\" para  testar o IMAP"
echo "\"telnet 0 110\" para  testar o POP3"
echo "para desconectar do IMAP (porta 143), digite \"0 logout\""
echo "e para desconectar do POP (porta 110), digite simplesmente \"quit\""
echo -e \\n

echo "Pressione ENTER para continuar"
read p

echo -e "3.8 - Configurando o maildrop:"\\n
echo -e "Iremos criar um arquivo, chamado /etc/maildropmysql.config"\\n

cat <<EOF > /etc/maildropmysql.config
hostname        localhost
port            3306
socket          /var/run/mysqld/mysqld.sock
database        postfix
dbuser          maildrop
dbpw            $SENHA_USUARIO_DB_MAILDROP
dbtable         mailbox
default_gidnumber       128
default_uidnumber       128
uid_field               username
uidnumber_field         uid
gidnumber_field         gid
maildir_field           maildir
homedirectory_field     home
quota_field             quota
mailstatus_field        active
where_clause            ""
EOF

echo -e \\n
echo -e "Decompactar o maildrop em $TMPDIR e preparar para compilar:"\\n

cd $TMPDIR
tar xvjf maildrop-1.6.3.tar.bz2

echo -e \\n
echo -e "Configurar para compilação..."\\n
cd maildrop-1.6.3
./configure --prefix=/usr --sysconfdir=/etc/maildrop --enable-maildrop-uid=128 --enable-maildrop-gid=128 --enable-syslog=1 --enable-maildropmysql --enable-maildirquota

echo -e \\n
echo -e "Compilando...:"\\n
make

echo -e \\n
echo -e "Instalando...:"\\n
make install

echo -e \\n
echo -e "Obs: o download e compilação do maildrop vem propositamente após a criação do arquivo de configuração, pois este arquivo é usado durante o ./configure."\\n
echo -e "DICA: O Maildrop possui um recurso de aviso de email para o usuario caso a sua caixa postal ultrapasse a porcentagem de utilização de um valor especificado. Aqui usaremos 90%"\\n
echo -e "Sendo assim, você pode personalizar a mensagem de aviso que o usuario ira receber, bastando para isso editar o arquivo /etc/courier/quotawarnmsg."\\n

mkdir /etc/maildrop
echo "AVISO: Sua Caixa Postal está acima de 90%. Por favor delete alguns emails para liberar espaço." > /etc/courier/quotawarnmsg 
cd $TMPDIR

echo -e "3.9 - Configurando o Postfix:"\\n

echo -e "Criando arquivos de conexão do Postfix com MySQL..."\\n

cat <<EOF > /etc/postfix/mysql_virtual_alias_maps.cf
# mysql_virtual_alias_maps.cf
# -----------------------------
user = postfix
password = $SENHA_USUARIO_DB_POSTFIX
dbname = postfix
table = alias
select_field = goto
where_field = address
hosts = localhost
EOF

cat <<EOF > /etc/postfix/mysql_virtual_mailbox_maps.cf
# mysql_virtual_mailbox_maps.cf
# ------------------------------
user = postfix
password = $SENHA_USUARIO_DB_POSTFIX
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
hosts = localhost
EOF

cat <<EOF > /etc/postfix/mysql_transport_maps.cf
# mysql_transport_maps.cf
# --------------------------
user = postfix
password = $SENHA_USUARIO_DB_POSTFIX
hosts = localhost
dbname = postfix
table = domain
select_field = transport
where_field = domain
EOF

cat <<EOF > /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
# mysql_virtual_mailbox_limit_maps.cf
# ------------------------------------
user = postfix
password = $SENHA_USUARIO_DB_POSTFIX
dbname = postfix
table = mailbox
select_field = quota
where_field = username
hosts = localhost
EOF

echo "Arquivos criados... Pressione ENTER para prosseguir"
read p

echo -e "Fazendo backup do master.cf..."\\n

if (test -f /etc/postfix/master.cf_OLD)
 then
    echo "Arquivo de backup já existe, criando master.cf_OLD1"
    mv /etc/postfix/master.cf /etc/postfix/master.cf_OLD1
 else 
    echo "Criando backup:"
    mv /etc/postfix/master.cf /etc/postfix/master.cf_OLD
fi

echo -e "Adicionando novo conteúdo ao /etc/postfix/master.cf"\\n 

cat <<EOF > /etc/postfix/master.cf
# Arquivo somente com as linha habilitadas, sem os comentarios
#
smtp      inet  n       -       n       -       -       smtpd
pickup    fifo  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=maildrop argv=/usr/bin/maildrop -w 90 -d \${recipient}
old-cyrus unix  -       n       n       -       -       pipe
  flags=R user=cyrus argv=/usr/lib/cyrus/deliver -e -m \${extension} \${user}
cyrus     unix  -       n       n       -       -       pipe
  user=cyrus argv=/usr/lib/cyrus/deliver -e -r \${sender} -m \${extension} \${user}
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a\$sender - \$nexthop!rmail (\$recipient)
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r \$nexthop (\$recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f \$sender \$nexthop \$recipient
#
#
EOF


echo -e "Fazendo uma copia backup do arquivo /etc/postfix/main.cf:"\\n

if (test -f /etc/postfix/main.cf_OLD)
 then
    echo "Arquivo de backup já existe, criando main.cf_OLD1"
    mv /etc/postfix/main.cf /etc/postfix/main.cf_OLD1
 else 
    echo "Criando backup:"
    mv /etc/postfix/main.cf /etc/postfix/main.cf_OLD
fi

echo -e "Por favor, informe o host do servidor e o nome do seu dominio (ex. mail.meudominio.com.br)"
read HOSTNAME
echo $HOSTNAME > /etc/hostname
DOMINIO=`echo $HOSTNAME |cut -f 2-10 -d "."`

echo -e \\n
echo -e "Fazendo as alteracoes necessárias no /etc/postfix/main.cf:"\\n

cat <<EOF > /etc/postfix/main.cf
#======== CONFIGURACOES BASICAS ===============
queue_directory = /var/spool/postfix/
program_directory=/usr/sbin
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
default_privs=nobody
default_transport=smtp
local_recipient_maps =
delay_warning_time = 1m
alias_maps=hash:/etc/postfix/aliases
alias_database=hash:/etc/postfix/aliases
readme_directory = no
sample_directory = /etc/postfix
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
manpage_directory = /usr/local/man
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
smtpd_banner=\$myhostname ESMTP
disable_vrfy_command=yes
home_mailbox=Maildir/

# ========== NOME DO DOMÃNIO ===========
myhostname=$HOSTNAME
mydomain=$DOMINIO
myorigin= \$mydomain
mydestination= \$mydomain, \$transport_maps

#=====REDES p/ Relay======
mynetworks=127.0.0.0/8 $MINHA_REDE

#======== MYSQL ==============
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /postfix
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_uid_maps = static:128
virtual_gid_maps = static:128
transport_maps = mysql:/etc/postfix/mysql_transport_maps.cf

#======= Quota ============
virtual_mailbox_limit_inbox = no
virtual_mailbox_limit_maps= mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_extended = yes
virtual_create_maildirsize = yes
virtual_mailbox_limit = 100000000
virtual_maildir_limit_message = Desculpe, este usuario esta com a caixa postal lotada, tente enviar o e-mail novamente mais tarde.
virtual_overquota_bounce = yes

# =======MAILDROP ==========
fallback_transport = /usr/bin/maildrop
maildrop_destination_recipient_limit = 1
unknown_local_recipient_reject_code = 450


EOF

echo -e "Arquivos foram gerados e configurados, agora vamos reiniciar o serviço do Postfix."\\n
echo "Pressione ENTER para prosseguir"
read p

# Rodando newaliases
touch /etc/postfix/aliases
newaliases

# Parando
/etc/init.d/postfix restart

echo -e \\n
echo -e "3.10 - Inserindo parametros para testes"\\n
echo -e "Dica: o usuário postfix não precisa de permissão para inserir dados, isto cabe ao postfixadmin; "
echo -e "Neste momento, vamos logar no banco MySQL e inserir um domínio e dois "
echo -e "usuários de email para testes: uteste01@dominio1.com.br e uteste02@dominio1.com.br."\\n
echo -e "Logando como root no MySQL..."\\n

mysql -u root -p$SENHA_ROOT_MYSQL <<EOF
USE postfix;

INSERT INTO domain (domain,description,transport,active) VALUES ('dominio1.com.br','Dominio de Teste','maildrop','1');
INSERT INTO mailbox (username,password,name,home,maildir,quota,domain) VALUES ('uteste01@dominio1.com.br' ,encrypt('$SENHA_EMAIL_UTESTE01') , 'Usuario Teste 001' ,
                '/postfix/' ,'dominio1.com.br/uteste01/Maildir/' , '10000000S' ,'dominio1.com.br');
INSERT INTO mailbox (username,password,name,home,maildir,quota,domain) VALUES ('uteste02@dominio1.com.br' ,encrypt('$SENHA_EMAIL_UTESTE02') , 'Usuario Teste 002' ,
                '/postfix/' ,'dominio1.com.br/uteste02/Maildir/' , '10000000S' ,'dominio1.com.br');
EOF

#
echo -e \\n
echo "Pressione ENTER para prosseguir"
read p

echo -e "Criando o HOME dos usuários:"\\n
mkdir -p /postfix/dominio1.com.br/uteste01
maildirmake /postfix/dominio1.com.br/uteste01/Maildir
mkdir -p /postfix/dominio1.com.br/uteste02
maildirmake /postfix/dominio1.com.br/uteste02/Maildir
chown maildrop:www-data /postfix/ -R
chmod 770 /postfix/ -R

echo -e "3.11 - Testar a entrega de mensagens para o usuário:"\\n
echo -e "Será enviado um email para o uteste01@dominio1.com.br para testar."\\n
echo "Pressione ENTER para prosseguir"
read p

cat /etc/modules.conf | maildrop -d uteste01@dominio1.com.br
echo -e "Conferindo se a mensagem foi entregue:"\\n
cd /postfix/dominio1.com.br/uteste01/Maildir/new
ls -lha
cd $TMPDIR
echo -e \\n
echo "Pressione ENTER para prosseguir"
read p

echo -e "Testar autenticação IMAP e POP3 via banco usando telnet:"\\n
echo "Para testar com o telnet, abra uma outra janela e use os seguinte comandos:"
echo "\"telnet 0 143\" para  testar o IMAP"
echo "\"telnet 0 110\" para  testar o POP3"
echo "para desconectar do IMAP (porta 143), digite \"0 logout\""
echo "e para desconectar do POP (porta 110), digite simplesmente \"quit\""
echo " "
echo "Pressione ENTER para continuar"
read p

echo -e "Até agora provavelmente tudo funcionou corretamente. Caso tenha tido problemas, verifique no log do MySQL como a query está sendo feita, isso pode te poupar muito tempo de dor de cabeça."\\n
echo "Pressione ENTER para prosseguir"
read p

echo -e "3.12 - Cota de e-mails"\\n
echo -e "Quem vai ser responsável pelo controle de cota de disco nesse ambiente é o Maildrop."\\n
echo -e "Os valores de cotas serão cadastrados no banco de dados, sendo independente para cada usuário. O Maildrop irá ler as tabelas do MySQL e conforme o valor especificado, ele irá fazer o controle de tal cota."\\n
echo -e "Para fazer o teste, instalamos no primeiro passo o nail, que é um cliente de e-mail na console, que permite o envio de anexos, com o parametro -a:"\\n

echo -e \\n
echo "Pressione ENTER para testar o nail ( se demorar demais, CONTROL+D para sair do nail )"
read p

cat /etc/fstab | nail -s "Teste de envio de email com anexo" -a $TMPDIR/maildrop-1.6.3.tar.bz2 uteste01@dominio1.com.br

echo -e "Após isto, vamos verificar o que o log do servidor de e-mail nos diz:"\\n
tail -n 10 /var/log/mail.log
echo -e \\n
echo "pressione ENTER para prosseguir"
read p

echo -e "3.13 - SASL2 no Postfix:"\\n
echo -e "O SASL permite que um usuário consiga enviar email pelo servidor smtp (relay) sem que o seu IP esteja na lista de IP's "
echo -e "liberados para relay, no postfix é configurado na linha \"mynetworks\" no arquivo main.cf."\\n
echo -e "O requisito para enviar email é que o usuário exista no sistema. Isso é um ótimo recurso, pois o usuário onde "
echo -e "estiver pode enviar email pelo seu servidor, sem que você precise liberar o \"relay\" para todo mundo."\\n

cat <<EOF >> /usr/lib/sasl2/smtpd.conf
# /usr/lib/sasl2/smtpd.conf
# -----------
pwcheck_method: saslauthd
mech_list: plain login
log_level: 7
EOF

cat <<EOF >> /etc/postfix/sasl/smtpd.conf
# /usr/lib/sasl2/smtpd.conf
# -----------
pwcheck_method: saslauthd
mech_list: plain login
log_level: 7
EOF

cat <<EOF >> /etc/pam.d/smtp
# /etc/pam.d/smtp
# ------------------------
#%PAM-1.0

auth     sufficient   /lib/security/pam_unix_auth.so try_first_pass
auth     optional   /lib/security/pam_mysql.so user=postfix passwd=$SENHA_USUARIO_DB_POSTFIX host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1
account  sufficient   /lib/security/pam_unix_acct.so
account  required   /lib/security/pam_mysql.so user=postfix passwd=$SENHA_USUARIO_DB_POSTFIX host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1
EOF

echo -e "Habilitando o SASL no Postfix:"\\n
cat <<EOF >> /etc/postfix/main.cf

# ====== SASL ================
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
   permit_sasl_authenticated,
   permit_mynetworks,
   check_relay_domains
EOF

echo "START=yes" >> /etc/default/saslauthd
echo "PARAMS=\" -r\"" >> /etc/default/saslauthd

echo -e "Adicionando o postfix no grupo do sasl"\\n
adduser postfix sasl
echo -e "Startando os serviços de autenticação SASL, e reiniciando o postfix:"
/etc/init.d/saslauthd start
/etc/init.d/postfix restart

echo -e \\n
echo -e "3.14 - Configurar o amavis"\\n

echo "Instalando modulos adicionais do perl..."
apt-get install libconvert-tnef-perl libio-zlib-perl libarchive-tar-perl libsys-syslog-perl libemail-mime-perl libmime-explode-perl libmime-perl libmd5-perl libdatetime-perl libpsp-html-parser-perl libnet-sident-perl libwww-perl libfile-mmagic-perl libconfig-inifiles-perl libconvert-uulib-perl libevtlog0 libmime-base32-perl perl-modules  libvalidate-net-perl libnet-smtp-server-perl libnet-server-perl libdbix-profile-perl libdigest-sha1-perl libhtml-parser-perl libnet-dns-perl libwww-perl 

echo "Alguns modulos do perl não existem no repositorio APT do Debian, por conta disto, os instalaremos via CPAN, o processo é automatizado, ele já baixa, descompacta e compila os pacotes necessários, você precisará responder a algumas questões, em sua grande maioria (99%) as respostas padrão são as recomendadas, de toda forma, se preferir leia cada uma delas antes de responder..."
echo " "
echo "Pressione enter para prosseguir com a instalação dos modulos via CPAN"

# Fazendo a configuração do CPAN sem interação com o usuário:
if (test -d /etc/perl/CPAN)
 then
    # O diretorio existe, prosseguimos com a criação do arquivo de configuração
    cat <<EOF >> /etc/perl/CPAN/Config.pm
    
# This is CPAN.pm's systemwide configuration file. This file provides
# defaults for users, and the values can be changed in a per-user
# configuration file. The user-config file is being looked for as
# ~/.cpan/CPAN/MyConfig.pm.

$CPAN::Config = {
  'build_cache' => q[10],
  'build_dir' => q[/root/.cpan/build],
  'cache_metadata' => q[1],
  'cpan_home' => q[/root/.cpan],
  'cpan_version_check' => q[1],
  'dontload_hash' => {  },
  'ftp' => q[/usr/bin/ftp],
  'ftp_proxy' => q[],
  'getcwd' => q[cwd],
  'gpg' => q[/usr/bin/gpg],
  'gzip' => q[/bin/gzip],
  'histfile' => q[/root/.cpan/histfile],
  'histsize' => q[100],
  'http_proxy' => q[],
  'inactivity_timeout' => q[0],
  'index_expire' => q[1],
  'inhibit_startup_message' => q[0],
  'keep_source_where' => q[/root/.cpan/sources],
  'lynx' => q[/usr/bin/lynx],
  'make' => q[/usr/bin/make],
  'make_arg' => q[],
  'make_install_arg' => q[],
  'makepl_arg' => q[INSTALLDIRS=site],
  'ncftp' => q[/usr/bin/ncftp],
  'ncftpget' => q[/usr/bin/ncftpget],
  'no_proxy' => q[],
  'pager' => q[/usr/bin/less],
  'prerequisites_policy' => q[ask],
  'scan_cache' => q[atstart],
  'shell' => q[/bin/bash],
  'tar' => q[/bin/tar],
  'term_is_latin' => q[1],
  'unzip' => q[/usr/bin/unzip],
  'urllist' => [q[ftp://cpan.mirrors.skynet.be/pub/CPAN]],
  'wget' => q[/usr/bin/wget],
};
1;
__END__

    EOF
 else 
    # O diretorio não existe, o criamos, setamos as permissões e prosseguimos com a criação do arquivo de configuração
    mkdir /etc/perl/CPAN
    chmod 755 /etc/perl/CPAN
    cat <<EOF >> /etc/perl/CPAN/Config.pm

# This is CPAN.pm's systemwide configuration file. This file provides
# defaults for users, and the values can be changed in a per-user
# configuration file. The user-config file is being looked for as
# ~/.cpan/CPAN/MyConfig.pm.

$CPAN::Config = {
  'build_cache' => q[10],
  'build_dir' => q[/root/.cpan/build],
  'cache_metadata' => q[1],
  'cpan_home' => q[/root/.cpan],
  'cpan_version_check' => q[1],
  'dontload_hash' => {  },
  'ftp' => q[/usr/bin/ftp],
  'ftp_proxy' => q[],
  'getcwd' => q[cwd],
  'gpg' => q[/usr/bin/gpg],
  'gzip' => q[/bin/gzip],
  'histfile' => q[/root/.cpan/histfile],
  'histsize' => q[100],
  'http_proxy' => q[],
  'inactivity_timeout' => q[0],
  'index_expire' => q[1],
  'inhibit_startup_message' => q[0],
  'keep_source_where' => q[/root/.cpan/sources],
  'lynx' => q[/usr/bin/lynx],
  'make' => q[/usr/bin/make],
  'make_arg' => q[],
  'make_install_arg' => q[],
  'makepl_arg' => q[INSTALLDIRS=site],
  'ncftp' => q[/usr/bin/ncftp],
  'ncftpget' => q[/usr/bin/ncftpget],
  'no_proxy' => q[],
  'pager' => q[/usr/bin/less],
  'prerequisites_policy' => q[ask],
  'scan_cache' => q[atstart],
  'shell' => q[/bin/bash],
  'tar' => q[/bin/tar],
  'term_is_latin' => q[1],
  'unzip' => q[/usr/bin/unzip],
  'urllist' => [q[ftp://cpan.mirrors.skynet.be/pub/CPAN]],
  'wget' => q[/usr/bin/wget],
};
1;
__END__
    
    EOF
fi

# Configuração do CPAN ok, vamos agora criar o MIRRORED.BY:
if (test -d /root/.cpan/sources)
 then
 # Diretorio existe, vamos criar o MIRRORED.BY
 cat <<EOF >> MIRRORED.BY
 
# Explanation of the syntax:
#
# hostname.of.the.CPAN.mirroring.site:
#   frequency        = "daily/bidaily/.../weekly"
#   dst_ftp          = "ftp://the.same.host.name:/CPAN/mirror/directory/"
#   dst_http         = "http://the.same.host.name:/CPAN/mirror/directory/"
#   dst_rsync        = "the.same.host.name::CPAN"
#   dst_location     = "city, (area?, )country, continent (lat long)"
#   dst_organisation = "full organisation name"
#   dst_timezone     = "GMT[+-]n"
#   dst_bandwidth    = "Approximate connection speed,e.g. T1, E3, etc."
#   dst_contact      = "email.address.to.contact@for.this.mirror"
#   dst_src          = "host.that.you.mirror.from"
#   dst_loadbal        = "Y" or "N" Join the load balancing pool for ftp.cpan.org
#   dst_notes        = "(optional field) access restrictions, for example?"
#
# Notes:
# - The "area" in dst_location is optional.
#   It is the state (United States), county, prefecture, district.
# - The "lon,lat" in dst_location are required.
#   They are the latitude, longtitude, in degrees.minutes_IN_DECIMAL
#   (45 minutes = 0.75).
# - The dst_organisation tries to be correct but in some cases it
#   cannot be because the format is so simple:
#   - Greek/Cyrillic/Kanji/Hanzi/... cannot be rendered in ISO Latin 1
#   - the format is usually "native (english)"
#     but for example in Canada, well, is native English or French?
#   - sometimes the name of the organisation is already
#     in English (funet, sunet, arnes, math.ncu, ...)
#   - the contact email address is obfuscated
#


rucus.ru.ac.za:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.rucus.ru.ac.za/pub/perl/CPAN/"
  dst_http         = "http://ftp.rucus.ru.ac.za/pub/perl/CPAN/"
  dst_location     = "Grahamstown, Eastern Cape, South Africa, Africa (-33.313028 26.519528)"
  dst_organisation = "Rhodes University Computer Users' Society"
  dst_timezone     = "+2"
  dst_bandwidth    = "T3"
  dst_contact      = "rucus.ru.ac.za*webteam"
  dst_src          = "cont1.lhx.teleglobe.net"

# dst_dst          = "ftp://ftp.rucus.ru.ac.za/pub/perl/CPAN/"
# dst_contact      = "mailto:rucus.ru.ac.za*webteam
# dst_src          = "cont1.lhx.teleglobe.net"

is.co.za:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.is.co.za/programming/perl/CPAN/"
  dst_location     = "Johannesburg, South Africa, Africa (-26.1992 28.0564)"
  dst_organisation = "Internet Solution"
  dst_timezone     = "+2"
  dst_contact      = "is.co.za,ftp-admin"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "ftp://ftp.is.co.za/programming/perl/CPAN/"
# dst_contact      = "mailto:is.co.za,ftp-admin
# dst_src          = "ftp.funet.fi"

saix.net:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.saix.net/pub/CPAN/"
  dst_location     = "Parow, Western Cape, South Africa, Africa (-33.9064 18.5631)"
  dst_organisation = "South African Internet eXchange (SAIX)"
  dst_timezone     = "+2"
  dst_bandwidth    = "T3"
  dst_contact      = "saix.net'ftp"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "ftp://ftp.saix.net/pub/CPAN/"
# dst_contact      = "mailto:saix.net'ftp
# dst_src          = "ftp.funet.fi"

cpan.linuxforum.net:
  frequency        = "daily"
  dst_ftp          = ""
  dst_http         = "http://cpan.linuxforum.net/"
  dst_location     = "Beijing, Zhonghua, China, Asia (39.9118 116.3792)"
  dst_organisation = "China GNU/Linux Forum"
  dst_timezone     = "+8"
  dst_contact      = "linuxforum.net&mirror atwell.co.jp&yusun"
  dst_src          = "ftp.pacific.net.hk"

# dst_dst          = "http://cpan.linuxforum.net/"
# dst_contact      = "mailto:linuxforum.net&mirror atwell.co.jp&yusun
# dst_src          = "ftp.pacific.net.hk"

dayouit.com:
  frequency        = "daily"
  dst_ftp          = ""
  dst_http         = "http://mirrors.dayouit.com/CPAN/"
  dst_location     = "Guangzhou, Guangdong, China, Asia (23.125 113.23)"
  dst_organisation = "damail.cn"
  dst_timezone     = "+8"
  dst_bandwidth    = "T3"
  dst_contact      = "damail.cn!srni"
  dst_src          = "rsync.nic.funet.fi"

# dst_dst          = "http://mirrors.dayouit.com/CPAN/"
# dst_contact      = "mailto:damail.cn!srni
# dst_src          = "rsync.nic.funet.fi"

hknet.com:
  frequency        = "daily"
  dst_ftp          = "ftp://mirrors.hknet.com/CPAN"
  dst_location     = "Hong Kong SAR, China, Asia (22.3866 114.124)"
  dst_organisation = "HKNet Company Limited"
  dst_timezone     = "+8"
  dst_bandwidth    = "200M"
  dst_contact      = "hknet.com*stephen"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "ftp://mirrors.hknet.com/CPAN"
# dst_contact      = "mailto:hknet.com*stephen
# dst_src          = "ftp.funet.fi"

vmmatrix.net:
  frequency        = "daily"
  dst_ftp          = ""
  dst_http         = "http://mirror.vmmatrix.net/CPAN/"
  dst_location     = "Shanghai, China, Asia (34.14 123.29)"
  dst_organisation = "Vmmatrix Co., Ltd."
  dst_timezone     = "+8"
  dst_bandwidth    = "100Mbit/s"
  dst_contact      = "vmmatrix.com{huangmingyou"
  dst_src          = "cpan.org"

# dst_dst          = "http://mirror.vmmatrix.net/CPAN/"
# dst_contact      = "mailto:vmmatrix.com{huangmingyou
# dst_src          = "cpan.org"

cuhk.edu.hk:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/"
  dst_http         = "http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/"
  dst_location     = "Hong Kong, Shatin, Hong Kong, Asia (22.42 114.2)"
  dst_organisation = "The Chinese University of Hong Kong"
  dst_timezone     = "+8"
  dst_bandwidth    = "1Gbps"
  dst_contact      = "ftp.cuhk.edu.hk}ftp-admin"
  dst_src          = "ftp://mirrors.hknet.com/CPAN"

# dst_dst          = "ftp://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/"
# dst_contact      = "mailto:ftp.cuhk.edu.hk}ftp-admin
# dst_src          = "ftp://mirrors.hknet.com/CPAN"

cpan.archive.hk:
  frequency        = "daily"
  dst_ftp          = ""
  dst_http         = "http://www.archive.hk/cpan/"
  dst_location     = "Pokfulam, Hong Kong, Asia (21.75 115)"
  dst_organisation = "Archive.hk"
  dst_timezone     = "+8"
  dst_bandwidth    = "OC3"
  dst_contact      = "archive.hk,admin"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "http://www.archive.hk/cpan/"
# dst_contact      = "mailto:archive.hk,admin
# dst_src          = "ftp.funet.fi"

gnowledge.org:
  frequency        = "daily"
  dst_ftp          = ""
  dst_http         = "http://mirror.gnowledge.org/cpan/"
  dst_location     = "Mumbai, India, Asia (18.96 72.82)"
  dst_organisation = "Free Software Foundation of India"
  dst_timezone     = "+5.5"
  dst_bandwidth    = "E3"
  dst_contact      = "gnu.org.in?b.ghose"
  dst_src          = "rsync.nic.funet.fi"

# dst_dst          = "http://mirror.gnowledge.org/cpan/"
# dst_contact      = "mailto:gnu.org.in?b.ghose
# dst_src          = "rsync.nic.funet.fi"

komo.vlsm.org:
  frequency        = "daily"
  dst_ftp          = "ftp://komo.vlsm.org/CPAN/"
  dst_http         = "http://komo.vlsm.org/CPAN/"
  dst_rsync        = "komo.vlsm.org::CPAN"
  dst_location     = "Jakarta, Indonesia, Asia (-6.11 106.5)"
  dst_organisation = "vLSM.org"
  dst_timezone     = "+7"
  dst_bandwidth    = "100Mbps"
  dst_contact      = "yahoogroups.com/writeme05"
  dst_src          = "rsync.nic.funet.fi"
  dst_notes        = "64 kbps for international access limit"

# dst_dst          = "ftp://komo.vlsm.org/CPAN/"
# dst_contact      = "mailto:yahoogroups.com/writeme05
# dst_src          = "rsync.nic.funet.fi"

cpan.shatel.ir:
  frequency        = "daily"
  dst_ftp          = ""
  dst_http         = "http://cpan.shatel.ir/"
  dst_location     = "Tehran, Iran, Asia (35.44 51.30)"
  dst_organisation = "SHATEL Network"
  dst_timezone     = "+3.5"
  dst_bandwidth    = "E3"
  dst_contact      = "shatel.ir,\babak farrokhi.net\babak"
  dst_src          = "ftp.gwdg.de"

# dst_dst          = "http://cpan.shatel.ir/"
# dst_contact      = "mailto:shatel.ir,\babak farrokhi.net\babak
# dst_src          = "ftp.gwdg.de"

mirimar.net:
  frequency        = "daily"
  dst_ftp          = ""
  dst_http         = "http://mirror.mirimar.net/cpan/"
  dst_location     = "Haifa, HeKarmel, Mahoz, Israel, Asia (32.8000 34.9833)"
  dst_organisation = "Mirimar Networks"
  dst_timezone     = "+2"
  dst_bandwidth    = "5Mbps"
  dst_contact      = "mirimar.net'mirror"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "http://mirror.mirimar.net/cpan/"
# dst_contact      = "mailto:mirimar.net'mirror
# dst_src          = "ftp.funet.fi"

initworld.com:
  frequency        = "daily"
  dst_ftp          = ""
  dst_http         = "http://cpan.initworld.com/"
  dst_location     = "Petah-Tikva, Israel, Asia (32.0833 34.8833)"
  dst_organisation = "Init World"
  dst_timezone     = "+2"
  dst_bandwidth    = "10Mbps"
  dst_contact      = "initworld.com+master"
  dst_src          = "rsync.nic.funet.fi"

# dst_dst          = "http://cpan.initworld.com/"
# dst_contact      = "mailto:initworld.com+master
# dst_src          = "rsync.nic.funet.fi"

u-aizu.ac.jp:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.u-aizu.ac.jp/pub/CPAN"
  dst_location     = "Aizu-Wakamatsu, Tohoku-chiho, Fukushima, Japan, Asia (37.4333 139.9821)"
  dst_organisation = "University of Aizu"
  dst_timezone     = "+9"
  dst_bandwidth    = "T2(6Mbps)"
  dst_contact      = "u-aizu.ac.jp)ftp-admin"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "ftp://ftp.u-aizu.ac.jp/pub/CPAN"
# dst_contact      = "mailto:u-aizu.ac.jp)ftp-admin
# dst_src          = "ftp.funet.fi"

kddilabs.jp:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.kddilabs.jp/CPAN/"
  dst_rsync        = "ftp.kddilabs.jp::cpan"
  dst_location     = "Kamifukuoka, Kanto, Saitama-ken, Japan, Asia (35.8746 139.5304)"
  dst_organisation = "KDDI R&D Labs, Inc."
  dst_timezone     = "+9"
  dst_contact      = "kddilabs.jp+ftpadmin"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "ftp://ftp.kddilabs.jp/CPAN/"
# dst_contact      = "mailto:kddilabs.jp+ftpadmin
# dst_src          = "ftp.funet.fi"

NAIST:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.nara.wide.ad.jp/pub/CPAN/"
  dst_http         = "http://ftp.nara.wide.ad.jp/pub/CPAN/"
  dst_rsync        = "ftp.nara.wide.ad.jp::cpan/"
  dst_location     = "Takayama-cho, Japan, Asia (34.75 135.73)"
  dst_organisation = "Nara Institute of Science and Technology"
  dst_timezone     = "+9"
  dst_bandwidth    = "1Gbps"
  dst_contact      = "is.naist.jp*ftp-admin"
  dst_src          = "ftp.funet.fi"
  dst_notes        = "ftp max connection 100, rsync max connection 30"

# dst_dst          = "ftp://ftp.nara.wide.ad.jp/pub/CPAN/"
# dst_contact      = "mailto:is.naist.jp*ftp-admin
# dst_src          = "ftp.funet.fi"

jaist.ac.jp:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/"
  dst_location     = "Tatsunokuchi, Nomi, Ishikawa, Japan, Asia (36.4251 136.5739)"
  dst_organisation = "Japan Advanced Institute of Science and Technology"
  dst_timezone     = "+9"
  dst_contact      = "jaist.ac.jp;ftp-admin"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/"
# dst_contact      = "mailto:jaist.ac.jp;ftp-admin
# dst_src          = "ftp.funet.fi"

cpan.jp:
  frequency        = "daily"
  dst_ftp          = ""
  dst_http         = "http://ftp.cpan.jp/"
  dst_location     = "Tokyo, Shibuya-ward, Japan, Asia (35.667 139.700)"
  dst_organisation = "IFT Co., Ltd."
  dst_timezone     = "+9"
  dst_bandwidth    = "1Gbit"
  dst_contact      = "cpan.jp]info"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "http://ftp.cpan.jp/"
# dst_contact      = "mailto:cpan.jp]info
# dst_src          = "ftp.funet.fi"

dti.ad.jp:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.dti.ad.jp/pub/lang/CPAN/"
  dst_location     = "Tokyo, Minato-ku, Japan, Asia (35.6754 139.7694)"
  dst_organisation = "Dream Train Internet Inc."
  dst_timezone     = "+9"
  dst_contact      = "dti.ad.jp!ftp-admin"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "ftp://ftp.dti.ad.jp/pub/lang/CPAN/"
# dst_contact      = "mailto:dti.ad.jp!ftp-admin
# dst_src          = "ftp.funet.fi"

ring.gr.jp:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/"
  dst_location     = "Tsukuba, Ibaraki, Kanto, Ibaraki-ken, Japan, Asia (36.2793 140.4408)"
  dst_organisation = "Ring Server Project"
  dst_timezone     = "+9"
  dst_contact      = "ring.gr.jp$ftpadmin"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/"
# dst_contact      = "mailto:ring.gr.jp$ftpadmin
# dst_src          = "ftp.funet.fi"

yz.yamagata-u.ac.jp:
  frequency        = "4 times a day"
  dst_ftp          = "ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/"
  dst_http         = "http://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/"
  dst_location     = "Yonezawa, Yamagata-ken, Japan, Asia (37.897 140.108)"
  dst_organisation = "Yamagata"
  dst_timezone     = "+9"
  dst_bandwidth    = "100Mbps"
  dst_contact      = "ftp.yz.yamagata-u.ac.jp|www-admin"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/"
# dst_contact      = "mailto:ftp.yz.yamagata-u.ac.jp|www-admin
# dst_src          = "ftp.funet.fi"

cpan.MyBSD.org.my:
  frequency        = "daily"
  dst_ftp          = ""
  dst_http         = "http://cpan.MyBSD.org.my"
  dst_location     = "Gombak, Selangor, Malaysia, Asia (3.2496 101.5496)"
  dst_organisation = "MyBSD Malaysia Project (http://www.MyBSD.org.my)"
  dst_timezone     = "+8"
  dst_bandwidth    = "T3"
  dst_contact      = "MyBSD.org.my'mirror-adm"
  dst_src          = "rsync.nic.funet.fi"
  dst_notes        = "The intention of this mirror is to serve for Malaysia and the South East Asia region."

# dst_dst          = "http://cpan.MyBSD.org.my"
# dst_contact      = "mailto:MyBSD.org.my'mirror-adm
# dst_src          = "rsync.nic.funet.fi"

cpan.bieffe.org:
  frequency        = "daily"
  dst_ftp          = ""
  dst_http         = "http://cpan.bieffe.org"
  dst_rsync        = "cpan.bieffe.org::CPAN"
  dst_location     = "Kuala Lumpur, Malaysia, Asia (3.2496 101.5496)"
  dst_organisation = "ChatzRadio InterNET networks"
  dst_timezone     = "+8"
  dst_bandwidth    = "T3"
  dst_contact      = "yahoo.com}ratiogear"
  dst_src          = "ftp.kddlabs.co.jp"

# dst_dst          = "http://cpan.bieffe.org"
# dst_contact      = "mailto:yahoo.com}ratiogear
# dst_src          = "ftp.kddlabs.co.jp"

opensourcecommunity.ph:
  frequency        = "daily"
  dst_ftp          = ""
  dst_http         = "http://www.opensourcecommunity.ph/CPAN"
  dst_location     = "Zamboanga City, Philippines, Asia (6.9 122.25)"
  dst_organisation = "Ateneo de Zamboanga University"
  dst_timezone     = "+8"
  dst_bandwidth    = "E1"
  dst_contact      = "zambonet.ph*assist"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "http://www.opensourcecommunity.ph/CPAN"
# dst_contact      = "mailto:zambonet.ph*assist
# dst_src          = "ftp.funet.fi"

kaist.ac.kr:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.kaist.ac.kr/pub/CPAN"
  dst_http         = "http://ftp.kaist.ac.kr/pub/CPAN"
  dst_rsync        = "ftp.kaist.ac.kr::cpan"
  dst_location     = "Daejeon, Republic of Korea, Asia (36.37 127.37)"
  dst_organisation = "Korea Advanced Institute of Science and Technology (KAIST)"
  dst_timezone     = "+9"
  dst_bandwidth    = "1Gbps"
  dst_contact      = "ftp.kaist.ac.kr{ftp"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "ftp://ftp.kaist.ac.kr/pub/CPAN"
# dst_contact      = "mailto:ftp.kaist.ac.kr{ftp
# dst_src          = "ftp.funet.fi"

kr.FreeBSD.org:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.kr.FreeBSD.org/pub/CPAN"
  dst_http         = "http://mirror.kr.FreeBSD.org/CPAN"
  dst_rsync        = "ftp.kr.FreeBSD.org::CPAN"
  dst_location     = "Seoul, Republic of Korea, Asia (37.56 126.98)"
  dst_organisation = "Korea FreeBSD Users Group"
  dst_timezone     = "+9"
  dst_bandwidth    = "100Mbps"
  dst_contact      = "kr.FreeBSD.org:admin"
  dst_src          = "rsync.nic.funet.fi"

# dst_dst          = "ftp://ftp.kr.FreeBSD.org/pub/CPAN"
# dst_contact      = "mailto:kr.FreeBSD.org:admin
# dst_src          = "rsync.nic.funet.fi"

uos.ac.kr:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.uos.ac.kr/CPAN"
  dst_http         = "http://ftp.uos.ac.kr/CPAN"
  dst_location     = "Seoul, Republic of Korea, Asia (37.56 126.98)"
  dst_organisation = "University of Seoul"
  dst_timezone     = "+9"
  dst_bandwidth    = "100Mbit"
  dst_contact      = "uos.ac.kr?reduck96"
  dst_src          = "rsync.nic.funet.fi"

# dst_dst          = "ftp://ftp.uos.ac.kr/CPAN"
# dst_contact      = "mailto:uos.ac.kr?reduck96
# dst_src          = "rsync.nic.funet.fi"

cpan.tomsk.ru:
  frequency        = "daily"
  dst_ftp          = "ftp://cpan.tomsk.ru/"
  dst_http         = "http://cpan.tomsk.ru"
  dst_location     = "Tomsk, Siberia, Russian Federation, Asia (56.5 84.9667)"
  dst_organisation = "TLUG"
  dst_timezone     = "+7"
  dst_bandwidth    = "T2"
  dst_contact      = "grob.ru%andrew"
  dst_src          = "ftp.cpan.org"

# dst_dst          = "ftp://cpan.tomsk.ru/"
# dst_contact      = "mailto:grob.ru%andrew
# dst_src          = "ftp.cpan.org"

isu.net.sa:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.isu.net.sa/pub/CPAN/"
  dst_location     = "Riyadh, al-Wusta, Saudi Arabia, Asia (24.6439 46.7406)"
  dst_organisation = "King Abdulaziz City for Science and Technology / Internet Services Unit"
  dst_timezone     = "+3"
  dst_contact      = "isu.net.sa$mirrors"
  dst_src          = "ftp.cpan.org"

# dst_dst          = "ftp://ftp.isu.net.sa/pub/CPAN/"
# dst_contact      = "mailto:isu.net.sa$mirrors
# dst_src          = "ftp.cpan.org"

averse.net:
  frequency        = "daily"
  dst_ftp          = "ftp://mirror.averse.net/pub/CPAN"
  dst_http         = "http://mirror.averse.net/pub/CPAN"
  dst_rsync        = "mirror.averse.net::cpan"
  dst_location     = "Singapore, Singapore, Asia (1.283 103.85)"
  dst_organisation = "averse.net"
  dst_timezone     = "+8"
  dst_bandwidth    = "T3"
  dst_contact      = "mirror.averse.net[mirror-maintainer"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "ftp://mirror.averse.net/pub/CPAN"
# dst_contact      = "mailto:mirror.averse.net[mirror-maintainer
# dst_src          = "ftp.funet.fi"

choon.net:
  frequency        = "daily"
  dst_ftp          = ""
  dst_http         = "http://cpan.mirror.choon.net/"
  dst_location     = "Singapore, Singapore, Asia (1.283 103.85)"
  dst_organisation = "choon.net"
  dst_timezone     = "+8"
  dst_bandwidth    = "10mbps"
  dst_contact      = "choon.net(mirror.cpan.org"
  dst_src          = "rsync.nic.funet.fi::CPAN"

# dst_dst          = "http://cpan.mirror.choon.net/"
# dst_contact      = "mailto:choon.net(mirror.cpan.org
# dst_src          = "rsync.nic.funet.fi::CPAN"

intermedia.com.sg:
  frequency        = "daily"
  dst_ftp          = ""
  dst_http         = "http://cpan.mirror.intermedia.com.sg"
  dst_location     = "Singapore, Singapore, Asia (1.2833 103.8500)"
  dst_organisation = "Intermedia network Services Pte Ltd"
  dst_timezone     = "+8"
  dst_bandwidth    = "210Mbps"
  dst_contact      = "intermedia.com.sq%mirror"
  dst_src          = "rsync.nic.funet.fi"
  dst_notes        = "Network spanning Two data centres, multiple peering points giving fast direct access to most .sg users without using internet bandwidth."

# dst_dst          = "http://cpan.mirror.intermedia.com.sg"
# dst_contact      = "mailto:intermedia.com.sq%mirror
# dst_src          = "rsync.nic.funet.fi"

oss.eznetsols.org:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.oss.eznetsols.org/cpan"
  dst_http         = "http://cpan.oss.eznetsols.org"
  dst_rsync        = "rsync.oss.eznetsols.org"
  dst_location     = "Singapore, Singapore, Asia (1.283 103.85)"
  dst_organisation = "ezNetworking Solutions Pte Ltd"
  dst_timezone     = "+8"
  dst_bandwidth    = "1Gbps"
  dst_contact      = "oss.eznetsols.org*mirror-admin"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "ftp://ftp.oss.eznetsols.org/cpan"
# dst_contact      = "mailto:oss.eznetsols.org*mirror-admin
# dst_src          = "ftp.funet.fi"

nctu.edu.tw:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.nctu.edu.tw/UNIX/perl/CPAN"
  dst_location     = "HsinChu, Taiwan, Asia (24.4719 120.5950)"
  dst_organisation = "National Chiao Tung University"
  dst_timezone     = "+8"
  dst_contact      = "ftp.nctu.edu.tw%ftpadm"
  dst_src          = "ftp.funet.fi"

# dst_dst          = "ftp://ftp.nctu.edu.tw/UNIX/perl/CPAN"
# dst_contact      = "mailto:ftp.nctu.edu.tw%ftpadm
# dst_src          = "ftp.funet.fi"

cpan.cdpa.nsysu.edu.tw:
  frequency        = "daily"
  dst_ftp          = " ftp://cpan.cdpa.nsysu.edu.tw/Unix/Lang/CPAN/"
  dst_http         = "http://cpan.cdpa.nsysu.edu.tw/"
  dst_location     = "Kao-hsiung, Taiwan, Asia (22.38 120.17)"
  dst_organisation = "CDPA National Sun Yat-Sen University"
  dst_timezone     = "+8"
  dst_bandwidth    = "GBE"
  dst_contact      = "cdpa.nsysu.edu.tw*tjs"
  dst_src          = "ftp.funet.fi"

# dst_dst          = " ftp://cpan.cdpa.nsysu.edu.tw/Unix/Lang/CPAN/"
# dst_contact      = "mailto:cdpa.nsysu.edu.tw*tjs
# dst_src          = "ftp.funet.fi"

isu.edu.tw:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.isu.edu.tw/pub/CPAN"
  dst_http         = "http://ftp.isu.edu.tw/pub/CPAN"
  dst_location     = "Kao-hsiung, Taiwan, Asia (22.600 120.283)"
  dst_organisation = "I-SHOU University"
  dst_timezone     = "+8"
  dst_bandwidth    = "GBE"
  dst_contact      = "ftp.isu.edu.tw\ftpadm"
  dst_src          = "ftp.isu.edu.tw"

# dst_dst          = "ftp://ftp.isu.edu.tw/pub/CPAN"
# dst_contact      = "mailto:ftp.isu.edu.tw\ftpadm
# dst_src          = "ftp.isu.edu.tw"

cpan.stu.edu.tw:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.stu.edu.tw/CPAN"
  dst_http         = "http://cpan.stu.edu.tw"
  dst_location     = "Kaohsiung, Taiwan, Asia (22.76 120.38)"
  dst_organisation = "Computer Center, Shu-Te University"
  dst_timezone     = "+8"
  dst_bandwidth    = "GBE"
  dst_contact      = "mail.stu.edu.tw]ychsiao"
  dst_src          = "ftp.funet.fi"
  dst_notes        = "update ftp.stu.edu.tw/cpan to cpan.stu.edu.tw"

# dst_dst          = "ftp://ftp.stu.edu.tw/CPAN"
# dst_contact      = "mailto:mail.stu.edu.tw]ychsiao
# dst_src          = "ftp.funet.fi"

stu.edu.tw:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.stu.edu.tw/pub/CPAN"
  dst_http         = "http://ftp.stu.edu.tw/CPAN"
  dst_location     = "Kaohsiung, Taiwan, Asia (22.76 120.38)"
  dst_organisation = "Computer Center, Shu-Te University"
  dst_timezone     = "+8"
  dst_bandwidth    = "GBE"
  dst_contact      = "mail.stu.edu.tw{ychsiao"
  dst_src          = "cpan.cdpa.nsysu.edu.tw"

# dst_dst          = "ftp://ftp.stu.edu.tw/pub/CPAN"
# dst_contact      = "mailto:mail.stu.edu.tw{ychsiao
# dst_src          = "cpan.cdpa.nsysu.edu.tw"

cpan.cs.pu.edu.tw:
  frequency        = "daily"
  dst_ftp          = "ftp://cpan.cs.pu.edu.tw/pub/CPAN"
  dst_http         = "http://cpan.cs.pu.edu.tw/"
  dst_location     = "Taichung, Taiwan, Asia (24.09 120.41)"
  dst_organisation = "Providence University"
  dst_timezone     = "+8"
  dst_bandwidth    = "GBE"
  dst_contact      = "cs.pu.edu.tw]hcchang"
  dst_src          = "ftp.cpan.org"

# dst_dst          = "ftp://cpan.cs.pu.edu.tw/pub/CPAN"
# dst_contact      = "mailto:cs.pu.edu.tw]hcchang
# dst_src          = "ftp.cpan.org"

tku.edu.tw:
  frequency        = "daily"
  dst_ftp          = "ftp://ftp.tku.edu.tw/pub/CPAN/"
  dst_http         = "http://ftp.tku.edu.tw/pub/CPAN/"
  dst_location     = "TamSui, T'ai-pei Hsien, Taiwan, Asia (25.217 121.483)"
  dst_organisation = "TamKang University"
  dst_timezone     = "+8"
  dst_bandwidth    = "T3"
  dst_contact    

Scripts recomendados

Sysinfo - Informações sobre o seu computador

Shell Script Avançado

INSTALA TAR GZ COM MENU GRÁFICO ZENITY

passa2 - Um sistema de backup/sincronização/cópia de arquivos em SHell Script

Criando Boot pelo USB para o VirtualBox no Linux KDu5


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts