Dica: comando service do Cent OS Red Hat no Debian

Dica rápida:

Se você é usuário de Red Hat, Cent OS, Fedora ou algum outro da família RH e precisa utilizar o Debian, talvez esteja sentindo falta do comando service, utilizado para iniciar/parar/reiniciar serviços. O Debian tem um programa com função semelhante, chamado invoke-rc.d. No entanto, se a saudade do comando service for demais, experimente instalar o pacote sysvconfig, que contém um editor de runlevel e um script de nome service, que faz exatamente o mesmo que seu homônimo no Red Hat.

Páginas de Manual Online

Acrescentando à listagem de documentação online, vale a pena citar o site http://linux.die.net/man/, que permite a visualização online de páginas de manual. O site contém, além das páginas de comandos como o ls e find, páginas de comandos menos comuns, como o mplayer e sar.

Diversos Livros On-Line Gratuitos

Links para Livros on-line sobre diversos assuntos. Alguns estão disponíveis para leitura on-line, outros para download e outros em ambas as modalidades.


DNS:
LDAP:
Linux:
Asterisk:
Outros/Diversos:
  • O'Reilly Openbook Project: Contém diversos livros (alguns descontinuados) para consulta 
  • Google Livros: Contém livros semi-completos (algumas páginas ficam indisponíveis), para leitura online, e link para livrarias.

Criando um mirror local do Debian com o debmirror

Introdução:
Imagine a seguinte situação: você administra um parque de computadores (servidores, desktops ou ambos) com o Debian/Ubuntu instalado (digamos 30 computadores). Suponha ainda que seu ambiente de trabalho é uma escola, lan house ou similar, e que uma vez por mês seja necessário reinstalar os computadores. Cada computador baixa coisa de 1Gb. Então são mais 30Gb baixados da internet. Em situações como essa, pode ser interessante a criação de um mirror local do Debian. Você configura a máquina onde está o mirror ára baixar os pacotes da internet, e as outras máquina passam a baixar diretamente dele. Como o acesso é realizado em rede local, poupa sua banda de internet e de quebra aumenta a velocidade da instalação (eu costumava fazer uma instalação completa do Debian, com ambiente gráfico Gnome em coisa de 30 minutos, utilizando-se um mirror em rede local).

Opções mais comuns (para opções avançadas, veja o manual):
-p: exibe informações de progresso
-v: modo verboso (coloca mais informações na tela)
--source/--nosource: inclui/retira o download dos fontes (o padrão é baixar os fontes)
-m: realiza uma checagem MD5 nos pacotes baixados (desabilitado por padrão)
-h: indica o host a ser utilizado (padrão: ftp.debian.org). Utilize um mirror fisicamente próximo a você. Cheque a lista de mirrors, bem como o conteúdo deles em http://www.debian.org/mirror/list, pois nem todos os mirrors contém todas as arquiteturas.
-u/--password: define o usuário e a senha a serem utilizados no servidor remoto, caso seja necessário.
--method: define o método de obtenção dos arquivos (basicamente ftp, http ou rsync). Aqui utilizaremos http.
--proxy: define o proxy a ser utilizado, caso seja necessário. O proxy deve ser informado no formato http://usuario:senha@endereco:porta (exemplo: http://joao:ninguem@proxy.empresa:3128 )
-t: define o timeout da operação de download, em segundos
-d: define qual distribuição do Debian baixar (etch, lenny, sid, etc). Podem ser selecionadas várias distribuições, separadas por vírgula. Não é recomendável o uso do "apelido" (stable, testing, etc) da distribuição aqui. O padrão é a SID (unstable).
-s: define quais seções serão baixadas. O padrão é main,contrib,non-free,main/debian-installer.
-a: define quais arquiteturas serão baixadas. O padrão é i386
-r: diretório a ser acessado no servidor remoto. O padrão é /debian
--exclude=regex: não baixa arquivos que combinem com a RegEx (expressão regular) informada.
--ignore-release-gpg: ignora erros por não encontrar o certificado de segurança local.
--dry-run: executa uma simulação (embora baixe alguns arquivos pequenos). Bom para se ter uma idéia do tamanho total do download, para cálculo de uso de banda e espaço em disco.

