Alpine Linux on WSL2 と nodenv と Node.js

nodenvを使ってAlpine Linux on WSL2にnodeをインストールする方法。

バイナリでは動かない

事前にanyenvのインストールと、anyenv経由でnodenvをインストールしておく。

nodenv install 18.17.1

上記コマンドを実行してnodeをインストールしnode -vを実行してみるものの

/home/username/.anyenv/envs/nodenv/versions/18.17.1/bin/node: fcntl64: symbol not found

このようなエラーになってしまって動かない・・・。

glibcではなくmusl libcを使う

Alpine Linuxはmusl libcを使っているので、glibcコンパイルされたnodeのバイナリは動かないのだった。Alpine Linuxを常用したことがなかったので、今まで気にしたことがなかった。

知見が得られたことはよかったが、ちょっと恥ずかしい。

ソースからコンパイルする

nodenvはソースコードをダウンロードしてコンパイルすることも可能なようだ。ただコンパイルに必要なコンパイラやパッケージがなにも入っていないので、それらを事前にインストールしてからコンパイルを行う。

sudo apk add gcc g++ make linux-headers python3 --no-cache
nodenv install -c 18.17.1

およそ30分ほどかかってコンパイルとインストールが完了する。

node -v
v18.17.1

今度は無事に動く。

ARMアーキテクチャ搭載PCを求めて・・・

Apple M2 Proチップ搭載MacBook Proのあまりの発熱の少なさに驚愕した影響で、開発向けのArm搭載WindowsノートPCを探し求めた。

Snapdragon 8cx Gen 3搭載機に興味があるが、実用的な機種はほとんどなし

Windows11ノートPCでArm搭載機種となると選択肢が狭い。自分が調べた範囲だと、『ThinkPad X13s』しかないのではないかと思う。

www.lenovo.com

タブレットPCまで範囲を広げると『Surface Pro 9』が選択肢にあがってくるが、メモリ8GBでSSD256GBとちょっと心もとない。それにタブレットPCはキーボードをつけてもノートPCっぽく作業できない点がつらい*1

www.microsoft.com

こうなると選択肢としてはThinkPad X13s一択だが、メモリ16GBという点が気になる。コンテナ起動して、Adobe XD起動して、Visual Studio 2022起動して、その他いくつかアプリ起動してといった状況では、CPU側がもたずメモリ関係なしに性能低下しそうな気もしている*2*3が、ひとまず開発向けとして役目を果たせそうである。

メモリより気になるのは、ThinkPad X13sに搭載されているSnapdragon 8cx Gen 3の発熱。性能よりも発熱が気になってしまう。Core i7-1185G7とSSD1TBを組み合わせたThinkPad X1 Carbon Gen 9は(室温33度の部屋において)恐ろしく熱い。ググった限りだと、Snapdragon 8cx Gen 3の発熱問題に関する記事はなさそうなので、ちょっと欲しくなってきた。

x64からArm64に切り替えることへの不安を解消する

ThinkPad X13sの仕様すべてに満足しているわけではないが、発熱と引き換えで妥協できそうな点は多い。しかし次の気になる点としてあがるのはアプリケーションや開発言語、各種ミドルウェアのArm64対応状況である。

最近、メジャーなアプリケーションや開発言語およびそれに関連するミドルウェアのArm64対応は進んでいるようだが、それでも自分が普段から利用しているものに関しては未知な部分がある点は否めない。

ThinkPad X13sを買ってはみたものの必要なものが動作せず、結局お金の無駄づかいになってしまっては困る。もっと選択肢が広がるまで待つべきか、Arm版Windowsが一般的になるまで待つか、そんなことを考えているときに見つけたのがMicrosoftから販売されている『Windows 開発キット 2023』。

www.microsoft.com

スペックは

  • Snapdragon 8cx Gen 3
  • メモリ 32GB
  • Windows 11 Pro
  • SSD 512GB

と開発向けとしては十分。

これならx64からArm64へ乗り換えるにあたって、以下の検証を実施できそうだ。

  • 各種ソフトウェアのArm64対応状況
  • 開発環境としての性能
  • 開発時の発熱

即購入した。また今後登場が期待されるSnapdragon 8cx Gen 4に向けての準備もできそうだ。

Chocolateyを捨て、Ubuntuを捨て、新たな環境にチャレンジ

Windows 開発キット 2023が届いたので、最低限これがあれば問題ないだろうという開発環境を作った。

