Arquivo de agosto \23\UTC 2007

Webcam Syntek Semicon DC-1125 Driver no Ubuntu (ou debian-like)

Atenção : Este é um artigo “requentado”, isto é, já fiz ele antes, porém agora estou atualizando-o em virtude de algumas modificações que surgiram nas novas versões do Ubuntu e também graças as atualizações feitas por este driver.

Os modelos de notebook Asus mais recentes da série a6000 incluem uma webcam de 1.3 mega pixel, mas não tem muita serventia para usuários do sistema do pinguim, visto que não há drivers para eles. No entanto, essa situação tem correção.

Na página http://syntekdriver.sourceforge.net possui o driver para tal dispositivo. O driver serve tanto para a webcam embutida nos notebooks da Asus como também alguns modelos de câmera digital de mão do mesmo fabricante que podem ser plugados na USB e também funcionam como uma webcam. Esse driver é 100% funcional para todos os modelos syntek.

Vou novamente detalhar um passo-a-passo de como compila-lo em qualquer Ubuntu ou variações de distribuições Debian :

1) Atualize sua biblioteca de hardwares PCI e USB :

sudo update-pciids
sudo update-usbids

Os passos acima apenas atualizam uma biblioteca de informações para que os comandos ‘lscpi’ e ‘lsusb’ descrevam melhor os dispositivos encontrados.

2) Voce tem realmente uma webcam syntek ?

Para saber a resposta rode o comando ‘lsusb’ :

$ lsusb
Bus 005 Device 003: ID 174f:a311
Bus 005 Device 001: ID 0000:0000
Bus 001 Device 004: ID 045e:007d Microsoft Corp. Notebook Optical Mouse
Bus 001 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000

Se aparecer na sua listagem o ID 174f:a311 então a resposta é ‘Sim’, e este artigo funcionará 100% no seu computador. Se a resposta for negativa, provavelmente não compensa continuar a leitura deste artigo, porém voce pode testar o restante do artigo apenas para ter certeza, afinal o artigo não é complicado e a maioria das ferramentas necessárias provavelmente já estão no seu computador.

3-opcional) Remova o ‘dash’ se estiver usando o Ubuntu Festy (veja : Somente quem ainda usa Ubuntu Feisty

sudo apt-get remove --purge dash

(não é necessário fazer isso em outras distribuições)

Isso é necessário porque alguns make files de compilação usam o /bin/sh que por padrão no Feisty é o ‘dash’, quando deveria ser o ‘bash’ como em outras distribuições. Apenas remover o ‘dash’ do seu sistema vai tornar o bash como padrão. Se você não quer remove-lo, então faça o /bin/sh que é um link simbólico apontar para /bin/bash manualmente :

sudo rm -f /bin/sh
sudo ln -s /bin/bash /bin/sh

4) Instale algumas dependências :

sudo apt-get install build-essential bin86 kernel-package \
   libqt3-headers libqt3-mt-dev \
   libncurses5-dev libusb-dev libsane-dev \
   libsane-extras-dev subversion \
   exuberant-ctags camorama
sudo apt-get install dpkg-dev debhelper devscripts fakeroot linda dh-make

5) Instale o kernel-headers :

Se estiver usando o kernel genérico que é o padrão de instalação do Ubuntu (use “uname -a” para conferir), então execute :

sudo apt-get install linux-headers-generic

Caso contrário, instale a versão do kernel-headers da versão especifica do seu kernel :

 sudo apt-get install linux-headers-`uname -r`

6) Crie um diretorio para manter os fontes e compilar

sudo  bash
cd /usr/src
svn co https://syntekdriver.svn.sourceforge.net/svnroot/syntekdriver syntekdriver
cd syntekdriver/trunk/driver/
make -f Makefile.standalone clean
make -f Makefile.standalone (ignore os Warnings)
ou
make -f Makefile.standalone driver

Infelizmente, enquanto escrevo este artigo o ‘make install’ ainda não funciona (syntek revisão número 75), mas é possivel faze-lo manualmente :

