Corrigindo erros

Quase todos os programas geram uma saída erro caso algo anormal ocorra. Esta saída erro pode ser monitorada pelo script, de forma a corrigir problemas comuns de forma automática, ou pelo menos, avisar o usuário de que algo de errado ocorreu.

Por exemplo, ao gravar o lilo com sucesso, ele exibirá uma mensagem como esta:

# lilo
Added Kurumin *
Added memtest86

Caso exista algum erro no arquivo de configuração, ele avisa do problema e por segurança não salva as alterações:

# lilo
Added Kurumin *
Added memtest86
Fatal: First sector of /dev/hda4 doesn’t have a valid boot signature

Em alguns casos, um comando que não faz sua parte dentro do script pode causar uma pequena tragédia. Por exemplo, durante a instalação do Kurumin, é exibida a opção de revisar a configuração do arquivo, visualizando diretamente o arquivo de configuração. Caso alguma coisa dê errado, o lilo simplesmente não é gravado e o sistema não dá boot depois de instalado.

Uma forma simples de monitorar a saída de erro é usar um “2>>” para direcioná-la para um arquivo de texto, que pode ser vasculhado pelo grep em busca de mensagens de erro.

O programa de instalação do Kurumin usa a função abaixo para detectar erros de gravação do lilo. Toda função roda dentro de um while, de forma que é repetida até que o problema seja solucionado.

while [ "$lilogravado" != "1" ]; do

    clear
    # Remove o arquivo temporário usado
    rm -f /tmp/lilo.txt

    lilo -t -r $TR 2>> /tmp/lilo.txt

    testelilo=`cat /tmp/lilo.txt | grep Fatal`

    if [ -n "$testelilo" ]; then
        BT="Instalador do Kurumin"
        M1="Existe um erro no arquivo de configuração do lilo que está impedindo a instalação. Vou abrir novamente
 o arquivo para que você possa revisá-lo. Procure por erros de digitação e em ultimo caso experimente desfazer as 
alterações feitas.\n\n
Ao fechar a janela do Kedit, vou tentar gravar o lilo novamente e avisar caso o erro persista. O erro informado é:
\n\n
$testelilo"

        $DIA --backtitle "$BT" --title "Lilo" --msgbox "$M1" 18 76
        kedit $TR/etc/lilo.conf &>/dev/null

    else; lilogravado="1"; 
    fi

done

O script começa gravando o lilo, direcionando a saída de erros para um arquivo temporário. A variável “$TR” (usada dentro do script de instalação do Kurumin) contém o diretório de instalação do sistema, onde está montada a partição escolhida no início da instalação.

Com a saída salva no arquivo, o grep é usado para verificar se o arquivo contém a palavra “Fatal”, sintoma de que o lilo não foi gravado.

Caso a palavra seja encontrada, é executado o restante do script, que exibe a mensagem de erro e pede que o usuário edite novamente o arquivo de configuração do lilo. Depois disso o script é executado novamente. Quando finalmente o lilo é gravado sem erros, a variável “lilogravado” assume o valor 1, encerrando o loop do while.

Em alguns casos, você pode querer que o script salve a saída de texto de uma operação para verificar erros, mas ao mesmo tempo mostre a saída normalmente na tela. Você pode fazer isso usando o comando “tee“.

Por exemplo, um erro comum ao tentar instalar programas via apt-get a partir do testing ou unstable (onde os pacotes são atualizados com muita freqüência) é o apt tentar baixar versões antigas dos pacotes, que não estão mais disponíveis. Isso é corrigido facilmente rodando o “apt-get update” que baixa a lista com as versões atuais.

Mas, nosso script pode detectar este erro e se oferecer para rodar o apt-get automaticamente quando necessário. Vamos chamar nosso script de “apt-get“. Ele vai ser apenas um “wrapper”, que vai repassar os comandos para o apt-get “real” que está na pasta “/usr/bin”. Ou seja, quando você chamar o “./apt-get install abiword” vai estar usando nosso script, que vai direcionar os parâmetros para o apt-get e em seguida verificar se houve o erro:

#!/bin/sh

rm -f /tmp/apt
# Executa o apt-get "real", passando os parâmetros recebidos:
apt-get $1 $2 | tee /tmp/apt

# Verifica se algum pacote não pôde ser baixado:
erro1=`cat /tmp/apt | grep "404 Not Found"`

if [ -n "$erro1" ]; then
    kdialog --yesno "Alguns pacotes não puderam ser baixados. Isto significa que provavelmente a lista de pacotes 
do apt-get está desatualizada. Gostaria de rodar o apt-get update para atualizar a lista e repetir a instalação?"

    resposta=$?
    if [ "$resposta" = "0" ]; then
        apt-get update
        apt-get $1 $2 | tee /tmp/apt

        # Verifica novamente, caso o erro persista exibe uma segunda mensagem:
        erro1=`cat /tmp;/apt | grep "404 Not Found"`
            if [ -n "$erro1" ]; then
                kdialog --msgbox "O erro se repetiu. Isto significa que ou o pacote não está mais disponível, o se
rvidor está fora do ar, ou sua conexão com a web está com problemas."
            fi
    fi
fi

Ao executar um “./apt-get install abiword“, usando nosso script num micro com a lista de pacotes desatualizada, você verá a mensagem:

2bec278a

A partir daí você poderia ir incluindo mais funções para corrigir outros problemas comuns. Este tipo de script pode ser muito útil em migrações, para aparar as arestas nos programas em que os usuários estejam tendo dificuldades, tornando o sistema mais inteligente.

Postado por
Siga em:
Compartilhe
Deixe seu comentário
Assine nossa Newsletter
Assine nossa newsletter e receba nossa seleção de conteúdo sobre tecnologia, games, IA e internet em seu email.
Veja também
Publicações Relacionadas
Img de rastreio
Localize algo no site!