terça-feira, 30 de dezembro de 2008

Instalação do Yum no Red Hat Enterprise Linux 4

Utilizando o RHEL4, necessitei de instalar e remover alguns pacotes. Para quem está habituado no ambiente Debian, essa tarefa costuma ser trivial quando se utiliza o utilitário apt-get. Já no RHEL 4, tive que utilizar o utilitário rpm.

O problema, é que o rmp não atualiza/remove certos pacotes que dependem de outros pacotes, ou seja, todos os pacotes devem ser instalados manualmente,o que consome um certo tempo. Lembrei-me do projeto YUM, que veio para simplificar a instalação dos pacotes nesse tipo de distribuição.

O YUM (Yellow dog Updater, Modified) é um software desenvolvido pela Duke University projetado para ser um instalador, atualizador e removedor de pacotes RPM, semelhante ao apt-get do Debian.

Ele trata automaticamente as dependências de arquivos não sendo necessário ficar buscando e instalando as dependências manualmente, lógico que para ele fazer tudo sozinho todas as dependências tem que estar nos repositórios configurados na maquina.

Por padrão o Red Hat não vem com o YUM e sim o Up2date, que só baixa os arquivos dos repositórios oficiais da Red Hat, mediante ao pagamento é claro. Já com YUM não, você pode colocar diversas bases de pesquisa, ficando assim livre do up2date.

==================================
1º Passo - Instalação:
==================================

Baixe e instale a versão do YUM para Red Hat 4. É fácil de ser encontrado na web, basta procurar por: yum-2.4.2-0.4.el4.rf.noarch.rpm

Para fazer a instalação basta rodar no console o comando:


# rpm -ivh yum-2.4.2-0.4.el4.rf.noarch.rpm



Bem, pode acontecer alguns problemas de dependências, como:

Error: Failed dependencies:
python-elementtree is needed by yum-2.4.2-0.4.el4.rf.noarch
python-sqlite is needed by yum-2.4.2-0.4.el4.rf.noarch
urlgrabber is needed by yum-2.4.2-0.4.el4.rf.noarch

Então será necessário instalar estes outros pacotes (que também é fácil achar pela web). Vou colocar aqui uns links da onde eu baixei, mas quando você for fazer, pode não estar ativos, ai você pode localizar pelo google o nome do pacote:

Pacote: python-elementtree-1.2.6-7.el4.rf.i386.rpm


wget ftp://194.199.20.114/linux/dag/redhat/el4/en/i386/dag/RPMS/python-elementtree-1.2.6-7.el4.rf.i386.rpm
# rpm -ivh python-elementtree-1.2.6-7.el4.rf.i386.rpm



Pacote: python-sqlite-1.0.1-1.2.el4.rf.i386.rpm


wget ftp://194.199.20.114/linux/dag/redhat/el4/en/i386/dag/RPMS/python-sqlite-1.0.1-1.2.el4.rf.i386.rpm
# rpm -ivh python-sqlite-1.0.1-1.2.el4.rf.i386.rpm



Dependências relacionadas ao pacote python-sqlite-1.0.1-1.2.el4.rf.i386.rpm:

Pacote sqlite-2.8.17-1.el4.rf.i386.rpm:

wget ftp://fr2.rpmfind.net/linux/dag/redhat/el4/en/i386/dag/RPMS/sqlite-2.8.17-1.el4.rf.i386.rpm
# rpm -ivh sqlite-2.8.17-1.el4.rf.i386.rpm



Pacote: python-urlgrabber-2.9.7-1.2.el4.rf.noarch.rpm

wget ftp://194.199.20.114/linux/dag/redhat/el4/en/i386/dag/RPMS/python-urlgrabber-2.9.7-1.2.el4.rf.noarch.rpm
# rpm -ivh python-urlgrabber-2.9.7-1.2.el4.rf.noarch.rpm



Pronto, já está instalado, porém sem repositórios para fazer as buscas.

==================================
2º Passo - Configuração:
==================================

Vamos criar os arquivos a seguir, lembrando que todos dentro do /etc/yum.repo.d
Arquivo com nome dag.repo:


[dag]
name = Dag
enabled = 1
baseurl = http://dag.freshrpms.net/redhat/el4/en/$basearch/dag/
http = //ftp.heanet.ie/pub/freshrpms/pub/dag/redhat/el4/en/$basearch/dag/
gpgcheck = True



Arquivo com nome dries.repo:

