kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

起動時に

[kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)]
と表示されてうまく起動しないってのがあったので備忘録

環境

CentOS6.3

根本的な原因

initrdファイルが読み込まれないでブート
というか今回はファイルもなんかなかった

なぜそうなったのかという理由

kernelのアップデートが行われたけどそのときにこけてたっぽい
そして再起動したので発症

対策

対策:
1.どのバージョンのカーネルで起動しようとしていたかを調べる

  • >エラーメッセージから 2.6.32-279.14.1.el6.x86_64 だとわかる

2./boot/initrd-2.6.32-279.14.1.el6.x86_64.imgがあるか調べる

  • >なければ

depmod 2.6.32-279.14.1.el6.x86_64
とタイプ
これで initrd用のファイルリストが作成される
次に
cd /boot
mkinitrd initrd-2.6.32-279.14.1.el6.x86_64.img 2.6.32-279.14.1.el6.x86_64
とタイプ
これで initrdファイルが作成される
-rw-r--r--. 1 root root 16521211 2? 13 11:12 2013 initrd-2.6.32-279.14.1.el6.x86_64.img
ファイルサイズがおかしい場合は depmodを正常に行えたか確認 /lib/modules/バージョン/modules.depファイルが有るはず
3.grub.confを確認initrdのセクションを確認

  • >なければ追加 あればファイル名が正しいか確認

initrdのセクションにはinitrd*.imgと initramfs*.imgがありうる

//GRUBの設定例
title CentOS (2.6.32-279.14.1.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-279.14.1.el6.x86_64 ro root=/dev/mapper/vg_livecd-lv_root rd_NO_LUKS rd_LVM_LV=vg_livecd/lv_swap rd_NO_MD rd_LVM_LV=vg_livecd/lv_root crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet
initrd /initrd-2.6.32-279.14.1.el6.x86_64.img
title CentOS (2.6.32-279.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-279.el6.x86_64 ro root=/dev/mapper/vg_livecd-lv_root rd_NO_LUKS rd_LVM_LV=vg_livecd/lv_swap rd_NO_MD rd_LVM_LV=vg_livecd/lv_root crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-279.el6.x86_64.img


参考:
initrd って何? http://www.geocities.jp/sugachan1973/doc/funto72.html

Google Maps Android API v2 はGoogle Maps API v3 みたいにマーカーの追加が簡単!

Google Maps Android API v2 は Google Maps API v3 みたいに addMarker とかしていけるから楽
あと 吹き出しもデフォルトで使えるようになってるので便利

package com.maps;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class MainActivity extends FragmentActivity {
	private static final String TAG_MAP_FRAGMENT = "MAP_FRAGMENT";
	private static final LatLng TOKYO = new LatLng(35.681382, 139.766084);
	private static final LatLng UnivAizu = new LatLng(37.523796,139.938733);
	private SupportMapFragment mMapFragment;
	private GoogleMap mMap;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		// 登録したタグから MapFragment を取得する(デバイス回転などの再生成対策)
		mMapFragment = (SupportMapFragment) getSupportFragmentManager()
				.findFragmentByTag(TAG_MAP_FRAGMENT);
		if (mMapFragment == null) {
			// MapFragment がなければ作成する
			mMapFragment = SupportMapFragment.newInstance();
			getSupportFragmentManager().beginTransaction()
			.add(android.R.id.content, mMapFragment, TAG_MAP_FRAGMENT)
			.commit();
		}
	}

	@Override
	protected void onResume() {
		super.onResume();

		if (mMap == null) {
			// MapFragment から GoogleMap を取得する
			mMap = mMapFragment.getMap();
			if (mMap != null) {
				// マップをハイブリッド表示にする
				mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);

				// 屋内マップ表示を無効にする(標準は true)
				mMap.setIndoorEnabled(false);

				// 現在地表示ボタンを有効にする
				mMap.setMyLocationEnabled(true);
				// UiSettings にボタン表示設定があるが標準は true なので設定不要
				// mMap.getUiSettings().setMyLocationButtonEnabled(true);

				// 東京駅にマーカーをつける
				mMap.addMarker(new MarkerOptions()
				.position(TOKYO)
				.title("東京駅")
				.snippet("2012年10月1日に復元工事が完了")
				.icon(BitmapDescriptorFactory
						.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));

				mMap.addMarker(new MarkerOptions()
				.position(UnivAizu)
				.title("天空都市")
				.snippet("定期的に浮上中")
				.icon(BitmapDescriptorFactory
						.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));


				// カメラの位置を東京駅に変える
				this.moveCameraToLatLng(false,TOKYO);

				// 地図の長押しでカメラを東京駅まで移動する
				mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
					@Override
					public void onMapLongClick(LatLng point) {
						moveCameraToLatLng(true,UnivAizu);
					}
				});
			}
		}
	}

	/**
	 * カメラを任意の位置に移動する
	 *
	 * @param isAnimation
	 * アニメーション移動するかの判定。true でアニメーション移動。
	 * @param target
	 * ターゲットの位置 LatLng型
	 */
	private void moveCameraToLatLng(boolean isAnimation,LatLng target) {
		// カメラの位置情報を作成する
		CameraUpdate camera = CameraUpdateFactory
				.newCameraPosition(new CameraPosition.Builder()
				.target(target)
				.zoom(18.0f).build());
		if (isAnimation) {
			// アニメーション移動する
			mMap.animateCamera(camera);
		} else {
			// 瞬間移動する
			mMap.moveCamera(camera);
		}
	}


}

ほとんどここを参考

東京駅に最初はマーカーが置かれてる
地図を長押しすると会津大学へカメラ移動




MapFragment に現在地表示、マーカー表示などの機能を追加する - 戌印-INUJIRUSHI- (Androidあれこれ) -
http://inujirushi123.blog.fc2.com/blog-entry-100.html

Google Maps Android API v2 でRuntime Error

<meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="hogehoge"/>

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <!-- GoogleMapsを使用するAPIキーとか -->
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="ここにAPIキーを入れる" />
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

のように
以下以上に書いておくべき

以下のパーミッションと同じ高さで書いておいたら起動時にRuntimeErrorで怒られました

参考:
throw Life - Google Maps Android API v2を使ってみた
http://www.adamrocker.com/blog/334/google-maps-android-api-v2.html
EGG 開発ブログ: Google Maps Android API v2の使い方
http://eggdev.blogspot.jp/2012/12/google-maps-android-api-v2.html

CentOS6.3 minimul にRubyを入れるための最低手順

# yum -y install git make gcc gcc-c++ zlib-devel openssl-devel httpd-devel curl curl-devel readline-devel tk-devel

http://www.kenmaripc.mydns.jp/20110811/480

wget http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6

rpm --import RPM-GPG-KEY-EPEL-6

rm -f RPM-GPG-KEY-EPEL-6

vi /etc/yum.repos.d/epel.repo


[epel]
name=EPEL RPM Repository for Red Hat Enterprise Linux
baseurl=http://ftp.riken.jp/Linux/fedora/epel/6/$basearch/
gpgcheck=1
enabled=0

yum --enablerepo=epel -y install libyaml-devel


http://www.ruby-lang.org/ja/downloads/
ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p286.tar.bz2
tar xvf ruby-1.9.3-p286.tar.bz2
cd ruby-1.9.3-p286
sudo ./configure --prefix=/usr/
make -j 2
make install

ruby -v
gem install bundle

      • -

gem instal bundle をする理由は

CentOS6.3(minimal にALMinium
http://d.hatena.ne.jp/xlis/20121010/1349828876

neo4j on CentOS6.3 (minimal

EnterPrise版の1.8をDLしてきます
http://info.neotechnology.com/download-Neo4j.html?edition=enterprise&release=1.8&platform=unix

tar xvf neo4j-enterprise-1.8-unix.tar.gz
cd neo4j-enterprise-1.8
cd bin
sudo ./neo4j start

とかすると http://localhost:7474/webadmin/ へアクセスすればOKになります

JAVA_HOMEがなんちゃらっていわれる人

jdkが入っててもJAVA_HOMEの設定がされていないかもしれません

sudo vim /etc/profile

と開いて 末部に以下を追加

export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export NEO4J_HOME="/app/neo4j/neo4j/neo4j-enterprise-1.8"

NEO4J_HOMEは tarを展開して出てきたディレクトリneo4j-enterprise-1.8を指定してください
インストールですが、6.2の段階で既知のバグがあります
neo4j centos
なんかでぐぐると一発ですが
$NEO4J_HOME/bin/neo4jとutilsにcentosにはないコマンドを利用しているようで 
https://gist.github.com/2920283
https://gist.github.com/2920262
からそれぞれneo4j とutilsをDLしてきて置換した後

参考:CentOS 6.2 failed install with Neo4j Server 1.6.1 Community https://github.com/neo4j/community/issues/292

sudo ./neo4j install centos

としてください

また、neo4j 用のアカウントも作成しておくといいです

sudo useradd neo4j
sudo passwd neo4j

インストールが成功したら

/etc/init.d/neo4j-service start
/etc/init.d/neo4j-service stop

みたいに使います

死活管理にlsofを使ってるっぽいので適宜

sudo yum -y install lsof

してください

ML110 G7 静音化

BIOS を J01に更新したら 若干ですが 静かになりました。
http://h20000.www2.hp.com/bizsupport/TechSupport/SoftwareIndex.jsp?lang=en&cc=us&prodNameId=5075943&prodTypeId=15351&prodSeriesId=5075942&swLang=8&taskId=135&swEnvOID=4064&printver=true

から、

* RECOMMENDED * Systems ROMPaq Firmware Upgrade for HP ProLiant ML110 G7/DL120 G7 (J01) Servers (For USB Key-Media)

を選んで書き換えUSBメモリを作成→USBブート(BIOSでF11 Press)で書き換えてくれます

今までは
起動時→BIOS→OSブート→待機
全部同じぐらいのうるささだったのが

起動時→BIOS→あたりで静かになるようになりました。(ファンコントロール閾値変更?)
まぁ 処理させてるとうるさくなりますが・・・

aipoのポート番号変更

aipo/bin/startup.shのs_port_num=8080 は結果表示部分ぐらいしか使ってなさそう
aipo/tomcat/conf/server.xmlの69行目

<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

みたいに変更すればおk