• libvirt no Slackware 13.1

    Data:2010.07.01 | Categorialinux, servidores, virtualização | Resposta:0

    Libvirt é um ótimo utilitário para gerenciamento de máquinas virtuais de algumas plataformas de virtualização, como Xen, KVM, VMWare ESX, VirtualBox, OpenVZ, entre outros. Neste post farei um guia rápido para instação dele.

    Como estou usando a distribuição Slackware, é interessante compilar o libvirt e gerar um pacote txz, no padrão da distribuição. Como o pessoal da slackbuilds.org já disponibilizou o script SlackBuild para ele, vamos aproveitar. Acesse esse link que mostrará o resultado da busca por libvirt no repositório. Como resultado, aparecerá o link para a página de download da versão mais atual que estiver no repositório. Clique no link.

    Quando escrevi este post, a versão que estava lá era a 0.7.6, mas eu abordarei aqui a versão 0.8.1 por causa de novos recursos. Portanto, o único pacote necessário será o libvirt.tar.gz. Baixe-o clicando no link da página. O código fonte da versão 0.8.1 você encontrará neste endereço.

    Dentre vários recursos desta versão, uma em especial eu gostaria de colocar em evidência: o suporte ao módulo macvtap. A grosso modo, isto possibilita anexar uma interface virtual tap em uma interface real. Assim é possível que o sistema operacional hóspede se integre à LAN real da máquina hospedeira. Este recurso está disponível a partir da versão 2.6.34 do kernel do Linux. Desta maneira, será necessário atualizar o kernel para esta versão. Como compilar o kernel não está no escopo do artigo, deixo apenas a informação de habilitar o recurso de macvtap na seção Device Drivers->Network device support->MAC-VLAN support e MAC-VLAN based tap device.

    Supondo que os pacotes do libvirt foram salvos no diretório ~/libvirt, execute os seguintes passos:

    cd ~/libvirt
    tar xvf libvirt.tar.gz
    mv libvirt/* .
    

    Edite o arquivo libvirt.SlackBuild para alterar a versão de 0.7.6 para 0.8.1. Salve e vamos compilar:

    ARCH=`uname -m` ./libvirt.SlackBuild
    

    Aguarde terminar e após instale o pacote:

    installpkg /tmp/libvirt-0.8.1-x86_64-1.tar.gz

    Configuração básica

    Verifique neste post um exemplo de script de inicialização para o serviço do libvirt. Copie o script para um arquivo chamado rc.libvirtd na pasta /etc/rc.d/. Devo lembrar de acrescentar sua chamada dentro do script rc.local, caso queira que ele suba automaticamente com o sistema, quando iniciado.

    Por default, o servidor do libvirt abrirá um socket tls para acesso tcp, e para isto, é necessário gerar um certificado. Com a finalidade apenas de teste, não creio ser necessário isto, já que o acesso normalmente será feito pelo socket unix mesmo. Altere a opção listen_tls=1 para listen_tls=0 no arquivo /etc/libvirt/libvirtd.conf. Não adianta só comentar esta linha, já que o default é habilitado.

    Deixe-me um comentário!!

  • The recovery

    Data:2010.07.01 | Categoriacatástrofes, linux, recuperação | Resposta:0

    Continuando o post anterior

    Quando vi que nada funcionava bateu aquele gelo: PUTZ! COMO FUI FAZER ISSO?! Logo pensei: preciso ficar frio e encarar este desafio agora, recuperar o sistema… Já abri uma VM que tenho aqui de testes e dei o mesmo comando suicida, para representar o cenário e propor uma solução. Logo pensei: vou isolar esse disco virtual e trabalhar com ele em secudário, já que ele zuado não iniciará. Como eu estava trabalhando com um Slackware, em ambos sistemas, já resolvi inicializar via DVD de instalação, já que o Slackware entrega um bash no início da instalação.

    Depois de inicializado pelo DVD, montei a partição / da instalação estragada no diretório virtual /mnt (virtual sim porque inicializei via DVD). Montou sem problemas, mas é claro, não estraguei a partição, e sim o sistema. Fui até o diretório que foi promovido ao novo /, o /mnt/usr/src/twolame, e verifiquei que todas as pastas movidas estavam lá, e totalmente acessíveis e com as permissões originais. Simplesmente executei o comando inverso da cagada:

    mv /mnt/usr/src/twolame/* /mnt

    Pronto, sem mensagens de erro. Para ver se tive êxito, reinicializei o sistema, mas procurando o boot no disco da VM. Simpirilim! Funcionou. Parace que o sistema nunca passou pelo que passou. Tudo em seu devido lugar, apenas parti para a máquina física que foi abençoada com meu comando mortal para fazer o mesmo.

    Resumindo… tudo resolvido. UFA!

    Deixe-me um comentário!!

  • Oh shit!

    Data:2010.06.30 | Categoriacatástrofes, linux | Resposta:2

    Há momentos na vida em que a gente deseja fortemente ter o recurso de rollback ou, no vulgo, ctrl+z. Esta noite realmente eu me superei. Ao tentar compilar um pacote Slackbuild, consegui destruir o meu sistema. Veja o tamanho da cagada:

    Criei uma pasta para os arquivos que ia trabalhar, mkdir twolame. Lá dentro baixei os arquivos do slackbuilds.org, referentes à este pacote. Os arquivos são pacote tarball dos fontes; twolame.tar.gz, que contém o script slackbuild e outros de apoio; e a assinatura twolame.tar.gz.asc. Para compilar descompactei o twolame.tar.gz e aí que começou o inferno.

    Com a simples finalidade de mover todo o conteúdo da pasta twolame recém gerada para a pasta local (.), fui dar o seguinte comando:

    mv twolame/* .

    Mas ao digitar, pressionei o ‘t’ do twolame muito fraco, tanto que nem chegou a ser impresso na tela, e eu como sou distraído, ou confiante demais, apertei o tab para auto-completar, o que não aconteceu, e segui com o /* .. Nem precisa dizer o que saiu né:

    mv /* .

    Bem, acho que nem preciso dizer que após este comando, nada mais funcionou né. O pior foi pensar que este sistema seria ativado em um cliente no dia seguinte. Por isso sempre digo, nunca dê acesso de root para criança.

    Deixe-me um comentário!!

  • diff binário

    Data:2010.06.28 | Categoriacuriosidade, linux, utilidades | Resposta:0

    Estava eu procurando por uma solução de patch binário para compor uma parte do meu sistema de backups. Pois bem, embora não seja o cerne de tudo, vou explicar meu cenário para que seja melhor entendido.

    Eu estou trabalhando com máquinas virtuais com imagens de discos em volumes lógicos (LVM). Usando o recurso de snapshot do LVM, que é assunto para outro post, eu estava copiando inteiramente a imagem para um backup, através do comando dd. O problema é ter que fazer uma cópia full da  imagem a cada backup. Minha máquina de teste tem 10GB, mas imagina um servidor em produção, que pode ter várias dezenas de GBs… Fica inviável o backup deste jeito. Assim começou a busca por uma solução de calcular a diferença entre os dois binários, imagem de produção e a backup, para assim gerar um patch com somente o necessário para transferir ao servidor de backup. Após, eu precisaria aplicar este patch e assim atualizar a iamgem.

    Pesquisando no oráculo Google, encontrei este site. Lá pude baixar dois fontes, bsdiff e bspatch. Esses são versões ‘binárias’ do GNU diff e patch. Depois de baixar, compilei usando o Makefile do próprio pacote. Como ele foi feito para os *BSD, o formato do Makefile é um pouco diferente. Para compilar direitinho, crie um arquivo chamado Makefile.patch no mesmo diretório do fonte. Dentro dele, coloque o seguinte conteúdo:

    --- Makefile    2010-06-28 14:52:42.351369894 -0300
    +++ Makefile.gnu        2010-06-28 14:53:29.883369968 -0300
    @@ -1,4 +1,5 @@
     CFLAGS         +=      -O3 -lbz2
    +INSTALL                ?=      /bin/install
    
     PREFIX         ?=      /usr/local
     INSTALL_PROGRAM        ?=      ${INSTALL} -c -s -m 555
    @@ -10,6 +11,6 @@
    
     install:
            ${INSTALL_PROGRAM} bsdiff bspatch ${PREFIX}/bin
    -.ifndef WITHOUT_MAN
    +ifndef WITHOUT_MAN
            ${INSTALL_MAN} bsdiff.1 bspatch.1 ${PREFIX}/man/man1
    -.endif
    +endif
    

    Salve o arquivo e aplique o patch da seguinte forma:

    patch -p0 < Makefile.patch

    Depois disso, é só instalar:

    make install

    Para testar, fiz o seguinte: copiei para uma pasta os binários /bin/ls e /bin/bash. Lá, calculei a diferença usando o bsdiff:

    /usr/local/bin/bsdiff ls bash teste

    Assim, foi criado o arquivo binário teste, que é a diferença entre ls e bash, ou seja, um patch. Depois, eu resolvi aplicar este patch no próprio ls. Assim, eu faria este ls se transformar no bash.

    /usr/local/bin/bspatch ls ls_patched teste

    Realmente, aconteceu como eu esperava. O comand bspatch gerou um binário ls_patched, que é o resultado do ls + teste. E adivinha, ele é exatamente o bash. Executa  direitinho.

    Deixe-me um comentário!!

  • Liberar espaço

    Data:2010.06.21 | Categoriacuriosidade, linux, utilidades | Resposta:1

    De vez em quando, a partição root, ou / (barra), fica perto de usar sua capacidade máxima, e para que o sistema não pare, é preciso liberar um pouco de espaço. De cara, eu sempre penso no diretório /tmp. Claro, se ele fizer parte da mesma partição do /. Para solucionar temporariamente o problema de espaço, eu excluo os arquivos temporários que não foram usados desde uma certa data. Para isto, o comando find é bastante útil. Como exemplo, no meu laptop, eu rodo a seguinte sentença:

    $ sudo find /tmp -atime +1 -exec rm -rfv{} \;

    Isto faz com que ele busque no diretório /tmp todos os arquivos que tem a data de acesso maior que 1 dia no passado e submete-o ao comando rm, para removê-lo. A data pode ser modificada alterando o parâmetro +1 do atime. Caso coloque +2, serão buscados os arquivos com mais de 2 dias de acesso. Para mais informações, sempre existe o man.

    $ man find

    Outro utilitário bom para ajudar na busca por maior espaço livre é o du (disk usage). Ele faz uma somatória do uso de cada diretório e subdiretório. Dois parâmetros que sempre uso são: -h, para traduzir o espaço usado para unidades mais legíveis (GB, MB…); –max-depth=n, que diz ao du para correr até o nível n. Exemplo de uso:

    $ sudo du -h --max-depth=1 /tmp

    Ou seja, some o uso de todos os diretórios e subdiretórios de /tmp, porém só me exiba até o primeiro nível, de maneira legível.

    Deixe-me um comentário!!

  • Truque SQL

    Data:2010.06.11 | Categoriabanco de dados, sql | Resposta:0

    Hoje precisei analisar uma tabela no PostgreSQL, que tem um campo supostamente único, mas o campo não estava definido como único. Eu precisava saber se realmente haviam registros duplicados e quais eram.

    Só de pensar, já percebi que não era nada rápido e fácil, mas consegui a solução. A fórmula é a seguinte:

    select * from (SELECT count(uniquefield),uniquefield from yourtable group by uniquefield) as repetidos where count > 1;

    Ou seja, me traga os registros que somam mais de uma ocorrência do campo uniquefield na tabela yourtable. Pode parecer simples pra alguns, mas resolveu minha vida hoje.

    Deixe-me um comentário!!

  • CPU flags

    Data:2010.06.02 | Categoriacuriosidade, hardware, linux | Resposta:0

    Pelo tanto que venho lendo sobre virtualização e propriedades dos processadores, resolvi ir um pouco mais a fundo para saber o que significam aqueles nomes estranhos de instruções. No Linux pode-se verificar o conteúdo do arquivo /proc/cpuinfo:

    
    $ grep flags /proc/cpuinfo
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv
    

    As mais comuns que vi referências foram: PAE (Physical Address Extensions) que permite endereçamento de memória acima de 4GB; HT (Hyper Threading) que permite um núcleo de processador possuir duas filhas de processamento, simulando assim processamento paralelo; LM (Long Mode) que indica presença de instruções x86_64; entre outros que podem ser encontrados neste endereço.

    Deixe-me um comentário!!

  • Ele

    Data:2010.05.31 | Categoria"viagens", espiritualidade | Resposta:0

    Embora existam dos mais diversos nomes, eu conheço apenas um pronome como referência: Ele. Dizem que Ele está no céu, mas não é o mesmo que podemos ver e sentir. É um que, nem mesmo com uma super nave espacial poderemos ir. Apesar de existirem diversas versões e maneiras de representá-Lo e vivê-Lo, eu certamente talvez tenha uma dúvida que com certeza Ele está lá (mesmo sem saber exatamente onde é ‘lá’) desejando que compreendamos Sua proposta.

    Uma coisa que realmente acredito: O bem é bom, então vou multiplicá-lo.

    Deixe-me um comentário!!

  • Certificações

    Data:2010.05.31 | Categoria"viagens" | Resposta:0

    Há um tempo já venho refletindo sobre a real importância de um certificado em tecnologia da informação. Se for pensar bem, aquele documento não comprova que o profissional realmente sabe o que faz e/ou tem melhor experiência que outro profissional não certificado. A única certeza é que aquela pessoa se saiu bem numa prova e pronto.

    Lógico que não posso generalizar, mas as provas de certificações se parecem um pouco com o vestibular. As pessoas ralam de estudar, muitas vezes decoram sem entender o porquê daquilo ser assim e prestam uma prova. Será que as certificações não são estimuladas principalmente pelas escolas preparatórias? Um curso, seja a tecnologia que for, não é nada barato.

    Sem pensar no custo, será que realmente terei o retorno esperado adiquirindo aquela certificação? Eu particularmente acredito que a certificação é um motivo para você estudar, mas não apenas com a finalidade de ser reconhecido ou ganhar dinheiro, mas sim pensando no benefício do aprendizado.

    Li hoje esse artigo, que talvez expresse melhor meu pensamento. Vale a pena conferir.

    Deixe-me um comentário!!

  • rc.libvirt

    Data:2010.05.26 | Categorialinux, servidores, virtualização | Resposta:1

    Segue abaixo um script de start e stop para o serviço libvirtd que fiz para Slackware:

    #!/bin/bash
    
    MODULES="tun vhost_net"
    PIDFILE="/var/run/libvirtd.pid"
    TIMEOUT=${TIMEOUT:-40}
    OPTS=${OPTS:-""}
    
    check_running_machines() {
    
      i=0
    
      for j in `virsh list | grep running | awk '{print $2;}'` ; do
        virsh shutdown $j
      done
    
      echo -n "Waiting machines"
    
      while [ $(virsh list | grep running | wc -l) -gt "0" ]; do
        if [ "$i" -ge "$TIMEOUT" ];then
          break
        fi
        echo -n "."
        i=`expr $i + 1`
        sleep 1
      done
    
      echo ""
    
      if [ $(virsh list | grep running | wc -l) -gt "0" ];then
    
        echo -n "The following machines are still running, forcing shutdown: "
        for j in `virsh list | grep running | awk '{print $2;}'` ; do
          virsh destroy $j
          echo -n "$j "
        done
    
        echo ""
        sleep 2
      fi
    
    }
    
    check_processor() {
    
      egrep 'vmx' /proc/cpuinfo > /dev/null
    
      if [ "$?" -eq "0" ];then
        MODULES="$MODULES kvm_intel kvm"
      fi
    
      check=$?
    
      egrep 'svm' /proc/cpuinfo > /dev/null
    
      if [ "$?" -eq "0" ];then
        MODULES="$MODULES kvm_amd kvm"
      fi
    
      check=`expr $check + $?`
    
      if [ $check -eq "2" ];then
        echo "Your systems does not support KVM!"
      fi
    
    }
    
    start() {
      if [ -f $PIDFILE ];then
        echo "libvirt is already running..."
        exit 1
      fi
      echo "Starting libvirtd..."
      check_processor
      modprobe -a $MODULES
      libvirtd -d -l $OPTS
    }
    
    stop() {
      if [ ! -f $PIDFILE ];then
        echo "libvirt is not running..."
        exit 2
      fi
      check_running_machines
      check_processor
      echo "Stopping libvirtd..."
      kill -TERM `cat $PIDFILE`
      modprobe -ra $MODULES
    }
    
    case $1 in
    start)
      start
      ;;
    stop)
      stop
      ;;
    restart)
      stop
      sleep 1
      start
      ;;
    *)
      echo "Usage: $0 (start|stop|restart)"
      ;;
    esac
    

    Deixe-me um comentário!!

Tags Cloud

Arquivo

setembro 2010
S T Q Q S S D
« ago    
 12345
6789101112
13141516171819
20212223242526
27282930  

Blog

Lista de Links

Utilitários

Tweets

Posting tweet...