PGメモ

非エンジニアの記録

CentOS5.9にGitサーバーを立てる。

意気揚々とgitサーバを立てる事にする・・がパッケージがない。

# yum install git-daemon
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * extras: mirrors.hust.edu.cn
 * updates: ftp.tsukuba.wide.ad.jp
Setting up Install Process
No package git-daemon available.
Nothing to do

レポジトリを追加します。

# vim  /etc/yum.repos.d/epel.repo 
[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 5 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch/debug
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-debug-5&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 5 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/5/SRPMS
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-source-5&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
gpgcheck=1

これでどうだ。

# yum install git-daemon

無事パッケージが見つかった。

# yum install git-daemon
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: mirrors.hust.edu.cn
 * updates: ftp.tsukuba.wide.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package git-daemon.i386 0:1.8.2.1-1.el5 set to be updated
--> Processing Dependency: git = 1.8.2.1-1.el5 for package: git-daemon
--> Processing Dependency: xinetd for package: git-daemon
--> Running transaction check
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: emacs-git
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-svn
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-gui
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-email
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: perl-Git
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-cvs
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-all
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: gitk
---> Package git.i386 0:1.8.2.1-1.el5 set to be updated
---> Package xinetd.i386 2:2.3.14-20.el5_10 set to be updated
--> Running transaction check
---> Package emacs-git.i386 0:1.8.2.1-1.el5 set to be updated
---> Package git-all.i386 0:1.8.2.1-1.el5 set to be updated
--> Processing Dependency: git-p4 = 1.8.2.1-1.el5 for package: git-all
---> Package git-cvs.i386 0:1.8.2.1-1.el5 set to be updated
--> Processing Dependency: perl-DBD-SQLite for package: git-cvs
---> Package git-email.i386 0:1.8.2.1-1.el5 set to be updated
---> Package git-gui.i386 0:1.8.2.1-1.el5 set to be updated
---> Package git-svn.i386 0:1.8.2.1-1.el5 set to be updated
--> Processing Dependency: perl(Git::SVN::Utils) for package: git-svn
--> Processing Dependency: perl(Git::SVN::Ra) for package: git-svn
--> Processing Dependency: perl(Git::SVN::Prompt) for package: git-svn
--> Processing Dependency: perl(Git::SVN::Migration) for package: git-svn
[root@localhost www]# yum install git-daemon
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: mirrors.hust.edu.cn
 * updates: ftp.tsukuba.wide.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package git-daemon.i386 0:1.8.2.1-1.el5 set to be updated
--> Processing Dependency: git = 1.8.2.1-1.el5 for package: git-daemon
--> Processing Dependency: xinetd for package: git-daemon
--> Running transaction check
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: emacs-git
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-svn
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-gui
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-email
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: perl-Git
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-cvs
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-all
--> Processing Dependency: git = 1.7.10.2-1.w5 for package: gitk
---> Package git.i386 0:1.8.2.1-1.el5 set to be updated
---> Package xinetd.i386 2:2.3.14-20.el5_10 set to be updated
--> Running transaction check
---> Package emacs-git.i386 0:1.8.2.1-1.el5 set to be updated
---> Package git-all.i386 0:1.8.2.1-1.el5 set to be updated
--> Processing Dependency: git-p4 = 1.8.2.1-1.el5 for package: git-all
---> Package git-cvs.i386 0:1.8.2.1-1.el5 set to be updated
--> Processing Dependency: perl-DBD-SQLite for package: git-cvs
---> Package git-email.i386 0:1.8.2.1-1.el5 set to be updated
---> Package git-gui.i386 0:1.8.2.1-1.el5 set to be updated
---> Package git-svn.i386 0:1.8.2.1-1.el5 set to be updated
--> Processing Dependency: perl(Git::SVN::Utils) for package: git-svn
--> Processing Dependency: perl(Git::SVN::Ra) for package: git-svn
--> Processing Dependency: perl(Git::SVN::Prompt) for package: git-svn
--> Processing Dependency: perl(Git::SVN::Migration) for package: git-svn
--> Processing Dependency: perl(Git::SVN::Log) for package: git-svn
--> Processing Dependency: perl(Git::SVN::Fetcher) for package: git-svn
--> Processing Dependency: perl(Git::SVN::Editor) for package: git-svn
--> Processing Dependency: perl(Git::SVN) for package: git-svn
---> Package gitk.i386 0:1.8.2.1-1.el5 set to be updated
---> Package perl-Git.i386 0:1.8.2.1-1.el5 set to be updated
--> Running transaction check
---> Package git-p4.i386 0:1.8.2.1-1.el5 set to be updated
---> Package perl-DBD-SQLite.i386 0:1.14-3.el5 set to be updated
---> Package perl-Git-SVN.i386 0:1.8.2.1-1.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================================================================================================================================
 Package                                            Arch                                    Version                                                 Repository                                  Size
=====================================================================================================================================================================================================
Installing:
 git-daemon                                         i386                                    1.8.2.1-1.el5                                           epel                                       336 k
Installing for dependencies:
 git-p4                                             i386                                    1.8.2.1-1.el5                                           epel                                        77 k
 perl-DBD-SQLite                                    i386                                    1.14-3.el5                                              epel                                       287 k
 perl-Git-SVN                                       i386                                    1.8.2.1-1.el5                                           epel                                        84 k
 xinetd                                             i386                                    2:2.3.14-20.el5_10                                      updates                                    127 k
Updating for dependencies:
 emacs-git                                          i386                                    1.8.2.1-1.el5                                           epel                                        50 k
 git                                                i386                                    1.8.2.1-1.el5                                           epel                                       7.3 M
 git-all                                            i386                                    1.8.2.1-1.el5                                           epel                                        22 k
 git-cvs                                            i386                                    1.8.2.1-1.el5                                           epel                                       116 k
 git-email                                          i386                                    1.8.2.1-1.el5                                           epel                                        54 k
 git-gui                                            i386                                    1.8.2.1-1.el5                                           epel                                       282 k
 git-svn                                            i386                                    1.8.2.1-1.el5                                           epel                                       387 k
 gitk                                               i386                                    1.8.2.1-1.el5                                           epel                                       156 k
 perl-Git                                           i386                                    1.8.2.1-1.el5                                           epel                                        49 k

Transaction Summary
=====================================================================================================================================================================================================
Install       5 Package(s)
Upgrade       9 Package(s)

Total download size: 9.3 M
Is this ok [y/N]: 

もちろんyesですとも。

Downloading Packages:
(1/14): git-all-1.8.2.1-1.el5.i386.rpm                                                                                                                                        |  22 kB     00:00     
(2/14): perl-Git-1.8.2.1-1.el5.i386.rpm                                                                                                                                       |  49 kB     00:00     
(3/14): emacs-git-1.8.2.1-1.el5.i386.rpm                                                                                                                                      |  50 kB     00:00     
(4/14): git-email-1.8.2.1-1.el5.i386.rpm                                                                                                                                      |  54 kB     00:00     
(5/14): git-p4-1.8.2.1-1.el5.i386.rpm                                                                                                                                         |  77 kB     00:00     
(6/14): perl-Git-SVN-1.8.2.1-1.el5.i386.rpm                                                                                                                                   |  84 kB     00:00     
(7/14): git-cvs-1.8.2.1-1.el5.i386.rpm                                                                                                                                        | 116 kB     00:00     
(8/14): xinetd-2.3.14-20.el5_10.i386.rpm                                                                                                                                      | 127 kB     00:00     
(9/14): gitk-1.8.2.1-1.el5.i386.rpm                                                                                                                                           | 156 kB     00:00     
(10/14): git-gui-1.8.2.1-1.el5.i386.rpm                                                                                                                                       | 282 kB     00:00     
(11/14): perl-DBD-SQLite-1.14-3.el5.i386.rpm                                                                                                                                  | 287 kB     00:00     
(12/14): git-daemon-1.8.2.1-1.el5.i386.rpm                                                                                                                                    | 336 kB     00:00     
(13/14): git-svn-1.8.2.1-1.el5.i386.rpm                                                                                                                                       | 387 kB     00:00     
(14/14): git-1.8.2.1-1.el5.i386.rpm                                                                                                                                           | 7.3 MB     00:00     
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                3.7 MB/s | 9.3 MB     00:02     
warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 217521f6


GPG key retrieval failed: [Errno 5] OSError: [Errno 2] No such file or directory: '/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL'

キーが存在しなかったので入れる。

# cd /etc/pki/rpm-gpg/
# wget --no-check-certificate https://fedoraproject.org/static/217521F6.txt
# cp 217521F6.txt RPM-GPG-KEY-EPEL
# rm 217521F6.txt
# yum install git-daemon

再度挑戦。

Downloading Packages:
warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 217521f6
epel/gpgkey                                                                                                                                                                   | 1.8 kB     00:00     
Importing GPG key 0x217521F6 "Fedora EPEL <epel@fedoraproject.org>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : perl-DBD-SQLite                                                                                                                                                              1/23 
  Installing     : xinetd                                                                                                                                                                       2/23 
  Updating       : perl-Git                                                                                                                                                                     3/23 
  Updating       : git                                                                                                                                                                          4/23 
  Installing     : git-daemon                                                                                                                                                                   5/23 
  Updating       : gitk                                                                                                                                                                         6/23 
  Updating       : git-gui                                                                                                                                                                      7/23 
  Updating       : emacs-git                                                                                                                                                                    8/23 
  Updating       : git-email                                                                                                                                                                    9/23 
  Installing     : git-p4                                                                                                                                                                      10/23 
  Updating       : git-cvs                                                                                                                                                                     11/23 
  Installing     : perl-Git-SVN                                                                                                                                                                12/23 
  Updating       : git-svn                                                                                                                                                                     13/23 
  Updating       : git-all                                                                                                                                                                     14/23 
  Cleanup        : emacs-git                                                                                                                                                                   15/23 
  Cleanup        : git-email                                                                                                                                                                   16/23 
  Cleanup        : git-cvs                                                                                                                                                                     17/23 
  Cleanup        : perl-Git                                                                                                                                                                    18/23 
  Cleanup        : git-svn                                                                                                                                                                     19/23 
  Cleanup        : git                                                                                                                                                                         20/23 
  Cleanup        : git-all                                                                                                                                                                     21/23 
  Cleanup        : gitk                                                                                                                                                                        22/23 
  Cleanup        : git-gui                                                                                                                                                                     23/23 

Installed:
  git-daemon.i386 0:1.8.2.1-1.el5                                                                                                                                                                    

Dependency Installed:
  git-p4.i386 0:1.8.2.1-1.el5                  perl-DBD-SQLite.i386 0:1.14-3.el5                  perl-Git-SVN.i386 0:1.8.2.1-1.el5                  xinetd.i386 2:2.3.14-20.el5_10                 

Dependency Updated:
  emacs-git.i386 0:1.8.2.1-1.el5    git.i386 0:1.8.2.1-1.el5     git-all.i386 0:1.8.2.1-1.el5     git-cvs.i386 0:1.8.2.1-1.el5    git-email.i386 0:1.8.2.1-1.el5    git-gui.i386 0:1.8.2.1-1.el5   
  git-svn.i386 0:1.8.2.1-1.el5      gitk.i386 0:1.8.2.1-1.el5    perl-Git.i386 0:1.8.2.1-1.el5   

Complete!
# /etc/init.d/xinetd start
Starting xinetd:                                           [  OK  ]
# cp /etc/xinetd.d/git /etc/xinetd.d/git-daemon
# vim /etc/xinetd.d/git-daemon
# default: off
# description: The git d&#230;mon allows git repositories to be exported using \
#       the git:// protocol.

service git
{
        disable         = no      # <- 変更
        socket_type     = stream
        wait            = no
        user            = nobody
        server          = /usr/libexec/git-core/git-daemon
        server_args     = --base-path=/var/lib/git --export-all --user-path=public_git --syslog --inetd --verbose
        log_on_failure  += USERID
}
# /etc/rc.d/init.d/xinetd restart
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]

無事入ったのでリポジトリを作っていきます。

# cd /var/lib/git/
# mkdir public_git
# mkdir public_git/test.git
# cd public_git/test.git
# git init --bare --shared=true
Initialized empty shared Git repository in /var/lib/git/public_git/test.git/

コミットできるユーザーを作ります

# groupadd git
# adduser git
# passwd git
# chown -R root:git /var/lib/git/

コミットできるユーザーでクローン

# su git
$ cd
$ mkdir test
$ cd test
$ git clone ssh://git@<LOCAL_DOMAIN>:22/var/lib/git/public_git/test.git
Cloning into 'test'...
The authenticity of host '<LOCAL_DOMAIN> (<LOCAL_DOMAIN>)' can't be established.
RSA key fingerprint is df:54:05:12:a6:27:8c:f0:b4:ff:8e:1b:cd:8c:52:b9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '<LOCAL_DOMAIN>' (RSA) to the list of known hosts.

あとは編集していくだけ

$ git config --global user.email "xx@xxxx.xx"
$ git config --global user.name "git"
$ cd test
$ vim test.txt
$ git add test.txt
$ git commit -m "commit!"
$ git push 

出来ました!


[おまけ]よくあるエラー

ファイルをコミットしてない時に出る

No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'ssh://git@<LOCAL_DOMAIN>:22/var/lib/git/pupblic_git/test.git'


書き込み権限がないので、きちんとpushできるようにグループやユーザーに権限を与える事。

fatal: Unable to create '<PATH_TO_REPOS>/master.lock': Permission denied

私的にgitでよく使うコマンド

ローカル&リモートにブランチを作る

$ git checkout -b working origin
$ vim test.txt
$ git commit -am "commit" 
$ git push origin working

ローカルブランチを削除

$ git branch -d <branchname>

リモートブランチを削除

$ git push --delete <repository> <branchname>

ブランチをマージする

$ git fetch origin
$ git merge origin/master somebranch

git branch -a で消したブランチが出る

$ git fetch --prune

solrでjava.net.UnknownHostExceptionと出た時の解決法

solrを使っていて、updateやcommitする際に

java.net.UnknownHostException local.test

上記みたいな自分で設定したローカルドメインでunknown hostが出た時。

$ vim /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.xxx.xxx local.test

という風にhostsに設定してやると認識されるようになる(要再起動)
名前解決できない時はhostsで直してやるのだ

GitHubで初めてのコミット

まず始めにリポジトリを作ります。

GitHubの画面の右下にある「New repository」をクリック

リポジトリの名前を入れます

完成


次いでローカルリポジトリを作ります・・が
その前に初期設定をします

$ git config --global user.name '<user_name>'
$ git config --global user.email '<user_email>'
$ git config --global alias.co checkout
$ git config --global alias.st status
$ git config --global alias.ci commit

