MAL - Memória Auxiliar do Lutieri

sábado, outubro 27, 2007

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:

  • "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 debuglevel
O comando acima retorna os valores atuais de debug. Para altear ficaria assim:

smbcontrol smbd debug "smb:4 sam:4"
ou
smbcontrol smdb debug 4
ou 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]
log level = 0
log file = /usr/local/samba/lib/log.%m
include = /usr/local/samba/lib/smb.conf.%m
Agora voce cria um arquivo /usr/local/samba/lib/smb.conf.maq01 e escreve dentro desse arquivo o seguinte:

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

Marcadores:

quarta-feira, outubro 24, 2007

Erro no gentoo!!!!!!

option kernel pci=noacpi


irq 7: nobody cared (try booting with the "irqpoll" option)

Call Trace:
[] __report_bad_irq+0x30/0x72
[] note_interrupt+0x1e8/0x22b
[] handle_edge_irq+0xf9/0x128
[] do_IRQ+0x6c/0xd6
[] default_idle+0x0/0x3d
[] ret_from_intr+0x0/0xa
[] default_idle+0x29/0x3d
[] cpu_idle+0x8b/0xae

handlers:
[] (usb_hcd_irq+0x0/0x52)
Disabling IRQ #7

terça-feira, outubro 09, 2007

Horário de verão e servidores

Está se aproximando a mudança de horário e com isso não podemos deixar que nossos sistemas fiquem perdidos no tempo.

Como todos sabem ou deveriam saber nesse ano, 2007, o horário de verão tem início no dia 14 de Outubro de 2007.

Consegui um artigo atualizado falando exatamente dessa mudança de horário 2007/2008.

Como eu sou uma boa pessoa vou colocar aqui o arquivo /etc/localtime que eu peguei do redhat atualizado ontem. Já esta com as alterações necessárias para a troca de horário.

O horario de verão 2007/2008 terá inicio em 14 de Outubro de 2007 e término em 17 de Fevereiro de 2008. Com isto, algumas configuracoes nos sistemas sao necessárias.

A seguir, são descritos os procedimentos de atualização do localtime em
sistemas OpenBSD, FreeBSD, GNU/Linux, Solaris, AIX e Windows. Antes de prosseguir com
estes procedimentos, é preciso que se saiba de antemão o timezone da sua região.

*Importante:
- O NTP Server oficial da unespNET é ntp-server.unesp.br
- No caso do Windows acreditamos que seja mais fácil criar um arquivo com
as mudanças das chaves do registry e distribuir pela rede no logon da
rede.

GNU/Linux
===========

1. Verificar a existencia do arquivo '/etc/localtime' e se este arquivo é
um link simbólico ou não.

Nao é recomendado possuir o arquivo /etc/localtime como link
simbólico, pois em sistemas que o diretorio /usr nao estiver acessível
(nao tiver sido montado, por exemplo) no momento de inicializacao da
maquina, as informações contidas no arquivo localtime não serão
carregadas.

2. Verificar se existe no diretório /usr/share/zoneinfo/Brazil algum
arquivo que contenha informações relativas a outros horários de
verão (DICA: geralmente um arquivo com extensao .zic).

a) Se nao existir nenhum arquivo com estas informações, então crie um
novo, de nome 'verao.zic' por exemplo, no diretório
/usr/share/zoneinfo/Brazil/. Este arquivo deverá conter as seguintes
linhas:

Rule Brazil 2007 only - Oct 14 00:00 1 S
Rule Brazil 2008 only - Feb 17 00:00 0 -

Zone Brazil/East -3:00 Brazil BR%sT


b) Se existir algum arquivo com informações de horário de verão de
outros anos, basta inserir as linhas acima ao final do arquivo
existente.


As duas primeiras linhas de configuracao acima informam quando se
inicia o horário de verão, quando termina, e qual a ação a ser tomada.
Lembre-se de que no inicio do horario de verao deve ser adicionada uma
hora ao horário mostrado ao usuario (localtime).

A ultima linha diz qual arquivo sera' modificado pelo comando
'zic'. No exemplo acima, sera' o arquivo 'East' (dentro do diretorio
Brazil). Esta linha tambem informa qual o timezone original da região

- no caso de Sao Paulo (East) temos UTC-3. Caso voce utilize um timezone
diferente do adotado em Sao Paulo (East), modifique estes
parametros para o timezone de sua regiao

* Parâmetros definidos pela glibc presente em sistemas Linux,
disponivel para download em http://www.gnu.org/

