Author Archives: admin

ubtuntu上のeclipseでperlをデバッグしてみる

$ sudo apt-get install eclipse
$ eclipse

eclipse-error.png

いきなりエラーで起動できない。

sunから jdk-1_5_0_15-linux-i586.binをダウンロードしてきて実行

$ sudo chmod 777 jdk-1_5_0_15-linux-i586.bin
$ sudo ./jdk-1_5_0_15-linux-i586.bin

これは解凍するだけのようだ。

https://help.ubuntu.com/community/JavaをみるとIcedTeaを薦めているが、ここでは謹製のsunのjavaを使った。eclipseを起動するときの表示からjavaを探しているパスをみて/usr/lib/j2sdk1.5-sunに移動。

$ sudo mv jdk1.5.0_15/ /usr/lib/j2sdk1.5-sun
$ eclipse

eclipse.png

無事起動できた。

まだperlの開発環境は入っていない。ここではEPICを入れる。メニューのHELP->Software Updates->Find and Installを選択。

screenshot-install-update.png

Search for new Features to installを選択して、nextをクリック。

New Remote Siteをクリックして以下のように入力

screenshot-new-update-site.png

でてきたEPICを選択して、Finishをクリックした後、以下のようにチェックを付ける。

screenshot-updates.png

next

screenshot-update-manager.png

screenshot-verification.png

リスタート

screenshot-new-project.png

New ProjectでPerlが表れる。ここではプロジェクト名をmyfirstperlとして作成。

screenshot-java-eclipse-sdk.png

myfirstperlを右クリックしてnew->fileを選択。ファイル名をstart.plをして作成。

screenshot-java-startpl-eclipse-sdk.png

適当なスクリプトを作成後セーブし、デバッグボタン(虫のボタン)をクリック。以下のように設定し、Debugボタンをクリックするとデバッグできる。

screenshot-debug.png

screenshot-debug-startpl-eclipse-sdk.png

しかし、PadWalkerがないため、ローカル変数を表示できないと表示されているのでインストールする。

$ sudo apt-get install libpadwalker-perl

eclipseを再起動後、ローカル変数が表示できるようになった。

screenshot-debug-startpl-eclipse-sdk-1.png

debianでカーネル構築

フォルダ作成

$ mkdir ~/MYK
$ cd ~/MYK


http://kernel.org/pub/linux/kernel/v2.6/から最新カーネルGET

$ ls
linux-2.6.24.tar.bz2

デフォルトの.configを/bootから持ってくる。

$ tar xjf linux-2.6.24.tar.bz2
$ cd linux-2.6.24/
$ cp /boot/config-2.6.18-6-486 ./.config

menuconfigを起動

$ make menuconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/docproc
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/kxgettext.o
HOSTCC scripts/kconfig/lxdialog/checklist.o
In file included from scripts/kconfig/lxdialog/checklist.c:24:
scripts/kconfig/lxdialog/dialog.h:32:20: error: curses.h: No such file or directory
...............

menuconfigがエラー。ncursesがないのでインストール

$ apt-cache search ncurses|grep dev
btscanner - ncurses-based scanner for Bluetooth devices
lib64ncurses5-dev - Developer's libraries for ncurses (64-bit)
libncurses5-dev - Developer's libraries and docs for ncurses
libncursesw5-dev - Developer's libraries for ncursesw
librote-dev - a simple C library for VT102 terminal emulation - development
libtexttools-dev - Ada and C++ library for writing console applications

$ sudo apt-get install libncurses5-dev

もう一度menuconfig

$ make menuconfig

こんどは成功。ここでいろいろなコンパイルオプションを選択できる。

menuconfig.png

コンパイル開始

$ sudo make-kpkg --initrd --revision=mykernel.1.0 kernel_image

あとは以下のコマンドでインストールできるようだ。(実際はやってない)

# dpkg --install ../linux-image-2.6.24_mykernel.1.0_i386.deb