ローカルリポジトリ作ります。
まずは適当な箇所にディレクトリを作って移動します

$ mkdir /var/www/tutorial
$ mv /var/www/tutorial

移動したらディレクトリを初期化します
これで.gitが作成され、管理下におかれました。

$ git init
Initialized empty Git repository in .git/

なんでもいいのでファイルを作ります

$ vim sample.txt
$ git st
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       sample.txt

インデックスに登録します

$ git add sample.txt
$ git st
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   sample.txt
#

コミットします

$ git commit -m "first commit"
[master (root-commit) 6069b73] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 sample.txt

ここからリモートリポジトリにようやくコミットをしていきます

まずは名前を付けます。今後はoriginという名前にします

$ git remote add origin <リポジトリのURL>

pushします。ユーザー名とパスワードを求められるので登録したものを入れてください。

$ git push origin master

これでGitHub上にコミット完了です。

【Ruby on Rails】ユニットテストをする

Ruby on Railsでテストをしたい。

テストはrakeで行うようです。

$ rake
Run options: --seed 9253

# Running tests:

..............

Finished tests in 1.049915s, 13.3344 tests/s, 24.7639 assertions/s.

14 tests, 26 assertions, 0 failures, 0 errors, 0 skips

とテストが実行されます。
まだテストを書いていないので何も起きません。

userテーブルに対してテストを書いていきます。

# vim test/models/user_test.rb 

userテーブルには2つだけレコードが入っていますが
わざと99個にしてみます。

require 'test_helper'

class UserTest < ActiveSupport::TestCase
  # Replace this with your real tests.
  test "the truth" do
    assert true
  end

  # usersテーブルは99のデータが入っているか
  test "test_data_count" do
    user=User.all
    assert_equal 99 ,user.length
  end
end
# rake
Run options: --seed 34206

# Running tests:

.......F........

Finished tests in 0.346363s, 46.1944 tests/s, 80.8402 assertions/s.

  1) Failure:
UserTest#test_test_data_count [<PATH_TO_APP>/test/models/user_test.rb:12]:
Expected: 99
  Actual: 2

16 tests, 28 assertions, 1 failures, 0 errors, 0 skips

Failureが出ました。
正しく動くように書き換えます
※16testsと出てるのは他でテスト書いてるためです

require 'test_helper'

class UserTest < ActiveSupport::TestCase
  # Replace this with your real tests.
  test "the truth" do
    assert true
  end

  # usersテーブルは2つのデータが入っているか
  test "test_data_count" do
    user=User.all
    assert_equal 2 ,user.length
  end
end
# rake
Run options: --seed 59983

# Running tests:

................

Finished tests in 0.276852s, 57.7927 tests/s, 101.1372 assertions/s.

16 tests, 28 assertions, 0 failures, 0 errors, 0 skips

無事テストが通りました。

このようにしてテストを書いていきます。

【Ruby on Rails】カラムを追加する

やり方は2つ

1. migrationファイルを書く
2. コマンドを書いてmigrationファイルを自動生成

1. migrationファイルを書く場合

/db/migrate/以下にタイムスタンプ(西暦、月、日、時、分、秒)_行う処理.rb
を作ります。

そこに処理を記述していきます。

使えるメソッド

create_table
drop_table
change_table
rename_table
add_column
rename_column
change_column
remove_column
add_index
remove_index
remove_index

例:

class AddColumnToUses < ActiveRecord::Migration
  def up
    add_column :users, :additional_column, :string
  end
end

userテーブルにadditional_columnをstringで追加します。


2. コマンドを書いてmigrationファイルを自動生成する場合

下記コマンドを打つとmigrationファイルが生成されます

# rails g migration add_released_on_to_users additional_column:string
add_released_on_to_<tablename>

ここでテーブルを指定しますが、複数形になることに注意です

こんな感じ

<APP_ROOT>/db/migrate/タイムスタンプ(西暦、月、日、時、分、秒)_行う処理名.rb

中身は

class AddReleasedOnToUsers < ActiveRecord::Migration
  def change
    add_column :users, :additional_column, :string
  end
end

最後はmigrate

# bundle exec rake db:migrate

未実行のmigrateファイルが実行されます。