Home

November 2008

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
30      

Advertisement

Syndicate

RSS Atom
Powered by LiveJournal.com

Previous 20

Nov. 4th, 2008

Recently, at a well known mailing list...

ME: Nobody Joe says:

-----Original Message-----
From: ****** ****** [mailto:*******@valid.nl]
Sent: Tuesday, November 04, 2008 11:56 AM
To: Nagios Mailinglist
Subject: [Nagios-users] Any numbers on sizing a nagios server?

LS,
 
  I've searched the internet (maybe I look in the wrong places) but I
can't find any numbers on sizing a nagios server. Are there any numbers
out there amongst you and are you willing to share?
 
Thanks, regards, *****.


ME: And the "funny guy" answers(as always) in a fashion way:

Sent By
  Sent by:"***** *****" <****@cabelas.com>  On:November 4, 2008 5:02 PM
To:"*" <*****@valid.nl>; Nagios

I like 7.


ME: Sounds good han... So the "super funny guy" appears from nowhere and give us a shot of laugh:

*******, ***** (DOV, MSX) wrote:
> Personally I like 9, but I agree that 7 is a nice prime number, well
> thought ******!
>

2 is the best prime in the world. Nuff said.

Sep. 15th, 2008

PWNT.

Aug. 3rd, 2008

Fun with Kernel Timers

I was just wondering how can an event be scheduled to execute in a predefined interval at Kernel's Level, so I arrive to solution below. To understand the code, we need a few concepts first:

HZ = The number of system timer interrupts by second
jiffies = Counter of system interrupts throwed at moment

These two items are updated by the Kernel every second, so lets schedule or "tic-tac" clock:
First we need to declare the following structure to determine which function to run:

struct timer_list tic;

Now at module init function:

static int __init tictac_init(void)
{
        init_timer(&tic); // initialize our structure
        tic.expires = jiffies + 10*HZ; // run function 10 seconds from now
        tic.function = tevent; // our function address
        tic.data = (unsigned long)0; // function parameter
        add_timer(&tic); // schedule event

        return 0;
}

Did you glad how simple it is?
At tevent function we do:

static void tevent(unsigned long param) {

        if (param % 2 == 0)
                printk(KERN_ALERT "[tic]\n");
        else
                printk(KERN_ALERT "[tac]\n");
        param++;

        /* we need to reschedule our tevent function */
        init_timer(&tic);
        tic.expires = jiffies + 10*HZ;
        tic.function = tevent;
        tic.data = param;
        add_timer(&tic);
}

How it's simple!
At module unload:

static void __exit tictac_exit(void)
{
        del_timer(&tic); // I got you!
        printk(KERN_ALERT "Goodbye!\n");
}

Don't forget *del_timer*! I was forced to reboot my VM a few times(Kernel Panic) due lack of del_timer function(You probably can figure out the reason :-) )

Apr. 30th, 2008

O casamento

Nós sempre andamos de mãos dadas. Se eu soltar, ela vai às compras. Ela tem um liquidificador elétrico, uma torradeira elétrica, e uma máquina de fazer pão elétrica. Então ela disse: 'Nós temos muitos aparelhos, mas não temos lugar pra sentar'. Daí, comprei pra ela uma cadeira elétrica.
Lembrem-se, o casamento é a causa número um para o divórcio. Estatisticamente, 100 % dos divórcios começam com o casamento.Eu me casei com a 'Sra. Certa'. Só não sabia que o primeiro nome dela era 'Sempre'.
Já faz 18 meses que não falo com minha esposa. É que não gosto de interrompê-la. Mas tenho que admitir, a nossa última briga foi culpa minha. Ela perguntou: 'O que tem na TV?' E eu disse 'Poeira'.
No começo Deus criou o mundo e descansou. Então, Ele criou o homem e descansou. Depois, criou a mulher. Desde então, nem Deus, nem o homem, nem Mundo tiveram mais descanso.
Quando o nosso cortador de grama quebrou, minha mulher ficava sempre me dando a entender que eu deveria consertá-lo. Mas eu sempre acabava tendo outra coisa para cuidar antes: o caminhão, o carro, a pesca, sempre alguma coisa mais importante para mim. Finalmente ela pensou num jeito esperto de me convencer. Certo dia, ao chegar em casa, encontrei-a sentada na grama alta, ocupada em podá-la com uma tesourinha de costura. Eu olhei em silêncio por um tempo, me emocionei bastante e depois entrei em casa. Em alguns minutos eu voltei com uma escova de dentes e lhe entreguei.' - Quando você terminar de cortar a grama,' eu disse, 'você pode também varrer a calçada.'
Depois disso não me lembro de mais nada. Os médicos dizem que eu voltarei a andar, mas mancarei pelo resto da vida'.

'O casamento é uma relação entre duas pessoas na qual uma está sempre certa e a outra é o marido...'.

Luís Fernando Veríssimo

Apr. 2nd, 2008

Um novo conceito

Mar. 5th, 2008

Voltando a ativa

Aos poucos vamos engatando a 1a novamente.  Mudanca de moradia efetivada com sucesso, um pouco de umas boas merecidas ferias e ca estamos, retomando a programacao normal.
Para fechar com chave de ouro este periodo de hibernacao hoje teremos show do Iron Maiden aqui em Porto Alegre;

E segue a bola.

Jan. 18th, 2008

Nerd Trip 0 Edition

Wow, next weekend I'm going to zero edition of Nerd Trip at the Elf's Forest. Probably the best thing to do on this days.
Backpack equipment check in:
   1 - Acer Notebook
   1 - PCMCIA TIM GPRS Card( should work, I hope so )
   1 - EeePC
   A few Books
   My sun glasses(This is not entirely necessary, but...)
   An umbrella
   1 T Shirt (probably dressed)
   1 Pants

I almost forget about my Pringles.
Elfs, beware Nerd troops! Protect your networks!

Dec. 10th, 2007

Novo serviço

Tendo em vista as recentes quedas em meu serviço de Internet Banda Larga (Skavurska) optei por contratar um outro serviço.
Acredito que agora resolva!




Algumas horas depois, porém, o cable caiu novamente. É, não foi desta vez.

Nov. 29th, 2007

TCHELINUX 2007 - UFRGS

Ta chegando a hora!

Nov. 27th, 2007

Uma vaga lembrança

Uma musica pra ficar na história, uma música, uma vida.

I DON'T WANNA GROW UP - RAMONES

When I'm lyin' in my bed at night
I don't wanna grow up
Nothing ever seems to turn out right
I don't wanna grow up
How do you move in a world of fog that's
always changing things
Makes wish that I could be a dog
When I see the price that you pay
I don't wanna grow up
I don't ever want to be that way
I don't wanna grow up
Seems that folks turn into things
that they never want
The only thing to live for is today...
I'm gonna put a hole in my T.V. set
I don't wanna grow up
Open up the medicine chest
I don't wanna grow up
I don't wanna have to shout it out
I don't want my hair to fall out
I don't wanna be filled with doubt
I don't wanna be a good boy scout
I don't wanna have to learn to count
I don't wanna have the biggest amount
I don't wanna grow up
Well when I see my parents fight
I don't wanna grow up
They all go out and drinkin all night
I don't wanna grow up
I'd rather stay here in my room
Nothin' out there but sad and gloom
I don't wanna live in a big old tomb on grand street
When I see the 5 oclock news
I don't wanna grow up
Comb their hair and shine their shoes
I don't wanna grow up
Stay around in my old hometown
I don't wanna put no money down
I don't wanna get a big old loan
Work them fingers to the bone
I don't wanna float on a broom
Fall in love, get married then boom
How the hell did it get here so soon
I don't wanna grow up

E a obra prima!

http://www.youtube.com/watch?v=6XJZM0k7Q-Qx

Nov. 20th, 2007

TCHELINUX 2007 - Porto Alegre



Nov. 19th, 2007

Ponteiros em Delphi

Por pura curiosidade fui ler como o Delphi trabalha com ponteiros e cheguei a este link:

http://delphi.about.com/od/objectpascalide/a/pointers.htm

Bom, um trecho interessante:

"To concrete this definition, keep in mind the following: everything used in an application is stored somewhere in the computer's memory."

Parei de ler entao.

Nov. 7th, 2007

Using Miscelaneous Devices

Are you developing a simple kernel module? If your module need just one device file under /dev directory, try to use miscdevice.h to develop it.
With miscdevice you don't need worry about MAJOR numbers, you register a new device and the kernel assign only a MINOR number to it. The major points to misc driver, that uses the minor number as index to points to your module.

Take a look:

------8<------- cut here ---------8<-----------------------

#include <linux/init.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kdev_t.h>
#include <linux/miscdevice.h>
#include <linux/fs.h>
MODULE_LICENSE("GPL");

static int trymisc_read(struct file *file, char __user *buf,
                        size_t count, loff_t *pos)
{
        // your read functions goes here
        return 0;
}

// a operation as example
static const struct file_operations trymisc_fops = {
        .owner = THIS_MODULE,
        .read = trymisc_read,
};


static struct miscdevice trymisc_dev = {
        MISC_DYNAMIC_MINOR,
        "trymisc",
        &trymisc_fops,
};


static int trymisc_init(void){

        int ret;

        ret = misc_register(&trymisc_dev);
        if (ret < 0) {
                printk(KERN_ALERT "Problem registering device\n");
                return 2;
        }

        return 0;
}

static void trymisc_exit(void){
        misc_deregister(&trymisc_dev);
}

module_init(trymisc_init);
module_exit(trymisc_exit);



------8<------- and here ---------8<-----------------------

Compile and load module:

root@slackware-note:/usr/src/linux/drivers/misc# insmod ./trymisc.ko
root@slackware-note:/usr/src/linux/drivers/misc# lsmod
Module                  Size  Used by
trymisc                 1664  0
root@slackware-note:/usr/src/linux/drivers/misc# ls -la /dev/trymisc
crw-rw---- 1 root root 10, 62 2007-11-07 15:51 /dev/trymisc
root@slackware-note:/usr/src/linux/drivers/misc# grep 10 /proc/devices
 10 misc
root@slackware-note:/usr/src/linux/drivers/misc# grep trymisc /proc/misc
 62 trymisc
root@slackware-note:/usr/src/linux/drivers/misc#

Its very easy and funny. Try yourself.

Oct. 30th, 2007

Brincando com Logical Volumes

Instalei em um vmware um Slackware 11.0.0 apenas para testar um novo conceito para mim, Logical Volumes.
Primeiro precisamos criar algumas partições com aptas ao LVM (8e no fdisk).

root@slacklvm:~# fdisk -l

...
/dev/hda5             221         282      497983+  8e  Linux LVM
/dev/hda6             283         344      497983+  8e  Linux LVM
root@slacklvm:~#

Criei duas, com tamanhos de 350M cada. Não formatamos as mesmas ainda.
Agora vem a diversão. Primeiro criamos 2 Physical Volumes para ambas as partições:

root@slacklvm:~# pvcreate /dev/hda5 /dev/hda6
pvcreate -- physical volume "/dev/hda5" successfully created
pvcreate -- physical volume "/dev/hda6" successfully created

root@slacklvm:~#

Otimo, ambas agora podem fazer parte de um Grupo de Volumes (vg):

root@slacklvm:~# vgcreate vg00 /dev/hda5 /dev/hda6
vgcreate -- INFO: using default physical extent size 32 MB
vgcreate -- INFO: maximum logical volume size is 2 Terabyte
vgcreate -- doing automatic backup of volume group "vg00"
vgcreate -- volume group "vg00" successfully created and activated

root@slacklvm:~#

Pronto. Temos um Grupo de Volumes chamado vg00. Dentro dele inserimos nossas "partições" aqui chamadas de Volumes Lógicos:

root@slacklvm:~# lvcreate -L 650M /dev/vg00 -n lv00
lvcreate -- rounding size up to physical extent boundary
lvcreate -- doing automatic backup of "vg00"
lvcreate -- logical volume "/dev/vg00/lv00" successfully created

root@slacklvm:~#

Em nosso exemplo criamos um volume lógico de 650M inicialmente. Muito bem, agora basta criar o sistema de arquivos em cima do nosso logical volume:

root@slacklvm:~# mkfs.ext3 /dev/vg00/lv00
....
....
32768 blocks per group, 32768 fragments per group
14336 inodes per group
...
...
root@slacklvm:~#

