Setting WSL - dotfilesをGitHubで管理する -

前回の記事でWSLをインストールしましたが、データ解析環境を整えるために各種セッティングを行います。今回は環境を整えやすくするために、管理ファイルをGitHubで管理できるようにしてみます。


パッケージを最新の状態にする

まずは以下のコマンドで、インストールされているパッケージを最新の状態に変更します。

    sudo apt-get update
    sudo apt-get upgrade

Gitを設定し、dotfilesをGitHubで管理する

WSLの環境設定を行う前に、バックアップのためにdotfilesをGitHubで管理できるようにします。dotfilesとは、.bashrcや.viminfoなどの . からはじまる、設定ファイルの総称です。

Gitの初期設定

WSLでUbuntuをインストールした場合、Gitははじめからインストールされているので、次のコマンドでGItで使用する名前とメールアドレスを設定します。

    git config --global user.name "Firstname Lastname"
    git config --global user.email "your_email@example.com"

ここで設定した名前はコミットログなど使用されます。GitHubで使用している名前とメールアドレスと同じものを使うと混乱が起こらないと思います。また、メールアドレスを公開したくない場合、 GitHubのヘルプ に従ってダミーのアドレスを使用できます。

SSH Keyの設定

GitHubと安全に通信を行うために、SSH Keyを作成し、GitHubへの公開鍵登録を行います。既に作成している人はこの項目は省略してください。

次のコマンドでSSH Keyを作成します。 この時入力した パスフレーズ は、後ほど使うため忘れないようにしてください。

    ssh-keygen -t rsa -C "your_email@example.com"

    Enter file in which to save the key
    (/Users/your_user_directory/.ssh/id_rsa): # Enterを押す
    Enter passphrase (empty for no passphrase): # Key作製用のフレーズを入力
    Enter same passphrase again: # 先程のフレーズを再入力

作成された公開鍵をGitHubへと登録をします。この際、次のコマンドで公開鍵をクリップボードにコピーできます。

    # 公開鍵をクリップボードにコピー
    cat ~/.ssh/id_rsa.pub | clip.exe

コピーした公開鍵を、GitHubの「Account Setting」から、「SSH Key」のメニューを選択し、「New SSH key」から登録を行います。SSH Keyの登録が成功すると、GitHubから登録したメールアドレスに確認のメールが届きます。

後は、次のコマンドを実行し、GitHubとの認証と通信が出来るかを確認してください。

    ssh -T git@github.com

    The authenticity of host github.com (192.30.255.113) cant be established.
    RSA key fingerprint is YOUR FINGERPRINT
    Are you sure you want to continue connecting (yes/no)? # yes と入力
    Enter passphrase for key /home/YOURNAME/.ssh/id_rsa: # Key作製の際に入力したパスフレーズを入力

次のように表示されれば成功です

    Hi GitHub_ID! You've successfully authenticated, but GitHub does not provide shell access.

GitHubに管理用のレポジトリを作成する

GitHub にログインし、「dotfiles」というリポジトリを作成する。(リポジトリ名は任意のもので構いません)

ローカルに管理用のディレクトリを作製する

続いてGitHubで管理したいdotfileを入れるためのディレクトリを作成するのですが、その前にWSLのデフォルトのパーミッションをを変更します。

WSLでは何故か、新規に作成したファイルとディレクトリが誰でもアクセスできるようになっています。(新規ファイルのパーミッションが「rw-rw-rw」、ディレクトリは「rwxrwxrwx」)。このままでも特には困らないかもしれませんが、セキュリティ的に好ましくないため、一般的なLinuxディストリビューションと同じように変更します(新規ファイルが「rw-r--r--」、ディレクトリが「rwxr-xr-x」)。 以下のコマンドを実行し、Ubuntuの再起動します。

    echo 'umask 022' >> .bashrc

再起動後に、以下のコマンドで「dotfiles」ディレクトリを作成し、その中に管理したいdotfileを移します。以下のコマンドは、あくまで例であるため、実際に移すファイルは人によって異なります。

    cd ~
    mv .bashrc
    mv .bash_profile
    mv .gitconfig
    ... #以下、必要に応じて

移動したdotfileのシンボリックリンクを作成する

dotfileを管理用のディレクトリに移動しただけでは読み込めなくなってしまうため、以下のスクリプトを作製・実行し、ホームディレクトリにdotfileのシンボリックリンクを作ります。

    #!/bin/bash
    set -eu
    # 実行場所のディレクトリを取得
    THIS_DIR=$(cd$(dirname $0); pwd)

    cd $THIS_DIR

    echo "start setup..."
    for f in .??*; do # dotfileの数だけ繰り返し
      ln -snfv ~/dotfiles/"$f" ~/
    done

上記のスクリプトを「setup.sh」として「dotfiles」ディレクトリに保存します。作成したファイルに実行権限を与えて、実行します。

    cd ~
    chmod +x dotfiles/detup.sh
    dotfiles/setup.sh

これでホームディレクトリにシンボリックリンクが作成され、環境が元に戻りました。

GitHubにdotfilesをPush

以下のコマンドで、作成した「dotfiles」ディレクトリをGitHubにPushします。

    cd dotfiles
    git init
    git add .
    git commit -m "initial commit"
    git remote add origin git@github.com:GitHubID/dotfiles.git
    git push -u origin master

GitHubID 部分は自分のアカウント名に置き換えてください。

以上で、dotfilesをGitHubで管理できるようになりました。これでファイルを変更して挙動がおかしくなったとしても、簡単に元に戻せるようになったので環境を整えやすくなったのではないでしょうか。

参考

dotfilesを管理しよう 『GitHub+dotfiles』は環境構築を一瞬で終わらせるすごいやつ dotfilesをGithubで管理する GitHubでdotfilesを管理する