(参考)
http://www.debian.org/doc/FAQ/ch-kernel.en.html
http://www.togaware.com/linux/survivor/Why_make_kpkg.html

LD_LIBRARY_PATH 覚書

LD_LIBRARY_PATHはLinuxのダイナミックリンカーであるld-linux.soが共有ライブラリを探すためのパスを設定した環境変数。

プログラムが起動したとき、まずld-linux.soが読み込まれ、これが必要な共有ライブラリを探してリンクする。その後プログラムが実行される。

ld-linux.soはまず環境変数LD_LIBRARY_PATHから探す。ただし、 setuid/setgidされているプログラムは除外される。

次に、/etc/ld.so.cacheから探す。これはバイナリファイル。速い。

最後に、/usr/lib, /libから探す。

/etc/ld.so.cache/sbin/ldconfigによってつくられる。ldconfigはライブラリのシンボリックリンクも作成する。ldconfigは/etc/ld.so.confファイルに記述してあるディレクトリに対して操作を行う。

LD_PRELOADに共有ライブラリのパスが書かれていると、ld-linux.soはまずこれらのライブラリを優先させる。これによりプログラム中のある関数だけをフックすることができる。

あるプログラムがどの共有ライブラリを使うかは、lddコマンドで確認できる。
プログラムが本当にld-linux.soを使っているかは readelf -l /bin/date で確認できる。

LD_DEBUG環境変数を使用すると、プログラムがダイナミックリンクするときのさまざまな情報を表示できる。

/etc/ld.so.nohwcapが存在すれば、ld-linux.soは最適化されていないライブラリを使う。

ある実行ファイルがどのダイナミックリンカーを使っているかは以下のように調べる。

ライブラリや実行ファイルのファイル形式はa.outとELFがあるが、上記の説明はすべてELFに関するもの。

smbclientの使い方

smbclientはコマンドラインで利用するマイクロソフトネットワークの共有フォルダにアクセスするツール。ftpコマンドのように扱える。

まず、目的のマシンとフォルダを指定して起動する。

$ smbclient //machine/folder
passwd :
Domain=[machine] OS=[Windows] Server=[]
smb: \>

あとは、cdやlsでフォルダを移動し、getやput、またはmgetやmputでファイルのやり取りをする。

smb: \> get data.zip

コンピュータ名の変わりにIPアドレスを指定しても、接続できる。

$ smbclient //192.168.0.100/folder

ユーザー名を指定したいときは、-Uを用いる。

$ smbclient //machine/folder -Uusername

終了はq

smb: \>q

Fedoraにハードディスクを増設

Fedoraにハードディスクを増設したときの書き置きです。

使っていたハードディスクが少なくなってきたので、一台増設して、/home以下を増設したハードディスクにマウント予定。

現在の/etc/fstab

/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2

tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0

ハードディスクを増設しgpartedを起動して、ext3でフォーマット。

gparted.png

なかなか終わらないと思っていたら、mkfs.ext3のナイス値(プロセス優先度)が19あたりに設定されていた。-10にreniceしたら一瞬で終わった。

次にランレベル1で起動。

# init 1

e2labelでラベルの設定

e2label.png

今ある/homeを/home_bに移動。

# mv /home /home_b

/etc/fstabを編集して、/homeの行を追加

addtofstab.png

/home_bのデータを/homeにコピー。以下の画像で、cp -prを使っているが、cp -aの方がいい。

copy.png

後は再起動して問題なければ、/home_bを削除。

gdbtui 覚書

TUIとはText User Interfaceの略でGUIとCUIの中間みたいな奴。

ncursesを使ってCUIでGUIっぽっくなっている。TUI部分でソース、アセンブラ、レジスタの表示ができる。しかし使っているとやたらと画面が乱れることが多い。

操作中の画面は、上半分は固定で、下半分はCUI。

gdbtui.png

gdb tuiの基本操作

C-x C-a
TUIとCUIの切り替え

・C-x 1
TUI1画面

・ C-x 2
TUI2画面

・(gdb) la src
ソースを表示

・(gdb) la asm
アセンブラ表示

・(gdb) la regs
レジスタ表示

・矢印キーがソースのスクロールになってしまうので、コマンドを戻したい場合はCtrl+P, Ctrl+Nなどを使う

grubコマンドを使いながらマルチブート環境構築ログ

すでにWindows98,2000,XP,VineがインストールされているPCにFreeBSD7.0をインストールした時の記録です。

FreeBSD7.0をインストールする前のハードディスク構成は下の図のようになっていました。 ハードディスクは3台あります。Cドライブには98と2000が、ZドライブにはXP、Zの左となりの3つがVineです。EとFはただのデータです。これらをインストールした順番は98,2000,XP,VineでブートマネージャにはVineインストール時にインストールされたgrubが使われています。

hdd

今回G:のところにFreeBSD7.0を新規にインストールしました。インストール時のブートマネージャの選択のところは、[None]を選択しました。

よってインストールしたあとも自動でFreeBSD7.0をブートすることはできません。以下のような手順で、このFreeBSD7.0をブートできるようになりました。

まずVineを起動して、/etc/grub.confの内容をメモしておきます。

—————————————————————————————–

default=0
timeout=5

title Vine Linux (Current kernel)
root (hd1,0)
kernel /vmlinuz ro root=LABEL=/1 resume2=swap:/dev/hdb5 vga=0x314 nosmp noapic nolapic
initrd /initrd.img

title Vine Linux (Previous kernel)
root (hd1,0)
kernel /vmlinuz.old ro root=LABEL=/1 resume2=swap:/dev/hdb5 vga=0x314
initrd /initrd.old.img

title Other
rootnoverify (hd0,0)
chainloader +1

—————————————————————————————–

次に、ここのやり方をまねして、ここからgrub-0.97-i386-pc.ext2fsを落として、grubフロッピーを作りました。

以下がこのフロッピーで起動した画像です。ここで上記のメモにしたがってコマンドを入力し、最後にbootを実行すると、ちゃんとVineがブートできることを確認しました。

grubfdlaunch


つぎにここを参考に、以下のようなコマンドを実行すると、FreeBSD7.0がブートできました。

afterfreebsd7install


最後にVineを起動して、/etc/grub.confにFreeBSD7.0用のブートコマンドを追加しました。

———————————————————–

default=0
timeout=5

title Vine Linux (Current kernel)
root (hd1,0)
kernel /vmlinuz ro root=LABEL=/1 resume2=swap:/dev/hdb5 vga=0x314 nosmp noapic nolapic
initrd /initrd.img

title Vine Linux (Previous kernel)
root (hd1,0)
kernel /vmlinuz.old ro root=LABEL=/1 resume2=swap:/dev/hdb5 vga=0x314
initrd /initrd.old.img

title Other
rootnoverify (hd0,0)
chainloader +1

title FreeBSD7.0
root (hd2,2,a)
kernel /boot/loader

———————————————

以下のようになり、FreeBSD7.0がブートできるようになりました。

hddbootafter

Visual Studioが落ちたときの復活法

Visual Studioがたまに落ちる。しかも落ち方がすごくて他のアプリも巻き込んで、OS再起動しかなくなるときがある。

しかしなぜかコンソールアプリだけは生きていることが多い。そこでCygwinをあらかじめ起動しておけば、CygwinからVisual Studioを強制終了することで、OSの再起動をまぬがれることができる。

CygwinでVisual Studioを殺す方法は以下のとおり。


$ ps -W | grep -i msdev
3640 0 0 3640 ? 0 16:35:33 C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.EXE

$ /usr/bin/kill.exe -9 -f 3640

ここではexeの名前はmsdevとしたが、それぞれ置き換えてください。