cp stk11xx.ko /lib/modules/`uname -r`/kernel/drivers/media/video
ou
cp stk11xx.ko /lib/modules/`uname -r`/kernel/drivers/media/video/usbvideo/
depmod -a

Visto que sempre há atualizações, eu recomendo sempre você experimentar o ‘make install’, e se ele não funcionar então repetir o procedimento acima. Para testar o seu funcionamento, siga o procedimento (use essa mesma ordem) :

sudo modprobe videodev
sudo modprobe v4l1-compat
sudo modprobe stk11xx

Se alguma mensagem de erro ocorrer é porque a compilação falhou em gerar o modulo ‘stk11xx.ko’, caso contrario dê um ALT+F2 e digite “camorama” e veja se a câmera esta funcionando de acordo.

7) Dê um ALT+F2 e execute ‘gksu gedit /etc/modules’ e acrescente as linhas :

# modulos para infraestrutura de suporte a video
videodev
v4l1-compat
stk11xx

Segundo o “README” desse modulo, voce pode usar as opções “hflip” and “vflip” seguido do valor =0(desligado) ou =1(ligado). O que essas opções fazem ? Invertem horizontalmente ou verticalmente a imagem, exemplo :

modprobe stk11xx hflip=0 vflip=1

Se você tiver sua imagem invertida na webcam, considere o uso dessas opções no /etc/modules.

8) Faça um teste com algum programa de sua preferência.

Há toneladas de programas diferentes e todos que testei funcionaram perfeitamente, incluindo o Ekiga, só no camorama que precisei ativar o plugin “Color Corrections” porque as cores estavam erradas. Meu teste :

Minha quase foto usando a webcam Syntek embutida no notebook Asus ACJ6.

Observações Finais :

  • O driver/modulo já torna utilizável em 100% a webcam 1.3mpixel que veio com o meu notebook Asus A6CJ(série A6000).
  • Toda vez que seu kernel for atualizado voce precisará repetir o passo 6.
  • Meus agradecimentos ao Jonh Wendell <wendell [no-endereco] ubuntu.com> que me ajudou a lidar com os problemas de dependência de kernel na primeira versão deste artigo.
Anúncios

18 Comentários

Servidor Samba : Lixeira e Auditoria

Dois recursos que não podem faltar numa instalação do Samba, especialmente quando configurado para ser um servidor de Dominio é uma Lixeira para coletar os arquivos apagados na rede e também um modo de auditar eventos que ocorrem entre o usuário e o servidor. Apesar de ser fácil instalar, há pouca documentação na internet em português de como implementar isso, às vezes voce até encontra informações, porém as vezes desatualizadas acabam piorando ainda mais o problema e a consequencia de tudo isso acaba sendo a mesma : pipoca mensagens em lista de discussão perguntando sobre como implementar este ou outro serviço ao samba. Por essa razão estou escrevendo este pequeno howto, para ele servir de referencia quando tiver que responder a mesma pergunta.

O passo-a-passo a seguir considera que voce já esteja com o samba instalado e funcionando e queira apenas implementar o serviço de lixeira e auditoria. Verifique também a existência dos arquivos “recycle.so” e “full_audit.so” em /usr/lib/samba/vfs, sem estes arquivos este artigo não irá funcionar.

1. Implementando a lixeira na rede

1.1 Crie uma pasta que servirá de lixeira para sua rede Samba :

mkdir -p /var/spool/samba/lixeira

Qualquer pasta pode servir, mas recomendo também que voce dê permissão global a ela, não por causa do samba, mas caso seus usuários queiram nos seus compartilhamentos ter acesso a lixeira, voce poderá criar um link simbolico apontando a esta pasta.

1.2 Edite o arquivo /etc/samba/smb.conf e acrescente na sessão [Global] caso a lixeira servirá para todos os volumes compartilhamentos ou então apenas num dos seus [compartilhamentos] as linhas :

vfs objects = recycle
recycle:facility = LOCAL1
recycle:priority = NOTICE
recycle:maxsize = 0
recycle:repository = /var/spool/samba/lixeira/%U
recycle:directory_mode = 0777
recycle:subdir_mode = 0777
recycle:keeptree = Yes
recycle:touch = True
recycle:exclude = *.tmp, *.temp, *.log, *.ldb, *.o, *.obj, ~*.*, *.bak
recycle:exclude_dir = tmp, temp, cache
recycle:versions = Yes
recycle:noversions = .doc|.xls|.ppt|*.dcl

