出力を入力へ

プログラミングに関する自分が考えた事を中心にまとめます

デスクトップ環境をUbuntu22.04にアップデートした

日頃利用するデスクトップ開発環境としてUbuntuを利用しているが、これをUbuntu 20.04→Ubuntu22.04にアップデートした。

旧環境の課題

原因不明の動作不具合がいくつかあり、これを解消したかった。

音声入出力の不安定

映像出力は問題ないが、音声入出力が不安定という問題を抱えていた。

音声入力はボリューム設定が度々リセットされて自分の設定より小さくなった。多くの場合はサスペンド&解除するとリセットされ、たまに画面ロックしただけでリセットされることもあった。このせいでwebミーティングのマイク音声が小さくて自分の声が届いていないことが多々あり、ミーティング開始時に毎回音声入力ボリュームをチェックする必要があり面倒だった。

また、音声出力も不安定だった。音楽をかけていると急にボリュームが小さくなったりノイズが載ったりしていた。断線等を疑ったが結局GPUがおかしいのでは?という結論で改善できていなかった。音声出力の問題はUbuntu 18.04のときから発生していたのでOS設定が原因ではなくハードウェア的な問題だろうと(症状からしてそう)、GPU交換待ちだった。ただし、GPUの高騰のせいでなかなか交換を試せないでいた。

さらに、firefoxなど一部アプリが指定のスピーカーを利用してくれないという問題があった。システム設定を無視して別のスピーカーを利用してしまう。これを回避する方法がわからなかったのでfirefoxではweb会議や動画再生ができないという制約があった。

起動時のNFSマウントエラー

デスクトップ起動時にNASをNFSマウントする設定だったが、これが上手くいかない問題があった。

起動処理で/etc/fstabの設定を反映してくれず、毎回手動で sudo mount -aする必要があり面倒だった。また、libvirtまわりでもNFSマウントしている設定があり、これが原因でデスクトップ起動時にVMも起動してくれないとうい問題を抱えていた。 こちらはOSをUbuntu20.04にアップデートしてから発生したのでOS設定まわり(特にsystemdのブート順序まわり)を疑っていたが結局解決できなかった。OSクリーンインストールすれば解決するだろう、くらいの感覚だった。

フルディスク暗号化

既存のシステムディスクは暗号化を適用していなかった。

デスクトップ環境であり自宅外に持ち出す機会はないものの、暗号化できていないという事実には気になっていた。主要なデータはクラウド管理・バックアップしているが、個人情報の塊なので。

ハードウェアアップデート

以下のハードウェアについて更新した。

GPU更新

音声入出力のトラブルのうち、少なくとも出力についてはGPUのトラブルだろうと推測できていたのでGPUを更新した。

今まではGTX1660Tiを利用していて、パフォーマンス的には特に困ってはいなかった(ゲームをするわけでも機械学習するわけでもないので)。ただし、blender等さわったりする機会はあるし、RTXレイトレーシングAPIを利用できる環境は欲しかった。

RTX4000シリーズの発売直前ではあるし、RTX3000シリーズのハイエンド帯は価格が下落傾向ではあるが、エントリー帯であれば価格改訂や値下げが進むことはないだろうと判断してRTX3050を購入した。 RTX3050であれば現行GPUとほぼ同程度のパフォーマンスを出すことができるので自分の用途で困ることはない。 将来的にはGPUのミドルエンド・ハイエンドへのアップデートも考慮しつつ、このGPUは別サーバ等でも利用することを想定する。

SSD更新

OS更新時にはシステムストレージごと交換して新規インストールすることにしている。このため現在システム用ストレージに利用しているSSD(NVMe M.2)も更新する。

従来はSamsung SSD 970 EVO 250GBを利用しており、パフォーマンス的には満足していたものの容量不足を感じていた。

新規ストレージとしてはWD Blue SN570 1TB を選択した。 細かなパフォーマンス比較はしていないが、WD BlueはHDDとしてはよく利用しているしNVMe M.2 SSDとしても利用してみたかった。また、SN570が比較的新しくリリースされた製品なので試してみようと考えた。価格も特に高価とうわけではなかった。

OSインストール

