2019년 3월 28일 목요일

No hash found for gcc error

No hash found for gcc

No hash found for gcc

Buildroot에서 빌드 하다가 ERROR: No hash found for blabla.. 하는 에러가 발생하면, 해당 패키지의 hash 파일이 실제로 파일이 아니라 다른 곳의 symbolic link가 아닌지 확인하자. 특히 GCC.

방금 buildroot를 새로 받아 빌드 하다 발생한 문제인데, 도중에 무슨 문제가 있었는지는 모르겠지만 symbolic link가 깨지는 문제가 발생했다.

모르고 있다가 툴체인 빌드 하다가 알게 되었는데, 에러 메시지는 정확하진 않지만 다음 내용이 포함되어 있었다.

ERROR: No hash found for gcc-8.3.0.tar.xz

이 문제를 처음 봤을 때 깊게 보지 않고 그냥 단순히 빌드 루트 문제인가? 싶어서 git pull도 해보고 git status도 해봤지만 origin/master와 같다는 대답만 돌아오길래 버그 리포트나 할까 싶었는데… 일단 좀 더 찾아보기로 했다.

해당 메시지는 support/download/check-hash에서 출력하지만 그 파일의 문제는 아닌 것 같고 해서 인터넷을 좀 더 찾아 보니 symbolic link의 문제라는 것을 보았다.

Symbolic link는 단순히 가리키는 파일의 위치가 적혀있는 텍스트 파일에 불과하므로 git에서는 이게 링크인지 그냥 파일인지 구분 없으니 같다고 나왔던 것 이다.

그래서 문제의 디렉토리(package/gcc)에서 보니 gcc.hash파일이 보였다.

GCC는 두 번 빌드해야 하므로 하위 디렉토리에 gcc-initialgcc-final 디렉토리가 있었고, 각각에 gcc-initial.hashgcc-final.hash 파일이 보였다. 두 파일 크기는 모두 11 Byte. 딱 ../gcc.hash 라는 텍스트의 크기와 같은 크기였다. 두 파일 다 내용은 역시나 ../gcc.hash

# in buildroot_dir/package/gcc
rm gcc-initial/gcc-initial.hash
rm gcc-final/gcc-final.hash
ln -s ../gcc.hash gcc-initial/gcc-initial.hash
ln -s ../gcc.hash gcc-final/gcc-final.hash

각각 삭제하고 다시 링크를 건 뒤 다시 빌드 하니 잘 동작한다. 심볼릭 링크가 이렇게 골탕 먹일 줄은 생각도 못했다.

댓글 없음:

댓글 쓰기