Exemplo de uso:
debmirror -p -v --source -h ftp.br.debian.org --method=http -d lenny -a i386,sparc --ignore-release-gpg /var/www/mirror/debian
Após a execução, é necessário trocar o usuário dono dos arquivos para o mesmo que executa o apache (www-data). Isso é feito com o comando
chown -R www-data:www-data /var/www/mirror/debian
Descrição:
Criar um mirror no diretório /var/www/mirror/debian, baixando arquivos com o método http, a partir do servidor ftp.br.debian.org. Baixar também o código fonte dos pacotes. Baixar a distribuição Lenny para as arquiteturas i386 e Sparc (máquinas da Sun). Ignorar a ausência de certificados locais. Todas as opções não informadas são mantidas em seu valor default.

Observação:
Uma característica importante que faz falta (na minha opinião) no debmirror é a possibilidade de limitar o consumo de banda do programa, de modo a não consumir toda a banda de internet da sua rede. Uma opção para efetuar esse controle é a utilização do trickle, que deve ser tema de um futuro post por aqui.

Login automático em FTP com netrc

Para efetuar login (autenticação) em servidores FTP de forma não-interativa (automática) utilizando-se o comando ftp podemos utiilizar arquivos de configuração .netrc. O formato desses arquivos é muito simples:

machine <Servidor FTP>
login <usuario>
password <senha>


Onde:
Servidor FTP: endereço (hostname ou o IP) do servidor a ser acessado.
login: nome de usuário no servidor FTP.
password: senha do usuário servidor FTP.

Esses dados deverão ser inseridos em um arquivo com o nome .netrc, dentro do diretório HOME do usuário que vai executar o comando ftp. Por exemplo, para o usuário root, o nome do arquivo seria /root/.netrc. É necessário ainda acertar as permissões do arquivo, que obrigatoriamente devem ser setadas para 600 (permissão de escrita e leitura apenas para o usuário dono do arquivo), caso contrário o comando ftp simplesmente irá ignorar o arquivo. Essa medida visa a segurança, já que a senha do usuário FTP fica exposta dentro do arquivo. Para alterar a permissão do arquivo, execute

chmod 600 .netrc

A central de Cheat Sheets de Dave Child

Garimpando por mais Cheat Sheets na internet, acabei caindo nesse site: AddedBytes. O autor, Dave Child, escreve sobre segurança, marketing on-line e Cheat Sheets. O site contém várias Cheat Sheets, com assuntos que vão desde expressão regular, linguagens de programação e até World of Warcraft(!).

O endereço específico para as Cheat Sheets é http://www.addedbytes.com/cheat-sheets/.

Exibindo a hora do log do Squid de forma legível

Introdução
Quando está utilizando o seu formato padrão, o log do squid armazena a data e hora do acesso no formato de timestamp chamado Unix Time, que é a quantidade de segundos passados após a data 01/01/1970. Esse formato é útil, pois facilita cálculos com datas. Por exemplo: para calcular a distancia entre duas datas, basta converter ambas para o timestamp, subtrair a menor da maior e reconverter o resultado para minutos/horas/dias/etc. O problema é que o formato não facilita a visualização de dados no dia-a-dia. Existem vários comandos possíveis para realizar a conversão para um formato de leitura mais agradável. Vou colocar aqui a minha preferida, que envolve o poderosíssimo AWK.

Criando o script
Crie um arquivo com um nome sugestivo (por exemplo timestamp.sh) com o conteúdo abaixo e o salve em algum diretório que conste na variável de ambiente PATH (/usr/local/bin, por exemplo):

#!/bin/bash
awk '{$1=strftime("%F %T",$1);print $0}' $1



As letras entre aspas dentro dos parênteses controlam o formato de saída. Consulte a página de manual do comando date para checar outras opções de formatos. Por exemplo, %F exibe a data no formatoYYYY-MM-DD, e %T exibe a hora no formato 24 horas hh:mm:ss.

Utilização
Existem duas formas de se utilizar o script: chamando o arquivo de log diretamente (timestamp.sh access.log) ou através de um pipe (cat access.log | timestamp.sh).

Observação
As alterações são realizadas apenas "na tela", ou seja, o conteúdo do arquivo continua inalterado, com a data armazenada no formato timestamp. na verdade, isso é desejável, pois caso não impede o processamento do log do squid por programas de relatórios (como o sarg e o sawmill). Caso você necessite de um arquivo com as datas em formato "legível", basta redirecionar a saída da tela com os redirecionadores > (sobrescrever) ou >> (concatenar), conforme a necessidade.