OSインストールまわりのトラブルについて。

インストールメディアの準備

USBメモリを利用してOSをインストールするため、インストールメディアを作成して利用した。

今回はddコマンドを利用して作成したのだが、手順ミスなのかたまたまデータ書き込みエラーが発生したのか、作成したインストールメディアでインストーラを起動できなかった。 結局そのときはWindows PCにRufusを使ってインストールメディアを作成して対処した。

ddでもよいが、Ubuntuヘルプ または Ubuntuチュートリアルの通り Startup Disk Creator を使って作成してもよかった。

また、できればPXEブート環境を構築してUSBメモリなしにOSセットアップを可能にしたい。ただし、これを実現するには開発用ネットワークを分離する必要がありハードルが高い。

フルディスク暗号化

OSの新規インストールと合わせてフルディスク暗号化オプションを有効にする。

手順は Ubuntu22.04フルディスク暗号化を有効にする などが参考になるが、特にLVMレイアウトを変更しないので考慮する点はない。

問題はリカバリーキーの扱いで、生成されたリカバリーキーはデフォルトでは永続化されない。このため、インストール直後の再起動前もしくはインストールセットアップ時にリカバリーキーを永続化する設定が必要だった。この対応をしないとリカバリーキーは失われてしまう。 リカバリーキーを保存することなく削除してしまったら、リカバリーキーの失効と再発行を行う必要がある。また、LUKSは今までまともに使ったことがないので理解を深める必要がある。

ソフトウェアインストール

OSインストール後のセットアップまりのトラブルについて。

Extension Manager および Sound Input & Output Device Chooser

音声まわりのトラブルに対処するために、入出力デバイスを細かく制御できる必要があった。 これを実現するために Sound Input & Output Device Chooser を、GNOME Shell Extension Manager経由でインストールする。詳細については以下の記事を参照。

gihyo.jp

これにより、音声入出力デバイスの制御が可能となった。ただし、初手で Sound Input & Output Device Chooser をセットアップしたのでUbuntu22.04環境で本当に必要だったのかわからない。OS更新やGPU更新で問題は解消できていた可能性もあったので、Sound Input & Output Device Chooser をインストールする前に各種音声まわりのトラブルが発生しないか確認しておくべきだった。 Sound Input & Output Device Chooser 自体は便利に利用できているので、これを継続利用すること自体は問題なし。あとはExtension Managerまわりもまだ理解できていないので理解を深めておきたい。

NFSマウントセットアップ

OSクリーンインストールにより、起動時にNFSマウント失敗する問題も解消される想定だったが、そもそもNFSマウントに失敗するようになった。

原因等不明だが、対策としてはマウントオプションとして mountvers=4 を付与することで解消した。これにより、mountコマンド経由でも、/etc/fstab 経由でもマウント/自動マウントするようになった。

NFSバージョン詳細やマウントオプション詳細はあまり理解できていないので、詳細確認が必要。

deb版 firefox

snap版firefoxは不具合もあるのであまり使わない方がよいと事前から聞いてはいたが、実際に上手く動作しない問題があった。1passwordのアドオン拡張で Ctrl+. のショートカットが動作せず、パスワード補完にマウス操作が必要になるという問題があった。 これはさすがに許容できないと、以下の記事を参考にdeb版のfirefoxを導入した。

yuzu441.hateblo.jp

これにより無事1passwordアドオンも動作するようになった。ただし、カーソルが入力欄にあたっているとまだ動作しないという問題は残っており、完全解決には至っていない。

また、firefox以外も基本的にはsnap版を利用しないという方針をとっている。slackなどのアプリも上手く動作しないという事象に遭遇しており(Ubuntu20.04時、詳細は忘れた)、そういったトラブルの可能性を抱えてまでsnap版を利用するメリットを感じていない。

vim error

vi/view/lessなどのコマンドを利用するとき、 Failed to source defaults.vim のエラーが発生するというトラブルに遭遇した。 この不具合は既知のもので、いくつかのフォーラムにて報告されている。

bugs.launchpad.net

bugzilla.redhat.com

対策としては、 touch ~/.exrc にて .exrcファイルを作成した。これによりエラーは発生せずに動作するようになった。