갑자기 "apt-key를 실행하는 동안 알 수 없는 오류가 발생했습니다"라는 이유로 서버가 "apt 업데이트"를 거부합니다.

갑자기 "apt-key를 실행하는 동안 알 수 없는 오류가 발생했습니다"라는 이유로 서버가 "apt 업데이트"를 거부합니다.

질문

업데이트: 현재 strace 사용을 조사 중입니다. 문제는 저장소에 액세스할 때 HTTP 400 오류인 것 같습니다.

업데이트 2: 서버에서 더 이상한 오류가 발생합니다(.so lib 파일이 손상되고 데이터베이스 엔진이 "알 수 없는 오류"라고 표시됨). 따라서 이 문제는 하드웨어 버그로 인한 것 같습니다.

Unknown error executing apt-key

예를 들어 apt update실행 스니펫은 다음과 같습니다.

[...]
Get:3 http://deb.debian.org/debian buster-updates InRelease [56,6 kB] 
[...]
Err:3 http://deb.debian.org/debian buster-updates InRelease
  Unknown error executing apt-key
[...]
W: GPG error: http://deb.debian.org/debian buster-updates InRelease: Unknown error executing apt-key
E: The repository 'http://deb.debian.org/debian buster-updates InRelease' is not signed.
[...]

이것은 오래전부터 잘 작동해왔고 하룻밤 사이에 일어나기 시작했습니다. 서버에는 특별한 작업이 수행되지 않습니다.

거의 동일한 구성을 가진 다른 서버가 있는데 제대로 작동합니다.

apt 및 시스템 로그에 관련 항목이 없습니다.

내가 시도한 것

삭제하고 /var/lib/apt신뢰할 수 있는 키를 확인해야 한다는 게시물과 유사한 방법이 있습니다. 아무도 작동하지 않았습니다.

출력을 확인했습니다 apt-key list. 목록은 정상적으로 작동하는 다른 서버와 거의 동일했습니다. 다른 서버에는 Jenkins 저장소에 대한 키가 하나 더 있었습니다.

출력은 다음과 같습니다:

/etc/apt/trusted.gpg.d/debian-archive-bullseye-security-automatic.gpg
---------------------------------------------------------------------
pub   rsa4096 2021-01-17 [SC] [expires: 2029-01-15]
      AC53 0D52 0F2F 3269 F5E9  8313 A484 4904 4AAD 5C5D
uid           [ unknown] Debian Security Archive Automatic Signing Key (11/bullseye) <[email protected]>
sub   rsa4096 2021-01-17 [S] [expires: 2029-01-15]

/etc/apt/trusted.gpg.d/debian-archive-bullseye-stable.gpg
---------------------------------------------------------
pub   rsa4096 2021-02-13 [SC] [expires: 2029-02-11]
      A428 5295 FC7B 1A81 6000  62A9 605C 66F0 0D6C 9793
uid           [ unknown] Debian Stable Release Key (11/bullseye) <[email protected]>

/etc/apt/trusted.gpg.d/debian-archive-buster-automatic.gpg
----------------------------------------------------------
pub   rsa4096 2019-04-14 [SC] [expires: 2027-04-12]
      80D1 5823 B7FD 1561 F9F7  BCDD DC30 D7C2 3CBB ABEE
uid           [ unknown] Debian Archive Automatic Signing Key (10/buster) <[email protected]>
sub   rsa4096 2019-04-14 [S] [expires: 2027-04-12]

/etc/apt/trusted.gpg.d/debian-archive-buster-security-automatic.gpg
-------------------------------------------------------------------
pub   rsa4096 2019-04-14 [SC] [expires: 2027-04-12]
      5E61 B217 265D A980 7A23  C5FF 4DFA B270 CAA9 6DFA
uid           [ unknown] Debian Security Archive Automatic Signing Key (10/buster) <[email protected]>
sub   rsa4096 2019-04-14 [S] [expires: 2027-04-12]

거의 동일한 구성(동일한 Debian 10 OS, 매우 유사한 설치 패키지 등)을 가진 다른 서버가 있기 때문에 필사적으로 해당 서버 /var/lib/apt/ec/apt폴더를 이 결함이 있는 서버에 복사하려고 했습니다. 오류가 지속됩니다.

GPG가 잘못된 것이 아닌가 의심되어 다시 설치해 보았습니다. Debian 저장소에서 패키지를 다운로드하고 dpkg를 사용하여 설치했습니다. 결과는 동일하지만 문제가 지속됩니다.

적절한 디버깅 활성화: 작업자 서버와의 차이점

적절한 디버깅을 활성화할 수 있습니다. 내 경우에는 다음을 사용합니다.

apt -o Debug::Acquire::http=false -o Debug::Hashes=true -o Debug::pkgAcquire::Auth=true -o Debug::sourceList=true  update

흥미 롭군. 모든 소스에 주석을 달았지만 deb http://deb.debian.org/debian buster main contrib non-free결함이 있는 서버는 다음을 생성합니다.

# apt -o Debug::Acquire::http=false -o Debug::Hashes=true -o Debug::pkgAcquire::Auth=true -o Debug::sourceList=true  update
Get:1 http://deb.debian.org/debian buster InRelease [122 kB]
201 URI Done: http://deb.debian.org/debian/dists/buster/InRelease
ReceivedHash:
        - SHA512:c65abc258e9ecc7e506133502add58d9c451bc11c3dd9bf7f23a0d58fb0f7747cc75bee22e58dece5af63f6a1cc7dd7c150a383fbd79ce23655c7aca6c32b78c
        - SHA256:45420bba913bb4d35b98319d893d9db2bc0c4034a12c65f07118dd36ee4cea86
        - SHA1:dcbc9207da6730f5a268f7c8f452ad62f0fd9705
        - MD5Sum:2f497e0885083bf377d7f5cafe9b1762
        - Checksum-FileSize:121570
ExpectedHash:

Err:1 http://deb.debian.org/debian buster InRelease
  Unknown error executing apt-key
Reading package lists... Done
W: GPG error: http://deb.debian.org/debian buster InRelease: Unknown error executing apt-key
E: The repository 'http://deb.debian.org/debian buster InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

그러나 작업 서버는 다음을 출력합니다.

# apt -o Debug::Acquire::http=false -o Debug::Hashes=true -o Debug::pkgAcquire::Auth=true -o Debug::sourceList=true  update
0% [Working]201 URI Done: http://deb.debian.org/debian/dists/buster/InRelease
ReceivedHash:
ExpectedHash:

Hit:1 http://deb.debian.org/debian buster InRelease
0% [Working]201 URI Done: http://deb.debian.org/debian/dists/buster/InRelease
ReceivedHash:
ExpectedHash:

Signature verification succeeded: /var/lib/apt/lists/deb.debian.org_debian_dists_buster_InRelease
Got Codename: buster
Got Suite: oldstable
Expecting Dist: buster
Reading package lists... Done
Building dependency tree       
Reading state information... Done
All packages are up to date.

보시다시피, 실패한 서버는 일부 해시를 수신한 것 같지만 예상된 해시는 전혀 수신하지 않은 반면, 작동 중인 서버에는 해시가 전혀 없습니다.

다른 소스는 어떻습니까?을 사용하려고 하면 deb http://deb.debian.org/debian buster-updates main contrib non-free결함이 있는 서버가 다음을 출력합니다.

# apt -o Debug::Acquire::http=false -o Debug::Hashes=true -o Debug::pkgAcquire::Auth=true -o Debug::sourceList=true  update
Get:1 http://deb.debian.org/debian buster-updates InRelease [56,6 kB]
0% [1 InRelease 56,6 kB/56,6 kB 100%]201 URI Done: http://deb.debian.org/debian/dists/buster-updates/InRelease
ReceivedHash:
        - SHA512:3542a4de41bdffba0631f27efdf2dd69602b77b1dd7362285527d3e96d22daaae1165979fc83a740049e2c54de455f798c07f0120baeafd316dd2e9efd68faab
        - SHA256:65d8f69e329505a4abdc3968778e36adae20b8542eed9745c60c47bc90ea4c05
        - SHA1:e901931cf25b06819fe1a653b39621b5e42a0109
        - MD5Sum:db7403e0f919a66b1e05ed537962d333
        - Checksum-FileSize:56621