3. Uma vez feitos os devidos ajustes no arquivo 'verao.zic' execute o
comando 'zic':

# zic verao.zic


Neste caso em particular, o comando atualizará o arquivo East.


4. Para verificar se as configurações corretas foram feitas, execute o
comando 'zdump', conforme segue abaixo (troque East pelo timezone de
sua região):

# zdump -v Brazil/East |grep 200[78]


Voce deverá obter uma resposta como a que segue abaixo:

Brazil/East Sun Oct 14 02:59:59 2007 UTC = Sat Oct 13 23:59:59 2007 BRT isdst=0 gmtoff=-10800
Brazil/East Sun Oct 14 03:00:00 2007 UTC = Sun Oct 14 01:00:00 2007 BRST isdst=1 gmtoff=-7200
Brazil/East Sun Feb 17 01:59:59 2008 UTC = Sat Feb 16 23:59:59 2008 BRST isdst=1 gmtoff=-7200
Brazil/East Sun Feb 17 02:00:00 2008 UTC = Sat Feb 16 23:00:00 2008 BRT isdst=0 gmtoff=-10800

Note que em "Sat Oct 13 23:59:59 2007" o sistema ainda nao esta no
horario de verão (indicacao 'BRT'). No segundo seguinte as
modificacoes do horário de verão entram em vigor, adiantando o
localtime em uma hora: "Sun Oct 14 01:00:00 2007 BRST" (O horario
mostrado ao usuario passará para 1 da manhã, e não para meia-noite,
mostrando o adiantamento do horário).

Em "Sat Feb 16 23:59:59 2008 BRST", o horário de verão terminará no
segundo seguinte, com o localtime sendo então atrasado em 1 hora: "Sat
Feb 16 23:00:00 2008 BRT" (o horario mostrado ao usuario voltará para
as 23:00).


5. Por ultimo, se o arquivo /etc/localtime NÂO for um link para o arquivo
/usr/share/zoneinfo/Brazil/East, deve-se copiar o arquivo East para
/etc/localtime

# cp East /etc/localtime

Caso o arquivo /etc/localtime seja um link, sugerimos que o link seja
removido e a cópia descrita acima seja executada. Lembre-se sempre de
fazer cópias de segurança antes de modificar seu sistema.


FreeBSD
==========

Usuarios do sistema FreeBSD devem proceder da mesma forma que usuarios
GNU/Linux. A unica diferenca esta' no diretorio onde devera' ser criado o
arquivo 'verao.zic' - /usr/share/zoneinfo. As linhas a serem
incluidas neste arquivo, assim como em sistemas GNU/Linux, sao:


Rule Brazil 2007 only - Oct 14 00:00 1 S
Rule Brazil 2008 only - Feb 17 00:00 0 -

Zone hv2007 -3:00 Brazil BR%sT



No exemplo acima, o nome 'hv2007' representa o arquivo que será criado ao
executar o comando:

# zic verao.zic


O arquivo hv2007 conterá as informações do horário de verão e deverá ser
copiado sobre /etc/localtime, lembrando que será preciso fazer uma cópia
de segurança do arquivo /etc/localtime antes de sobrescrevê-lo.


OpenBSD
==========

Usuarios do sistema OpenBSD devem proceder da mesma forma que usuarios
GNU/Linux.


Solaris
==========

Usuários de Solaris devem seguir o procedimento abaixo:

1. Verificar o zoneinfo respectivo. O arquivo /etc/TIMEZONE contem as
informações relativas a qual arquivo será consultado para verificar o
zoneinfo.

# more /etc/TIMEZONE


TZ=Brazil/East


No exemplo acima, deverá ser consultado o arquivo East, no diretório
Brazil. Por padrão, este diretório deve estar em /usr/share/lib/zoneinfo.


2. Verificar se existe no diretório /usr/share/lib/zoneinfo algum arquivo
em formato texto que contenha informações relativas a outros horários
de verão (DICA: geralmente um arquivo com extensao .zic)

a) Se nao existir nenhum arquivo com tais informacoes, devera' ser
criado um novo arquivo, de nome 'brazil.zic' por exemplo, e
inserir as seguintes linhas.

Rule Brazil 2007 only - Oct 14 00:00 1 S
Rule Brazil 2008 only - Feb 17 00:00 0 -

Zone Brazil/East -3:00 Brazil BR%sT


b) Se existir um arquivo com informações de horário de verão de outros
anos basta inserir as linhas acima.


As duas primeiras linhas informam quando inicia o horário de
verão, quando termina e qual a ação a ser tomada. Lembre-se de que no
início do horário de verão deve ser adicionada uma hora.

A ultima linha diz qual arquivo será gerado pelo comando 'zic' - no
exemplo será o arquivo 'East' (dentro do diretorio Brazil). Esta linha
tambem informa o timezone da região, no caso o de Sao Paulo, UTC-3.

No exemplo que se segue, existe um diretorio 'Brazil' dentro de
/usr/share/lib/zoneinfo, que contem um arquivo brazil.zic, que deve ser
atualizado com as linhas mencionadas acima.


3. Deve-se entao gerar o novo arquivo (em formato binário) como segue:

# zic brazil.zic



4. Para verificar se as configuracoes foram feitas corretamente, execute o
comando 'zdump' conforme segue abaixo (troque East pelo timezone de sua
região):

# zdump -v Brazil/East |grep 200[78]


Voce devera obter uma resposta como a que segue abaixo:

Brazil/East Sun Oct 14 02:59:59 2007 UTC = Sat Oct 13 23:59:59 2007 BRT isdst=0
Brazil/East Sun Oct 14 03:00:00 2007 UTC = Sun Oct 14 01:00:00 2007 BRST isdst=1
Brazil/East Sun Feb 17 01:59:59 2008 UTC = Sat Feb 16 23:59:59 2008 BRST isdst=1
Brazil/East Sun Feb 17 02:00:00 2008 UTC = Sat Feb 16 23:00:00 2008 BRT isdst=0



Windows
==========

Para sistemas Windows 9*/NT/2000/XP recomenda-se o uso do utilitário
TZEDIT (tzedit.exe), incluido no CD do Resource Kit que acompanha a
distribuição do sistema. Nao existe URL oficial para download deste
programa no site da Microsoft, mas ele pode ser facilmente encontrado na
Internet, lembrando que neste ultimo caso *não* se garante a integridade
do programa.

Uma segunda opção para modificar o timezone do Windows XP é a
utilização do utilitário 'timezone.exe', disponível no Service Pack 2

OBS: também pode ser baixado no Microsoft Download Center. O download é precedido de um processo de validação, que verifica se
sua cópia de Microsoft Windows é genuina.


Administradores que queiram automatizar a atualização do horário de verão,
em redes com elevado número de máquinas Windows, podem encontrar mais
informacoes em:

. Microsoft Support Knowledge Base - How to configure daylight saving time dates for Brazil
http://support.microsoft.com/?kbid=317211


Para a configuração de timezone do seu sistema, utilizando o comando
'timezone.exe' siga os seguintes passos:

1. Faca o download do "Windows XP Service Pack 2 Support Tools" e
instale-o no seu sistema, caso voce não possua o utilitário
'timezone.exe'.

2. Em um prompt de comando (cmd.exe) execute, a partir do diretório
"Program Files\Support Tools" se foi utilizada a instalacao padrão, o
seguinte comando:

C:\Program Files\Support Tools>timezone.exe /s 00:0:2:10 00:0:3:02


As configurações acima seguem o formato:

Hora:DiaDaSemana:Dia:Mes Hora:DiaDaSemana:Dia:Mes
(Inicio horario de verao) (Fim horario de verao)

Hora: Hora (00 ate 23)
DiaDaSemana: Dia da semana (0 - 6 : 0 = Domingo,
1 = Segunda, etc)
Dia: Ocorrencia do dia da semana no mes ( 1 - 5 :
Exemplo -> no caso do dia da semana ser
Terca-Feira: 1 - primeira terça do mês,
2 - segunda terca do mes, etc)
Mes: Mes do ano (01 - 12)


3. Execute o seguinte comando para verificar se as modificacoes foram
corretamente executadas:

C:\Program Files\Support Tools>timezone.exe /g


Current Timezone is :

Daylight Saving Time begins at 00:0:2:10
Daylight Saving Time ends at 00:0:3:02



4. Configure o sistema para utilizar automaticamente as configurações do
horario de verão:

. Vá em Start -> Settings -> Control Panel -> Date and Time ->
Timezone;
. Certifique-se que voce está utilizando o timezone de Brasília (UTC-0300)
Brasilia;
. Certifique-se que a caixa "Automaticamente ajuste o relógio para o
horario de verão" esteja marcada.


Fonte: http://grc.unesp.br/veralerta.php?id=96



Chat with Lutieri G. B.

Subscribe in a reader