Primeiramente adicione a seguinte linha ao arquivo /etc/mk.conf:
PKG_OPTIONS.pureftpd=ssl mysql virtualchroot utf8
Se ele não existir, pode criá-lo. Esses parâmetros serão usados na compilação do pure... Mágica... hehehehe
Vamos então instalar o dito cujo:
# cd /usr/pkgsrc/net/pure-ftpd
# make install clean
Vamos configurar ele para iniciar junto do sistema:
# cp /usr/pkg/share/examples/rc.d/pure_ftpd /etc/rc.d/
# chmod +x /etc/rc.d/pure_ftpd
Adicione no arquivo /etc/rc.conf a linha:
pure_ftpd=YES
Agora vamos fazer umas modificações importantes:
No arquivo /etc/rc.d/pure_ftpd, altere o seguinte parâmetro, na linha:
command_args="-B"
Altere para:
command_args="-B -A -E -O stats:/var/log/pureftpd.log -s -Z -l mysql:/etc/pure-ftpd/mysql.conf"
Crie o arquivo /etc/pure-ftpd/mysql.conf e nele coloque esses parâmetros:
# Optional : MySQL server name or IP. Don't define this for unix sockets.
# MYSQLServer     127.0.0.1
#
# Optional : MySQL port. Don't define this if a local unix socket is used.
# MYSQLPort       3306
#
# Optional : define the location of mysql.sock if the server runs on this host.
MYSQLSocket     /tmp/mysql.sock
#
# Mandatory : user to bind the server as.
MYSQLUser       sql_username
#
# Mandatory : user password. You must have a password.
MYSQLPassword   sql_password
#
# Mandatory : database to open.
MYSQLDatabase   pureftpd
#
# Mandatory : how passwords are stored
# Valid values are : "cleartext", "crypt", "md5" and "password"
# ("password" = MySQL password() function)
# You can also use "any" to try "crypt", "md5" *and* "password"
MYSQLCrypt      cleartext
#
# In the following directives, parts of the strings are replaced at
# run-time before performing queries :
#
# \L is replaced by the login of the user trying to authenticate.
# \I is replaced by the IP address the user connected to.
# \P is replaced by the port number the user connected to.
# \R is replaced by the IP address the user connected from.
# \D is replaced by the remote IP address, as a long decimal number.
#
# Very complex queries can be performed using these substitution strings,
# especially for virtual hosting.
#
# Query to execute in order to fetch the password
MYSQLGetPW              SELECT password FROM ftpusers WHERE username ='\L' AND active='1'
# Query to execute in order to fetch the system user name or uid
MYSQLGetUID             SELECT uid FROM ftpusers WHERE username = '\L'
# Query to execute in order to fetch the system user group or gid
MYSQLGetGID             SELECT gid FROM ftpusers WHERE username = '\L'
# Query to execute in order to fetch the home directory
MYSQLGetDir             SELECT homedir FROM ftpusers WHERE username = '\L' 
# Optional : bandwidth throttling.
# The server has to be compiled with throttling support.
# Values are in KB/s .
MySQLGetBandwidthUL     SELECT ULbw FROM ftpusers WHERE username = '\L'
MySQLGetBandwidthDL     SELECT DLbw FROM ftpusers WHERE username = '\L'
# Optional : ratios. The server has to be compiled with ratio support.
MySQLGetRatioUL         SELECT ULRatio FROM ftpusers WHERE username ='\L'
MySQLGetRatioDL         SELECT DLRatio FROM ftpusers WHERE username ='\L'
#Query to get the maximal disk usage (virtual quotas) in Megabytes.
MySQLGetQTASZ           SELECT Quota FROM ftpusers WHERE username ='\L'
#Query to get the maximal number of files.
MySQLGetQTAFS           SELECT QuotaFiles FROM users WHERE username = '\L'
# If you upgraded your tables to transactionnal tables (Gemini,
# BerkeleyDB, Innobase...), you can enable SQL transactions to
# avoid races. Leave this commented if you are using the
# traditionnal MyIsam databases or old (< 3.23.x) MySQL versions.
MySQLTransactions On
Altere de acordo com suas necessidades.
Crie o banco de dados pro ftp, por exemplo:
# mysql -u root -p
mysql> 
create database pureftpd;
mysql> 
use pureftpd;
Agora vamos criar os campos necessários.
mysql> 
CREATE TABLE `ftpusers` (
 `id` int(11) NOT NULL auto_increment,
 `username` varchar(255) NOT NULL,
 `password` varchar(255) NOT NULL,
 `uid` int(5) NOT NULL default '80',
 `gid` int(5) NOT NULL default '80',
 `homedir` varchar(255) NOT NULL default '/web',
 `active` tinyint(1) NOT NULL default '1',
 `Quota` int(10) NOT NULL default '0',
 `ULbw` int(10) NOT NULL default '0',
 `DLbw` int(10) NOT NULL default '0',
 `ULRatio` int(10) NOT NULL default '0',
 `DLRatio` int(10) NOT NULL default '0',
 `QuotaFiles` int(10) NOT NULL default '0',
 PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='FTP users';
Pra ver se foi tudo ok:
mysql> 
show tables;
+--------------------+
| Tables_in_pureftpd |
+--------------------+
| ftpusers           |
+--------------------+
1 row in set (0.00 sec)
Vamos adicionar nosso primeiro usuário para fazermos o teste:
mysql> 
insert into ftpusers  values(1,'cvs','thiago','80','80','/ftp/cvs/',1,100,0,0,0,0,0)
# mkdir /ftp/cvs
# chown -R 80.80 /ftp/cvs
Agora é só conectar no servidor e testar.