ExpectedHash:

Err:1 http://deb.debian.org/debian buster-updates InRelease
  Unknown error executing apt-key
Reading package lists... Done
W: GPG error: http://deb.debian.org/debian buster-updates InRelease: Unknown error executing apt-key
E: The repository 'http://deb.debian.org/debian buster-updates InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

이전과 거의 같은 오류입니다. ReceiverdHash에는 여러 키가 포함되어 있지만 ExpectedHash에는 null 값이 있습니다.

작업자 서버는 어떻습니까? 다음과 같이 출력됩니다.

# apt -o Debug::Acquire::http=false -o Debug::Hashes=true -o Debug::pkgAcquire::Auth=true -o Debug::sourceList=true  update
Get:1 http://deb.debian.org/debian buster-updates InRelease [56,6 kB]
0% [1 InRelease 16,4 kB/56,6 kB 29%]201 URI Done: http://deb.debian.org/debian/dists/buster-updates/InRelease
ReceivedHash:
        - SHA512:3542a4de41bdffba0631f27efdf2dd69602b77b1dd7362285527d3e96d22daaae1165979fc83a740049e2c54de455f798c07f0120baeafd316dd2e9efd68faab
        - SHA256:65d8f69e329505a4abdc3968778e36adae20b8542eed9745c60c47bc90ea4c05
        - SHA1:e901931cf25b06819fe1a653b39621b5e42a0109
        - MD5Sum:db7403e0f919a66b1e05ed537962d333
        - Checksum-FileSize:56621
ExpectedHash:

0% [Working]201 URI Done: http://deb.debian.org/debian/dists/buster-updates/InRelease
ReceivedHash:
ExpectedHash:

Signature verification succeeded: /var/lib/apt/lists/partial/deb.debian.org_debian_dists_buster-updates_InRelease

....다운로드하는 다른 파일에 대한 다른 줄이 많이 있지만 이 질문에는 관심이 없는 것 같습니다.

이 경우 작업자 서버는 ReceiverdHash의 해시 값과 ExpectedHash의 null 값도 수신합니다.

저장소에 액세스할 때 400 오류

자, 좀 더 깊이 파헤쳐 보겠습니다. 을 사용해 보겠습니다 strace. 재미있는 부분은 다음과 같습니다.

lchown("/var/lib/apt/lists/partial/deb.debian.org_debian_dists_buster-updates_InRelease", 100, 0) = 0
lstat("/var/lib/apt/lists/partial/deb.debian.org_debian_dists_buster-updates_InRelease", {st_mode=S_IFREG|0644, st_size=56621, ...}) = 0
chmod("/var/lib/apt/lists/partial/deb.debian.org_debian_dists_buster-updates_InRelease", 0600) = 0
rt_sigprocmask(SIG_BLOCK, [WINCH], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
0% [Working])   = 18% [Working]", 18
write(1, "\33[0m", 4)                   = 4
select(11, [5 6], [10], NULL, {tv_sec=0, tv_usec=500000}) = 1 (out [10], left {tv_sec=0, tv_usec=499997})
write(10, "601 Configuration\nConfig-Item: A"..., 11121) = 11121
select(7, [5 6], [], NULL, {tv_sec=0, tv_usec=499997}) = 1 (in [6], left {tv_sec=0, tv_usec=364398})
read(6, "400 URI Failure\nMessage: Unknown"..., 64000) = 148
stat("/var/lib/apt/lists/partial/deb.debian.org_debian_dists_buster-updates_InRelease", {st_mode=S_IFREG|0600, st_size=56621, ...}) = 0
getuid()                                = 0
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 7
connect(7, {sa_family=AF_UNIX, sun_path="/var/run/nscd/socket"}, 110) = 0
sendto(7, "\2\0\0\0\0\0\0\0\5\0\0\0root\0", 17, MSG_NOSIGNAL, NULL, 0) = 17
poll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, 5000) = 1 ([{fd=7, revents=POLLIN}])