winget

まず必要なソフトウェアのインストールはwingetを使うようにした。

learn.microsoft.com

これまでChocolateyを利用していたが、商用色が出てきたのとパッケージ検索への導線が少しずつトップページから遠ざかっていくことにいら立ちを感じていたので、これを機に利用をやめた。

wingetだとストアアプリまで対象とできるので便利だ。

Alpine Linux on WSL2

これまでなんとなく使っていたUbuntu。ディスク容量節約にならないかと思い、Alpine Linuxを使ってみることにした*4

learn.microsoft.com

www.alpinelinux.org

作り方としては

  1. Alpine Linuxダウンロードサイトにある『MINI ROOT FILESYSTEM』からaarch64版をダウンロードする
  2. ダウンロードしたファイルはtarファイル化しておく
  3. wsl --import <DistroName> <InstallLocation> <InstallTarFile>書式を使ってインポートする
    1. 自分は以下のコマンドにした
    2. wsl --import AlpineLinux C:\Distro .\alpine-minirootfs-3.18.3-aarch64.tar
    3. C:\Distroにvhdxファイルが作成される

という手順になる。

なおルートユーザーしかいないので、デフォルトユーザーの変更は/etc/wsl.confを作ってその中に定義しておく。sudoなんかもないので、先にルートユーザーで必要な環境を整えてから、デフォルトユーザーの変更を行うとよい。

ちなみに/etc/profileexport PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"がある影響で本来のPATHが上書きされている。これだとWindows側のPathを参照できず相互運用に支障をきたすので、これをコメントアウトしてwsl --shutdownする。

Oh My Posh

ターミナル見た目変更のため。PowerShellとWSL2、両方にインストール。

ohmyposh.dev

Visual Studio 2022など

Visual Studio 2022や.NETはArm64対応しているので問題なくインストールできる。WPFアプリをプラットフォームx86でビルドしてみたが問題はなさそうだ。ビルドしたアプリも起動する。

marketplace.visualstudio.com

惜しむらくはInstaller Projects 2022がArm64非対応\(^o^)/オワタ

https://developercommunity.visualstudio.com/t/Microsoft-Visual-Studio-Installer-Projec/1381244

こちらで対応を求める声があがっているが、2年経過しても対応していないところを見ると期待できないか・・・。

docker関連

wiki.alpinelinux.org

上のドキュメントを参考にして、以下の設定を行う。

# rc-serviceを使うためにOpenRCインストール
sudo apk add openrc --no-cache
sudo mkdir /run/openrc
sudo touch /run/openrc/softlevel

# dockerインストール関連
sudo apk add docker --no-cache
sudo addgroup username docker
sudo rc-update add docker default

# 以下rootless用の設定
echo 'https://dl-cdn.alpinelinux.org/alpine/edge/community' | sudo tee -a /etc/apk/repositories
sudo apk update
sudo apk add docker-rootless-extras --no-cache
sudoedit /etc/rc.conf
これ追加 -> rc_cgroup_mode="unified"
sudo rc-update add cgroups

# Docker composeインストール
sudo apk add docker-cli-compose --no-cache

そしてdocker起動を試みるがすでに起動しているという警告が発生。

sudo rc-service docker start
* WARNING: docker is already starting

ステータスを確認すると停止済み。謎。

sudo rc-service docker status
 * status: stopped

/etc/wsl.confに設定が足りていなかったようなので、sudoedit /etc/wsl.confで以下を追加。

[boot]
command = "/usr/bin/env -i /usr/bin/unshare --pid --mount-proc --fork --propagation private -- sh -c 'exec /sbin/init'"

再度、起動を試みるがネットワークエラーのため起動できず。

sudo rc-service docker start
 * Starting networking ...
ifquery: could not parse /etc/network/interfaces
 * ERROR: networking failed to start
 * ERROR: cannot start docker as networking would not start

どうやらネットワーク設定が足りていなかったらしくsudoedit /etc/network/interfacesでファイルを作成して以下を追加。

auto lo
iface lo inet loopback

作成後にsudo rc-service networking restartしてネットワークを再起動した後にdockerを起動したら無事に起動した。

sudo rc-service docker start
 * /var/log/docker.log: creating file
 * /var/log/docker.log: correcting owner
* Starting Docker Daemon ...

