Criando um file server “transparente” no Linux

Criando um file server “transparente” no Linux

Hugo Cisneiros, hugo@devin.com.br

Última atualização em 04/02/2003

Quem acessa IRC deve saber o que é um file server. Um file server é um “programa” de IRC que fica em um certo canal, servindo arquivos livremente para as outras pessoas. No Windows isso já é uma realidade bem comum, mas no Linux é algo um pouco ainda oculto. Este tutorial ensina à qualquer usuário que tenha uma conta shell em um sistema Linux à montar seu file server, e não necessita nem de interface gráfica.

Para fazer isso, utilizarei o seguinte:

  • screenhttp://www.gnu.org/software/screen/ – Um programinha muito bom que serve como um “gerenciador de janelas” para o modo texto do Linux. As distibuições geralmente vêm com ele, então possivelmente não será necessário baixar e compilar o programa, pois ou você já tem instalado, ou deve vir um pacote pronto na sua distribuição. Verifique se o programa está instalado com o comando: “which screen“. Se aparecer o cominho do executável, então ele existe, se não aparecer nada, tem que ser instalado 🙂
  • X-Chathttp://www.xchat.org – O X-Chat é um cliente de IRC muito bom que inicialmente foi feito pra GTK+ (gráfico). Mas como o autor fez o programa de forma modular, ele criou como demonstração um pequeno front-end em modo texto. O front-end não é muito bom, mas serve muito bem para o que queremos no momento. Baixe o código-fonte do X-Chat estável mais novo, pois iremos compilar apenas o modo-texto e usar em conjunto com o programa screen.
  • Obsidian File Serverhttp://tlm.conectiva.com.br/fserver_linux/obsidian-0.9.1-pre3.pl – Este é um script feito em perl que introduz um file server muito bom no X-Chat.

Compilando o X-Chat

Primeiro de tudo vamos compilar o front-end texto do X-Chat. Supondo que você já tenha baixado o código-fonte do programa, vamos aos passos da compilação:

$ tar jpfx xchat-1.8.11.tar.bz2
$ cd xchat-1.8.11
$ ./configure --disable-gtkfe --disable-glib --disable-gnome
--disable-zvt --disable-gdk-pixbuf --disable-xlib
--disable-glibtest --disable-gtktest

[...configurando a compilação...]

xchat 1.8.11

Building GTK+ Interface .... : no
Building TEXT Interface .... : yes

gnome-libs .......... : no
gnome panel ......... : no
perl ................ : yes
gdk-pixbuf........... : no
python .............. : no
mmx tinting ......... : yes
zvt shell tab ....... : no nls/gettext ......... : yes
plugin interface .... : yes glib replace ........ : yes
link with socks5 .... : no translation tables .. : yes
openssl support ..... : no japanese conversion . : no
ipv6 support ........ : no hebrew support ...... : no

$ make

[...compilando...]

$ cd src/fe-text
$ strip -s xchat-text

Pronto. Se tudo ocorreu bem, o X-Chat foi compilado com êxito. Agora vamos criar um diretório que vai ser o “home” do file server. Eu procuro sempre deixar o file server com um usuário especial para ele. Então vou criar o usuário fserver, com o seu diretório home sendo o /var/fserver, pois aqui a partição que tem mais espaço é o /var. Não se esqueça deste diretório home, pois usaremos em outros lugares neste tutorial.

# adduser fserver -d /var/fserver
# passwd fserver
Changing password for user fserver.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

Agora logue-se como este usuário, ou execute o comando “su – fserver“, que te transforma no usuário fserver. Vamos criar então a estrutura de diretórios do file server:

$ pwd
/var/fserver
$ mkdir bin .xchat incoming fserver

Agora vamos colocar os arquivos necessários para o funcionamento do file server. Antes de mais nada, você precisará colocar o programa xchat-text dentro do diretório bin do usuário fserver. Vá no diretório onde você descompactou e compilou o código-fonte do xchat e copie:

$ cd src/fe-text
$ cp xchat-text /var/fserver/bin

Agora execute o xchat-text para ele criar os arquivos de configuração padrões do x-chat. Depois aperte CTRL+C para sair do mesmo. Vamos então criar o script que irá iniciar o file server. Crie um arquivo chamado “/var/fserver/bin/fserver” e coloque o seguinte conteúdo:

#!/bin/bash
#
case $1 in
start)
screen -A -m -d -S fserver /var/fserver/bin/xchat-text
;;
stop)
screen -r fserver
;;
esac

Depois transforme este arquivo em executável:

$ chmod +x /var/fserver/bin/fserver

Este script quando executado, chamará o programa screen para rodar em background o programa xchat-text. Mas se ele está em background, como diremos à ele para conectar a um certo servidor e entrar em um certo canal? Para isso faremos um script em perl. Crie o arquivo “/var/fserver/.xchat/script.pl” com o seguinte conteúdo:

#!/usr/bin/perl -w

# Função que entra identifica o nick, liga o file server e entra nos canais
sub entrarcanais {
IRC::command("/nickserv identify minhasenha");
IRC::command("/fs on");
IRC::command("/join #canal");
}