[dries]
name=Extra RedHat EL 4 rpms dries - $releasever - $basearch
baseurl=http://apt.sw.be/dries/redhat/el4/en/$basearch/dries/RPMS
gpgcheck=1
enabled=1
gpgkey=http://dries.ulyssis.org/ayo/RPM-GPG-KEY.dries.txt



Arquivo com nome livna.repo:

[livna]
name=Fedora Core 4 - i386 - livna
baseurl=http://rpm.livna.org/fedora/4/i386/RPMS.lvn
failovermethod=priority



E por último o arquivo jpackage.repo:

[jpackage-generic]
name=JPackage (free), generic
mirrorlist=http://www.jpackage.org/jpackage_generic.txt
failovermethod=priority
gpgcheck=1
gpgkey=http://www.jpackage.org/jpackage.asc
enabled=1



Seguindo a mesma linha iremos montar o repositório dos arquivos liberados pela Red Hat e reunidos no projeto CentOS.

Criar um arquivo dentro do /etc/yum.repo.d com o nome de centos.repo:


[base]
name=CentOS-$releasever - Base
baseurl=http://mirror.centos.org/centos/4/os/i386/
gpgcheck=1

[updates]
name=Red Hat Linux $releasever - Updates
baseurl=http://mirror.centos.org/centos/4/os/i386/
gpgcheck=1


Vamos rodar:

# yum clean all



Ele irá limpar todas as entradas do "banco de dados" do yum.

# yum check-update



Nesse ponto, o yum irá efetuar o download dos repositórios indicados nos arquivos criados previamente. A atualização dos repositórios pode levar alguns minutos.

==================================
3º Passo - Utilização:
==================================

Para instalar um pacote, use o comando "yum install", como em:

# yum install wpa_supplicant



Para removê-lo posteriormente, use:

# yum remove wpa_supplicant


O yum possui também um recurso de busca, que é bastante útil quando você está procurando por um pacote, mas não sabe o nome exato, ou em casos de pacotes que possuem nomes diferentes em relação a outras distribuições. Use o comando "yum search", seguido por alguma palavra ou expressão, que faça parte do nome do pacote ou descrição, como em:


# yum search apache


Ele retorna um relatório contendo todos os pacotes relacionados, incluindo o texto de descrição de cada um.

Para atualizar um pacote, use o comando "yum update", como em:

# yum update wpa_supplicant



Tutorial adaptado de:
http://jf.eti.br/howto-yum-no-red-hat-enterprise-linux-4/

Fontes:
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=6581
http://www.lupaworld.com/24527/viewspace_3008.html
http://www.sk360.info/wiki/articles/7/1/Install-yum-on-RHEL4/Page1.html
http://maimon-it.blogspot.com/2005/06/install-yum-on-redhat-enterprise-linux.html
http://www.guiadohardware.net/artigos/revisao-pacotes-servicos/

quarta-feira, 24 de dezembro de 2008

C++ Poema de Natal



Para comemorar esse dia especial que é o Natal, mostro aqui um código interessante em C/C++ chamado xmas2005.c. Esse programa quando compilado mostra na tela um poema de natal (em inglês).

Faça o download do arquivo diretamente em: http://www.inf.bme.hu/~pts/xmas2005.c

Vale a pena compilar e conferir muito interessante!
Código fonte:


(clique na imagem para ampliar)


Para compilar o arquivo, utilizei o g++ no linux:

g++ xmas2005.c -o xmas2005



O resultado da execução do programa pode ser observado abaixo. É um poema de natal, há rumores que esse programa existe desde 1988.

Um ótimo Natal à todos!
Happy Christmas! Enjoy ;)

Vejam o resultado:

On the first day of Christmas my only love gave to me
a partridge in a pear tree.

On the second day of Christmas my only love gave to me
two turtle doves
and a partridge in a pear tree.

On the third day of Christmas my only love gave to me
three french hens, two turtle doves
and a partridge in a pear tree.

On the fourth day of Christmas my only love gave to me
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the fifth day of Christmas my only love gave to me
five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the sixth day of Christmas my only love gave to me
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the seventh day of Christmas my only love gave to me
seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eighth day of Christmas my only love gave to me
eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the ninth day of Christmas my only love gave to me
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the tenth day of Christmas my only love gave to me
ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eleventh day of Christmas my only love gave to me
eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the twelfth day of Christmas my only love gave to me
twelve drummers drumming, eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

sexta-feira, 12 de dezembro de 2008

