なんか書いていこうぜー .com

Let's write something good

初めて PC を組み立てた

2020-07-26
  • Share on Facebook
  • Tweet
  • Add to Pocket

ノート PC が壊れたことをきっかけに自作 PC に対する関心が高まったので、行動に移してみた。

今回組み立てた部品リストと購入品

用意したパーツは以下のとおり。 購入サイトで CPU を選択したときにおすすめされたパーツを基本として、ケースはなんか検索でひっかかった大きいやつ。大きいもの(ATX)を選んだのは、単純に配置しやすいかなと思っただけ。

パーツ メーカー 型番 備考
CPU AMD Ryzen 9 3900X 100-100000023BOX
メモリ CFD W4U3200CM-16G
ケース NZXT H710 CA-H710B-B1
CPU水冷クーラー CORSAIR H150i RGB PRO XT
グラフィックボード GIGABYTE GV-R56XTWF2OC-6GD RADEON RX 5600 XT 内蔵
電源 CORSAIR RM850x White 2018 黒がなかったので
SSD Western Degital WD Blue 3D NAND SATA WDS500G2B0A Windows 用
M2.SSD Intel SSD 660p Series SSDPEKNW512G8XT Linux 用
マザーボード ASUS ROG STRIX X570-F GAMING
グリス 親和産業 SMZ-01R /OC Master
工具 Ainex TL-020

自作PCバイブル2020-2021 というムック本を参考に、初めての組み立てを進めてみた。

付属の説明書と、ムック本と、同じメーカーのケースを使った組み立て動画を参考に組み立てた。 孤独のグルメシーズン8 を流しながらの作業で、シーズン終わるまでには OS インストールまで進んだ。

苦しんだ・時間がかかったポイント

組み立て自体が初見なのにかなり大きい CPU クーラーを用意したため、ケースの特性、CPUクーラーのケース内での配置、配線どれもわからずに一旦心が折れたemoji-cryので、代わりに一時しのぎでリテールクーラーを設置するという遠回りをしたため時間がかかった。

Ryzen 9 3900X は GPU 機能を内蔵していないため、マザーボードにくっついている HDMI や DisplayPort コネクタが機能しない、という点に気がつくのにも時間がかかった。この HDMI に接続、PC 起動して、マザーボードの警告ランプがつきっぱなしになったので焦ったが、マザーボードの設置レポート等ググって気がついた。

つけたグラボは機能しているがファンが回らないので「大丈夫か?」となったが、負荷がかからないと回らないらしいので静観している。

あるといいなと思ったもの

照明位置emoji-bulbの関係で作業する際手元が暗かった。スマホのライト機能を使っていたが、初心者なので静電気防止手袋して作業しているものだから、手袋しているとスマホが操作できない。「あ”ー」ってなって手袋外す、というのを何回かやったので、手元を照らすライトemoji-flashlightがあるとよかったなと思った。

組み立てての感想

思ったより静か。今のところ快適。

ケース重要。もうちょっとわかりやすい単純なケースにしてもよかったかも。

CPU に GPU 内蔵しているかどうかは確認しておこう。グラボ一緒に買っておいて助かった。

配線には魔物が棲んでいる。ケースに付いているファン、クーラーのファンが多ければ多いほど追加の配線が増えるので複雑度が増す。

今後の課題

  1. ディスプレイやキーボードをどう他の PC と共有するか。電源不要の HDMI 切替器を利用しようと考えている。USB ハブでまとめて、ハブは差し替えるかぁ…というところ。
  2. バックアップ用の HDD を、ケース内のマウンタに HDD 入れて管理するか、USB で外からつないで管理するか。SATAケーブル取り回すの面倒だから今のところ、外付けが優勢。
  3. 2 枚目の外部ディスプレイを DisplayPort で接続する必要があるが、HDMI to DisplayPort がうまく動くか試す。

xf86-input-synaptic から xf86-input-libinput に乗り換えた

2020-07-04
  • Share on Facebook
  • Tweet
  • Add to Pocket

https://wiki.archlinux.org/index.php/Touchpad_Synaptics をみると、メンテナンスモードに移行したようなので、synaptics から libinput に乗り換えてみた。

xf86-input-synaptics の削除する

/etc/X11/xorg.conf.d/70-synaptics.conf と、パッケージを削除する。

$ yay -Rs xf86-input-synaptics

xf86-input-libinput を導入する

パッケージをインストールし、/usr/share/X11/xorg.conf.d/40-libinput.conf/etc/X11/xorg.conf.d/40-libinput.conf へコピーしてこれを編集する。(シンボリックリンク作成でいいと思う)

$ yay xf86-input-libinput

ArchWiki: libinput xinput を使う を参考にデバイスを調べる。 今回の対象は id=13 のタッチパッドを調整する。

$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=13   [slave  pointer  (2)]
⎜   ↳ TPPS/2 Elan TrackPoint                    id=15   [slave  pointer  (2)]

ArchWiki: libinput Xorg 設定ファイルを使う にあるように、先程コピーしたファイルを編集する。

設定内容は ArchWiki: libinput 一般的なオプション をもとにして設定する。

タップでクリック、2本指クリックで右クリック、ナチュラルスクロールを有効にしている。

$ sudo vim /etc/X11/xorg.conf.d/40-libinput.conf
Section "InputClass"
        Identifier "SynPS/2 Synaptics TouchPad"
        Driver "libinput"
        MatchIsTouchpad "on"
        Option "Tapping" "on"
        Option "ClickMethod" "clickfinger"
        Option "NaturalScrolling" "true"
EndSection

タッチパッドの操作感度の調整

ArchWiki: マウスのアクセラレーション 速度を変更する を参考に調整する。

以下のコマンドで調整しつつ、ポインタの移動速度をみて設定する数値を変更する。

$ xinput --set-props 13 'libinput Accel Speed' 0.8

好みの感度になったら、/etc/X11/xorg.conf.d/40-libinput.conf に反映する

$ sudo vim /etc/X11/xorg.conf.d/40-libinput.conf
Section "InputClass"
        Identifier "SynPS/2 Synaptics TouchPad"
        Driver "libinput"
        MatchIsTouchpad "on"
        Option "Tapping" "on"
        Option "ClickMethod" "clickfinger"
        Option "NaturalScrolling" "true"
        Option "AccelSpeed" "0.8"
EndSection

まとめ

xf86-input-synaptics とその設定を削除して、xf86-input-libinput を導入し、設定ファイルを作成した。 感度はコマンドで設定した後、設定ファイルに反映した。 実は他の設定もコマンドで設定して確認した後に反映することもできるが、ArchWiki の一般的な設定内容と目的が一致していたので、そちらについては直接設定ファイルに記載した。

gatsby-plugin-sharp と gatsby-plugin-manifest のアップデートでつまずいた

2020-03-21
  • Share on Facebook
  • Tweet
  • Add to Pocket

gatsby-plugin-sharp と gatsby-plugin-manifest のアップデートの際にエラーが発生したが、なんとか解消できたので emoji-memo として残しておく。

発生した問題

gatsby-plugin-sharp のアップデートPR( Bump gatsby-plugin-manifest from 2.2.47 to 2.3.1 ) と、gatsby-plugin-manifest のアップデート PR (Bump gatsby-plugin-sharp from 2.4.11 to 2.5.1) で以下のようなエラーが出た。

error "gatsby-plugin-manifest" threw an error while running the onPostBootstrap lifecycle:

Input file contains unsupported image format


  Error: Input file contains unsupported image format

not finished onPostBootstrap - 0.014s

エラーの issue を追いかけた

エラーメッセージでググると、https://github.com/gatsbyjs/gatsby/issues/22303 にあたった。その中のコメントで、libvips/libvips#1539 のリンクに言及されていたのでそちらを確認した。

その中で、lovell/sharp#2062 のリンクに言及しており、コメント で breaking change があったことがわかる。v0.24.0 以上の sharp が必要とな?

taniarascia/taniarascia.com#103 からこの issue が参照されていて、その中のコメント に解決策が提示されていた。

この解決策のコメントの中にあった、resolutions の設定を package.json に追記したところ、エラーが解消され、ビルドがうまくいくようになった。emoji-tada

package.json の resolutions について

pacakge.json の resolutions を使ったことがなかったのでぐぐってみたら、 https://classic.yarnpkg.com/ja/docs/selective-version-resolutions/ がわかりやすかった。

依存パッケージのバージョンを横から指定できるのか。依存パッケージの一部に脆弱性が見つかったりした場合に、これを使って強引にパッチのあたったバージョンにアップデートさせる、というような使い方できるっぽい。これは勉強になった emoji-memo

結論

今回は package.json の resolutions に sharpt のバージョンを "^0.24.1" として指定することでエラーを回避した。 resolutions については、https://classic.yarnpkg.com/ja/docs/selective-version-resolutions/ を参照のこと。

Arch Linux で rootless docker を設定した

2020-03-11
  • Share on Facebook
  • Tweet
  • Add to Pocket

何点か躓いたので emoji-memo しておく。

https://docs.docker.com/engine/security/rootless/ の手順を参考に rootless docker を設定していった。

前提

https://docs.docker.com/engine/security/rootless/#arch-linux#prerequisites を確認した。

newuidmapnewgidmap コマンドはインストールされていた。 /etc/subuid/etc/subgid はなかったので、下記のコマンドで作成した。中身は空のまま。

$ sudo touch /etc/subgid /etc/subuid

Arch Linux 特有の準備作業

https://docs.docker.com/engine/security/rootless/#arch-linux を参照。

私の環境では、/etc/sysctl.conf はなく /etc/sysctl.d/ があったため、/etc/sysctl.d/100-rootless-docker.conf を作成して、kernel.unprivileged_userns_clone=1 を記述し、sudo sysctl --system を実行する。

$ sudo vim /etc/sysctl.d/100-rootless-docker.conf
kernel.unprivileged_userns_clone=1

$ sudo sysctl --system

インストール (下ごしらえ)

https://docs.docker.com/engine/security/rootless/#arch-linux#install を参照。

curl と sh でインストールすることになるのだが、/etc/subgid/etc/subuid が空の場合、これらにユーザの情報を書き込むように警告が出るので、その値を書き込む。 /etc/subuid, /etc/subuid どちらも空ならば、それぞれについて警告が出るので、両方に書き込む。

$ curl -fsSL https://get.docker.com/rootless | sh

Could not find records for the current user muryoimpl from /etc/subuid . Please make sure valid subuid range is set there.
For example:
echo "muryoimpl:100000:65536" >> /etc/subuid

書き込んで、再度実行する。システムに入った docker が起動していると下記の警告が出る。docker.service 停止して環境変数を設定した。

$ curl -fsSL https://get.docker.com/rootless | sh
Aborting because rootful Docker is running and accessible. Set FORCE_ROOTLESS_INSTALL=1 to ignore.

$ sudo systemctl stop docker.service
$ export FORCE_ROOTLESS_INSTALL=1

インストール

下ごしらえが終わったら、curl を使ってインストールする。 PATH と DOCKER_HOST の設定が出力されるので、私は ~/.zshrc に書き込んだ。

$ curl -fsSL https://get.docker.com/rootless | sh

# Installing stable version 19.03.7
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 60.7M  100 60.7M    0     0  22.8M      0  0:00:02  0:00:02 --:--:-- 22.7M
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 17.8M  100 17.8M    0     0  14.8M      0  0:00:01  0:00:01 --:--:-- 14.8M
# starting systemd service
# starting systemd service
● docker.service - Docker Application Container Engine (Rootless)
     Loaded: loaded (/home/muryoimpl/.config/systemd/user/docker.service; disabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-03-11 23:08:04 JST; 36ms ago
       Docs: https://docs.docker.com
   Main PID: 12660 (rootlesskit)
     CGroup: /user.slice/user-1000.slice/user@1000.service/docker.service
             ├─12660 rootlesskit --net=vpnkit --mtu=1500 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run /home/muryoimpl/bin/dockerd-rootless.sh --experimental --storage-driver=vfs
             ├─12669 /proc/self/exe --net=vpnkit --mtu=1500 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run /home/muryoimpl/bin/dockerd-rootless.sh --experimental --storage-driver=vfs
             └─12676 vpnkit --ethernet /tmp/rootlesskit924008508/vpnkit-ethernet.sock --mtu 1500 --host-ip 0.0.0.0

Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + which slirp4netns
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + '[' -z ']'
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + which vpnkit
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + net=vpnkit
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + '[' -z ']'
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + mtu=1500
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + '[' -z ']'
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + _DOCKERD_ROOTLESS_CHILD=1
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + export _DOCKERD_ROOTLESS_CHILD
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + exec rootlesskit --net=vpnkit --mtu=1500 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run /home/muryoimpl/bin/dockerd-rootless.sh --experimental --storage-driver=vfs
Client: Docker Engine - Community
 Version:           19.03.7
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        7141c199a2
 Built:             Wed Mar  4 01:19:42 2020
 OS/Arch:           linux/amd64
 Experimental:      false
Server: Docker Engine - Community
 Engine:
  Version:          19.03.7
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       7141c199a2
  Built:            Wed Mar  4 01:19:50 2020
  OS/Arch:          linux/amd64
  Experimental:     true
 containerd:
  Version:          v1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
# Docker binaries are installed in /home/muryoimpl/bin
# WARN: dockerd is not in your current PATH or pointing to /home/muryoimpl/bin/dockerd
# Make sure the following environment variables are set (or add them to ~/.bashrc):\n
export PATH=/home/muryoimpl/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock

#
# To control docker service run:
# systemctl --user (start|stop|restart) docker

docker daemon の自動起動を設定する

インストール後、~/.config/systemd/user/docker.service が配置されるので、systemctl --user enable docker.service すると自動起動すると思いきやされないので、下記を参考に unit ファイルを編集した。

https://qiita.com/yasthon/items/26f943bd5f1b8fab87e0#rootless-docker%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86

https://docs.docker.com/engine/security/rootless/#arch-linux#daemon を参考に、loginctl コマンドも実行しておいた。

$ vim ~/.config/systemd/user/docker.service
[Install]
-WantedBy=multi-user.target
+WantedBy=default.target
$ systemctl --user enable docker.service
$ sudo loginctl enable-linger $(whoami)

遭遇した問題ややり直す方法について

  • curl 時に出る警告 echo "muryoimpl:100000:65536" のとおりに設定しないと、docker.service の起動に失敗したので、素直に従っておくことにした
  • 最初から手順を確認したい、再インストールしたい場合は、~/bin を削除し、export した PATH, DOCKER_HOST をコメントアウト、/etc/subgid, /etc/subuid の値を空にして、curl すると再現できた
  • 元のシステムワイドな docker で動かしていた rails 環境を動かした際、、bootsnap の起動や volume のマウントあたりで権限エラーが発生した。docker image を削除して再度作成することで解消した。Rails.root/tmp の中の cache 等にも旧権限が残っていたりするので削除するなり、owner をユーザにしておくなりしておくとエラーを解消できた

BuriKaigi2020 に参加して発表してきた

2020-02-01
  • Share on Facebook
  • Tweet
  • Add to Pocket

BuriKaigi2020 が 2/1 に開催されたので、急遽発表者として参加してきた。

経緯

1/29 の 22 時過ぎくらいに、近所の中華屋で遅い晩ごはんを食べているときに、以下の tweet を見て衝撃を受ける。

なぜかこのときに、穴があくのはヤダなぁと思ったので、オリャーemoji-dashの精神でノープランで mugi さんに DM した。

22:26 あたりにお気持ち表明して 23:07 にはサイトに反映されているというこのスピード感すごい…

この間、実は会社のブログに書かれている GitHub issue には気がついてなかったが、やりとりの後に気がついたので発表者欄に反映された URL つけて報告しておいた。 ブログみてハードルあがったwemoji-sweat_smile

発表について

昨年 12 月の LT で発表したテスティングフレームワークに興味があって作ってみたいな、という話が下敷きになっている。

年末に『テスト駆動開発』の第Ⅱ部を Ruby 実装していたものと、minitest のコードを読んでいたこともあって、「minitest で学ぶメタプログラミング」ということで話ししようと晩ごはん食いながらのやりとりで決めたのであった。

1/29 中にアウトライン作成して、1/30, 1/31 でなんとかスライド作ったものの、当日も微調整して、発表者ノートがうまく開かず時間が確認できない中で時間超過やショートするかと思いきや、うまい具合に収まったので助かった… emoji-sweat_drops

発表後

当日発表が後半も後半で発表終わるまでガチガチに緊張していたので、終わってやって気持ちが楽になった。 他の発表者の皆さんと日々ぶちあたった問題やその解決案、説明方法等について話しができたので非常によい時間を過ごすことができた。

本編(ぶりしゃぶが出るほうが本編)で、すごいの出てきたので記録として残してしておく。

いやぁ、楽しいイベントだった emoji-smile