labunix's blog

labunixのラボUnix

apt-getの「lzma_read:読み込みエラー (7)」に対処する。

■apt-getの「lzma_read:読み込みエラー (7)」に対処する。

$ lsb_release -d
Description:	Debian GNU/Linux 10 (buster)

■以下のようなエラーメッセージ。

$ sudo apt-get update
...
E: http://security.debian.org/dists/buster/updates/main/i18n/Translation-en の取得に失敗しました  lzma_read: 読み込みエラー (7)
E: http://security.debian.org/dists/stable/updates/main/i18n/Translation-en の取得に失敗しました  lzma_read: 読み込みエラー (7)
E: いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。

■対処方法

$ sudo apt-get clean
$ sudo rm -fr /var/lib/apt/lists/*
$ sudo apt-get clean
$ sudo apt-get update

■以降は、原因と対処方法の確認。
 lzmaは圧縮か解凍。apt-getなので解凍時のエラー。

$ man lzma 2>/dev/null | lsec ^NAME
NAME
       xz, unxz, xzcat, lzma, unlzma, lzcat - Compress or decompress .xz and .lzma files

Tukaani                                                      2017-04-19                                                       XZ(1)


■/var/lib/apt/lists配下のファイルが壊れているか存在しないことが原因。
 メッセージどおりの読み込みエラー。

$ sudo strace apt-get update > lzma_read.log 2>&1

$ grep lzma lzma_read.log | tail -1
stat("/var/lib/apt/lists/non-gnu.uvt.nl_debian_dists_buster_uvt_i18n_Translation-en.lzma", 0x7fffb52459f0) = -1 ENOENT (そのようなファイルやディレクトリはありません)

$ sudo find /var/lib/apt -type d 
/var/lib/apt
/var/lib/apt/lists
/var/lib/apt/lists/auxfiles
/var/lib/apt/lists/partial
/var/lib/apt/periodic
/var/lib/apt/mirrors
/var/lib/apt/mirrors/partial

■フォーマットがlzma。「-d」なので解凍処理時。

$ sudo ltrace apt-get update
...
memcpy(0x559967f791a0, "http://security.debian.org/", 27) = 0x559967f791a0
memcpy(0x559967f11010, "buster/updates", 14)     = 0x559967f11010
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERmm(0x7fff47a62490, 0x7fff47a62450, 0, 0x559967ea5020) = 0x559967f78a60
memcpy(0x559967f78a60, "clearsigned.message", 19) = 0x559967f78a60
memcpy(0x7fff47a62200, "/tmp", 4)                = 0x7fff47a62200
memcpy(0x559967f78b28, "zstd", 4)                = 0x559967f78b28
memcpy(0x559967f78b48, ".zst", 4)                = 0x559967f78b48
memcpy(0x559967f78b68, "false", 5)               = 0x559967f78b68
memcpy(0x559967f78bc0, "lz4", 3)                 = 0x559967f78bc0
memcpy(0x559967f78be0, ".lz4", 4)                = 0x559967f78be0
memcpy(0x559967f78c00, "lz4", 3)                 = 0x559967f78c00
memcpy(0x559967f77b00, "-1", 2)                  = 0x559967f77b00
memcpy(0x559967ed6380, "-d", 2)                  = 0x559967ed6380
memcpy(0x559967f78c58, "gzip", 4)                = 0x559967f78c58
memcpy(0x559967f78c78, ".gz", 3)                 = 0x559967f78c78
memcpy(0x559967f78c98, "gzip", 4)                = 0x559967f78c98
memcpy(0x559967f5a090, "-6n", 3)                 = 0x559967f5a090
memcpy(0x559967f5a220, "-d", 2)                  = 0x559967f5a220
memcpy(0x559967f78cf0, "xz", 2)                  = 0x559967f78cf0
memcpy(0x559967f78d10, ".xz", 3)                 = 0x559967f78d10
memcpy(0x559967f78d30, "xz", 2)                  = 0x559967f78d30
memcpy(0x559967ed5810, "-6", 2)                  = 0x559967ed5810
memcpy(0x559967f10d40, "-d", 2)                  = 0x559967f10d40
memcpy(0x559967f78d88, "bzip2", 5)               = 0x559967f78d88
memcpy(0x559967f78da8, ".bz2", 4)                = 0x559967f78da8
memcpy(0x559967f78dc8, "bzip2", 5)               = 0x559967f78dc8
memcpy(0x559967f771a0, "-6", 2)                  = 0x559967f771a0
memcpy(0x559967ed6c70, "-d", 2)                  = 0x559967ed6c70
memcpy(0x559967f78e20, "lzma", 4)                = 0x559967f78e20
memcpy(0x559967f78e40, ".lzma", 5)               = 0x559967f78e40
memcpy(0x559967f78e60, "xz", 2)                  = 0x559967f78e60
memcpy(0x559967f59960, "--format=lzma", 13)      = 0x559967f59960
memcpy(0x559967f59980, "-6", 2)                  = 0x559967f59980
memcpy(0x559967f3d360, "--format=lzma", 13)      = 0x559967f3d360
memcpy(0x559967f3d380, "-d", 2)                  = 0x559967f3d380
memcpy(0x7fff47a62480, "yes", 3)                 = 0x7fff47a62480
memcpy(0x7fff47a62690, "Debian", 6)              = 0x7fff47a62690
memcpy(0x7fff47a62690, "Debian-Security", 15)    = 0x7fff47a62690
memcpy(0x7fff47a62690, "10", 2)                  = 0x7fff47a62690
memcpy(0x7fff47a62630, "stable", 6)              = 0x7fff47a62630
memcpy(0x7fff47a62670, "buster", 6)              = 0x7fff47a62670
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERmm(0x7fff47a62680, 0x7fff47a624a0, 0, 0x7fff47a62690) = 0x559967f59950
memcpy(0x559967f59950, "amd64 arm64 armel armhf i386 mip"..., 63) = 0x559967f59950
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERmm(0x7fff47a62680, 0x7fff47a624a0, 0, 0x7fff47a62690) = 0x559967ec8780
m

■キャッシュも同様にクリアする。

 ■debianの「apt-get clean」で「/var/cache/apt*」ディレクトリを解放する。
 http://labunix.hateblo.jp/entry/20141207/1417883814

$ sudo find /var/cache/apt* -type d -exec du -h {}  +
4.0K	/var/cache/apt/archives/partial
232K	/var/cache/apt/archives
236K	/var/cache/apt

■結果として。
 apt-get cleanはいつもやっているのでキャッシュはキレイ。
 /var/lib/apt/lists/配下を削除後に「apt-get clean」すると必要なディレクトリが再生成される。
 読み込みエラーのファイルが消えて正常に再取得出来るとエラーも解消される。

$ sudo apt-get clean

$ sudo find /var/cache/apt* -type d -exec du -h {}  +
4.0K	/var/cache/apt/archives/partial
232K	/var/cache/apt/archives
236K	/var/cache/apt

$ sudo find /var/lib/apt/lists/ -type d -exec du -h {} +
4.0K	/var/lib/apt/lists/auxfiles
12K	/var/lib/apt/lists/partial
286M	/var/lib/apt/lists/

$ sudo rm -fr /var/lib/apt/lists/*

$ sudo apt-get clean

$ sudo find /var/lib/apt/lists/ -type d -exec du -h {} +
4.0K	/var/lib/apt/lists/auxfiles
4.0K	/var/lib/apt/lists/partial
20K	/var/lib/apt/lists/

$ sudo apt-get update