Pronto. Basta montar:
root@slacklvm:~# mount /dev/vg00/lv00 /mnt/
root@slacklvm:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda1             1.4G  891M  384M  70% /
/dev/vg00/lv00        662M   17M  612M   3% /mnt
root@slacklvm:~#

Sem espaço no /mnt ?
Vamos aumentar o tamanho criando uma outra partição, transformamos ela em um physical volume, adicionamos ao nosso volume group e dimensionamos nosso logical volume.

root@slacklvm:~# umount /mnt
root@slacklvm:~# pvcreate /dev/hda7
pvcreate -- physical volume "/dev/hda7" successfully created

root@slacklvm:~# vgextend vg00 /dev/hda7
vgextend -- INFO: maximum logical volume size is 2 Terabyte
vgextend -- doing automatic backup of volume group "vg00"
vgextend -- volume group "vg00" successfully extended

root@slacklvm:~# lvextend -L +400M /dev/vg00/lv00
lvextend -- rounding relative size up to physical extent boundary
lvextend -- extending logical volume "/dev/vg00/lv00" to 1.06 GB
lvextend -- doing automatic backup of volume group "vg00"
lvextend -- logical volume "/dev/vg00/lv00" successfully extended

root@slacklvm:~# resize2fs -f /dev/vg00/lv00
resize2fs 1.38 (30-Jun-2005)
Resizing the filesystem on /dev/vg00/lv00 to 278528 (4k) blocks.
The filesystem on /dev/vg00/lv00 is now 278528 blocks long.

root@slacklvm:~# mount /dev/vg00/lv00 /mnt/
root@slacklvm:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda1             1.4G  891M  384M  70% /
/dev/vg00/lv00        1.1G   17M 1013M   2% /mnt
root@slacklvm:~#

Oct. 27th, 2007

The Same Old Fears

Hi people. After a hard working day( in a saturday ) here I am. So tired to study, so boring to talk with anybody. Something MUST change, but I don't fell ready to guide this...

"Yes bed, ok, I'm going, just a few more nightmares...."

Oct. 19th, 2007

Tchelinux 2007 - Edição Porto Alegre

Esta aberta a chamada de trabalhos para o 2º Seminário de Software Livre Tchelinux que acontecerá no dia 1º de Dezembro de 2007 em Porto Alegre. O período para submissão de propostas vai de 19 até 25 de Outubro, e as palestras escolhidas serão anunciadas no dia 26 de Outubro juntamente com a programação oficial do evento. Para enviar sua proposta de palestra, utilize o formulário no link a seguir:

http://www.tchelinux.org/papers/

Oct. 16th, 2007

Projeto WIKI TcheLinux

Estamos mantendo em http://wiki.tchelinux.org uma série de textos a respeito do Kernel Linux. Abaixo segue o texto inicial, armazenado aqui para fins históricos. Conforme os demais forem saindo, tanto de minha parte quando da parte do Douglas, irei colocando-os aqui.

Segue:

Processos

Um primeiro conceito a ser introduzido antes de mais nada, é o conceito de PROCESSO. Todo e qualquer sistema operacional usa uma abstração conhecida pelo nome de processo, que pode ser considerada( entre outras coisas ) como uma instância de um programa( um programa em execução ).

Em sistemas operacionais tradicionais, um processo nada mais é do que uma lista de instruções a serem executadas pelo processador. Todo o processo em um sistema operacional recebe uma area de endereçamento que é um conjunto de endereços de memória ao qual o mesmo pode referenciar, sendo que nada além deste espaço diz respeito ao processo e todo acesso a partes externas a área de endereçamento do processo deve ser vetado.

É importante salientar que processos diferem de programas. Processos podem executar N programas sequencialmente enquanto um programa pode ser executado por M processos simultâneamente, portanto, programas são diferentes de processos. Em ambientes mono processados apenas um processo pode rodar por vez(fazer uso do processador), e o sistema operacional deve prover uma ferramenta para alternar o processador entre todos processos que estão ativos, passando a impressão de que vários programas rodam simultânemante. A esta ferramenta da-se o nome de scheduler ou escalonador.

