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

この組み合わせならマウスをvmmouseとして認識してくれるのですが、以下のような症状が。

  • ホストOSとゲストOS間で透過的に使えない(Ctrl-Altが必要)
  • ホイールを動かしても下へのスクロールしかできない

特に二番目、ホイールを上に転がすとウインドウの一番下までスクロールしちゃってうざいことこの上ない。


こういう場合はxserver-xorg-input-vmmouseをアップデートしましょう。

$ sudo apt-get install xserver-xorg-input-vmmouse

これでxorgを再起動したところ、きれいに動くようになりました。

参考:Ubuntu 8.10 on VMware Fusion のvmmouse問題対策

Ubuntuオフラインミーティング

なんで男しかいないのヽ( `д´)ノ
とても怖かったです
エルサルじゃ優等生タイプの女の子から他校生とケンカして自家製爆弾投げつけられちゃった悪ガキまでキャッキャウフフしながら夢中になってたのに。


それでもviva-ubuntuさんのUbuntu 9.04新機能と、vine_userさんのCompiz Fusion(資料はここ)について聞いてきた。Compiz Fusionむちゃくちゃカッコいいです。会社のマシンに入れたいけど怒られるかな。


よくよく考えてみれば、PCを買えば普通にWindowsが入ってる状況でわざわざOSを乗り換えようなんて思う人はあんまりいないかもですね。古いPCで使えるわけでもないし。
ウイルスに強いとか使えるソフトがいろいろあるとかメリットはありますが、OS入れ替えは敷居が高すぎる。
OOoとかGimpみたいに需要が高そうなソフトはWindowsでも使えるもんなぁ。

[postgresql][sql]PostgreSQL上でオートナンバーを使う

Accessで作った既存のデータベースをPostgreSQLにエクスポートすると、オートナンバー型がinteger型に変更されます。
これをPostgreSQL上でもオートナンバーになるように、デフォルト値を直前の数値をインクリメントした値に設定します。
カラムを新規作成するときにはデータ型[SERIAL]を選べばいいのですが、途中で変更するのはちょっと面倒な処理が必要です。


SQLCREATE SEQUENCEを使うわけですが、phpPgAdminだとGUIから登録可能。


簡単な流れは以下のとおり。

  1. [シーケンス]に開始値を指定して登録
  2. 該当カラムの[デフォルト]に「nextval('"[作成したシーケンス名]"'::regclass)」を追加


詳細な処理は以下。

[シーケンス]に開始値を指定して登録

該当データベースからスキーマを選択します。何も指定せずエクスポートした場合には「public」になっているはず。


[シーケンス]をクリックし、[シーケンスを作成する]をクリック、以下を入力する。カッコ内はPostgreSQLのdocsに載っている名前。

名前(name) シーケンスの名前。新規にSERIAL型のカラムを登録すると[テーブル名]_[カラム名]_seqという名前のシーケンスができます。
増加値(increment) 直前の数値からいくつ増加するか。ここでは[1]を。
最小値(minvalue) 番号の最小値。デフォルトは1。
最大値(maxvalue) 番号の最大値。long int なのでここでは9223372036854775807を入力。
始値(start) 番号の開始値。デフォルトは最小値と同じ。ここでは100番から開始するので[100]を入力。
キャッシュ(cache) アクセスを早くするためにキャッシュしておく番号の数。新規にSERIAL型のカラムを登録すると32になるので[32]と入力してますがイマイチ有用性が分からないですすいません。
Can cycle?(CYCLE) 番号が最大値を超えた場合に最小値に戻るかどうか。long intを使い切るとかあり得ない。


これで[作成]をクリックすればシーケンス作成完了。

カラムのデフォルト値を変更

次に該当テーブルからオートナンバーに変更したいカラムの[変更]をクリック。
データ型は[integer]のまま、[デフォルト]に以下の文字列を入力する。

nextval('"[作成したシーケンス名]"'::regclass)

[変更]をクリック。

これで、データを登録するときにIDを入力しなくても勝手に番号が割り振られるようになります。

phpPgAdminのインストールと設定

Ubuntu Server 8.04でPostgreSQLを使う。


すいませんPostgreSQL自体のインストールはログを取っていなかったので他のサイトを参照してください。

ちなみにUbuntu ServerではtaskselコマンドでPostgreSQLその他のサーバのインストールが簡単にできます。

$ sudo tasksel

ここではPostgreSQL 8.3がインストールされています。


さて、phpPgAdminです。
Ubuntuのパッケージでもありますが、バージョンが古いとSERIAL型(オートナンバー)を使うときに以下のようなエラーが出る場合があります。

Notice: Undefined index: length in /usr/share/phppgadmin/tblproperties.php on line 491
SQL エラー:

ERROR:  type "serial" does not exist

文:
ALTER TABLE "TestTable01" ALTER COLUMN "ID" TYPE SERIAL


これは最新版(2009年4月9日現在バージョン4.2.2)で直っているバグです。最新版は以下から入手可。
http://phppgadmin.sourceforge.net/


インストールはアーカイブを展開するだけです。

$ tar zxfv phpPgAdmin-4.2.2.tar.gz


これをたとえば/usr/shareの下にコピーします。

$ sudo cp -r phpPgAdmin-4.2.2 /usr/share/phppgadmin


http://[アドレス]/phppgadminphpPgAdminにアクセスできるようにApache2を設定します。
/etc/phppgadmin/apache.confを以下の内容で作ります。

Alias /phppgadmin /usr/share/phppgadmin/


DirectoryIndex index.php
Options +FollowSymLinks
AllowOverride None

order deny,allow
deny from all
allow from 127.0.0.0/255.0.0.0
allow from 192.168.1.0/255.255.255.0 # phpPgAdminにアクセスするネットワーク
# allow from all


  php_flag magic_quotes_gpc Off
  php_flag track_vars On
  php_flag register_globals On
  php_value include_path .



  php_flag magic_quotes_gpc Off
  php_flag track_vars On
  php_flag register_globals On
  php_value include_path .


conf.dにリンクします。

sudo ln -s /etc/phppgadmin/apache.conf /etc/apache2/conf.d/apache.conf


Apache再起動。

$ sudo /etc/init.d/apache2 restart


PostgreSQLの設定。
ローカルからWeb経由でアクセスするため、/etc/postgresql/8.3/main/pg_hda.confの以下の文をコメントアウト

local   all         all                               ident sameuser

さらに以下の文を追加。

local   all         all                               trust


PostgreSQL再起動。

sudo /etc/init.d/postgresql-8.3 restart

ここで注意。サービスを提供するアドレスはpostgresql.confで定義できますが、ここをIPアドレス直打ちするとローカルホストのポートが開かず、phpPgAdminがアクセスできません。
デフォルトではローカルホストのポートのみを開ける設定になっていますが、外部からの接続が必要な場合にはIPアドレスを入力するのではなく、'*'と入力しましょう。
これに気づくまでに2時間ほど費やしたのは内緒の方向で。Apacheアクセスログ見てやっと気づいた。

listen_addresses = '*'

pg_hda.confを正しく設定しても「ログインに失敗しました」「Login failed」のエラーが出る場合にはここを確認するのがいいかも。


これでhttp://[アドレス]/phppgadminからログインできるはず。
しばらくSQLネタ続きます。


参考:phpPgAdminをインストールしてみる ubuntu Apache

新しいHDDを認識させる

Intrepidに新しく500GBのHDDを接続しました。今どきのPCは増設するときにねじ回しとかいらないんですねぇ。


つないだ後にdmesg。sdb1として認識されています。

$ dmesg | grep sdb
[    9.694379] sd 2:0:0:0: [sdb] 976773168 512-byte hardware sectors (500108 MB)
[    9.694391] sd 2:0:0:0: [sdb] Write Protect is off
[    9.694392] sd 2:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[    9.694412] sd 2:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    9.694484] sd 2:0:0:0: [sdb] 976773168 512-byte hardware sectors (500108 MB)
[    9.694495] sd 2:0:0:0: [sdb] Write Protect is off
[    9.694496] sd 2:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[    9.694516] sd 2:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    9.694518]  sdb:<6>input,hidraw1: USB HID v1.11 Mouse [Logitech Logitech USB Optical Mouse] on usb-0000:00:1d.0-2
[    9.699767] sd 2:0:0:0: [sdb] Attached SCSI disk

パーティション作成。Gpartedでもできると思いますが、Intrepidには入ってなかったのでfdiskで。Gpartedってデフォルトではインストールされないんでしたっけ。

$ sudo fdisk /dev/sdb
デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
Building a new DOS disklabel with disk identifier 0x0c605e39.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.


このディスクのシリンダ数は 60801 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

コマンド (m でヘルプ): p

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0c605e39

デバイス Boot      Start         End      Blocks   Id  System

最初は何も表示されないので、nコマンドで新規作成。基本領域の1です。

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-60801, default 1): 
Using default value 1
Last シリンダ, +シリンダ数 or +size{K,M,G} (1-60801, default 60801): 
Using default value 60801

全部1つのパーティションにしてます。

コマンド (m でヘルプ): p

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0c605e39

デバイス Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       60801   488384001   83  Linux

テーブルに書き込み。

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。

ext3でフォーマット。

$ sudo mkfs -t ext3 /dev/sdb1
mke2fs 1.41.3 (12-Oct-2008)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
30531584 inodes, 122096000 blocks
6104800 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
3727 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
	102400000

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

ここでは/home2にマウントしてます。

$ sudo mkdir /home2
$ sudo mount /dev/sdb1 /home2
$ mount
(snip)
/dev/sdb1 on /home2 type ext3 (rw)
$ df -h
Filesystem            サイズ  使用  残り 使用% マウント位置
(snip)
/dev/sdb1             459G  199M  435G   1% /home2

無事にマウントできました。

さらにfstabを編集し、マシン起動時にマウントできるようにしておきます。

$ sudo vi /etc/fstab
(snip)
# /dev/sdb1 - Extended HDD
/dev/sdb1	/home2	ext3	relatime	0	2

確認のためいったんアンマウントし、mount -aしてみる。

$ sudo umount /home2
$ sudo mount -a
$ mount
(snip)
/dev/sdb1 on /home2 type ext3 (rw,relatime)

これで大丈夫そうです。


参考:CentOS5.2にHDDを増設する。

Ubuntu Server 8.04のイメージをコピーするとネットワークがつながらなくなる

これは、udevというサービスによるものです。
udevはLinuxカーネル2.6以降で実装されたもので、デバイスファイルを動的に生成することであらかじめデバイスファイルをすべて用意しておかなくても、リムーバブルメディアなどの周辺機器を簡単に使えるようになります。


で、当然NICについての設定ファイルもudevは持っています。それが/etc/udev/rules.d/70-persistent-net.rulesです。

$ cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.

# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:**:**:**:**", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

ここにMACアドレスが書かれています。


んが、VMware(確認したのはServer 1系)はイメージをコピーするとMACアドレスを振り直すんです。そのとき、udevの方の設定は変えてくれません。
なのでデバイス名が変わっちゃうんですね。dmesgを見てみましょう。

$ dmesg | grep eth
(snip)
[13.907766] udev: renamed network interface eth0 to eth2

eth0がeth2にリネームされてます。ここでifconfig。

$ ifconfig eth2
eth2      Link encap:Ethernet  HWaddr 00:0c:**:**:**:**
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:16 Base address:0x1400

あるある。


/etc/udev/rules.d/70-persistent-net.rules内のMACアドレスをこのMACアドレスに修正すれば、問題解決です。
最初は分からなくて/etc/network/interfacesのデバイス名を変更してました。


参考:VMware とかで Debian イメージをコピったら NIC が見えなくなる件

IPアドレスをDHCPで割り振っている状態で、DNSサーバを固定IPアドレスに設定する

最初前のエントリとくっつけて書いてたんですが分けた方がよさそうなので分ける。


IPアドレスDHCPで割り振っているときにDNSサーバを固定IPアドレスにできないというのは、DHCPクライアントの設定によるものです。
/etc/dhcp3/dhcp.confの以下の行をコメントアウトしましょう。

request subnet-mask, broadcast-address, time-offset, routers,
#       domain-name, domain-name-servers, host-name,
       netbios-name-servers, netbios-scope;

これがコメントアウトされていないと、DHCPサーバに問い合わせるたびに/etc/resolv.confを問答無用で書き換えてしまいます。
つうか上書きすんなよ。


参考: