‘debian’ タグのついている投稿

仮想マシンのdebianをHyper-VからVirtualBoxに移行したら起動しなかった話

ゲストの環境は32ビットでjessie/sidです。
ホストはWindows 8.1 x64。

Windows 7でVirtual PCを使って動かしていたイメージですが、Windows 8.1に乗り換えるにあたって、Hyper-Vに移行していました。
こっちはそんなに問題なかったのですが、Hyper-Vのネットワーク設定がやりたかったことをすべて満たせない&なぜかゲストでhg pushするとホストのインターフェースが死ぬという現象に見舞われたので、VirtualBoxに移行することにしました。

ちなみに移行はVHDファイルを持ちまわるだけです。

色々問題噴出だったのですが、最終的にはVirtualBoxの設定でどうにかなりました。

エラー内容覚えていないので、検索履歴から箇条書きで。

・VERR_REM_VIRTUAL_CPU_ERROR
・VBOX_E_INVALID_VM_STATE
・fatal error in recompiler cpu 中略 VERR_DEADLOCKのエラーでVirtual Boxが落ちる
・VirtualBox自体は落ちなくなったものの、loading please waitで止まる
・smbus base address uninitialized upgrade bios or use

やったこと。
・設定→システム→マザーボードの「メインメモリー」を512MBから1024MBにした
・設定→システム→マザーボードの「チップセット」をICH9にした
・設定→システム→マザーボードの「I/O APICを有効化」にチェック
・設定→システム→プロセッサーの「PAE/NXを有効化」にチェック
・GRUB2起動時にeを押して編集モードに入り、linuxから始まる行の末尾にsingleを追加してシングルユーザーモードで起動できるか確認
・起動時に画面に表示されない何かの処理が裏で動いているらしいのを、10分以上待った

カーソルが点滅しているなら、気長に待ってみるのも良いかと。

squeezeのときのイメージが残っていたので、そっちも試したのですが、そっちは大丈夫でした。
Hyper-V上でkernelとディストリビューションをアップデートして、686-paeになったのが問題だったかも。

とりあえず復旧できたので良かったです。


他のパッケージのaptitude install後にMySQLが起動しない問題

他の環境では多分あまり発生しないかと思いますが、自分の環境では毎回のように発生する上、対処方法をいつも忘れるのでメモ。

環境はdebian squeeze。

# /etc/init.d/mysql start
[FAIL] Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!

ログも一切出ないので困っていましたが、ファイルのパーミッションの問題でした。

# cd /var/lib/mysql/
(省略)
-rw-rw---- 1 mysql mysql      126 2014-02-27 07:45 mysql-bin.000022
-rw-rw---- 1 mysql root     26620 2014-02-27 07:45 mysql-bin.000023
-rw-rw---- 1 mysql root   1061358 2014-02-27 07:45 mysql-bin.000024
-rw-rw---- 1 root  root     26620 2014-02-27 07:45 mysql-bin.000025
-rw-rw---- 1 root  root   1061358 2014-02-27 07:45 mysql-bin.000026
-rw-rw---- 1 mysql mysql      494 2014-02-27 07:45 mysql-bin.index

mysql-binファイルがroot権限で作られていました。

片っ端からchownして解決です。

# chown mysql:mysql mysql-bin.000023
# chown mysql:mysql mysql-bin.000024
# chown mysql:mysql mysql-bin.000025
# chown mysql:mysql mysql-bin.000026
# /etc/init.d/mysql start
[ ok ] Starting MySQL database server: mysqld ..

根本的な原因は何なんだろうなぁ。


debianにRockMongoを入れる

MongoDBをブラウザのGUIで扱いたかったのですが、何やら管理ツールはたくさんあるみたいで、どれが良いのか正直わかりませんでした。

Admin UIs – MongoDB

とりあえず、コメント欄で盛り上がっていたRockMongoを試してみることにしました。

http://code.google.com/p/rock-php/wiki/rock_mongo_jp#ダウンロード

開発環境のdebian squeezeにRockMongoをインストールしてみました。aptで入るphpMyAdminと同じような構成にしてみることにします。どこのVirtualHostからでも/rockmongoでアクセスできる環境です。

MongoDBはあらかじめインストールしておいてください。

まずはRockMongoを/usr/shareに展開します。

# mkdir /usr/share/rockmongo
# cd /usr/share/rockmongo
# wget http://rockmongo.com/downloads/go?id=6 -O rockmongo-v1.1.2.zip
# unzip ./rockmongo-v1.1.2.zip
# rm ./rockmongo-v1.1.2.zip
# mv ./rockmongo/* .
# rm -R ./rockmongo/

Apache用の設定ファイルを作成します。

# vi /etc/apache2/conf.d/rockmongo.conf

phpMyAdminを参考に以下のようにしておきます。

Alias /rockmongo /usr/share/rockmongo

<Directory /usr/share/rockmongo>
        Options FollowSymLinks
        DirectoryIndex index.php

        <IfModule mod_php5.c>
                AddType application/x-httpd-php .php

                php_flag magic_quotes_gpc Off
                php_flag track_vars On
                php_flag register_globals Off
                php_value include_path .
        </IfModule>
#        <IfModule mod_authn_file.c>
#                AuthType Basic
#                AuthName "RockMongo"
#                AuthUserFile /path/to/.htpasswd
#                Require valid-user
#        </IfModule>

        php_value session.gc_maxlifetime 86400
</Directory>

認証とかIP制限とか付けたければ適当にやってください。

Apacheを再起動します。

# /etc/init.d/apache2 restart

で、ブラウザからサーバの/rockmongoにアクセスすればOKです。

image


Node.jsはPowerPCで使えないという話

LinuxでPowerPCのアーキテクチャを選択する場合は注意が必要です。

わざわざWindows版もMac版も用意されているのだからアーキテクチャはほぼ不問なんだと思ってました…

OpenBlocks(debian squeeze)にNode.jsをnvmからインストールしようとしたところ、WAFがエラーを出しました。

root@squeeze:~# nvm install v0.6.18
######################################################################## 100.0%
Checking for program g++ or c++          : /usr/bin/g++
Checking for program cpp                 : /usr/bin/cpp
Checking for program ar                  : /usr/bin/ar
Checking for program ranlib              : /usr/bin/ranlib
Checking for g++                         : ok
Checking for program gcc or cc           : /usr/bin/gcc
Checking for program ar                  : /usr/bin/ar
Checking for program ranlib              : /usr/bin/ranlib
Checking for gcc                         : ok
Checking for library dl                  : yes
Checking for openssl                     : not found
Checking for function SSL_library_init   : yes
Checking for header openssl/crypto.h     : yes
Checking for library util                : yes
Traceback (most recent call last):
  File "/root/nvm/src/node-v0.6.18/tools/waf-light", line 158, in <module>
    Scripting.prepare(t, cwd, VERSION, wafdir)
  File "/root/nvm/src/node-v0.6.18/tools/wafadmin/Scripting.py", line 145, in prepare
    prepare_impl(t, cwd, ver, wafdir)
  File "/root/nvm/src/node-v0.6.18/tools/wafadmin/Scripting.py", line 135, in prepare_impl
    main()
  File "/root/nvm/src/node-v0.6.18/tools/wafadmin/Scripting.py", line 188, in main
    fun(ctx)
  File "/root/nvm/src/node-v0.6.18/tools/wafadmin/Scripting.py", line 241, in configure
    conf.sub_config([''])
  File "/root/nvm/src/node-v0.6.18/tools/wafadmin/Configure.py", line 221, in sub_config
    self.recurse(k, name='configure')
  File "/root/nvm/src/node-v0.6.18/tools/wafadmin/Utils.py", line 634, in recurse
    f(self)
  File "/root/nvm/src/node-v0.6.18/wscript", line 399, in configure
    conf.env['DEST_CPU'] = canonical_cpu_type(conf.env['DEST_CPU'])
  File "/root/nvm/src/node-v0.6.18/wscript", line 60, in canonical_cpu_type
    " but NOT '" + arch + "'.")
Exception: supported architectures are arm, ia32, x64 but NOT 'powerpc'.
nvm: install v0.6.18 failed!

nvmでしか試していませんが、恐らくnodeをmakeしても同じです。これはV8エンジンがPowerPCに非対応なのが原因です。http://code.google.com/p/v8/

あとはこの辺り参照。

Is it possible to make Node.js use Rhino as the Javascript engine? – Stack Overflow

Issue 692 – waf – cannot build nodejs (uses waf) on OS X ppc – The meta build system – Google Project Hosting

一応、V8をPowerPCで動くようにするプロジェクトはあるみたいですが…

https://github.com/ic/v8-powerpc

Long-term goal: Get Node.js and Google Chrome to PowerPC users.

らしいので気長に待つしか…

あとはSpiderMonkeyにV8のAPI実装してNodeに結合するspidernodeですね。

https://github.com/zpao/spidernode

ちょっと求めているものとは違うんですよね…動くのかわからないし。

あー、どうしよっかなー…


PHPからarpテーブルを参照する

PHPからarpコマンドを実行してLAN内のMACアドレスとIPアドレスの変換テーブルを参照できるようにしてみました。単純に結果を正規表現にかけているだけです。

