설치하는 데 문제가 있습니다.독수리내 Linux(debian 8 jessie) 컴퓨터에서. 설치 스크립트를 읽으면서 설치 스크립트에 설치 스크립트의 체크섬이 있다는 것을 알았습니다.
댓글의 스크립트에서 문자 1개를 수정했는데 갑자기
"./eagle-lin-7.2.0.run"의 체크섬 오류
어떻게 작동하나요? 스크립트에 넣기 전에 체크섬을 알아야 하지 않나요? 이것은 나에게 모순되는 것 같습니다. 전체 스크립트의 체크섬을 스크립트에 넣는 방법을 설명해 줄 수 있는 사람이 있나요?
이 특정 체크섬은 MD5입니다.
답변1
설치 프로그램을 다운로드해서 살펴보았습니다. 관련 코드 조각은 다음과 같습니다.
#!/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]
이는 sed -e '1,/^__DATA__$/d'
스크립트 자체에서 실행되어 __DATA__
처음(1번째 줄)부터 해당 줄까지 모든 줄을 제거하고 바이너리만 남깁니다. 그런 다음 바이너리가 실행되어 md5sum
체크섬을 얻은 cut
다음 체크섬 자체(파일 이름 없음)만 포함하도록 형식을 지정하고 스크립트의 이전에 하드코딩된 체크섬과 비교합니다.
이 문은 MD5가 일치하면 true를 반환하고 test
, 일치하지 않으면 false를 반환합니다. ||
~ 할 것이다단락테스트가 true가 되면 평가가 중단된다는 의미입니다. 괄호로 묶인 섹션은 테스트가 거짓인 경우에만 실행됩니다.
아마도 해당 줄 이후의 어떤 것도 (의도적으로) 건드리지 않았기 때문에 __DATA__
이것은 텍스트 편집기의 잘못일 수 있습니다. 공백이나 빈 줄을 추가하거나 DOS와 UNIX 줄 형식 사이를 변환하는 것 같습니다(Wikipedia에서 줄 바꿈에 대해 자세히 알아보세요.).
또 다른 가능성은 다운로드가 실패하여 파일이 손상되었다는 것입니다. 이것이 문제가 되지 않는다면 exit 1
MD5 테스트 섹션에서 라인을 제거하기만 하면 설치 프로그램이 제대로 작동할 것입니다.
(이 스크립트는 제대로 작성되지 않았으므로 작동하도록 수정해야 한다는 사실이 전혀 놀랍지 않습니다.)