Revista Do Linux  
EDIÇÃO DO MÊS
 Produto
 LinuxTag
 Shell Script
 Entrevista
 CD do mês
 Capa
 Estudo de Caso
 Distribuições Diet
 Segurança
 Squid
 Corporativo
 Games

Dicas e dúvidas

Problemas de compilação
Ricardo Y. Igarashi
iga@that.com.br

Muita gente anda tendo problemas na compilação de programas, em especial com o kernel. Aí vão algumas dicas de quem já apanhou bastante no assunto. De maneira simples, compilar é transformar o código-fonte (legível para o homem) em um arquivo binário (o qual a máquina pode entender e executar).

Para compilar alguma_coisa, você precisa do código-fonte dessa alguma_coisa (obviamente), e do compilador. No Linux, o compilador normalmente é o gcc, com algumas variantes como o egcs e o pgcc (otimizado para o Pentium).

Além disso, você precisa de alguns utilitários, em especial o make e o autoconf. O make é um utilitário para automatizar a compilação, e o autoconf para gerar o Makefile (roteiro de compilação usado pelo make).

esses programas, você consegue compilar um programeco. Mas só programecos...

programas normalmente usam bibliotecas e headerfiles. O libc (glibc) é uma biblioteca usada por quase todos os programas do Linux; o libjpeg é usado em todos os programas que trabalham com o formato JPEG, e assim por diante.

Aí vem um detalhe a mais: normalmente, essas bibliotecas são divididas em dois pacotes: um para ser usado por programas já compilados (glibc e libjpeg, por exemplo) e um para ser usado na compilação de programas que dependem dele (glibc-devel e libjpeg-devel, por ex).

Muito bem, a pergunta é: como descobrir o que está faltando e causando o erro durante a compilação?

Uma boa leitura nas mensagens de erro já ajuda bastante: se sair um "command not found" ou "comando não encontrado", deve estar faltando um programa (executável). Normalmente é o gcc ou o make (ou o yacc, ou o as86, ou...), e você consegue "adivinhar" o pacote que está faltando. Se é uma biblioteca, fica mais complicado, pois muitas delas têm nomes bem diferentes do pacote (por exemplo, libXm é do Motif ou Lesstif). Se é um header-file, pior ainda: como é que vou saber onde está o sys/types.h ?

Um jeito é vasculhar no CD (usando um "tar xtf" ou "rpm -qpl" com o grep). Mas um pouco de bom senso ajuda...

1) glibc-devel é (quase) sempre necessário.
2) Se está compilando um programa para o X, provavelmente o XFree86-devel será necessário.
3) Se no README estiver escrito que o programa
usa o Gtk/Qt/Ncurses/etc., o pacote "-devel" dele será necessário.
4) Por falar em README, sempre leia esse arquivo, juntamente com o INSTALL (se existir). Mesmo que você não entenda absolutamente nada de inglês, você poderá reconhecer o nome de uma biblioteca. Aí, meu filho, dicionário na mão e mãos à obra...
5) O "make menuconfig" do kernel precisa do ncurses-devel, e o "make xconfig" precisa do tcl e do tk.

Claro, há muitos detalhes que não foram abordados. Mas este roteiro deve elucidar algumas dúvidas que sempre ocorrem a quem está compilando um programa pela primeira vez.


Configurando o Sendmail
Marcos Antonio da Silva
masilva@masilva.ml.br

Aqui segue uma configuração típica do sendmail, baseada em uma instalação Conectiva Linux, para redes conectadas à Internet em tempo integral, através de uma linha dedicada. A configuração mostrada aqui não vale para computadores via dial-up.

Instalação

Instale os seguintes pacotes (rpm -i pacote.rpm):


- sendmail-8.9.3-11cl.i386.rpm
- sendmail-cf-8.9.3-11cl.i386.rpm
- sendmail-doc-8.9.3-11cl.i386.rpm
- m4-1.4-13cl.i386.rpm
- imap-4.4-5cl.i386.rpm (se quiser acessar caixas postais, serviços POP e/ou IMAP)

Criando um sendmail.cf

O pacote sendmail-cf será instalado no diretório /usr/lib/sendmail-cf/cf. Copie o arquivo conectiva.mc para um novo arquivo, por exemplo darkover.mc. Edite-o, e altere o que for conveniente (domínio, version id). Para criar o arquivo ".cf" execute os comandos:


# m4 ../m4/cf.m4 darkover.mc > darkover.cf

Temos o arquivo darkover.cf pronto. Basta copiá-lo para o diretório /etc com o nome sendmail.cf e reiniciar o Sendmail. Mas antes devemos fazer alguns ajustes em alguns arquivos.


/etc/sendmail.cw

Relacione neste arquivo os nomes das máquinas e domínios pelos quais seu Sendmail será responsável por tratar os emails. Exemplo:


# sendmail.cw - include all aliases for your 
machine here.
darkover.org
comyn.darkover.org
localhost
/etc/mail/relay-domains

Aqui você libera ou bloqueia o uso do seu Sendmail para reenvio (relay). Nota: um erro aqui e você pode colaborar com spammers. Indique uma classe por linha e suas permissões (RELAY, OK, REJECT ou DENY). Edite esse arquivo conforme o exemplo:


200.202.215/26	    RELAY
spammer.com	    REJECT
fulano@darkover.org DENY

No primeiro caso, permito reenvio para toda sub-rede 200.202.215 com máscara 255.255.255.192, ou seja, IPs na faixa de 200.202.215.192 a 200.202.215.255 têm permissão para usar meu Sendmail para enviar emails. Nota: é preferível usar IPs a domínios.

No segundo caso, eu rejeito qualquer email vindo do domínio spammer.com. No último eu bloqueio o envio de mensagens de um determinado usuário dentro do meu domínio. Testando as regras de SPAM

Verifique junto ao seguinte endereço, se o Sendmail está devidamente configurado para recusar ataques de SPAM: maps.vix.com/tsi/ar-test.html

Linha de comando

Para exibir o conteúdo de arquivos usa-se em geral o cat, o more, o less, mas uma opção menos conhecida é o od (octal dump), usado para exibir, por exemplo, uma saída octal de um arquivo binário:


# od nome_do_arquivo
0000000 020011  020101 067510  060562  062040 020141  062526  062162
0000020 062141  020145 060556  041040  067141 060544  021040  021103
0000040 062040  020141 062524  062554  067546 064556  020141  062503
0000060 072554  060554 005162  020040  020040 020040  020040  051040


Sempre ao final da instalação de qualquer distribuição, o instalador sugere ao usuário a criação de um disquete de emergência, e em geral os iniciantes criam tal disco, sem saber exatamente o que farão com ele, e o fazem mais por uma questão de prudência. Os iniciantes, também em geral, mantêm seu sistema antigo junto com o novo, pois estão em um período de adaptação ao Linux, e temerosos querem preservar suas instalações anteriores. Logo, ao verem na inicialização o "LILO:", eles poderão optar por qual sistema inicializar. Esse é o carregador do Linux (LInux LOader), que estará gravado em uma área chamada MBR (Master Boot Record). Mas não é raro acontecer que o sistema antigo sobreescreva essa área e você não possa mais dar a partida em seu sistema. Para sanar o problema, bastar dar a partida com o disquete, dar um login como "root" e na linha de comando escrever:



# lilo

Isso vai reparar o MBR e você poderá trabalhar normalmente. Por isso, aconselha-se sempre a instalar o Linux por último em sistemas com mais de um sistema. Em uma situação completamente inversa, pode-se desejar remover o LILO, e restaurar a situação anterior à instalação do Linux. Nesse caso pode-se proceder da seguinte maneira:

# /sbin/lilo -u

O Linux é um sistema multiusuário, e é comum haver outros usuários conectados à sua máquina e acessando sistemas de arquivos montados. No caso de você querer desmontar algum deles não terá sucesso, uma vez que só é possível desmontar sistemas de arquivos inativos, não acessados por outros.

Se um sistema estiver aberto ou for o diretório corrente, não se consegue desmontá-lo através do comando umount. Para saber o que está sendo usado e por quem, usa-se o comando fuser (Find USER), acompanhado do parâmetro -u para listar o nome dos usuários e os IDs de processo. Se desejar saber quem está acessando, por exemplo, o ponto de montagem /mnt/cdrom, digite:



# fuser -u /mnt/cdrom

 

A Revista do Linux é editada pela Conectiva S/A
Todos os Direitos Reservados.

Política de Privacidade