Bug 29117 - rpmReadSignature failed при inode, выходящем за 32 бита
: rpmReadSignature failed при inode, выходящем за 32 бита
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/rpm)
: unstable
: all Linux
: P3 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2013-06-27 23:29 by
Modified: 2016-12-19 17:13 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2013-06-27 23:29:17
$ rpm --checksig
/var/ftp/pub/Etersoft/CIFS@Etersoft/5.4.7/sources/etercifs-5.4.7-alt1.src.rpm 
error:
/var/ftp/pub/Etersoft/CIFS@Etersoft/5.4.7/sources/etercifs-5.4.7-alt1.src.rpm:
rpmReadSignature failed

Небольшое расследование выявило, что у файла inode >4ГБ:
это видно по вызову из rpm:
fstat64(3</var/ftp/pub/Etersoft/CIFS@Etersoft/5.4.7/sources/etercifs-5.4.7-alt1.src.rpm>,
{st_dev=makedev(253, 0), st_ino=4496308953, st_mode=S_IFREG|0644, st_nlink=1,
st_uid=1706, st_gid=100, st_blksize=4096, st_blocks=15592, st_size=7981458,
st_atime=2013/06/27-22:11:08, st_mtime=2013/06/27-22:19:54,
st_ctime=2013/06/27-22:19:54}) = 0

и просто
# stat
/var/ftp/pub/Etersoft/CIFS@Etersoft/5.4.7/sources/etercifs-5.4.7-alt1.src.rpm 
  Размер: 7981458       Блоков: 15592      Блок В/В: 4096   обычный файл
Устройство: fd00h/64768d    Inode: 4496308953  Ссылки: 1

Условия возникновения:

файловая система XFS (700ГБ размером) подошла к краю и решила создавать inode >
4Гб (несмотря на описанное здесь
https://bugzilla.altlinux.org/show_bug.cgi?id=28214#c14 где проблемы обещались
только при ФС размером > 1ТБ)
------- Comment #1 From 2013-06-29 17:23:06 -------
Удобно, что мы всё это уже обсуждали:

>Комментарий #12 от Dmitry V. Levin 2013-01-12 06:06:26
>Чего гадать, когда можно просто в linux/fs/stat.c исходный код посмотреть.
>Например, там написано, что stat(2) возвращает EOVERFLOW, когда st_ino,
>st_nlink или st_size недостаточного размера.

>Комментарий #4 от Dmitry V. Levin 2012-12-20 18:37:37
>Достаточно просто добавить AC_SYS_LARGEFILE, который does the right thing.
------- Comment #2 From 2013-10-24 02:36:58 -------
(In reply to comment #1)
> Удобно, что мы всё это уже обсуждали:
> 
> >Комментарий #12 от Dmitry V. Levin 2013-01-12 06:06:26
> >Чего гадать, когда можно просто в linux/fs/stat.c исходный код посмотреть.
> >Например, там написано, что stat(2) возвращает EOVERFLOW, когда st_ino,
> >st_nlink или st_size недостаточного размера.
> 
> >Комментарий #4 от Dmitry V. Levin 2012-12-20 18:37:37
> >Достаточно просто добавить AC_SYS_LARGEFILE, который does the right thing.

В некоторые пакеты просто добавить AC_SYS_LARGEFILE нельзя.
Например, в rpm используется fts, соответственно, все взрывается:

In file included from files.c:1573:0:
/usr/include/fts.h:41:3: error: #error "<fts.h> cannot be used with
-D_FILE_OFFSET_BITS==64"

В rpm>=4.1 (видимо, для объезда) jbj просто взял и скопировал fts.{c,h} из
glibc в rpm.

см. тж.
http://sourceware.org/bugzilla/show_bug.cgi?id=11460
http://sourceware.org/bugzilla/show_bug.cgi?id=15838
------- Comment #3 From 2016-12-19 17:13:22 -------
rpm 4.13.0 использует LFS на i586.