Como eu coloco uma soma de verificação em um script?

0

Eu estava (am) tendo problemas para instalar Águia no meu Linux (debian 8 jessie) computador. Eu estava lendo o script do instalador, quando eu notei que há uma soma de verificação para o script de instalação no script de instalação?

Eu modifiquei 1 caractere no script, em um comentário, e de repente eu estava recebendo

Checksum error in './eagle-lin-7.2.0.run'

Como isso funciona? Você não precisaria saber o checksum antes de colocá-lo no script? Parece paradoxal para mim. Alguém pode explicar como uma soma de verificação para o script inteiro pode ser colocada no script?

Esta soma de verificação específica é MD5.

    
por Kero Poonk 09.01.2015 / 04:59

1 resposta

1

Eu baixei este instalador e dei uma olhada. Aqui estão os trechos de código relevantes:

#!/bin/bash

MD5=1fe8463da9322ad9c966a57b92569a52

# The required tools:
SED=sed
MD5SUM=md5sum
CUT=cut
DATA="$SED -e '1,/^__DATA__$/d' '$0'"

# Check archive integrity:
test 'eval $DATA | $MD5SUM | $CUT -d " " -f 1' = $MD5 || {
  echo "Checksum error in '$0'" >&2
  exit 1
  }

# ...

exit 0
# Everything after the next line is a .tar.bz2 file
__DATA__
[a binary blob finishes the file]

Isso executa sed -e '1,/^__DATA__$/d' no próprio script, que exclui todas as linhas do início (linha 1) para a linha __DATA__ , deixando apenas o binário para trás. O binário é então executado através de md5sum para obter a soma de verificação, cut então formata para conter apenas a soma de verificação (sem nome de arquivo), e então é comparado à soma de verificação embutida no script anterior.

A instrução test retorna true quando o MD5 corresponde e false quando não corresponde. O || produz um curto-circuito quando o teste é verdadeiro, o que significa que ele interrompe a avaliação. A sub-rotina entre colchetes só será executada quando o teste for falso.

Como você provavelmente não tocou (intencionalmente) nada depois dessa __DATA__ linha, provavelmente é culpa do seu editor de texto. Eu suspeito que ele adicionou um espaço ou uma linha em branco ou converteu entre os formatos de linha DOS e UNIX ( saiba mais sobre novas linhas na Wikipedia ) .

Outra possibilidade é que o download falhou e você tem um arquivo corrompido. Se isso não for um problema, simplesmente remova a linha exit 1 dessa sub-rotina de teste do MD5 e o instalador deve funcionar bem.

(Este script não está bem escrito, por isso não me surpreende que você tenha que modificá-lo para que funcione.)

    
por 10.01.2015 / 01:20