macでリモート実行やってみた
macでリモート実行やってみた
環境
- macOS
- Windows10 1809
- Git
- Rust 1.33.0
手順
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
とすれば下の画像のような感じになる。はず。
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 フック