CentOSにApache httpdをいれたらiptablesに弾かれたでござる。

目論見

昨日のに続いてsvnWebDAV使ってhttpで使えるようにしてみたいのでapacheをいれる。

インストール

# yum install httpd

完了。yum万歳w
本当はここからhttpd.confを弄るところだがどうせテスト的にしか使う気がないのでとばす。

起動

# /etc/init.d/httpd start
httpd を起動中:                                            [  OK  ]
# ps aux|grep httpd

プロセスがちゃんと動いていたらおk。

確認

では早速ブラウザからアクセスしてみませう。

orz

何故彼は繋がろうとしないのか。

Macからpingうってみる。

$ ping centos01
PING centos01 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.536 ms
・
・

いけてるのでtelnet

$ telnet centos01 80
Trying 192.168.1.1...
telnet: connect to address 192.168.1.1: Connection refused
telnet: Unable to connect to remote host

おっ。弾かれている。
tracerouteは?

$ traceroute centos01
traceroute to centos01 (192.168.1.1), 64 hops max, 52 byte packets
 1  centos01 (192.168.1.1)  0.502 ms !Z  0.105 ms !Z  0.193 ms !Z

いけてるっぽい。
ぐぐってみたらFWくさい。

# /sbin/iptables -L --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    RH-Firewall-1-INPUT  all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    RH-Firewall-1-INPUT  all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain RH-Firewall-1-INPUT (2 references)
num  target     prot opt source               destination         
1    ACCEPT     all  --  anywhere             anywhere            
2    ACCEPT     icmp --  anywhere             anywhere            icmp any 
3    ACCEPT     esp  --  anywhere             anywhere            
4    ACCEPT     ah   --  anywhere             anywhere            
5    ACCEPT     udp  --  anywhere             XXX.XXX.XXX.XXX         udp dpt:mdns 
6    ACCEPT     udp  --  anywhere             anywhere            udp dpt:ipp 
7    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ipp 
8    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
9    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
10   REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

RH-Firewall-1-INPUTのREJECTの前にhttpとhttpsを入れればいいのかな?

# /sbin/iptables -I RH-Firewall-1-INPUT 10 -p tcp --dport https -j ACCEPT
# /sbin/iptables -I RH-Firewall-1-INPUT 10 -p tcp --dport http -j ACCEPT
# /sbin/iptables -L --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    RH-Firewall-1-INPUT  all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    RH-Firewall-1-INPUT  all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain RH-Firewall-1-INPUT (2 references)
num  target     prot opt source               destination         
1    ACCEPT     all  --  anywhere             anywhere            
2    ACCEPT     icmp --  anywhere             anywhere            icmp any 
3    ACCEPT     esp  --  anywhere             anywhere            
4    ACCEPT     ah   --  anywhere             anywhere            
5    ACCEPT     udp  --  anywhere             XXX.XXX.XXX.XXX         udp dpt:mdns 
6    ACCEPT     udp  --  anywhere             anywhere            udp dpt:ipp 
7    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ipp 
8    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
9    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
10   ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 
11   ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https 
12   REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

追加したら保存。

# /sbin/service iptables save
ファイアウォールのルールを /etc/sysconfig/iptables に保存中[  OK  ]

いけてるかなー?

$ telnet centos01 80
Trying 192.168.1.1...
Connected to centos01.
Escape character is '^]'.
]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>501 Method Not Implemented</title>
</head><body>
<h1>Method Not Implemented</h1>
<p>] to / not supported.<br />
</p>
<hr>
<address>Apache/2.2.3 (CentOS) Server at localhost.localdomain Port 80</address>
</body></html>
Connection closed by foreign host.

おお!
ブラウザからアクセスしてみませう。今度こそ・・・

いけたー。

CentOSにSubversionをいれてみよう

http://park1.wakwak.com/~ima/centos4_subversion0001.html
とか
http://centossrv.com/subversion.shtml
とか参考に。

Subversionのインストール

# yum install subversion

完了。yum万歳。

リポジトリをつくる

プロジェクトをつっこむためのSVNリポジトリってのをまず作る。
リポジトリは、最初に空ディレクトリをつくってからsvnadminコマンドで作る。

# mkdir -p /usr/local/svn/repos
# svnadmin create /usr/local/svn/repos

完了。見てみると空だったディレクトリになんかファイルができているようだ。

# ls /usr/local/svn/repos/
README.txt  conf  dav  db  format  hooks  locks

プロジェクト(モジュール)を登録してみる

適当にそれっぽいファイルを捏造する。

