開発やらlinuxについてやったこと、ひっかかったことのメモ
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
簡単に出来るらしいのだが,出来ません.なぜだ.
mixiアプリで実装しているのですが, 400 Bad Requestが出てしまって失敗.firebugでもどこがおかしいのか分からず. しょうがないから,mixiアプリから離れ,テスト環境で実装してみましたが,,, 出来ました(20091109) 以下11月05日(現在)のソースコード 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 3 <html xmlns="http://www.w3.org/1999/xhtml"> 4 <head> 5 <meta http-equiv="content-type" content="text/html; charset=utf-8"/> 6 <title>ようこそ</title> 7 8 <link rel="stylesheet" href="./test.css" type="text/css"> 9 10 <script src="http://maps.google.co.jp/maps?file=api&v=2&key=ABQI AAAA3rz-n0Fwa7en-yAJRj5J1hQhaKahdK6unGGkGElxMSZ-PRd4IxQiddQzSOYpyPwJdZ3q5Y3D 9G9QEg" 11 type="text/javascript"></script> 12 <script type="text/javascript"> 13 14 var map = null; 15 var geocoder = null; 16 17 function load() { 18 if (GBrowserIsCompatible()) { 19 var map = new GMap2(document.getElementById("map")); ←そりゃダメだわw 20 map.addControl(new GLargeMapControl()); 21 map.addControl(new GMapTypeControl()); 22 var niigata_univ = new GLatLng(37.868044,138.947353); 23 map.setCenter(niigata_univ, 15); 24 geocoder = new GClientGeocoder(); 25 } 26 } 27 28 function showAddress(address) { 29 alert(address); 30 if (geocoder) { 31 geocoder.getLatLng( 32 address, 33 function(point) { 34 if (!point) { 35 alert(address + " not found"); 36 } else { 37 map.setCenter(point, 13); 38 var marker = new GMarker(point); 39 map.addOverlay(marker); 40 marker.openInfoWindowHtml(address); 41 } 42 } 43 ); 44 } 45 } 46 47 48 </script> 49 50 </head> 51 52 <h1>ここはindexページです.</h1> 53 54 <br/> 55 <script language="JavaScript"><!-- 56 function myMenu(){ 57 select = document.selectForm.menu.selectedIndex; 58 location.href = document.selectForm.menu.options[select].value; 59 } 60 //--></script> 61 62 <form name="selectForm"> 63 <select name="menu"> 64 <option value="test.html">testページへ 65 <option value="css-test.html">スタイルシートの練習へ 66 </select> 67 <input type="button" value="go" onclick="myMenu()"> 68 </form> 69 70 71 <!-- google maps APIを利用した地図データの表示 --> 72 <!-- --> 73 <BODY onload="load()" onload="GUnload()"> 74 <form onsubmit="showAddress(this.address.value);return false" action="#"/> 75 <input type="text" name="address"/> 76 <input type="submit" value="検索"/> 77 </form> 78 <div id="map" style="width: 500px; height: 300px"></div> 79 80 81 </BODY> 82 83 </html> 今日は疲れたからやめます. PR
うちのPCはDell Inspiron 530sという機種なのですが,
ブートデバイス順を ハードディスクよりRemovable(USB)を優先した状態で起動すると,正常にブートできませんでした.ちなみにUSBの外付けHDDは大丈夫.このBIOSはそれをRemovableではなくハードディスクとして認識している模様(良いことなんだけどそのおかげで余計この問題になかなか気付かなかった). しらべてみると「USB地雷」という有名な初期不良問題を抱えていたらしいです. そんな問題抱えたまま出荷すんじゃねーよ!さすがDell. 安さには必ず訳があるというわけです. で,BIOSをアップデートすると治るかもよ!とグーグル先生が言ってくれたので,早速実行. しかし結果は変わらず. 試しにUSBフラッシュメモリをipod nanoにしてみたら正常に起動することを確認できました. つまりはBIOSを最新バージョンにアップしても,まだUSB地雷の根本的な解決に至っていない模様. 以下に今回の問題を個条書きでまとめました. 【問題】 ・BIOSのブートデバイス順をHard diskよりRemovableを優先させた状態で,USBフラッシュメモリを刺したまま電源をいれると,BIOSがデバイスの正常ブートを行えない(USBをブートしている段階で止まる?) 【詳細】 [問題が起きた機種] Dell Inspiron 530s [BIOS] BIOS 1.0.16(前バージョンは1.0.5.前バージョンでも問題は発生) [問題が発生したフラッシュメモリ] Transcend JFV30/2GB [問題の発生したUSBポート] フロント(2つ)とバックポートでも問題が発生 ※バックポートに関しては一つしか確認していない 【気付いたこと】 ・USBの外付けHDDはBIOSはHard diskとして認識しているから大丈夫 ・Transcendの代わりにipod nanoに代えたところ正常にブートされた. 【補足】 ・CDROMデバイスの方では問題は起きなかった. ・BIOS1.0.5のときはipod nanoでも異常が発生していた気がする.
MBMはフリーのブートローダで,
メインの仕事は, 「選択された各パーティションのPBRを呼び出す」ことらしい. このMBMは今回ディスクからインストールしたのだけれど, MBMはフロッピーからブートするインストーラしか配布していないため, それをisoイメージに変換する必要がある. 最新版(MBM R0.39)のダウンロードhttp://my.vector.co.jp/servlet/System.FileDownload/download/http/0/35596/pack/dos/util/boot/mbm039.zip
マルチブート環境構築レポート(概要編)でも説明したように,
Linuxは1段階ブートであるので, Windowsや他のOSとの共存における問題回避のためにも Linuxを2段階ブートで起動できるようにする. そのためには, grubコマンドを使用する ※root権限で実行すること 端末上で >sudo grub すると, grub> と出力され, grubコンソールが起動するので. grub>root (hd1,0) grub>setup (hd1,0) を実行する. (hd x , n)はBIOSで認識されている(x+1)番目のハードディスクの(n+1)番目の パーティションであることをあらわしている. つまり,上記の例はUSBHDD上の1番目のパーティションのPBRにGRUBをインストールしたということ. ちなみにsudo fdisk -l を実行すると,パーティションの構成状況を確認可能. 私の場合は以下↓ >sudo fdisk -l ディスク /dev/sda: 320.0 GB, 320072933376 バイト ヘッド 255, セクタ 63, シリンダ 38913 Units = シリンダ数 of 16065 * 512 = 8225280 バイト Disk identifier: 0xd8000000 デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 1 8 64228+ de Dell ユーティリティ /dev/sda2 9 1314 10485760 7 HPFS/NTFS /dev/sda3 * 1314 38914 302019584 7 HPFS/NTFS ディスク /dev/sdb: 250.0 GB, 250059350016 バイト ヘッド 255, セクタ 63, シリンダ 30401 Units = シリンダ数 of 16065 * 512 = 8225280 バイト Disk identifier: 0x19e8da2e デバイス ブート 始点 終点 ブロック Id システム /dev/sdb1 1 29653 238187691 83 Linux /dev/sdb2 29654 30401 6008310 5 拡張領域 /dev/sdb5 29654 30401 6008278+ 82 Linux スワップ / Solaris sdaは1番目のHDD(内蔵HDD),sdbは2番目のHDDのパーティションという感じ. 数字がそのHDD内領域のパーティション番号ということらしい. これでPBRにGRUBがインストールされた.(menu.lstの内容はそのままだった) 【参考URL】 マルチブートするなら2段階ブートに統一しよう wikiwiki.jp/disklessfun/
半日かかった.
やっと終わった! 今回の作業でOSのブートに対する基礎知識は十分についたとおもう. まず,基本的な知識から MBR(マスタブートレコード) これは,BIOSがOSブートの第1段階として呼び出す領域であり,原則OSのブートローダーはここに配置されている. PBR(プライベートブートレコード) これは,パーティションの先頭にある領域で,WindowsやFreeBSDなどLinux以外のほとんどのOSは,ここにメインのブートローダを配置する.要するにMBRは領域が少ないので, MBR→PBR(MBRで出来ないようなこと)→OSをブート という感じにしているっぽい. ちなみにこれを「2段階ブート」と一般的に呼ばれているらしい. PBRの説明で「Linux以外」となっていたことについて. 現行のLinuxはGRUBというブートローダを使用しており,GRUBは他OSのように2段階ブートせず,MBRから直接カーネルにアクセスし,/boot/grub/menu.lstを参照したり,stage2と呼ばれる作業を実行してOSをブートするらしい. つまり, MBR→OSをブート している.これは前述の2段階ブートと比較して「1段階ブート」と呼ばれているらしい. これがどういうことかというと,マルチブート環境構築時に問題が発生しやすくなってしまう. 例えばWindowsが入っていたPCにパーティションを区切ってLinuxを追加した場合, MBRはGRUBで上書きされてしまう. つまりWindowsを起動するためには MBR(GRUB stage1)→Linuxファイルシステム(GRUB stage2)上のmenu.lstを参照し,OS選択→Windows用PBR→Windowsのブート という経路になっているみたい. で,今回私が経験した問題がこれで説明できる. 内蔵HDDにWindowsが入っていて,新規でLinuxをUSBHDDにインストールすると,内蔵HDD上のMBRにはGRUBが上書きされてしまうため,USBを外した状態でBIOSを起動すると以下のメッセージが出力されてしまう. GRUB Loading stage1.5. GRUB Loading, please wait... Error 21 これはGRUBのstage1.5(stage2.0を呼び出すための準備?)をロードしようとしているが,stage2.0が存在しないため,エラーが発生してOSのブートが出来ない. さらには/boot/grub/menu.lstは,GRUBインストール時のBIOSのハードディスクのブート順などが書かれているため,GRUBをインストールしてしまったあとで,下手にBIOSのハードディスクのブート順などを変更してしまったり,新たなHDDを追加してしまうと,エラーになってしまう恐れもあるらしい. 今回私は無知の状態で上記2つの問題を同時に経験したので,この問題の対処に半日費やす羽目になりました. さらにstage2.0がUSBHDDに存在しているために,USBが壊れたら....ということもあるらしい. なので今回対処方法として実践したステップ↓ 1.Linuxのブートローダ(GRUB stage1)をPBR領域に配置 2.MBRに強力なフリーソフトのMBM(マルチブートマネージャ)をインストール 以上を行うことで設定を終えることができました. 設定の詳細は このあと記述する記事を参照のこと. 【参考URL】 マルチブートするなら2段階ブートに統一しよう wikiwiki.jp/disklessfun/ |
カレンダー
カテゴリー
フリーエリア
最新記事
(07/25)
(04/22)
(04/21)
(02/22)
(02/08)
(02/04)
(01/16)
(11/26)
(11/24)
(11/12)
最新TB
プロフィール
HN:
poti
性別:
非公開
ブログ内検索
最古記事
(11/16)
(11/16)
(11/17)
(11/17)
(11/17)
(11/18)
(11/18)
(11/19)
(11/21)
(11/21)
P R
|