Google OS実験室 ~Moonlight 明日香~

GoogleのAndroidで遊び始めて, すでに6年以上が経った. Androidは思った以上の発展を遂げている. この技術を使って, 新しいことにチャレンジだ!!

Ubuntu

VMware Playerを快適にしたい

Google発の深層学習フレームワーク「TensorFlow」のAndroidデモをUbuntu 14.04 on VMware Playerでビルドしようとしたが, 一晩かかっても終わらなかった.

ホストマシン:
 CPU:Intel Core i7-2600K
 RAM:8.00GB
 OS:Windows 10 Pro
 VMware Player 6
仮想マシン:
 プロセッサ数:4
 メモリ:3GB
 HDD:100GB
 OS:Ubuntu 14.04

VMware Playerをもう少し快適にできないかと少し調べてみたところ, 仮想マシンのメモリはデフォルトではHDD(or SSD)上にメモリファイル(.vmem)として置かれるようである.
これならディスクI/Oが多発し動作が遅いのも納得である.

そこで, 仮想マシンで実メモリが使えるように, VMware構成(*.vmx)ファイルでメモリ関連の設定を行うことにした.


1. 設定項目[1][2]
vmxファイルに以下の設定を追加する.
  mainMem.useNamedFile= "FALSE"
  MemTrimRate = "0"
  sched.mem.pshare.enable = "FALSE"
  prefvmx
.useRecommendedLockedMemSize = "TRUE"
  MemAllowAutoScaleDown = "FALSE"

2. 各パラメータの説明[1][2]
1) mainMem.useNamedFile = "FALSE" 
  メモリファイル(.vmem)を使用しない.
2) MemTrimRate = "0"
  メモリページのトリミングを無効にする.
3) sched.mem.pshare.enable = "FALSE"
  ページ共有機能を無効にする.
4) prefvmx.useRecommendedLockedMemSize = "TRUE"
 メモリ使用量が変化した際に, メモリサイズを固定する.
5) MemAllowAutoScaleDown = "FALSE"
  仮想OSのメモリサイズの自動調節を無効にする.

上記設定で, 以前よりビルドの進行は速くなったが, それでもandroid:tensorflow_demoのビルドはなかなか終わらない.
まだディスクアクセスが頻発しているもよう.

task

そもそもVMware Player上でビルドしているからなのか, それともPCのメモリ不足が原因なのか不明.
ビルド時間がもったいないので何とかしたい!!

Deep Learningやるために, 新しいLinux PC組もうかな~.
ああ, Core i7-6700K + 16GB RAM + SSD + NVIDIA GTX980がほしい.

----
参照URL:
[1] VMware Player上の仮想OSを高速化させ軽快に作動させるチューニング
[2] VMX-file parameters


Ubuntu 13.04 on VMware Playerで共有フォルダが使えない

Ubuntu 13.04 on VMware Player 5にVMware-toolsをインストールしても共有フォルダが使用できなかった.
ネットで調べるといくつか対処法が載っていたので, 紹介しておく.

1. VMWare-Toolsの一部コード修正[1][2]
いつものように, "sodo ./vmware-install.pl"を実行しても, 以下のエラーが出て共有フォルダが有効にならなかった.

make: ディレクトリ `/tmp/modconfig-1SEAJI/vmhgfs-only' に入ります
/usr/bin/make -C /lib/modules/3.8.0-19-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
 MODULEBUILDDIR= modules
make[1]: ディレクトリ `/usr/src/linux-headers-3.8.0-19-generic' に入ります
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/backdoorGcc64.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/backdoor.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/bdhandler.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/cpName.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/cpNameLinux.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/cpNameLite.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/dentry.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/dir.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/file.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/filesystem.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/fsutil.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/hgfsBd.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/hgfsEscape.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/hgfsUtil.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/inode.o
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/link.o
/tmp/modconfig-1SEAJI/vmhgfs-only/inode.c: 関数 ‘HgfsTruncatePages’ 内:
/tmp/modconfig-1SEAJI/vmhgfs-only/inode.c:888:4: エラー: 関数 ‘vmtruncate’ の暗黙的な宣言です [-Werror=implicit-function-declaration]
cc1: some warnings being treated as errors
make[2]: *** [/tmp/modconfig-1SEAJI/vmhgfs-only/inode.o] エラー 1
make[2]: *** 未完了のジョブを待っています....
  CC [M]  /tmp/modconfig-1SEAJI/vmhgfs-only/message.o
make[1]: *** [_module_/tmp/modconfig-1SEAJI/vmhgfs-only] エラー 2
make[1]: ディレクトリ `/usr/src/linux-headers-3.8.0-19-generic' から出ます
make: *** [vmhgfs.ko] エラー 2
make: ディレクトリ `/tmp/modconfig-1SEAJI/vmhgfs-only' から出ます

"Ubuntu 13.04上でVMWare Toolsのshared foldersが有効に成らない場合"[1]と同様に, vmhgfs-only/inode.cの888行目がおかしいようである.
ここを以下のように修正すれば, 共有フォルダが使えるようになる.

[対策手順]
(1) vmhgfs.tarを解凍し, inode.cのソースコードを準備する.
  $ cd ./vmware-tools-distrib/lib/modules/source/
  $ tar xvf vmhgfs.tar

(2) vmhgfs-only/inode.cの888行目を, 以下のように書き換える.
  LOG(4, (KERN_DEBUG "VMware hgfs: HgfsTruncatePages: entered\n"));
  // result = compat_vmtruncate(inode, newSize);
  result = 0;
  if (result) {
    LOG(4, (KERN_DEBUG "VMware hgfs: HgfsTruncatePages: vmtruncate failed "
          "with error code %d\n", result));
    return 0;
  }
    :
(3) vmhgfs-onlyをtarで固める
  $ tar cvf vmhgfs.tar vmhgfs-only
(4) アンインストールし, 再度インストールし直す.
  $ cd ../../../
  $ sudo bin/vmware-uninstall-tools.pl
  $ sudo ./vmware-install.pl

今回の修正は, とりあえずエラーチェックを回避する暫定的なものである.
エラー原因をもう少し詳しく知りたいという方は, "VMWare Player上のUbuntu13.04でVMWare Toolsのhgfsのコンパイルがコケる件"[2]を参照してネ!

2. Open Vertual Machine Tools[3][4][5]
Open Vertual Machine Toolsなるものがあるようで, これをインストールすることで共有フォルダが使用できるようになる.
VMWare-toolsのオープンソース版があったんですね!? 知らなかった...

[手順]
(1) Open Vertual Machine Toolsをインストールする.
  $ sudo apt-get install open-vm-tools
(2) 共有フォルダをマウントする.
 
  $ sudo mount -t vmhgfs .host:/ /mnt/hgfs

自動的にマウントするようにするには, /etc/rc.localに上記mountコマンドを追加する.

共有フォルダを使えるようにするだけなら, Open Vertual Machine Toolsをインストールするのがおすすめ!!

----
参照URL:
 [1] Ubuntu 13.04上でVMWare Toolsのshared foldersが有効に成らない場合
 [2] VMWare Player上のUbuntu13.04でVMWare Toolsのhgfsのコンパイルがコケる件
 [3] VMPlayer(host-os:Windows8/guest-os:ubuntu13.04)の共有フォルダ設定
 [4] Open Vertual Machine Tools
 [5] VMware上のUbuntu13.04でvmware-toolsが動かなかったので

Android NDK環境(Eclipse+NDK+CDT)を構築する

最近Android NDK環境を使っていなかったが, ADTr20からNDKなプロジェクトを作れるようになったようだ.
Ubuntu 13.04上にAndroid NDK環境(Eclipse+NDK+CDT)を構築したので, 少しまとめておく.

CPU : Intel(R) Core(TM) i7-2600K@3.4GHz
OS : Windows 7 Ultimate(64bit) SP1
RAM : 8.0GB
Guest OS : Ubuntu 13.04(64bit) on VMware(R) Player 5.0.1

1. Android NDKのインストール[1]
1) ここから, OSにあったパッケージをダウンロードする.
 今回は, Ubuntu 13.04(64bit) なので, android-ndk-r8e-linux-x86_64.tar.bz2をダウンロードした.
2) ダウンロードしたファイルを, インストールディレクトリに展開する.
 今回は, ~/toolsにインストールした.
  $ cd ~/tools
  $ tar jxvf ../Downloads/android-ndk-r8e-linux-x86_64.tar.bz2

3) ホームディレクトリにある".bashrc"に環境変数を設定する.
 今回は, 以下の3行を追加した.
  # Android NDK
  export ANDROID_NDK_ROOT=$HOME/tools/android-ndk-r8e
  export PATH=$ANDROID_NDK_ROOT:$PATH

4) 設定を反映させる.
  $ source ~/.bashrc

2. NDK Pluginsのインストール[2]
EclipseとADTはインストールされている前提で進める.
まだの方, 例えばこちらの記事[3]などを参照して, インストールしてください.

