ArchLinux+btrfsでストレージを組む練習

NASていうかbtrfsを使う練習。 今は自宅内NASとして2TB*4で作ったRAID10なストレージをそのまま使っているのだけど、容量を大きくしたいというのと、組んだまま6年も使い続けているので、組み直したいという話。
同じようにRAID10で組み直すのも芸がないし、容量の変更に対応できるような構成にしたい。当初はZFSを検討していたのだけど、ライセンス的に面倒だし、Linuxのファイルシステム「Btrfs」を5年間使用した記録 – GIGAZINEとかによると、構成の変更が視野に入っているならbtrfsのほうが良さそう。 というわけでbtrfsを使う練習をしてみる。 取り敢えず4本一挙に買うお金が無いので、2本で構成→後からお金があるタイミングで4本に増やす、みたいなのを想定。
ただし、システムのパーティションは素直に組んで、NAS用ストレージだけbtrfsにする。
・ストレージ1本で構成
・1本追加してRAID1にする(メタデータもRAID1)
・1本壊れた想定で、差し替える
・2本追加して、4本で構成する
・1本壊れた想定で、差し替える
・1本を大容量のものに差し替える

ArchLinuxセットアップ

何はともあれ実験環境のセットアップ。物理マシン(物理ストレージ)を用意するのは面倒なので、仮想マシンで。
2020.04.01なISOを読ませて起動して、以下つらつらと構成。

// それっぽくパーティショニング
# fdisk /dev/sda
// マウントとpacstrap
# mount /dev/sda2 /mnt
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot
# pacstrap /mnt base base-devel linux linux-firmware
// fstab生成とchroot
# genfstab -U /mnt >> /mnt/etc/fstab
# arch-chroot /mnt
// タイムゾーン、ロケール、ホスト名、パスワード
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# vi /etc/locale.gen
# locale-gen
# cat hostname > /etc/hostname
# pacman -S vim
# vim /etc/hosts
# passwd
// ネットワーク
# pacman -S dhcpcd
# systemctl enable dhcpcd.service
// ブートローダ
# pacman -S grub
# grub-install --target=i386-pc --recheck /dev/sda
# grub-mkconfig -o /boot/grub/grub.cfg
// 再起動
# exit
# umount -R /mnt
# reboot

お次は一般ユーザの作成。

// 一般ユーザの作成
# useradd -m tea
# passwd tea
# ln -s /usr/bin/vim /usr/bin/vi
# visudo
# su tea
$ sudo whoami

ストレージ1本で構成

デフォルトで入ってるストレージは/dev/sdaとして認識されている。ここにストレージを追加したところ、/dev/sdbとして認識されたので、これ1本で構成してみよう。

$ sudo pacman -S btrfs-progs
$ sudo mkfs.btrfs -L tank /dev/sdb
$ sudo sh -c "echo UUID=`ls -l /dev/disk/by-uuid/ | grep sdb | awk '{print $9}'` /mnt btrfs rw,relatime 0 0 >>/etc/fstab"
$ sudo mount -a
$ btrfs filesystem df /mnt
Data, single: total=8.00MiB, used=0.00B
System, DUP: total=8.00MiB, used=16.00KiB
Metadata, DUP: total=51.19MiB, used=112.00KiB
GlobalReserve, single: total=3.25MiB, used=0.00B

取り敢えずの作成とマウントはできたっぽい。snapshotはsubvolume単位で作成するので、subvolumeも触ってみる。

$ sudo btrfs subvolume create /mnt/sv1
$ sudo chown tea:tea /mnt/sv1
$ cd /mnt/sv1
// てきとうにファイルを作成
$ dd if=/dev/zero of=/mnt/sv1/data bs=10M count=1
$ ls -l
-rw-r--r-- 1 tea tea 10485760 Apr 28 03:56 data
$ btrfs filesystem df /mnt
Data, single: total=100.62MiB, used=10.06MiB
System, DUP: total=8.00MiB, used=16.00KiB
Metadata, DUP: total=51.19MiB, used=128.00KiB
GlobalReserve, single: total=3.25MiB, used=0.00B
// snapshotを作成する
$ sudo btrfs subvolume snapshot /mnt/sv1 /mnt/sv1.snap
$ btrfs filesystem df /mnt
Data, single: total=100.62MiB, used=10.06MiB
System, DUP: total=8.00MiB, used=16.00KiB
Metadata, DUP: total=51.19MiB, used=144.00KiB
GlobalReserve, single: total=3.25MiB, used=0.00B
// subvolume内をいじる
$ rm data
// snapshotは残っている
$ ls /mnt/sv1.snap/
data
$ btrfs filesystem df /mnt
Data, single: total=100.62MiB, used=10.06MiB
System, DUP: total=8.00MiB, used=16.00KiB
Metadata, DUP: total=51.19MiB, used=144.00KiB
GlobalReserve, single: total=3.25MiB, used=0.00B
// 弄ったsubvolumeにsnapshotを差し替える
$ sudo btrfs subvolume delete /mnt/sv1
$ sudo btrfs subvolume snapshot /mnt/sv1.snap /mnt/sv1
$ ls /mnt/sv1/
data

subvolumeのsnapshotをとって、それからまるっと書き戻す、みたいなことができるようになった。

1本追加してRAID1にする(メタデータもRAID1)


$ sudo btrfs device add /mnt/sdc /mnt
$ sudo btrfs filesystem show /mnt
Label: 'tank'  uuid: ~略~
        Total devices 2 FS bytes used 10.20MiB
        devid    1 size 1.00GiB used 238.38MiB path /dev/sdb
        devid    2 size 1.00GiB used 0.00B path /dev/sdc
// まずbalance
$ sudo btrfs balance start /mnt
// metadataがDUPなのでRAID0に変更ついでにbalance
$ sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
$ btrfs filesystem df /mnt
Data, RAID1: total=416.00MiB, used=10.12MiB
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=208.00MiB, used=160.00KiB
GlobalReserve, single: total=3.25MiB, used=0.00B
$ sudo btrfs filesystem show /mnt
Label: 'tank'  uuid: ~略~
        Total devices 2 FS bytes used 10.30MiB
        devid    1 size 1.00GiB used 656.00MiB path /dev/sdb
        devid    2 size 1.00GiB used 656.00MiB path /dev/sdc

usedが増えすぎてる気がしてならない…が、dconvertmconvertを外してbalanceしても240.00MiBと448.00MiBなので、似たようなものか?raid1指定して再度balanceすると使用量が同じになったので間違っていなさそう(ふんいき)

1本壊れた想定で、差し替える

仮想マシンの設定でHDDを1本取り除いておく(そのままだと起動できないので、fstabから自動マウントしないようにしておくか、マウントオプションにdegradedを追加しておく)

$ sudo btrfs filesystem show
warning, device 1 is missing
Label: 'tank'  uuid: ~略~
        Total devices 2 FS bytes used 10.30MiB
        devid    2 size 1.00GiB used 656.00MiB path /dev/sdc
        *** Some devices missing
// 強引にmount
$ sudo mount -o degraded /dev/sdb /mnt
// デバイスを取り除く
$ sudo btrfs device delete missing /mnt
ERROR: error removing device 'missing': unable to go below two devices on raid1

RAIDを組んでいる時に、必要台数を下回ることはできないエラー。RAID1なら2台を下回ってはいけない。Using Btrfs with Multiple Devices – btrfs Wikiによると、とにかく1台追加してからdeleteしろとのこと。

$ sudo btrfs device add /dev/sdb /mnt
$ sudo btrfs device delete missing /mnt
$ sudo btrfs balance start /mnt
$ sudo btrfs filesystem show
Label: 'tank'  uuid: ~略~
        Total devices 2 FS bytes used 10.27MiB
        devid    2 size 1.00GiB used 416.00MiB path /dev/sdc
        devid    3 size 1.00GiB used 416.00MiB path /dev/sdb

2本追加して、4本で構成する

あとはもう同じようにやるだけ。

$ sudo btrfs filesystem show
Label: 'tank'  uuid: ~略~
        Total devices 2 FS bytes used 10.27MiB
        devid    2 size 1.00GiB used 416.00MiB path /dev/sdc
        devid    3 size 1.00GiB used 416.00MiB path /dev/sdb
$ sudo btrfs device add /dev/sdd /dev/sde /mnt
$ sudo btrfs balance start /mnt
$ sudo btrfs filesystem show
Label: 'tank'  uuid: ~略~
        Total devices 2 FS bytes used 10.27MiB
        devid    2 size 1.00GiB used 288.00MiB path /dev/sdc
        devid    3 size 1.00GiB used 288.00MiB path /dev/sdb
        devid    4 size 1.00GiB used 416.00MiB path /dev/sdd
        devid    5 size 1.00GiB used 416.00MiB path /dev/sde

同じ使用量のセットが2つあるのでうまくいってそう。

1本壊れた想定で、差し替える

今や4台あるので、btrfs device delete missingして、差し替えのストレージをbtrfs device addするだけ。

1本を大容量のものに差し替える


$ btrfs filesystem usage /mnt
WARNING: cannot read detailed chunk info, per-device usage will not be show, run as root
Overall:
    Device size:                   4.00GiB
    Device allocated:              1.38GiB
    Device unallocated:            2.62GiB
    Device missing:                4.00GiB
    Used:                         20.66MiB
    Free (estimated):              1.71GiB      (min: 1.71GiB)
~以下略~
$ btrfs device delete /dev/sdc /mnt
$ btrfs device add /dev/sdf /mnt
$ btrfs filesystem usage /mnt
WARNING: cannot read detailed chunk info, per-device usage will not be show, run as root
Overall:
    Device size:                  11.00GiB
    Device allocated:              1.69GiB
    Device unallocated:            9.31GiB
    Device missing:               11.00GiB
    Used:                         20.78MiB
    Free (estimated):              5.21GiB      (min: 5.21GiB)
~以下略~

Device missingは何を表しているのだろうかな~ 取り敢えず使うぶんにはこんくらいあればいいんだろうかな、実際に使うときには、定期的にsnapshotとるとか、色々とメンテが必要なんだろうなとは思いつつ、今回はおしまい どうでも良いが、モニタの液晶とパネルの間に、小さい虫が入ってしまったようで、ず~~~っと画面中でうろうろ動き回っていてつらい。分解するのもしんどいしなぁ。どうするかなぁ

mirakurun-serverのCPUが100%で止まる

PX-Q3PE4で録画機の新調 – お茶漬けぶろぐで組んだ録画鯖なのだけど、最近録画ミスが増えてて、データが作られないまま、録画中リストに残り続けるという感じ。以前もたまにあったのだけど、再起動で直っていた。ところが、ここ数日は、再起動では直らず、リアルタイム視聴も数分で止まってしまう。chinachuのWebフロントも、まともに操作できない(応答が返ってこない)。 なんだろーと思って、録画機でpm2 statusを見ると、どうもmirakurun-serverのCPU使用率がぐんぐん上がっていって、100%になったときに死んでいるみたいだ。 ぐぐるとまず見つかったのがこちら。mirakurun-serverがおかしい – yotayota diary
契機はともかく、IPv6を殺せという事のようだ。mirakurun-serverのログ(/usr/local/var/log/mirakurun.stderr.logとか/usr/local/var/log/mirakurun.stdout.log)を見ていても、同じようなログが出ているわけではないのだけど、ダメ元で入れてみた…が直らず(違う現象だろうし、そりゃそうだろ感しかない) 次に見つかったのはこちら。Liuxでテレビ総合スレ 避難所 2 – 5ちゃんねる
違う構成だけど、ログにとくに怪しいものが出てこないというのも、ブラウザも繋がらないってのも共通。
同スレの>>287-288を見ながら、/usr/local/lib/node_modules/mirakurun/node_modules/aribts/lib/char.jsをてきとうに書き換えてみると、取り敢えずCPUの使用率がぐんぐん上がっていくことはなくなった。 rndomhack/node-aribtsにあるchar.jsを見に行くと、全く同じ修正が入っていたっぽい事がわかる。
確かに、システム組み上げた後、一切触っていなかったしなぁ。一旦動き始めたシステムでも、それなりに更新する必要性を感じた一件でした。

Ryzen 3700Xで一台組んだ

もともとRyzenに興味はあったので、いつかは組むつもりだったのだけど、勢いを得られないまま時間が過ぎていた。という訳で、増税前という小さな勢い付けをして、買ってきた。(10万くらいしか使ってないので、増税前後の差額は2000円くらいしかないのだが…) 構成は以下の通り。RAMは安かった時期に事前購入しておいたものを利用。
CPU:AMD Ryzen 3700X
RAM:CFD W4U2666CM-16G(16GBx2)
M/B:ASUS ROG STRIX B450-I GAMING
GPU:玄人志向 GF-GTX1650-E4GB/OC/DF
SSD:ADATA XPG SX8200 Pro(512GB)
PSU:KRPW-GK550W/90+
CAS:NZXT H210 以下、写真を貼っつけ。
いっしき(ケースうつってないけど)
今回の目玉(ケースが凄いでかい)
エンブレムつき
付属のクーラー。でかい。(デカさの伝わらない写真)
以前購入しておいたメモリ
ママン外観
ママンのオーディオ+M.2は思ったよりも高さがある
初めて買ったA-DATAのSSD。メーカーロゴの鳥さんが見当たらない
SSD中身。ヒートシンクっぽいのがついているが、今回は使わない
粘着テープと言えば3Mってとこある
てきとうに買ったクロシコのGTX 1650
ホコリ防止キャップは付属なし。
取り敢えずで組み込み。
恒例のメモリテスト
メモリテストは購入当時に回していなかったので今回す。今更初期不良があったところで交換対応はしてくれないと思うけど…。8パスくらいしてエラー無しだったのでokとして、早速ArchLinuxのインストールだ。 使用したのは2019年9月版のISO。起動後画面がついたり消えたりだったので(起動中にACPIエラーが出てるのが目についてたので)取り敢えずacpi=offをつけてやったら、無事起動したので良いとしよう。 その後はUEFI+GPTを前提にパーティショニング。パーティショニングはあまり拘らないので、gdiskでGPTなディスクにして、先頭(1番目)にef00な500MB程度のパーティション(つまりはESP)を作成、次(2番目)に全領域を使って/(root)を作成。
そしてフォーマットとマウント。

# mkfs.fat -F32 /dev/nvme0n1p1
# mkfs.ext4 /dev/nvme0n1p2
# mount /dev/nvme0n1p2 /mnt
# mkdir /mnt/boot
# mount /dev/nvme0n1p1 /mnt/boot

素直にインストールしていく。…が、いつも通りgrubを使おうと思ったらCould not prepare Boot variable: No such file or directoryとか言われてうまくいかなかったので(/sys/firmware/efi/efivarsはきちんとマウントしていたし、容量不足というわけでもなさそうだった…なんだったのだ)、systemd-bootを使ってみることにした。追加でインストールするべきパッケージも無いし良い。設定はsystemd-boot – ArchWikiを見れば良い。 あとは適当にGUI環境つくっていって好きに使えばいいね~~~(i3wm入れて動くようになっただけなので、実質的にはまだ作ってる最中だけど) 最近白っつー色が好きで、ケースどれにするかっていうので悩んだところ、NZXTのH210が良いじゃんということで決定。(録画鯖組んだときはIN WINの301だったが、その白もかっこよかった)
CPUにはRyzenのエンブレムステッカーがついてきたのだが、ケースに付けるか悩むところ。
それに、配線類が現状クソてきとうなので、システム構築が完了したなって思ったらきれいに配線し直そうと思うので、そのときにまたそれを追記するかな~

yayでPKGBUILDを編集する

aurヘルパーとしてyayを使っているのだけど、PKGBUILDを編集したいときに、デフォルトでは何も聞いてくれずに進んでいってしまう。かなしい。

$ yay --nodiffmenu --editmenu --editor vim --save

