何が起きていたか
6/30現在で何が起きていたかを備忘録として書いておこうと思います。
現在、管理人はEndeavourOSを使用しており、この6月初め頃から週ごと程度でアップデートを試みていましたが、/usr/lib/firmeare/nvidia/ad103(104、106、107)
が衝突しているファイルとしてエラーが表示され、それ以外の更新ファイルなどはダウンロードできるもののインストールできないというような状態が1ヶ月近く続いていました。
別段それでも普段することに不便はないのでもうちょっと置いておこうと思いましたが、これをネタに記事を1本書こうということで記事にしてみた感じです。
まずArch系で困ったらArch Wikiへ
問題があったのはシステムのアップデート、つまりpacmanによる問題であったため、pacman
について調べます。
調べるとトラブルシューティングがあり、次のように書いてあります。
エラー: 処理を完了できませんでした (衝突しているファイル)
package: /path/to/file がファイルシステムに存在しています
エラーが発生したため、パッケージは更新されませんでした。
これは、pacman がファイルの衝突を検出し、仕様によりファイルを上書きしないために発生します。これは仕様によるものであり、欠陥ではありません。
まさにこれ。
この解決方法は、
- まず、他のパッケージがそのファイルを所有していないか調べる
sudo pacman -Qo /path/to/file
- 何かしらがそのファイルを所有していた場合はバグレポートを提出
- 何にも所有されていないファイルであった場合は、システムにある方のファイルの名称を変更して再度システムのアップデート。その後、問題のファイルは削除可能
多くの場合、皆同時に同じ問題が発生しているとしたらバグレポートはすでに行われています。複数同じレポートを出すことは重要ではあるものの、その内容が重度であれば即メンテナーなどが確認と対処方法を提示してくれるだろうと思います。
皆が同じ内容をそれぞれに出す必要はありません。いつまでも解決しない場合は課長・係長より、まずは主任に伺いを立てるみたいな感じで、コミュニティーフォーラムを調べるべきです。
1番のものは今回の例であれば、
sudo pacman -Qo /usr/lib/firmware/nvidia/ad103
などのような感じかと思います。
arch wikiの同じ箇所で、該当ファイルが破損していたり、空であったり、存在していない場合は、上記3番であるようにどうせファイルを後で削除するのであれば、
pacman -S --overwrite glob package
などとして上書きすることもできます。などとも書かれていますが、すぐその下に、
警告: 通常、
--overwrite
スイッチの使用は避けてください。システムメンテナンス#特定の pacman コマンドを避けてください を参照してください。
ともあるわけです。
念の為に書いてあることなのですがこういうのがあると本来はどうすべきかがわからずにとても困ります。
コミュニティに聞いてみる
コミュニティでは、これらの問題を把握していて、これはEndeavourOSだけの話ではなく、上流のArchでの問題が下流にも広がっているとして、Arch公式アナウンスで「linux-firmwareの構造変更」に伴い/usr/lib/firmware/nvidia/ad103…
が既存ファイルと競合し更新できなくなったと発表。
その対処方法として、
sudo pacman -Rdd linux-firmware
sudo pacman -Syu linux-firmware
これら操作で、旧版を削除し、新構成で再インストールという方法が言われました。
EndeavourOSフォーラムでもやはり更新に失敗したなどのユーザーの投稿がありコミュニティメンバーがこれらコマンドを紹介したということになっています。
-Rddを使用する理由
-Rdd
は依存関係チェックを無視して対象パッケージだけを強制削除するコマンドです。Arch wikiにあるファイルの衝突による更新が行われない場合の対処方法は、ユーザーが手作業で個別ファイルを移動・リネームなどをする必要がありますが、今回の場合はパッケージのシンボリックのンク構造が根本から変わったため、
- 旧版のファームウェアら(NDIVIA含む)を完全に削除
- パッケージ構成された新ファームウェアを再インストール
こういう流れになり、これを行うには、-Rdd
が最速で確実という判断から、これらのコマンドが紹介されたと思います。
-Rddによるコマンドでうまく行ったように見えたが
これらを実行すると、確かに旧NVIDIAの該当ファイルなどの問題はなくなり、かつ即時sudo pacman -Syu
でシステムを再構築するためアップデートは問題なく行われるようになりました。
しかし、これに伴う二次被害としてNetworkManagerが利用するファームウェアも削除されたのか、NetworkManagerを作動させるサービスなどは動作しているようだけども、肝心のファームウェアが読み込まれずに結果としてwifiが機能しないと言う状態になりました。
もちろん本来であれば正しく動作するようになったのでしょうけれども、たまたまか何かしらが原因でそうなったという感じです。
これに伴う二次被害としてNetworkManagerが利用するファームウェアも削除されたのか、……
と書きましたが、これは当然で-Rdd
でファームウェアを削除しているのですからそうなります。つまり、以下のことを忘れていたと言うことです。なのでそう言う自体になったらどう対処するかと言う視点からも御覧ください。
おそらく、こうなってしまった原因は、 sudo pacman -Rdd linux-firmware
の後、sudo pacman -Syu
で終わってしまったことにあるのではなかろうかと思うのです。
つまり、ここで再起動しろと言うメッセージが来ることで、必要であったsudo pacman -S linux-firmware
が抜けてしまい、本来であればまだネットに接続されている状態でファームウェアの更新もできたのに、再起動してしまったがゆえにファームウェアが無くなり、Wifiに接続できなくなってしまったと言うことではなかろうかと。
で、更に以下で説明しますが、sudo pacman -Syu
とsudo pacman -S linux-firmware
と分ける必要もありません。
無線だけではなく、
linux-firmware
がなくなるとスリープから復帰などのPCを制御する部分が無くなってしまうので、見た目には普通に使えているようでもかなり必要なものがない状態になります。
なので、必ず、sudo pacman -Syu linux-firmware
とするか、sudo pacman -Syu
の実行後にsudo pacman -S linux-firmware
を忘れないように。
ここでsudo pacman -Syu linux-firmware
とsudo pacman -S linux-firmware
の違いも書いておきます。
-Syu
= 全体のシステムアップデート(upgrade)を行いつつ、linux-firmwareもアップグレードする-S
= install(インストール)-y
= sync(リポジトリの最新状態に更新)-u
= upgrade(インストール済みパッケージをすべて更新)
システム全体を最新化しつつlinux-firmware
もアップデートと言う形になります。-S
は、つまりはlinux-firmware
をインストールするという事だけが対象になり、何かしらが必要であればアップデートされるかもしれませんし、既にインストールされている場合には「再インストールしますか?」と言う問い合わせがあるかと思ます。
linux-firmware
は、linux
カーネルや、linux-headers
などとの整合性をとるためにも一緒に更新するのが理想であり、そのためにもSyu
でインストールするのが望ましいと思います。
解決に至るまで
sudo pacman -Rdd linux-firmware
→sudo pacman -Syu linux-firmware
の部分から少しだけ振り返ってみたいと思います。
-Rdd
を使用する場合というのは、ファイル衝突が非常に頑固で--overwrite
オプションでも解決しないような場合に用いられる、強制的なパッケージの再構築・再インストール方法です。
これらは本来使用するべきではなく、他の解決方法があるのであればそれを利用するべきですが、-Rdd
に至った経緯を前述した通り上流Archからの問題が派生したということ、管理方法が変わったということ、それらをひっくるめてファイルを個々に対応するよりはごっそりと削除して、新たに作り直すという方法でした。
上流Archにはそれらを変える必要性があり良くなるのであればそれは良しとも思いますが、それら問題をアップデートで解決できる方法を用意してほしかったとも思います。
結果を簡潔に書けばほんの少しのことですが、その流れを示しておきます
問題点
ファームウェア強制削除(-Rdd
)により、NetworkManagerが動作しなくなった
- 症状の確認。コマンドによるインターフェースの確認
ip a
これらにより、wlan0
やwlp3s0
などのWifiインターフェースが表示されないことから、
- NetworkManagerの状態確認
systemctl status NetworkManager
今回はエラーはなかったが、接続ができない、あるいはwifi
インターフェースが見つからない状態だった
原因の特定 Wifiファームウェアの欠如
journalctl -b | grep firmware
上記コマンド以外にも、使えるのであれば、以下でも可能
dmesg | grep iwlwifi
これらを行うと、次のようなログが表示される。
iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-8265-36.ucode failed with error -2
これらのように、iwlwifi-8265-36.ucode
の読み込みの失敗があった場合、ファームウェアが存在しない、あるいは壊れていると判断できる
必要なファイルを確認・入手
- 使用している無線チップのファームウェア名を確認(ログにでているもの)
iwlwifi-8265-36.ucode
iwlwifi-8265-34.ucode
これらは使用しているPCがどのチップを使用しているかで変わりますが、だいたいは以下にあると思います。以下のリンク先にない場合は、AIなどに聞いてどこから入手できるかを探して下さい。
上記リンクであれば、リスト一覧の該当ファイルの一番右にあるplain
を右クリックで保存したらok。ファイル名は自動で正しい名称がついたと思います。念の為、これらファイル名も確認の事。
ダウンロードできたら、それらファイルをUSBメモリなどを使用して問題がでているPCへ転送する。
ファームウェアの配置と再読み込み
今回の場合、firmwareに該当のファイルがないということからNetworkManagerを使用するサービスなどは起動しているものの((システムのアップデートでそれらは構築されます))、ファームウェアの読み込みエラーであったため、それらを元の場所にコピーする。
- 対象ディレクトリ:
/usr/lib/firmware/
もしUSBメモリから該当ファイルをダウンロード
ディレクトリなどに移した場合も含め、ファイルマネージャーのアドレス欄をクリックするとそこまでのパスが出てくると思います。それをコピーして(ファイルマネージャーではCtrl+C可能)、ターミナルにまず貼り付けるわけですが、
sudo cp //ここにまずファイル元のパスをペースト
ターミナル上でペーストする場合は、WindowsなどのようにCtrl + V
ではなく、Ctrl + shift + V
でペーストします。パスを覚えていれば別にペーストする必要もなくそのままダイレクトに入力してももちろんOKです。
そして、
sudo cp /YOUR/COPY/FROM/ /usr/lib/firmware/
とすればコピーできると思います。/YOUR/COPY/FROM/
はファームウェアファイルの置いてある場所(ダウンロードとか移した任意のディレクトリ)で、半角スペースの後、ターゲットに当たるディレクトリ、今回は/usr/lib/firmware/
を指定します。
sudo
が必要なのは、firmware
ディレクトリはシステムディレクトリなので、普通にコピー&ペーストができないからです。つまり管理者権限(管理者がやりますよと言うテイ)でペーストすると言うことです。
これらの確認はファイルマネージャーのアドレス欄に/usr/lib/firmware/
を入れれば確認はできますから、ペーストしたファイルがあるかどうかは視認できると思います。
- これらを次は再読み込みあるいは再起動する。
sudo modprobe -r iwlwifi
sudo modprobe iwlwifi
あるいは、システムを再起動しても良いと思います。
再起動する前にコマンドを試すのは、再起動する前ならOS自体は作動しているため何かしらの手を打つことができますが、再起動してしまうとそれらが問題で起動しなくなったり、別の問題がでてしまう場合があるためではあります。
しかし、今回の場合は-Rdd
でfirmwareを削除して再構築した後、本来必要であったwifiのチップを動作させるファームウェアもなぜか無くなってしまったためであるので、正しいファイルを追加しただけというのもあり、再起動で良いのではないかと。
再起動後の確認など
簡単なのは、Firefoxなどを起動して何かしらのページが表示されるかを見ることです。しかし、そこでも表示がなかった場合は、
- サービスの再起動
sudo systemctl restart NetworkManager
- wifiが検出されるか確認
nmcli dev wifi
経緯のまとめと正しいと思われる修正方法
- Arch Linuxで、2025年6月に
linux-firmware
パッケージの大幅変更があり、ファイル構造やリンクが変更されて、既存のファームウェアと衝突するケースが発生 pacman
で更新できなかった場合の対処
sudo pacman -Rdd linux-firmware
sudo pacman -Syu linux-firmware
linux-firmware
を強制的に削除- システムの更新をしつつ
linux-firmware
を再インストール
もしこのページで書かれていないようなエラーが出た場合は、Arch Wikiあるいは、各ディストリビューションのコミュニティーフォーラムで調べるのが良いです。
ほとんどが英語であるため、それらがわからない場合は、journalctl
を試して「次のようなエラーが出ているけどもどう対処すればよいか?」というようなことをAIに聞くのが良いかと思います。
AIは英語も翻訳して解説してくれるため、書かれている内容が複雑であった場合でも、よりナチュラルに日本語で解説してくれると思います。
今回使用したコマンドとその概要・例
目的 | 使用例 |
---|---|
ネットワーク確認 | ip a |
ログ確認 | dmesg \| grep firmware かjournalctl -b \| grep firmware |
ファームウェア所有確認 | pacman -Qo /usr/lib/firmware/iwlwifi-8265-36.ucode |
モジュール再読み込み | modprobe -r iwlwifi && modprobe iwlwifi |
接続確認・設定 | nmcli ,nmtui |
ファームウェア再構築 | pacman -Rdd linux-firmware && pacman -S linux-firmware |
どこに問題が起こっているかをまず確認する。そのためjournalctl
の使い方を覚えておくと対処しやすくなります。
上記にある
コマンドA && コマンドB
と連結してあるものは、コマンドAが成功した場合にコマンドBが実行されるという感じになります。
1行ずつ実行するのはより確実な方法と言えますが、実質一緒です。もしトラブルシューティングをしようとしている場合は1行ずつする方がベスト
総まとめ
半ば、ファームウェアの更新方法みたいな記事になりましたが、本意としては上流Archでlinux-firmwareの変更が行われ、正しくアップデートができなくなった事をどのように解消するかです。
途中の見出しで「結果を簡潔に書けばほんの少しのことですが」と書いたように、それらの答えは、
sudo pacman -Rdd linux-firmware
sudo pacman -Syu linux-firmware
と言うだけの事です。しかし、システムの更新が行われると再起動を促すメッセージが通知される事で、ここで再起動をしてしまうと面倒くさいことになりますよと言うのがこの記事の流れからも察してもらえるかと思います。
追記などをしたので記事の内容がわかりにくくなったかも知れませんが、これらに留意して問題の対処にあたってください。