Redimensionar/Rotacionar imagens em massa


Recentemente descobrir como redimensionar, de maneira simples e eficiente, diversas imagens quando utilizando o Nautilus (gerenciador de arquivos do GNOME) no Ubuntu Hardy 8.04.


Trata-se do nautilus-image-converter, que pode ser instalado no gerenciador de pacotes ou executando-se no terminal:

sudo apt-get install nautilus-image-converter



Após instalar o pacote, mate o processo do nautilus (Sistema > Administração > Monitor do Sistema, clique no Nautilus e clique em finalizar) para que o nautilus carregue o plugin. Ou então execute no terminal:

sudo killall nautilus

Feito isso, é s ó clicar com o botão direito do mouse na(s) imagem(ns) e escolher as opções (resoluções pré-definidas, por escala de porcentagem ou personalizado) .
Imagem das opçõ es no menu:


O arquivo resultante será um novo com a palavra “resized” (ou outra personalizável); outra opção tamb ém é de sobrescrever o arquivo original.

Juntamente o redimensionador, é instalado um plugin pra rotacionar imagens. Entretanto o “Eye of Gnome” (programa que roda por padrão ao clicar duas vezes em uma imagem), já faz o rotacionamento das imagens, através das teclas CTRL + R (sentido horário) ou SHIFT+CTRL+R (sentido anti-horário), e depois pressionando CTRL+S (pra salvar).

Esse plugin usa o Image-magick como motor.

terça-feira, 2 de dezembro de 2008

JAVA: Arrays Primitivos e a classe java.util.Arrays

A classe java.util.Arrays do Java versão 1.5 (Tiger), possui uma série de métodos estáticos para trabalhar com vetores unidimensionais e matrizes.

Nesse caso, mostrarei operações básicas sobre vetores unidimensionais, tais como exibir um vetor em tela, ordenar, comparar e buscar dados em um vetor utilizando a java.util.Arrays.

Nesse exemplo mostra como utilizar as funcionalidades da classe java.util.Arrays:

ArrayExamples.java

import java.util.Arrays;

public class ArrayExamples {

public static void main(String[] args) {

int arr1[] = {23,2,89,123,21,12,17,13,56,90,218,0};
int arr2[] = {23,2,89,123,21,12,17,13,56,90,218,0};
int arr3[] = {0,3,9,23,1,45,10,21,56,90,218,33};

String arrFrutas[] = {"maça", "banana", "abacate", "laranja", "manga"};

//converter array para string e exibir no console
System.out.println("array1: " + Arrays.toString(arr1));
System.out.println("array2: " + Arrays.toString(arr2));
System.out.println("array3: " + Arrays.toString(arr3));

//comparação entre arrays
System.out.println("arrays arr1 e arr2 são iguais? " +Arrays.equals(arr1, arr2));
System.out.println("arrays arr2 arr3 são iguais? " +Arrays.equals(arr3, arr2));

//ordenar array primitivo
Arrays.sort(arrFrutas);
System.out.println("arrFrutas ordenado:" + Arrays.toString(arrFrutas));

//busca binária em array primitivo
System.out.println("lanranja encontrada no índice: " + Arrays.binarySearch(arrFrutas, "laranja"));

}
}

Na classe ArrayExamples.java primeiramente, foram declarados 4 vetores, sendo 3 de valores primitivos do tipo inteiro (int) e 1 do tipo cadeia de caracteres (String).

Para exibir o array no console sem a necessidade de fazer um laço de repetição para isso foi utilizado o método Arrays.toString(). Para comparar 2 arrays foi utlizado o método Arrays.equals(). Na ordenação do array o método Arrays.sort() foi utilizado. Já para efetuar uma busca binária no array em questão, utilizou-se o método Arrays.binarySearch() que retorna o índice do valor procurado no vetor.

Resultado da execução do programa:

array1: [23, 2, 89, 123, 21, 12, 17, 13, 56, 90, 218, 0]
array2: [23, 2, 89, 123, 21, 12, 17, 13, 56, 90, 218, 0]
array3: [0, 3, 9, 23, 1, 45, 10, 21, 56, 90, 218, 33]
arrays arr1 e arr2 são iguais? true
arrays arr2 arr3 são iguais? false
arrFrutas ordenado:[abacate, banana, laranja, manga, maça]
lanranja encontrada no índice: 2



Muitos códigos podem ser optimizados utilizando essa classe uma vez que algoritmos de busca, ordenação e comparação já estão implementados.