Uma pincelada rápida sobre as opções acima do módulo recycle :

recycle:facility = LOCAL1
recycle:priority = NOTICE

Voce está indicando que usará um arquivo de log para registrar a movimentação dessa lixeira, isso será feito por meio do syslogd de seu sistema e voce terá de configura-lo manualmente. Dá ultima vez que tentei não funcionou, portanto é provável que o módulo “recycle” não faça isso, embora tenha a opção para faze-lo.

recycle:maxsize = 0

Acima voce menciona em bytes o tamanho máximo de um arquivo para ele ir parar na lixeira, zero significa sem limites.

recycle:repository = /var/spool/samba/lixeira/%U

Na linha acima voce menciona onde será a sua lixeira. Se voce usar apenas uma palavra unica como “lixeira/%U” ao inves do path completo será criado uma pasta chamada “lixeira/usuario” dentro do compartilhamento e os arquivos apagados serão enviadas para lá, se ao invés disso, voce fizer o que indiquei acima, todos os arquivos vão parar no mesmo lugar. “%U” será interpretado pelo samba como nome do usuário que estiver conectado, assim se fulano excluir um arquivo, será criada uma pasta “fulano” dentro da lixeira com o nome dos arquivos eliminados por este.

recycle:directory_mode = 0777
recycle:subdir_mode = 0777
recycle:keeptree = Yes
recycle:touch = True

As linhas acima determinam as permissões dos diretórios, se é para guardar o nome da pasta de onde o arquivo foi excluído (keeptree) e se a data do arquivo eliminado pode ser trocado pela data da exclusão (touch).

recycle:exclude = *.tmp, *.temp, *.log, *.ldb, *.o, *.obj, ~*.*, *.bak, *.iso
recycle:exclude_dir = tmp, temp, cache

Acima voce determina respectivamente nome de arquivos e diretorios que deverão ser ignorados pela lixeira, isto é, se alguem excluir um .bak, ele terá sido excluido definitivamente.

recycle:versions = Yes
recycle:noversions = .doc|.xls|.ppt

Acima voce determina se haverá controle de versões(versions), isto é, se um arquivo for sobregravado então a cópia antiga será enviada para a lixeira, e se novamente sobregravar o mesmo arquivo, outra cópia será enviada para a lixeira, mas chegando na lixeira se houver um arquivo de mesmo nome já depositado lá então seu nome terá o sufixo “-copia1”, “-copia2”, etc… a outra opção (noversion) é justamente o contrário, não faz controle de versão para os arquivos que correspoderem ao parametro, eu indiquei arquivos do msoffice porque sabidamente o autosave desses programas vai trazer uma enxame de novas versões a partir do momento que um usuário abrir algum arquivo. O problema não é o autosave em sí, mas acontece que o autosave quando na rede vai superlotar a sua lixeira, também alguns usuários “topeiras” modificam o arquivo quando apenas querem lê-lo e “sem querer querendo” iniciam o processo de autosave. Outros aplicativos são mais expertos e fazem autosave na pasta temporária do windows, ainda outros como o autocad (só na ultima versão) trabalha com um nome temporário e somente depois da gravação ele renomeia-o para o nome real e com isso o controle de versões na lixeira funciona bem.

2. Habilitando a auditoria no servidor Samba

Primeiramente edite o arquivo /etc/samba/smb.conf e acrescente ao compartilhamento desejado (ou sessão [Global] se for para todos) as seguintes linhas :

vfs objects = full_audit
full_audit:facility = LOCAL5
full_audit:priority = NOTICE
full_audit:prefix = %u|%I|%S
full_audit:success = rename rmdir unlink
full_audit:failure = none

em full_audit:prefix voce indica o que deverá preceder no formato do arquivo de auditagem, %u indica nome do usuario, %I representa o IP da maquina e %S indica o nome do compartilhamento conforme a tabela a seguir (copiado das manpages do samba):