Para prover esta impressão de que vários programas rodam simultaneamente em um único processador, o kernel do sistema operacional deve-se utilizar de um conceito conhecido como preempção, ou seja, dado certo tempo de execução do processo X, o escalonador é chamado para fazer uma troca de processo( oferecendo o processador a outro processo ativo ), assim distribuindo da forma mais justa possível o processador a todos os processos ativos no sistema.

Como um processo possui uma área restrita de endereçamento, quando o mesmo precisa de um recurso que reside em outra área que não seja a sua ele tem que fazer uma solicitação ao Kernel. Suponhamos um processo que necessita acessar o conteúdo de um certo arquivo, para tal tarefa ele faz uso de chamada ao Kernel solicitando tal informação. O Kernel então recebe esta solicitação e o fluxo passa a ocorrer agora em Kernel Space, ou seja, sem qualquer restrição quanto ao espaço de endereçamento. Uma vez que o Kernel tenha atendido a solicitação, ele a devolve ao processo e entao o fluxo volta ao seu contexto original (User Space).

Interessante levar em consideração que o fluxo que ocorre após a chamada, é um fluxo implementado no próprio kernel. A todas estas chamadas possíveis fornecidas pelo Kernel damos o nome de System Calls (syscalls), e cada syscall é composta por um conjunto de instruções aqui chamadas de kernel control path, portando, kernel control path é um conjunto de instruções necessárias para atender uma syscall.

Arquitetura

Em termos de arquitetura de Kernels, podemos dividi-los superficialmente em dois tipos:

Monolithic:
O Kernel é composto por um, e somente um, programa em que todas as syscalls, controles e afins são implementados.

MicroKernel:
Neste tipo de implementação o Kernel possui programas que o auxiliam trocando mensagens entre si. Aqui por exemplo o sub sistema de IO poderia estar em um processo separado, em que o nosso micro kernel conversaria quando necessitase de alguma operação de IO. Esta implementação é considerada por alguns como a mais elengante, porém envolve um algoritmo um pouco complexo para controlar esta troca de mensagens entre o micro kernel e seus 'auxiliares'.

Existe ums discussão entre qual dos dois modelos de implementação é o melhor e não cabe aqui uma discussão a cerca deste assunto. O Linux em si implementa um kernel monolítico com aspectos de micro kernel. Por exemplo, os módulos de certos dispositivos (drivers) podem ser plugados em nosso kernel monolítico. Isto traz um enorme ganho, pois permite que drivers sejam compilados, plugados ao kernel e testados sem a necessidade de uma reinicialização completa do sistema, a conversa entre o kernel e esse módulos plugáveis é feita através de uma bem definida API, sendo assim quem desenvolve drivers não necessita conhecer a fundo as entranhas do kernel, basta conhecer a bem documentada API.

Oct. 13th, 2007

Pede pra sair!

Ontem foi um dia assíncrono. Algumas coisas não saíram da maneira que costumavam sair.
Primeiro nos reunimos eu, o Panda da Papua Nova Guiné(PPNG) e o grande Bola Mega(BM) para uma visita a livraria Cultura. Acabei comprando o livro que o BM queria, e ele( como é muito parceria ) acabou deixando um encomendado para ele. O PPNG comprou um livro para servir de referência em algo que ele está escrevendo, todos felizes.

Feito isso, fomos a casa do BM para fazer nada senão mexer no notebook do PPNG. Fartos, fomos até a pizzaria( que fica a 10m da casa do BM ) para comermos uma pizza bacana. Vejam duas imagens que falam por si só.





Bom, lá pelas tantas começaram com a piada do "Não aguenta mais pizza Zero Dois? Pede pra sair!"
Quando todo mundo já estava saturado de ouvir o famoso "Pede pra sair!" heis que a garçonete( que pelo visto não ficou alheia as conversas ) chegou e pediu se desejavamos mais alguma coisa. Ao ouvir um "Não, muito obrigado" do PPNG ela alfinetou:

_ Então, pede pra sair!

Chegando em casa alguns problemas impediram que eu fizesse o que havia planejado, mas isso a gente cobre depois.

Oct. 9th, 2007

Run!

They are everywhere!
Run to the hillssss... Run foor  youuurrr liiiiiiiiives!

Oct. 8th, 2007

Galo Cinza!

Fear, much fear...

Previous 20