Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

terça-feira, setembro 03, 2013

Fix Windows 8 WPA2-Personal PSK/AES connection problem

If you try to connect a Windows 8 devices to a wireless network with both AES/PSK and PIN/WPS configuration modes, it will not work.

For some unknown reason, Windows 8 devices try to join the network using WPS/PIN, but the device is not expecting any WPS/PIN client and it will fail to establish a connection.

In the office network, all other devices running Mac OS X, iOS, Android and Linux work like a charm, but Windows 8 one simple don't. So I started checking what may be the problem and found that if I disable the WPS/PIN configuration for the router, Windows 8 clients start connecting and working with the network. It's annoying, but you can just print some WiFi Zone sign with instructions and a PSK distribution scheme (printed on the sign or by request).

That's it, to make Windows 8 clients work with your Wireless network in WPA2-Personal for AES and PSK, you must disable WPS/PIN options.

sexta-feira, março 01, 2013

Ajustando o Linux para Asterisk

O Asterisk, assim como qualquer outro processo no Linux (e basicamente em qualquer Unix/Unix-like) estará limitado pelas definições de limites do sistema hospedeiro, sejam elas de nível global ou de usuário.

Um dado usuário, que para este artigo será asterisk, terá alguns limites definidos de forma global ao sistema (seja via builtin, seja via /etc/security/limits.conf, seja via /etc/sysctl.conf). Cabe ao proponente a administrador ou especialista conhecer estes limites e ajustá-los de acordo com a necessidade do sistema em questão.

Exemplo em um sistema Debian 6.0.7 sem tunning:

$ id asterisk
uid=111(asterisk) gid=116(asterisk) groups=20(dialout),29(audio),116(asterisk)

File Descriptors in Kernel Memory
$ /sbin/sysctl fs.file-nr
fs.file-nr = 1664       0       1646085 (alocados/pré-alocação/máximo)

Max Files
$ /sbin/syscrl fs.file-max
fs.file-max = 1646085

$ ulimit -Ha (hard limits)
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

O limite em open files é baixo para um sistema que planeja processar muitas chamadas, e deve ser ajustado.

$ ulimit -Sa (soft limits)
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

O soft limite está igual ao hard limit para open files. Será que posso digitar o comando que me foi indicado como a solução dos meus problemas?

$ ulimit -n 32768
-bash: ulimit: open files: cannot modify limit: Operation not permitted

Não! Olhe no ulimit -Hn que você verá que o limite máximo está igual ao soft limit. O administrador de sistemas/especialista pode editar o /etc/security/limits.conf e acrescentar duas linhas que irão elevar os limites para o usuário em questão:

asterisk        soft    nofile  1024
asterisk        hard    nofile  32768

No Debian, é necessário editar o arquivo /etc/pam.d/common-session e /etc/pam.d/common-session-noninteractive e adicionar a linha abaixo, para que sejam carregados para o usuário quando este iniciar uma sessão no sistema (seja ela interativa ou não)

session required pam_limits.so

Iniciando uma nova sessão com o usuário asterisk, estes serão os resultados:

$ ulimit -Ha (hard limit, só o sys-admin muda)
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 32768
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Veja que o limite a nível global agora é maior, mas como está o limite do usuário?

$ ulimit -Sa (soft limit, o próprio user muda)
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Não atende às necessidades ainda, será que agora é possível alterar?

$ ulimit -n 10240

Sim! Pois o limite global foi alterado e o usuário pode mudar até aquele máximo global. Vamos ver como ficou:

$ ulimit -Sa

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 10240
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Os exemplos acima são apenas algumas áreas que podem ser melhoradas. Vamos fazer algo relativo ao sistema agora, começando por checar o número máximo para fs.file-max:

$ /sbin/sysctl fs.file-max
fs.file-max = 1646085

E como está o uso? O comando abaixo, retornará a quantidade em uso, a pré-alocada e a máxima, apresentada no comando anterior:

$ /sbin/sysctl fs.file-nr
fs.file-nr = 1568       0       1646085

Experimente aumentar o número máximo de arquivos abertos:

# sysctl -w fs.file-max

Quando chegar em um valor seguro, aplique editando o /etc/sysctl.conf e alterar/adicionar a linha com fs.file-max

fs.file-max =

Execute em seguida:

# sysctl -p

E quanto a conexões de rede?

Experimente com a otimização da memória do TCP/IP a ser usada em setsockopt()

net.ipv4.tcp_rmem
net.ipv4.tcp_wmem

Portas para novas conexões:

net.ipv4.ip_local_port_range =

Aumente os valores de auto-tune em:

net.core.rmem_max
net.core.wmem_max
net.core.netdev_max_backlog
net.ipv4.tcp_window_scaling = 1

Se for ter muitos processos:

kernel.pid_max

Posteriormente, novos pontos de melhoria serão apresentados.

sábado, dezembro 01, 2012

Um exemplo do por que eu prefiro o PostgreSQL para banco de dados

Quando se trabalha com tecnologia da informação, existem muitas escolhas que devem ser feitas e estas escolhas em conversas, certamente irão gerar questionamentos dos porquês. É assim com o sistema operacional (Unix/Linux/Mac, Windows), com a linguagem de programação (C/C++/Java/Ruby/Python/Perl/PHP), com os frameworks, as suites de produtividade, os ambientes de desenvolvimento e por aí vai.

Muitas vezes, as escolhas são feitas de formas qualitativas subjetivas, outras por motivos técnicos ou qualitativas objetivas. Neste vídeo, há um exemplo simples dos motivos técnicos que podem levar um profissional usar PostgreSQL ao invés de MySQL quando se precisa de um servidor de banco de dados.


Por estes e muitos outros aspectos técnicos, eu prefiro o PostgreSQL para meus projetos de banco de dados, sejam eles simples ou complexos.