Piを操作するのに、ディスプレイをつないでいたら面倒です。Piに接続する方法をメモしておきたいと思います。セキュアな通信を行うために、BASIC認証ではなく、公開鍵認証にて接続を行います。Pi側)ブートディレクトリにSSHディレクトリを用意します。Piの設定]からSSHを有効にしておきます。リブート後、以下のような警告メッセージが出る場合、パスワードが初期値になっているので、変更しておきましょう。ちなみに、デフォルトでは以下のUserとPasswordになっています。Piの設定]からパスワードの変更を行えます。Pi側の設定は終わりです。10側)今回は、WinSCPを使って接続してみたいと思います。WinSCPをインストールしていない場合は、以下からダウンロード&インストール。Pi側のIPアドレス、ユーザ名とパスワードを設定し、ログインボタンをクリックします。すると、以下のように接続できていると思います。10側からのBASIC認証によるSSH接続は完了です。公開鍵認証でSSH接続BASIC認証だとセキュアとは言えないので、今回は公開鍵認証でSSH接続する方法についても言及します。10側で公開鍵と秘密鍵のペアを作ります。OpenSSHを使おうと思うので、Gitがインストールされていることを前提としています。Gitをインストールしていない場合は、以下からダウンロード&インストール。Bashから、以下のコマンドを実行します。メールアドレスについては任意の値でOKです。"your_email@example.com"保存先やパスワードの入力を求められますが、何も入力せずにEnterします。(公開鍵)が作成されます。Pi側に転送しておきます。.ssh/authorized_keysSSHの設定ファイルを開きたいのですが、nanoやVimでもいいのですが、編集しやすいVSCodeを使います。VSCodeをインストールしておきます。VSCodeの実行code-oss次に、SSH設定ファイルを開きます。以下の2つについて、コメントアウトしているのは解除し、PubKeyAuthenticationをyesに書き換えます。BASIC認証をできないようにするコメントアウトしているのは解除し、PasswordAuthenticationをnoに書き換えます。Rootログインをできないようにするコメントアウトしているのは解除し、PermitRootLoginをnoに書き換えます。noSSHを再起動し、上記の設定を反映させます。Pi側の作業を以上で終了です。Piに接続できるかどうか確認して見ましょう。設定をクリックします。SSHの認証から、秘密鍵を設定します。ppkしか対応していないと言われるので、素直にppkファイルに変換します。設定を保存し、ログインします。公開鍵認証がうまく行っていれば、以下のようにSSH接続できているはずです。Serverはじめに会社や研究室でGitを使ったバージョン管理システムを構築したいというニーズが少なからずあると思います。言うまでもなく、ソースコードやそれに付随する書類を管理する上で、手作業でそれを行うのは非常に非効率だからです。OSの入ったパソコンしか使えない場合を想定して、Windows10パソコン上にGitサーバをたてる方法について説明します。WindowsパソコンにGitサーバを立てることはまずやらないためか、ネット上での情報が少なく、公開されている情報も断片的だと感じたので、今回私なりにまとめてみることにしました。Pro)Gitのインストール(サーバ・クライアント共通)サーバ(Windows10)とクライアント側(Windows)の両方の環境にGitをインストールします。以下のGitのサイトからGitのインストーラをダウンロードしてきます。https://git-scm.com/デフォルトのままで「Next」をクリックします。Gitで使うデフォルトのテキストエディタを選択します。Codeを選択しておきます(事前にVSCodeをインストールしておく必要があるかもしれません)。BashだけでなくWindowsのコマンドプロンプトでも利用できるようにするか聞かれます。Promptを選択しました。HTTPSによる転送をどの方法で行うか聞かれます。libraryを選択しました。コミット後、ソースコードをUnixの改行コードに変換するかどうか聞かれます。as-isを選択しました。endingsにしておき、Unixの改行コードに統一しておくのが良いと思います。デフォルトのままで「Next」をクリックします。デフォルトのままで「Install」をクリックします。以上でインストールは完了です。クライアント側の設定まずは、クライアント側で作業を行います。Bashもしくはコマンドプロンプトを開き、以下のコマンドを実行します。メールアドレスとユーザ名については任意の値を設定してください。今回はGitプロトコルによる通信ではなく、SSHによる通信方法を使います。ウイルス対策ソフトのファイアウォールに引っかかるためです。failed)が発生することがあると確認しています。Gitサーバの通信プロトコルについての詳細は以下を参照のこと。https://git-scm.com/book/ja/v1/Git-サーバー-プロトコルクライアント側でSSHキー(公開鍵と秘密鍵)を作成しておきます。-Cオプションで指定しているメールアドレスは任意のものを設定してください。Bashで実行した際のコマンドを示しました。以下のssh-keygenコマンドを実行します。"your_email@example.com"実行すると、id_rsaとid_rsa.pubという2つのファイルが生成されているはずです。このうち、公開鍵であるid_rsa.pubは、サーバ側にわたす必要があります。サーバ側の設定ここからはサーバ側の操作になります。Bashもしくはコマンドプロンプトを開き、以下のコマンドを実行します。メールアドレスとユーザ名については任意の値を設定してください。リポジトリを作成する以下の場所(もちろん、任意の場所で構いません)に、リモートレポジトリを作成していきます。Bashでの操作を示しました。Cドライブの直下にレポジトリ用のフォルダを用意します。/c/repos/sample.gitベアリポジトリ(作業ディレクトリを持たないリポジトリ)を作成します。git-daemon-export-okベアリポジトリについては以下を参照のこと。SSH接続SSHサーバを立ち上げます。Bashを実行します。GitをインストールしたフォルダにSSHキーを作っていきます。Gitインストール直後は以下のようなファイル構成になっているはずです。Files\Git\etc\sshパスフレーズは入力せずにEnterを押して、SSHキーを作っていきます。ssh_host_ed25519_key作成すると、Git/etc/sshフォルダ内は以下のようになります。続いて、sshd.exeを実行して、SSHサーバを立ち上げます。/usr/bin/sshd.exeファイアウォールの設定を聞かれるので、「アクセスを許可する」をクリックします。タスクマネージャーで確認すると、sshd.exeが起動していることが確認できると思います。最後に、クライアント側で用意した公開鍵id_rsaをサーバ側に登録しておきます。C:/Users/ユーザ名/.sshフォルダの直下にauthorized_keysというファイルを作成します。ファイルをテキストエディタなどで開き、クライアント側で用意した公開鍵の内容をコピペします。Daemonの起動(SSH接続では必要ない)Gitプロトコルで通信を行う場合は、以下のコマンドでGitサーバを立ち上げておく必要があります。--base-path=/c/repos/デフォルトは読み取り専用になっています。pushはできません。--export-allをつけてリモートレポジトリにプッシュできるようにしておくように設定します。--enable=receive-packをつけて、認証を受けていないanonymousユーザもプッシュできるようにします。先ほどのコマンドを実行すると、ファイアウォールの確認画面が出てくるので、「アクセスを許可する」をクリックします。最後に、クライアント側でGitリポジトリのクローンの作成とGitリポジトリへのプッシュができるか確認します。クローンの作成ipconfigであらかじめIPアドレスを確認しておきます。以下では、IPアドレスが192.168.86.21、サーバ側のGitのリモートレポジトリがC:/repos/sample.gitだった場合の例を示しました。コマンドプロンプトで以下のコマンドを実行しました。SourceTreeで管理する場合コマンド操作でGitによるバージョン管理をしても良いですが、GUIを使うともっと便利です。今回はSourceTreeを使った例を示します。クライアント側で用意した秘密鍵id_rsaをSourceTreeに登録しておきます。[オプション]からSSHキーを設定します。SSHクライアントにはOpenSSHを選択します。SourceTreeでのGitリポジトリのクローンSourceTree上でGitリポジトリのクローンを作成します。新しいタブから「Clone」を選択し、クローンのURLを指定します。上記の例だと、ssh://192.168.86.21/c/repos/sample.gitになります。「クローン」をクリックすると、対象のGitリポジトリのクローンを作成できます。SourceTreeでコミットとプッシュを実行GitリポジトリにREADME.mdファイルを追加してコミットを行います。続いて、プッシュを行います。プッシュをクリックすると、以下の画面が表示されるので、masterブランチを選択し、「プッシュ」をクリックします。SSH接続がサーバ・クライアント間でできていれば、以下のようにプッシュが完了します。トラブルシューティングSourceTreeからのプッシュがいつまで立っても終わらない...以下の設定を行うことで解決。+Windows環境)https://teratail.com/questions/110660Gitサーバに繋がらない...Gitがクローンできない理由として、Windowsのユーザ認証が邪魔をしている可能性があります。IPアドレスの前にログインユーザ名(サーバ側)、IPアドレスの後ろにSSHのポート番号を指定して実行するとうまくいきます。DockerはじめにGitのバージョン管理システムとしてGitHub、継続的インテグレーションツールとしてCircleCIやTravisCI、開発者向けのコミュニケーションツールとしてSlackといったクラウドサービス(SaaS)が注目を集めています(というより、昨今では当たり前に使われているツールかも)。会社によってはクラウドはNGでオンプレミスである必要があったり、予算的な問題があったりとなかなか導入できない事情があるかと思います。オープンソースでGitHubやCircleCI、Slack風の機能を実装したツールはないものか...。そこで、GitLabの出番です!about.gitlab.comGitLabって何?GitLabは、GitHub風なGitのバージョン管理ツールに加えて、システム開発のフロー全体をカバーする様々なツールを提供してくれます。License下で配布されています)。IDEなどなど、たくさんの有用な機能を使うことができます(もちろん、フリーの範囲内で利用可能)。上記のサービスに対応するSaaS(GitHub、CircleCI、JIRAなど)を使う場合には、どうしても費用がかかってしまいますし、別々のサービスになるので管理も大変になります。GitLabならオールインワンで、それらのサービスがフリーで手に入ります(ただし、オンプレミスに限る。サーバの管理も必要になる)。Freeとなっているのが、オープンソースで開発されているFree版で使える機能になります)。about.gitlab.comまた、これらのサービスを活用することで、チケット駆動開発(TiDD)、テスト駆動開発(TDD)、継続的インテグレーション・継続的デリバリー(CI/CD)などのモダンな開発手法を開発プロセスに組み込んでいくことができます。LTS(デスクトップ版)をインストールしたPCを用意したので、今回はこの環境にGitLabを導入してみたいと思います。GitLabのDockerイメージからGitLabサーバを立ててみたいと思います(SlackクローンであるMattermostも同梱されているのでこれも導入してみます)。Dockerを使うのか?以下は、個人的な意見です。Dockerは使い始めたばかりなので、間違っている箇所もあるかもしれませんが、DockerコンテナとしてGitLabを導入するメリットを挙げてみました。Image)GitLabのDockerイメージは、すべてのツールを単一のコンテナに収めたモノリシックなDockerイメージです。そのため、NginxやPostgreSQLなどのGitLabを構成するミドルウェアのDockerコンテナを別途立ち上げる必要はありません。やることとしては、GitLabのDockerイメージをpullした後、イメージを起動させるだけです(使用者から見ると構成がシンプル)。Code)DockerならOS固有のインストール手順に従う必要がありません(仮想環境で実行するため、OSの違いを吸収できる)。DockerfileとしてDockerイメージの構成がコード化されており、利用者はそのファイルを実行することでDockerイメージを自動で生成することができます。そのため、インストール手順書を見ながらGitLabを導入するなんてことも必要ありません(誰でも簡単にGitLabを立ち上げることができる)。(Portability)Dockerはポータビリティ性に優れています。新しいサーバにGitLabのシステムを移行したい場合には、既存のGitLabの環境を簡単に新しい環境に移行することが可能です。異なるOSだから、インストール方法が変わってしまう、データの引き継ぎが面倒ということはありません。以上の観点から、中長期的にGitLabを運用していくにあたり、ホストOSに直接GitLabをインストールするのではなく、DockerコンテナとしてGitLabを運用したほうがメリットが大きいと考えられます。Pro(クライアント側)Dockerのインストール以下のUbuntuへのDockerのインストール方法は、Dockerの公式ドキュメントを参考にしました。詳しくは、そちらを参照のこと。Ubuntuhttps://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-repositoryまず、aptパッケージのインデックスをアップデートします。updateHTTPS経由でリポジトリを使うようにするため、追加のパッケージをインストールします。software-properties-commonDocker公式のGPGキーを追加します。CD88)を取得できたか確認します。[S]Stable版のDockerのリポジトリを設定します。現状、Ubuntu17.10以前のバージョンでは以下の方法でOKです。-cs)の箇所(bionic)をartfulに書き換えて以下のように設定します。stable"参考https://linuxconfig.org/how-to-install-docker-on-ubuntu-18-04-bionic-beaverもう一度、aptパッケージのインデックスをアップデートします。update最新のStable版Dockerをインストールします。docker-ce特定のバージョンのDockerをインストールしたい場合、以下のコマンドで、インストール可能なDockerのバージョンを確認できます。PackagesGitLabのDockerイメージの準備・起動それでは、いよいよGitLabのDockerイメージの準備をしていきます。詳しくは公式ドキュメントを参照してください。https://docs.gitlab.com/omnibus/docker/GitLab公式のDockerイメージはこちら。https://hub.docker.com/r/gitlab/gitlab-ce/まず、GitLabのDockerイメージをpullしてきます。gitlab/gitlab-ce次に、GitLabのデータの永続化のために、GitLab用のファイルを保存するディレクトリをあらかじめつくっておきます(ディレクトリが存在しない場合、Docker起動後に自動的に生成されるようなので必要ないかも...)。/home/imamachi/desktop/は適当なディレクトリを指定してください。以下は、設定例になります。/home/imamachi/desktop/gitlab/data今回は、ローカルネットワーク経由でアクセスできるようにしたいので、Ubuntuのマシンに割り当てられているIPアドレスを調べておきます。ifconfig上記のコマンドをインストールしていない場合、以下のコマンドでインストールしておきましょう。net-toolsGitLabのDockerイメージを起動するために、以下のコマンドを実行します。以下のオプションは、自身の環境に合わせて設定します。/home/imamachi/desktop/の部分は、先ほど作成したディレクトリのパスに合わせてください。起動するコンテナの名称。任意の名前でOKですが、わかりやすくgitlabにしておきました。gitlab/gitlab-ce:latest--volumeの内容をまとめると、以下の通り。Dockerコンテナ側)を指定しています。8001--restartにalwaysを設定しておくと、ホストOSをリブート(再起動)したときに、自動的にGitLabのDockerイメージを起動させることができます。特別な理由がない限り、この設定でOKだと思います。毎回、上記のコマンドをコピペして実行していたら面倒なので、Dockerのコマンド類をmakefileにまとめて置くと便利です。以下は、GitLab用のmakefileの例です。gitlab例えば、GitLabのDockerイメージの起動は以下のコマンドで実行可能になります。startUbuntuにmakeコマンドがインストールされていない場合、以下のコマンドでインストールしてください。makeGitLabの起動が完了したかどうか確認するために、Dockerイメージの起動時に設定したGitLabのログファイルの出力先(上の例では、/home/imamachi/Desktop/gitlab/logs)を参照します。logsディレクトリ直下のreconfigureディレクトリ内に*.logファイルが出力されるはずです。コンテナ起動中は、随時ログ情報が書き込まれていきます。起動が正常に完了すると、最後に以下のログが出力されるはずです。completeGitLabにアクセスしてみるhttp://<IPアドレス>から、GitLabにアクセスすることができます(上記の例では、http://192.168.100.114)。初期画面では、rootユーザのパスワードの設定画面が表示されます。passwordをクリックします。初回ログインでは、以下のスタートメニューが表示されます。公開鍵認証によりGitLabとやり取りをするために、SSHキーの設定を行います。Keyだとうまく行かなかったので、OpenSSHにしました。Windowsをインストールしておきます。https://git-scm.com/download/winまた、Git用のクライアントアプリとして、SourceTreeをインストールしておきます。Bashを起動します。Bash上で、以下のコマンドから、SSHキーを生成します。rsaすると、C:\Users\<ユーザ名>\.ssh以下にid_rsa.pubという名前の公開鍵が生成されるので、テキストエディタなどでファイルを開き、ファイルの中身をコピーします。Keysの画面から、先ほどコピーしたSSHキーをKey欄に貼り付けます(Titleも自動的につきます)。KeyをクリックしSSHキーを登録します。Keysを再度クリックして見ると、以下のようにSSHキーが登録されていることが確認できると思います。今度は、SourceTreeを起動し、先ほど用意した秘密鍵の方を設定しておきます。[オプション]をクリックします。SSHクライアントの設定で、SSHキーに先ほど用意した秘密鍵をセットします。SSHクライアントには、OpenSSHを設定します。続いて、GitLab上のリモートレポジトリを取得します。GitLab上でリポジトリを作成し、赤枠で囲んだリポジトリのパスをクリップボードにコピーします。SourceTreeのCloneタブから、先ほどコピーしたリポジトリのパスをペーストします。「クローン」ボタンをクリックすると、ローカルにリモートリポジトリのクローンを作成できます。Ubuntuの場合(MacOSの場合もほぼ同様)以下のコマンドから、SSHキーを生成します。rsaすると、~/.ssh以下にid_rsa.pubという名前の公開鍵が生成されるので、ファイルの中身をコピーします。catコマンドでファイルの中身をコンソールに出力し、内容をコピーしていきます。上記のように、手作業でコピーしているとミスを誘発する可能性があるので、できればやりたくないです。そこで、コマンド操作でクリップボードへコピーする方法を取ります。xselコマンドは標準でUbuntuに入っていないので、以下のコマンドでインストールしておきます(何かと使うので入れておくと便利です)。xsel以下のように、クリップボードへファイルの中身をコピーすることが可能です。xselのコマンドオプションが2つもあって面倒くさいです...。--inputなので、MacOSのpbcopyと同じ名前のエイリアスをつけておきます(名前はわかりやすければ何でもいいです)。~/.bashrcすると、以下のコマンドでクリップボードにファイルの中身をコピーできるようになります。Keysの画面から、先ほどコピーしたSSHキーをKey欄に貼り付けます(Titleも自動的につきます)。KeyをクリックしSSHキーを登録します。Keysを再度クリックして見ると、以下のようにSSHキーが登録されていることが確認できると思います。用いてのSSH接続(きほん)https://qiita.com/mukoya/items/f20def019e25dc162ca8コマンドラインからクリップボードへのコピーhttps://qiita.com/Kzno/items/6f2fa98256bdffb0fd43MattermostへGitLabのアカウントでシングルサインオン(SSO)するGitLabに同梱されているMattermostは、別途Mattermost用のアカウントを作成しなくても、GitLabのアカウントからログインすることができます(シングルサインオン(SSO))。以下では、GitLabアカウントでのシングルサインオンを行うための設定について紹介します。ブラウザからGitLabにアクセスし、rootユーザでログイン後、Settingsから、Applicationsタブに移動し、Mattermostという名前のアプリケーションをGitLabに登録します。URIには、以下のURIを指定します(IPアドレスにはホストOSに割り当てられている値を設定してください。ここでは、192.168.100.114にしています)。http://192.168.100.114:8001/signup/gitlab/completehttp://192.168.100.114:8001/login/gitlab/complete同じサーバで運用している場合、以下のようにMattermostのポート番号も指定する必要があります。しないと、リダイレクトに失敗してしまうので注意です。applicationボタンをクリックし、登録を完了してください。登録に成功すると、以下の画面が表示されます。idとSecretの値を次に使うので、控えておいてください。詳しくは以下を参考のこと。https://docs.gitlab.com/omnibus/gitlab-mattermost/続いて、GitLabの設定ファイルを変更します。一時的にgitlab.rbを編集可能にしておきます(もしくはVimで編集)。gitlab.rb1125行目辺りにある、以下を編集します。http://<IPアドレス>:8001と設定します。'http://192.168.100.114:8001'1219-1225行辺りにある、以下をコメントアウトをはずして内容を編集します。