구체적으로 다음 줄은 다음과 같습니다.

read(6, "400 URI Failure\nMessage: Unknown"..., 64000) = 148

전송 중 오류가 발생한 것 같습니다.

이제 무엇을 해야 할까요?

HTTP 오류에 대해 자세히 알아보려면 어떻게 해야 합니까? 400을 반환하는 요청을 모방하기 위해 apt-key를 사용할 수 있습니까? 이 문제를 해결하려면 어떻게 해야 합니까(GPG 플래그 확인을 무시하는 것 외에)? 아니면 문제의 근본 원인을 찾기 위해 어떤 다른 테스트를 수행할 수 있습니까?

답변1

저장소 미러링 오류의 피해자일 수 있습니다. 또는 웹 필터(사이트에 필터가 있는 경우)로 인해 시스템이 Debian 저장소에 액세스하지 못할 수도 있습니다. deb.debian.org가장 가까운 데비안 저장소에 연결을 시도하는 GeoIP 리디렉터입니다. 웹 필터는 리디렉터가 사용자에게 보낼 수 있는 모든 주소를 완전히 이해하지 못할 수 있습니다.

InRelease 파일은 다음과 같은 방법으로 수동으로 다운로드할 수 있습니다.

wget http://ftp.debian.org/debian/dists/buster/InRelease

또는

curl http://ftp.debian.org/debian/dists/buster/InRelease > InRelease

제가 아는 한 생성된 파일은 2022년 9월 10일 이후로 변경되지 않았으며 크기는 정확히 121570바이트여야 합니다. 이는 그날 데비안 10.12가 출시되었고 버전에 라벨이 붙었다는 사실과 일치합니다.데비안 10이 장기 지원으로 전환됩니다.

결과 파일은 다음으로 시작하는 PGP 서명 텍스트 파일이어야 합니다.

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Origin: Debian
Label: Debian
Suite: oldstable
Version: 10.13
Codename: buster
Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog
Date: Sat, 10 Sep 2022 11:30:54 UTC
Acquire-By-Hash: yes

다른 결과가 나오면 로컬 웹 필터 프록시(사이트에 있는 경우)의 알림 페이지일 수도 있고, 연결하게 된 미러 사이트에 디스크 오류가 발생하여 파일을 완전히 다시 미러링하지 않았을 수도 있습니다. 파일이 불완전할 수 있습니다. 귀하의 strace는 stat()시스템 호출이 return 중임 을 나타내 st_size=56621므로 불완전하거나 다른 파일을 얻는 것처럼 보입니다.

생성된 파일이 HTML 파일처럼 보이면 이름을 바꾸고 something.html웹 브라우저를 사용하여 봅니다. 알림이 로컬 웹 필터에서 오는 경우 필터 관리자에게 문의해야 할 수도 있습니다. 다른 HTML 오류 페이지의 경우 저장소는 deb.debian.org특정 오류가 발생했을 수 있음을 나타냅니다.

저장소가 수정될 때까지 기다릴 수 없다면 언제든지 다음을 방문하세요.https://www.debian.org/mirror/list그리고 가까운 하나 또는 두 개의 미러를 선택하고 임시로 sources.list대신 사용하도록 구성한 deb.debian.org다음 문제가 있는 저장소를 해결해 보세요.

답변2

복구 디스크로 재부팅한 후 EXT4 파일 시스템을 확인했는데 fsck수백 개의 오류가 있었습니다.

그런 다음 손상된 바이너리를 수정하기 위해 설치된 모든 패키지를 다시 설치했습니다.

그 후 적절한 오류가 사라졌습니다. 이는 apt.

SSD를 업데이트하는 것이 너무 힘들어서 결국 다른 서버로 전환해야 했습니다. 백업은 유효했으며 이 사고 중에 데이터가 손상되지 않았습니다.

관련 정보