Author Archives: admin

vmware-vdiskmanagerとknoppixを使って仮想ディスクの容量を増やす

(注意)以下の作業は仮想マシンのハードディスクを壊してしまう危険性があります。

まず仮想マシンを終了し、vmwareを終了させます。つぎにvmware-vdiskmanagerを使い仮想ディスク(拡張子vmdk)の容量を拡張します。

vmware-vdiskmanager -x 12Gb Disk.vmdk

これでDisk.vmdkが12Gバイトに拡張されます。しかしこのままでは仮想マシンのOSからこのハードディスクを見ても前のサイズのままなので、knoppixのgpartedを使ってパーティションを拡大します。ここではknoppix_v5.1.1CD_20070104-20070122+IPAFont_AC20070123.isoを使いました。

このisoを仮想マシンに接続し、このCDからブートします。 knoppixでブートする前に仮想マシンのOSで正常にシャットダウンしておいてください。そうしないとknoppixがハードディスクをうまく扱えないことがあります。

コンソールを起動して、gpartedを起動します。

$ gksudo gparted

knoppix-console.png

ツールバーの一番右にあるディスク選択からディスクを選び、もとのパーティションを右クリックし、リサイズを選んで、右側に拡張します。

gparted.png

Editメニューの適用をクリックして、実際の作業を開始します。成功すると以下のようにパーティションが拡大されます。

gparted-done.png

knoppixを終了し、仮想マシンのOSを起動して、正常に拡張されているか確認します。

Fedoraのyumでパッケージを再インストールする

yumコマンドにはパッケージを再インストールするコマンドがないみたいなので、yumdownloaderを使ってパッケージをダウンロードし、rpmの–forceオプションを使って強制インストールする方法。

# yum install yum-utils
# yumdownloader <package>
# rpm -Uvh --force <package>.rpm


–forceオプションはちょっと恐い場合は、file-rollerでrpmを開けば中のファイルを展開できるので、必要なファイルを取り出して置き換えればいい。

# file-roller <package>.rpm

コマンドラインの場合は以下のコマンドでカレントディレクトリに展開できる。

# rpm2cpio <package>.rpm | cpio -id

 
    
[追記]
いつの間にかyumにreinstallコマンドが追加されているみたいです。(気づかなかっただけ?)
# yum reinstall [package]

Linuxでビープ音を無効にする

下に行くほど、影響範囲が大きくなります。

1、gnome-tarminalの設定でビープ音を無効にする。

メニューから「編集」->「現在のプロファイル」を選択し、 「端末のベルを鳴らす」をオフにする。

gnome-terminal-profile.png

2、readlineの設定で無効にする。

~/.inputrcに以下の行を追加する。

set bell-style none

noneの代わりにvisibleを使うと視覚化ベルを使う。

3、GNOMEの設定で無効にする。

gnome-sound-propertiesを起動し、以下のように設定する。

gnome-beep-off.png

4、 Xの設定で無効にする。

以下のコマンドで無効にする。有効に戻すにはonにする。

$ xset b off

起動時に自動的にやる方法はよく分からなかった。

5、システム全体で無効にする。

今だけ無効にする場合は以下のコマンドを実行する。

# modprobe -r pcspkr

有効に戻すには以下のコマンドを実行する。

# modprobe pcspkr

永遠に無効にするには、modprobe設定のブラックリスト(/etc/modprobe.d/blacklist)にpcspkrを追加する。

blacklist pcspkr

Fedora – yum でソースを取得してコンパイル、デバッグする

yumでインストールできるパッケージのソースを取得して、コンパイルする方法。ここではsedを対象に行った。Fedoraで行っている。

まず、rpm-buildとyum-utilsをインストールする。

# yum install rpm-build
# yum install yum-utils

次にsedのソースrpmを取得する。

# yumdownloader --source sed
# ls
sed-4.1.5-9.fc8.src.rpm
#

このrpmをインストールすると、/usr/src/redhat/SOURCEにソースコードがコピーされる。 多くの場合パッチも一緒に入っている。このソースコードのコンパイル方法は/usr/src/redhat/SPECにあるスペックファイルのビルドセクションに記述されているが詳細は見ない。