Variáveis referentes a maquina cliente de rede :

%a Client’s architecture (Samba, WinNT, WfWg, Win95, or UNKNOWN)
%I Client’s IP address
%m Client’s NetBIOS name
%M Client’s DNS name

Variáveis referentes ao usuário :

%g Primary group of %u
%G Primary group of %U
%H Home directory of %u
%u Current Unix username
%U Requested client username (not always used by Samba)

Variáveis referentes ao servidor :

%d Current server process ID
%h Samba server’s DNS hostname
%L Samba server’s NetBIOS name
%N Home directory server, from automount map
%v Samba version

Variáveis miscelaneas :

%R The SMB protocol level that was negotiated
%T The current date and time

Variáveis referentes ao compartilhamento :

%p Automouter’s path to the share’s root directory, if different from %P
%P Current share’s root directory
%S Current share’s name

Em full_audit:sucess e full_audit:failure voce acrescenta os eventos que devem ser registrados quando houver sucesso e/ou falha. No exemplo acima, eu irie auditar apenas renomeação e exclusão de arquivos/pastas.

Como há pouca documentação sobre o módulo “full_audit” então tive que estudar quais eventos no samba poderiam ser auditados, e tive de arrancar isso estudando o código fonte e parecem ser muitos, são eles :
“connect”,”disconnect”,”disk_free” ,”get_quota” ,”set_quota” ,”get_shadow_copy_data” ,”opendir” ,”readdir” ,”mkdir” ,”rmdir” ,”closedir” ,”open” ,”close” ,”read” ,”pread” ,”write” ,”pwrite” ,”lseek” ,”sendfile” ,”rename” ,”fsync” ,”stat”,”fstat” ,”lstat” ,”unlink” ,”chmod” ,”fchmod” ,”chown” ,”fchown” ,”chdir” ,”getwd” ,”utime” ,”ftruncate” ,”lock” ,”symlink” ,”readlink” ,”link” ,”mknod”, “realpath” ,”fget_nt_acl” ,”get_nt_acl” ,”fset_nt_acl” ,”set_nt_acl” ,”chmod_acl” ,”fchmod_acl”, “sys_acl_get_entry” ,”sys_acl_get_tag_type” ,”sys_acl_get_permset” ,”sys_acl_get_qualifier” ,”sys_acl_get_file” ,”sys_acl_get_fd” ,”sys_acl_clear_perms” ,”sys_acl_add_perm” ,”sys_acl_to_text” ,”sys_acl_init” ,”sys_acl_create_entry” ,”sys_acl_set_tag_type” ,”sys_acl_set_qualifier” ,”sys_acl_set_permset” ,”sys_acl_valid” ,”sys_acl_set_file” ,”sys_acl_set_fd” ,”sys_acl_delete_def_file” ,”sys_acl_get_perm” ,”sys_acl_free_text” ,”sys_acl_free_acl” ,”sys_acl_free_qualifier”

Espero que os nomes sejam auto-explicativos para você, pois não há detalhes suficientes para que eu possa explica-los melhor, no entanto, os mais comuns são e também os que testei foram estes :

none = nenhum (usei este em “failure” simplesmente porque queria uma auditagem bem especifica)
all = todos (esse daqui vai registrar tudo, haja espaço em disco)
mkdir = criar diretorio
rmdir = remover diretorio
open = abrir arquivo
close = fechar arquivo
read = ler arquivo
write = gravar arquivo
rename = renomear arquivo
unlink = excluir arquivo
chmod = mudar permissão
chown = mudar o dono do arquivo
connect= mapeamento ou reconexão a uma unidade de rede
disconnect = desconectar uma unidade de rede

Para determinar onde será gravado a auditoria, acrescente ao arquivo /etc/syslog.conf as linhas :

# auditoria samba
local5.notice /var/log/samba/auditoria.log

E também reinicie o servidor de log (syslogd):

/etc/init.d/sysklogd restart

Apesar de existir desde o primórdio do samba3, o módulo audit_full não é muito bem documentado, a menos que voce participe da lista de discussão do samba(em inglês) voce terá pouco acesso a muitos módulos vfs que o samba possui e também módulos de terceiros como o vscan-clamav (antivirus) que juntamente com estes dois módulos citados neste artigo formam a trindade de segurança do samba.

