色々なメモ。

私的メモ。プログラミングとか。主に自分用まとめ。

Windows上のssh-agentをWSL2から利用する

Windows上とWSL2上で重複して鍵管理したくなかったので調べた

0. 最初に参考記事

ほとんど以下のページに記載されているのそのまま。

github.com

↑は元々WSL1で同様のことを実現するためのツールらしいが(自分は使ったことないので詳しくない)、WSL2だと代わりに以下の方法でできると記載がある。

1. ssh-agentの立ち上げ(Windows

Windows上でPowerShellを管理者権限で起動し、以下を叩いてssh-agentを自動起動するように設定する

Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent

2. npiperelayのダウンロード(Windows

以下からダウンロードして、Windows上の適当なパスに置く(あとでWSL2側から参照するので参照しやすい位置がよい)

github.com

3. socatのインストール(WSL2)

WSL2上にsocatをインストール。 Ubuntuの場合は以下:

sudo apt install socat

4. .bashrcに設定を記述(WSL2)

WSL2上で、以下を .bashrc に記載:

export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock
ss -a | grep -q $SSH_AUTH_SOCK
if [ $? -ne 0 ]; then
    rm -f $SSH_AUTH_SOCK
    ( setsid socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"/mnt/c/path/to/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent",nofork & ) >/dev/null 2>&1
fi

ここで、忘れずに /mnt/c/path/to/npiperelay.exe をWSL2側から見た npiperelay.exe のパスに直すこと。

あとはターミナルを開きなおすか以下を実行して .bashrc を読み込み。

. ~/.bashrc

使い方

普通のssh-agent同様。 Windows側からでもWSL2側からでも以下で鍵を追加できる:

ssh-add /path/to/id_rsa

そうすると後はWindows側からでもWSL2側からでもssh-agentを利用してssh接続ができる。

まださっき設定して少し試したばかりなので動かなかったら追記する。

注意事項

最初のリンクから転載

SECURITY NOTICE: All the usual security caveats applicable to WSL apply. Most importantly, all interaction with the Win32 world happens with the credentials of the user who started the WSL environment. In practice, if you allow someone else to log in to your WSL environment remotely, they may be able to access the SSH keys stored in your ssh-agent. This is a fundamental feature of WSL; if you are not sure of what you're doing, do not allow remote access to your WSL environment (i.e. by starting an SSH server).

要するにWSL環境によそからアクセスできる状態であれば気を付けましょうという話っぽい。

Tambooruへの新規ログイン及びデータクリア後の再ログインができない不具合を修正しました

以下の不具合の修正直後から、ずっとタイトルのような状態になっていたようです(正確には、ローカルストレージがクリアされた状態でダッシュボードが開けない)

hebogna.hatenablog.com

致命的な不具合。。。

コメント欄でご指摘くださった方ありがとうございました(と言ってもまだ当該の方の事象がこれで解決したか不明ですが)。

自分はずっとデータ削除していなかったので気付かなかったです。

2ヵ月ほど前にTwitterでこちらの不具合を呟いてくれていた方がいたようだけど、エゴサしてないので全然気付かなかった…。問い合わせフォームとか作った方がいいかなあ(問い合わせ用Twitterアカウントも考えたけど、匿名で書けるほうが気楽そう)

Tambooruが2/24前後から使えない状態でした(復旧済み)

Tambooruが2/24前後から使えない状態でした(正確な日時は不明)。 現在は既に修正済みです。

具体的には、2/24前後~2/28未明まで、以下の症状が発生していました。

  • ダッシュボード上で、2/24前後より新しいほうに移動できない(ことがある)
  • 2/24前後以降の投稿をリブログしようとすると、エラーになることがある
    • 未確認ですが、「対象の投稿をリブログしようとすると、実際にはそれと異なる投稿がリブログされてしまう」事象が発生していた可能性があります(もしくは、単にエラーでリブログできていないか)
    • 不安な方は、お手数ですが意図通りの投稿がリブログされているかご確認ください
    • 追記: 改めて確認したところ、おそらく単にエラーになっていたようです。意図と異なる投稿がリブログされてしまっていたことはないと思われます。

原因は、Tumblr側で投稿に付けられるIDの桁数が突然数桁以上大きくなり、javascriptで扱える数値の範囲を超えたためです。

一通り修正を行いましたが、もしまだ問題があるのを発見した方がいれば、ご連絡ください。

Console2 + fish (on WSL)

Windows Subsystem for Linux (WSL)上でfishをインストールしてconsole2から使う。

fishのインストール

WSLのbashを開いて以下でインストール。

sudo apt-add-repository ppa:fish-shell/release-2
sudo apt-get update
sudo apt-get install fish

Console2 の設定

ここから先に進む前に、Console2からfishを開くための設定をする。 Edit -> Settings -> Tabs -> New で、以下を実行コマンドに入れればOK。

C:\Windows\System32\bash.exe --login -c "fish"

fishermanのインストール

fishのプラグインマネージャらしい。

curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs https://git.io/fisher

テーマの変更

最初は agnoster を入れてみたが、何故かエラーが出て使えなかったので、 bobthefish にした。

fisher install omf/theme-bobthefish

ただし、このままだとプロンプトが文字化けしてうまく表示されない。 そのため、Powerlineのフォントを入れる必要がある。

Powerlineのフォントのインストール

以下のページを参考にした。

medium.com

ざっくりまとめると、

  1. 以下をgitでcloneしてくる(このとき、もしbash上でcloneするなら、Windows側から見える位置にクローンすること) GitHub - powerline/fonts: Patched fonts for Powerline users.
  2. Powershellで上記ディレクトリに移動
  3. 以下を順に実行
Set-ExecutionPolicy Bypass
.\install.ps1
ExecutionPolicy Default

これで、必要なフォントがインストールされる。

フォントの設定

実際にインストールしたフォントを使うように設定する。 自分はここがはまりポイントだった。

Console2からフォントの設定をしただけでは上手くいかず、以下の二か所設定する必要があった。

コンソールウィンドウのフォント設定

まず一か所目。

Console2 上でfishを開いたまま、 View -> Console Window からコンソールウィンドウを開く。

出てきたコンソールウィンドウのタイトルバーを右クリックしてプロパティを開き、フォントを「~ for Powerline」と書いてあるもののうちどれかに変える(もしPowerline用のフォントがなければ、一つ前のフォントのインストールが失敗している可能性が高い)。

そのままOKを押す。

Console2のフォント設定

二か所目。

Console2に戻ってきて、Edit -> Settings -> Appearance を開く。

ここで、同様に「~ for Powerline」と書かれたフォントに変える。

これで、Powerlineフォントがうまく表示されるはず。

残課題

gitリポジトリを開いたときに、プロンプトが表示されるまでがやたら長く、使いものにならない…。 ここは引き続き調査する。

(2年半越しに)Tambooruを復旧しました

以前作ったTumblrクライアント「Tambooru」ですが、2015/10/1から使えなくなっていたのを復旧しました。

hebogna.hatenablog.com

突然使えなくなってしまっていて、ご使用いただいていた方々には大変ご不便おかけしました。

使えなくなっていた原因

直接的には、2015/10/1に、使用していた外部のDBサービスがバージョンアップしたのが原因でした。

本来、それに合わせてこちら側のコードで使用しているライブラリもバージョンアップが必要だったのですが、していませんでした。

(その旨を知らせるメールが来ていたんですが、全く気付いていませんでした)

復旧が遅れた背景

今回、2年半以上放置してしまった原因ですが、そもそも落ちていたことに全く気付いていませんでした。 今回、二年半ぶりにTambooruのサイトを開いて、初めて落ちていることに気付きました。

私事になりますが、2015年4月に就職しました。その関係で生活のサイクルが変わり、Tumblrも(Tambooruも)見なくなっていました。

今後の運営について

ひとまず、今後も最低限の運営は続けようかと思っています(といっても、2年半も放置してユーザーも離れていってしまったとは思いますが…)。

ただ、正直あまりモチベはない状態なので、今後どうするかは未定です。

なお、落ちているときは、こちらのブログにコメントいただければ、中の人が気付きやすくなるかとは思います(別途、連絡用のTwitterアカウントを作るかもしれません)。

rust勉強日記(~1/3)

備忘録。

やったこと

  • 「プログラミング言語Rust」の和訳 を読んだ
    • ただし「Nightly Rust」の項は読んでない。
    • 途中で気になった項目などは適宜ググって補充。
    • second edition とどっちを読むか迷ったが、和訳がないのは辛そうだったのでとりあえず初版読んだ。
  • ↑の内容がrust1.6をベースにしているので、最新版との差分を 公式のリリース報告 で追った。
    • 1.6.0と1.22.0の言語仕様上の主な差分(主観)
      • +=-= などの演算子オーバーロード可能に(1.8)
      • 空の構造体の定義方法追加(1.8)
      • panic時のunwindをcatch可能に(1.9)
      • deprecated属性追加(1.9)
      • ? 演算子の導入(1.13)
        • try!と同等のことがより簡潔にできる
        • さらに、 1.22Option<T> にも使えるようになった
      • 型を記述する箇所でもマクロが使えるように(1.13)
      • タプルなどのパターンマッチで .. が使えるように(1.14)
      • ?Sized がwhere句で使えるように(1.15)
      • 'static ライフタイムがstatic/constに対して自動補填(1.17)
      • 構造体のインスタンス生成時の同名変数の省略記法(1.17)
      • pubキーワード使用時の公開範囲指定を追加(1.18)
      • unionの導入(1.19)
      • loopのbreak時に値を返せるように(1.19)
      • 関連定数(associated constants)の導入(1.20)
        • 他言語で言うところのクラス定数に似てる
        • traitで定数名だけ定義して個別の構造体でimplできるのは、C++Javaにはないので便利そう
      • &リテラル'static ライフタイムを持つように(1.21)
        • stackではなくstatic領域に置かれる
      • Drop が constやstatic変数にも使えるように(1.22)
    • 個人的には ? 演算子とpubの公開範囲指定と関連定数が良さそう(小並感)

次にやりたいこと

  • ドキュメントのsecond editionから適当に初版で漏れてそうなところがあれば読む。
  • Rust by Example を読む?
  • 適当に何か作ってみる

気になっている部分

  • rustにおけるファイル分割の慣習(ベストプラクティス)
    • ドキュメントを読んだ感じ、1ファイル=1モジュール が基本っぽいが、他言語での開発でよくあるみたいに1クラス=1ファイルにすると、1クラス=1モジュールになるのかな?
      • struct定義もtraitのimplも全て同一ファイルに押し込む?
    • ここらへんは既存のライブラリのソースコード読むのが良さそう

所感

  • 普段使っているC++と比べて、これだけ言語仕様レベルで安全性を担保できるのが素直に凄い。
  • 一方で、コンパイルを一発で通せるようになるまでがなかなか骨が折れそう。
    • 基本的な構文は覚えたつもり…だが、実際書いてみると特に借用やクロージャまわりで意図と異なる挙動でコンパイルエラーになることがある。難しい。
  • 列挙型が強力なのが嬉しい(ここだけでも他言語に欲しい…)

VSCodeの統合ターミナルでnyagosを使用する

メモ

ファイル⇒基本設定⇒設定で、右側のウィンドウに以下を入力。

    "terminal.integrated.shell.windows": "C:\\tools\\nyagos\\nyagos.exe"

(右辺は実際にnyagosをインストールしているパス)