【Ubuntu Dell XPS13-9380】Firmware(UEFI/BIOS)の更新が出来なくて困ったけどfwupdを使って更新できた話

# 0. はじめに
こんにちは。都内でエンジニアをしている、@gkzvoiceです。
先日、私用Linux PCのFirmwareの更新でコケてしまったので、そのトラブルシュートにチャレンジしておりました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">あれ？firmwareの更新に失敗したかも</p>&mdash; GakujiTamaki@July Tech Festa運営スタッフ/ #bosyu芸人 (@gkzvoice) <a href="https://twitter.com/gkzvoice/status/1303321473545764866?ref_src=twsrc%5Etfw">September 8, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

結論からお伝えしますと、後述する、fwupdを使って無事更新することができました。
そこで本記事では、fwupdを使ってFirmware(UEFI/BIOS)の更新ができるようになるまでの手順について解説していきます。

# 1. 目次
- 2. 環境/バージョン情報
- 3. 遭遇したエラーの説明
- 4. 更新手順
- 5. 参考資料

# 2.環境/バージョン情報
## ローカル開発環境

- Dell XPS13-9380
- Ubuntu 20.04.1 LTS (Focal Fossa)"
- BIOS 1.11.0
- fwupdmgr
  - client 1.3.11
  - daemon 1.3.11 

僕だけかも知れませんが、バージョン一つ確認するのも苦労したので確認に使ったコマンドを貼っておきます(とくにBIOS。。)。

```
## Dell XPS13-9380
$ sudo lshw -short | head -3
H/W path           Device           Class          Description
==============================================================
                                    system         XPS 13 9380 (08AF)
## Ubuntu
$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

## BIOS
$ sudo dmidecode -s bios-version
1.11.0

## fwupdmgr client/daemon
$ fwupdmgr --version
client version:	1.3.11
compile-time dependency versions
	gusb:	0.3.4
	efivar:	37
daemon version:	1.3.11
```

# 3. 遭遇したエラーの説明

なにがきっかけかは分かりませんが、下記のスクリーンショットの左側に表示されているようなエラーメッセージが画面に出るようになったんですよね大汗。

![Screenshot from 2020-09-08 22-31-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341653/e302e83b-92f0-8ad5-46b9-69957b051e10.png)

エラーメッセージ全文です↓。

```
Unable to update "Dell Inc. System Firmware" as download failed:
failed to download https://fwupd.org/downloads/-xxxxxxx-d35-XPS_9380_1.11.0.cab: Connection terminated unexpectedlly
```

# 4. 更新手順

## 4-1.下記のLinux Vendor Firmware Service（LVFS⁠）⁠から自分PCに合ったcabをダウンロード
  - 僕の場合は[「2.環境/バージョン情報」]()で先述したとおり、XPS13-9380のcab

[https://fwupd.org/lvfs/devices/com.dell.uefice945437.firmware](https://fwupd.org/lvfs/devices/com.dell.uefice945437.firmware)

- 下記のようにcurlやwgetを使ってダウンロードしても、GUIでcabをクリックしてもよい

```
$ curl https://fwupd.org/downloads/60344cbcc1f3c061ea202e1c7d7cc9c6333f0f070eba09fc8ef27114fe3ced35-XPS_9380_1.11.0.cab \
> --output $HOME/Downloads/xps_9380.cab
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 21.6M  100 21.6M    0     0  1454k      0  0:00:15  0:00:15 --:--:-- 2711k
```
![Screenshot from 2020-09-13 19-49-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341653/0486f611-b4ba-322c-a358-281a3f8db1a0.png)


- 無事 curlのoutputオプションで指定したダウンロード先にcabがあることを確認(GUIでダウンロードされた方はよしなに)

```
$ ls $HOME/xps_9380.cab 
$HOME/Downloads/xps_9380.cab
```

## 4-2. fwupdmgr installコマンドでcabをインストール

- 下記のように**`fwupdmgr install /path/to/$FILE`**を実行してから**`y`**を押す
- **`fwupdmgr install`**コマンドを実行するためには、ACアダプタをつなぐ必要があります。
- なお、この**`fwupdmgr install`**とはfwupdというデーモンが提供するインストールコマンドみたいです。

```
$ fwupdmgr install Downloads/xps_9380.cab 
Decompressing…           [***************************************]
Authenticating…          [***************************************]
Installing on System Firmware…                                   ]
Scheduling…              [***************************************]
Successfully installed firmware

An update requires a reboot to complete. Restart now? [y|N]: 
```

- 後は画面に従って`再起動`したり、淡々と進めるだけでした。

※**`fwupdmgr install`**コマンドについては、**`fwupd/firmware-dellリポジトリ`**で自分で立てたissueで教えていただきました。

- [Unable to update &quot;Dell Inc. System Firmware&quot; as download failed · Issue #35 · fwupd/firmware-dell](https://github.com/fwupd/firmware-dell/issues/35#issuecomment-689737050)

- **`fwupdmgr install`**コマンドの解説についてはこちらをご参照ください。

> Download the .cab files that match your hardware and then install them on the target hardware via Ansible or Puppet using **`fwupdmgr install foo.cab.`**

参考：[Offline Firmware &#8212; LVFS  documentation](https://lvfs.readthedocs.io/en/latest/offline.html)

- fwupdについてはこちらを。

> **`The Linux Foundationは3月26日（米国時間⁠）⁠，同ファウンデーション傘下の新しいプロジェクトとして「Linux Vendor Firmware Service（LVFS⁠）⁠」がスタート`**したことを発表した。
>
> Linux Vendor Firmware Service
LVFS Project Announcement - The Linux Foundation
LVFSはRed Hatの開発者が中心となって進めてきた活動で，**`各ハードウェアベンダが提供するファームウェアやBIOSを，再配布可能な形式（.cab）でサイト上で集約し，ユーザや開発者は「fwupd」というデーモンを介してLVFSに接続することで，ローカルマシンのファームウェアアップデートが可能`**になる。

参考：[2019年3月29日　ファームウェア提供のスタンダードに! Linux Foundationの新プロジェクト「Linux Vendor Firmware Service」がスタート：Linux Daily Topics｜gihyo.jp … 技術評論社](https://gihyo.jp/admin/clip/01/linux_dt/201903/29)


# 5. 参考資料
- [Unable to update &quot;Dell Inc. System Firmware&quot; as download failed · Issue #35 · fwupd/firmware-dell](https://github.com/fwupd/firmware-dell/issues/35)
- [Offline Firmware &#8212; LVFS  documentation](https://lvfs.readthedocs.io/en/latest/offline.html)
- [2019年3月29日　ファームウェア提供のスタンダードに! Linux Foundationの新プロジェクト「Linux Vendor Firmware Service」がスタート](https://gihyo.jp/admin/clip/01/linux_dt/201903/29)




# P.S. Twitterもやってるのでフォローしていただけると泣いて喜びます:)
[@gkzvoice](https://twitter.com/gkzvoice)