ビルドする。

# cd /usr/src/redhat/
# rpmbuild -bc SPECS/sed.spec
.................

-bcオプションは通常パッチをあてmakeすることを意味する。このコマンドが成功すれば、BUILDディレクトリにsedのいろいろなファイルが作られている。

しかしこれらはデバッグビルドではないので、このままでは中途半端にしかデバッグできない。幸いsedはCで書かれていて基本的なmakeコマンドで処理できるので、あとはどこかでCFLAGSとして”-O0 -g”を指定してmakeすればデバッグビルドできる。

ここでは、configureスクリプトをCFLAGSを変えて起動することで行った。configureスクリプトの起動方法はSPECファイルに記述されているので、そのとおりにやらないとエラーになるかもしれないが、ここでは面倒なので無視した。

# cd /usr/src/redhat/BUILD/sed-4.1.5/
# make clean
......
# CFLAGS="-O0 -g" ./configure
......
# make
......

これでsed/sedがデバッグビルドされ、gdbなどでデバッグできる。

# cat > ttt
aaa
bbb
ccc<CTRL+D>
# gdb sed/sed
GNU gdb Red Hat Linux (6.6-45.fc8rh)
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".
(gdb) break main
Breakpoint 1 at 0x8049864: file sed.c, line 179.
(gdb) r s/aaa/xxx/ ttt
Starting program: /usr/src/redhat/BUILD/sed-4.1.5/sed/sed s/aaa/xxx/ ttt

Breakpoint 1, main (argc=3, argv=0xbfd5b684) at sed.c:179
179 const char *cols = getenv("COLS");
Missing separate debuginfos, use: debuginfo-install glibc.i686
(gdb)

最後に上記作業は全部rootで行ったが、rpmdevtoolsパッケージに含まれるrpmdev-setuptreeを使えば、一般ユーザでも作業できる。参考

ホームディレクトリにある”デスクトップ”や”音楽”を英語にする

最近のLinuxのgnomeではデフォルトでデスクトップのディレクトリがそのまま日本語で”デスクトップ”となっている。しかしファイル名やフォルダ名に日本語を使うのはいささか抵抗があるので、これを戻す方法。

まずログアウトして、ログインマネージャで言語を英語にする。

changelang.JPG

ログインすると”デスクトップ”などのフォルダをリネームするか聞いてくるのでUpdate Namesを選択し、リネームする。

changetoeng.JPG

再びログオフし日本語に戻す。そしてログインすると再びリネームするか聞いてくるので、ここでリネームをしなければいい。

iptablesメモ。firewallとして

iptablesは多機能で複雑でわかりにくい。ここでは主にiptablesを入ってくるパケットに対するファイヤーウォール機能として考える。

まずiptablesはパケットに対して操作を行う。特にパケットのヘッダに対して行う。パケットのデータに対しては処理を行わない。

iptablesには3ビルトインテーブルfilter、nat、mangleがある、firewallとして使うにはfilterを用いる。filterはiptablesコマンドのデフォルトのテーブルであり、-tオプションを指定しなかった場合は、-t filterと同じ意味になる。

tableはchainの集まりとして定義される。chainはruleとtargetを組にしたものの集まりで定義される。ruleはフィルタそのもののことで、targetはそのフィルターにかかったパケットをどう処理するかを指定する。

filter tableにおけるビルドインchainとしてINPUT、FORWARD、OUTPUTが存在する。INPUTは入ってきたパケットで宛先が自分のものに適用される。FORWARDは宛先が自分でないもの、これはマシンをルーターとして動かしているときのもの、そしてOUTPUTは自分から出て行くパケットに適用される。

ユーザ定義のカスタムchainを定義することができ、これらのchainはビルドインchainのtargetととして利用できる。ビルドインchainはあらかじめどんなパケットに適用されているかが決まっているがカスタムchainはビルドインchainから呼び出される形で動くことになる。

targetにはACCEPT、DROP、REJECTなどのビルドインtargetがある。言葉のとおり、ACCEPTはパケットを受け入れ、DROPはパケットを捨て、REJECTはエラーパケットを返す。