# cd /home/gulibow/
# mkdir -p test01/src
# mkdir -p test01/lib
# echo "hoge" > test01/src/hoge.txt
# echo "foo" > test01/lib/foo.txt
# echo "bar" > test01/lib/bar.txt
# ls -R test01/
test01/:
lib  src
test01/lib:
bar.txt  foo.txt
test01/src:
hoge.txt

こいつを、svn importで登録する。

# svn import -m 'import test' test01 file:///usr/local/svn/repos/test01
追加しています              test01/lib
追加しています              test01/lib/foo.txt
追加しています              test01/lib/bar.txt
追加しています              test01/src
追加しています              test01/src/hoge.txt

リビジョン 1 をコミットしました。

ちなみにrepos配下のtest01ってのはここで適当に指定した。予め作ったりとかはしてない。
成功してんだろうか・・・

指定リポジトリの中身をみるにはsvn listを使う。yum listみたいな感じ。

# svn list file:///usr/local/svn/repos
test01/

おお。できてるっぽい。今度はtest01の中身をみてみる。

# svn list file:///usr/local/svn/repos/test01 -R
lib/
lib/bar.txt
lib/foo.txt
src/
src/hoge.txt

おおー。ちゃんと入ってるっぽいな。
チェックアウトしてみよう。

# cd /home/gulibow
# mkdir -p work/projects/test01
# svn checkout file:///usr/local/svn/repos/test01 work/projects/test01
A    work/projects/test01/lib
A    work/projects/test01/lib/foo.txt
A    work/projects/test01/lib/bar.txt
A    work/projects/test01/src
A    work/projects/test01/src/hoge.txt
リビジョン 1 をチェックアウトしました。

# ls work/projects/test01 -R
work/projects/test01:
lib  src
work/projects/test01/lib:
bar.txt  foo.txt
work/projects/test01/src:
hoge.txt

できたー。
ちなみにsvnではcvsみたいにreleaseとかせずrmしちゃっていいっぽい。

trunk, branch, tag

とりあえず適当にimportしちゃったけども・・・
Subversionではあらかじめtrunk, tag, branchってディレクトリをわけて登録しておくのが「慣例」らしい。
branchはbranch配下におくってことね。

# svn mkdir file:///usr/local/svn/repos/test01/trunk -m "create"
# svn mkdir file:///usr/local/svn/repos/test01/tags -m "create"
# svn mkdir file:///usr/local/svn/repos/test01/branches -m "create"
# svn import -m 'import test' test01 file:///usr/local/svn/repos/test01/trunk

ゴミが残ってる気がするが気にしないw
これが正しいやりかたっぽい。
tagをうつ場合は、

# svn copy file:///usr/local/svn/repos/test01/trunk file:///usr/local/svn/repos/test01/tags/release-1.5 -m "rev1.0"

これで。

MacにVMでLinuxをいれてみる

mavenのいろいろな使い方を試そうと思ったんだがリリースとかデプロイとかリポジトリとかいろいろ試すのにやっぱVMあったほうがいいよね、ということで。

http://d.hatena.ne.jp/wadap/20080629/1214703866
このへん参考に。

なにはともあれダウンロード

WindowsのVMwarePlayerとかは無償だった気がするがMacのVMwareFusionはそうじゃないっぽい。
ただ他のやつも調べてみたがやっぱVMがいいらしい。
とりあえずトライアルで使ってみよう。
https://www.vmware.com/jp/tryvmware/?p=vmware-fusion31&lp=1

なんかダウンロードマネージャが動かなかったので手動でダウンロードした。
ちなみにサポートレスライセンスだと\5,980っぽい。思ったより安い。
http://www.act2.com/products/fusion3.html

VMwareのインストール

落としてきたdmgをクリック。

VMware Fusionのインストールをクリック。
あとはぽちぽち選択してけばいい。シリアル番号はダウンロード画面に表示されてたはず。

ディストリビューションのダウンロード

は・・・なんでもいいんだけどまぁ無難にCentOSにしておこうかな。
http://www.glidenote.com/archives/185#more-185
ここでCentOSのインストールやってたので参考に。

5だとhttp://mirror.centos.org/centos/5/isos/にある。
手元のMac一応64bitなのでx86_64選ぶ。

ミラーサイト適当に選んだら、
CentOS-5.5-x86_64-bin-1of8.iso
をまずは落とす。
時間かかるので2of8を落としつつ・・・

仮想マシンCentOSをいれる

VM立ち上げるとこんな画面になるので

Windowsまたは別のオペレーティングシステムを新しい仮想マシンにインストールします。

ディスクは使用せず続行。
するとオペレーションシステムのインストールディスクイメージファイルを使用ってのが出てくるのでさっき落としたISOを選択。