# Inicialmente conectar no servidor e depois de 1 minuto (6000 milisegundos),
# executar a função acima "entrarcanais"
IRC::command("/server irc.brasnet.org");
IRC::add_timeout_handler(60000,"entrarcanais");

# Função que de 5 em 5 minutos atualiza o file server
sub flushfiles {
IRC::command("/fs on");
IRC::command("/fs update_files");
IRC::add_timeout_handler(300000,"flushfiles");
}

# Ativa o timer que executa a fução flushfiles em 5 minutos
IRC::add_timeout_handler(300000,"flushfiles");

Pronto, agora quando o xchat-text for iniciado, ele automaticamente vai carregar este script em perl. Agora falta configuramos melhor o xchat. Por padrão, a interface texto não cria um xchat.conf muito decente. Então sobrescreva o arquivo “/var/fserver/.xchat/xchat.conf” colocando o seguinte conteúdo:

auto_indent = 1
auto_resume = 1
auto_unmark_away = 0
autodccchat = 1
autodccsend = 1
autodialog = 1
autoopendccchatwindow = 1
autoopendccrecvwindow = 1
autoopendccsendwindow = 1
autoreconnect = 1
autoreconnectonfail = 1
autorejoin = 1
autosave = 1
autosaveurl = 0
awayreason = I'm busy
background_dialog_pic =
background_pic =
ban_type = 0
beep_msg = 1
beep_chans = 0
bluestring =
chanmodebuttons = 1
channelbox = 0
cmdchar = /
colorednicks = 0
ctcp_number_limit = 5
ctcp_time_limit = 30
dcc_blocksize = 4096
dcc_ip =
dcc_permissions = 420
dcc_remove = 0
dcc_send_fillspaces = 1
dcc_stall_timeout = 60
dcc_timeout = 180
dccdir = /var/fserver/incoming
dccwithnick = 0
dialog_height = 100
dialog_indent_nicks = 1
dialog_indent_pixels = 80
dialog_show_separator = 1
dialog_tint = 1
dialog_tint_blue = 151
dialog_tint_green = 151
dialog_tint_red = 151
dialog_transparent = 1
dialog_width = 300
dialog_wordwrap = 1
dnsprogram = host
doubleclickuser = /QUOTE WHOIS %s
fastdccsend = 1
filterbeep = 0
first_dcc_send_port = 0
font_dialog_normal = -misc-fixed-medium-r-semicondensed-*-13-*-*-*-c-*-iso8859-15
font_normal = -misc-fixed-medium-r-semicondensed-*-13-*-*-*-c-*-iso8859-1
font_shell =
fudgeservernotice = 0
hide_version = 0
hidemenu = 0
hideuserlist = 0
hilight_notify = 0
hilightnick = 1
host_in_userlist = 0
hostname =
indent_nicks = 1
indent_pixels = 80
inputgad_superfocus = 1
invisible = 0
ip_from_server = 1
lagometer = 2
last_dcc_send_port = 0
limitedtabhighlight = 1
logging = 0
logmask = %s,%c.xchatlog
mail_check = 0
mainwindow_height = 477
mainwindow_left = 121
mainwindow_save = 1
mainwindow_top = 178
mainwindow_width = 714
max_auto_indent = 256
max_lines = 3000
msg_number_limit = 5
msg_time_limit = 30
newtabs_to_front = 1
nick_suffix = :
nickcompletion = 1
nickgad = 1
nickname1 = Nick1DoFserver
nickname2 = Nick2DoFserver
nickname3 = Nick3DoFserver
notices_tabs = 0
notify_timeout = 15
nu_color = 4
old_nickcompletion = 0
paned_userlist = 0
partreason = Client Exiting
percascii = 0
perccolor = 1
perlwarnings = 0
persist_chans = 1
pingtimeout = 0
priv_msg_tabs = 1
proxy_host =
proxy_port = 0
proxy_type = 0
quitreason = Client Exiting
raw_modes = 0
realname = Campo Nome
reconnect_delay = 10
servernotice = 1
show_away_message = 1
show_away_once = 1
show_invite_in_front_session = 0
show_notify_in_front_session = 0
show_separator = 1
skipmotd = 0
skipserverlist = 1
stamp_format = [%H:%M:%S]
stripcolor = 0
style_inputbox = 1
style_namelistgad = 0
tabchannels = 1
tabs_position = 0
thin_separator = 1
throttle = 1
throttlemeter = 2
timestamp = 0
timestamp_logs = 0
timestamp_log_format = %b %d %H:%M:%S
tint = 1
tint_blue = 151
tint_green = 151
tint_red = 151
topicbar = 1
transparent = 1
trans_file =
treeview = 0
truncchans = 0
use_fontset = 1
use_server_tab = 0
use_trans = 0
userhost = 1
userlist_sort = 0
userlist_icons = 1
userlistbuttons = 1
username = fserver
wallops = 1
whois_on_notifyonline = 0
windows_as_tabs = 1
wordwrap = 1