実際に動かしてみる。ここではFedora8を使った。

現在のiptablesの状態を確認するには-Lオプションをもちいる。しかしこのオプションだけだと詳細が分からないので-vオプションも一緒に使う。-Lオプションはchain名を引数にとる。ここでは上記のように入ってくるパケットに対して考えているのでINPUT chainを見る。

# iptables -v -L INPUT
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
18 1727 RH-Firewall-1-INPUT all -- any any anywhere anywhere

まず、policy ACCEPTとあるが、policyとはすべてのruleにかからなかったパケットをどうするかを定義してもので、デフォルトではACCEPTになっている。つまりruleが一つも定義されてなければすべてのパケットを受け入れると言うことである。

コラムを順に見ると protはプロトコルでinは入ってきたパケットのインターフェース(ネットワークカード)でoutは出て行くパケットのインターフェース。しかしINPUT chainにおいてはoutは関係ないと思われる。sourceはパケットのソースIP、destinationはデストIP、しかし同様にここではINPUT chainなので、デストIPは自分自身のはずである。

エントリーをみると targetがRH-Firewall-1-INPUTになっていて、protなどがanyとなっている。つまりINPUT chainに入ってくるパケットはすべてRH-Firewall-1-INPUT chainに送られるようになっている。そこでこのchainを見てみる。