それでこのあと、Docker composeを利用している適当なリポジトリdocker compose up -dを実行するもCannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?が発生し途方に暮れていたが、Windowsを再起動したら解決した。

終わりに

dockerが一番苦労した。

ちなみに解決していない問題としてanyenvnodenvによるnpmコマンド実行が残っている。

node -v
/home/username/.anyenv/envs/nodenv/versions/18.17.1/bin/node: fcntl64: symbol not found

上記のエラーが発生してしまい、yarnがインストールできずに進められない。

追記:解決

単純にコンパイラの違いからくるエラーだったようだ。Alpine Linuxはmusl libcを使ってコンパイルするが、ダウンロードしてくるバイナリはglibcを使ってコンパイルしたもの。

nodenvを利用したコンパイル手順を記事にしたので、同じ境遇の方は参考にしてほしい。

jupitrisonlabs.hatenadiary.jp

ちなみにコンパイル中のWindows 開発キット 2023は熱かった。ファンレスからしょうがないのかもしれない。ファンが備われば温かいぐらいに熱は下がるのかもしれない。

*1:膝に置けないので机必須

*2:漠然とした感想だが

*3:ちなみに32GB仕様のThinkPad X1 Carbon Gen 9でサーマルスロットリングが発生していて性能低下中

*4:結局dockerを使うと使用量が激増するのだが・・・

【FF11】プロマシアミッションを改めて遊んでみた感想

2010年6月19日にプロマシアミッション をクリアしてから13年、倉庫キャラで改めてプロマシアミッションを進めてクリアした。

星唄ミッション進行ついでに始めたプロマシアミッションだったが、せっかくなので最後まで進めてみようと思った。13年前にクリアしたときは、ただただミッションクリアに主眼を置き、ミッションそのものを楽しむ余裕がなかったからだ。

全体を通して、ストーリー自体に難解さはあるものの、ジラートミッションに比べて世界観が壮大でストーリーに魅力があり、とてもやりがいのあるミッションに感じた。ちなみにプロマシアミッションを進める前にジラートミッションを進めてクリアしたのだが、ジラートミッションはあっという間に全編が終わり、ストーリーに物足りなさを感じた。ただジラートミッションは三国ミッションから続いていると思えば*1、それなりにストーリーは長いのかもしれない。

今回、ジョブは赤99/黒49、IL装備なしで星唄の煌めき【三奏】まで所持した状態で進めた。道中、絡まれる敵のいる箇所やノートリアスモンスターフェイスの援助付きで進行した。フェイスを出さずに不用意に???にふれてノートリアスモンスターが出現、そのままあえなくやられる場面がいくつかあった。

いまではレベル制限エリアがなくなり、フェイスを同伴すればソロでも進行は容易になったが、やはり面倒に感じる箇所はいくつかあった。

13年前に比べたら、準備時間がなくほぼストーリーを進めていくことに集中できるため、進行にかかる時間が大幅に減った点は良かった。でも、ストーリーが複雑なので(時間を開けずに進行したとしても)前後関係の記憶があやふやになり、ストーリー全体をうまく把握しきれなかった。

13年前時点でもっとも難度が高く、お手伝いすることすら嫌がられたプロマシアミッション。改めて遊んでみると、ヴァナ・ディール全土そして、そこに暮らすいろいろな人々が絡むストーリーがとてもよく、進行とともに新エリアが開放される達成感、行く手を阻むやっかいなモンスター、後日談的なクエスト、最後の最後はジラートミッションを含めたプロマシアミッションの総決算である世界に在りて君は何を想うのか?で、両ミッションに出演したキャラクターたちが集まって最高に盛り上がりとても良かった。これまでにリリースされたすべてのコンテンツの中で自分は1番よかったように思う。

今現在で遊びやすくなったものの、難度がかなり下がってしまったので、レベル制限エリアを復活させた上で、フェイスとともにソロでも進行できるようにすればほどよい緊張感あふれる難易度に変化して楽しいかもしれない。

*1:一応ミッションの始まりで、闇王ミッションから続いているということがわかる

FINAL FANTASY XI 21周年と私

www.playonline.com

21周年おめでとうございます🎉

お祭り

2002年5月16日、当時の記憶は薄れているが2ちゃんねるの実況板を見ながらリトライ祭りに参加した。

この日を迎える前には、PlayStation BB Unitが予約できないとか、サービス開始までに届いたとか届かないとか悲喜こもごもな祭りで盛り上がっていたことを覚えている。自分はたしかBIGLOBEYahoo!BBPlayStation BB Unitを予約し、ギリギリサービス開始前に届いて歓喜していた*1