上記を実行すれば良い。引数はそれぞれ、
・PKGBUILDのdiff見る?をオフにする
・PKGBUILD編集する?をオンにする
・編集時のエディターをvimにする
・以上変更を保存する
を意味する。参考[https://github.com/Jguer/yay/blob/6cd47dd83c49689f0bd84c650feea9c71ed1aaf2/cmd.go] もともとはgnome-python-desktopのビルドが通らず、コメント見に行ったらconfigureの引数変えとけって書いてあったので、それがやりたかったのでした。置いてあるPKGBUILD編集してもyay実行するとcheckoutされてしまって…

dconfを使ってみる

EPSON DS-50000とかいうのを買ってみたのだけど(大変高価でした、ノリで購入するべきものではない)、Arch Linuxで使うにはimagescanを入れれば解決するとか。SANE/スキャナー別の問題 - ArchWiki で、こいつはutsushiとかいうフロントエンドを使えと要求するのだけど、微妙に使い勝手が悪い。ひとまず、保存先くらいは毎度初期値じゃなくて前回のものを使ってほしいなぁと思う。 utsushiはGPLv3っぽいので好きに改造して良いはずなので、いじってみた。いじったのはottyajp/utsushi – githubに置いたので、設定をいじる話だけこちらに書く。 schema定義をつくってコンパイルする。この後、dconf-editorでいじれるようになる。

$ cat /usr/share/glib-2.0/schemas/apps.utsushi.gschema.xml
<?xml version="1.0" encoding="UTF-8"?>
<schemalist gettext-domain="utsushi">

  <schema path="/apps/utsushi/" id="apps.utsushi">

    <key type="s" name="previous-path">
      <default>"~/"</default>
      <summary>previous path</summary>
      <description>previous path.
      </description>
    </key>

    <key type="i" name="resolution">
      <default>100</default>
      <summary>scan resolution</summary>
      <description>scan resolution.
      </description>
    </key>

  </schema>
</schemalist>
$ sudo glib-compile-schemas /usr/share/glib-2.0/schemas

C++から設定を読み込んだり書き込んだりする。

#include <gio/gio.h>

// load settings
GSettings *settings = g_settings_new("apps.utsushi");
GVariant *gvar = g_settings_get_value(settings, "previous-path");
gchar *path;
g_variant_get(gvar, "s", &amp;path);

// save settings
GSettings *settings = g_settings_new("apps.utsushi");
string str = "hoge";
GVariant *gvar = g_variant_new_string(str.c_str());
g_settings_set_value(settings, "previous-path", gvar);

本当はこれまで使っていたCanoScan LiDE 210みたいに、simple-scanでほいほい使えるとよかったんだけどなぁ。まぁ、DS-50000のスキャンはマジで早いしきれいだし、ハードウェアに文句は無いけどね。

Windows Terminalを使う

そういえば、とふと思い出してStoreを見てみたら入手できそうじゃないですか。取り敢えず入れてみましょう。
Preview版がインストールできそう
Preview版だけど入手できそう!
ところが、入手ボタンを押しても反応しない…なぜだ?と思ってよくよく見ていると、入手ボタンのちょい下の方に「システム要件を確認」つーのがある。これを押してみると…
システム必要条件
更新しないとダメくさい
最新のを入れましょう…更新ボタンから画面の指示に従っててきとうにアップデート。
Windowsを更新するぞ
さて、次はどの設定を崩してくれるのかな…
更新が完了するとインストールできるようになるので(なんだかんだ1時間くらいかかった気がする)ぶち込み。 背景がいじれるらしいのでやってみる。以下みたいなノリでprofiles.jsonの好きなprofileに書き加えて保存すると、即時適用される。

"backgroundImage": "C:\\temp\\bg.bmp",
"backgroundImageOpacity": 0.75,
"backgroundImageStrechMode": "fill",

背景画像を設定
文字色がアウツッ
てきとうにいじって、WSLなUbuntuで、文字が見えなくもないColor schemeに変えて、アイコンを変えたのが以下。
見えなくもないColor shemeとそれっぽいアイコン
背景画像指定を切って、useAcrylicをtrueにすれば、背景が透けてウィンドウの向こうが見えたりもする。
背景が透けて奥が見える
背景が透けて奥が見える
なんかいろいろ弄れそうなのだけど、設定について解説してるとこがあんま見当たらなくて(ジェネリックなネーミングなので検索がクソめんどい)面倒だったので、以上。

ArchLinuxでAndroidビルド

久々にAndroidビルドの需要が自分の中で高まった。何年も前にP-01D向けCyanogenmodのビルドにチャレンジした事はあるが、その時のソースコードは人の作ったものだったので、今回は自分でやってみたい。自分で試行錯誤したい。 大抵Ubuntu向け記事ばかりだが(そもそも公式の文書がUbuntu向け)急にUbuntuホストを用意するのも面倒。手元のArchLinuxでそのままやりたい。というわけで、一先ずソース修正の類は何もせず、Pixel用でビルドしてみる。 それっぽいパッケージ群のインストール。必要なもののみかどうかは自信無い。

$ yay -S base-devel
$ yay -S git gperf zip curl zlib lib32-glibc ccache mesa libxslt unzip jdk8-openjdk rsync
$ yay -S multilib-devel # lib32-ncurses5-compat-libsに必要
$ yay -S lib32-ncurses5-compat-libs # 実際必要かどうかは不明
$ yay -S ncurses5-compat-libs
$ yay -S python2

repoコマンドのインストール、pythonリンク作成、git初期設定。

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ ln -s /usr/bin/python2 ~/bin/python
$ ln -s /usr/bin/python2-config ~/bin/python-config
$ git config --global user.email "hoge@fuga.com"
$ git config --global user.name "hoge"

Androidソースコードの入手。バージョンは8.0.0の最新にしてみる。

$ mkdir ~/git/aosp/android-8.0.0_r36
$ cd ~/git/aosp/android-8.0.0_r36
$ repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r36 # すぐ終わる
$ repo sync # めっちゃかかる

ビルド。

$ source build/envsetup.sh
$ lunch # 好きなデバイスを選択。今回はsailfish向けにしていた
$ make -j2

エラー出るので修正。pythonが無いよって言うけど、まさかパス決め打ちじゃないよね…?

/bin/bash: prebuilts/clang/host/linux-x86/clang-3859424/bin/clang++: /usr/bin/python: bad interpreter: No such file or directory
$ cd /usr/bin
$ sudo ln -s /usr/bin/python2 python
$ sudo ln -s /usr/bin/python2-config python-config

Jack serverと通信できないみたいなエラーが出るのでぐぐって対応。

Communiction error with Jack server (52). Try 'jack-diagnose'
$ ./prebuilts/sdk/tools/jack-admin stop-server
Stopping background server
No Jack server running. Try 'jack-admin start-server'
$ ./prebuilts/sdk/tools/jack-admin start-server

メモリがいっぱいになる件。

Out of memory error (version 1.3-rc6 'Douarn' (4418000 22a11d4b264ae70e366aed3025ef47362d1522bb
by android-jack-team@google.com)).
Java heap space.   
Try increasing heap size with java option '-Xmx<size>'.
$ ./prebuilts/sdk/tools/jack-admin stop-server
Stopping background server
$ ./prebuilts/sdk/tools/jack-admin cleanup-server
$ export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
$ ./prebuilts/sdk/tools/jack-admin start-server

あとはビルドが終わるまでひたすら待ち。Pixelデバイスが手元に無いので動作確認すら取れない。どうしよう…買うか…?

aurヘルパーyayの導入

長らくyaourtを使っていたが、どうもディスコンのようなので。

$ mkdir ~/yay &amp;&amp; cd ~/yay
$ git clone https://aur.archliunx.org/yay.git
$ cd yay
$ makepkg -si

基本的にはこれで終了。もし既にaurヘルパーがいるなら、それを使うとらくちん。

$ yaourt -S yay
$ yay -Rs yaourt

新規環境でいじるときとか、base-develを入れ忘れていると「Cannot find the strip binary required for object file stripping.」とか怒られるのでお気をつけて。

LinuxでGoogle Keepのデスクトップクライアント

あると便利かな〜と思って検索していたら発見したので使ってみる。 https://github.com/andrepolischuk/keep Releaseにあるバイナリを使ってもいいんだけど、折角なので(?)cloneして使ってみる。

$ git clone https://github.com/andrepolischuk/keep.git
$ ./keep
$ npm install
$ npm start

うまくいけばこれで起動できる。んで、あとは普通に使える。 さて、このままだと起動しにくいので起動スクリプトでも用意しておこう。ランチャでdmenuを利用しているので(Super+Rでdmenuを起動するようにしてあるので諸々の起動が楽)、パスが通った場所に起動スクリプトを置いておけると便利だ。

$ cat /usr/local/bin/keep-client
#!/bin/bash

cd ~/keep
npm start

わざわざ記事に書くまでもない感じの内容だった…。

ConoHaのVPSでArchLinuxを使う

そもそもの動機は単純で、PCを持ち込んではいけないというルールがある現場におり(仕事)、昼休みを無為に過ごす事しかできない…しかし、「PC」なので、あぁスマホやタブレットは持ち込み可なんですね、という話になる。事実スマホは使い放題だし(それはそれで問題があるような気もする)タブレットを弄っている人は見たことないけど、iPad弄ってたって怒られなかった さて、iPadが現場で使えるという事は確認できたが、iPadで直接開発作業を行うのは厳しい。お手軽に使えるターミナルエミュレータはパッと探した所見つからなかったし、何より自分はいまのとこNode.jsを使いたいので厳しい。という訳で、出先から適当なサーバにSSHで接続して開発をすれば良いのだ!という展開になる。 適当なサーバという事で、まぁ真っ先に自宅サーバが候補に上がるのだが、どうせならやったこと無いことしよ!と思い立って、VPSにを利用することにした。必要になったら好きにスペック上げ下げできるみたいだし、ストレージ欲しいな〜〜〜〜と思ったら適当にオブジェクトストレージ契約したりすれば良いのだ。 VPS業者の選定だけど、何も考えずサクッとArchLinuxが使える、ということでConoHaに決定。Vultrとかは自前でISOイメージうpしてそこから〜とかやれるみたいだが、やはり楽ちんである事は大切だよ。 さて〜、画面に従っててきとうに作ればもう使える状態のArchLinuxが出現するので、状態確認とか初期設定を行っていこう。今回は1GBプランを利用。ISOは20180914版。 自分でインストールする時って、パーティショニングとロケール、タイムゾーン、ブートローダあたりが最小限かな?というわけでその辺の現状をまずは見てみる。

# lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sr0     11:0    1 1024M  0 rom

sr1     11:1    1  482K  0 rom

vda    254:0    0   50G  0 disk

├─vda1 254:1    0    2M  0 part

└─vda2 254:2    0   50G  0 part /

# mount | grep vda
/dev/vda2 on / type ext4 (rw,relatime)
# free -h

              total        used        free      shared  buff/cache   available

Mem:          988Mi        48Mi       762Mi       0.0Ki       178Mi       797Mi

Swap:         2.0Gi          0B       2.0Gi

容量関係を見ると、/に全振り。ファイルシステムはext4だそうだ。GUIも何も無いので起動直後のメモリ使用量は48MiBとマジで軽い。メモリがそんなに無いからなのか、Swapは2倍量確保している。上のプランだとまた違う容量になるのかは不明。

# cat /etc/locale.gen | grep -v ^#

en_US.UTF-8 UTF-8

# ls -l /etc/localtime

lrwxrwxrwx 1 root root 30 May 29  2015 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo

# uname -a

Linux archlinux 4.18.6-arch1-1-ARCH #1 SMP PREEMPT Wed Sep 5 11:54:09 UTC 2018 x86_64 GNU/Linux

ロケールはen_US.UTF-8のみなので、ja_JP.UTF-8も有効にしておくか。取り敢えずssh鍵の設置が終わってからで…。タイムゾーンはデフォルトでAsia/Tokyoになっている。ま、VPSそのものが東京リージョンだし、これで変なとこだったら意味わからんでしょ。ついでにカーネルバージョンも確認しておいた。あんま気にしてないけど。

# ls /boot
grub  initramfs-linux-fallback.img  initramfs-linux.img  vmlinuz-linux

最後に、ブートローダはgrub(grub2)でした。 以上、取り敢えず状態確認はお終い。次は初期設定を行うぞ。一般作業ユーザを作って、以降はそこから作業しよう。んで、さっさとSSHでつなげるようにしよう。
Web上のコンソールからではしんどい
Web上のコンソールからではしんどい

# useradd -m -g wheel tea
# passwd tea
# pacman -S sudo
# visudo
# su tea
$ id
uid=1000(tea) gid=10(wheel) groups=10(wheel)

以降一般ユーザで作業…と言っても、あとは普通のサーバだと思えば、素直にセットアップすれば宜しい。というわけで以下略。な〜んにも難しいことや新しい事はなかった。 今後ずっとこれを使っていくかはちょっと微妙。お金が貯まったらRyzenで1台組もうと思っているので、それで代替しようかな〜と思っている。やっぱ手元にマシンがあった方が楽しいよ。