# iptables -v -L RH-Firewall-1-INPUT
Chain RH-Firewall-1-INPUT (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 ACCEPT icmp -- any any anywhere anywhere icmp any
0 0 ACCEPT esp -- any any anywhere anywhere
0 0 ACCEPT ah -- any any anywhere anywhere
0 0 ACCEPT udp -- any any anywhere 224.0.0.251 udp dpt:mdns
0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:ipp
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ipp
179 27376 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- any any anywhere anywhere state NEW tcp dpt:ssh
4 926 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited

一番最初のエントリーでinがloのものはすべてACCEPTしている。これによりブラウザなどでhttp://localhost/でアクセスしたときのパケットを許可している。

つぎにicmpでpingを許可し、esp、ahでIPSec関係のパケットを許可している。

重要なエントリーはstate RELATED,ESTABLISHEDのある行で、実際ほとんどのパケットはここで許可される。stateとは対象パケットが通信全体から見た場合どういう状態でのパケットなのかを表したもので、ESTABLISHEDはすでに通信が確立しているもの、例えばブラウザでどこかのサイトにアクセスし、その結果として戻ってきたパケットはstateがESTABLIEDになる。これを許可しないとほとんどの通信ができなくなってしまう。RELATEDは多分FTPのデータ経路などをACTIVEで開いたときに入ってきたパケットを許可するものだと思う。

つぎのエントリーでsshの接続を許可している、state NEWとあるので、通信開始時のパケットを許可していることになる。一度開始されればそれ以降のパケットは上記のESTABLISHEDで許可されることになるので、state NEWとしているのだと思われる。

一番最後のエントリーでそれ以外のすべてのパケットがREJECTされている。最初に書いたようにREJECTだとエラーパケットを返す。

カーネルモジュール覚書

カーネルモジュールはカーネルが動的にロードできるモジュール。ローダブルカーネルモジュール(LKM)ともいう。デバイスドライバなどで使われている。

現在カーネルが読み込んでいるモジュールを表示するにはlsmodまたは/proc/modulesを読めばいい。

[root@centos build]# lsmod
Module Size Used by
autofs4 24517 3
hidp 23105 2
rfcomm 42457 0
l2cap 29633 10 hidp,rfcomm

左から順に、名前、サイズ、いくつのプロセスから使われているか、依存しているモジュールを示す。

モジュールの情報を表示するにはmodinfoを用いる。

[root@centos build]# modinfo hidp
filename: /lib/modules/2.6.18-53.1.14.el5/kernel/net/bluetooth/hidp/hidp.ko
alias: bt-proto-6
license: GPL
version: 1.1
description: Bluetooth HIDP ver 1.1
author: Marcel Holtmann <marcel@holtmann.org>
srcversion: F6110A784FD4060F29C39C7
depends: bluetooth,l2cap
vermagic: 2.6.18-53.1.14.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
module_sig: 883f35047ced1a9eca829d098883c27112e81509d1eb0b292e3db5dedbf5a25709c45da76fbe43e09f7461c3ed59fa8fdfdd1649a3ea28dd2bf43f7de

モジュールをカーネルに組み込むにはinsmodまたはmodprobeを用いる。modprobeはinsmodより賢く依存関係を解決しながら読み込んでくれる。

モジュールをカーネルから開放するにはrmmodまたはmodprobe -rを用いる。上記と同様にmodprobeは賢く開放する。

依存関係は通常/lib/modules/<version>/modules.depに記述してあり、これはdepmodによって作られる。

modprobeは設定ファイル/etc/modprobe.confを参照する。このファイルは1行1命令で記述されていて、以下のような命令がある。

  • alias : モジュールに別名を付ける。ワイルドカードも指定可能。ネストはできない。
  • options :指定されたモジュールがmodprobeコマンドで指定されたとき、追加のオプションを指定する。
  • install : 指定されたモジュールがmodprobeコマンドで指定されたとき実行されるスクリプトを記述する。この命令がある場合、modprobeはデフォルトの動作を行わない。命令には–ignore-installを含んでいることが多い。これをつけるとmodprobe.confのinstall命令を無視する。つまりこれを付けて再帰しないようにしている。
  • remove : 上記と大体同じ。

モジュールは通常/lib/modules/<version>/ ディレクトリに格納されている。現在の動いているカーネルのヴァージョンを知るにはuname -rを用いる。

xorg.conf覚書

xorg.confはXサーバーの設定ファイル。Linuxだと/etc/X11/xorg.confにあることが多いです。

xorg.confはいくつかのセクションに分かれているが、各セクションは独立したものではなく、それらをツリー状に組み合わせて構成を決定する仕組みになっています。

ツリーのルートにあたるセクションがServerLayoutでこの下にScreenセクション、その下にMonitorやDeviceがあります。ServerLayoutはいくつあってもよく、複数ある場合はServerFlagsセクションのDefaultServerLayoutオプションでデフォルトのServerLayoutを指定します。セクションはIdentifierキーを使って一意に識別でき、これを使ってツリー構成を作っています。

Deviceセクションにグラフィックボードの設定を記述します。

Monitorセクションにモニターがサポートできる水平解像度と垂直解像度をkHzで指定します。これらは自分のモニターのマニュアルかネットで検索して見つけます。

Screenセクションに、DeviceキーとMonitorキーを指定し、Displayサブセクションを追加して、ここにDepthキーを使ってモニターのカラーデプス(色のビット数)を指定し、Modesキーを使って画面の大きさを指定します。Displayサブセクションは複数あってもかまいません。

▽関連記事
X Window Systemで他のディスプレイを使う

Firefoxのメニューのフォントを変える

Firefoxのメニューのフォントがデフォルトだと小さく表示されている。Firefoxはクロスプラットフォームなアプリなのでユーザーインタフェース(UI)もOS任せにせず全部自分でやっているからだと思われます。

FirefoxのUIの設定はプロファイルフォルダのchromeフォルダにあります。プロファイルフォルダは通常以下の場所にあります。

C:\Documents and Settings\<ユーザ名>\Application Data\Mozilla\Firefox\Profiles\xxxxxx.default

このフォルダの下のchromeフォルダ内に”userChrome-example.css”と言うファイルがあるのでこれをコピーして、”userChrome.css”としこれを編集します。このファイルはUTF-8で書かれているので、UTF-8を扱えるエディタを使ってください。

/*
* デフォルトフォントサイズをすべて 20 ポイントにする:
*
* * {
* font-size: 20pt !important
* }
*/

上の部分を下のように変える。

* {
font-size: 10pt !important;
}

内容を変更したら、保存してFirefoxを再起動します。

もちろんfont-sizeだけではなく、font-familyなども指定することができます。

* {
font-size: 10pt !important;
font-family: "MS UI Gothic";
}

▼関連記事
Operaのメニューのフォントを変える