VMware Server 2上のUbuntu 9.04でマウスがうまく動かない
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]を選べばいいのですが、途中で変更するのはちょっと面倒な処理が必要です。
SQLのCREATE SEQUENCEを使うわけですが、phpPgAdminだとGUIから登録可能。
簡単な流れは以下のとおり。
- [シーケンス]に開始値を指定して登録
- 該当カラムの[デフォルト]に「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を使い切るとかあり得ない。 |
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://[アドレス]/phppgadmin でphpPgAdminにアクセスできるように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ネタ続きます。
新しい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)
これで大丈夫そうです。
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のデバイス名を変更してました。
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を問答無用で書き換えてしまいます。
つうか上書きすんなよ。
参考: