nginx バージョン (debian リポジトリからインストール) を nginx リポジトリの最新バージョンに更新しようとすると、古い nginx パッケージの 1 つにあるファイルを上書きできないため失敗します (そのパッケージは自動的に削除される予定です)。これは、コマンドを実行したときの bash 出力ですapt install nginx -V
。
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
geoip-database (20190724-1~bpo10+1)
libgd3 (2.2.5-5.2)
libgeoip1 (1.6.12-3~bpo10+1)
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
libnginx-mod-http-auth-pam (1.14.2-2)
libnginx-mod-http-dav-ext (1.14.2-2)
libnginx-mod-http-echo (1.14.2-2)
libnginx-mod-http-geoip (1.14.2-2)
libnginx-mod-http-image-filter (1.14.2-2)
libnginx-mod-http-subs-filter (1.14.2-2)
libnginx-mod-http-upstream-fair (1.14.2-2)
libnginx-mod-http-xslt-filter (1.14.2-2)
libnginx-mod-mail (1.14.2-2)
libnginx-mod-stream (1.14.2-2)
nginx-common (1.14.2-2)
nginx-full (1.14.2-2)
The following packages will be upgraded:
nginx (1.14.2-2 => 1.16.1-1~buster)
1 upgraded, 0 newly installed, 12 to remove and 0 not upgraded.
Need to get 0 B/850 kB of archives.
After this operation, 291 kB disk space will be freed.
Do you want to continue? [Y/n]
dpkg: libnginx-mod-http-auth-pam: dependency problems, but removing anyway as you requested:
nginx-full depends on libnginx-mod-http-auth-pam (= 1.14.2-2).
(Reading database ... 152770 files and directories currently installed.)
Removing libnginx-mod-http-auth-pam (1.14.2-2) ...
dpkg: nginx-common: dependency problems, but removing anyway as you requested:
nginx-full depends on nginx-common (= 1.14.2-2); however:
Package nginx-common is to be removed.
libnginx-mod-stream depends on nginx-common (= 1.14.2-2).
libnginx-mod-mail depends on nginx-common (= 1.14.2-2).
libnginx-mod-http-xslt-filter depends on nginx-common (= 1.14.2-2).
libnginx-mod-http-upstream-fair depends on nginx-common (= 1.14.2-2).
libnginx-mod-http-subs-filter depends on nginx-common (= 1.14.2-2).
libnginx-mod-http-image-filter depends on nginx-common (= 1.14.2-2).
libnginx-mod-http-geoip depends on nginx-common (= 1.14.2-2).
libnginx-mod-http-echo depends on nginx-common (= 1.14.2-2).
libnginx-mod-http-dav-ext depends on nginx-common (= 1.14.2-2).
Removing nginx-common (1.14.2-2) ...
(Reading database ... 152743 files and directories currently installed.)
Preparing to unpack .../nginx_1.16.1-1~buster_amd64.deb ...
Unpacking nginx (1.16.1-1~buster) over (1.14.2-2) ...
dpkg: error processing archive /var/cache/apt/archives/nginx_1.16.1-1~buster_amd64.deb (--unpack):
trying to overwrite '/usr/sbin/nginx', which is also in package nginx-full 1.14.2-2
dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)
Errors were encountered while processing:
/var/cache/apt/archives/nginx_1.16.1-1~buster_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
最初に古いパッケージをアンインストールしてから新しいパッケージをインストールしているわけではないようです。代わりに、2 つのパッケージをアンインストールしてから、更新されたパッケージをインストールしようとしています。この更新を試した後、再インストールする必要があるためnginx-common
ですlibnginx-mod-http-auth-pam
。
私の質問は、新しいインストールを強制する方法を知っている人はいますか(dist-upgrade
そして--with-new-pkgs
うまくいきませんでした)、それともそれらのパッケージを手動でアンインストールする必要がありますか?それとも、アップグレードする前に行う手順が抜けているだけでしょうか?
答え1
これがまだ関連しているかどうかはわかりませんが、同様の問題がありました。私の場合は、古い nginx をアンインストールすることで解決しました。apt remove nginx nginx-common
次に、新しいバージョンをインストールしました。apt install nginx
現在のバージョンが壊れている場合は、apt --fix-broken install
答え2
このコマンドを使用してください。これでうまくいきました。
sudo dpkg --purge --force-depends apache2