リトライ祭りを乗り越えた先には、これまでのシリーズと一風変わった雰囲気のファイナルファンタジーが待っていた。

  • タイトルで流れるBGMが耳慣れたプレリュードではない
  • キャラクターの雰囲気がこれまでの作品と違う*2
  • 画面越しに見る世界が現実寄りでゲームらしくない

などなど、違和感を感じたことは覚えている。それでもやはり期待は高まっており、ワクワクしながらキャラクター作成をしたものだ。そしてご多分に漏れずバス出身金髪ヒュム♂F4ナイト実名系で始めたのだった*3*4*5

短い間だったけど楽しかった

ツェールン鉱山で迷ったり、ミッション攻略のためにパーティ組んでパルブロ鉱山に入山するも、エレベーター付近で大量のクゥダフに絡まれて大トレインが発生し阿鼻叫喚になったり*6バルクルム砂丘のコウモリに絡まれて死んだり、サポートジョブ取得クエストで必要な血染めの衣取得のために深夜までブブリム半島Bogyをパーティメンバーと狩り続けたりと、今でも当時の記憶が蘇るほどに楽しんでいた。

ただなかなかレベルが上がらない大変さ、思うようにミッションを進められないもどかしさなどがあったのと、実況板でたびたびクソゲー呼ばわりする投稿を見かけていたこともあってゲームに対するネガティブなイメージを持つようになっていた。いつしか自分も同じように『クソゲーだなこれ』と思うようになってからは、ネガティブ・キャンペーンの投稿を好んで閲覧するようになり、次第にゲームに対するモチベーションが下がっていった。

そしてサービス開始から1ヶ月ちょっとが経過したころ、ゼーガムの丘でソロレベル上げをしながらゲームをやめることを決意。蜂やゴブリンを眺めながらログアウト*7してヴァナ・ディールに別れを告げたのだった。7・2パッチが適用される前、システムのことなどほとんど理解していなかったが、ある意味で幸せな状態で離脱できたのかもしれない。

21年越しのM2-3クリア

時は流れてFF11のことなどすっかり頭から消え去っていたある日、仕事先で偶然、FF11について社内ポータルサイトに投稿されていた記事を見つけた。2007年ごろの出来ごと。投稿内容はバルクルム砂丘でのレベル上げパーティに関することだった。

懐かしいなー、また遊んでみようかなーなどと考えたが、一人暮らしだったので生活費から毎月1,400円ほどのゲーム料金を支払うのがためらわれ、そのときは諦めた*8

その1年後、家賃の安い賃貸へ引っ越したこともあり、FF11復帰の機運が高まったので6年ぶりに遊ぶことにした。ただ、キャラクターを削除していたことと、まだキャラクター復活サービスがなかったので新規作成して再開。いろいろ変わったんだなーと思いながらソロレベル上げ。そしてこれに限界を感じ、リンクシェルメンバーを募集していたLSに入れてもらったのだった。

復帰から少し経過したころにキャラクター復活サービスが始まり、倉庫キャラの必要性を感じた時期と重なったので、2002年5月16日のあのときに作成したキャラクターを復活させ倉庫キャラとしたのだった。

復活させたときは本当に感慨深かった。樹の下でひっそりログアウトしたんだなーとか、(ジョブレベルが黒13/サポ白8だったので)昔はサポ取りにレベル制限なかったんだよなーとか思い出していた。

そして今、倉庫キャラと化していた初代キャラクターのレベル上げと星唄ミッションを始めた。そこで気がついたのが、三国ミッションドラゴンミッションで止まっていたこと。これまた懐かしい思い出が蘇る。

初めて踏んだラテーヌ高原の大地、やっとの思いで到達したサンドリア、そしてドキドキしながら入ったゲルスバ野営陣。再開してみてわかったことは、Warchief Vatgit討伐までは至っていなかったということ。おそらく一緒に戦ってくれるメンバーを集めることができずに諦めたのだろう。改めて感慨深いものがあった。

そして先ほど、闇王ミッションを終えることができた。長い長い年月が経過した。あのころ一緒に冒険した人はいまごろ何をしているのだろう。思えば2008年に復帰したとき、フレンド登録していた方からメッセージが届いていることに気づいた。日付は辞めたあとの2002年7月。たしか3通ぐらい届いていた気がする。『また遊ぼう!』とか近況を尋ねる内容だとかそんな感じだったと思うが、当時は何も告げずに辞めたので申し訳ない気持ちになったものだった。

初期キャラクターのワールド

そういえば2002年5月16日に降り立ったワールドはどこだったのだろうと思い、FFXIAH.comを利用して推理してみることにした。

初期ワールドは以下の20ワールド。

なんとなくSirenだったような気がしたのだが、当時のキャラクター名で検索したところ2008年までの取引履歴が存在したので違ったようだ。ちなみに競売所2002年6月11日のバージョンアップで始まったそうなので、おそらく利用していない可能性が高いと判断。取引履歴の存在しないワールドが該当するだろうということで抽出したのが以下のワールド。

  • Bahamut
  • Shiva
  • Titan
  • Ramuh
  • Carbuncle
  • Fenrir
  • Sylph
  • Ifrit
  • Diabolos
  • Caitsith
  • Unicorn

さらにフレンド登録していた方のキャラクター名で検索し、自身の取引履歴の存在しないワールドかつフレンド登録していた方が在籍したワールドが該当ワールドだろうということで抽出した結果が以下のワールド。

  • Shiva
  • Titan
  • Carbuncle
  • Sylph
  • Diabolos

うーん・・・Diabolosではないと確信していて、もしかしたらShiva、Titanあたりだったのかもしれない*9。ちなみに現在Bahamutワールドで遊んでいるが、キャラクター復活したときに『既にその名前は使われています』と表示されて以前のキャラクター名が使えなかった。

昔と今

改めてほぼ初期状態のキャラクターを使ってミッションを進めているが、遊びやすくなったと感じる。やはり移動手段が多彩になった点が本当に良い。

Home Pointワープ、Survival Guideワープ、マウントのおかげで、ミッションやクエスト進行に必要な地点への移動が格段に便利になり、モンスターに絡まれる危険性や移動に時間がかかる面倒くささが減ったおかげでゲーム本編そのものに集中しやすくなった。

またバトルフィールド付近にHome Pointが設置されたおかげで、仮にBF戦攻略に失敗しても再挑戦しやすくなったのはとてもありがたい*10

いっとき、2010年6月22日のバージョンアップで「プロマシアの呪縛」エリアのレベル制限撤廃されたときは、これからプロマシアミッションを攻略する人は苦労しなくてずるい!などと思っていたものだが、今ではこの修正をありがたく思う。旬の過ぎたコンテンツは単なる通過点に過ぎないのだ。

今からFF11を始めようと思う人はほぼいないと思うが*11、これまで遊んだ経験のある人ならウェルカムバックキャンペーンを利用して楽になったヴァナ・ディールを体験してほしい。

最後に

いつか終わりを迎えるFF11。そのときもまたサービス開始のころを思い出すのだろう。そう考えると少しウルっとした。

*1:isaoこねー!とか見かけた気がする

*2:ゲームキャラクターぽくない

*3:金髪ヒューム男F4にしたことは、この数年後にキャラクター復活サービスでわかった

*4:自分は黒&自身のあだ名にした

*5:前作のティーダをイメージしていたので、金髪ヒューム男F4を選んだのだと思う

*6:死んだときの経験値ロストペナルティを受けたくないので、他のメンバーを見捨ててエレベーターに乗って逃げた

*7:キャラクター復活後にこの場所でログアウトしていたことがわかった

*8:家賃10万円超えていたので、生活費を支払えなくなることが怖かった

*9:歴代のファイナルファンタジーシリーズに登場していた召喚獣にちなんだワールドだったような

*10:闇王ミッションは失敗してもズヴァール城を最初からやり直しにならなくて助かった

*11:今ならファイナルファンタジーXIV: 新生エオルゼアだと思うが、それでもサービス開始から10年が経とうとしているので古くなったよなあと思う

Andaseatの最高峰モデル「Kaiser3」の感想

www.andaseatjapan.com

人生初のゲーミングチェア。デスクワーク主体のため、いつかは良い椅子を買おうと考えていた。そしていろいろ悩んだ末にKaiser3を購入した。

まずは結論から

腰痛い。全然体に合わない。

それでいて10万円近く支払っているんだから困った。

「高いから良い」というものではないということを身をもって体験した。

中古のオフィスチェアで十分だと思った。

続きを読む