2013/01/05

VirtualBoxで物理HDDにOSをインストール

VirtualBoxの仮想環境を物理HDDに作成する方法のメモ。

試した環境は以下の通り。
  • ホストOS=FreeBSD
  • ゲストOS=WindowsXP

1. 空の物理HDDを用意する。


USB接続はディスクのフォーマットで失敗したのでSATAで接続。
FreeBSD固有の問題かもしれない。

2. 物理HDDを参照する仮想HDDを作成する。

一番重要。

sudo VBoxManage internalcommands createrawvmdk -filename RealHDD.vmdk -rawdisk /dev/ad1
/dev/ad1 は空のHDDのデバイス。
Windowsがホストの場合は \\.\PhysicalDrive1 とかになるらしい。

3. VirtualBoxの起動

RealHDD.vmdk を仮想HDDとして起動するだけ。
注意点は VirtualBox を一般ユーザで起動する場合に RealHDD.vmdk と /dev/ad1 にパーミッションを与えておくこと。

後は普通にOSのインストールが出来る。


 


因みに MBR 等もちゃんと書き込まれるのでこのHDDから物理マシンで起動もできる。
但し VirtualBoxでインストールした XP は起動途中で落ちた。
逆に物理マシンでインストールした XP は仮想マシンで起動ができる。
が、新しいハードウェアの検出が始まってしまうので物理/仮想での共有は非現実的かも。

