On Sun, 19 Aug 2018, Mikulas Patocka wrote:



On Sun, 19 Aug 2018, Axel Beckert wrote:

Control: tag -1 + moreinfo

,Hi Mikulas

Mikulas Patocka wrote:
Package: aptitude
          ^^^^^^^^
   * What led up to the situation?

apt doesn't call fsync when writing the file extended_states - so that if
 ^^^
If you strace aptitude, you can see that it writes the file
               ^^^^^^^^
I had my file extended_states corrupted when the system crashed while
doing unattended upgrades.
       ^^^^^^^^^^^^^^^^^^^
apt should call fsync before closing the file handle
 ^^^

You've mentioned three different package managing tools: apt, aptitude
and unattended-upgrades.

Since you've straced aptitude, I assume you meant aptitude where you
wrote apt. But then again unattended-upgrades uses apt, not aptitude.

Please clarify!

                Regards, Axel

All of the apt tools should use fsync (because the machine may crash when the user is using any of them).

In my case, unattended-upgrades corrupted the file extended_states when the machine crashed, but unattended-upgrades will not write the file if there are no upgrades being done, so stracing it doesn't show the bug.

Mikulas

I've straced unattended-upgrade while doing an upgrade and it also doesn't use fsync, just like aptitude:

1858  openat(AT_FDCWD, "/var/lib/apt/extended_states.lzL2ec", 
O_RDWR|O_CREAT|O_EXCL, 0600) = 6
1858  umask(000)                        = 022
1858  umask(022)                        = 000
1858  fchmod(6, 0644)                   = 0
1858  fcntl(6, F_SETFD, FD_CLOEXEC)     = 0
1858  write(6, "Package: qemu-system-mips\n", 26) = 26
1858  write(6, "Status: install ok installed\n", 29) = 29
1858  write(6, "Priority: optional\n", 19) = 19
1858  write(6, "Section: otherosfs\n", 19) = 19
1858  write(6, "Installed-Size: 38108\n", 22) = 22
1858  write(6, "Maintainer: Debian QEMU Team 
<pkg-qemu-de...@lists.alioth.debian.org>\n", 70) = 70
1858  write(6, "Architecture: arm64\n", 20) = 20
1858  write(6, "Multi-Arch: foreign\n", 20) = 20
....
1858  write(6, "Package: base-files\n", 20) = 20
1858  write(6, "Architecture: arm64\n", 20) = 20
1858  write(6, "Auto-Installed: 1\n", 18) = 18
1858  write(6, "\n", 1)                 = 1
1858  write(6, "Package: libvirt-daemon\n", 24) = 24
1858  write(6, "Architecture: arm64\n", 20) = 20
1858  write(6, "Auto-Installed: 1\n", 18) = 18
1858  write(6, "\n", 1)                 = 1
1858  close(6)                          = 0
1858  renameat(AT_FDCWD, "/var/lib/apt/extended_states.lzL2ec", AT_FDCWD, 
"/var/lib/apt/extended_states") = 0
1858  fchmodat(AT_FDCWD, "/var/lib/apt/extended_states", 0644) = 0
1858  close(5)                          = 0

Mikulas

Reply via email to