Eclipse Platform
 Version: 4.3.0.v20130605-2000
 Build id: I20130605-2000
Android Development Tools
 Version: 22.0.4.v201307151829--741630

1) Eclipseを起動する.
2) Help > Install New Software...を選択し, ADT Pluginを選択する.
 ndk01
3) NDK Pluginsを選択し, インストールする.
 ndk02
4) インストールが完了したら, Eclipseの再起動を求められるので, 再起動を行う.

3. Eclipseの設定
1) Window > Preferences > Android > NDKを選択し, NDKのインストールパスを指定する.
 ndk03

4. 動作確認
Android NDKのサンプルを使って動作確認する.
今回は, android-ndk-r8e/samples/hello-jniをビルド, 実行してみた.
1) File > Import > Android > Existing Android Code Into Workspaceを選択し, Browse...からhello-jniプロジェクトをインポートする.
 ndk04
2) HelloJniプロジェクト上で右クリックし, Android Tools > Add Native Support...を実行する.
3) HelloJniプロジェクトをCleanし, Runする.
 正しく実行できた場合, 画面に"Hello from JNI!”と表示される.
 ndk06

 このとき, 以下のようなエラーが発生した場合, AndroidManifest.xmlのMin SDK Versionを実行環境に合わせる.
 今回は, 3→8に変更した.
 ndk05

今回は, Ubuntu 13.4/LinuxでNDK環境を構築したが, Windowsでもほぼ同様の手順で構築できるはず!!

----
参照URL:
 [1] Android NDK
 [2] Android NDK 環境構築 (Eclipse+NDK+CDT) 
 [3] 早くて簡単! ADTちょい足しEclipseで開発環境構築 (1/2)

Ubuntu 11.04のMBRを修復する

Androidビルド環境を構築していたUbuntu 11.04(64bit) on VMware(R) Player が, 以下のようなメッセージを表示して起動しなくなった.

 GRUB Loading, please wait...
 Error 21

原因は, 少し前にUSB起動のUbuntuを作成してしていて, 誤ってMBR(Master Boot Record)を破損したためのようだ.

Ubuntu 11.04(64bit) on VMware(R) Player のMBRを修復した際のメモをまとめておく.

1. LiveCDの起動[1]
ブートで失敗しているので, 以下の手順でVMPlayer上でLiveCDからUbuntu 11.04を起動する.
1) Ubuntu 11.04をインストールしている xxx.vmxファイル内の以下の項目を修正する.
 (a) 起動時にbios設定を有効にする.
  bios.forceSetupOnce = "TRUE"
 (b) cdromにUbuntu11.04のLiveCDイメージを設定する.
  ide1:0.present = "TRUE"
  ide1:0.fileName = "D:\OSImage\ubuntu-11.04-desktop-amd64.iso"
  ide1:0.deviceType = "cdrom-image"
 (c) cdromを起動時に有効にする.
  ide1:0.startConnected = "TRUE"
2) VMPlayerを起動するとBIOS設定画面が表示されるので, "Boot"タブで"CD-ROM Drive"を一番上にして, "Exit"タブで"Exit Saving Changes"で設定を保存する.
  起動デバイスの順位は, "+"/"-"キーで変えられる.
vmplayer02
3) LiveCDが起動したら, "Try Ubuntu"を選択する.
Ubunt

2. grubの再インストール[2]
Terminalを開き, grubをインストールする.
1) root権限になる.
 $ sudo -s
2) Ubuntu 11.04がインストールされているパーティションを確認する.
 # fdisk -l
以下では, /dev/sda1にインストールされているとする.
3) Ubuntu 11.04がインストールされているパーティションをマウントする.
 # mount /dev/sda1 /mnt
4) grubをインストールする.
 # grub-install --root-directory=/mnt /dev/sda
5) 再起動する.
 # reboot
無事, Ubuntu 11.04を起動することができた.
6) grubをupdateする.
 $ sudo -s update-grub
7) Ubuntu 11.04をShutdownし, 1.で修正したxxx.vmxファイル内の修正を元に戻す.

OSのインストール, マルチブートなどを試していると, MBRを破損して起動できなくなることはよくあることである.
たいていの場合は, grubなどを再インストールし正しく設定することで復旧できるので, 慌てないで対処しましょう!!

----
参照URL:
 [1] Ubuntu10.10にアップグレードしたが...
 [2] Ubuntu10.10とWindows 7のデュアルブート


 
プロフィール

明日香

アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

記事検索



  • ライブドアブログ