Conclusão :

Esse artigo foi para ajudar àqueles que estiverem trilhando o mesmo caminho que passei quando começei a usar o samba3, mas o problema de escrever artigos como este é que muita gente confunde os comentários dum blog com “forum técnico” e acaba esperando respostas que não existirão. Eu raramente respondo perguntas nos comentários, se outros quiserem faze-lo não há problema nenhum, mas recomendo que se use de listas de discussão para tirar tais dúvidas.

21 Comentários

Postgres or not Postgres ?

Pois é, estou iniciando um novo projeto com desenvolvimento de aplicações e banco de dados.

Porém este novo serviço vou ter a possibilidade de escolher entre dois banco de dados : FirebirdSQL(FB) e Postgres (PG).

O FirebirdSQL já conheço muito bem, e em meu ultimo trabalho com ele foi possível migrar um conjunto de aplicações que acessavam base de dados no Microsoft SQL Server para FirebirdSQL, e ficou muito bom, com procedures, tabelas, triggers,… muito melhor do que o anterior MSSQL. O FB para administrar é muito fácil, parece ser realmente um sistema autonomo e não requerendo ninguém para administra-lo, não foi sem mérito que ganhou o primeiro lugar em duas categorias do SourceForge Community Choice Awards.

Minha principal questão é investir no Postgres, afinal não é apenas o treinamento, mas adaptações a serem feitas. Luto muito pelo Linux, voces sabem, mas muitas empresas já usam tecnologias consideradas consagradas e neste caso em particular, apesar de poder escolher qualquer banco de dados(vou escolher entre FB e PG) , a linguagem de programação já esta escolhida : Delphi (versão 7).

FirebirdSQL com Delphi é como um passeio no parque, poucas preocupações. Componentes de acesso VCL(Delphi) nativas para acesso, Ferramentas de Administração (win32 e linux) muito boas, server com opção para Linux,… tornam o terreno fértil para progresso rápido do desenvolvimento.

No entanto, Postgres é terreno novo, sempre ouço falar bem dele, mas também ouço reclamações sobre o seu peso e complexidade. Para não fazer experiências com o cliente, afinal o cliente já ficou decepcionado com a empresa anterior, provavelmente vou ter que fazer um treinamento específico para Postgres, não somente administração, mas também desenvolvimento (embora ache que SQL é SQL em qualquer banco) e correr atrás de componentes VCL e ferramenta para administração.

Meus nobres colegas, gostaria que àqueles que já tem experiência em administrar e desenvolver usando Postgres e/ou FirebirdSQL comentasse o que eu devo esperar desse terreno novo, ou até mesmo se devo experimentar o PG ou ficar na zona de segurança com o FB.

Àqueles que puderem me ajudar, comentando a respeito :

  • Migrou de FirebirdSQL para Postgres ? Como foi a sua migração, tranquila ? O que ficou melhor ? O que ficou pior ?
  • Usa Delphi? que versão e suite de componentes de acesso está usando ?
  • Qual ferramenta de administração de banco usa atualmente para criar os objetos de banco de dados, backup, reparação, etc… ?

O trabalho não é muito grande, a empresa é de porte médio e o sistema atual (também em MSSQL) conta com 5GB de dados, mas como serão desenvolvidos também novos programas, por isso é provável que essa base aumente muito. São cerca de 50 usuários acessando simultaneamente a base, a maioria das operações são insert e update, o projeto feito em MSSQL está bem definido(normatizado) com tabelas e SPs e não usa triggers e pelo que vejo são raras as exclusões no banco, o que dá a entender que foi muito bem planejado. A empresa está mudando porque o MSSQL é a versão 6.5 e migra-lo para a versão mais recente, além dos custos tem a incompatibilidade e muito código teria de ser reescrito e seria quase como partir para outro banco de dados, e se for para mudar que tal um banco de dados livre ? É aqui que eu entro.

Todo o comentário esclarecedor será muito apreciado.

15 Comentários