openSUSE Advent Calendar 2021 の 4日目です。書き手がまだまだ足りませんので、ぜひ気軽に投稿をお願いします。

今日は新しいPCの話です。これまでは、2012年に組んだ Core i7-3770S のデスクトップ PC を Windows 10 で、Dynabook VZ72 (i7-7500U) で openSUSE Leap を使ってきました。このデスクトップPCのほうが、まもなく10年ということもあり、時々フリーズしたり、性能不足なところもあり、半導体が高騰している微妙なタイミングですが、完全に壊れる前に買い換えることにしました。

構成

新しい PC の構成は次のとおりです。

  • CPU: Ryzen 7 5700G
  • M/B: Gigabyte X570S
    • ネットワークカードは RTL8125 2.5GbE
  • メモリー: SanMax Technologies PC4-25600 16GB CL22 Skhynix × 2
  • SSD: CFD CSSD-M2B5GPG3VNF (512GB, PCIe Gen 4×4)
  • ケース: Fractal Design Define 7 Compact
  • 電源: Antec NeoECO GOLD 550W(旧PCから流用)

マザーボードが無駄にX570なのは、実家の DeskMini A300 の PC の調子が悪く、故障箇所の切り分けを行うために旧CPUに対応したX570にしました。ちょっと無駄です。さらに、GPU 内臓の Ryzen 7 5000G は PCIe が Gen 3 になってしまうので、X570 の意味がありません…。残ったメリットは、増設した場合のメモリークロックくらいでしょうか。

今回こそコンパクトな PC にしたいと思っていたのですが、この状況でマザーボードの選択肢が少なく、結局 ATX ケースになってしまいました。Fractal Design の 5インチベイのないコンパクトラインのケースなのですが、今まで使っていた 15年以上前の ATX ケースよりずいぶん大きいです。最近、デスクトップ PC をわざわざ買う人は、ハイエンドのグラッフィックカードを付けるからか仕方がないですね。HDD は NAS に移してしまったので、3.5インチや2.5インチベイも使っておらず、中身はすっからかんです。そのうち簡易水冷でも導入して有効活用することにしましょう。

openSUSE Leap を入れる

これまで、デスクトップでは Windows を使っていましたが、最近、Steam で配信されているゲーム(AOCとか)は Linux でも動くので、ホスト OS を openSUSE にしてしまうことにしました。加えて、openSUSE 界隈で流行っているかもしれない、PCI pass-through を使って、物理 GPU を Windows ゲストに直接接続すれば快適な Windows ゲスト環境が作れるはず…と考えていました。結局、Windows ゲストはちょっと試しただけで使っていないのですが、この話はまた今度。

さて、openSUSE Leap のカーネルは、新しいハードウェアに対応できるようにパッチがたくさん入っていますが、ちょっと古いです。そのため、最新のハードウェアでは一部の機能が使えないことがあります。今回、Leap は普通にインストールできましたが、画面の解像度が 4K にならないし、もっさりしていて、少なくともグラフィックドライバまわりが動いてない感じでした。

そんなときは、最新のカーネルを OBS から持ってきます。Leap 向けの最新カーネルは以下の OBS プロジェクトでビルドされています。このリポジトリを登録して、kernel-default や kernel-frimware-* をインストールすれば OK です。
https://build.opensuse.org/project/show/Kernel:stable:Backport
このリポジトリは openSUSE Leap としてメンテされているものではありませんのでご注意ください。

新しいPCは?

8コア、16スレッドということで、やっぱりパッケージのビルド作業が快適になりました。CPU内蔵のGPUですが、Full HDでゲームをする分には十分で、グラフィックカードを増設するのはだいぶ先になりそうです。

この記事は openSUSE Advent Calendar の3日目です。

今回は ntop を紹介します。

パッケージ名 htop
バージョン htop-3.1.1-1.1.x86_64
動作 ○
詳細
top のおしゃれバージョンです。CPU使用率を色つきのグラフで表示したり、プロセスの状況を色つきで見やすく表示したりします。

ファンクションキーを使って、整列する順番を変更することも出来ます。

そのほかにも、直接 top の画面からプロセスを終了したり(割り込み発生させたり)、Tree表示をさせることも出来ます。

pstree、kill コマンドの代替にもなりますので、便利に使えそうです。

この記事は openSUSE Advent Calendar の2日目です。

今回は highlight を紹介します。

パッケージ名 highlight
バージョン highlight-4.1-1.3.x86_64
動作 ○
詳細
テキストを読み込んで、色を付けて表示するツールです。出力形式は平文のほかに HTML や RTF、ODT、SVG などが選べます。オプションを付けないと平文が生成されます。

