• gitlabの導入方法のメモ

    こんにちは。小宮です。先輩から要望されていそうな気がしたのでgitlab導入時のメモです。。

    やたらめったら長いし手順が複雑でこのとおりやって再現できるかはお使いの環境に依存する可能性があり保障できかねます。 この手順で再現した環境はOSはCentOS6.5でした。 postgresを許容できるのであれば自動的に入れられるオムニバス版があるのでそちらをお使いいただくのがよろしいかと。 個人的にpostgresの運用の知見が心もとなかったのと、RDSに逃げられなくなるのがアレだったのでmysqlで頑張りました。

    自分で自動化する時は、passengerとgitlab:setup時の対話処理をなんとか自動化するオプションを付けるとこがキモかと思いました。 この手順自体は部分的にchefがでてきますがほぼ手動です。自動化オプションは最後のほうにちょろっと書いときます。

    1.このへんからmysqlをなんとかして入れとく
    $ wget http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-5.6.17-1.linux_glibc2.5.x86_64.rpm-bundle.tar -P site-cookbooks/mysqld/files/default/usr/local/src/
    
    2.rbenv等でrubyをなんとかして入れておく

    (chefでなにもせずにやるとchefgemに寄るので注意がひつよう) rubyのバージョンが低いとGemfileのシンタックスチェックでエラー出てmysql2とかが入らないことも。

    3.Gitのインストール
        # yum -y install libcurl-devel libxslt-devel libxml2-devel expat-devel gettext openssl-devel zlib-devel
    Installed:
      libcurl-devel.x86_64 0:7.19.7-37.el6_4        libxml2-devel.x86_64 0:2.7.6-14.el6
      libxslt-devel.x86_64 0:1.1.26-2.el6_3.1
    
    Dependency Installed:
      libgcrypt-devel.x86_64 0:1.4.5-11.el6_4      libgpg-error-devel.x86_64 0:1.7-4.el6
    
    
    # su - chef;cd infra-chef-repo/
    
    $ knife cookbook create git -o site-cookbooks
    $ knife cookbook create redis -o site-cookbooks
    $ vi site-cookbooks/git/recipes/default.rb
    #
    # Cookbook Name:: git
    # Recipe:: default
    #
    # Copyright 2014, YOUR_COMPANY_NAME
    #
    # All rights reserved - Do Not Redistribute
    #
    %W{libcurl-devel
     libxslt-devel
     libxml2-devel
     expat-devel
     gettext
     openssl-devel
     zlib-devel
     libgcrypt-devel
     libgpg-error-devel}.each do |pkg|
      package pkg do
        not_if "rpm -qa|grep #{pkg}"
        action :install
      end
    end
    bash "bash-install-git" do
      not_if "ls -d /usr/local/src/git-1.9.0"
      code <<-EOC
        wget https://git-core.googlecode.com/files/git-1.9.0.tar.gz -P /usr/local/src
        cd /usr/local/src/
        tar zxf git-1.9.0.tar.gz
        cd /usr/local/src/git-1.9.0
        ./configure --prefix=/usr/local/git
        make all
        make install
        ln -sf /usr/local/git/bin/git* /usr/local/bin/
      EOC
    end
    
    $ knife solo cook localhost -o git
    
        # wget https://git-core.googlecode.com/files/git-1.9.0.tar.gz -P /usr/local/src
    
        # cd /usr/local/src/
        # tar zxf git-1.9.0.tar.gz
        # cd /usr/local/src/git-1.9.0
        # ./configure --prefix=/usr/local/git
        # make all
        # make install
    
        # ln -s /usr/local/git/bin/git* /usr/local/bin/
    # which git
    /usr/local/bin/git
    # git --version
    git version 1.9.0
    
    4.redisのインストール
        # yum install -y --enablerepo=remi redis
        Installed:
          redis.x86_64 0:2.8.9-1.el6.remi
    
        Dependency Installed:
          gperftools-libs.x86_64 0:2.0-11.el6.3            libunwind.x86_64 0:1.1-2.el6
    
        # /etc/init.d/redis start
    
        # chkconfig redis on
    
    # redis-cli ping
    PONG
    
    $ vi site-cookbooks/redis/recipes/default.rb
    bash "yum-install-redis-from-remi" do
      not_if "which redis-cli"
      code <<-EOC
        yum install -y --enablerepo=remi redis
      EOC
    end
    
    service "redis" do
      supports :status => true, :restart => true
      action [ :enable, :start ]
    end
    $ knife cookbook test redis
    $ knife solo cook localhost -o redis
    
    5.ユーザ作成
    # useradd -c 'GitLab' git
    # chmod 755 /home/git
    
    # su - git -s /bin/bash
    
    $ mkdir .ssh
    $ touch .ssh/authorized_keys
    $ chmod 600 .ssh/authorized_keys
    $ chmod 700 .ssh
    $ git config --global user.name  "GitLab"
    $ git config --global user.email "gitlab@localhost"
    
    ##### 6.gitlab-shellのインストール
    $ git clone https://github.com/gitlabhq/gitlab-shell.git -b v1.9.4
    $ cp -a /home/git/gitlab-shell/config.yml{.example,}
    $ /home/git/gitlab-shell/bin/install
    
    install失敗する場合は、gitユーザの.bashrcか/etc/profile.d/の下あたりに環境変数を追加し読み込みしてから再実行
    export PATH=/path-to-ruby:$PATH
    
    8.gitlabインストール
    $ git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 6-8-stable gitlab
    
    $ cp -a /home/git/gitlab/config/gitlab.yml{.example,}
    
    不要っぽい
    --------------------------
    $ chmod -R u+rwX  /home/git/gitlab/log/
    $ chmod -R u+rwX  /home/git/gitlab/tmp/
    $ mkdir /home/git/gitlab/tmp/pids/
    $ mkdir /home/git/gitlab/tmp/sockets/
    $ chmod -R u+rwX  /home/git/gitlab/tmp/pids/
    $ chmod -R u+rwX  /home/git/gitlab/tmp/sockets/
    $ mkdir /home/git/gitlab/public/uploads
    $ chmod -R u+rwX  /home/git/gitlab/public/uploads
    --------------------------
    
    $ mkdir /home/git/gitlab-satellites
    $ ll -d /home/git/gitlab-satellites
    drwxrwxr-x 2 git git 4096  5月 19 12:20 2014 /home/git/gitlab-satellites
    $ 
    $ ll -d /home/git/gitlab-satellites
    drwxr-x--- 2 git git 4096  5月 19 12:20 2014 /home/git/gitlab-satellites
    
    $ cp -a /home/git/gitlab/config/unicorn.rb{.example,}
    
    $ cp -a /home/git/gitlab/config/initializers/rack_attack.rb{.example,}
    
    $ cd /home/git/gitlab
    $ git config --global user.name "GitLab"
    $ git config --global user.email "gitlab@localhost"
    $ git config --global core.autocrlf input
    
    9.DB設定
    $ cp -a /home/git/gitlab/config/database.yml{.mysql,}
    
    $ vi /home/git/gitlab/config/database.yml
    $ diff /home/git/gitlab/config/database.yml{.mysql,}
    10,12c10,12
    <   username: git
    <   password: "secure password"
    <   # host: localhost
    ---
    >   username: gitxxxxx
    >   password: "xxxxxxxx"
    >   host: localhost
    
    $ ls -al /home/git/gitlab/config/database.yml
    -rw-rw-r-- 1 git git 777  5月 19 12:32 2014 /home/git/gitlab/config/database.yml
    $ chmod o-rwx /home/git/gitlab/config/database.yml
    $ ls -al /home/git/gitlab/config/database.yml
    -rw-rw---- 1 git git 777  5月 19 12:32 2014 /home/git/gitlab/config/database.yml
    
    $ vi /home/git/gitlab/config/gitlab.yml
    $ diff /home/git/gitlab/config/gitlab.yml{,.example}
    227c227
    <     bin_path: /usr/local/bin/git
    ---
    >     bin_path: /usr/bin/git
    

    ローカル等てきとうなところ(database.ymlに指定したところ)にDBをなんとかしていれる

    ...
  • opsだけどgitを使ってみた~その2

    こんにちは。小宮です。 前回のつづきです。今回はgitマージとタグとコンフリクトの話を書きます。 まあ初心者が慣れてきた頃の様子ということで生温かく見守ってください。 git-flowやブランチモデルがどうという話はでてきません。

    git branch でブランチを切る

    現在居る場所を確認する

    $ git branch -a
      add_custom_repository
    * master
    

    addしただけのやつがないのを確認します。

    $ git status
    # On branch master
    # Changed but not updated:
    #   (use "git add <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    #       modified:   .gitignore
    #
    no changes added to commit (use "git add" and/or "git commit -a")   
    

    ※万が一addしただけのやつがある場合、commitするかstashするかする必要があります。

    ...
  • source treeを使ってgitlabを触ってみる(2)

    おはようございます。インフラ宮下です。

    前回source treeのインストールと鍵の登録までを説明しましたので、今回はgitlabとの接続について説明します。 社内にgitlabがあるのでgitlabとの接続が前提となります。 (もちろんgitlabのアカウントもある想定)

    gitlab

    gitlabの自分profile画面のメニューで「SSH keys」を選択します。

    既に登録されている鍵の一覧が確認できます。右上にある「Add SSH key」をっクリックします。

    WS000132

    鍵登録の画面に移ったら、Titleに識別し易い名前を(入力しないと自動生成されます)入れて、Keyの所に前回作成した公開鍵を貼り付けたら「Add key」で登録します。

    WS000133

    登録keyの一覧に表示されたら無事登録は完了です。

    再びsource treeに戻ります。

    ではgitlabのリポジトリをcloneします。「新規/クローンを作成する」で開始します。

    WS000135

    今回は、gitlabのリポジトリを使いますので、「リポジトリをクローン」タブを選択して、  ・元のパス/URLにgitlabの接続先情報を入れます。  (例:http://192.168.0.250/infra/projectX.git)   社内gitlabはhttpでの接続が出来ますが、gitであったりsshでも接続出来る方法なら何でも大丈夫です。   入力したら自動で接続確認が行われて接続成功・失敗が確認出来ます。  ・保存先のパスにクローンしたデータの保存先を指定します。  ・リポジトリをブックマークはそのまま選択状態にしておきます。  ・名前はsourcetree上で表示される名前なので、どのリポジトリかわかるような名前を付けておいてください。

    WS000136

    必要事項を入力したら「クローン」でスタートです。

    データ量によりますが、しばらく待つと保存先のパスにクローンが完了します。

    WS000137

    無事登録されました。これでsourcetreeからgitライフが可能となります。

    基本的な作業として、pushするまではこんな感じです。 PC側でファイルの修正をすると変更アイコンに変わりますので「追加」をクリックするかファイルの所をクリックします。

    WS000139

    ...
  • opsだけどgitを使ってみた~その1

    こんにちは。小宮です。 opsだけどgitを使ってみた~その1ということで、githubもgitlabもgitも初心者なので忘れないようにメモ。 今回はたどたどしくpushするところくらいまでにします。branch切ってみるとこは初回から書くとおなかいっぱいになりそうなので。 たぶんその2までです。その2はbranchとtagとconfrictのことを書いています。

    背景とメリットデメリット

    ・背景  昨今の継続的インテグレーションだとかでchefでサーバ構築の需要があってその流れ弾に当たった機会を得たため、  そのリポジトリをバージョン管理する必要が生じましてgitをつかうことに。最初は会社のエンタープライズ版のgithubに保存してもらっていたんですが、  VPN経由でのやり取りの需要からgitlabの導入を行うことになりました。 ・gitのメリット  ヒストリ追わなくていい。見える化。ファイル内の差分が見やすいので確認がブラウザで容易に可能になる ・gitのデメリット  同僚がつかいはじめてくれない(必要にせまられないと忙しくてスルー傾向)  まあなんか気持ちはわかります。私もきっかけは半ば強制的な感じでした。

    githubとgitlabの違い  gitコマンド的にはあんま変わんない気もしますが、制度がオープン(エンタープライズはクローズ可)かクローズでいけるか、  gilabの場合は容量制限もディスク容量とかの環境次第でユーザ権限を細かく設定できたりなどするのがいい感じです。  もっというとVPN越しにしかつながらないようにしたいとかの自由がききます。共有Webサービスつかうか自前構築のつかうかの差です。  gilab導入の手間は最近はchefで気軽に入るレシピもあり軽減されてきたようです。

    githubの場合、二段階認証をなんとかする

     詳細な説明は省きますが、まずgithubに登録して会社のgithubの二段階認証をなんとかします  →会社で用意していただいたマニュアルのとおりに実施。   要はgmailの2段階認証みたいなことで携帯にSMS通知が届いて認証する仕組みのセットアップです。

     接続するホストでsshの鍵の作成と、作成した公開鍵の登録をgithub側のユーザプロファイルで行います。

    pushするホストでgitを初期設定する

    まずgitコマンド打つ人のユーザ情報を登録です。

    git config --global user.email "komiyay@xxxxx"`
    git config --global user.name "Yxxx Komiya"
    

    設定ファイルにメモリ制限やスレッド数を指定しないとOutOfMemoryエラーが出ます。

    $ vi ~/.gitconfig
    [user]
            email = komiyay@xxxxx
            name = Yxxx Komiya
    [core]
            packedGitWindowSize = 128m
            packedGitLimit = 128m
    [pack]
            windowMemory = 128m
            threads = 2
            deltaCacheSize = 128m
            packSizeLimit = 128m
    

    ※m1.smallくらいでこの設定にしました。t1.microだとメモリエラー出ました。

    ...
  • source treeを使ってgitlabを触ってみる(1)

    おはようございます。インフラの宮下です。

    社内で稼働中のgitlabがあるのですが、CLI使える人が少ないせいかgitしている人が思った以上に少ないのに困ってます。 最近はWindowsのツールでも充分にGitの体験が出来るようですので、今回は「SourceTree」を紹介したいと思います。 アンチCLIの方は「SourceTree」でも十分git操作可能ですのでまず手始めに利用してみては如何でしょうか。

    そもそもGitの意味がわからないという人はごめんなさい。いずれgitの構築も誰かが書いてくれると思いますので今回は割愛します。 git知識としてはとってもわかりやすい下記サイトをご覧ください。

    サルでもわかるGit入門 バージョン管理システム入門

    分散型バージョン管理システムなので、みんなで使ってたまにはデグレしたりと苦い経験をしておいた方が良いと思ってます。 バックアップとかしっかりしておけば傷は浅く済むと思います… chefと連携しても良いと思いますし、configを管理してバージョンや差分を管理するでも良いですし、単にreadme的な手順を管理するでも何でも用途は良いと思います。

    1)SourceTreeをインストールする

    Source tree公式サイトから今回はwindows7版のファイルをDownloadします。

    WS000000

    ダウンロードした実行ファイル「SourceTreeSetup_1.6.13.exe」をダブルクリックしてインストールを開始します。

    WS000001

    ほぼ流れにのってインストールするだけで終わります。

    WS000004

    「グローバル無視設定ファイル」の作成を聞かれますが「Yes」「No」今の所どちらでも良いです。 今回は「Yes」にして進みます。

    WS000006

    publicのリポジトリ設定をすると接続する事が出来ます。アカウントがあればアカウント・ユーザ名・パスワードを入力してください。 今回の用途は自社内のgitlabとの接続なので「スキップ」します。

    WS000007

    最後にSSHキーの読み込みをするか聞かれます。既に持っている場合は登録しても良いですが後でも出来るので「No」としておきます。

    WS000008

    2)SSH鍵を作成して登録

    gitlabにつなぐ為に作業PCの鍵を登録します。

    SourceTreeを起動してまずはSSH鍵の作成と登録を行います。 既に作成した鍵がある場合はあえて作成する必要はありません。

    「ツール」→「SSHキーの作成/インポート」でPuttyKeyGeneratorを起動します。

    WS000010

    「Generate」をクリックしたらマウスをたくさん動かしていると鍵の作成が完了します。

    ...