Sim, este é um arquivo de configuração para o X-Chat modo gráfico, mas as opções que tem a mais não vão influenciar em nada, e tudo que queremos vai estar aí. Você só precisa modificar as linhas que estão em negrito, que são os campos de Nick, Nome Real, Username, entre outros. Veja que também a linha “dccdir = /var/fserver/incoming” dirá que todo arquivo que o file server pegar vai para este diretório. Nesta configuração o DCC Get está habilitado para pegar automaticamente os arquivos, mas se você quiser desabilitar isso, mude no arquivo acima o valor da variável “autodccsend” para 0.

Agora só falta uma coisa: O File Server! Mas é bem simples. Coloque o arquivo “obsidian-0.9.1-pre3.pl” que você baixou no diretório “/var/fserver/.xchat“. O X-Chat irá carregar este script automaticamente na inicialização. E parar configurar, crie um arquivo chamado “/var/fserver/.xchat/obsidian.conf” com o seguinte conteúdo:

debug:0
ctcptrigger:1
restorequeues:1
autoon:1
notice_as_msg:0
short_notice:0
raw_chnl_msg:1
raw_wlcm_msg:0
open_tab_early:1
close_tab_auto:0
case_cmd:0
case_file:0
fs_sensitive:0
count_sends:1
send_small_now:1
ads_when_full:1
priority_op:1
priority_voice:1
max_users:10
max_sends:3
max_queues:20
slots_big:1
slots_med:4
slots_small:10
size_big:30000000
size_med:1000000
max_fails:5
min_speed:0
idle_time:180
trigger:!boboalegre
serve_no_notify:#testchnl2
serve_hidden:#testchnl3
notify_to_voice:#testchnl2
notify_channels:#canal
notify_timeout:0
root_dir:/var/fserver/fserver
note:Aqui estão alguns arquivos!! XUGUEM!
auto_backup:60
logo:^C14[^C13Oßsidian FServe^C14]^C
c1:^C13
c2:^C14
c3:^C13
c4:^C15

As linhas em negrito são as principais que você tem que mudar. Vou explicá-las:

  • priority_op:1 – Dá prioridade para os OPs no file server, ou seja, eles entram na frente de todo mundo na fila dos queues! 🙂
  • priority_voice:1 – Mesma coisa do item acima, só que para os que tem voice.
  • max_users:10 – Quantos usuários podem dar uma olhada no file server ao mesmo tempo.
  • max_sends:5 – Quantos envios simultâneos o file server pode fazer (1 por pessoa).
  • max_queues:50 – Quantos queues (ou slots) podem ser ocupados no file server.
  • slots_big:1 – Quantos slots uma pessoa pode ter com arquivos grandes.
  • slots_med:4 – Quantos slots uma pessoa pode ter com arquivos médios.
  • slots_small:10 – Quantos slots uma pessoa pode ter com arquivos pequenos.
  • size_big:30000000 – Qual o tamanho em bytes para um arquivo ser considerado grande (Aqui: 30MB
  • size_med:1000000 – Qual o tamanho em bytes para um arquivo ser considerado médio (Aqui: 1MB)
  • max_fails:5 – Quantas falhas a transfer6encia pode ter até ser cancelado o slot/queue.
  • trigger:!boboalegre – Qual o trigger do file server.
  • notify_channels:#canal – Quais canais notificar, separados por virgula
  • notify_timeout:0 – De quanto em quanto tempo anunciar o file server? (0 = Modo em Silêncio)
  • root_dir:/var/fserver/fserver – Diretório onde ficam os arquivos do file server
  • note:Aqui estão alguns arquivos!! XUGUEM! – Mensagem do file server

Você pode mexer nas outras opções também, mas eu não recomendo. Vá testando os valores até você ver que ficou perfeito para você e seu file server. Agora é só rodar o file server com o seguinte comando:

$ /var/fserver/bin/fserver start

E esperar um pouco para que seu file server entre no canal já funcionando. Caso você queira mexer no file server interativamente, você pode a qualquer momento chegar no prompt de comando e digitar:

$ screen -r fserver

Isso irá restaurar a janela do file server, e você poderá utilizar ele como quiser. Inclusive mudar as configurações em tempo real com o comando “/fs“. Para poder voltar ao prompt de comando sem ter que sair do xchat-text, utilize a seqüência de teclas CTRL+A D (CTRL+A, solta e aperta D logo em seguida).

Prooooooooooonto! Foi tão difícil assim? Esse método é ótimo para as pessoas que tem várias máquinas rodando Linux por aí, principalmente porque você pode controlar os file servers via SSH, sem a necessidade de interface gráfica nenhuma. Mas isso tudo funciona com interface gráfica também, é só colocar o script perl do obsidian e o arquivo de configuração no diretório .xchat do seu home, que ao xchat gráfico iniciar, ele também irá carregar o script com as configurações. Boa sorte!

Fonte: http://www.devin.com.br/eitch/fserver_linux/ 

Sobre o autor

Adailton Rodrigues de Souza administrator

Deixe uma resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.