2009年9月9日

yumのproxy設定について

/etc/yum.confに下記を追記後、パッケージマネージャを起動。

proxy=http://your.proxy.address:yourport/

以上

2009年9月2日

bizhub C450/Pのプリンタ設定に挑戦 - ubuntu日記

本日は、KONICA MINOLTA bizhub C450/Pのプリンタ設定をしてみた。

  • [システム]-[システム管理]-[印刷]をクリックし、「プリンタの設定」画面を開く。

  • [新規]をクリックし、「新規プリンタ」画面を開く。

  • [ネットワークプリンタ]-[LPD/LPR Host or Printer]を選択し、ホストにbizhub c450のIPアドレス、キューに、'Print'('は除く)を指定し、[進む(F)]をクリックする。

  • 「ドライバ選択」画面が出てくるので、'Generic PCL 5c Printer Foomatic/hpijs (recommended) (en)'('は除く)を選択する。※細かい説明は割。

  • プリンタの説明を適当に入れて、[適用]をクリック。

なお、以下URLを参考にした。

http://256.com/gray/docs/misc/konica_bizhub_printer_cups_linux.shtml

以下に、bizhub用のドライバを見つけて試してみたが、こちらは最後の[適用]をクリックした際に、「CUPS操作中にエラーが発生しました。'server-error-internal-error'.」となり、使えなかった。

http://openprinting.org/show_printer.cgi?recnum=KONICA_MINOLTA-bizhub_C450

2009年8月28日

Javascriptで一苦労

せっかくアフィリエイト用に作ったJavascriptが、FireFoxでの実行は問題ないのに、IEで実行すると以下のエラーになる。
Web ページ エラーの詳細

ユーザー エージェント: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
タイムスタンプ: Thu, 27 Aug 2009 11:54:13 UTC


メッセージ: HTML Parsing Error: Unable to modify the parent container element before the child element is closed (KB927917)
ライン: 0
文字: 0
コード: 0
URI: http://www39.atwiki.jp/nekonoshin01/pages/96.html
Unable to modify the parent container element before the child element is closed」を直訳すると、「子エレメントがクローズされる前に親コンテナのエレメントを変更することは出来ない。」となる(のかな?)

いろいろ調べるに、ページが完全に表示しきる前に、以下のような操作をIEは許可しないのだそうだ。
document.getElementById('aaa').innerHTML = '<p>Hello world</p>';
じゃぁ、ページが完全に表示されてから、操作すれば良いんだろうと、さらにいろいろ調べるに、window.onloadを使えばよいらしいことを発見。そこで、自作関数のMyFunctionを以下のようにして呼び出すコードをHTML内に適当に埋めてみた。
<script type="text/javascript">
<!--
window.onload=MyFunction('myvaule');
-->
</script>
しかし、FireFoxでは動作したが、IEでは別の以下のエラーとなる。だめなのか。
Web ページ エラーの詳細

ユーザー エージェント: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
タイムスタンプ: Thu, 27 Aug 2009 12:07:33 UTC


メッセージ: 実装されていません

ライン: 207
文字: 1
コード: 0
URI: http://www39.atwiki.jp/nekonoshin01/pages/96.html
試行錯誤のうえ、最初のwindow.onloadの部分を下記に変えることでFireFoxとIE7,IE8で動くことを確認できた。
<script type="text/javascript">
<!--
window.onload=function(){MyFunction('myvaule');}
-->
</script>
解決するのにまる5日もかかってしまった。15年ぶりのプログラミングは楽しくも大変だ。

2009年8月20日

Windows XPのチューニング(目から鱗)

何気なくWebを眺めていたら、「物理メモリが十分ならページファイルを無効にするれば早くなる。」との趣旨の記載を発見。


遅っいディスクへのページアウトがなくなるし、ページキャッシュが不要になるし、これは効果がありそう。


まず、XPくんから試してみることに。


なお、見つけたWebは以下。


http://pc.watanet.com/?p=360

(追伸 '09/08/22)
所有2台のXPくんに試行開始し中2日目。それぞれ以下の状況。
- 2GB-RAM搭載のメインマシンは極めて快適。
- 1GB-RAM搭載のサブマシンはツレと共用利用だが、お互いのアカウントでFireFox全開で使っていると偶に仮想メモリ不足の警告が。それ以外は快適。

2009年8月17日

USBメモリの認識(Ubuntu on VMware server) - Ubuntu日記

WIndows XPのホストOS上にゲストOSとしてUbuntuを導入している。


その為、USBメモリの認識には、初心者向けではない少し特殊な手順が必要だ。


ステップ1.USBデバイスのVIDとPIDを調べる。

  1. まずXPに普通に認識させ、デバイスマネージャから該当USBデバイスを右クリックし、[プロパティ]を選択。
  2. [詳細タブ]をクリックし、"デバイス インスタンス ID"を確認。
  3. その際、例えば、"USB\VID_0BDA&PID_0156\...."となっているとしたら、VIDは"0x0bda"、PIDは"0x0156"と読み取る。

ステップ2.VMwareの定義ファイルを直接編集する。

  1. 該当VMを停止。
  2. *.vmxというファイルを探しだし、以下の行を追加。
    usb.generic.autoconnect = "TRUE"
    usb.autoConnect.device0 = "0x0bda:0x0156"
  3. 該当VMを起動。

参考

  1. VMwareの仮想マシンにUSBデバイスをつないだ
    http://beatsync.net/bayside/memo/log20090215.html

にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村

デスクトップにアナログ時計 - Ubuntu日記

今日は、デスクトップにアナログ時計を表示させてみることにチャレンジ。

手順は以下。

  1. "Synaptic パッケージ・マネージャ"から、"screenlets"をインストール。(詳細割愛)
  2. [アプリケーション]-[アクセサリ]-[Screenlets]を選択。
  3. Screenlets Manager画面からお好きなウィジット(今回は当然目的の”Clock”)を選択し、[Lauch/Add]をクリック。
  4. 忘れずに、"auto start on login"にチェック。

なお、Screenletsの初回起動時に、Error「This is no existing autostart directory fot your user account yet. Do you want me to autumatically create it for you?」と聞かれるので、承諾しておくと良いかと。

(変更履歴)
- 手順4を追加。('09/08/22)

にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村

2009年8月14日

xfy Blog Editorを導入 - Ubuntu2日目

入手元の記載のとおりに、zipファイルを展開し、xfyBlogEditor.shをダブルクリックするが、設定が十分でないと、何も実行されない。


以下に努力のあとと、解決内容を記載しておく。


調査のため、端末を起動し、コマンドラインからxfyBlogEditor.shを起動すると以下のようになる。

$ ./xfyBlogEditor.sh
Error: JAVA_HOME is not defined correctly.
We cannot execute java


JAVA_HOMEの設定状況を同じく端末から調べてみると、どこにも設定している様子がない。

$ env | grep JAVA
$ grep JAVA_HOME ./xfyBlog
Editor.sh
if ! [ -n "$JAVA_HOME" -a -x "$JAVA_HOME/bin/java" ] ; then
echo "Error: JAVA_HOME is not defined correctly."
EXEC_JAVA="$JAVA_HOME/bin/java"
$


そもそもJavaはインストールされているのか、思いつくキーワードでインストール済のパッケージリストを検索するも、何も出てこない。

$ dpkg -l | grep java
$ dpkg -l | grep JAVA
$ dpkg -l | grep jdk
$ dpkg -l | grep j2ee
$


./xfy-blog-090630/requirements.ja.htmlの内容を確認すると以下とのこと。

<参考>動作確認環境
...
Linux系 Ubuntu 8.10 Java SE 6 Update11
...
(なるほど。 "Java SE 6 Update11"が要るのね)


”Synaptic パッケージ・マネージャ"([システム]-[システム管理]-[Synaptic パッケージ・マネージャ])を起動。


クイック検索に"Java"と入れてみる。うぅ~ん、"sun-java6-bin"を入れたら良いのかな?それとも"sun-java6-plugin"か?


それぞれインストール指定をして追加パッケージ等を確認してみると、"sun-java6-plugin"は"sun-java6-bin"を含むみたい。多分pluginなんだからブラウザからも使えるようになるのかな?


ということで、"sun-java6-plugin"を選択。ほかの自動追加インストールは、gsfonts-x11,java-common,odbcinst1debian1,sun-java6-bin,sun-java6-jre,unixodbc。


再度、ターミナルから起動すると上手く行った。

$ ./xfyBlogEditor.sh
...



(追伸. 2009.10.26)
苦労して入れたxfy Blog Editorだったが今は利用を止めている。増えたココログの記事を一気に取ってこれないし、重いので。Webインターフェイスに今は戻ってしまった。

(追伸. 2010.02.23)
増えた記事をWikiに移動し、xfy Blog Editorの利用を再開(ただしXP上で)! したのは良いのだが、なんと2010年1月を以って提供中止とのこと。あれれれれ。

にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村

geditでテキストファイルを開くと文字化けする - Ubuntu2日目

中1週間開いてしまったが、本日が、Ubuntu2日目。



Thunderbirdのデータフォルダを無事にUbuntu環境とWindows環境とで共有でき、機嫌よくメールを見ていたら、1つ問題が発生。



添付のテキストファイルを開くと、文字化けしていて読めやしない。



試行錯誤の末、以下の手順で読めるようになった。



  1. デスクトップから[システム]-[設定]-[メインメニュー]をクリックし、「メインメニュー」画面を起動。

  2. 「メインメニュー」画面から[アプリケーション]-[システムツール]を選択し、「設定エディタ」にチェックを入れる

  3. 「メインメニュー」画面を閉じる

  4. 再びデスクトップから[アプリケーション]-[システムツール]-[設定エディタ]をクリックし、「設定エディタ」画面を起動。

  5. 「設定エディタ」画面から、左側のツリー構造を/apps/gedit-2/preferences/encoding/と辿り、右側に出てくるauto_detectedをダブルクリックし、「キーの編集」画面を起動。

  6. 「キーの編集」画面から、[追加]をクリックし、新しいリストの要素として、"cp932"("は除く)を入力し、[OK]をクリック。

  7. 再び、「設定エディタ」画面から、上記で追加した"cp932"を選択し、[上へ]を必要回数クリックし、"UTF-8"の次に来る位置へ移動させ、[OK]をクリック。

  8. 「設定エディタ」画面の右上[×]をクリックし、画面を終了。

マウスホイールの動きが変 - Ubuntu2日目

マウスホイールを上に動かすと、FireFoxほか、画面が一気に一番下までスクロールしてしまう。


これは、困った。


Google先生に聞いてみると、以下のネタを発見。


[ubuntu][vmware]VMware Server 2上のUbuntu 9.04でマウスがうまく動かない


上記では、コマンドラインからの対処が書かれているが、あくまでもGUIにこだわってみた。


  1. "Synaptic パッケージ・マネージャ"を起動。

  2. クイック検索に、"xserver-xorg-input-vmmouse"と入力。

  3. "xserver-xorg-input-vmmouse"を右クリックからインストール指定し、[適用]をクリック。後は画面なりに進む。

  4. 最後、Ubuntuを再起動。(GUIからxorgだけ再起動できない?)


これで、ホイール操作どおりにFireFoxがスクロールするようになった。

2009年8月9日

DiMAGE Xtの復活を画策中

KONIKA MINOLTAがデジカメ事業から撤退してから、幾年月。


バッテリーの寿命が尽きてしまい、使い物にならなくなったDiMAGE Xtくん。


本日、ふと、楽天市場で純正バッテリーの"NP-200"を検索してみると、純正品ではないが、互換品が意外と出てくる。評判も上々の様子。これは買ってみよう。



楽天

●定形外送料無料●【2個セット】ミノルタ DiMAGE XgのNP-200対応バッテリー

(追伸. 2009.10.26)
上記のバッテリーは実際に購入してみた。安くて、長持ち、満足している。純正品はいったい何だったのか?技術の進歩なのか?


2009年8月7日

Windowsフォルダをubuntu起動時に自動でマウントしたい - Ubuntu初日

 「サーバへ接続」では、それが出来ないようだ。

 いろいろ調べ回って、結局、さきほど封印したばかりの"sudu su"を実行。

$ sudo su

# vi /etc/fstab
...(以下の行を追加)
//<ipアドレス>/<共有名> /home/owner/thunderbird cifs username=<winユーザ名>,password=<winパスワード>,uid=owner,gid=owner,file_mode=0755,dir_mode=0755,iocharset=utf8 0 0
...
# exit

その後、再起動。

標準メーラをThunderbirdに入れ替える。 - Ubuntu初日

 Windows環境でもThunderbirdを使ってるので同じものを使いたい。手順は以下だった。

 ”Synaptic パッケージ・マネージャ([システム]-[システム管理]-[Synaptic パッケージ・マネージャ])"から、パッケージ"Thunderbird"("を除く)を導入。

 デスクトップ上部パネルを右クリック。[パネルへ追加]から、[アプリケーションのランチャ]を選択し、[インターネット]-[Mozilla Thunderbird Mail/News]を選択。

 パネル上のEvolutionを右クリックし、[パネルから削除]を選択。

Windowsの共有フォルダに繋いでみる。 - Ubuntu初日

 デスクトップから[場所]-[サーバへ接続]をクリックすると、「サーバへ接続」画面が現れ、以下のように設定すると接続できた。※他は得に必須でない。足りなければあとで聞いてくKる。

サービスの種類:Windows 共有
サーバ名:<IPアドレス>
フォルダ:<共有名>

Yahoo! ツールバー!を入れてみる - Ubuntu初日

 ubuntuの標準ブラウザはFireFox。Yahoo!ツールバーはFireFoxに対応しており、あっさりと導入できた。


 ところで、今更気がついたが、Internet Exporolerが使えないと、Gyaoとか見れないのか。

イキナリ! rootでログインできない! - Ubuntu初日

 ubuntuはrootでログインできない。調べてみると、そういう操作をさせないことが売りだそうだ。

 一般ユーザでログインし、端末から"sudo su"と打てばrootになれてしまったが、ubuntuの趣旨に出きるだけ従うことにする。

Ubuntuのインストール - Ubuntu初日

Vistaはすてられないので、VMware Server 2.0.1上にUbuntu 9.04日本語Remix版を導入。

LiveCDをCD-Rに焼いて、VMから起動。後は画面に従いながら比較的簡単に導入できた。

にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村

2009年8月1日

Premier3と携帯動画変換君

Sony EricssonのPremier3で、手持ちの動画ファイルを再生できないか挑戦してみた所、一応上手く行ったので報告してみる。

STEP1. 準備

  1. まず、「携帯動画携帯君」を入手、解凍
  2. 次に「QuickTime 7」をインストール

STEP2. MP4変換(※不要の場合もある様子)

  1. 携帯動画変換君のSetup.exeをクリック
  2. "「変換君」設定ファイルセレクター"を起動したら、"MP4:...”を選択し、[設定]ボタンをクリック ※警告が出ることがあるが[はい]を選択
  3. "携帯動画変換君"が自動起動するが一旦終了
  4. 3GP_Converter.exeをクリックし、再度、"携帯動画変換君"を起動。
  5. 変換したい動画ファイルを"携帯動画変換君"にドラッグ&ドロップ

STEP3. 3g2変換

  1. 携帯動画変換君のSetup.exeをクリック
  2. "「変換君」設定ファイルセレクター"を起動したら、"3GP2:...中身3GPP相当”を選択し、[設定]ボタンをクリック ※警告が出ることがあるが[はい]を選択
  3. "携帯動画変換君"が自動起動するが一旦終了
  4. 3GP_Converter.exeをクリックし、再度、"携帯動画変換君"を起動。
  5. (追記)"QCIF標準画質15fpsモノラル"等を選択。※QVGAはPremierが認識せず
  6. STEP2でMP4変換した動画ファイルを"携帯動画変換君"にドラッグ&ドロップ

STEP4. PREMIER3に転送&再生

  1. 外部メモリ転送モードで、PCと接続
  2. \PRIVATE\AUINOUTに3g2変換した動画ファイルを移動 ※その際、念のため英数字の短いファイル名に変更した。しなくてどうなるかは未確認。
  3. PCと切断後、PCフォルダを開き、該当ファイルを選択し、SD内へ移動
  4. EZムービーフォルダに自動的に移動するので、そのまま再生

にほんブログ村 IT技術ブログへ
にほんブログ村

2009年7月31日

新江ノ島水族館

今週末は鎌倉の海岸で海水浴予定だったが、あいにくの天気に見舞われ、新江ノ島水族館に行き先を変更。
朝一の館内は、そんなに人も混んでおらずそこそこ展示物を楽しめたが、イルカショーの後のころには、ペンギンもカメタッチも人混み過ぎてあまり楽しめず。
イルカショーは、へんちくりんな格好した人間のパフォーマンスが目に付き、肝心のイルカの芸が迫力がない。でも、それはあくまで大人目線で、ムスメは一人で拍手しながら大興奮。
正直、イルカショーに限っていえば、近場の品川アクアスタジアムの方が数倍は楽しい。明らかに客の歓声の数も大きさも違った。
でも展示物はこちらの方が多いし、ムスメがもう少し大きくなってゆっくり回れるようになったら、もう一度来てみようか。


2009年7月14日

apacheのサイト証明書を設定 - 調査

確認環境


  • Debian(etch)

  • apache2-mpm-prefork 2.2.3-4+etch6

手順

①証明書要求の作成

~# cd
~# mkdir www33.atwiki.jp
~# cd www33.atwiki.jp
~/www33.atwiki.jp#
~/www33.atwiki.jp# openssl req -new -keyout site_key.pem -out site_csr.pem
...
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
...
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:KANTO
Locality Name (eg, city) []:KANAGAWA
Organization Name (eg, company) [Internet Widgits Pty Ltd]:NONE
Organizational Unit Name (eg, section) []:NONE
Common Name (eg, YOUR name) []:www33.atwiki.jp
Email Address []:NONE
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:tekitou
An optional company name []:
~/www33.atwiki.jp#

②証明書要求の送付

サイト証明書を発行してもらうため、証明書要求をベリサイン等の認証機関に送付する。もしくは、独自認証局で自分でサイト証明書を作成する。

(1)サイト証明書の配置と設定

scp等でサイト証明書を/root/www33.atwiki.jp/site_cert.pemに配置

~# ls www33.atwiki.jp/site_cert.pem
www33.atwiki.jp/site_cert.pem

(2)サイトキーからパスワードを削除

~# openssl rsa -in ./www33.atwiki.jp/site_key.pem -out ./www33.atwiki
.jp/site_key.pem.nopasswd

(3)apacheの定義ファイルで以下を設定(SSLサイト作成の詳細は割愛)

SSLCertificateFile "/root/www33.atwiki.jp/site_cert.pem"
SSLCertificateKeyFile "/root/www33.atwiki.jp/site_key.pem.nopasswd"

(4)apacheを再起動する

~# /etc/init.d/apache2 restart

2009年7月6日

RPCサンプルプログラム - 調査

参考資料(http://www.cs.tsukuba.ac.jp/~yas/sie/cdsoft-2005/2006-01-20/index.html)を元にRPCサンプルプログラムを動作させてみた際のメモ。


ソースコードほかの入手
$ wget http://www.cs.tsukuba.ac.jp/~yas/sie/cdsoft-2005/2006-01-20/ex/dirlist.x $ wget http://www.cs.tsukuba.ac.jp/~yas/sie/cdsoft-2005/2006-01-20/ex/dirlist_server.c $ wget http://www.cs.tsukuba.ac.jp/~yas/sie/cdsoft-2005/2006-01-20/ex/dirlist_client.c $ wget http://www.cs.tsukuba.ac.jp/~yas/sie/cdsoft-2005/2006-01-20/ex/Makefile
コンパイル
$ make rpcgen -C dirlist.x gcc -g -DDEBUG -c -o dirlist_clnt.o dirlist_clnt.c gcc -g -DDEBUG -c -o dirlist_client.o dirlist_client.c gcc -g -DDEBUG -c -o dirlist_xdr.o dirlist_xdr.c gcc -g -DDEBUG -o dirlist_client dirlist_clnt.o dirlist_client.o dirlist_xdr.o -lnsl gcc -g -DDEBUG -c -o dirlist_svc.o dirlist_svc.c gcc -g -DDEBUG -c -o dirlist_server.o dirlist_server.c gcc -g -DDEBUG -o dirlist_server dirlist_svc.o dirlist_server.o dirlist_xdr.o -lnsl
実験その1 単純動作 ※サーバとクライアントで端末を分けること
<サーバ側>
$ ./dirlist_server
<クライアント側>
$ /usr/sbin/rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status 536875011 1 udp 50085 536875011 1 tcp 32775 $ ./dirlist_client localhost /usr errno: 0 (Success) . .. share (後略)
ふーん。
実験その2 サーバを強制停止してみる
<サーバ側>
$ ./dirlist_server ^C (※強制停止) $
<クライアント側> $ /usr/sbin/rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status 536875011 1 udp 50085 536875011 1 tcp 32775 $ ./dirlist_client localhost /usr localhost: RPC: Remote system error - Connection refused
サーバが死んだが、portmapの情報は生きているのね
実験その3 サーバを再起動してみる
<サーバ側>
$ ./dirlist_server
<クライアント側> $ /usr/sbin/rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status 536875011 1 udp 42517 536875011 1 tcp 32791 $ ./dirlist_client localhost /usr errno: 0 (Success) . .. share (後略)
あぁ。ポート番号が再登録されているね、、消せないのかな?
実験その4 portmapのポート番号を消してみる
<クライアント側>
$ su - Password: ********** # rpcinfo -d 536875011 1 # rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status # exit $ ./dirlist_client localhost /usr localhost: RPC: Program not registered $
なるほどね。再登録は?
実験その5 portmapのポート番号を再登録してみる
<クライアント側>
$ su - Password: # rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status # cat test 536875011 1 udp 42517 536875011 1 tcp 32791 # cat test | pmap_set # rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status 536875011 1 udp 42517 536875011 1 tcp 32791 # exit
出来た。でもこれはサーバが動作継続していたことが前提だ。サーバプログラム自身で削除、再登録等の状況にマッチした登録って出来ないのか?→多分rpcgebが作るサーバスケルトンを改造しないとできなさそうだ。また今度。

2009年7月5日

pmap_getport(2)

ポートマッパ(portmap)からRPCサービスのポート番号を取得するpmap_getport関数の使い方。

用例
...
addr.sin_port = htons(111); /* (1) portmapのポート番号を設定 */
if ((addr.sin_port = htons(pmap_getport(&addr, 0x20000000, 1, IPPROTO_TCP))) == 0) { /* (2) 使用したいRPCサービスのポート番号で置き換え */
perror("pmap_getport");
exit(1);
}

/* (3) ポート番号が置き換わったところで、コネクトする */
if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0){
perror("connect");
exit(1);
}
備考
上記は、独自プロトコルのポート取得にportmapを使う例になっている。本来、connectなんて書かずに、キチンとRPCの関数を使ってRPCプロトコルで通信すべきなんだろうが。

pmap_set(2)

ポートマップ(portmap)にRPCサービスを登録するpmap_set関数。

用例
pmap_unset(0x20000000, 1);
if (pmap_set(0x20000000, 1, IPPROTO_TCP, ntohs(saddr.sin_port)) != 1) {
perror("pmap_set");
exit(1);
}

getsockname(2)

soctnameを取得する関数。

用例
len = sizeof(saddr);
if (getsockname(fd1, (struct sockaddr *)&saddr, &len) != 0){
 perror("getsockname");
 exit(1);
}
printf("port number is %d.\n", ntohs(saddr.sin_port));
メモ
manページを眺めても使い方が良く分かんらんかった。試行錯誤の上、上記に到達。

2009年6月24日

自宅サーバ(Debian/etch)にsquid導入

費用削減で回線速度契約を見直したのだが、Webアクセスが圧倒的に遅くなってしまった。

そこで自宅にWebCache目的でProxyサーバ(squid)を導入することに。

今実機が傍にないので、記憶の範囲だが、インストールメモを残しておく。

# aptitude install squid
# cp -p /etc/squid/squid.conf /etc/squid/squid.conf.org
# vi /etc/squid/squid.conf
以下を追加
acl localnet src 192.168.1.0/24
http_access allow localnet
以下を変更
http_port 8080
cache_dir ufs /var/spool/squid 500 16 256
さて、効果の程だが、、、、う~ん、あまり早くなった感じがしない、、^^; ページ表示中のままずっとアクセスしているという状態はなくなったのかな。一応満足しておこう。しかし、何かチューニングポイントがあるんだろうね。
参考
http://raijin.ddo.jp/pukiwiki/pukiwiki.php?ProxyServer%A4%CE%B9%BD%C3%DB

カーネルデバッグ環境の設定

また今日もマニアックなことに挑戦。
CentOSでcrashコマンドを試してみることに。


詳細はこちら




RHEL4系

例)
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.9-78.0.1.EL #1 Tue Jul 22 17:50:01 EDT 2008 i686 i686 i386 GNU/Linux
[root@localhost rpm-work]# wget http://ftp.redhat.com/pub/redhat/linux/updates/enterprise/4AS/en/os/Debuginfo/i686/RPMS/kernel-debuginfo-2.6.9-78.0.1.EL.i686.rpm
[root@localhost rpm-work]# rpm -ivh kernel-debuginfo-2.6.9-78.0.1.EL.i686.rpm

履歴

2009年06月24日 RHEL4系記載追加
2009年03月05日 新規作成

2009年6月15日

品川アクアスタジアム

今日は水族館(品川アクアスタジアム)に行きました。
娘がまだ小さいので、電車はこちらも周りも娘本人も辛かろうはなから諦めて、車で行きました。車は、ホテルパシフィク東京の地下駐車場(20分で200円)にとめました。
水族館は、まぁ、30分も持たないようなこじんまりとした大きさなんですが、「海中トンネル」と「ペンギン大陸」は見ものです。「海中トンネル」には、なんとマンタも泳いでました。娘も大興奮です。
さて、ここの本当の見ものは、イルカショー(とアシカショー)です。
15分ほどのショーですが、イルカとクジラが飛びはねて、ご希望なら水しぶきを頭からかぶることも出来て、楽しいことこの上ないです。ショーが終わった後も、調教師によるトレーニングをそのまま見学できるし、トレーニングが終わっても数頭のイルカがショープールに残っていて、まったりと余韻が楽しめます。
座席も相当数あって、休日も朝一なら、あまり窮屈な思いもせず、ショーやその後のイルカ達を楽しめます。欠点は、館内の飲食物のレパートリーの少なさと高さ。正直、持込(していいのかな?)推奨です。


2009年6月6日

Linuxのcore dumpの中身についてその3

coreファイル内のnoteセクションにどんな情報が含まれているのか調べてみた。


まず、objdumpでセクション情報を調べる

$ objdump -h core.3313
core.3313:     file format elf32-i386
Sections:
Idx Name          Size      VMA       LMA       File off  Algn
0 note0         000001d8  00000000  00000000  000001d4  2**0
CONTENTS, READONLY
...

readelfで見てみる

$ readelf -a core.3313
...
Notes at offset 0x000001d4 with length 0x000001d8:
Owner         Data size       Description
CORE          0x00000090      NT_PRSTATUS (prstatus structure)
CORE          0x0000007c      NT_PRPSINFO (prpsinfo structure)
CORE          0x00000090      NT_AUXV (auxiliary vector)

出力の一番最後にnoteの情報が出ている。

更に、note0のダンプを取り、readelfの結果と付き合わせてみる。

$ objdump -s -j note0 core.3313
core.3313:     file format elf32-i386
Contents of section note0:
0000 05000000 90000000 01000000 434f5245  ............CORE
0010 00000000 0b000000 00000000 00000000  ................
0020 0b000000 00000000 00000000 f10c0000  ................
0030 460c0000 f10c0000 460c0000 00000000  F.......F.......
0040 e7030000 00000000 87130000 00000000  ................
0050 00000000 00000000 00000000 f43fa300  .............?..
0060 b01db4bf 01000000 a04c8f00 00000000  .........L......
0070 981db4bf 341eb4bf 7b000000 7b000000  ....4...{...{...
0080 00000000 33000000 ffffffff 79830408  ....3.......y...
0090 73000000 82020100 80150590 7b000000  s...........{...
00a0 00000000 05000000 7c000000 03000000  ........|.......
00b0 434f5245 00000000 00520000 00064000  CORE.....R....@.
00c0 f401f401 f10c0000 460c0000 f10c0000  ........F.......
00d0 460c0000 6269675f 61727261 79000000  F...big_array...
00e0 00000000 2e2f6269 675f6172 72617920  ...../big_array
00f0 00000000 00000000 00000000 00000000  ................
0100 00000000 00000000 00000000 00000000  ................
0110 00000000 00000000 00000000 00000000  ................
0120 00000000 00000000 00000000 00000000  ................
0130 00000000 05000000 90000000 06000000  ................
0140 434f5245 00000000 20000000 00c43d00  CORE.... .....=.
0150 21000000 00c03d00 10000000 fffbeb0f  !.....=.........
0160 06000000 00100000 11000000 64000000  ............d...
0170 03000000 34800408 04000000 20000000  ....4....... ...
0180 05000000 07000000 07000000 00000000  ................
0190 08000000 00000000 09000000 80820408  ................
01a0 0b000000 f4010000 0c000000 f4010000  ................
01b0 0d000000 f4010000 0e000000 f4010000  ................
01c0 17000000 00000000 0f000000 3b1fb4bf  ............;...
01d0 00000000 00000000                    ........

noteセクションの構造は、以下のようになっている。

[ ][ ][ ][ ] namesz(4byte)  ノート名の長さ
[ ][ ][ ][ ] descsz(4byte)  ノート本体の長さ
[ ][ ][ ][ ] type(4byte)    ノートのタイプ
[ ][ ][ ]…[ ] name(Nbyte)  ノート名(長さはnamesz) ※4バイト境界
[ ][ ][ ]…[ ] desc(Nbyte)  ノート本体(長さはdescs) ※4バイト境界

次に、NT_PRSTATUS (prstatus structure)、NT_PRPSINFO (prpsinfo structure)、NT_AUXV (auxiliary vector)といったノートのタイプとノート本体。ノート名は只のテキスト情報なので、ダンプ結果を見れば一目瞭然と思う。

ノートのタイプは、/usr/include/elf.hに定義がある。

$ grep "define NT_" /usr/include/elf.h
#define NT_PRSTATUS     1               /* Contains copy of prstatus struct */
#define NT_FPREGSET     2               /* Contains copy of fpregset struct */
#define NT_PRPSINFO     3               /* Contains copy of prpsinfo struct */
#define NT_PRXREG       4               /* Contains copy of prxregset struct */
#define NT_TASKSTRUCT   4               /* Contains copy of task structure */
#define NT_PLATFORM     5               /* String from sysinfo(SI_PLATFORM) */
#define NT_AUXV         6               /* Contains copy of auxv array */
#define NT_GWINDOWS     7               /* Contains copy of gwindows struct */
#define NT_ASRS         8               /* Contains copy of asrset struct */
#define NT_PSTATUS      10              /* Contains copy of pstatus struct */
#define NT_PSINFO       13              /* Contains copy of psinfo struct */
#define NT_PRCRED       14              /* Contains copy of prcred struct */
#define NT_UTSNAME      15              /* Contains copy of utsname struct */
#define NT_LWPSTATUS    16              /* Contains copy of lwpstatus struct */
#define NT_LWPSINFO     17              /* Contains copy of lwpinfo struct */
#define NT_PRFPXREG     20              /* Contains copy of fprxregset struct*/
#define NT_VERSION      1               /* Contains a version string.  */

ノートの本体のうち、今回出てきたprstatus structureとprpsinfo structureは、/usr/include/sys/procfs.hに定義がある。

$ cat /usr/include/sys/procfs.h
...
struct elf_prstatus
{
struct elf_siginfo pr_info;         /* Info associated with signal.  */
short int pr_cursig;                /* Current signal.  */
unsigned long int pr_sigpend;       /* Set of pending signals.  */
unsigned long int pr_sighold;       /* Set of held signals.  */
__pid_t pr_pid;
__pid_t pr_ppid;
__pid_t pr_pgrp;
__pid_t pr_sid;
struct timeval pr_utime;            /* User time.  */
struct timeval pr_stime;            /* System time.  */
struct timeval pr_cutime;           /* Cumulative user time.  */
struct timeval pr_cstime;           /* Cumulative system time.  */
elf_gregset_t pr_reg;               /* GP registers.  */
int pr_fpvalid;                     /* True if math copro being used.  */
};
...
struct elf_prpsinfo
{
char pr_state;                      /* Numeric process state.  */
char pr_sname;                      /* Char for pr_state.  */
char pr_zomb;                       /* Zombie.  */
char pr_nice;                       /* Nice val.  */
unsigned long int pr_flag;          /* Flags.  */
unsigned short int pr_uid;
unsigned short int pr_gid;
int pr_pid, pr_ppid, pr_pgrp, pr_sid;
/* Lots missing */
char pr_fname[16];                  /* Filename of executable.  */
char pr_psargs[ELF_PRARGSZ];        /* Initial part of arg list.  */
};
...

auxiliary vectorとは、id(4byte)とその値Val(4byte)が交互に並んだ構造をしており、id=0となったところが構造の終わりとなっている。

[id(4byte)][val(4byte)][id(4byte)][val(4byte)]...[id(4byte)][val(4byte)]

idは/usr/include/elf.hに定義されている

$ grep "define AT_" /usr/include/elf.h
#define AT_NULL         0               /* End of vector */
#define AT_IGNORE       1               /* Entry should be ignored */
#define AT_EXECFD       2               /* File descriptor of program */
#define AT_PHDR         3               /* Program headers for program */
#define AT_PHENT        4               /* Size of program header entry */
#define AT_PHNUM        5               /* Number of program headers */
#define AT_PAGESZ       6               /* System page size */
#define AT_BASE         7               /* Base address of interpreter */
#define AT_FLAGS        8               /* Flags */
#define AT_ENTRY        9               /* Entry point of program */
#define AT_NOTELF       10              /* Program is not ELF */
#define AT_UID          11              /* Real uid */
#define AT_EUID         12              /* Effective uid */
#define AT_GID          13              /* Real gid */
#define AT_EGID         14              /* Effective gid */
#define AT_CLKTCK       17              /* Frequency of times() */
#define AT_PLATFORM     15              /* String identifying platform.  */
#define AT_HWCAP        16              /* Machine dependent hints about
#define AT_FPUCW        18              /* Used FPU control word.  */
#define AT_DCACHEBSIZE  19              /* Data cache block size.  */
#define AT_ICACHEBSIZE  20              /* Instruction cache block size.  */
#define AT_UCACHEBSIZE  21              /* Unified cache block size.  */
#define AT_IGNOREPPC    22              /* Entry should be ignored.  */
#define AT_SYSINFO      32
#define AT_SYSINFO_EHDR 33
#define AT_L1I_CACHESHAPE       34
#define AT_L1D_CACHESHAPE       35
#define AT_L2_CACHESHAPE        36
#define AT_L3_CACHESHAPE        37

2009年5月30日

Superfetchを止める(Vistaメモ)

Vistaに乗り換えて半年程になる。最近、なにもしていないのにディスクがカリカリいっているのがとても気になっていたのだが、こんな記事を発見。

ふーん。Superfetchというサービスが余計なことをしているのか。

しばらく止めて様子を見てみることにする。

因みに止めるとタスクマネージャから確認できるメモリが40MBほど減った。

2009年5月28日

カーネルのライブHacking(RHEL AS 4U4)

lockdのnlm_hosts構造体の内容を確認することがあったので、その際のcrashコマンドの使い方をメモ書きしておく。


crashコマンドを起動

# crash
...
crash>

デバッグモジュールの読み込み

crash> mod -s lockd lockd.ko.debug

構造体のアドレスを確認

crash> list nlm_hosts
d0b8c7a0

構造体の内容表示

crash> struct nlm_host d0b8c7a0
...

以上

debuginfoの設定(RHEL AS 4U4)

故あって、RHEL AS 4U4にカーネルdebuginfoを設定し、crashコマンドが使えるようにすることに。



まず、カーネルのバージョンを確認。

# uname -a
Linux localhost.localdomain 2.6.9-42.EL #1 Wed Jul 12 23:16:43
EDT 2006 i686 athlon i386 GNU/Linux

debuginfoパッケージを入手。

# wget http://ftp.redhat.com/pub/redhat/linux/updates/enterpri
se/4AS/en/os/Debuginfo/i386/RPMS/kernel-debuginfo-2.6.9-42.EL.
i686.rpm

インストール。

# rpm -ihv kernel-debuginfo-2.6.9-42.EL.i686.rpm

最後に確認。

# crash
...
crash>

crashコマンドのプロンプトが出ればOK。

2009年5月24日

Linuxで回線シミュレーション - 調査

野暮用で、通信パケットの遅延を試してみたくなった。


Google先生に聞いてみたら、Dummynet、NISTNet、iproute2というものを教えてくれた。

RHEL(4U4,5.1で確認)で使うには、iproute2が良いみたい。標準でカーネルが対応しているし、"iproute"というパッケージで標準で用意されている。

使い方は、以下のblogやサイトを参考にした。

Linuxのシステムロケール設定ってどこでするんだっけ?

システムロケール(もしくはシステムの標準のロケール)は、ディストリビューションによって設定場所が異なる。()内は確認版数。

RHEL(4,5)

/etc/sysconfig/i18n

Debian(etch)

/etc/default/local

にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村

2009年4月19日

自宅サーバ(Debian/etch)をnmap(Windows XP)でポートスキャン

自宅サーバ(Debian/etch)のセキュリティ検査をするのに、Windows XPマシンからポートスキャンしてみた。

1. http://insecure.org/からnmap-4.85BETA7-setup.exeをダウンロード
2. nmap-4.85BETA7-setup.exeを実行してインストール
3. 以下を実行
C:\Program Files\Nmap>nmap -P0 -n -sS -T4 -p1-65535 192.168.1.132

Starting Nmap 4.85BETA7 ( http://nmap.org ) at 2009-04-19 11:43 東京 (標準時)
Interesting ports on 192.168.1.132:
Not shown: 65528 closed ports
PORT    STATE SERVICE
21/tcp  open  ftp
22/tcp  open  ssh
80/tcp  open  http
111/tcp open  rpcbind
113/tcp open  auth
443/tcp open  https
901/tcp open  samba-swat
MAC Address: xx:xx:xx:xx:xx:xx (Matsushita Electric IND. CO)

Nmap done: 1 IP address (1 host up) scanned in 81.48 seconds

C:\Program Files\Nmap>
4. rpcbind、auth、samba-swatは自宅サーバには必要ないので止めてみる。あと、ftpはscp(sftp)で代替するのでこれも止める。
<rpcbindを止める>
# /etc/init.d/portmap stop
Stopping portmap daemon....
# update-rc.d -f portmap remove
Removing any system startup links for /etc/init.d/portmap ...
   /etc/rc0.d/S32portmap
   /etc/rc1.d/K81portmap
   /etc/rc2.d/S18portmap
   /etc/rc3.d/S18portmap
   /etc/rc4.d/S18portmap
   /etc/rc5.d/S18portmap
   /etc/rc6.d/S32portmap
   /etc/rcS.d/S43portmap
#

<authを止める>
# vi /etc/inetd.conf
...
ident          stream  tcp     wait    identd  /usr/sbin/identd        identd
↓identとある行をコメントアウト
#ident          stream  tcp     wait    identd  /usr/sbin/identd        identd
...
# pkill -HUP inetd

<samba-swatを止める>
# vi /etc/inetd.conf
...
swat           stream  tcp     nowait.400      root    /usr/sbin/tcpd  /usr/sbin/swat
↓swatとある行をコメントアウト
#swat           stream  tcp     nowait.400      root    /usr/sbin/tcpd  /usr/sbin/swat
...
# pkill -HUP inetd

<ftpを止める>
# /etc/init.d/vsftpd stop
Stopping FTP server: vsftpd.
# update-rc.d -f vsftpd remove
Removing any system startup links for /etc/init.d/vsftpd ...
   /etc/rc0.d/K20vsftpd
   /etc/rc1.d/K20vsftpd
   /etc/rc2.d/S20vsftpd
   /etc/rc3.d/S20vsftpd
   /etc/rc4.d/S20vsftpd
   /etc/rc5.d/S20vsftpd
   /etc/rc6.d/K20vsftpd
5. 再度nmapを実行し、効果を確認
C:\Program Files\Nmap>nmap -P0 -n -sS -T4 -p1-65535 192.168.1.132

Starting Nmap 4.85BETA7 ( http://nmap.org ) at 2009-04-19 19:34 東京 (標準時)
Interesting ports on 192.168.1.132:
Not shown: 65532 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https
MAC Address: xx:xx:xx:xx:xx:xx (Matsushita Electric IND. CO)

Nmap done: 1 IP address (1 host up) scanned in 52.02 seconds

C:\Program Files\Nmap>

自宅サーバ(Debian/etch)のiptablesで、とあるホストを遮断

やってみたのでメモしておく。

/root/myfirewall.shを作成し、アクセス拒否したいipアドレスを登録。
# vi /root/myfirewall.sh
#!/bin/sh
iptables -I INPUT -s XXX.XXX.XXX.XXX -j DROP
定義に問題ないか確認。
# /bin/sh /root/myfirewall.sh
# iptables -L
...
DROP       0    --  xxxx.jp  anywhere ← 拒否したいIPアドレスのFQDN名を確認
...
#
etc/network/interfacesに書き青文字の行を追加。
iface eth0 inet dhcp
        pre-up /bin/sh /root/myfirewall.sh $IFACE $IF_ADDRESS
再起動しても定義がされていることを確認。
# shutdown -r now
...
#  iptables -L
...
DROP       0    --  xxxx.jp  anywhere ← 再起動してもちゃんとある。
...
#

2009年3月27日

自宅サーバ(Debian/etch)にxcacheを導入

意外と苦労したので、作業ログから手順を整理しておく。

まず、/etc/apt/sources.listを編集し、下記2行を追加。
deb http://www.backports.org/debian/ etch-backports main
deb-src http://www.backports.org/debian/ etch-backports main
それから、"apt-get update"と実行すると、以下のエラーが発生。
# apt-get update
...
W: GPG error: http://www.jp.backports.org etch-backports Release: The following 
signatures couldn't be verified because the public key is not available: NO_PUBK
EY EA8E8B2116BA136C
...
次に、上の赤色部分の使って、以下を実行。
# gpg --keyserver wwwkeys.eu.pgp.net --recv-keys EA8E8B2116BA136C
...
# gpg --armor --export EA8E8B2116BA136C | apt-key add -
OK
#
再度、"apt-get update"以下を実行。今度はエラーは出ない。
# apt-get update
...
# aptitude install php5-xcache
...
最後にapacheを再起動し、xcacheを有効に。
# /etc/init.d/apache2 stop
Stopping web server (apache2)....
# /etc/init.d/apache2 start
Starting web server (apache2)....
以上

自宅サーバ(Debian/etch)のpukiwiki高速化

自宅サーバはMobile Pentium MMX 233MHz(?)という非常に非力なマシンなんだが、Pukiwikiのとあるページの処理に5秒もかかってしまう。あまりに遅すぎるのでなんとかならないかと思案していたところ、Bodycacheなるものを発見。

おぉ、はやいはやい。
平均5秒→平均0.1秒に大変身。
ページに以下のプラグインが使用されていると、効果がでないそうだ。includeが使えないのは少し残念だが、いいか別に。
  • ls2
  • pcomment
  • include
更に、xcacheなるものも入れてみた。
平均0.1秒→0.06秒前後に、ちびっと向上。
Bodycacheほどの効果はなかったが、このわずかな違いでずいぶんと小気味よい。

2009年3月24日

自宅サーバ(Debian etch)にntp設定を実施

手順は以下。

# aptitude install ntp ntpdate ntp-simple
....
# vi /etc/ntp.conf
以下を編集
<編集前>
server 0.debian.pool.ntp.org iburst
server 1.debian.pool.ntp.org iburst
server 2.debian.pool.ntp.org iburst
server 3.debian.pool.ntp.org iburst
<編集後>
server 210.173.160.27 iburst
server 210.173.160.57 iburst
server 210.173.160.87 iburst
※プロバイダ毎の推奨NTPサーバ設定はここを参照のこと。
# touch /var/lib/ntp/ntp.drift  ← 空ファイルを作成
# /etc/init.d/ntp stop
Stopping NTP server: ntpd.
# ntpdate -b 210.173.160.87 ← 無理やり合わせる
23 Mar 22:43:03 ntpdate[4230]: step time server 210.173.160.87 offset -0.001219 sec
# /etc/init.d/ntp start
Starting NTP server: ntpd.
# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp1.jst.mfeed. 210.173.160.86   2 u   22   64  377   10.580   10.717  11.185
+ntp2.jst.mfeed. 210.173.160.86   2 u   19   64  377   10.105   15.293   8.272
+ntp3.jst.mfeed. 210.173.176.4    2 u   21   64  377   10.472   14.271   7.840
*印が出てれば同期成功(のハズ)
因みに自宅サーバは、Debian GNU/Linux 4.0 etchで、ハードはFMV-BIBLO MC VIII 23。フロッピーからネットワークインストール(Panasonic製の有線LANカード使用)。動くもんだねぇ。

2009年3月5日

Solarisの動的ポート割り当て範囲

仕事柄、調べてみた。


にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村


まず、こんなもの(http://homepage2.nifty.com/BASH/sol/ndd.html)を発見。
以下の2つのOSパラメータが動的ポートの範囲を決めている様子。

  • tcp_smallest_anon_port
  • tcp_largest_anon_port

docs.sun.comで早速検索。OS自身のマニュアルにはヒットしなかったが、各種MWのマニュアルにヒット。

それによると、

tcp_smallest_anon_port

最小値:1024
最大値:不明
デフォルト値:32768

tcp_largest_anon_port

記載は見当たらない。。

うーん。google先生に.sun.comにその情報がないか聞いてみた。お。あるある。

とりあえずデフォルト値は分かった。(/etc/init.d/nddconfigに記載がある(らしい))

  • tcp_smallest_anon_port 32768
  • tcp_largest_anon_port 65535
  • udp_smallest_anon_port 32768
  • udp_largest_anon_port 65535

んん?なんかソースが出てる。(tcp.c , udp.c) この情報が正しいのなら、以下となる。

tcp_smallest_anon_port

最小値:1024
最大値:TCP_MAX_PORT(=(64 * 1024 - 1)=65535)
デフォルト値:32768

tcp_largest_anon_port

最小値:1024
最大値:TCP_MAX_PORT
デフォルト値:TCP_MAX_PORT

udp_smallest_anon_port

最小値:1024
最大値:UDP_MAX_PORT(=65535)
デフォルト値:(32 * 1024)=32768

udp_largest_anon_port

最小値:1024
最大値:UDP_MAX_PORT
デフォルト値:UDP_MAX_PORT

 

2009年2月28日

共有ライブラリを作って呼んでみる

共有ライブラリで発生した異常をgdbで調べてみる実験をしたく、まずは、共有ライブラリを作成&実験してみた。
環境は、以下。

  • 2.6.18-92.1.22.el5

  • gcc (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42)

にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

以下のファイルをそれぞれ作成してから、make; sh run.shと実行すればめでたく(?)core発生。
"Makefile"
all : test_core

clean :
        rm -f test_core test_core.o liba.so liba.so.1 liba.so.1.0 liba.o
        rm -f core.*

test_core : test_core.o liba.so.1.0
        gcc -g -o test_core test_core.o -L. -la

test_core.o : test_core.c
        gcc -Wall -g -c test_core.c -o test_core.o

liba.so.1.0 : liba.o
        gcc -g -shared -Wl,-soname,liba.so.1 -o liba.so.1.0 liba.o -lc
        ln -sf liba.so.1 liba.so
        ln -sf liba.so.1.0 liba.so.1

liba.o : liba.c liba.h
        gcc -fpic -g -c -Wall liba.c

"liba.h"
int liba();

"liba.c"
int liba()
{
        int i = 10 / 0;
        return 0;
}

"test_core.c"
//
//      coreダンプをあえて作成するプログラム
//
#include "liba.h"

int main(void)
{
        liba();
        return 0;
}

"run.sh"
#!/bin/sh
ulimit -c unlimited
LD_LIBRARY_PATH="."; export LD_LIBRARY_PATH
./test_core
参考資料
GNUソフトウェアプログラミング オープンソース開発の原点 [本] GNUソフトウェアプログラミング オープンソース開発の原点   [本]
販売元:セブンアンドワイ ヤフー店
セブンアンドワイ ヤフー店で詳細を確認する


coreファイルをgdbで調べてみる

前の記事で、採取したcoreファイル(ちょっとファイル名が違うけど)をgdbを使って調べてみる。


gdbに実行ファイル(./test_core)をcoreファイル(./core.5857)を指定して、起動する(下記の下線部分)。
$ gdb ./test_core -c ./core.5857
GNU gdb Red Hat Linux (6.5-37.el5_2.2rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".


warning: Can't read pathname for load map: 入力/出力エラーです.
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `./test_core'.
Program terminated with signal 8, Arithmetic exception.
#0  0x08048376 in main () at test_core.c:3
3               int i = 10 / 0;
(gdb)
最後の赤い部分から、このプログラムがtest_core.cの3行目のint i = 10 / 0;の処理でシグナル8(浮動小数点例外)で異常終了したことが分かる。

coreファイルの生成設定

Linuxでは、デフォルトではcoreファイルは生成されない。以下の様にして生成されるように設定&確認。


<設定値の確認>
$ ulimit -a
core file size           (blocks, -c) 0
data seg size          (kbytes, -d) unlimited
scheduliing priority             (-e) 0
file size                  (blocks, -f) unlimited
.....

<設定>
$ ulimit -c ulimit

<設定値の再確認>
$ ulimit -a
core file size           (blocks, -c) unlimited
data seg size          (kbytes, -d) unlimited
scheduliing priority             (-e) 0
file size                  (blocks, -f) unlimited
.....

<以下のファイルを編集>
$ vi test_core.c
int main()
{
  int i = 10 / 0;
  return 0;
}

<コンパイル>
$ make test_core
cc     test_core.c    -o test_core
test_core.c: In function `main':
test_core.c:3: 警告: division by zero

<実行と確認>
$ ./test_core
浮動小数点演算例外です (core dumped)
$ ls core*
core.5799

2009年2月23日

lightningからWebDAV上のカレンダーを使ってみる。

こんな感じで、iCalendarを設定してみた。(Vista SP1, lightning 0.9)

  1. "ネットワークのサーバに保存する"を選択

  2. "iCalendar (ICS)"を選択し、"http://localhost/webdav/test.ics"と入力

  3. メールを"なし"に設定

XAMPP(1.7.0)のWebDAVのパスワード設定

VistaをホストOSにして、VMwareを使っていろんなゲストOSを試している。

Vistaに入れいているXAMPP(1.7.0)にWebDAV機能が付いているそうで、そこにカレンダーを置いて各ゲストOSから共有しようかと画策。

いろいろ試すが、どうもIDとパスワードの入力のところで躓く。google先生によると、wampp/xamppというIDとパスワードが設定されているらしいのだが??

C:\xampp\apache\conf\extra\httpd-dav.confをよく読んで、以下のコマンドを実行してみた。
c:\xampp\apache\bin\htpasswd -bc c:\xampp\security\htpasswd.webdav <ID> <Password>
どうもIDとパスワードはインストール時には設定されておらず、自分で改めて設定する必要があるようだ。そもそもc:\xampp\security\htpasswd.webdavってファイルが最初はなかったし。

2009年2月22日

CentOS5.2(VMware 2.0)でDVDの取り出しが出来ない!

この間からCentOS5.2をVMware上で試しているが、DVDドライブが開かない。物理的にボタンを押しても開かないし、CentOSのデスクトップ上から[取り出し]を選択しても開かない。果ては、CentOS5.2をシャットダウンしても開かない。


VMWareが悪いのか、CentOSが悪いのか、切り分けのために、VMWare上の設定のCD/DVDの設定で"Access the drive directory"を選択したら、あっさりと解決。


2009年2月20日

TrustedInstallerとオートギア

前述の記事「TrutedInstallerの悪さ」に関連して、TrustedInstallerの実行優先度を最初から変えられないのか調べてみたが、有用な情報は見当たらず。たまたま、監視して自動的に優先度を買えてくれるという表題の「オートギア」というフリーソフトを見かけたので使ってみることに。
Vistaは未対応になっているが、とりあえず動いた。以下のように使ってる。

  • スタートアップフォルダに入れた
  • 管理者として実行とした→ログオン起動の都度、UACから文句を言われるけど。

とりあえず、TrustedInstaller.exeが起動される都度、優先度を自動で下げてくれている。画面が固まることはなくなったようだ。

(追伸 2009.05.04)
固まることはなくなったがTrustedInstaller.exe自身が微小だがCPUを使い続ける。それが原因かどうか分からないけど、冷却用のファンがよく回っているような気がする。。

(追伸 2009.10.20,2009.10.23)
オートギアの設定手順を追加しておく。
1. まず、Vectorからautogear.lzhをダウンロード
2. autogear.lzhを展開。※自分は、展開にはWinRARを使用。
3. 展開されたautogear.exeとautogear.txtをC:\Program Files\AutoGearに移動。
4. スタートボタンを右クリックし、[開く(O)]を選択。"スタートアップ"フォルダへ移動。
5. "スタートアップ"フォルダで"C:\Program Files\AutoGear\AutoGear.exe"のショートカッタを作成。
6. できたショートカットを右クリックし、プロパティを開く。
7. [詳細設定(D)...]をクリックし、[管理者として実行(R)]をチェック。[OK]-[OK]
8. ショートカットをクリックして、AutoGearを起動。
9. [オプション(O)...]-[監視]タブとクリックし、[すべてのアプリケーションの優先度を変更可能にします]をチェック。
10. [追加(A)...]をクリック、プログラム名に"trustedinstaller.exe"を記述。指定優先度に"通常以下"に設定。[OK]し[隠す(H)]をクリック。

TrustedInstaller.exeの悪さ

去年の10月頃から、Vistaを使いはじめてるいるが、困ったことに”画面が時々固まる。マウスも反応しない。暫くすると復旧する。”という現象に度々あうことがある。TrustedInstaller.exeという輩がCPUを100%近く使っているのが分かったので、その対処方法をを示す。

タスクマネージャを立ち上げて、「すべてのユーザプロセスを表示(S)」とすると、どうもTrustedInstaller.exeという輩がCPUを100%近く使っているのが分かった。TrustedInstaller.exeの「優先度の設定(P)」を「通常以下(B)」に設定すると、100%のままだが、画面が固まることはなくなる。問題は解決するが、これでは非常に面倒だ。
因みに、TrustedInstaller.exeは、"Windows Modules Installerサービス"の実体。止めないほうがよいものの様子。
追伸
「オートギア」というフリーソフトで自動で優先度を変えられました。記事はこちら
追伸 2009.10.20
Vista SP1では、タスクマネージャの「すべてのユーザプロセスを表示(S)」を押すと、タスクマネージャがそのまま終了してしまうことがある様子。

2009年2月16日

stdio.hが見つからない!

CentOS 5.2を入れて、久しぶりにC言語をいじろうとしているが、なんとstdio.hが無いと怒られる。エラーは以下。
error: stdio.h: No such file or directory
glibc-headersを入れて解決。入れ方は以下。
# yum install glibc-headers