Problemas relacionados a servidores NTP

Estes são alguns problemas que encontrei em servidores NTP que administro e que resolvi (após bater cabeça por um tempinho ...). Ficam aqui as soluções para quem precisar:

Erro:
sendto(200.160.0.8): Bad file descriptor

Sintomas:
Aparecem linhas como as abaixo no seu log de sistema (geralmente no arquivo /var/log/messages ou /var/log/syslog):

Jul 14 10:21:39 server ntpd[29169]: bind() fd 4, family 2, port 123, addr 0.0.0.0, in_classd=0 flags=8 fails: Address already in use
Jul 14 10:21:39 server ntpd[29169]: bind() fd 4, family 10, port 123, addr ::, in6_is_addr_multicast=0 flags=0 fails: Address already in use
Jul 14 10:21:39 server ntpd[29169]: bind() fd 4, family 2, port 123, addr 127.0.0.1, in_classd=0 flags=0 fails: Address already in use
Jul 14 10:21:39 server ntpd[29169]: bind() fd 4, family 2, port 123, addr 172.20.32.6, in_classd=0 flags=8 fails: Address already in use
Jul 14 10:21:40 server ntpd[29169]: sendto(200.160.0.8): Bad file descriptor
Jul 14 10:21:41 server ntpd[29169]: sendto(200.189.40.8): Bad file descriptor
Jul 14 10:32:55 server ntpd[29368]: sendto(200.160.0.8): Bad file descriptor
Jul 14 10:32:57 server ntpd[29368]: sendto(200.192.232.8): Bad file descriptor
Jul 14 10:32:57 server ntpd[29368]: sendto(200.160.0.8): Bad file descriptor
Jul 14 10:32:59 server ntpd[29368]: sendto(200.192.232.8): Bad file descriptor
Jul 14 10:32:59 server ntpd[29368]: sendto(200.189.40.8): Bad file descriptor


Onde server é o nome do seu servidor e os IPs entre parênteses são os IPs dos servidores públicos configurados nos arquivos de configuração (os IPs acima são do projeto brasileiro NTP.br, que disponibiliza servidores atualizados pelo Relógio Atômico do Observatório Nacional - http://www.on.br - , que por sua vez é o responsável pela Hora Legal Brasileira).

Causa:
Existe mais de um processo do servidor NTP (ntpd) rodando na máquina.

Solução:
Pare o serviço do NTP. Em distribuições da família Debian (Ubuntu, Kurumin, Knoppix, etc) e da família Red Hat (Fedora, Mandriva, CentOS, etc) normalmente isso é realizado com /etc/init.d/ntp stop. Em outras distribuições (SlackWare, Gentoo, ?) o processo pode ser diferente, mas não muito. Após parar o serviço, execute um killall ntpd para matar quaisquer processos que possam ter restado e inicie novamente o serviço NTP com /etc/init.d/ntp start (ou comando equivalente em sua distribuição) e o problema deve estar resolvido. Obs: todos os comandos acima necessitam de permissões de root para serem executados.

Dica:
Observe a seguinte linha, retirada do trecho de log acima:

Jul 14 10:21:39 server ntpd[29169]: bind() fd 4, family 2, port 123, addr 0.0.0.0, in_classd=0 flags=8 fails: Address already in use

Em programas com suporte a rede (geralmente programas servidores), bind() é o ato de associar um programa ou processo a uma determinada porta de rede. Observe que o próprio programa já mostra o erro que está ocorrendo: Address already in use, ou seja, o endereço já está em uso por outro processo. Esse tipo de erro é um tanto comum e a mensagem costuma vir parecida com essas, facilitando assim encontrar a solução.


Erro:
O serviço exibe uma mensagem de erro ao iniciar, sobe mas não sincroniza a hora com os servidores externos.

Sintomas:

Aparecem linhas como as abaixo no seu log de sistema (geralmente no arquivo /var/log/messages ou /var/log/syslog):
Jul 14 10:38:11 server ntpdate[30521]: no server suitable for synchronization found
Jul 14 10:38:11 server ntpd:  failed
Jul 14 10:38:11 server ntpd[30525]: ntpd 4.2.0a@1.1190-r Sat May  5 12:55:34 EDT 2007 (1)
Jul 14 10:38:11 server ntpd: ntpd startup succeeded
Jul 14 10:38:18 server ntpd[30525]: kernel time sync disabled 0041
Jul 14 10:38:28 server ntpd[30525]: kernel time sync enabled 0001

Causa:
Servidores inválidos ou inexistentes referenciados nos arquivos de configuração /etc/ntp/ntpservers /etc/ntp/step-tickers).

Solução:
Haviam servidores NTP internos que já haviam sido removidos da rede, mas continuavam configurados nos arquivos citados acima. Com isso, mesmo com os servidores do projeto NTP.br no arquivo de configuração principal, o serviço falhava e não se recuperava. Após remover os IPs dos servidores, o serviço passou a funcionar como um relógio ;-)

Debian Reference Card - Para imprimir e deixar à mão

Navegando na Web, encontrei essa ficha de referência sobre o Debian. Vem em Português Brasileiro (e outras dezenas de idiomas), em formato PDF para ser impresso (frente e verso) em uma única folha A4. Depois de imprimir, dobre conforme indicado na página.
O endereço para download e instruções para a dobra estão em http://tangosoft.com/refcard/. A título de curiosidade, esse tipo de ficha é bem comum e pode ser encontrado na internet com nomes como Reference Card, Cheat Sheet (algo como folha de cola, em uma tradução livre). Existem Cheat Sheets para bancos de dados, linguagens de programação e vários outros items. Conforme eu for esbarrando em outros mais, eu publico aqui.

Gerando arquivos de log com shell script

Introdução:
Shell Scripts são uma verdadeira mão na roda na administração de servidores Linux. Porém um assunto que é um tanto negligenciado neste aspecto é quanto ao registro da informação sobre o que foi feito durante a execução do script, até porque na maioria das vezes o script é executado via cron, e como você não pode ver as informações dele na tela, um arquivo ou sistema de log torna-se essencial.

Modo 1: Log via arquivo próprio
O modo mais simples de realizar o log é através de um arquivo próprio, exclusivo para sua aplicação. Existem diversas formas de se fazer isso, a que mostro a seguir é a que costumo utilizar. Considere o pequeno shell script (em bash) abaixo:



#!/bin/bash
WORKDIR="/root/my_script"
SESSION_LOG=${WORKDIR}/$$.log
LOGFILE=${WORKDIR}/my_script.log
DEST_DIR=${WORKDIR}/backups
DATE=$(date +"%Y-%m-%d_%H:%M:%S")

function LOG(){
DATA=$(date +"%Y-%m-%d %H:%M:%S")
echo ${DATA} $1 | tee -a ${SESSION_LOG}
}

LOG "Iniciando ..."
LOG "Trocando de diretorio"
cd /etc
LOG "Criando o arquivo compactado etc-${DATE}.tar.bz2 em /tmp"
tar -cvjf /tmp/etc-${DATE}.tar.bz2
LOG "Movendo o arquivo etc-${DATE}.tar.bz2 para o diretorio de destino ${DEST_DIR}"
mv /tmp/etc-${DATE}.tar.bz2 ${DEST_DIR}
LOG "Finalizado"

#Salva o log da sessão no log geral
cat  ${SESSION_LOG} >>  ${LOGFILE}

#Descomente para enviar o log da sessão para o usuário root
#mail -s "Log do backup de `date +%F`" root < ${SESSION_LOG}

#remove o log da sessão
rm -f  ${SESSION_LOG}


Nesse simples script, foi criada uma função de nome LOG que deve ser utilizada no formato LOG "Mensagem". Quando chamada, a função LOG imprime a mensagem passada na tela e também em um arquivo de log, definido na variável ${SESSION_LOG}. A vantagem de se utilizar uma função (ao invés de repetir o mesmo código por todo o script) é que, se for necessário alterar algo no código, a alteração é realizada apenas uma vez. Por exemplo, conferindo a página de manual do comando date, verifiquei que a opção %F é equivalente à %Y-%m-%d utilizada e resolvi trocá-la, para otimizar o código. Se não utilizasse uma função, teria de editar cinco linhas. Utilizando a função, basta editar apenas uma linha, independente de quantas vezes a função foi chamada. O script faz um backup do diretório /etc em um arquivo cujo nome é etc-data_hora.tar.bz2 e move esse arquivo para o diretório configurado na variável ${DEST_DIR}, sempre informando (no log de sessão e na tela) o que está sendo realizado. Por fim o script envia o log da sessão para o usuário root via email, concatena o log da sessão no log geral e apaga o arquivo de log da sessão. Esse script contém algumas coisas legais para quem está estudando shell. Um dos pontos fracos dele é que não é feito tratamento de erros. Erros devem ser sempre checados (e logados)

Modo 2: Log via syslog
existe o comando logger, que permite o envio de mensagens de log diretamente pelo protocolo SYSLOG, que gerencia os logs do sistema. Nesse caso, suas mensagens cairiam em um dos arquivos de log do sistema, como o /var/log/messages ou o /var/log/syslog. Fazendo algumas configurações no arquivo de configuração do servidor syslog (normalmente em /etc/syslog.conf). 
Desejando alterar o script acima para fazer log via syslog, basta alterar a função LOG, deixando-a desse jeito:

function LOG(){
DATA=$(date +"%Y-%m-%d %H:%M:%S")
echo ${DATA} $1 | tee -a ${SESSION_LOG}
logger $1
}

Também é necessário comentar a linha "cat  ${SESSION_LOG} >>  ${LOGFILE}", pois o arquivo de log será um dos arquivos de sistema, gerenciados pelo daemon do syslog.

Diminuindo o consumo de memória do Firefox Windows

Introdução
Os meus doze fiéis leitores já devem ter percebido que eu utilizo o navegador Firefox sempre que possível. E como todo bom heavy-user, sou um ávido consumidor de recursos, incluindo complementos/extensões e abas (às vezes chego a ter mais de cinquenta abertas, e não me lembro de ter menos de dez). O único problema disso é o consumo de memória: o Firefox adora memória, e as vezes parece não haver limite para sua fome. Hoje ao chegar no trabalho, haviam umas 30 abas abertas, e o consumo de memória estava em 1.3 Gb !!! Fui buscar no Google por uma extensão que permitisse checar o uso de memória por aba (semelhante ao Google Chrome), e acabei encontrando algo muito melhor (pelo menos até agora ...): O Memory Fox. Para ter uma idéia, após instalar essa extensão, meu consumo de memória despencou de 1.3Gb para apenas 300 MB !!! Um ganho de aproximadamente 75 % !!!

Instalação
Não há muito o que dizer sobre a instalação. Bastou acessar a página da extensão em https://addons.mozilla.org/pt-PT/firefox/addon/53880/ , fazer a instalação e reiniciar o navegador. A única diferença perceptível será um pequeno circulo contendo um "M" na parte inferior da janela.


Configuração
Não há muito o que falar aqui. Clicando com o botão direito no ícone do programa, temos um menu com 3 opções:

  • Abrir o site do complemento
  • Enviar o ícone para a taskbar (não percebi nenhuma alteração aqui) e
  • Opções

A janela de opções também é muito simples (para não dizer simplória). Coloquei a minha abaixo, mas não deve ser necessária nenhuma configuração, já que após reiniciar o navegador a recuperação da memória já ocorre.

Considerações Finais
Essa extensão depende de um programa externo (afom.exe), e por isso funciona apenas nas versões Windows do programa. Segundo o desenvolvedor, a extensão funciona no Windows XP e Vista, mas já vi relatos de pessoas na Internet dizendo que a utilizam no Windows 7 sem problemas. Ah, e antes que alguém pergunte, o consumo de memória do afom.exe é mínimo, da ordem de 1MB.

Dúvidas/problemas/sugestões? Deixe um comentário!!!

Scroll no Touchpad do Notebook com Synaptics

Uma das funções que senti falta no meu recém-comprado Positivo Mobo 2055 3G é a de scroll (rolamento de tela) no TouchPad, no Windows (no Ubuntu Netbook Remix 9.04 essa função já vem habilitada, mas isso é outra história). Pesquisando um pouco na internet, achei a página da Synaptics (que produz um software de mesmo nome), que habilita o uso das extremidades direita e inferior do TouchPad para scroll vertical e horizontal, respectivamente. O programa está disponível para todas as versões do Windows a partir do 95 (alguém ainda usa Windwos 95?!) e é completamente gratuito!!! Para instalar, basta acessar a página http://www.synaptics.com/support/drivers, baixar a versão correspondente ao seu sistema e instalar.As versões para Windows XP e Vista possuem arquivos diferentes para 32 e 64 bits (a maioria das pessoas deve baixar a versão de 32 bits).

Extensões do Firefox: All-in-One Gestures

Introdução:
Abrindo a série sobre extensões do Firefox, está uma das minhas preferidas: All-in-One Gestures. Esta extensão permite controlar a navegação no Firefox através de movimentos (gestos) feitos com o mouse. Você segura o botão direito do mouse e "desenha" o comando desejado. Ao soltar o botão do mouse, o comando é executado. Enquanto você desenha, uma linha vermelha é mostrada na tela para facilitar, e no canto inferior esquerdo aparecem letras representando os movimentos (L = esquerda, R = direita, U = cima, D = baixo), bem como o comando ao qual a sequência executada pertence. Veja a imagem abaixo, com a imagem e as letras destacadas em amarelo.


O comando mostrado na imagem foi L,D,R (esquerda, baixo, direita), tem um formato de um "C" e sua função é  exibir os cookies do navegador relacionados ao site atual. Existem vários gestos pré-setados, e ainda é alterar os gestos default, associá-los a outras funções e até criar movimentos novos. Para ver a lista completa de comandos configurados, execute o comando D,R,D (baixo, direita, baixo). Serão exibidas as funções e os gestos associados.

 

Para personalizar os gestos, vá em Ferramentas -> Complementos, selecione a extensão e clique em opções. Clique na aba "Gestures Customization". Agora selecione a função desejada e clique no botão correspondente:
  • Clear Gestures: limpa o gesto associados a função selecionada.
  • Edit Gesture: edita o gesto associado a função selecionada. O novo gesto podem ser informados através das letras LRDU ou clicando no botão Draw e desenhando. Se o gesto informado já estiver associado a uma outra função, será oferecido para que eles sejam invertidos (a primeira função recebe o gesto da segunda e vice-versa).
  • Swap Gestures: inverte os gestos associados as funções selecionadas (para selecionar mais de uma função, pressione a tecla Control enquanto clica).
  • Add Gesture: permite criar um gesto novo, que será associado à função selecionada. Novamente, caso o gesto criado já estiver associado a uma outra função, será oferecido para que eles sejam invertidos.
Outras funções interessantes fornecidas por esta extensão são o menu de navegação pelas abas (chamado clicando-se com o botão direito e rodando a rodinha do mouse para cima) e o menu de navegação pelo histórico (clicando-se com o botão direito e rodando a rodinha do mouse para baixo). Após chamar um dos dois  menus, basta selecionar o item desejado (aba ou item de histórico) rolando a rodinha do mouse e soltar o botão.



Comandos Úteis

Para finalizar o post, alguns dos gestos que utilizo com mais frequência:

  • Voltar no Histórico (History Back): Esquerda (L)
  • Avançar no Histórico (History Foward): Direita (D)
  • Recarregar Página (Reload Document): Cima, Baixo (U,D)
  • Próxima Aba (Nex Tab): Cima, Direita (U,R)
  • Aba Anterior (Previous Tab): Cima, Esquerda (U,L)
  • Fechar Aba (Close Tab): Baixo, Direita (D, R)
  • Minimizar Janela (Minimize Window): Baixo, Esquerda (D, L). Esse gesto eu costumo trocar para Reabrir Aba (Undo Close Tab).
  • Abrir Nova Aba (Open new Tab in Foreground): Cima (U). Abre uma nova aba em branco. Se for executada em cima de um link, abre esse link em uma nova aba.
  • Abrir Links em Abas (Open Links in Tabs): Termine com Direita, Cima, Esquerda (R, U, L). Faça um desenho (pode ser um traço) sobre quaisquer quantidade de links e termine o desenho com a sequência Direita, Cima, Esquerda. Todos os links sobre os quais o traço passou por cima serão abertos, cada um em uma aba. Muito útil em diretórios de imagens.
  • Zoom In (Double Image Size): Direita, Cima, Esquerda, Baixo (R,U,L,D). Faça um círculo no sentido anti-horário sobre a imagem desejada. Aumenta em 2x o tamanho de uma imagem. Pode ser feito repetidas vezes na mesma imagem.
  • Zoom Out (Double Image Size): Esquerda, Cima, Direita, Baixo (L,U,R,D). O oposto do anterior (um círculo no sentido horário sobre a imagem desejada.)  Diminui  em 2x o tamanho de uma imagem. Pode ser feito repetidas vezes na mesma imagem.
Update
Faltou o link para instalação: 

A versão nessa página suporta até a versão 3.5.x do Firefox. Uma versão beta com suporte à nova versão 3.6.x do Firefox está disponível na página do desenvolvedor, em http://pagesperso-orange.fr/marc.boullet/ext/extensions-en.html. Você vai precisar autorizar o site a instalar aplicativos em seu Firefox. Apesar da versão ser considerada beta, eu já a utilizo há algumas semanas e nunca tive nenhum problema relacionado à ela.

Extensões do Firefox

Remexendo os meus rascunhos, encontrei esse post perdido. Como estou com muito pouco tempo pra fazer qualquer coisa, vou dar preferência a posts pequenos como esse,  com uma frequência de postagem maior. Vou iniciar aqui uma nova série de posts, dessa vez sobre umas das características do Firefox que mais agrada aos usuários: suas extensões. Através das extensões, é possível expandir a funcionalidade do navegador em níveis incríveis, que só dependem da criatividade e habilidade do desenvolvedor da extensão (e criatividade a maioria deles tem de sobra).

1 - All-in-One Gestures - Controle de navegação por gestos de mouse

2 - Memory Fox - Diminua o consumo de memória do Firefox (Windows apenas)

PenguinBrain: Simulador para certificação LPIC-1 e LPIC-2

Atendendo a alguns pedidos, estou colocando o link para download do programa PenguinBrain, que é um programa "simulador" das provas de certificação LPI (101, 102, 201, 202).  Antes de começarmos, tenha algumas considerações em mente:
  1. O software foi descontinuado, seu site http://www.penguinbrain.com parece estar fora do ar há algum tempo. Devido a esse fato, algumas perguntas não refletem o novo conteúdo das provas da LPI, e outras podem estar desatualizadas. Por exemplo, eu não vi questões sobre SQL.
  2. Eu também não vi todas as questões (são aproximadamente 700!!), então não posso garantir que as respostas citadas pelo programa estão 100% corretas. Eu lembro de ter encontrado uma resposta incorreta enquanto estudava para a prova LPIC-2 (acho que era algo sobre criação de usuários e o diretório /etc/skell).
  3. Eu recomendo fortemente que você confira as repostas dadas pelo programa com algum livro ou com a página de manual do programa (utilizando o comando man). Isso é válido também para outros programas e sites com simulados de certificação que você possa encontrar por aí.
  4. Um último aviso: como disse lá em cima, o site do progama está fora do ar. O link de download está em um site de compartilhamento de arquivos. Eu baixei e estou utilizando essa versão, mas não posso garantir que ela esteja 100% livre de virus/trojans/worms ou o que quer que seja (e mesmo que baixasse do site oficial do programa, também não poderia fazer tal afirmação). Por isso, baixe esse software por sua conta e risco!!!

Tendo dito isso, o link para download do software é esse: http://www.4shared.com/file/102823361/f33cf2d0/PenguinBrain.html

Essa é a versão para Windows. Antigamente havia uma versão para Linux, mas não consegui encontrar. Se você não possui uma máquina com windows, pode executar uma máquina virtual ou tentar utilizar o WINE. A instalação é simples, no melhor estilo "Next, Next, Finish". Após a instalação, execute o programa. Você vai ver a tela abaixo:


Após alguns segundos, você estará na tela principal. Clique na bandeirinha no canto inferior para mudar o idioma para inglês (a menos que você prefira utilizar em alemão !!!).


Para simular os testes, basta marcar a opção "Simulate an exam" e clicar no botão do teste desejado. A interface é ultra simples:


  • No topo está a pergunta.
  • No meio fica o espaço para as respostas. A maioria é de múltipla escolha, com apenas uma correta, mas existem algumas com duas ou mais respostas corretas e ainda algumas onde é necessário digitar o texto com a resposta.
  • Após escolher sua resposta, clique no botão "Next Question" para corrigir a questão: se a questão estiver correta aparecerá um texto em verde. Caso esteja errada, aparecerá um texto em vermelho, e a reposta correta também em vermelho.Clique novamente no botão "Next Question" para passar à próxima pergunta.
  • A barra vermelha fica verde quando você completa o numero de questões corretas necessárias para a aprovação. Por fim, embaixo são mostradas quantas questões já foram vistas, quantas você respondeu correta e incorretamente e o tempo restante de prova.
Ao final das 60 questões que o modo demo permite, é exibido um resumo com o resultado da sua simulação.


Clicando no botão  "Show Answers" é possível ainda rever as questões corretas e incorretas.


Nota final:
Este é um programa muito útil, e é uma pena que seu autor tenha interrompido seu desenvolvimento. No entanto, não deve ser utilizado como única fonte de estudo, principalmente pelo fato de estar um tanto desatualizado. Em um próximo post, pretendo colocar algumas telas do programa e comentar sobre as "pegadinhas" em algumas questões. Dúvidas/reclamações, deixa um coment aí!!!

Tutorial: Como recuperar a senha de root Linux

Caso você tenha perdido a senha de root de seu equipamento Linux, siga esses passos para recuperá-la trocar a senha. Esses passos são válidos para todas as distribuições Linux (Debian, Ubuntu, Mandriva, Red Hat, etc)

Obs ¹: essa dica leva em consideração que você está utilizando o GRUB como gerenciador de boot. Os passos para o LILO são basicamente os mesmos, exceto pela parte referente à edição da linha de comando do Kernel.

Obs ²: Durante todo o processo, seu teclado estará levemente desconfigurado. Por isso, onde for necessário utilizar a tecla barra ( / ) tenha em mente que ela (provavelmente) estará no lugar da tecla dois-pontos ( ; ). Se preferir, utilize a barra do teclado numérico, junto da tecla NumLock.

1) Reinicie o computador. Quando aparecer o menu do GRUB interrompa o boot, pressionando uma das setas do teclado.

2) Selecione a entrada normalmente utilizada e pressione a tecla "e". Entraremos no modo de edição desta entrada.

3) Selecione a linha que começa com a palavra kernel e pressione a tecla "e" novamente. Vamos agora entrar no modo de edição desta linha específica.



4) Insira o seguinte texto no final da linha: init=/bin/bash (lembre-se do que foi dito sobre o teclado). Ao terminar, deverá estar semelhante a imagem abaixo. Pressione Enter para voltar à tela anterior.


5) Pressione "b" para iniciar o boot. O processo será bem rápido, e o sistema estará com todos os serviços
 parados (inclusive a rede) e com os sistemas de arquivos montados como comente leitura.


6) Aqui cabe uma curiosidade: o comando mount exibe o sistema de arquivos raiz montado com permissão de escrita, porém ao tentar trocar a senha do root (ou efetuar qualquer outra operação de escrita) a operação irá falhar (note as mensagens de erro passwd: Authentication token lock busy e passwd: password unchanged).



Consultando o arquivo /proc/mounts, vemos que o sistema de arquivos raiz (o / ) na verdade está montado como somente leitura.

A razão disso é que o arquivo que contém o status das partições montadas fica em /etc/mtab. Quando a partição é montada como somente leitura esse arquivo fica impossibilitado de ser alterado, ficando com uma informação incorreta. De qualquer forma, para remontar a partição em modo de escrita, basta executar o seguinte comando: mount / -o remount,rw (novamente, não se esqueça da barra ...).


Após isso o sistema de arquivos raiz estará montado com permissão de escrita, e podemos trocar a senha de root normalmente,  com o comando "passwd root". Digite e confirme a nova senha. Veja que o comando passwd agora exibe uma mensagem de sucesso na operação (password updated sucesssfully)


07) Por fim, antes de reiniciar o computador, é necessário sincronizar os dados no HD com o comando sync. A razão disso é que o Kernel (por razões de performance) não grava os dados no HD imediatamente. Ao invés disso, ele "atrasa" um pouco a gravação, colocando os dados em um buffer de memória,  na esperança de que apareçam mais dados e tudo possa ser armazenado em uma única operação de escrita. O comando sync força a escrita imediata dos dados do buffer no HD (normalmente antes de um restart ou desligamento isso é feito automaticamente pelo processo init, mas como o boot foi executado com o bash no lugar do init, é necessário fazer isso manualmente). Após o comando sync, basta reiniciar o computador com Ctrl + Alt + Del ou com o comando shutdown -nh now.