簡易インストールってのがあるんだがどう料理されるかわからんのでチェック外す。

設定のカスタマイズってのをして、ファイル名はとりあえずcentos01とかにしておく。適当だな。

なんかウィンドウがでてきてメニューがいろいろあるのでディスクサイズを20Gから8Gとかにする。20はいらんでしょ。
めんどくさくなってきたので細かいことは後でまた考える事にして、設定のウィンドウ消してスタートアップを押す。

    1. Media Test > skip
    2. 言語は・・・日本語にしてみようか。
    3. キーボード日本語だし。
    4. パーティション・・は初期化しないとね。レイアウトはデフォで。
    5. NW設定もとりあえずそのまま次へ。
    6. ロケーションはアジア/東京で。
    7. rootのパスワード設定。
    8. 追加タスクはGUI使う気がないのでチェック外す。


ぬぁっ、結構ディスクいるな・・・
全部削るかまよったけどまあいいや。続行。

ディスクひとつ終わるごとに、VMのメニューから
仮想マシン>CD/DVD>ディスクイメージの選択>ディスクの接続ってやってディスクをいれかえる。
全部完了したら再起動。


おおー
とりあえずこの時点でのスナップショットを保存しておく。

VMware toolsをいれる

なんかいれといたほうがいいらしい。
rootでログインした状態で、
VMのメニューから、仮想マシン>VMware toolsのインストール>ダウンロード>インストール

[root@localhost ~]# mount /dev/cdrom /media

mountできたら適当なとこにコピーしてインストール。

[root@localhost ~]# cp /media/VMwareTools-8.4.5-332101.tar.gz /usr/local/src/
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# tar -xvzf VMwareTools-8.4.5-332101.tar.gz
[root@localhost src]# ./vmware-tools-distrib/vmware-install.pl

pathとかいろいろ聞かれるが、デフォルトが[/usr/bin]みたいに表示されるのでそれをそのまま入力。

インストールが完了したら、手動で起動するかログオフするかしろっていわれるのでまぁログオフしてまた入る。

ホストのMacから入ってみよう

ここまできたら最低限のことはできてるので、試しにMacから入ってみよう。
この設定で入れるともうsshd動いてるはず。

[root@localhost ~]# ps aux|grep ssh
root      2933  0.0  0.2  62608  1204 ?        Ss   02:24   0:00 /usr/sbin/sshd
root      8322  0.0  0.1  61144   760 pts/0    R+   03:09   0:00 grep ssh

sshdが動いていたら、IPを確認してみる。

[root@localhost ~]# ifconfig |grep inet
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0

そしたらMacから

$ ssh root@192.168.1.1

で入れる。一応外に疎通できてるかも確認しておく。

ユーザーをつくる

wheelグループにも追加しておく。

[root@localhost ~]# /usr/sbin/useradd gulibow
[root@localhost ~]# passwd gulibow
[root@localhost ~]# /usr/sbin/usermod -G wheel gulibow

wheelグループしかrootになれないようにする

[root@localhost ~]# echo "SU_WHEEL_ONLY yes" >> /etc/login.defs 
[root@localhost ~]# vi /etc/pam.d/su
# Uncomment the following line to require a user to be in the "wheel" group.
auth           required        pam_wheel.so use_uid

※pam.d/suは該当行の#を削除

sshでrootログインできなくする

[root@localhost ~]# vi /etc/ssh/sshd_config 
#PermitRootLogin yes
↓
PermitRootLogin no
[root@localhost ~]# /etc/init.d/sshd restart

もう一度Macからsshでroot@で入ろうとすると弾かれていればOK。
あとさっき作ったユーザーでログインできて、rootになれることも確認。

yumアップデート

[root@localhost ~]# yum -y update

ホスト名も変更しておこう

ここまでやってきてあれだが。

[root@localhost ~]# vi /etc/hosts
centos01 を追記
127.0.0.1               localhost.localdomain localhost centos01

[root@localhost ~]# vi /etc/sysconfig/network
#HOSTNAME=localhost.localdomain
HOSTNAME=centos01

[root@localhost ~]# /etc/init.d/network restart

一旦ログアウトすれば反映されてる。
Mac側のhostsに追記すれば、

$ ssh gulibow@centos01

でいけるようになってる。

入れるとこまではひとまず完了。

細かい設定とかはさておき、お疲れさまでした。

m2eclipseでmavenプロジェクトをつくってみる

m2eclipseのインストール

何故m2eclipseかは深く考えていない。前にいいよ、っていわれたので。
EclipseのHelp>Install New Softwareにhttp://m2eclipse.sonatype.org/sites/m2e を追加してインストールするだけ。