物理HDDにすると高速になるかと思ったが固定サイズの仮想HDDと XP の起動時間は変わらなかった。あんまりメリットないかも(^^;



2012/12/30

CSSのクラスの値をJavaScriptで変更する方法

jQuery に有りそうで無いのでクラスに設定したスタイルを後からJavascript変更する方法をメモ。
function Common(){this.initialize.apply(this, arguments)};
(function(Class){

    /**
     * ルールのキャッシュ
     * @type CSSStyleRule
     */
    var classCssRuleCache = {};

    /**
     * セレクタに一致するルールを取得。
     * <li>検索は重いのキャッシュする。
     * @param {string} selectror セレクタ文字列
     * @returns {CSSStyleRule} ルール
     */
    Class.getCssRule = function(selector) {
        if (classCssRuleCache[selector]) return classCssRuleCache[selector];
        var sheets = document.styleSheets;
        for (var i=0; i<sheets.length; i++) {
            var rules = sheets[i].cssRules;
            if (rules == null) rules = sheets[i].rules; // ForIE
            for (var j=0; j<rules.length; j++) {
                if (selector == rules[j].selectorText) {
                    classCssRuleCache[selector] = rules[j];
                    return rules[j];
                }
            }
        }
        return null;
    }

    /**
     * セレクタに一致するルールを取得。
     * <li>当該セレクタのルールが存在しなければ作成する。
     * @param {string} selectror セレクタ文字列
     * @returns {CSSStyleRule} ルール
     */
    Class.getCssRuleWithDefine = function(selector) {
        var rule = Class.getCssRule(selector);
        if (rule) return rule;

        var sheet = document.styleSheets[0];
        if (sheet.insertRule) {
            sheet.insertRule(selector+"{}", sheet.cssRules.length);
        } else {
            sheet.addRule(selector,"dummy:dummy");//forIE
        }
        return Class.getCssRule(selector);
    }
   
   
    /**
     * セレクタにルールを設定。
     * <li>当該セレクタのルールが存在しなければ作成する。
     * @param {string} selectror セレクタ文字列
     * @param {object} スタイルのマッピング 例:{textAling: "center",…}
     */
    Class.setCssRule = function(selector, style) {
        var rule = Class.getCssRuleWithDefine(selector);
        if (rule == null) return;
        for (var k in style) rule.style[k] = style[k];
    }
   
   
    /**
     * セレクタにルールを important 付きで設定。
     * <li>当該セレクタのルールが存在しなければ作成する。
     * @param {string} selectror セレクタ文字列
     * @param {object} スタイルのマッピング 例:{textAling: "center",…}
     */
    Class.setCssRuleImportant = function(selector, style) {
        var rule = Class.getCssRuleWithDefine(selector);
        if (rule == null) return;
        for (var k in style) rule.style.setProperty(k, style[k], 'important');
    }

})(Common);
使用例:
Common.getCssRule(".MyClass", {textAlign:"center", color:"red"});
だけ。setCssRuleImportant()を使えば !impotant 付きになる。
厳密に言うとクラスのスタイルの言うものは存在しないのでセレクタのスタイルを変更している。つまり第一引数にクラス名を指定する時はドット(.)が必須なので注意。


間単に解説すると読み込まれたCSSはブラウザ依存で以下のプロパティに保存されている。

ブラウザプロパティ名
IE8以前document.styleSheets[ ].rules[ ]
その他document.styleSheets[ ].cssRules[ ]

cssRules[ ] の型は CSSStyleRule で以下のプロパティを持つ。

プロパティ名説明
stringselectorTextセレクタ文字列
CSSStyleDeclarationstyleスタイルセット


セレクタ文字列の正規化の方法は不明だったので複雑なセレクタを変更する場合は自力で正規化をする必要があるかもしれない。(タグ名の大文字/小文字や空白の扱いの事)

IE8以前はルールの追加方法も異る。

ブラウザプロパティ名
IE8以前addRule(selector, style[, index])
その他insertRule(rule,index)

あと @import とか対応が必要だけどあんまり使わないから必要になるまで放置かな(^^;


2012/12/20

VirtualBoxのAndroid4.0 x86をEclipseから使う

速い新PCでAndroidアプリを始めてみただのだがやっぱり開発用エミュレータが重い!
みんなどんなPCで開発やってんだ?

と言うわけで VirtualBox の Android/4.0 x86 を開発用に使えないかと調査したら何とかなったので手順をメモ。


1. VirtualBox の仮想マシン準備


OS: Linux/Other Linux

MEM: 1G (512MでもOK)

VIDEO: 16M

NET(重要): 
 - ホストオンリーアダプタ
 - VirualBox Host-Only Ethernet Adapter
 - ブリッジアダプタでも動作確認。OS側でブリッジ作成不要。
 - PCnet-FAST III
VirualBox Host-Only Ethernet Adapter をブリッジ接続して固定IPを割振っておく



ストレージ:
 - 仮想HDD 1G (SSDなら可変/HDDなら固定)
 - CD はここから android-x86-4.0-RC2-eeepc.iso を落してマウント


2. Android 4.0 のインストール

インストーラにしたがうだけなので省略。
途中 /system の Write 権の設定のみデフォルトで無く Yes を選択する。

CD を抜いて再起動。
再起動したら Debug mode を選択。

コンソール画面にて init.sh を書き換え。
# vi /system/etc/init.sh
一番最後の行をコメントアウトして固定IPの設定を追加。

[ -e /sys/class/net/eth0 ] && start dhcpcd_eth0:eth0
#[ -e /sys/class/net/eth0 ] && start dhcpcd_eth0:eth0
netcfg eth0 up
ifconfig eth0 xxx.xxx.xxx.xxx                         ←固定IP
route add default gw xxx.xxx.xxx.yyy dev eth0    ←ルータIP
setprop net.dns1 xxx.xxx.xxx.zzz                    ←DNS IP
通常モードで再起動。

カーソルが消えちゃう場合は「マウス統合の無効化」を選択。


3. adb の準備

Android が起動している状態でDOS窓から adb を接続。
> c:\<AndroidSDK>\platform-tools\adb connect xxx.xxx.xxx.xxx
Android を再起動した場合は一旦切断。
> c:\<AndroidSDK>\platform-tools\adb disconnect xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxxはAndroidの固定IP。


4. Eclipseからの起動

adb が接続された状態で Eclipse からAndroidアプリの実行を行うとデバイスの選択画面になるので VirtualBox を選択する。


一瞬で VirtualBox 上の Android にアプリが起動する \(^o^)/


5. TODO:

縦画面ってどうすれば良いんだろ?->「VirtualBoxのAndroid 4.0 x86を縦置きにする




参考にさせて頂いたサイト:
- http://d.hatena.ne.jp/goriponsoft/20110212/1297510921
- http://d.hatena.ne.jp/hiratake55/20090107/1231316875



2012/12/18

解像度の違うモニタで VNC 表示させる

Windows7 Home をサーバにした VNC 接続の方法をメモ。

1377x768 のノートPC -> 1280x1024 のデスクトップに繋げる場合。

1. RealVNC を落してきてインストール。

詳細は割愛。DL元は以下。
 - http://www.realvnc.com/

2. プロジェクタの出力を有効にする。

プロジェクタは実際に繋がっていなくても設定できる。

セカンドモニタとして接続。

解像度を出力したいモニタに合わせる。

3. RealVNC を設定する。

※軽量化の設定。
RealVNCの設定画面を開いて詳細モードにする。

背景は無効に、effect は有効のまま。

- effectを無効にするとフォントのスムージングまで切られて見づらくなる。

4. Aero を設定する。

※軽量化の設定。
「Windowsのデザインとパフォーマンスの調整」を起動する。

自分が要らないと思う機能は全部切る。

5. VNC クライアントのFullScreenモードで接続する。

普通にFullScreenモードで接続してマウスカーソルを横にずらすとセカンドモニタが出て来る。



無線LAN接続でもリモートデスクトップ並に使えてます。 但し、Aeroの調整はしないとイラっとします。

新調したノートPCを開発に使いたかったんだけども ノートPCでの長時間作業が辛くなったので対策を考えたらこうなりました。


2012/10/21

CSS3のWebフォントを使ってみた。

ピクセル単位のデザインをしたかったのでWebフォントを使ってみたのでメモっとく。

ライセンスフリーのフォント M+ のサイト。

  • http://mplus-fonts.sourceforge.jp/webfonts/

使い方

1. フォントをダウンロードして置く。
  • http://mplus-fonts.sourceforge.jp/webfonts/mplus-2m-regular.ttf

2. CSSでフォントファミリを登録する。

@font-face { font-family: mplus-2m-regular; src: url('mplus-2m-regular.ttf') format("truetype"); }

3. 各要素でフォントファミリを指定する。

<h1 style="font-family: mplus-2m-regular;">SAMPLE TEXT</h1>

だけ。

mplus-2m-regular は固定幅で 全角:半角 が 2:1 に近いので使い易い。

他に IPA フォントも使えるがライセンス上微妙らしい。
#Webフォントを再配布とみなす場合にライセンスファイルが添付できないので。

IE対応

IEはいつもの様に特殊でフォントの形式を MS 独自の EOT にしなければいけない。 そのかわり IE6 でも使える。

TTF->EOT 変換は以下のサービスでできる。

  • http://ttf2eot.sebastiankippe.com/

その他

日本語のTTFファイルは小さくても 1MByte 程度あるので回線が細いと重い。 2回目以降はキャッシュが効く。

全角:半角 がぴったり 2:1 になるフリーのWebフォントが有ったら教えて下さい。


2011/11/28

Firefoxのbaseタグが効かない

Firefox は base タグに相対パスを指定すると無視される。

理由は分からないけどそういう仕様らしい。
しかも絶対パスと言うのは / から始まると言う意味ではなく http: から始まるホスト名が必要な物だ。

うーん、base タグなんてむしろ相対パスでこそ使いたい機能だと思うんだが..
そもそも滅多に使わないんで今まで気が付かなかったよ。

今の所、回避策は無いらしい。
Firefox は無視出来ないシェアなので実質 base タグは使えないって事になる。orz


2011/08/20

LinuxでSharpのノートPCの有線LANが継らない

SharpのノートPCでLinuxを動かすと有線LANが継らない。 ググる他の人もはまっているようなので複数の機種で発生するらしい。

Fadara の時に services network stop/start で回避できる事を発見していやのだが、 Ubuntuに入れ換えたら効かなくなって焦った。

結局、

# ifconfig eth0 down # ifconfig eth0 up で、行ける事が分かったのでメモっとく。

因みに機種は XG60K で NIC は ULi M526x と出ている。


2010/06/27

クライアント証明書を使ったSSH認証

とある事情で ssh を外部に公開する必要がでてきた。
でも 22 番ポートなんて一番突っ込まれ安いんで開けたくねー
(実際、公開中に総当たり攻撃受けたし)

さすがに単純な user/pass の設定では公開したく無かったので
クライアント証明書を使うことにした。

とりあえず sshd の設定変更。
/etc/ssh/sshd_config の変更点は以下の通り。

PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no


ChallengeResponseAuthentication は FreeBSD の場合だけ必要になる。
(デフォルトの違いらしい)


クライアント側で鍵を作る。

$ cd ~/.ssh/
$ ssh-keygen -b 1024 -t dsa -N 鍵パスワード -f key-ssh
$ mv key-ssh identity
$ chown 600 identity

公開鍵が key-ssh.pub に出来ているはずなのでサーバ側に送る。


サーバ側で公開鍵を承認する。

$ cd ~/.ssh/
$ cp key-ssh.pub authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
$ chmod g-w ~ ~/.ssh

パーミッションの変更を忘れると動かないので要注意。

後は普通にクライアント側から ssh を使うと鍵のパスワードを聞かれるようになる。

$ ssh ホスト名
Enter passphrase for key '/home/user/.ssh/identity':

パスワードを入力すればログイン。


ちなみにクライアントにWindowsを使いたい場合は Putty とかがよさげ。
- このへんから http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
- インストールは展開してコピーするだけ。
- この中の puttygen.exe を起動して鍵を生成する。



- まずは Generate をポチッと押す。



- 次にマウスをグリグリする。



- 生成された鍵をサーバの ~/.ssh/authorized_keys に追加する。



- パスワードを入れて秘密鍵を保存する。
-- ファイル名はここでは ssh-key.ppk とする。

- 以下のようなバッチファイルを作って Putty を起動する。

c:\xxxx\putty.exe -i c:\xxxx\ssh-key.ppk ユーザ名@ホスト名


でいけるはず。


手渡しとか安全な経路があれば秘密鍵をクライアントに渡してしまって
も良いと思います。
ちょっと手間はかかりますが安易なパスワードに対する不安を無くせる
事を考えるとメリットの方が大きいかと。






プロフィール
20年勤めた会社がリーマンショックで消滅、紆余曲折を経て現在はフリーランスのSE。 失業をきっかけにこのブログを始める。

サイト内検索

登録
RSS/2.0

カテゴリ

最近の投稿【メモ】

リンク

アーカイブ