2011年3月19日土曜日

CentOS 5.5のsudoを使えるようにする

Ubuntuを使ってるので、気がつくと「sudo yum check-update」って打ってる(笑)
さすがに不便だし、セキュリティ的にも毎回Rootのパスワードを打つっていうのもイヤなので、sudoの設定をします。

例によって、参考サイトをまとめただけですが。
        日々のメモ:CentOS:sudo を設定する
        俺の作業ログ :sudo時のPATH(CentOS5.5)

まず、sudoがインストールされているか確認。
       yum install 〜 でも良いけど、面白くないので。
       sudo yum check-update で「あなたはsudoに登録されてないよ〜」って言われればOK。

次に、実際に登録します。管理者権限に昇格して作業をします。
そのまえに、「vi」を使って編集するので、使い方が分からない人は、先に調べておきましょう。間違って編集すると大変なので(汗)

        visudo でsudoの設定ファイルを編集します。
※PATHが通ってなかったようなら「/usr/sbin/visudo」で。

        似てる行が上下に並んでいるので、間違えないように!編集するのは「wheel」グループを許可する方です(上側)

## Allows people in group wheel to run all commands
# %wheel  ALL=(ALL)       ALL                  # 先頭の「#」を削除

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL


これで保存すればsudoで昇格できますが、このままだとPATHが何一つ通ってないです(私の環境では)。

そのために、次に同じファイルの別の部分を書き換えます。

# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty

Defaults    env_reset
Defaults    env_keep = "PATH COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \ ........

という部分の色を変えてある部分を、以下のように書き換えます

Defaults    env_keep +="PATH"

これで保存をすれば、昇格も出来て、PATHが通った状態になります。


2011年3月18日金曜日

CetOSのカーネルを2.6.35にアップデート

CnetOSのKVMを使って、OpenIndianaをインストールしようとすると、どうしてもLiveCDのGnomeが起動できない。できてもディスクアクセスが、遅すぎて使い物にならない(インストールで2時間放置したけど進捗が2%から進まなかった)。

きっとQEMU-KVMのバージョンが古いからだ! ってことで、バージョンアップを始めた。しかしYumで提供されている、最新のカーネルは2.6.18-194.32.1.el5で、これだとKVMのVer.0.14が使えない。

そのためKVMを新しいバージョンにするには、CentOSのカーネルも新しくしなければならないことに気がついた。

参考サイトは
garakuta.net:kernel 2.6.37...
Let's Try It!:CentOSに最新カーネルを導入する(カーネル再構築)

まず、参考サイトにあるELRepoを使うための設定。

Get startedのPublic Keyを読み込ませます。(カーネルインストール時に不審な物と思われないため)

          rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org

本当は次に、レポジトリを使うためのrpmをインストールするけど、今回はインストールファイルの検索とダウンロードは手動でやるのでパス。

ダウンロードファイルはhttp://elrepo.org/linux/にあります。今回はx86_64を使っているので、その中のkernel/el5/x86_64/RPMSからほしいカーネルをwgetで入手。

とりあえず、そこそこ安定してて新しそうな(?)kernel-ml-2.6.35-11.el5.elrepo.x86_64.rpmにしました。

あとはインストールするだけ。もちろん管理者でおこないます。

         yum localinstall kernel-ml-2.6.35-11.el5.elrepo.x86_64.rpm

あとは再起動すれば、インストールしたカーネルになります。(ちゃんとgrubの画面から手動で選んでください)

カーネルパニックを起こさなければ、grubを書き換えて、起動優先順位が1番にします。

/boot/grub/menu.lst を書き換えます。


default=0                 # <- 0に書き換え
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.35-11.el5.elrepo)
        root (hd0,0)
        kernel /vmlinuz-2.6.35-11.el5.elrepo ro root=/dev/VolGroup00/RootVol rhgb quiet
        initrd /initrd-2.6.35-11.el5.elrepo.img