早速プロジェクトをつくってみる

File>New>Maven
からMaven Projectを選んでNext。
チェックアウトとかモジュールもあとでやってみよう。

archetypeってのがいわゆるスニペットというかテンプレートというかな雰囲気だが
とりあえずはまんまでつくってみることにしたいので
Create a simple projectにチェックしとく。

NextいくとなんかGroup IdとかArtifact Idをいれろといわれる。

グループ Id(groupId)はプロジェクトを一意に識別する名前で、プロジェクトのルートパッケージ名を指定するのが一般的です。

アーティファクト Id(artifactId)はプロジェクトの成果物の名前です。JARやWARにつける名前を指定してください。

http://d.hatena.ne.jp/Kishi/20090228/1235813480

ってあったんだけどhttp://maven.ozacc.com/みるとなんか適当くせぇ。
とりあえずgroup idをmaven-test、artifact idはmaven-sample01とかにしてpackageはjarにしてみる。
なんか空白あるけどまぁいいかってFinishするとなんかmavenがごにょごにょ動いてプロジェクトができる。

おお。できた。

依存性を追加してみる

プロジェクトのコンテキストメニューからMaven>Add Dependency
なんかcommons-langとかいれてみると候補が出て・・・こなかった。
RepositoryのIndexをUpdateしなきゃなんだがなんか失敗する。
フォーラムみてたら日によって発生とか書いてあったwので
とりあえずはpom.xmlを直接編集する方針で。

<project xmlns="http://maven.apache.org/POM/4.0.0" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>maven-test</groupId>
  <artifactId>maven-sample01</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
  	<dependency>
  		<groupId>commons-lang</groupId>
  		<artifactId>commons-lang</artifactId>
  		<version>2.5</version>
  	</dependency>
  </dependencies>
</project>

するとまたmavenがなんかごにょごにょして、commons-langが使えるようになっている!!

package maventest;

import org.apache.commons.lang.StringUtils;

public class Sample01 {
	private static final String PREFIX = "hoge_";
	
	public static void main(String[] args) {
		System.out.println(new Sample01().addPrefix("test"));
	}	
	
	public String addPrefix(String str) {
		if(StringUtils.isBlank(str)) return PREFIX;
		
		return PREFIX + str;
	}
}

ちゃんとコンパイル通る。
テストもつけてみよう。今度はpom.xmlをこんな感じにしてみる。

<project xmlns="http://maven.apache.org/POM/4.0.0" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>maven-test</groupId>
  <artifactId>maven-sample01</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
  	<dependency>
  		<groupId>commons-lang</groupId>
  		<artifactId>commons-lang</artifactId>
  		<version>2.5</version>
  		<scope>compile</scope>
  	</dependency>
  	<dependency>
  		<groupId>junit</groupId>
  		<artifactId>junit</artifactId>
  		<version>4.3</version>
  		<scope>test</scope>
  	</dependency>
  </dependencies>
</project>

junitdependencyを追加したんだけど、今度はscopeを指定してみた。testだとテストのときしか依存性ができない。

package maventest;

import static org.junit.Assert.*;

import org.junit.Test;

public class Sample01Test {

	@Test
	public void testAddPrefix() {
		String prefix = "hoge_";
		String input = "maventest";
		assertEquals(prefix + input, new Sample01().addPrefix(input));
	}

}

普通にJUnit動かすんじゃなくて、mavenのtestを実行してみる。
Run AsからMaven実行して、goalをtestにしてみる。

                                                                                                            • -
T E S T S
                                                                                                            • -
Running maventest.Sample01Test Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.148 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.514s [INFO] Finished at: Sat Jan 08 03:51:32 JST 2011 [INFO] Final Memory: 6M/81M [INFO] ------------------------------------------------------------------------

おお。動いてるっぽいぞ。
今度はわざと失敗してみる。

	@Test
	public void testAddPrefix() {
		String prefix = "baka_";
		String input = "maventest";
		assertEquals(prefix + input, new Sample01().addPrefix(input));
	}
                                                                                                            • -
T E S T S
                                                                                                            • -
Running maventest.Sample01Test Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.16 sec <<< FAILURE! Results : Failed tests: testAddPrefix(maventest.Sample01Test) Tests run: 1, Failures: 1, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.402s [INFO] Finished at: Sat Jan 08 03:54:19 JST 2011 [INFO] Final Memory: 6M/81M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test (default-test) on project maven-sample01: There are test failures. [ERROR] [ERROR] Please refer to /Users/gulibow/Documents/workspace/maven-sample01/target/surefire-reports for the individual test results. [ERROR] -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

おおおお。ちゃんと失敗した。