HTML出力をすると、色を付けたHTMLテキストが生成されます。ODT への変換もメニューにあるのですが、結果ファイルは、LibreOffice 7.1 では開けませんでした。そのかわり、RTF 形式では、LibreOffice 7.1で開くことが出来ました。


テキストを簡単に見やすくして表示させる場合には便利に使えると思います。

この記事は openSUSE Advent Calendar の1日目です。

今回は、 headmore を紹介します。

パッケージ名 headmore
バージョン headmore-1.2-1.16.x86_64
動作 △
テキストベースのVNC クライアントです。しかし、一応画面は表示されるのですが(ここではWindowsに繋いでいます)、GUIな画面をテキストで表示しているため、大まかな雰囲気が掴めるという感じでしかありません。ものすごくズームすれば、大まかな形は分かりますが。


取りあえずコンソールから、GUIな画面がおおよそどうなっているかを簡単に確認するときには便利に使えるかもしれません。

この記事は小江戸らぐ 5月のオフな集まりの発表ネタです。

2回目の夏を迎えるに当たり、自宅ファイルサーバーの熱とファンの音が気になり、モニタリングしてみることにしてみました。今回は他の用途でも興味があった Grafana を使ってみました。Grafana は CPU 使用率やメモリ使用量といったハードウェアから、データベースやアプリケーションの性能といった様々なメトリクスを可視化・分析するための Web アプリケーションです。インタラクティブに操作できたり、かっこいい見た目だったりで、最近よく見かけます。

小江戸らぐ向け注記: よくカロスさんの発表に出てきます。K8s のクラスタやラズパイの環境センサーの表示で使っていますね。

Grafana Cloud

今回はちょっと横着して、Grafana の SaaS である Grafana Cloud を使いました。Grafana といえば、多くの場合、メトリクス収集と時系列データベース機能を持つ Prometheus と組み合わせ、これら2つをどこかにインストールして使います。Grafana Cloud では Grafana 本体と Prometheus のデータベース部分は Grafana Cloud で動いているものを使うことができます。データの収集は Prometheus からデータベース部分などを簡略化した Grafana Agent で収集できます。

気になるお値段ですが、Free プランがあります。メトリクスの保持期間は2週間というのがポイントになりますが、ちょっと試して見るには十分です。無料プランの主なスペックはこんな感じです:

  • 10,000 系列(種類)までの Prometheus または Graphite のメトリクス
  • 50 GB のログ
  • 14日間のメトリクスとログの保持期間
  • 3人までのチームメンバー

アカウントを作るためにクレジットカードなどの情報は特に必要ありません。 Grafana Cloud のページでアカウント作成に進み、GitHub などの SSO でログインすればすぐ準備完了です。

メトリクス収集

次に、メトリクスの収集を始めましょう。雷のアイコン(⚡) > Walk through をクリックすると、スクリーンショットのように Grafana Cloud がサポートしているプラットフォームのメトリクス収集を簡単にセットアップできるガイドが用意されています。今回は Linux Server を使用します。Prometheus では Node Exporter と呼ばれているものです。

Linux Server をクリックすると、セットアップするためのスクリプトが表示されます。「Choose your OS」には openSUSE が見当たりませんが、「RedHat – based」で OK です。Go言語で実装されたアプリなので、システムライブラリにほとんど依存していません。

あとは、その下に表示されたスクリプトを実行すれば OK です。Grafana Agent の RPM のインストールと設定ファイルの作成、起動まで一気に行われます。セットアップが終わると、最初から用意されているダッシュボードに収集した情報が表示されます。(datasource で grafanacloud-xxxx-prom を選択)

ダッシュボードの作成

もちろん、ダッシュボードを自分で組み立てることもできます。ここではパネルを配置し、Visualization を Time Series にして次を追加してみました。収集されているメトリクスの一覧がドロップダウンメニューに表示されるので、ここからそれっぽいものを選んで追加することができます。

  • node_cpu_scaling_frequency_hertz
  • instance:node_cpu_utilisation:rate1m
  • node_hwmon_temp_celsius

各系列のスタイルや、単位、Y軸の設定は、ちょっとわかりにくいですが Overrides タブで系列を選んで個別に設定できます。

このファイルサーバーは普段ほとんどアイドル状態なのですが、CPU クロックが思った以上に落ちていないことが分かりました。ファンコントロールのターゲット温度が45℃設定なのですが、55℃くらいをキープしているようです。

おわりに

Grafana Cloud を使って自宅ファイルサーバーの監視を簡単にしてみました。そして Grafana Agent が CPU 時間を他と比較して使ってしまっていますので、場合によっては収集する項目を減らすなどを考えたほうが良いかもしれません。

前回は S でしたが、今回は A です。

パッケージ名 ansifilter
バージョン ansifilter-2.18-1.5.x86_64
動作 △
詳細
テキスト中の ANSI エスケープシーケンスを取り去ったり、HTMLなどの形式に変換できます。たとえば、script コマンドで、ANSI エスケープシーケンス付きのメッセージを記録したのち、それをテキストとして利用するときなどには便利に使えます。

ただし、漢字についてはうまくいかない場合がかなりあります。また、HTML 変換については、エスケープシーケンスを落として変換、すなわち、色とかの情報がまるまる落ちて変換されます。ここはちょっと惜しいところです。
漢字が含まれていない、typescript の結果を整理する場合などには便利に使えそうです。

パッケージ名 arping2
バージョン arping2-2.21-1.5.x86_64
動作 ◎
詳細
ICMP のほかに、ARP を使って相手との疎通を確認するツールです。ICMP echo に反応しない機器との疎通を確認できます。但し、root でないと動きません。

たとえば、Windows Server の既定状態のような機器との疎通を確認するには便利に使えそうです。

自宅サーバーをセットアップした際に、すべてを HDD にインストールしていたのですが、今回、/home と /boot、過去のスナップショットデータ以外を SSD に引っ越しました。このとき、Btrfs のサブボリュームとしての引っ越しをしてみました。

最初に openSUSE の Btrfs のサブボリューム構成についておさらいです。Snapper が有効化された状態のサブボリューム構成は次のようになっていました。Btrfs の / には @ というサブボリュームが1つだけあります。@ の中にマウントしたシステムの / にあるディレクトリに対応したサブボリュームがあります。ちなみに /@ が / としてマウントするのではなく、それぞれのサブボリュームごとに /etc/fstab でマウントしています(例: /@/home が /home)。Snapper を使用している場合は 1 番目のスナップショットが現在の / です。

以下のリストに無い、/@/.snapshots/1/ や /@/boot/grub2/ はサブボリュームではなく、その上にあるサブボリューム内のディレクトリです。

さて、今回は /@/home と /@/boot/* を HDD に残し、その他を SSD に移動することにしました。パーティション全体であれば、dd で、ファイルレベルであれば rsync と色々な方法がありますが、今回は Btrfs のサブボリュームを他の Btrfs ファイルシステムに転送する btrfs send を使いました。

作ってみたスクリプトを先に貼り付けて、ポイントを個別に説明します。使い方はコピー元を /dev/sda1、コピー先を /dev/sdb1 とし、次のように使います。3番目の引数はスキップするサブボリュームのパターンです。/dev/sdb1 は mkfs.btrfs でフォーマットしてある前提です。
$ btrfs-subvols-copy.sh /dev/sda1 /dev/sdb1 "@/home|@/.snapshots/[2-9][0-9]*|@/boot"

まずは、送信元、先のボリュームのマウントです。

送信元と先をマウントするだけなのですが、注意点が1つあります。Btrfs では任意のサブボリュームを選んでマウントすることができますが、何も指定しないと / ではなく、デフォルトのサブボリューム(btrfs subvolume set-default で設定可能)がマウントされてしまいます。特に Snapper を使用していると、1番目の Snapper スナップショットがデフォルトになっていますので、明示的に subvol でマウントしたいサブボリュームの指定が必要です。

次に、送信元のサブボリュームのリストアップです。

--sort=path を指定して、親ディレクトリを含むサブボリュームを先にリストし、サブボリュームのツリー構造の親サブボリュームとディレクトリを先にコピーするようにします(存在しないとエラーになってしまいます)。

次に送信するところです。

btrfs send コマンドを使ってコピーするのですが、送信できるのは読み取り専用のサブボリュームなので、一度スナップショットを読み取り専用で作成し、このスナップショットを送ります。コピーは btrfs sendbtrfs receive のペアで行えます。サブボリュームの名前(パス)は送信元と同じものが作成されます。そのため、スナップショットの名前になってしまうので、あとで mv が必要でちょっと不便です(スナップショットを別のディレクトリに作成する方法もあり)。

注意が必要なことが1つあります。この送り方では Snapper のスナップショットを送れません。Snapper のスナップショットはスナップショット間で共通するデータを共有していますが、この方法ではこの共有が解けて複製されてしまいます。btrfs send のオプションにベースとなったスナップショットを指定し、差分だけを送る機能があるようなので、もう少し工夫すると実現できるかもしれません。

最後に、サブボリュームのプロパティのコピーです。

送信前に読み取り専用のスナップショットを作成していますので、読み取り専用を含めた、送信後サブボリュームのプロパティをもと同じに戻します。