Ryzen APU (Picasso) PCにDebian 10を入れてデュアルブートにする＋各種環境整備（Dropbox, Qt）

常用のデスクトップPC（Ryzen 5 3400G / Windows10）にSSDを増設して、Debian 10を入れてデュアルブートにしたので備忘録

# 事前準備〜インストール

## SSDを増設する

マザーボードの空いているM.2スロットに適当なSSDを入れる。今回はPlextorの[MP9eGN](https://www.goplextor.com/jp/Product/Detail/M9PeGN#/Features)を選択。
BIOSから増設したSSDが認識されていることを確認する。

## 起動ディスクを用意する

Windows上で、Linuxインストール用のUSBメモリを用意する。
[Debian公式](https://www.debian.org/)からnetinst用のisoイメージをダウンロードしてきて、USBメモリに焼く。
マザーボードがUEFIのときはGPTでフォーマットしておく。

## インストール

USBメモリを挿したままBIOSメニューに入り、起動順序をUSBメモリ優先にする。 USBメモリのドライブ名にUEFIとかGPTとか表示されていることを確認しておく。
Debianのグラフィカルインストーラが立ち上がるので普通にインストールする。増設したSSDをまるごとDebian用にし、Windows環境には影響がないようにする。

# Picasso向けの設定

Debian 10 (buster)のカーネルは4.19で、PicassoのCPU内蔵GPUをサポートしているのはカーネル4.20からなので、そのままでは内蔵GPUを認識できず、Xが起動しない。
また、DebianでAMDのGPUを利用するにはnon-freeのファームウェアが必要で、これもデフォルト設定ではインストールされない。

そのため、backportsから最新のカーネルを組み込み、AMDのファームウェアもインストールできるようにしておく。

最初はXが起動しないのでコンソールログインして、`/etc/apt/sources.list`を編集する（好みに応じてvimでもemacsでも適当なエディタをインストールしておく）

以下の記述を追加

```:sources.list
deb http://deb.debian.org/debian/ buster main contrib non-free
deb-src http://deb.debian.org/debian/ buster main contrib non-free

deb http://deb.debian.org/debian/ buster-backports main
```

カーネルをバックポートされた5.9に更新する。

```bash
$ sudo apt update
$ sudo apt install linux-image-5.9.0-0.bpo.5-rt-amd64
```

再起動後、AMD GPU向けのファームウェアを入れる

```bash
$ sudo apt install firmware-linux firmware-linux-nonfree libdrm-amdgpu1 xserver-xorg-video-amdgpu 
```

これでXが起動するはず。
今回は好みのKDE Plasmaをインストールした。

# デュアルブートの設定

Windowsが先にインストールされているシステムに後からDebianを入れた場合、自動的にgrubにWindows boot managerが追記されるため、BIOS的にはDebianがインストールされたSSDを優先起動に設定しておけば、DebianのgrubメニューでDebian/Windowsを選択できるようになる。
実用的には、Windowsはアップデートなどで自動再起動を行うことが多いのでgrubメニューのデフォルト設定を固定でなく「前回起動したOS」に設定し、さらに自動選択までの時間を10秒くらいに伸ばしておくほうが何かと便利だと思う。
`/etc/default/grub`を編集して以下の3行を追記する。

```:grub
GRUB_DEFAULT=saved
GRUB_TIMEOUT=10
GRUB_SAVEDEFAULT=true
```

`GRUB_SAVEDEFAULT`を`true`、`GRUB_DEFAULT`を`saved`にしておくと、前回起動したOSを記憶してデフォルトにする。これで、Windows Updateなどで自動再起動がかかったときにDebianが起動してしまいアップデートが中途半端になってしまう事態を回避できる。

# ハマった各種設定

常用している各種アプリを入れる過程でハマったポイントをメモしておく。ハマったら随時追加予定

## Qt

GUIアプリケーションの開発環境として[Qt](https://www.qt.io/ja-jp/)を利用しているが、最新のインストーラがインストールするQt公式IDEのQt Creator 4.14がそのままではDebian 10ではうまく起動しない。
Qt公式の[bug report](https://bugreports.qt.io/browse/QTBUG-88688)によると、DebianはUbuntuとインストールされるライブラリのバージョンが異なるらしく、さらに現状ではDebianはサポート対象に含まれていないので対応予定はないらしい。

> libxcb-util0 (0.3.8) on Debian
> https://packages.debian.org/stretch/amd64/libxcb-util0/filelist
> /usr/lib/x86_64-linux-gnu/libxcb-util.so.0
> /usr/lib/x86_64-linux-gnu/libxcb-util.so.0.0.0
> 
> libxcb-util1 (0.4.0) on Ubuntu
> https://packages.ubuntu.com/xenial/amd64/libxcb-util1/filelist
> /usr/lib/x86_64-linux-gnu/libxcb-util.so.1
> /usr/lib/x86_64-linux-gnu/libxcb-util.so.1.0.0


上記bug report上で議論されている通り、手っ取り早く`libxcb-util.so.1`というシンボリックリンクを作って`libxcb-util.so.0.0.0`からリンクを張れば回避できる。

## Dropbox

Dropboxの[Linux版デスクトップアプリ](https://www.dropbox.com/install-linux)を使ってファイルを同期しようとしたが、ある時点からさっぱり同期が進まなくなってしまった。
色々調べたところ、Linuxのデフォルト設定では10000以上のディレクトリを監視対象にすることができないらしい。

- [UbuntuでDropboxの同期が進まない時は、ディレクトリ数を確認する](https://www.nemotos.net/?p=3586)
- [Dropbox の同期エラーのトラブルシューティング](https://help.dropbox.com/ja-jp/installs-integrations/sync-uploads/files-not-syncing)

Dropboxディレクトリ以下のサブディレクトリが10000以上あるとその制限に引っかかる。
サブディレクトリ数は以下のようにカウント可能。

```bash
$ find Dropbox -type d | wc -l
```

これで10000以上のディレクトリがある場合は、上記制限により同期が進まなくなっている。
回避策として、とりあえずシステム設定を100000程度に引き上げることで回避可能。

```bash
echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; sudo sysctl -p
```