2009-06-24

keepalived のインストール

 
keepalived-1.1.17.tar.gz
cd /usr/local/src
wget http://www.keepalived.org/software/keepalived-1.1.17.tar.gz
tar zxvfl ./keepalived-1.1.17.tar.gz
cd /usr/local/src/keepalived-1.1.17
./configure
make
make install



備考

最初は RedHat にインストールされていたぽい OpenSSL を使って configure してみたら下記のエラーがでた。

checking openssl/ssl.h usability... no
checking openssl/ssl.h presence... no
checking for openssl/ssl.h... no
configure: error:
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files. !!!

openssl-0.9.8i.tar.gz を make までしたのがあったので、 シンボリックリンクとやらで /usr/local/include/openssl なんかをごにょごにょしてみた。
うん。うまくいった。
OpenSSL だけのパスはきれないぽい。


Forums の書き込みにこんなのがあったので違う OpenSSL 使ってみたのだ。

On RedHat systems, OpenSSL lib install is a little broken. So I would recommand removing any other previous OpenSSL release and re-instal using the openssl.org tarball. (and all the include libs must be configured : /usr/include/openssl, and lib and shared lib).


少し壊れてるってどういうこと?詳しいことは ... いいや。
それより、今はこいつがナニモノなのかわからずにインストールしていることの方が ... (ry。



環境
cat /etc/redhat-release
Red Hat Linux release 9 (Shrike)

 

2009-06-23

Java : Process を使ってコマンドを実行したい


Java で Process を使ってコマンドを実行したい ... とか思ってはいない



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;


public class Sample {

    public static void main(String[] args) {
        execute1("ipconfig");
        execute2("ipconfig");
    }

    private static void execute1(String command) {
        System.out.println("::: ProcessBuilder :::::");
        Process p = null;
        try {
            p = new ProcessBuilder(command).start(); 
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (p == null) {
            return ;
        }
        InputStream is = p.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        try {
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try { is.close(); } catch (IOException e) {}
            }
            if (p != null) {
                p.destroy();
            }
        }
    }

    private static void execute2(String command) {
        System.out.println("::: Runtime :::::");
        Runtime r = Runtime.getRuntime();
        Process p = null;
        try {
            p = r.exec(command);
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (p == null) {
            return ;
        }
        InputStream is = p.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        try {
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try { is.close(); } catch (IOException e) {}
            }
            if (p != null) {
                p.destroy();
            }
        }
    }
}



ぐだぐだ。
こんなことしたかったんじゃないんだ。



環境
java : jdk160_05(JDev11g 付属)
OS : Windows XP Pro sp2

Java : あるアドレスに到達可能かどうかをテストしたい


Java であるアドレスに到達可能かどうかをテストしたい



import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class Sample {

   public static void main(String[] args) {
       System.out.println("結果 : " + ping("www.exsample.com"));
       System.out.println("結果 : " + ping("www.google.co.jp"));
       System.out.println("結果 : " + ping("www.yahoo.co.jp"));
   }

   private static boolean ping(String host) {
       final int timeout = 5 * 1000;        // 5 秒
       InetAddress address = null;
       try {
           address = InetAddress.getByName(host);
       } catch (UnknownHostException e) {
           System.err.println(e.toString());
       }
       if (address == null) {
           return false;
       }
       System.out.println("ping : " + address.getHostName() + " [" + address.getHostAddress() + "]");
       boolean retval = false;
       try {
           retval = address.isReachable(timeout);
       } catch (IOException e) {
           System.err.println(e.toString());
       }
       return retval;
   }
}

簡単に書いたら下記の通り。
InetAddress.getByName(host).isReachable(timeout);




メモ
コマンドラインから ping を実行するとすべて true が返ってきた。
Windows で実行すると exsample は true が google、yahoo は false が返ってきた。
CentOS で実行するとすべて true が返ってきた。
※ それ以上は調べてない。



参考



環境 1
java : jdk160_05(JDev11g 付属)
OS : Windows XP Pro sp2


環境 2
java : jdk1.6.0_04
OS : CentOS 5.x

2009-06-18

特定のネットワークのトラフィックのダンプを出力したい

 
特定のネットワークのトラフィックのダンプを出力したい



tcpdump -n -i [interface] host [host] -w [file]

tcpdump のオプション(一部のみ)
  • -x : すべてのパケットを 16 進数で表示する
  • -n : アドレスを名前に変換しない
  • -i [interface] : 指定したインタフェースを監視する
  • host [host] : ホストと一致するパケットのみ監視する
  • -w [file] : ファイルに出力する



出力したダンプを読みたい



tcpdump -r [file]

tcpdump のオプション(一部のみ)
  • -r [file] : パケットを -w オプションで作成したファイルから読み込む



メモ
man tcpdump




環境
#cat /etc/redhat-release
CentOS release 5 (Final)

 

2009-06-12

Java : マシン上のネットワークインタフェース名を取得したい


Java でマシン上のネットワークインタフェース名を取得したい



import java.net.*;
import java.util.*;

public class Sample {
   public static void main(String[] args) {
       try {
           Enumeration nis = NetworkInterface.getNetworkInterfaces();
           while (nis.hasMoreElements()) {
               NetworkInterface ni = nis.nextElement();
               System.out.println("Name : " + ni.getName());
           }
       } catch (SocketException e) {
           e.printStackTrace();
       }
   }
}




参考



環境 1
java : jdk160_05(JDev11g 付属)
OS : Windows XP Pro sp2


環境 2
java : jdk1.6.0_04
OS : CentOS 5.x

2009-06-01

vsftpd のインストール

 
vsftpd-1.1.3.tar.gz
cd /usr/local/src
wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-1.1.3.tar.gz
tar zxvfl ./vsftpd-1.1.3.tar.gz
cd /usr/local/src/vsftpd-1.1.3
make
make install



備考

先に vsftpd-2.1.1.tar.gz を make したら下記のエラーがでた。
sysdeputil.c: 関数 `vsf_sysutil_fork_isolate_failok' 内:
sysdeputil.c:1243: `__NR_clone' が宣言されていません (この関数内で最初に利用)
sysdeputil.c:1243: (未宣言の各変数については、それが最初に現われたそれぞれの関数
sysdeputil.c:1243: に対して一度だけ報告されます。)
sysdeputil.c:1244: `errno' が宣言されていません (この関数内で最初に利用)
sysdeputil.c:1244: `EINVAL' が宣言されていません (この関数内で最初に利用)
sysdeputil.c: 関数 `vsf_sysutil_getpid_nocache' 内:
sysdeputil.c:1261: `__NR_getpid' が宣言されていません (この関数内で最初に利用)
make: *** [sysdeputil.o] エラー 1

vsftpd-2.1.0.tar.gz を make したら別のファイルでエラーがでた。
これかなぁ。

Q) Help! vsftpd doesn't build, it complains about problems with incomplete types in sysutil.c.
A) Your system probably doesn't have IPv6 support. Either use a more modern system, use an older vsftpd (e.g. v1.1.3), or wait for a version of vsftpd without this problem!


v1.1.3 で問題ない ... というか rpm パッケージをインストールしてもらったのでどうでもよくなった。
ので、以下略。



環境
cat /etc/redhat-release
Red Hat Linux release 9 (Shrike)