ちなみにひとつのMACが複数のIPを持つ場合には対応していません。それと、arpの性質上、頻繁にキャッシュクリアされるので、用途によっては注意が必要です。

<?php

$table = array();
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    exec('arp -a', $output); // for Windows
}
else {
    exec('/usr/sbin/arp -a -n', $output); // for Linux(debian)
}
foreach ($output as $line) {
    if (preg_match('/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*([0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2})/i', $line, $matches)) {
        $ip = $matches[1];
        $mac = strtoupper(str_replace(array('-', ':'), '', $matches[2]));
        $table[$mac] = $ip;
    }
}

var_dump($table);

結果

array(2) {
  ["123456789ABC"]=>
  string(13) "192.168.0.1"
  ["0003FFFFFFFF"]=>
  string(15) "192.168.131.254"
}

Linuxのarpコマンドがarp -aで実行するとすごく遅いので、原因を調べていたら、デフォルトではIPアドレスからDNSの逆引きをしているということでした。-nオプションを付けることで、DNSリクエストを送らなくなるので一瞬で表示できます。


DebianからWindows7の共有フォルダにアクセスする

実際の構成としてはVirtual PC内のdebian(squeeze)からホストOSのWindows7の共有フォルダにアクセスするという要件なのだけど、特に問題なくできたので。
ちなみにLoopback Adapter接続でした。

# apt-get install samba smbfs
# mkdir /media/videos
# mount -t cifs -o username=Windows側のユーザー名,codepage=cp932,iocharset=utf8 //Windows側のIP/Users/Public/Videos /media/videos

パスワードの入力を求められます。

Windows7だと、Publicフォルダが「パブリック」とか日本語になっていたりするので、コマンドプロンプトを使ってあらかじめ名前を確認しておきます。

SCPでVirtualPCと巨大なファイルをやり取りしようとするとなぜかやたら遅くて…
マウントしてしまえばさっくり行けます。


debian lennyにJDKをインストールする

aptでインストールできますが、non-freeパッケージを有効にする必要があります。

# vi /etc/apt/sources.list

末尾に1行追加します。

deb http://ftp.jp.debian.org/debian/ lenny non-free

# aptitude update

# aptitude install sun-java6-jdk
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています
状態情報を読み取っています… 完了
拡張状態情報を読み込んでいます
パッケージの状態を初期化しています… 完了
タスクの記述を読み込んでいます… 完了
以下の新規パッケージがインストールされます:
  avahi-daemon{a} dbus{a} dbus-x11{a} gsfonts{a} gsfonts-x11{a} java-common{a} libasound2{a}
  libavahi-common-data{a} libavahi-common3{a} libavahi-core5{a} libdaemon0{a} libdbus-1-3{a} libnss-mdns{a}
  libxi6{a} libxtst6{a} odbcinst1debian1{a} sun-java6-bin{a} sun-java6-jdk sun-java6-jre{a} unixodbc{a}
更新: 0 個、新規インストール: 20 個、削除: 0 個、保留: 0 個。
61.7MB のアーカイブを取得する必要があります。展開後に 175MB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?]

途中でライセンスの確認をされます。
問題なければ続行すれば後は勝手に進んでインストール完了です。


Virtual PC上でdebianのeth0が消えた現象

Windows Vista Ultimate x32上のMicrosoft Virtual PCからWindows 7 Enterprise x64のWindows Virtual PCにDebian lennyの仮想マシンのデータをそっくり移して使おうとしたら、eth0がなぜか消えてしまった…

loしか残ってないという状況。

結論から言うと、/etc/udev/rules.d/70-persistent-net.rulesを削除した後、rebootしたら直りました。

/etc/init.d/networking restartとかでは直らず。

ゲストOSが64bitじゃないからいけないのかとか思ってdebianの64bit版とか別にインストールしようと試みて、ゲストOSには32bitしか受け付けないことを知ったり。なので、そこは問題ではなかった。


Windows 7 x64でのVirtual PCとdebian

Windows 7 x64環境のWindows Virtual PCに、以前Vista 32bit版のMicrosoft Virtual PC 2007で使っていたdebian Lennyの仮想マシンを持ってきて起動させようとしたら、ブートの途中で何もエラーも表示せずに応答しなくなってしまったので対策を調査。

多分Windows 7どうこうではなくて、64bit版だということが問題っぽい。

MicrosoftVirtualPc2007/lenny – Debian Wiki

noreplace-paravirtパラメータを追加しておけば良いだけ。

まぁ、すでに設定していた場合は何もせずに移行できたって話ですね。Windows Virtual PCとVirtual PC 2007間での互換性問題はほとんどなさそう。

追記

NICを認識しない…やっぱりdebianを64bit版にするしかないのか…?