Debbuging samba
Bom... antes de qualquer coisa quero avisar que estou com teclado desconfigurado portanto nao terao acentos nesse post e para nao haver ambiguidades em certas palavras vou escrever como em salas de bate-papo. Usando h quando tiver acento agudo que seja necessario. ;-)
Vou concentrar aqui algumas maneiras de debugar o samba. Estou precisando descobrir informacoes sobre a minha rede. Tem uma estacao que consegue exceder o limite de pipes no samba 3.0.25a que eh de 1024. E eu pensava que esse numero era um pouco limitado. Ate que fui debugar o samba e descobrir que em situacoes normais esse numero nao passa de 5 ou 6.
De inicio, pra escovar bits, leia-se debugar acima do nivel 5, eu soh conhecia o parametro debuglevel do samba.
Num dia desses por ai estava eu implementando um servidor de impressao e vi que o samba NAO passava para o cups o nome do documento que havia sido processado pela impressora. Resolvi ir aumentando o nivel de debug do samba, que vai de 1 a 10, e quando chegou no 6 eis que encontrei o comando que era processado pelo samba para repassar as informacoes do documento para o cups. Mas, porem, contudo, entretanto, todavia, um simples Ctrl+P de uma estacao gerou um log de mais de 20 mil linhas. Com certeza demorou mais pro samba escrever no disco o log do que para realmente processar a impressao. A proposito, li por ai que acima do nivel 3 ja se perde bastante performance devido ao tempo de escrita em disco.
Hoje, eu to com um problema que sei que vou precisar de informacoes dos logs de nivel 5 pra cima. Por isso fui atras de maneiras de debugar o samba. E vi que ele eh bastante flexivel nesse ponto.
Comecando com um parametro legal:Vou concentrar aqui algumas maneiras de debugar o samba. Estou precisando descobrir informacoes sobre a minha rede. Tem uma estacao que consegue exceder o limite de pipes no samba 3.0.25a que eh de 1024. E eu pensava que esse numero era um pouco limitado. Ate que fui debugar o samba e descobrir que em situacoes normais esse numero nao passa de 5 ou 6.
De inicio, pra escovar bits, leia-se debugar acima do nivel 5, eu soh conhecia o parametro debuglevel do samba.
Num dia desses por ai estava eu implementando um servidor de impressao e vi que o samba NAO passava para o cups o nome do documento que havia sido processado pela impressora. Resolvi ir aumentando o nivel de debug do samba, que vai de 1 a 10, e quando chegou no 6 eis que encontrei o comando que era processado pelo samba para repassar as informacoes do documento para o cups. Mas, porem, contudo, entretanto, todavia, um simples Ctrl+P de uma estacao gerou um log de mais de 20 mil linhas. Com certeza demorou mais pro samba escrever no disco o log do que para realmente processar a impressao. A proposito, li por ai que acima do nivel 3 ja se perde bastante performance devido ao tempo de escrita em disco.
Hoje, eu to com um problema que sei que vou precisar de informacoes dos logs de nivel 5 pra cima. Por isso fui atras de maneiras de debugar o samba. E vi que ele eh bastante flexivel nesse ponto.
- "debug hires timestamp" adiciona microsegundos nos logs.
- "debug uid" algumas vezes o samba roda como o usuario conectado. essa opcao adiciona o usuario ao cabecalho do log, junto com o timestamp.
- "debuglevel" pode ser apenas um valor inteiro de 1 a 10. Ou pode ser especificado por categoria. Demorei, mas acheis as categorias disponiveis no samba. Sao elas:
- all
- tdb
- printdrivers
- lanman
- smb
- rpc_parse
- rpc_srv
- rpc_cli
- passdb
- sam
- auth
- winbind
- vfs
- idmap
- quota
- acls
- locking
- msdfs
- dmapi
Alias, essas opcoes podem ser vistas e modificadas em runtime. Nao precisa necessariamente editar os valores no smb.conf. Pode faze-lo de usando smbcontrol. uma ferramenta legal. Um exemplo:
smbcontrol smbd debuglevelO comando acima retorna os valores atuais de debug. Para altear ficaria assim:
smbcontrol smbd debug "smb:4 sam:4"ou
smbcontrol smdb debug 4ou no smb.conf:
debuglevel = smb:4 sam:4
E, se voce modificar o smb.conf nao vai reiniciar o servico. Existem(iam) sinais que eram enviados para os processos para que eles recarregassem o .conf. Hoje, segundo o manual, eh pra o usar o smbcontrol. Exemplo:
smbcontrol smbd reload-config
Existem algumas variaveis que podem ser utilizadas para separar os logs. Pode-sem, criar um arquivo de log por usuario, e/ou por estacao, e/ou por compartilhamento. Vejamos:
Retirado de man smb.conf:
VARIABLE SUBSTITUTIONS
Many of the strings that are settable in the config file can take substitutions. For example the option "path = /tmp/%u'' is interpreted as ``path = /tmp/john'' if the user connected with the username john. These substitutions are mostly noted in the descriptions below, but there are some general substitutions which apply whenever they might be relevant. These are:
- %U session username (the username that the client wanted, not necessarily the same as the one they got).
- %G primary group name of %U.
- %h the Internet hostname that Samba is running on.
- %m the NetBIOS name of the client machine (very useful). This parameter is not available when Samba listens on port 445, as clients no longer send this information. If you use this macro in an include statement on a domain that has a Samba domain controller be sure to set in the [global] section smb ports = 139. This will cause Samba to not listen on port 445 and will permit include functionality to function as it did with Samba 2.x.
- %L the NetBIOS name of the server. This allows you to change your config based on what the client calls you. Your server can have a “dual personality”.
- %M the Internet name of the client machine.
- %R the selected protocol level after protocol negotiation. It can be one of CORE, COREPLUS, LANMAN1, LANMAN2 or NT1.
- %d the process id of the current server process.
- %a the architecture of the remote machine. It currently recognizes Samba (Samba), the Linux CIFS file system (CIFSFS), OS/2, (OS2), Windows for Workgroups (WfWg), Windows 9x/ME (Win95), Windows NT (WinNT), Windows 2000 (Win2K), Windows XP (WinXP), and Windows 2003 (Win2K3). Anything else will be known as UNKNOWN.
- %I the IP address of the client machine.
- %i the local IP address to which a client connected.
- %T the current date and time.
- %D name of the domain or workgroup of the current user.
- %w the winbind separator.
- %$(envvar) the value of the environment variable envar. The following substitutes apply only to some configuration options (only those that are used when a connection has been established):
- %S the name of the current service, if any.
- %P the root directory of the current service, if any.
- %u username of the current service, if any.
- %g primary group name of %u.
- %H the home directory of the user given by %u.
- %N the name of your NIS home directory server. This is obtained from your NIS auto.map entry. If you have not compiled Samba with the --with-automount option, this value will be the same as %L.
Outra opcao boa eh de poder aumentar o level de debug para apenas uma maquina ou usuario. Take a look:
[global]Agora voce cria um arquivo /usr/local/samba/lib/smb.conf.maq01 e escreve dentro desse arquivo o seguinte:
log level = 0
log file = /usr/local/samba/lib/log.%m
include = /usr/local/samba/lib/smb.conf.%m
log level=10
Recarrega o samba e a partir desse momento o nivel de debug eh zero pra tudo e todos, conforme especificado na secao [global], mas quando a maquina da rede chamada maq01 conectar no servidor o samba vai fazer o include e log vai ser setado para 10. capisce?!?
Pode ser feita a mesma coisa utilizando as outras variaveis. Ai vai do gosto do fregues.
mais informacoes: man smbcontrol
Pode ser feita a mesma coisa utilizando as outras variaveis. Ai vai do gosto do fregues.
mais informacoes: man smbcontrol
Marcadores: samba