‘VM’ カテゴリーのアーカイブ

aikawa

VirtualBoxのUbuntuにFlutter開発環境を構築

FlutterをWindowsで使っていて、プロジェクトにshellコマンドとか絡んで来ると、結構上手く行かない事が。
CygwinとかWSLを使っても、駄目な時は本当に駄目というか、それ専用で動かす労力が必要と考えると(修正しても後で動かなくなる可能性が・・・)。

そんなわけで、shellがそのまま動かせるLinux+Flutter開発環境が欲しくなったので、ちょっとUbuntu上に作ってみます。

Ubuntuインストール・・・は飛ばして、Flutterから

VirtualBoxにUbuntuのインストールとVirtualBox Guest Additionのインストールは、特に苦労する事は無いので省略。

LinuxへのFlutterインストールは下記を参考に。
https://docs.flutter.dev/get-started/install/linux/android





1. 次のパッケージをインストール

sudo apt-get update -y && sudo apt-get upgrade -y;
sudo apt-get install -y curl git unzip xz-utils zip libglu1-mesa

2. AndroidStudio用に以下をインストール

sudo apt-get install libc6:amd64 libstdc++6:amd64 lib32z1 libbz2-1.0:amd64

Android Studio

https://developer.android.com/studio/install?hl=ja#64bit-libs
こちらで64bit版は追加パッケージが必要となっていますが、殆どが見つからない状況なので、自分のは64bit版じゃないのかと思ったけどやはり64bit版だったので、無いものは無視しました。


UbuntuのFirefoxで以下にアクセスして、Linux版のAndroid Studioをダウンロード。
https://developer.android.com/studio?hl=ja





後はHomeのopt/以下に展開して起動。

tar xzf android-studio-*-linux.tar.gz
mkdir ~/opt
mv android-studio ~/opt/
cd
./opt/android-studio/bin/studio

起動後は、画面に従い設定を進めて行きますが、特に変更はなくデフォルトのままで良かったです。

以下のようにプロジェクトを選択する画面まで行ったら完了。

Visual Studio CodeとFlutter

同じようにUbuntuのFirefoxで https://code.visualstudio.com/download からdebインストーラをダウンロード。
クリックするとインストール画面になるので、Installを選択すればインストールされます。

起動後に、extensionでFlutterやDartの拡張機能を入れておきます。



Flutter本体はVisual Studio Code内からインストール出来るので、それを使います。
Ctrl+Shift+Pで上部に入力フォームが出るので、flutterと打つとプロジェクトを開始前にインストールが始まります。
展開先のフォルダ指定を聞かれるので、/home/vboxuser/opt 辺りを展開先に選び、右上ボタンを押します。
インストールは結構時間が掛かります。

終了後、flutter doctorを実施して、一応動くか確認。後でOKでない部分を潰して行きます。

~/opt/flutter/bin/flutter doctor

ついでに環境変数PATHにflutterを追加します(.profile辺りに)。

export PATH="$HOME/opt/flutter/bin:$PATH"

Android SDK Manager

ブラウザでダウンロード先を探す必要はなく、Android Studioからインストールします。
右上の…が縦になっているのをクリックして、下にあるSDK Managerを開きます。







SDK Toolsタブへ移動して、Android SDK Command-line ToolsとAndroid SDK Platform-Toolsを(チェックされてなければ)チェックしたら右下のApplyが押せるようになるので、Applyを押すとインストールが始まります。

~/Android/Sdk/cmdline-tools/latest/bin/sdkmanager が出来ているのを確認したら、環境変数ANDROID_HOMEを追加します。

export ANDROID_HOME=/home/vboxuser/Android/Sdk/

Google Chrome

FirefoxでChromeで検索してダウンロードしたら、インストールします。それだけ。

flutter doctorの不足分

まずはライセンスに合意します。

flutter doctor --android-licenses

次に、flutter doctorで不足となっているパッケージを入れます。今回はこんな感じでした。

sudo apt install clang cmake ninja-build pkg-config libgtk-3-dev

実はJDKも必要

これで一応Flutterは動くんですが、AndroidをビルドするためにはJDKをインストールする必要が有ります。それにFlutterの古いプロジェクトやライブラリを使っていると、JDKの古いバージョンでないとビルド出来ないとかがあるので、17と21を入れておきました。

sudo apt install openjdk-21-jdk
sudo apt install openjdk-17-jdk

環境変数JAVA_HOMEを追加します。17の場合は次のような感じ。

echo export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

最終的な環境変数

最終的な環境変数を追加した~/.profileファイルは以下のようになると思います。

export PATH="$HOME/opt/flutter/bin:$PATH"
export ANDROID_HOME=/home/vboxuser/Android/Sdk/
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

Android端末をFlutterでデバッグに使うために

最初はAndroid Studioのエミュレータを動かそうとしたんですが、動いたものの途中でVMがエラーを吐いてしまったので、使えないと断念しました。

一応そのためにやった事として。
VM内でエミュレータを動かすには、VMがネステッドVT-x/AMD-Vを有効化している必要が有りますが、デフォルトだとチェックが出来ない状態でした。
自分の場合は、コア分離のメモリ整合性のオフ、リアルタイムスキャンのオフでチェックが出来るようになり、起動後のVMがミドリガメ状態にならなくなりました(右から3番目のアイコン、キーボード・マウスの次のVが、緑でなく青になっている)。

デバッグ用Android端末は実機で

じゃあもう実際の端末を使うしかなくなっちゃったよ、という事で、VMからUSBを認識する手順です。
Android端末は、USBでホストのWindowsに接続しておきます。
VM停止状態で、仮想マシンを選択>右クリックで設定を開き、USBタブへ移動。
USB3.0を選択して、USBデバイスフィルター右のアイコンで、上から二番目の+が付いてる奴をクリックすると、選択肢が出て来るので、Android端末の名前が出ているのをクリックすると、一覧に追加されます。

この状態で起動して、ゲストOSウィンドウ右下のUSBアイコンを右クリックして、対象のデバイスをクリックすると、チェックが付きます。

VSCodeでFlutterプロジェクトを開き右下のDeviceをクリックすると、一覧に端末が出るので選択します。これでデバッグにAndroid端末を使えるようになりました。

ただ、USBを認識出来ない、チェック時にUSBデバイスへの接続に失敗してしまう時も有るので、そんな時はWi-Fiで繋げます(その前にAndroid再起動するとかは試しますが)。

Android端末をWifi接続

・Android Studioを開き、Flutterプロジェクトを開きます。
・右アイコンのAndroid君がいる奴を選択し、Device Managerを開きます。
・WiFiアイコンを選択するとQRコードが出ます。
・Android端末で開発者向けオプションのワイヤレスデバッグをタップ(有効な状態で)すると、QRコードによるデバイスのペア設定が出るので、出ているQRコードを読み取ります。

その後失敗したとか出ましたが、何か追加されていたので、VSCodeでも選べるようになっていました。
こっちの接続は(wireless)と付いてます。

あとはサンプルプロジェクト等で、デバッグを開始して端末にアプリが表示されればOKです。

murave

vagrant rsync-auto で rsync__exclude を変更しても反映されない場合

murave@歯医者さんから定期チェックの電話がかかってきたのでチャッチャと書かねば、です。

Vagrantで開発環境を整えていたのですが Synced Folder での権限周りで引っかかってしまいました。
それで、今頃、Rsync Synced Folder に気づいたのですが、いいですねコレ。

rsyncで同期されるので、開発機のパワー不足でクラウド環境にサーバーを建てて開発してる方も使えるはず。オススメです。

こちらの詳細は検索していただくと『Vagrant 1.5 で追加された Rsync Synced Folder が良い – Shin x blog』やQiitaの記事など良い情報がみつかるかと思います。

さて、本題です。Rsync Synced Folder で開発を始めると vagrant rsync-auto コマンドで自動でのrsync同期を行うのですが、rsync__excludeで指定した同期対象外設定を変更してもなぜか反映されないという現象に遭遇しました。

これに関する情報が日本語では見つからなかったのでメモを残しておきます。

Previous Rsync Exclude setting caused duplicate rsync on rsync-auto #4567

ここに同様の現象に遭遇している方々がいらっしゃいます。そしてthePanzさんが以下の解決策を提示しておられます。

vagrant halt
rm .vagrant/machines/default/virtualbox/synched_folders
vagrant up

同様の現象にあったらお試し下さい(Vagrantのバージョンアップも忘れずに!)

haraguchi

一つのVagrantfileで複数VMを管理する際のメモ

下記のようなVagrantfileで複数VMを管理している際に「vagrant halt」を行うと…

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
config.vm.define :first do |first|
first.vm.box = "centos6.5.3"
first.vm.network :forwarded_port, guest: 80, host: 8080
first.vm.network :private_network, ip: "192.168.33.10"
end

config.vm.define :second do |second|
second.vm.box = "centos6.5.3"
second.vm.network :forwarded_port, guest: 80, host: 8181
second.vm.network :private_network, ip: "192.168.33.11"
end
end

