Fabian Vogt changed bug 1183711
What Removed Added
CC   bzeller@suse.com, ma@suse.com
Flags   needinfo?(ma@suse.com), needinfo?(bzeller@suse.com)

Comment # 7 on bug 1183711 from
That this fails in TW now too made the list of changes much shorter, so I could
do some tests.

I found that this is caused by 99903f03c551288e6bb522522b547f1fc8e4ee32 in
yast-packager, "Move the libzypp cache (bsc#1182928)".

It does the following shortly before starting the installation:

      # copy the credential files (libzypp loads them from target)
      # and the repository cache to the target system
      Pkg.SourceCacheCopyTo(Installation.destdir)

      # symlink the cache from inst-sys to save same space (RAM!)
      cache_path = Pkg.ZConfig()["repo_cache_path"] || "/var/cache/zypp"
      log.info("Zypp cache size: #{`du -h -s #{cache_path.shellescape}`}")
      ::FileUtils.rm_rf(cache_path)
      File.symlink(File.join(Installation.destdir, cache_path), cache_path)

After commenting out the "Pkg.SourceCacheCopyTo(Installation.destdir)" call,
the crash is gone.

What this does is effectively:
cp -R /var/cache/zypp /mnt/var/cache/
rm -rf /var/cache/zypp
ln -sf /mnt/var/cache/zypp /var/cache/zypp

@zypp: Can you explain this? Is it a bug in YaST, libzypp or even libsolv?

My theory is that it's very risky to copy cache files which are potentially in
use by the current process. Buffers might not be flushed to disk yet, so this
copies potentially incomplete files over and when they are reopened, the
content is different.

The crash looks very much like corruption of the repo data.


You are receiving this mail because: