前提

  • 非業務、個人の趣味クラスタとして使おうとしました(業務の場合は話がだいぶ変わる)
  • できる限りAlways Freeリソースで使うことを狙いました(Paidアカウントにはしています)
  • なので、課金が発生するポイントはできるだけ親切に書こうと思ってます。
  • 挫折したけど、割とお安いと思います。
  • 挫折した理由と、その間に得られたTipsをメモしておきたくて記事化しました。

結論 & tl;dr;

挫折した理由は最終的にBlock Volumeの課金が避けられないことでした。
Block Volumeは最小50GBなので、単価 $0.0255 x 50 = $1.275/mo の課金がPV1個につき発生します。
ちなみに、File Storageを使えば使った分だけ課金($0.3/GB)になると思われますが、こちらにはAlways Free枠はありません。

例えば、Mastodonを動かそうとすると PostgreSQLのPVが一個、動かすならElasticSearchがPV 1個 で50GB*2個。Boot Volumeも50GBなのでこれだけでAlways Free枠は使い切ります。
あと、Block VolumeにはPerformance Unitという課金もあります(金額はちょっとですけど。)

じゃあ、全部をFile Storageで賄えばいいじゃないか ($0.3/GB) というのもアリですが、100GB使ったら$30とかになってしまうのでうーん。という感じです。

事情があって今回は断念していますが、金額として個人では無理な額かというと、そういう感じではないとは思いました。正直、50GBがミニマムではなくて1GBからにしてほしいなーとは思います。

前置き

OKEとは

マネージドなkubernetesです。k8sを構成するControl Planeを無料で面倒みてくれます。
では、Worker Nodeはどうなるかというと、Computeのインスタンスが立ちます。ComputeのインスタンスなのでAmpere(VM.Standard.A1.Flex)を選べば、Always Free枠の対象となります。

蛇足

ノードは普通のComputeなので管理は自分でやる必要があります。OSのアップデートとかを面倒見てくれるわけではありません。

蛇足2

じゃあ、ComputeでControl-Plane含めて自前でやれば… というのはなくはない。
と言いたいけれども、メリットがない。OKEを使えばControl-Planeは無料で持ってくれるし、OCIのサービスと自動で連携する部分が結構あるので…

構築

ついに構築時の話を書いていきます。
ここでポイントが一つ。kubernetesクラスタは独立したCompartmentに入れておいたほうが管理上楽になります(他のリソースとのやり取りがあるのであれば別かもですが)。Compartmentを先に作っておくことをおすすめします。

さて、OKEは、Developer Services属に含まれます。Web UIからクラスタを作成できます。
以下は手順をさらっと流しながらポイントだけ記述していきます。

create cluster / custom

  • 特にこだわりがなければQuick createで良いと思います。

Quick create cluster

ほぼデフォルト値でOK

  • Compartmentは独立したものを選んだ方がいい。作ってないならここでは作れないのでキャンセルして。
  • kubernetes versionは最新を選べばOK
  • Endpointは Public Endpoint でよさそう。[^1]
  • Kubernetes worker nodes は Private workers[^2] を選択
  • Shape は VM.Standard.A1.Flex にする(Always Free枠を使いたいので)
  • Number of nodes は… 悩みどころ。 2…か? [^3]

[^1]: 要するに、kubectlをインターネット上から使えるようにするか、もしくは踏み台を必要とするか。ということだと思う。後段でkube/configを生成する段があるが、oci-cli(これもインストールが必要)を使って認証してるのでPublicでいいんじゃないかなぁと思っている。心配ならBastion(踏み台サーバー)もAlways FreeなのでPrivateを選んでもいいと思う
[^2]: workerを外から触れるSubnetに置くかどうか。置く意味がないのでPrivateでいいと思います。
[^3]: この数だけComputeのインスタンスが立ち上がる。ということは、Block Volumeが50GBずつ消費されることになる。

知見

ここからは構築後に得た知見をランダムに書いていく

ingress(インターネットからのアクセス)

外向きに見せたいPodは、Serviceに type: LoadBalancer を指定して作成すると
自動的にOCI上にLoad Balancerが作成されて外向きのIPアドレスが振られる。
・・・ということは、適当なServiceを作ると課金される。ということに。

LoadBalancerは2種類(執筆時点ではdeprecatedなのも入れると3種類)

  • Dynamic Load Balancer(deprecated, デフォルト, 有料)
  • Flex Load Balancer(有料)
  • Network Load Balancer (無料, 以下nlb)

ケチケチ路線としては当然nlbを使うわけですが、これはLBというより普通にパケットが飛んでくるだけ。SSL終端とかはない。ので、ingress-nginx-controller(正攻法)や、普通にnginx pod を動かしてよしなに扱えばOK。

Serviceファイルの書き方

Load Balancerの種類やパラメタは、metadata -> annotationsに記述する。

抜粋
1
2
3
4
5
6
7
metadata:
annotations:
# see
# https://docs.oracle.com/ja-jp/iaas/Content/ContEng/Tasks/contengcreatingloadbalancer.htm#contengcreatingnetworkloadbalancers
#
oci.oraclecloud.com/load-balancer-type: "nlb"
oci-network-load-balancer.oraclecloud.com/security-list-management-mode: All

有料なのであんまりかかないが、Flex Load Balancerを使う場合は、10Mbpsに制限しないとAlways Free枠を外れるので注意。 annotationの書き方

ちなみに、annotaionsを書かないとdynamic load balancerが生成されてしまってもう、なんというか…となる。(Web UIに警告が出る)

なお、Serviceを削除すると対応するOCIのLoad Balancerは自動的に削除される。

Serviceファイルに関する蛇足

  • kubectl get service をして、EXTERNAL-IP が表示されていないのであれば、作成中かなにかしくじっている
  • kubectl describe すると、annotaionsにエラーがあった場合ログが出ている。
  • 執筆時点では、Network Load Balancerは1個までという制限になっていた。(全体で1個かどうかはわからない)
  • annotationsに間違った記述があると中途半端な状態になることがある。この場合、手動でWeb UIからLoadBalancerを削除して、serviceも削除するとやり直せる。

ノード数変更

Web UI の Node pools から変更する。 kubectl delete node して対応するComputeを削除しても大丈夫だとは思うけれども、何かの拍子に Node poolsで設定されたノード数になるように作成/削除されてしまう可能性がある。


大蛇足

ここからは読まなくていいです。

どうやってアクセスを受付ようとしていたか

  • 一個だけ、nlbを指定したServiceでnginxを動かす
  • nginx Podに1GBのストレージを割当する
  • nginx Podには、certbotとvimを入れておく
  • 設定変更等はvimを使ってコンテナ内でやってしまう
  • 他のサービスはserviceの type:ClusterIPを指定しておく
  • nginxでclusterIPに大してproxyする

why ?

  • ingress-nginxを使うのが王道だが、規模に大して大げさだったため
  • configとかはconfigMapを使えば入れれるのはわかるが、nginx -tに相当する動作が多分ないので設定ミスがダウンにつながってしまう。
  • 証明書はsecretとかを使って更新かけるのがよい気がするが、そのたびにPod再起動するの…めんどいなぁとなったため。

多分、設定変更や証明書変更のたびにnginx Podを追加で起動して、Healthyになったら古いnginx Podを終了させるようにすればほとんどの懸念は解決できる気がする。(Rolling Updateして maxSurge=1 を指定しとけばそうなるはず)。多分、ここらへんはkustomize を使うといいと思う

…けど、nginx -tで間違ってないかテスト出来たほうがいいよねぇという感じはする。

問題点

1GBのストレージ を割り当てるのは OCI File Storageを使えば $0.30/mo で済む。が。有料ではある。

次の手は?

k3sを使ってとりあえずkubernetesっぽい感じにしようかなぁと思ってます。

蛇足

k3sを使ってとりあえずkubernetesぽい感じにしました。色々苦労はあったのですがそれはまた別の記事で…

Mastodon上で教えていただきました。なので、以下は完全にその内容をメモしただけです。

原因

  • 4.0.0あたりからユーザーのRoleに Owner が追加されました。
  • pgHeroとSidekiqは、Ownerロールのユーザーにしか表示されないようになりました。
  • 初期に作成するadminユーザーは名前の通り、Admin ロールになっています
  • なので、pgHero, Sidekiqが管理画面から見えなくなります。