title CentOS (2.6.18-238.5.1.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-238.5.1.el5 ro root=/dev/VolGroup00/RootVol rhgb quiet
        initrd /initrd-2.6.18-238.5.1.el5.img

一回カーネルのアップデートをした上に、Raidを組んでるので、ちょっと特殊です。。。


カーネルパニックは起こさない物の、起動時にエラー(dm-region-hash.koエラー)を吐きます・・・・・・。特に不具合はないらしいですけど、気持ち悪いので修復します。

修復方法は、参考サイトのgarakuta.net:kernel 2.6.37...のそのままなので載せませんが、「1つ目 dm-region-hash.koのエラー」をやると、ちゃんとエラーは消えました。

同サイトには、それ以外にもエラーが出る見たいですけどカーネルのVer.違いか、今回はそれ以外のエラーはありませんでした。

あとは、OpenIndianaが無事に使えるようになればいいけどなぁ・・・・・・
結果は後ほど。



2011/03/19 追記
OpenIndianaのio_180でインストールした結果、特に特殊な設定はしなくてもインストールが出来ました(^^)/

しかし・・・シャットダウンにしても、Init 0にしても、「Press any key ~ Reboot....」って言われます(笑)
当然何か押すと再起動するので、「Force off」で強制的に最後は切る羽目に・・・・。このときにCPU使用率が100%に張り付いたままになるので、どこかに問題があるはずだけど、詳しくは調べません。

まだio_180は、Developper向けのだからバグがあっても不思議ではないし。安定版が出たら再度検証してみます。

2011年3月16日水曜日

Blogの見やすさ改良

本題に入る前に。

東北地方太平洋沖地震に被災された方に、心よりお見舞いを申し上げます。

今回の地震は、私の友人も青森にいますし、私も東京で地震に遭いました。とても人ごとのように思えないのですが、今すぐに何か出来るほどの力はありません。今は、少しでもよいニュースが聞けるように願うばかりです。


閑話休題。
ソースコードを貼ったときに見にくくなるので、ちょっとだけ改良。
今までの、投稿に適用して、見やすくなったはず。

それに使ったのが「Blogger Syntax Highlighter」という、行番号も表示される優れも。適用も簡単で使いやすそうなので、さっそく次のサイトを参考にやってみました。

クリボウの Blogger Tips:コードをハイライトする「Blogger Syntax Highlighter」ウィジェット

かなり簡単に適用できるんだけど、一つだけ問題が発生。

Bloggerがはき出すHTMLが汚すぎる(^_^;)
人が読むには向いてない・・・・・無駄にタグだらけ・・・・・

この難解なソースを解読すれば、あとは簡単。

適用したいコードを指定タグでくくれば、適用完了!

2011年2月28日月曜日

CentOS 5.5でVNCサーバーの設定

CentOS5.5 x86-64でのVNCサーバーの設定メモ。個人的過ぎるメモ。
xinetdをつかって、必要なときだけ接続できるように設定。


rderaさんのCentOS5.3にVNCでアクセスできるようにした。がまとまっててよかったので参考にさせていただきました。


以下その抜粋と、一部修正(5.5と5.3だと微妙に違うのかな?)
2011/03/15: 設定が間違っていたので修正


管理者で必要なものをインストール


  yum install xinetd vnc vnc-server


/etc/servicesに以下を追加


  vnc 5900/tcp # VNC Server


   ※5900番ポートで待ち受け
   ※GUIだと、「システム」→「管理」→「サーバーの設定」→「サービス」でいけそう(要検証)


/etc/xinetd.d/に「vnc」で起動ファイルを作成(/etc/xinetd.d/vnc)
service vnc
{
        disable         = no
        socket_type     = stream
        wait            = no
        user            = nobody
        instance        = 3
        server          = /usr/bin/Xvnc
        server_args     = -inetd -query localhost -once -geometry 800x600 -depth 16 -SecurityTypes None
        only_from       = 192.168.1.0/24 127.0.0.1
        log_on_success  += DURATION
        log_on_failure  += HOST
}


     ※詳細は参考サイト参照
     ※server_args の行は勝手に改行されやすいので、保存前に一行になっているか確認(これ気づくのに時間がかかった)
     ※localhostをサーバーのIPにしないと、GUIで管理者以外でログインし、管理者権限まで昇格できない
     ※-depth 24にしても16と大差ないから24でいいかも。綺麗だし
     ※Login画面をローカルと同じにするには、GUIからの方が楽。「システム」→「管理」→「ログイン画面」で変更可


/etc/gdm/custom.confでGnomeが使えるようにとセキュリティの設定。


[security]
AllowRemoteRoot=false

[xdmcp]
Enable=true

[gui]

[greeter]
IncludeAll=false


Firewallで5900/tcpを許可


    ※GUIなら「システム」→「管理」→「セキュリティレベルとファイヤーウォールの設定」で変更
    ※CUIなら管理者権限で「setup」を実行。「ファイヤーウォールの設定」→「カスタマイズ」で変更


ここで再起動して設定終了。


あとはクライアントからアクセスしてつながればOK.
だめならファイヤーウォールの設定が合っているか、/etc/xinetd.d/vncで変な改行がないかを確認。

2011年2月19日土曜日

Java Listではまった(解決?)

ずいぶんと時間が経ってしまった。そんなに悩んでたわけではないけど、記録に残すのが面倒で気がついたら。。。


それで現状では、次のようにして実装した。


●格納

List[] arrays = new List[2];
double[] a = new double[]
{
    0, 1, 2, 3, 4
};
double[] b = new double[]
{
    5, 6, 7, 8, 9
};

for (int i = 0; i < 5; i++)
{
    arrays[0].add(a[i]);
    arrays[0].add(b[i]);
}

for (int i = 0; i < 5; i++)
{
    blist.add(b[i]);
}
これで、Arrayに格納することができた(スマートな方法じゃないけど)。とりあえず動かないことには話にならないんで(^_^;)


●取り出し
List[] arrays = new List[2];
double[] getA = new double[arrays[0].size()];
double[] getB = new double[arrays[1].size()];

for (int i = 0; i < arrays[0].size(); i++)
{
    getA[i] = Double.parseDouble(arrays[0][i].get.tostrig());
    getB[i] = Double.parseDouble(arrays[1][i].get.tostrig());
}

これでもとの配列にはなった。けど、一回文字列にして、それをDoubleに変換しているところが微妙。たぶん違うやり方があるはず。
こんなんでも動くことは動くけど、オーバーヘッドがかなり大きいはずなので、改善しないと問題ありです(^_^;)
Doubleとdoubleが違うところではまったのはナイショ。
double.parse~ができない~って(笑)

2011年1月8日土曜日

Java Listではまった

Javaで配列に似たもにListがある。
配列→固定長(初期化時にサイズを決める)
List→可変長(初期化後でもサイズ変更が可能)
ぐらいの理解で居たら、ずいぶんと違うものだったみたい。

たとえば、
List<Double> list = new ArrayList<Double>();
list.add(10.0);
list.add(0.00001);

System.out.println(list.get(0));
System.out.println(list.get(1));
のようなコードであれば、10.0、1.0E-5が帰ってくる。
ここまでは私の考えていたとおりのでした。

イメージとしてはこんな感じ。



次に、List[]を試してみました(Listを配列にする人なんて居ないでしょうけど。。)
さっきのことからすると、こうなるのかなと予想しました。


今回は次のコードで、
List[] arrays = new List[3];
double[] a = new double[]
{
    0, 1, 2, 3, 4
};
double[] b = new double[]
{
   5, 6, 7, 8, 9
};
double[] c = new double[]
{
   11, 22, 33
};

//配列をまとめてListに変換
arrays[0] = Arrays.asList(a);
arrays[1] = Arrays.asList(b);
arrays[2] = Arrays.asList(c);

System.out.println(i + " " + j + " " + arrays[0].get(0));
System.out.println(i + " " + j + " " + arrays[1].get(0));
System.out.println(i + " " + j + " " + arrays[2].get(0));
すると、 [D@78b5f53a、 [D@71f6f0bf、 [D@b37c60dと出力されました。
どうやら、doubleの配列で帰ってきてるみたいですね。

0,5,11と帰ってくると思ってましたよ。Java APIにもget()で指定の要素が取り出せるって書いてあったんですけどね。

私のイメージは間違ってたみたいです。正しくは下の図のようにdouble[]としてはいってるみたいです。

私の思って通りにはならないみたいですけど、次のようにするとちゃんと数値をプリントするようにはなりました。
List arrays = new ArrayList();
double[] a = new double[]
{
     0, 1, 2, 3, 4
};
double[] b = new double[]
{
     5, 6, 7, 8, 9
};

List<Double> alist = new ArrayList();
for (int i = 0; i < 5; i++)
{
    alist.add(a[i]);
}
List<Double> blist = new ArrayList();
for (int i = 0; i < 5; i++)
{
    blist.add(b[i]);
}

arrays.add(alist);
arrays.add(blist);

System.out.println(i + " " + " " + arrays.get(0));
System.out.println(i + " " + " " + arrays.get(1));
出力は[0.0, 1.0, 2.0, 3.0, 4.0]、[5.0, 6.0, 7.0, 8.0, 9.0]とちゃんと帰ってきました。
ただ、これをどうやって元のdouble[]にすればいいのかわからんです。。

入れた値を取り出すにはどうしたら良いのだろう。。

2011年1月2日日曜日

まず初めに。

あけましておめでとうございます。
本年からよろしくお願いします。

2011年が始まってすぐに、なぜBlogを立ち上げたか。
それは今年の抱負(目標)として、調べたことなどをまとめるブログを作る!ってTwitter(@h_tsk)で公言したから。
それで、まずは行動を。ってことで、まずは立ち上げたって訳です。

肝心のBlogに書く内容は、プログラミング言語(Java、C#、もしかしたらScala)とOpensolaris(OpenIndiana)、MacOS X、Linux、がメインになると思います。

すでにネタはいくつか思いついているので、書けばいいんですけど。
つぎの投稿は今月中にはします!
あぁ、言ってしまった、書かなければならなくなった。