CoLinux+CentOS環境へ

2008.8.27 水曜日

こちら会社のメインマシンは便宜上Windowsを使用しているので、
一応Linuxとのデュアルブートにしてあって、何度かそちらへの完全移行を試みたけど、アプリの依存が解消しきれなくて未だ果たせず…
普段、開発とかする際の環境は、
別マシンに入れたLinuxでApache+PHP+その他を動かして、公開フォルダをsambaで共有してそこでやっとります。

その別マシン…Macのテスト環境も兼ねて、PowerMacG4にppc版のLinux入れて、その中でMac on Linuxを使ってMacOSを起動するという、我ながら変態な環境…。
Ubuntu6 / Fedora7 / Vine4 / MacOS Xのクアドラプルブート(笑)で、Linuxの方にはそれぞれMac on Linuxを導入済

以前は作業用Winに直接apache入れたり、VMwareとかCygwinとかCoLinuxとか色々試してみつつ、
でもやっぱり普段使うPCに色々入れて重くなるのイヤだなぁ、と思ってそんな環境にしてたけど、
最近、ネットワークドライブをマウントするともの凄く重い…。
以前は結構軽快だったけど、流石にMac側がリソース不足の模様?

ちょうどやたら忙しい時に作業効率激減で結構辛い。
そんなわけで、急遽メインのWinXPマシンに再度CoLinuxを入れて環境を移行。

ディストリはUbuntuやdebianならすぐ使えるイメージがダウンロードできるんだけど、
ここのところ一番よく扱うOSがRedHatのESなので、CentOSで行くことに決定。

インストール

http://www.colinux.org/から最新版のcoLinux-0.7.3.exe(後で開発版の0.8.0に変更)を落としてきて、ウィザードに添ってセットアップ。
ネットワークはTAPを使うし、イメージファイルは自作するので、Win-PcapとRootFile system image Downloadのチェックだけ外す。

イメージ作成

こちらを参考にしてイメージ作成。
手順は殆ど上記参考サイトのままなのでこちらでは割愛。

一部だけ違うのは、ddコマンドの為だけにCygwinをインストールするのもなぁ、と思って、
dd for windowsを使用したこと。
こちらを使用する場合も、コマンドプロンプトで殆ど同じコマンド使用でOK。

C:dd-0.5> dd if=F:\coLinuxCentOS5cent5.img of=F:\coLinuxCentOS5cent5.ext3 bs=512 skip=63

パスやファイル名等は環境に応じて変更してください

どうせなら最新のCentOS5.2にしたかったけど、qemuでOSのインストーラ起動直後に即Kernel Panicを起こして進まず、
色々試した末、時間も無いので諦めてCentOS5.1で…。

ネットワーク設定

ここがCoLinuxの一番の難所で、手間取る人多いと思う。

coLinuxのメモ - coLinuxのインストール(0.8.x) [その5]

こちらが非常にわかりやすいです。
自分の場合は、別マシンからも閲覧可能にする必要があるので、TAPのブリッジ接続にて設定。
手順は殆ど上記参考サイトのままなのでこちらでは割愛。
先人達のリソースは偉大。
ホント便利な時代になったものです。

参考サイトでは、CoLinux側の設定がDebian系のネットワーク設定方法なので、
CentOSやFedoraの場合は、
/etc/sysconfig/network-scripts/ifcfg-eth0を

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.2
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
NETWORK=192.168.0.0
TYPE=Ethernet

IPADDRはホストOSと同じセグメントの物を個別で割り振り
GATEWAYはホストOSのデフォルトゲートウェイと同じ物を設定。

と編集してnetworkをrestartでOK

ファイル共有

次に、作業環境用に、共有フォルダを作成。
cofsという便利なファイル共有機能があるので、それを使用。

CoLinuxを使用する際のconfファイルに、

cofs0="E:\coLinux"

パスは環境に応じて変更してください
という行を追加してCoLinuxを起動。

起動後、コンソール内で

# mkdir /home/colinux
# mount -t cofs cofs0 /home/colinux

これだけでWindowsのフォルダがcoLinux上でマウントできる
(この場合E:\coLinuxフォルダを/home/colinuxにマウント)

毎回mountコマンド打つのもメンドイので、/etc/fstabに

cofs0                   /home/colinux           cofs    defaults        0 0

という行を追加。
これで起動時に自動マウント。

サービスに登録

頻繁に使う物なので、Windowsのサービスに登録して自動起動するようにしておく。

F:coLinux> colinux-daemon.exe @cent5.conf --install-service

パスやファイル名等は環境に応じて変更してください
でサービスに追加して、
マイコンピュータ右クリック→管理→サービスとアプリケーション
もしくは、
コントロールパネル→管理ツール→サービス
でサービスの管理画面を開いて、
「Cooperative Linux」を選択して、「スタートアップの種類」を「自動」にしておくと、
Windows起動時にバックグラウンドで起動するようになる。

んで、とりあえず直近の仕事で使用すべく、
apache php postgresql mysql
あたりをyumでサクッとインストールして、使えるように設定して、一通り環境構築完了。

そんなこんなで、結構時間がかかった…。
(特にOSインストールと、ddコマンドの待ち時間が結構かかった。)
けどまぁ、あのまま重いネットワークドライブ使い続けるのに比べたら、長い目で見れば…!

ひとまず、今の一番の問題は、まだ会社で仕事してること(´Д`)
仕事の合間見て息抜きでざっと書いた記事なので、乱文だし、あんまり参考にならないかも!

でも当分缶詰になりそうなので、余裕出来るまで待ってるとやった内容忘れそうだし…(笑

エア引っ越し

2008.8.24 日曜日

最近は、暇さえあればエア引っ越し。

賃貸系のサイト片っ端から検索しまくって部屋選び。
以上。

ちょっと空しいけど、結構楽しい(笑

去年の12月に引っ越したばかりなので、まだ9ヶ月弱しか住んでないけど、引っ越し熱が…。
前は2DKの部屋に住んでいて、高いし、広くて掃除とか大変だし、ということでワンルームに移ってみたら、
…逆に狭すぎた…。

PC関係が結構スペース取るので(DT3台、モニタ2台)家具の配置もきつくて、
なんだか圧迫感感じるようになって、家での作業も余りはかどらないし、
キッチンが狭いので料理の頻度も減少傾向。

さらに、2月頃にダーツをやり出して、まだまだ下手なので練習したいのだけど、
仕事の関係でなかなかやりにいけず。
部屋にダーツボード貼りたいけど、今の部屋じゃ狭くて無理。

とりあえず、先立つものがないから、まだ当分はエア引っ越しだなぁ…。

(・ω・)

2008.8.19 火曜日

5連休なんてあっという間ですな(・ω・)
ウイークデーの月~金の5日は結構長く感じるのn

上期、仕事がバタバタだったので、反動で盆休みはひたすら仕事やプログラム系の作業から遠ざかってました。
なのでここのところネタがないのです。
いくつか作りかけの物が中途半端な状態で放置中。

仕事の方は9月までネタにしにくい開発がもっさりだなぁ…。

とりあえず。

ダーツ行きたい。

困った。

2008.8.11 月曜日

ヤルキレス。

意外とよく使うJavascript ロールオーバー

2008.8.5 火曜日

(※googleさんのキャッシュから復旧)

小物系です。
ごくありふれたコードだけど、出番は多いので持っておくと便利だし、ってことで。

ロールオーバーイメージの動作自体は、DreamWerverの「スワップイメージ」で簡単に実装できるので、デザイナーさんとかはそっちを昔からよく使ってたけど、
HTMLのソースがかなり凄いことになるので、後で困ることが多いし…。
(ページ更新時、に挿入されたプリロードイメージが、使わなくなった画像の分まで残ったままになってたりとかよくある)
つうことで、なるべくHTML側のソースを汚さない形で作った物を使って貰ってます。

サンプル

ページのロード時に、<img>タグにclass=”rollover”とつけてある物を抽出して、
ファイル名に「_on」がついた画像を裏でプリロード(事前読み込み)しておき、マウスオーバー時に画像差し替え。
(sample.gif→sample_on.gif sample.jpg→sample_on.jpg)

下記、jQuery併用版とスタンドアロン版があるけど、動きは全く同じ。
こうやって見比べると、jQueryとかってやっぱり便利だなぁって改めて実感…。

jQueryと併用版

他でjQuery使ってる場合とかは主にこっち。

使用方法

  1. <html>
  2. <head>
  3. <script language="javascript" src="jquery.js" type="text/javascript"></script>
  4. <script language="javascript" src="jquery.rollover.js" type="text/javascript"></script>
  5. </head>
  6.  
  7. <body>
  8. <!-- マウスオーバー時にsample_on.gifに差し替え-->
  9. <img src="sample.gif" alt="test" class="rollover"></div>
  10. </body>
  11. </html>

スクリプト

  1. var preLoadImg = new Object();
  2.  
  3. function initRollOvers(){
  4.     $("img.rollover").each(function(){
  5.         var imgSrc = this.src;
  6.         var sep = imgSrc.lastIndexOf('.');
  7.         var onSrc = imgSrc.substr(0, sep) + '_on' + imgSrc.substr(sep, 4);
  8.         preLoadImg[imgSrc] = new Image();
  9.         preLoadImg[imgSrc].src = onSrc;
  10.         $(this).hover(
  11.             function() { this.src = onSrc; },
  12.             function() { this.src = imgSrc; }
  13.         );
  14.     });
  15. }
  16. $(function(){
  17.     initRollOvers();
  18. });

スタンドアロン版

他のフレームワーク使ってて、jQueryとの併用はなるべく避けたい場合とか、
他にJSを使ってなくて、ロールオーバーの為だけにわざわざjQueryまで…とかそんな場合はこっち。
使用方法

  1. <html>
  2. <head>
  3. <script language="javascript" src="rollover.js" type="text/javascript"></script>
  4. </head>
  5.  
  6. <body>
  7. <!-- マウスオーバー時にsample_on.gifに差し替え-->
  8. <img src="sample.gif" alt="test" class="rollover"></div>
  9. </body>
  10. </html>

スクリプト

Download: rollover.js
  1. function initRollOvers() {
  2.     if (!document.getElementById){
  3.         return;
  4.     }
  5.    
  6.     var preLoads = new Array();
  7.     var allImages = document.getElementsByTagName('img');
  8.  
  9.     for (var i = 0; i < allImages.length; i++) {       
  10.         if (allImages[i].className == 'rollover') {
  11.             var src = allImages[i].getAttribute('src');
  12.             var ftype = src.substring(src.lastIndexOf('.'), src.length);
  13.             var oSrc = src.replace(ftype, '_on'+ftype);
  14.  
  15.             //-- スワップ元、スワップ先画像の登録
  16.             allImages[i].setAttribute('pSrc', src);
  17.             allImages[i].setAttribute('oSrc', oSrc);
  18.  
  19.             //-- イメージのプリロード
  20.             preLoads[i] = new Image();
  21.             preLoads[i].src = oSrc;
  22.  
  23.             //-- イベントの設定
  24.             allImages[i].onmouseover = function() {
  25.                 this.setAttribute('src', this.getAttribute('oSrc'));
  26.             }
  27.             allImages[i].onmouseout = function() {
  28.                 this.setAttribute('src', this.getAttribute('pSrc'));
  29.             }
  30.         }
  31.     }
  32. }
  33.  
  34. window.onload = initRollOvers;