解決策

  • tootctl accounts modify yourusername --role Owner を実行する (yourusernameはあなたのユーザー名に置き換えてください)
  • –role Owner の O は大文字にしないと怒られます。(以前は admin,moderator,userを受け付けていました。 公式ドキュメント

蛇足

  • 4.0.0からは –role は管理画面のロールで設定した名前を受け付けるようになる(と思われます)。デフォルトでは、 Owner, Admin, Moderatorです
  • --Role Userはありません。 --remove-role をつけることで User にすることができます。 issue

蛇足2

環境

  • Windows 10 22H2

ソフトウェアの入手

ここでは入手だけでインストールはしないことに注意。
以下、MSMはMegaRAID Storage Managerを示す

MegaRAID Storage Manager

LSIはBroadcomに買収されて、BroadcomはAVAGOに買収された。
その後何度もURLが変更されて一定しないので、検索するのが一番早い。

https://www.broadcom.com/ の右上の検索ボックスに
megaraid storage manager と入力してENTER

[検索結果へのリンク](https://www.broadcom.com/site-search?q=megaraid storage manager)

この記事を執筆した当時は 17.05.06.00_MSM_Windows.zip が最新だった。
ダウンロード後、ファイルを解凍しておく。

AdoptOpenJDK 8

https://adoptium.net/temurin/releases/?version=8 に行って以下を選択

  • Windows x32 JRE msi をダウンロード

JDKではだめで、JREが必要

64bit版でもいいような気がするが、MSMが32bitアプリなので念のため32bit版を選択。
JDKはJREを含んでいるではないかと言いたい気持ちはわかるが、UIを起動するためのバッチファイルが %JRE_HOME% を参照してしまっているので、JREでないとダメ。
JDKを入れて環境変数 JRE_HOMEを設定すれば動くだろうけども。

インストール

AdoptOpenJDK

インストーラに従ってインストールするだけ。
インストール先にスペース等を含まないパスを指定する。
例えば c:\jre-8.0.345.1-hotspot (デフォルトからProgram Files~を削除したパス)

インストール終了後(終了前でもいいが)環境変数設定で
JRE_HOME -> c:\jre-8.0.345.1-hotspot という環境変数を作る(ディレクトリを参照ボタンを使うと便利)
インストール後には、環境変数PATHを反映させるためにWindowsを再起動する。

環境変数設定は、スタートボタンを右クリック→システム→左ペインの詳細情報をクリック→右ペインのシステムの詳細設定をクリック→詳細設定タブ→環境変数… ボタン

MegaRAID Storage Manager

途中で罠があるのでよく読んで

途中で、failed 的なポップアップが表示されていたら失敗している。(成功と表示されるが失敗している)。この場合はもう一度setup.exeを起動してremoveしてやり直し。

  • 解凍したファイル(DISK1フォルダ内)のsetup.exe を実行する
  • Setup Type と聞かれるまで Next > で進める
  • 途中で Setup Type と聞かれるところで、Custom Installation を選択する
  • Select a setup type という質問が出るので StandAlone を選択
  • LDAPは使用しないので No を選択
  • keysize は 2048 (デフォルト)
  • ログ表示範囲は何でもよいがとりあえず Since last shutdown を選択

起動

デスクトップにあるMegaRAID Storage Managerを起動

起動時にWindowsファイアウォールの画面が出るので、許可するボタンを押す。

トラブルシューティング

MSMのインストール中に反応がなくなった

おそらく、ポップアップが表示されています。
タスクバーをチェックしてみてください。

MSMのインストール中に Failed 的なポップアップが出た

JREが入っていません。

MSMを起動しようとしたら \bin\javaw が見つかりませんと出た

JREが入っていません。JDKが入っていてもだめです。
もしくは、JREをインストールした後に再起動をしていない(ので環境変数がセットされていない)

MSMは起動したが、ホストがでてこない

サービスが起動していません。 JRE入れ直し等していたら再起動してみてください
実はそのカードはMSMに対応していないかもしれません。LSI Storage Authority (LSA) も試してみてください。

前提

  • Arch Linux
  • 普通のデスクトップPC (Ryzen 7 1700 32GB RAM)

まえがき

ノートPCやスマホでは指紋認証でロックが解除できるのにデスクトップPCだけ解除できなくて面倒だなぁと思ってLinux環境でも指紋認証出来るようにしようとしたらドハマりした。という記録
商品のリンクにAmazonを使用しているが、アフィリエイトは含まれていない
※ というより、アフィリエイトの最初の3件が獲得できず、まいどまいどアカウント閉鎖を食らっているのでもう諦めた

手段

USB指紋認証センサーを追加する(そりゃそうだ)
…と記述するのはかんたんだが、そもそもLinuxに対応した指紋認証センサーなんてのはほとんどない。さらに悪いことにぐぐって見てもなんというか…キーワードが悪いのかまったく参考にならない記事しか出てこない。

バックグラウンド

Linuxでの指紋認証は libfprint プロジェクトの成果で実装されている。
サポートされるデバイスリスト
https://fprint.freedesktop.org/supported-devices.html

自分のデバイスがサポートされてなくて悲しんだ人々がフォークしている場合もあり、なんとも混沌としている感じもする。

製品記録

さすがにデバイスIDを公開してくれるメーカーはほぼないので、購入してみないとわからない。という話になる。つらい。
どうも指紋認証デバイスの仕様は公開されないらしく、リバースエンジニアリングして実装しているのかなぁという雰囲気、めちゃくちゃ厳しい。

DDS, Inc UB-H711

ID 138a:0005 Validity Sensors, Inc. VFS301 Fingerprint Reader
秋葉原最終処分場で200円だったもの。Windowsでは標準ドライバで動く。
…が、私の環境ではうまく動作しなかった。fprint-enrollがエラーを返してくる。

アルカナイト(ARCANITE) USB指紋認証リーダー

ID 2808:93a9 Focal-systems.Corp FT9201Fingerprint.̚

https://amzn.asia/d/c2TRASG

最後の文字はミスタイプでもなんでもない。普通に表示される。
Amazonで最安の指紋認証リーダー。もちろんWindowsでは標準ドライバで使用できた。
Linuxでは… folcal-systemsのベンダーID自体がないような状態なので期待薄。

SEKC USB指紋認証キー SFSD-01 https://amzn.asia/d/9hZ1sRt もおそらく同一製品と思われる。(こっちがオリジンかもしれない)

指紋認証のエリアが広く使いやすく感じた。Windows環境ならおすすめ出来る一品。

PQI My Lockey

ID 06cb:0082 Synaptics, Inc.

https://amzn.asia/d/fWYEciU

おしい。購入前に、Synapticsであることまではわかっていたが…
多分これもWindowsでは普通に動作すると思われる。
Linuxでは当然動かない。が、動作させようとしている人はいるようないないような
https://github.com/nmikhailov/Validity90/issues/32

RATOC USB指紋認証システムセット・タッチ式 SREX-FSU4

https://amzn.asia/d/cjbrW3s

出荷終了製品。メルカリの出品で、mouse FP01のドライバで動いたという記述があったため購入した。FP01のWindowsドライバのinfファイルを見てみると、 1C7A:0300 1C7A:0570 1C7A:0571 の記述があったので、0300以外であれば動作するはず…
にしてもお値段がエグい。

(現在到着まち)

mouse FP01のドライバで動く。ということは mouse FP01もLinuxで動く可能性があるのではないか(それはいいけど、FP01はレビューで手が乾燥してるとダメとか書かれてて笑えない)

benss 指紋認証リーダー (?)

執筆時点で購入不可。多分もう入荷しないだろう。

https://www.reddit.com/r/linux/comments/gc8a2e/i_finally_found_a_cheap_usb_fingerprint_reader/

https://amzn.asia/d/fHeNz7u

まえがき

ギブアップして日本語配列に戻すことにした。
という話。全く学びはないので感想だと思って読んでほしい。

原因

いくつか原因はあるので先に述べていく

右手の小指が思ったように動かなかった

記号以外のキーに関しては特に問題がなかった。最上段のキーも大半は覚え直せばOKという感じで特に問題は感じていなかった。
しかし、右手の小指で叩く記号がどうしても克服できなかった。
具体的にストレスだったキーを挙げていく。

  • = Backspaceとミスタイプするのが治らなかった。もしかしたらこれは薬指でタイプした方がよかったのかもしれない。
  • | 届かない。パイプを押すたびに遠いなぁ…と思っていた
  • [ なぜかとなりの ] とミスタイプすることが多かった。
  • ' これはストレス度が高かった。なぜかこのキーがやたらと打ちにくかった。ホームポジションから一つ隣に行くだけなのだがなぜか手首をひねりながらタイプするクセがあり、手首に負担かかるなぁという感じだった。

かな漢字変換のON/OFFトグル

これは設定で回避できる部分ではあると思うんだけども、個人的にこれが致命傷だった。
定番の左右ALT単押しにセットするとALTはホームポジションから押せないのでON/OFFのたびにリズムが崩れる。
では、ALT+` はどうかというとこれもホームポジションから離れるわ、2ストロークキーだわでイマイチ。
ctrl+space がいいんじゃないかと思うが、これはEclipseとかVSCodeではコード補完のデフォルト割当で、コード補完は移動させたくないぞ。となりお手上げだった。

2022/09/11追記。ALT+ でメニューバーにフォーカスが取られる件が直ったようで結局、一番無難なALT+でかな漢字変換をトグルしている

超蛇足

ARCHISS Quattro TKL のUS配列にはスペースバーの左右にキーがあり、これは使えばここは解決できるように思えるけれども、どうもマウスの左右クリック専用キーのようである。残念

蛇足

英語キーボードの方が優れているとされる記述への個人的感想

Web上で検索して出てきたのをいくつかピックアップして私見を述べてみる。
プログラム開発周り(コードを書く、ドキュメントを書く)に使用するのを前提とする。
検索した範囲では日本語キーボードを擁護する記述が少ない気がするので書いておく。

ソフトウェアのショートカットキーは英語キーボードが基準である

同意。これは本当にそうだと思う。
ただ、 vimの : は英語キーボードだとShiftが必要なのでなんでそうなった?っていう気がする。

{ } [ ] の対応が英語キーボードなら横である

物理的には同意。現実問題では… エディタで { [ を入力すると即座に閉じる方が補完されるので実害はほぼない。日本語のカギカッコとかだと補完されないけれども、そうはいっても縦には並んでいるわけで、連続で「」と打つのでなければあまり大差はない。

記号の配置が論理的である

同意。
"'が同じキーにいるので覚えやすいです。って言われれば確かに同意するけれども、そもそもよく使う記号は手グセで打てるようになるので場所に論理性があるから良い??
…まぁ良いだろうけど…

日本語キーボードだと地味によく使う : が1キーで打てて便利な気がする。
あと、英語キーボードだと記号が右手小指エリアに集中していて右手だけが疲れる気がする。
_ は地味に使うけどこれは英語キーボードの方が良いなと思う。

成長曲線が良いっていう意味では英語キーボードの方がいいかなぁ…
なんとなく記号をタッチタイプしてる数が英語キーボードの方が多い気もする。

Enterキーが横に大きいのでホームポジションから手が届く

全面的に同意。小指が届くので大変良い。行を変えるのがストレスなくできる。

BackSpaceキーが大きくて打ちやすい

不同意。大きかろうが小さかろうが、BSを押す時点で右手はホームポジションを離れるのであまり変わらない。もう少し小指が動くか、手が大きいならメリットがあるのかも。

英語キーボードの方が刻印がシンプル

不同意。かな印刷されてないやつなら変わらない気がする。

スペースバーが長くて打ちやすい

不同意。ホームポジションに手を置いたら親指はVとNあたりに来るので、日本語キーボードでもそこらへんはスペースバーになっている。

変なキーサイズのキーボードが存在しにくい

日本語配列ではなぜか無変換だけ小さくしたり、そもそも無変換・変換どちらも小さかったりと微妙な差がある製品がある。(ゲーミングとか言うと無変換が小さくされるのはお約束)
英語配列ではそういうことは基本的にないので選択肢に困らない。

最終的な所感

英語配列と日本語配列のキーボード、両方使ってみた結果思ったのは、
どちらにも優劣あるので好きな方を使えば良い。というなら書くなよ的な感想。
ただ、かな漢字変換を半角全角でON/OFFしているのであれば、英語キーボードはトライする価値がある。なにより、英語キーボード使ってます。というのはカッコイイ。
(なんでかわからないけどカッコイイ、デキル感じがする。不思議)

ゴチャゴチャ書いてきたけど、おそらく大半は慣れの問題で慣れてしまえば英語と日本語どちらでも大差はない。少なくとも、英語キーボードに乗り換えて効率爆上げ!みたいなのはデマである。
ただ、コードを書くだけなら、英語キーボードの方がちょっと効率良いかもなぁ… というのは正直思うけれども、コード中に日本語でコメントを書くよなぁ…という点で微妙なものを感じている。

多分、今後も英語配列への憧れみたいなものをもちつつ、でも日本語入力するしなぁ…
と思い続ける予感がしつつ、ここらで終了としたい。

PS:なんとなく、英語配列のキーボードに変換・無変換を追加したキーボードを自作すればすべて解決なのではないか。続編を書くとしたらそういうのになる気がする。

追記

日本語配列に戻ろうとしたら、それはそれで違和感が出るようになってしまったため、結局英語配列のキーボードを使い続けている…

環境

  • Arch Linux / KDE / Wayland
  • Ryzen 1700X / 64GB MEM

なんで乗り換えようとしているか?

  • なんとなく、出来る人は英語キーボードを使っているイメージがある
  • 英語キーボードを長年使っている知人が猛プッシュしている
  • 年単位でリアルフォース(キーボード)を使っていたが、ちょっと違うものを使ってみたくなった
  • 内藤かんチャンですごいいい音がするキーボードを使ってるのを(タイプ音)聞いて赤軸なキーボードを使いたくなった…

ようするに思いつき。

なんとなくのメリット・デメリット

メリット

  • 英語キーボードは世界中からセレクトできる
  • ノートPCのキーボードが英語でも問題なくなる

デメリット

  • 普通に売ってるノートPCは日本語配列なのでつらくなる
  • 他の人のPCを触る時にしんどい可能性がある

tl;dr;

良かった設定等のTIPSを下の日記から抜粋する

  • Wayland環境でキーリマップをするときは keyd がよさそう。
  • とりあえずのconfig gist

以下蛇足。

乗り換えてからの日記

1日め

  • とりあえずMozcの設定をする。
  • かな漢字変換のON/OFFは `ALT+`` としておいた
  • 押し方の問題なのか、ALT+`を押すとメニューバーにフォーカスされることが多くてイライラ
  • 普通の文字を打つのは困らないが、記号類は割と全滅。まいどまいどキーボードを見て探してる感じ
  • Enterキーを打つ時に上の方を叩いていたようで\が入力されることが多い。

2日め

  • ちょっとGolangのコードを書いてみる。:がShift入れないと入らないのがつらいなーと感じる。
  • 相変わらずALT+`でメニューバー問題に苦しむ。
  • 試しにWindowsで同じことをするとメニューバーにフォーカスがいくことはなく、どうもKDEのときだけ何か起きるっぽいことがわかった。
  • +がBackspaceとミスタイプすることが多かったり、まだまだちょっと慣れないなあという感じがある。
  • CTRL+スペースをかな漢字変換のトグルに使えばいいじゃん。というアドバイスをもらうも、それはVSCodeとかEclipseのコード補完のショートカットなのでやだなぁと思う。
  • 正直、日本語キーボードに戻ったほうが良いんじゃないかと思う

3日め

  • いっそのこと使わないCAPSキーをトグルに使ったら良いのではないかと思いつく。
  • 設定してみると、思ったとおり動く…が、CAPSも効いてしまってつらい。
  • あと、CAPSでIMEトグル、いくらなんでも変なのでは…
  • 右ALTも試してみたけど、結局ALTを押すとメニューバーにフォーカスされてしまうので無意味。
  • いろいろ試してみると、US→MOZCの時はフォーカスが取られなくて、Mozc→USの時にフォーカスが取られることがわかった。だからといってどうというわけではないのだけれども。
  • 相変わらず+はミスタッチする。BSと間違えるので被害が大きい
  • 正直、日本語キーボードに戻ったほうが良いんじゃないかと思うagain
  • でも、CAPSでどうにかなるかも。っていう感じもでてきている。
  • Xremapを使えばキーリマップできそう。

4日め

  • リマップ問題をどうにかするために keydを入れた
  • これの設定をどう書けば良いのかあまりドキュメントがなくてトライアンドエラーするハメになった。
1
2
3
4
5
6
7
[ids]
#*
04d9:4545

[main]
# Maps capslock to escape when pressed and control when held.
capslock = overload(control, muhenkan)
  • idsの部分は、lsusbなどを使ってvendor:prodID を取得してそのまま書けばおっけー。
  • idsとなっている通り複数行かける。
  • この部分は、systemd status keyd すればログにどのキーボードに適用したか表示されている
  • 違う意味でハマったのがキーの置き換え部分。
  • 上記の設定はcapslockを普通に押すと無変換とする、長押しするとCTRL扱いする。というもの
  • で、この状態でKDEの地域の設定→グローバル設定→IME ONするキーを設定すると、左Controlとなってしまって、無変換になってくれない。
  • なので、一度 capslock = muhenkan とした状態で、上記の設定を行い、無変換でON/OFFできるようにする
  • その後、default.confを書き換えてoverload…に戻してあげれば予定通りの動きをしてくれる。
  • ・・・が。なんか慣れない。やっぱりCTRL+SPACEかなぁ…

5日目

  • いきなり思いついた。ALT+`を別のキーに置き換えればメニューバーにフォーカスを持っていかれないで済むのでは?と思って試したらビンゴだった。
  • これでCTRL+SPACE食われてつらい問題もなくなるし、まぁ割と標準的な割当なのもよい。
  • 少なくともウチの環境では、 keyd で半角/全角(zenkakuhankaku) に置き換えた場合、それをKDEのショートカットとして設定できない。割と謎

その後

  • 上記の環境で今の所うまく動いている。
  • ただ、相変わらず記号はタッチタイプできていない(キーボード見てる)
    • 今後しばらく同じ文章が続きそうなのでとりあえずこれで本記事は〆とさせていただく

環境

  • Proxmox VE 7.2 (ホストOS)
  • LXCコンテナ上のDebian 11 bullseye

本文

htop

メモリ使用量 16.0Z という謎な表示をしている。
https://github.com/lxc/lxcfs/issues/489
このIssueによると、 sudo mount -t tmpfs tmpfs /proc/spl することで治るとのこと。

実行後↓

蛇足:起動時に自動的に実行させるには

以下のどれか

  • /etc/rc.local に以下のような記述をして実行権限を与える。debianはrc-local.serviceが自動的に rc.local を起動してくれる。ちなみに、先頭のshebangを書かないと exec format error で落ちる。
1
2
3
#!/bin/bash

mount -t tmpfs tmpfs /proc/spl
  • sudo crontab -e して @reboot mount -t tmpfs tmpfs /proc/spl と記述する

まえがき

  • めちゃくちゃハマったので方法をメモしておく。

前提

  • USB接続のsmartcardリーダー
  • podman (dockerの場合は多分こんな苦労をしなくても動く)

理屈

  • Smartcardリーダーはデバイスとして /dev 以下にわかりやすい名前でマップされない
  • /dev/bus/usb 以下にデバイスファイルとしてマップされる。(例: /dev/bus/usb/001/009)
  • デバイスファイルのパスは、USBの接続した場所等で変わる。
  • デバイスファイルの権限は crw-rw-r-- 1 root root なのでrootユーザーしか書き込みができない。

how to

  • デバイスファイルの権限を変更すれば良い。そのためには udevルールを書く必要がある
  • udevルールは nn-xxxxxxxxx.rules というファイル名にする。nnは読み込み順、xxxxは任意
  • udevルールは /etc/udev/rules.d/ に置く必要がある
  • 追加・更新後は、とりあえず sudo udevadm control --reload しておく。(自動的に反映されるらしい)

udevルールファイルの例

以下は、Gemaltのリーダーの場合の例。
以下の例では、カードリーダーを video グループのユーザーにも使えるようにしている。

1
SUBSYSTEM=="usb", ATTRS{idVendor}=="08e6", ATTRS{idProduct}=="3437", GROUP="video", MODE="0660"

idVendor, idProductは lsusb コマンドで調べることができる
例えば、以下の例だと、 idVendor=05fc idProduct=0231 である。

1
Bus 003 Device 004: ID 05fc:0231 Harman JBL Pebbles

確認

ls -l /dev/bus/usb

1
2
3
4
5
6
7
8
/dev/bus/usb/001:
total 0
crw-rw-r-- 1 root root 189, 0 Jun 6 18:17 001
crw-rw-r-- 1 root root 189, 1 Jun 6 18:17 002
crw-rw-r-- 1 root root 189, 2 Jun 6 18:17 003
crw-rw-r-- 1 root root 189, 3 Jun 6 18:17 004
crw-rw-r-- 1 root root 189, 18 Jun 6 18:17 019
crw-rw---- 1 root video 189, 19 Jun 6 18:17 020 <==== 所有グループが video になった

なんで?

  • 240GBのSSDの内容を500GBのSSDに dd で丸コピーした
  • しかし、500GBのSSDで起動してみると容量が240GBのままで困った。

最初に

  • ディスクの容量を実際に変更するコマンドを実行中は、システムが応答を停止します。
  • おそらく、ディスクアクセスがすべてブロックされていると思われます。

どうすればいいか

現状確認

sudo diskutil list

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.1 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_APFS Container disk1 239.8 GB disk0s2

/dev/disk1 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +239.8 GB disk1
Physical Store disk0s2
1: APFS Volume MacOS 52.8 GB disk1s1
2: APFS Volume Preboot 268.8 MB disk1s2
3: APFS Volume Recovery 1.1 GB disk1s3
(略)

disk0の2番、Container disk1 の容量がディスクの容量と一致していない。

拡張

sudo diskutil apfs resizeContainer disk1 0

disk1 は APFS Containerの方。上記の表示でいう synthesized されたディスクの番号を指定する。 /dev/disk1 ではない。
次の 0 はサイズ変更 +100g とかが指定できる。 0 を指定すると最大容量まで拡張する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Started APFS operation
Aligning grow delta to 260,050,452,480 bytes and targeting a new physical store size of 499,898,105,856 bytes
Determined the maximum size for the targeted physical store of this APFS Container to be 499,897,077,760 bytes
Resizing APFS Container designated by APFS Container Reference disk1
The specific APFS Physical Store being resized is disk0s2
Verifying storage system
Using live mode
Performing fsck_apfs -n -x -l /dev/disk0s2
Checking the container superblock
Checking the EFI jumpstart record
Checking the space manager
Checking the space manager free queue trees
Checking the object map
Checking the encryption key structures
Checking volume /dev/rdisk1s1
Checking the APFS volume superblock
Checking the object map
Checking the snapshot metadata tree
Checking the snapshot metadata
Checking the document ID tree
Checking the fsroot tree
Checking the extent ref tree
Verifying volume object map space
The volume /dev/rdisk1s1 appears to be OK
Checking volume /dev/rdisk1s2
Checking the APFS volume superblock
Checking the object map
Checking the snapshot metadata tree
Checking the snapshot metadata
Checking the fsroot tree
Checking the extent ref tree
Verifying volume object map space
The volume /dev/rdisk1s2 appears to be OK
Checking volume /dev/rdisk1s3
Checking the APFS volume superblock
Checking the object map
Checking the snapshot metadata tree
Checking the snapshot metadata
Checking the fsroot tree
Checking the extent ref tree
Verifying volume object map space
The volume /dev/rdisk1s3 appears to be OK
Checking volume /dev/rdisk1s4
Checking the APFS volume superblock
Checking the object map
Checking the snapshot metadata tree
Checking the snapshot metadata
Checking the fsroot tree
Checking the extent ref tree
Verifying volume object map space
The volume /dev/rdisk1s4 appears to be OK
Checking volume /dev/rdisk1s5
Checking the APFS volume superblock
Checking the object map
Checking the snapshot metadata tree
Checking the snapshot metadata
Checking snapshot 1 of 1 (com.apple.os.update-018EB80C949FBD899...)
Checking the fsroot tree
Checking the file extent tree
Checking the extent ref tree
Verifying volume object map space
The volume /dev/rdisk1s5 appears to be OK
Checking volume /dev/rdisk1s6
Checking the APFS volume superblock
Checking the object map
Checking the snapshot metadata tree
Checking the snapshot metadata
Checking the fsroot tree
Checking the extent ref tree
Verifying volume object map space
The volume /dev/rdisk1s6 appears to be OK
Verifying allocated space
The container /dev/disk0s2 appears to be OK
Storage system check exit code is 0
Growing APFS Physical Store disk0s2 from 239,847,653,376 to 499,898,105,856 bytes
Modifying partition map
Growing APFS data structures
Finished APFS operation

再度確認

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.1 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_APFS Container disk1 239.8 GB disk0s2
~~~~~~~~

/dev/disk1 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +239.8 GB disk1
Physical Store disk0s2
1: APFS Volume MacOS 52.8 GB disk1s1
2: APFS Volume Preboot 268.8 MB disk1s2
3: APFS Volume Recovery 1.1 GB disk1s3
4: APFS Volume VM 1.1 MB disk1s4
5: APFS Volume macSSD 15.2 GB disk1s5
6: APFS Snapshot com.apple.os.update-... 15.2 GB disk1s5s1

まだ、disk0s2が239.8GBになっている。このサイズはdisk1s0のサイズなのでここを拡張しないと実際に使用可能な容量が増えない。

拡張(その2)

repairdiskを実行

これを実行しないと次の拡張が意味不明なエラーで失敗する(容量が足りない。のようなエラー)

sudo diskutil repairdisk disk0

最初の質問がかなり怖いが、おそらく実際はデータが壊れることはないと思われる…
し、これを行うということは以前のディスクが残っているはずなので最悪どうにかなるでしょう。
(逆に言えばどうにもならなくなるのであればバックアップ取ってからにしましょう)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Repairing the partition map might erase disk0s1, proceed? (y/N) y
Started partition map repair on disk0
Checking prerequisites
Checking the partition list
Adjusting partition map to fit whole disk as required
Checking for an EFI system partition
Checking the EFI system partition's size
Checking the EFI system partition's file system
Repairing the EFI system partition's file system
Checking file system and repairing if necessary and if possible
Volume is already unmounted
Performing fsck_msdos -y /dev/rdisk0s1
** /dev/rdisk0s1
** Phase 1 - Preparing FAT
** Phase 2 - Checking Directories
** Phase 3 - Checking for Orphan Clusters
Found orphan cluster(s)
Fix? yes
Marked 116 clusters as free
Free space in FSInfo block (363872) not correct (363988)
Fix? yes
813 files, 181994 KiB free (363988 clusters)

***** FILE SYSTEM WAS MODIFIED *****
File system check exit code is 0
Restoring the original state found as unmounted
Checking the EFI system partition's folder content
Checking all HFS data partition loader spaces
Checking booter partitions
Reviewing boot support loaders
Checking Core Storage Physical Volume partitions
The partition map has been repaired
Finished partition map repair on disk0

本当に拡張

sudo diskutil apfs resizeContainer disk0s2 0

1
2
3
4
5
Started APFS operation
Aligning grow delta to 260,050,452,480 bytes and targeting a new physical store size of 499,898,105,856 bytes
Determined the maximum size for the targeted physical store of this APFS Container to be 499,897,077,760 bytes
長いので略
Finished APFS operation

最終確認

diskutil list

1
2
3
4
5
6
7
8
9
10
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.1 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_APFS Container disk1 499.9 GB disk0s2

/dev/disk1 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +499.9 GB disk1
Physical Store disk0s2

容量が変更されました。お疲れさまでした。

蛇足

使わなかったコマンド

sudo diskutil apfs resizeContainer disk0s2 limits

1
2
3
4
5
Resize limits for APFS Physical Store partition disk0s2:
Current Physical Store partition size on map: 239.8 GB (239847653376 Bytes)
Minimum (constrained by file/snapshot usage): 75.9 GB (75942068224 Bytes)
Recommended minimum (if used with macOS): 86.7 GB (86679486464 Bytes)
Maximum (constrained by partition map space): 499.9 GB (499897077760 Bytes)

repairdiskを実行しないと

sudo diskutil apfs resizeContainer disk0s2 0
sudo diskutil apfs resizeContainer disk0s2 499.9g

1
The size (499.9g) must not be greater than the partition map allocatable size

だめである。 ちなみに容量をもっと減らしても同じエラーがでる。

はじめに

なんで乗り換えようと思ったか

  • Linuxデスクトップがダメだったわけではまったくない
  • Microsoft Officeが動かしたかったのは正直ある
  • 1年以上ほとんどWindowsを触ってなかったので触ってみたくなった

TL;DR;

  • WindowsならLinuxデスクトップより良く動くと思っていたのは勘違いだった。
  • ソフトウェアの選択肢は違うけれどもLinuxデスクトップは(ゲームをしなければ)普通に使える。
  • Windowsなら普通に動くんだろうなぁは割と裏切られる。(ハードウェアが動かないは除く)
  • かといってWindowsがそこまでダメかというとそうでもなくなってきた。

PCの仕様

  • Core i3 12100F / ASRock B660 Pro RS
  • Radeon RX560 (4K 27インチモニタ + フルHD 24インチモニタ)
  • メモリ 24GB
  • SATA SSD 500GB

セットアップ

基本方針

  • コマンドラインの作業はできるだけWSL上のArch Linuxでやる。
  • GUIのアプリはWindowsに任せる
  • KDEとかSwayを使ってよかったと思うショートカットはできるだけ再現する
  • アプリのインストールはできるだけ winget を使う

ターミナル

  • Windows Terminalを使う
  • F1にQuake Modeを設定
  • Win+Enter で通常のウィンドウを表示
  • 起動するのはArch Linux

PowerToys

Keyboard Manager

キーボードショートカットとリマップを行ってくれる。

  • Win+Q -> ALT+F4 これはmacOSのcmd+Qの手癖を再現
  • Win+F7~F12 -> メディアコントロール macOS使ってた時のFn+F7~F12までの手癖を再現

PowerToys Run

  • UlauncherとかAlfredとか相当。
  • VSCodeの履歴を検索できるのがとても便利

IME

  • なぜかExcel上で変換/無変換でのIME ON/OFFが効かない。
  • 変換効率が悪いというか、文節の区切りが間違うことが多い→どうにもならなかった
  • ATOK Passportを契約してATOK入れたほうが幸せになれるかもしれない

解決策

Thunderbird

  • メーラーの選択肢は数あるけれども割とメーラーは生き残ることが大事だと思うので。
  • Outlook使えばいいじゃん。というのはあるのだが、メールの設定がどうしてもうまくできなかった。(受信と送信でアカウントIDが違うとかそのへん)

wingetで入れたもの

  • git
  • dropbox
  • 7-zip
  • Acrobat Reader DC (64bit)
  • Windows Terminal (Preview)
  • Firefox
  • Thunderbird
  • Office (Microsoft 365 Apps for enterprise)
  • Clickup (タスク管理ツール)
  • PowerToys (Preview)
  • Visual Studio Code

まとめ

よかったこと

指紋認証センサーが動くようになった

  • 秋葉原最終処分場で買ったUB-H711がWindows10に標準でサポートされていて、ログインの認証に使える。
  • 複数の指の指紋も登録OKだった。

だめなこと

HiDPIまわり

  • 4Kモニタ(拡大率200%)とフルHDモニタ(100%)の二枚を使っているが、そのせいでモニタの配置が以下のようになってしまう。そのため、上のほうからマウスカーソルを左のモニタに移動しようとするとできない。ウィンドウの移動も同じ。

  • Radeon Softwareの設定で仮想超解像度をONにして、フルHDモニタの解像度を4K相当にして、拡大率200%を適用すると解決できる。(が、フルHD側の画像がちょっと変わる。ボヤケるというか太くなるというか…)

スリープまわり

  • スリープから復帰するとモニタの解像度を永遠に変更し続けて操作できなくなる。
  • ハイバネーションから復帰すると、通知の拡大率が適用されず、小さい表示がされる
  • 正直、このあたりはまともに動くと期待していたので結構ストレス。

リモートデスクトップと拡大率

  • リモートデスクトップを解像度指定で開いた場合、その解像度の画面が拡大されずに表示される。
  • 例えば 1440x900 を指定して接続元の4Kモニタでリモートデスクトップのウィンドウを開くと、ホストのモニタのネイティブ解像度で 1440x900 の画面が開く。拡大率が無視されている。
  • リモートデスクトップのタイトルバーから拡大→200%を選択することで拡大されるようになる。
  • だがしかし、拡大の設定は覚えてくれないので毎度設定が必要。

IME変換中窓が開くとゴミが出る

  • サブモニタでIMEの変換候補窓が出た瞬間に、メインモニタの画面左上に変換窓が表示される。
  • 超解像度のせい・・・かもしれない。