2つとも停止します。

~/w/vagrantTest ❯❯❯ vagrant halt
second: Attempting graceful shutdown of VM...
first: Attempting graceful shutdown of VM...

片方だけ停止したい場合には「vagrant halt first」のように引数にマシン名を指定すれば良いのですが
停止したくないマシンまで誤って停止させるのを避けたかったので、何か良い方法はないか調べました。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

if ARGV[1] == "first" # 追加
config.vm.define :first do |first|
first.vm.box = "centos6.5.3"
first.vm.network :forwarded_port, guest: 80, host: 8080
first.vm.network :private_network, ip: "192.168.33.10"
end
end # 追加
if ARGV[1] == "second" # 追加
config.vm.define :second do |second|
second.vm.box = "centos6.5.3"
second.vm.network :forwarded_port, guest: 80, host: 8181
second.vm.network :private_network, ip: "192.168.33.11"
end
end # 追加
end

このようにすると「vagrant halt」だけでは停止しなくなり、マシン名を指定することで停止出来るようになります。

murave

VMware Fusion が入っている Mac での 仮想ディスク(vmdk)縮小

放置していたら仮想マシンが肥大してディスクを超圧迫していました、夏。

そして、ディスクの残容量0と言われた立秋。

Vagrant で使用している Virtual Box の VM がいつの間にか60GBを超えており放置できなくなりました。

検索したところ Virtual Box のツールで .vmdk なファイルを .vdi に変換して縮小する素敵な記事が見つかりました。

Bureimono stdio.h: Vagrant とストレージ容量

でも考えたら、ボクのマシンには VMware Fusion が入っています。vmdkファイルを直接縮小できるよね、たぶん。前にやった気もするし。

ということで、調べて作業した際のメモです。 VMware Fusion は 5.0.5 です。

ゲストOSでゼロクリアを行います(root権限で作業)。

# dd if=/dev/zero of=zero bs=4k
# sync
# rm zero

vmdkファイルの縮小(defragment -> shrink)

$ /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -d target.vmdk
$ /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -k target.vmdk

60GB位あったvmdkファイルが10GB位になりました。

今回はディスクの残容量が少なくなりすぎていて vmware-vdiskmanager を動かすのに苦労しました。そんな状況になる前に対処するようにしないとですね。

murave

『ぺちぱな。∞(えいと)』で Vagrant、HHVM、Hackして来た

muraveです。ご無沙汰しております。

もんきー(さる) 2014年5月17日(土)、

ぺちぱな。∞(えいと)〜Hackするのに悪いヤツはいない。HackとCrackを間違えるのに碌なヤツはいない〜

に参加いたしました。

Vagrant環境から構築して、HHVM(HipHopVM)用にPackegeしたBoxファイルを配布、PHPとFacebookがOSSとしてリリースした新言語Hackの比較までやってしまおうという意欲的な勉強会でした。

環境構築でのひっかかり(原因は使用ポートの衝突、CPUの仮想化支援がONになっていなかった等)はありましたが全員完走でした!

この勉強会の資料がすばらしくて(もちろん資料だけではないですけど)、懇親会でも@hideAki76氏を褒めちぎっていたのですが、この資料が公開されましたよ!ということをみなさまにも強くお伝えしたい。

つたない内容だけど公開。gitbookが素晴らしすぎた。 | ぺちぱな。∞(えいと) http://t.co/Dl51gufblz— hideAki™ (@hideAki76) May 19, 2014

自習するにはHHVM用Boxの問題がありますが、HHVM用環境構築のプロビジョニングについても書いてあるのでどうになるんじゃないでしょうか。すばらしい。

HHVM、はやくdebian系じゃなくても気軽に動かせるようになるといいな。

aikawa

VirtualBoxのスナップショットを使おう

開発をしていると、インストール後に有る程度の設定をした状態で色々と試して、駄目だったらその時の状態に戻したい事が有ります。
VirtualBoxで、割と簡単に出来るので使い方を。

保存しておきたい状態にした仮想マシンを一度シャットダウンします。

対象となる仮想マシンを選んで、VirtualBoxメニューにあるスナップショットをクリック。

スナップショットの状態が表示されます。

左上にあるカメラアイコンをクリックしてスナップショットを作成。

名前と説明へ、状態や内容を書いてOKボタンを押します。

今回は名前を変えなかったので、スナップショット 1と表示されています。

色々と試した後、マシンを終了してスナップショットから戻したい場所を右クリックして、スナップショットに復元を選びます。

これで起動すれば、スナップショットを撮った状態まで戻っています。