I am upgrading a Fedora Linux system. A necessary step is to bring the system up-to-date. For this, I issue the command,
sudo dnf upgrade --refresh
However, the upgrade fails with an error message that complains about "unpacking of archive failed ... cpio: File from package already exists as a directory in system". Below is an exerpt of the error message,
$ sudo dnf upgrade --refresh
Docker CE Stable - x86_64 110 kB/s | 3.5 kB 00:00
Fedora 32 openh264 (From Cisco) - x86_64 3.4 kB/s | 990 B 00:00
Fedora Modular 32 - x86_64 146 kB/s | 12 kB 00:00
Fedora Modular 32 - x86_64 - Updates 69 kB/s | 12 kB 00:00
Fedora 32 - x86_64 - Updates 122 kB/s | 12 kB 00:00
Fedora 32 - x86_64 120 kB/s | 12 kB 00:00
Dependencies resolved.
================================================================================
Package Arch Version Repo Size
================================================================================
Upgrading:
filesystem x86_64 3.14-2.fc32 fedora 1.1 M
gawk x86_64 5.0.1-7.fc32 fedora 1.2 M
npm x86_64 1:6.14.12-1.12.22.1.1.fc32 updates 3.3 M
python3-numpy x86_64 1:1.18.4-2.fc32 updates 4.4 M
texlive-texlive.infra noarch 7:20200327-21.fc32 updates 279 k
Transaction Summary
================================================================================
Upgrade 5 Packages
Total download size: 10 M
Is this ok [y/N]: y
Downloading Packages:
(1/5): texlive-texlive.infra-20200327-21.fc32.n 630 kB/s | 279 kB 00:00
(2/5): npm-6.14.12-1.12.22.1.1.fc32.x86_64.rpm 4.7 MB/s | 3.3 MB 00:00
(3/5): filesystem-3.14-2.fc32.x86_64.rpm 3.1 MB/s | 1.1 MB 00:00
(4/5): python3-numpy-1.18.4-2.fc32.x86_64.rpm 3.6 MB/s | 4.4 MB 00:01
(5/5): gawk-5.0.1-7.fc32.x86_64.rpm 2.0 MB/s | 1.2 MB 00:00
--------------------------------------------------------------------------------
Total 6.6 MB/s | 10 MB 00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Running scriptlet: filesystem-3.14-2.fc32.x86_64 1/1
Preparing : 1/1
Upgrading : filesystem-3.14-2.fc32.x86_64 1/10
Error unpacking rpm package filesystem-3.14-2.fc32.x86_64
Upgrading : gawk-5.0.1-7.fc32.x86_64 2/10
error: unpacking of archive failed on file /usr/tmp: cpio: File from package already exists as a directory in system
error: filesystem-3.14-2.fc32.x86_64: install failed
Error unpacking rpm package gawk-5.0.1-7.fc32.x86_64
Upgrading : texlive-texlive.infra-7:20200327-21.fc32.noarch 3/10
error: unpacking of archive failed on file /usr/libexec/gawk: cpio: File from package already exists as a directory in system
error: gawk-5.0.1-7.fc32.x86_64: install failed
Error unpacking rpm package texlive-texlive.infra-7:20200327-21.fc32.noarch
Upgrading : python3-numpy-1:1.18.4-2.fc32.x86_64 4/10
error: unpacking of archive failed on file /usr/share/perl5/TeXLive: cpio: File from package already exists as a directory in system
error: texlive-texlive.infra-7:20200327-21.fc32.noarch: install failed
Error unpacking rpm package python3-numpy-1:1.18.4-2.fc32.x86_64
Upgrading : npm-1:6.14.12-1.12.22.1.1.fc32.x86_64 5/10
error: unpacking of archive failed on file /usr/include/numpy: cpio: File from package already exists as a directory in system
error: python3-numpy-1:1.18.4-2.fc32.x86_64: install failed
Error unpacking rpm package npm-1:6.14.12-1.12.22.1.1.fc32.x86_64
Verifying : npm-1:6.14.12-1.12.22.1.1.fc32.x86_64 1/10
Verifying : npm-1:6.14.8-1.12.19.0.1.fc31.x86_64 2/10
Verifying : python3-numpy-1:1.18.4-2.fc32.x86_64 3/10
Verifying : python3-numpy-1:1.17.4-2.fc31.x86_64 4/10
Verifying : texlive-texlive.infra-7:20200327-21.fc32.noarch 5/10
Verifying : texlive-texlive.infra-7:20190410-8.fc31.noarch 6/10
Verifying : filesystem-3.14-2.fc32.x86_64 7/10
Verifying : filesystem-3.12-2.fc31.x86_64 8/10
Verifying : gawk-5.0.1-7.fc32.x86_64 9/10
Verifying : gawk-5.0.1-5.fc31.x86_64 10/10
Failed:
filesystem-3.12-2.fc31.x86_64
filesystem-3.14-2.fc32.x86_64
gawk-5.0.1-5.fc31.x86_64
gawk-5.0.1-7.fc32.x86_64
npm-1:6.14.8-1.12.19.0.1.fc31.x86_64
npm-1:6.14.12-1.12.22.1.1.fc32.x86_64
python3-numpy-1:1.17.4-2.fc31.x86_64
python3-numpy-1:1.18.4-2.fc32.x86_64
texlive-texlive.infra-7:20190410-8.fc31.noarch
texlive-texlive.infra-7:20200327-21.fc32.noarch
Error: Transaction failed
$
As it complains that it can not write to the path indicated in the error message, such as, /usr/include/numpy
because the directory already exists. To address this, I come out the following solution, i.e., to rename the directory or file that the error message complains about. For instance, we do these,
sudo mv /usr/tmp /usr/tmp.bu
sudo mv /usr/libexec/gawk /usr/libexec/gawk.bu
sudo mv /usr/share/perl5/TeXLive /usr/share/perl5/TeXLive.bu
sudo mv /usr/include/numpy /usr/include/numpy.bu
Then do upgrade again, as in,
sudo dnf upgrade --refresh
After this, don't forget to remove the backup files or directories, such as,
sudo rm -rf /usr/tmp.bu
sudo rm -rf /usr/libexec/gawk.bu
sudo rm -rf /usr/share/perl5/TeXLive.bu
sudo rm -rf /usr/include/numpy.bu
Dealing with Complexities
The above solutions work for some packages. However, there are two complexities.
- Some packages has more than one or two files or directories that cause
cpio
to fail. The sympotom is that we would encounter the similar error. The solution is obvious, just to rename the file or the directory that causes the problem until we can successfully upgrade the package.
- Sometimes, the error message does not indicate which file or the directory causes the problem, such as, the example below,
$ sudo dnf upgrade --refresh
[sudo] password for hchen:
Docker CE Stable - x86_64 38 kB/s | 13 kB 00:00
Fedora 33 - x86_64 11 MB/s | 72 MB 00:06
Fedora 33 openh264 (From Cisco) - x86_64 1.4 kB/s | 2.5 kB 00:01
Fedora Modular 33 - x86_64 3.1 MB/s | 3.3 MB 00:01
Fedora 33 - x86_64 - Updates 12 MB/s | 30 MB 00:02
Fedora Modular 33 - x86_64 - Updates 2.8 MB/s | 3.2 MB 00:01
Last metadata expiration check: 0:00:01 ago on Sat 02 Oct 2021 09:14:19 PM EDT.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Upgrading:
npm x86_64 1:6.14.15-1.14.17.6.1.fc33 updates 3.3 M
Transaction Summary
================================================================================
Upgrade 1 Package
Total download size: 3.3 M
Is this ok [y/N]: y
Downloading Packages:
npm-6.14.15-1.14.17.6.1.fc33.x86_64.rpm 6.2 MB/s | 3.3 MB 00:00
--------------------------------------------------------------------------------
Total 4.0 MB/s | 3.3 MB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Running scriptlet: npm-1:6.14.15-1.14.17.6.1.fc33.x86_64 1/1
Preparing : 1/1
Upgrading : npm-1:6.14.15-1.14.17.6.1.fc33.x86_64 1/2
Error unpacking rpm package npm-1:6.14.15-1.14.17.6.1.fc33.x86_64
Verifying : npm-1:6.14.15-1.14.17.6.1.fc33.x86_64 1/2
Verifying : npm-1:6.14.8-1.12.19.0.1.fc31.x86_64 2/2
Failed:
npm-1:6.14.8-1.12.19.0.1.fc31.x86_64 npm-1:6.14.15-1.14.17.6.1.fc33.x86_64
Error: Transaction failed
$
One solution is to download the rpm package, and attempt to upgrade it using rpm
. In this way we can observe which file and directory that have caused the problem. For instance, we first download the npm
package,
sudo dnf download npm
Then we attempt to install it,
$ sudo rpm -U -i -v -h npm-6.14.15-1.14.17.6.1.fc33.x86_64.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:npm-1:6.14.15-1.14.17.6.1.fc33 ################################# [ 50%]
error: unpacking of archive failed on file /usr/lib/node_modules/npm/docs: cpio: File from package already exists as a directory in system
error: npm-1:6.14.15-1.14.17.6.1.fc33.x86_64: install failed
error: npm-1:6.14.8-1.12.19.0.1.fc31.x86_64: erase skipped
$
which shows that the /usr/lib/node_modules/npm/docs
directory is the culprit. We need to rename it following the approach discussed in the above
sudo mv /usr/lib/node_modules/npm/docs /usr/lib/node_modules/npm/docs.bu
After that, we can upgrade the package, for instance,
$ sudo rpm -U -i -v -h npm-6.14.15-1.14.17.6.1.fc33.x86_64.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:npm-1:6.14.15-1.14.17.6.1.fc33 ################################# [ 50%]
Cleaning up / removing...
2:npm-1:6.14.8-1.12.19.0.1.fc31 ################################# [100%]
$ sudo dnf upgrade --refresh
Docker CE Stable - x86_64 22 kB/s | 3.5 kB 00:00
Fedora 33 - x86_64 47 kB/s | 13 kB 00:00
Fedora 33 openh264 (From Cisco) - x86_64 9.7 kB/s | 990 B 00:00
Fedora Modular 33 - x86_64 121 kB/s | 12 kB 00:00
Fedora 33 - x86_64 - Updates 95 kB/s | 11 kB 00:00
Fedora 33 - x86_64 - Updates 496 kB/s | 430 kB 00:00
Fedora Modular 33 - x86_64 - Updates 49 kB/s | 11 kB 00:00
Dependencies resolved.
Nothing to do.
Complete!
$