selecao3のブログ

技術系の備忘録

macでリモート実行やってみた

macでリモート実行やってみた

環境

  • macOS
  • Windows10 1809
  • Git
  • Rust 1.33.0

概要

開発マシン(macOS)でRustのソースコードをクロスコンパイルし、クロスコンパイルで生成したexeファイルをサーバー(Windows10)上でリモート実行する。

手順

1.macOSでRustをクロスコンパイルする
 前回の記事の通り
macOSでWindowsターゲットでクロスコンパイルする - selecao3のブログ

2. macOSにgit をインストール

brew install git

でgit をインストール。
3. サーバーにgit をインストール
今回、chocolateyというWindows用のパッケージマネージャーを使ってgitをインストールした。
https://chocolatey.org/install#installing-chocolatey
上記のURLに従い、chocolateyをインストール

choco install git

※ 念の為、ここでsshdのパスを確認する。

which sshd

/usr/bin と表示されればOK。それ以外の場合は
C:\Program Files\Git\usr\bin
環境変数Pathに追加すること。自分はここで3日間足踏みすることになった(後述)
4. サーバーにリモートレポジトリを作成
今回はD:¥develop¥rust にリモートレポジトリを作成する。

cd D:¥develop¥rust
mkdir sample.git
git init --bare --shared
git config --get-all core.bare # 共有レポジトリになっているかの確認。falseなら次のコマンドを入力
git config --bool core.bare true

5. サーバーでsshdコマンドを実行
6. 開発マシン上でgit clone

git clone {サーバーのユーザー名}@{サーバーのIPアドレス}/d/develop/rust/sample.git

次に、.git/hooks内のファイルを編集する。
〜開発マシン側〜

cd .git/hooks
touch pre-commit
vim pre-commit

# 以下のように編集
#!/bin/sh

scp {開発マシンのローカルレポジトリのルート}/target/x86_64-pc-windows-gnu/debug/hoge.exe {サーバーのユーザー名}@{サーバーのIPアドレス}/d/
# ここまで
chmod a+x pre-receive

※アップロード先のサーバー上のディレクトリは任意の場所でおk

〜サーバー側〜(以下はGit Bushで行うこと)

cd {サーバーのリモートレポジトリのルート}/hooks
touch pre-receive
vim pre-receive

# 以下のように編集
#!/bin/sh

cd /d/
./hoge.exe
# ここまで
chmod a+x pre-receive

問題が無ければ開発マシン上で
git add .
git commit -m "remote test"
git push
とすれば下の画像のような感じになる。はず。
f:id:selecao3:20190406170131p:plain
remote: リモート実行テスト
とあるが、サーバー上で標準出力された文字列はこのように表示される。

つまづいたこと

はじめ、サーバー上ではmicrosoft公式(?)のWindowsのOpenSSH serverをインストールして使っていた。
しかし、そのOpenSSHのsshdを実行するとgit push, git clone が出来なかった
結果として、Gitの/usr/bin配下のsshd.exeを使ったところ無事にgitコマンドが使えるようになった。(解決に3日かかったf**k)

補足

今回は.git/hooks内のスクリプトを利用してリモート実行を行った。
.git/hooksとは、gitのコマンドに応じてスクリプトを自動実行してくれるヤベー奴である。
.git/hooksについて詳しい説明は以下のURL参照
Git - Git フック

最後に

なんでこんなことしたん?

以下の経緯でこんなことをした。

  • Rustで深層学習してみたいな
  • WindowsだとコーディングしにくいからmacOSで開発したいな
  • でも学習(実行)させる時はGPUが搭載されてるWindows側で実行したいな
  • 開発機でクロスコンパイルしたものをサーバーでリモート実行できたらええな
  • リモート実行するかな

っていう感じ