- 投稿日:2019-12-15T22:29:40+09:00
MacにGoをインストールする
とりあえずGoを始めようとして、A Tour of Go をやってみました。
が、その事前準備のインストールで躓きました…。
これから同じような経験をする方がいらっしゃるのではないかと思い、備忘録も兼ねて投稿します。
よりよい方法やバグ等ございましたら、アドバイスいただけると光栄です。環境
- macOS
- Homebrew
- Go (v1.13.4)
やってみたこと
インストール
とりあえず、HomebrewでGoをインストールします。
$ brew install go確認
バージョン確認
インストールが完了したら、バージョンの確認をします。
$ go version go version go1.13.4 darwin/amd64
実行環境の確認
次に、公式のスタートガイド から、実行環境のテストを進めます。
# 実行環境のディレクトリを作成 $ mkdir -p ~/go/src/hello # 作成したディレクトリへ移動 $ cd ~/go/src/hello # テスト用のファイルを作成 $ touch hello.go # テスト用のファイルを編集 $ vi hello.go
hello.go
の中身は以下のように編集します。※もしVimコマンドの操作が分からないという方がいれば、下記のリンクを参照してください。
hello.gopackage main import "fmt" func main() { fmt.Printf("hello, world\n") }編集が完了したら、ビルドしてバイナリファイルを生成します。
$ go build hello.go:3:8: cannot find package "fmt" in any of: /Users/username/go/src/fmt (from $GOROOT) /usr/local/go/src/fmt (from $GOPATH) package hello imports runtime: cannot find package "runtime" in any of: /Users/username/go/src/runtime (from $GOROOT) /usr/local/go/src/runtime (from $GOPATH)...........( ̄ω ̄;)エートォ...
何か様子がおかしいぞ。
調べてみる
Homebrewでインストールした場合、
/usr/local/Cellar/go/
配下にバージョン毎にディレクトリが作成されるはずです。
そうすると、エラーの中にある/usr/local/go/src/fmt (from $GOPATH)
ってそもそも存在しないのでは?
となったので、その辺を調べてみます。$ cd /usr/local/go bash: cd: /usr/local/go: No such file or directoryやっぱりない!!こいつか!!!!
(゜∇゜)(。_。)(゜∇゜)(。_。)ウンウン♪
環境変数を確認
go env
でGo言語関連の環境変数を確認できるので、一応確認します。$ go env GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/Users/username/Library/Caches/go-build" GOENV="/Users/username/Library/Application Support/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GONOPROXY="" GONOSUMDB="" GOOS="darwin" GOPATH="/usr/local/go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/Users/username/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/Users/username/go/pkg/tool/darwin_amd64" GCCGO="gccgo" ...やはり、
GOPATH
が存在しないディレクトリを指定していますね。
この辺を変更すれば解決しそうです。修正する
環境変数の変更
下記コマンドで変更が必要な環境変数を追加します。
# 環境変数の追加 $ echo 'export GOPATH=$HOME/go' >> ~/.bash_profile $ echo 'export GOROOT=/usr/local/Cellar/go/1.13.4/libexec' >> ~/.bash_profile $ echo 'export GOTOOLDIR=/usr/local/Cellar/go/1.13.4/libexec/pkg/tool/darwin_amd64' >> ~/.bash_profile $ echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bash_profile # bash_profileを更新 $ source ~/.bash_profile変更の反映を確認
GOPATH
GOROOT
GOTOOLDIR
の3箇所が正常に修正されていることを確認します。$ go env GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/Users/username/Library/Caches/go-build" GOENV="/Users/username/Library/Application Support/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GONOPROXY="" GONOSUMDB="" GOOS="darwin" GOPATH="/Users/username/go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/usr/local/Cellar/go/1.13.4/libexec" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/Cellar/go/1.13.4/libexec/pkg/tool/darwin_amd64" GCCGO="gccgo" ...それぞれ、下記のように変更されていることを確認してください。
GOPATH="/Users/username/go"
GOROOT="/usr/local/Cellar/go/1.13.4/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.13.4/libexec/pkg/tool/darwin_amd64"再び実行してみる
修正できたので、再度ビルドしてみます。
# 作成したディレクトリへ移動 $ cd ~/go/src/hello # ビルドしてバイナリファイルを生成 $ go build特に問題がなければ、エラーが出ずに完了します。
念の為、問題なくビルドできたことを確認するために、バイナリファイルを実行します。$ ./hello hello, world
上記のように
hello, world
と表示されれば完了です。これで無事、Goのインストールと実行環境のテストまでが完了しました!
今後は、A Tour of Go を進めるもよし、プロジェクトを作成してガシガシ開発を進めるもよし、
素敵なGoライフを楽しんでください!!関連URL
- 投稿日:2019-12-15T22:14:55+09:00
macOS環境構築覚書
はじめに
Mac Book Proを拾ったので数値計算用途の環境構築を行います.
ほとんど個人的な防備録です.
詳しくはそれぞれのリンク先を参照してください.やることは
- diskの初期化
- editor (Visual Studio Code) のinstall
- 開発環境の設定
です (随時更新).
実行環境
macOS Mojave 10.14.3
diskの初期化
前の持ち主の設定が残っていたのでdiskを初期化してOSを入れ直します.
まず, OSを(再)起動して起動画面が出る前からcommand + rを押し続けOS utilityを起動します.
disk utilityを選択し, 更にdiskを初期化を選択します.
diskのformatが終わったらdisk utilityを終了しOSの再installを選択しOSを入れ直します.
OSが入ったらOS utilityを終了し, OSを起動します.http://vdeep.net/initialize-mac#Mac-2
最初の一歩(terminalの起動)
ほとんどの作業をterminal上で行います.
Desktop右上の虫眼鏡を押してterminal
で検索すると見つかります.editor (Visual Studio Code) のinstall
editorのVisual Studio Code (以下VScode) をinstallします.
公式ページ https://code.visualstudio.com/docs/?dv=osx から落とします.terminalからVScodeを起動するための設定を行います.
VScodeを起動し, F1でcommand paletteを起動します.
Shell Command: Install 'code' command in PATH command.
を選択します.
terminalを再起動すればcode
でVScodeが起動します.https://code.visualstudio.com/docs/setup/mac
開発環境の設定
Command Line Tools for Xcode (Clang, Git, Make)
C++ compilerなど開発に必要なものはだいたいこれで入ります12.
terminalでxcode-select --install
を実行します.https://qiita.com/motofumi/items/0f2e7ae1b852f118fe95
なお, これで
gcc
なども使えますが, 実際はClangが呼ばれるようです.https://qiita.com/kuboshu83/items/265264551193da079ad2
Homebrew (要Command Line Tools for Xcode)
package manager.
terminalで以下を実行します./usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
これだとFortranがcompileできない... ↩
ちなみにこれだけでC++ compiler, make, Gitが揃うのでITensorをinstallする環境が整います. https://itensor.org/docs.cgi?vers=cppv3&page=install ↩
- 投稿日:2019-12-15T22:14:55+09:00
macOS数値計算用環境構築覚書
はじめに
Mac Book Proを拾ったので数値計算用途の環境構築を行います.
ほとんど個人的な防備録です.
詳しくはそれぞれのリンク先を参照してください.やることは
- diskの初期化
- editor (Visual Studio Code) のinstall
- 開発環境の設定
- 日本語入力設定
です (随時更新).
実行環境
macOS Mojave 10.14.3
diskの初期化
前の持ち主の設定が残っていたのでdiskを初期化してOSを入れ直します.
まず, OSを(再)起動して起動画面が出る前からcommand + rを押し続けOS utilityを起動します.
disk utilityを選択し, 更にdiskを初期化を選択します.
diskのformatが終わったらdisk utilityを終了しOSの再installを選択しOSを入れ直します.
OSが入ったらOS utilityを終了し, OSを起動します.http://vdeep.net/initialize-mac#Mac-2
最初の一歩 (terminalの起動)
ほとんどの作業をterminal上で行います.
Desktop右上の虫眼鏡を押してterminal
で検索すると見つかります.editor (Visual Studio Code) のinstall
editorのVisual Studio Code (以下VScode) をinstallします.
公式ページ https://code.visualstudio.com/docs/?dv=osx から落とします.terminalからVScodeを起動するための設定を行います.
VScodeを起動し, F1でcommand paletteを起動します.
Shell Command: Install 'code' command in PATH command.
を選択します.
terminalを再起動すればcode
でVScodeが起動します.https://code.visualstudio.com/docs/setup/mac
開発環境の設定
Command Line Tools for Xcode (Clang, Git, Make)
C++ compilerなど開発に必要なものはだいたいこれで入ります12.
terminalで
xcode-select --install
を実行します.https://qiita.com/motofumi/items/0f2e7ae1b852f118fe95
なお, これで
gcc
なども使えますが, 実際はClangが呼ばれるようです.https://qiita.com/kuboshu83/items/265264551193da079ad2
Homebrew (要Command Line Tools for Xcode)
package manager.
terminalで以下を実行します./usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"CMake
Homebrewで入ります.
brew install cmake
Fortran (GCC)
Homebrewで入ります.
brew install gcc
日本語入力設定
入力sourceに日本語を追加します.
system PreferencesからKeyboardのInput Sourcesを選択します.
+を押して日本語を追加します.
必要であれば各種設定を行います.
例えば, Caps Lockにローマ字入力onに切り替えを割り当てることなどができます.https://support.apple.com/ja-jp/guide/japanese-input-method/jpim10267/6.2.1/mac/10.14
これだとFortranがcompileできない... ↩
ちなみにこれだけでC++ compiler, Make, Gitが揃うのでITensorをinstallする環境が整います. https://itensor.org/docs.cgi?vers=cppv3&page=install ↩
- 投稿日:2019-12-15T20:29:05+09:00
自作マイクロカーネルOS「Resea」をMac OSXで動かしてみる
Reseaとは何か、なぜ動かしてみるのか
Resea(りーせあ)とは
『CとRustで一から作るマイクロカーネルOS』(2019/12/13)という記事で知りました。これはResea という seiyanuta (Seiya Nuta) 氏が公開した教育・研究向けマイクロカーネル自作OSを紹介したものです。実際に、さくらインターネットのIaaS上で、Webサーバとして動作させるまでを達成しています。稼動中のサーバにアクセスするだけでも、ちょっとした感動があります。
筆者は、Podcast『Turing Complete FM』を聴いて以降、低レイヤに興味が出て、OS、カーネルをちゃんと理解したいという動機付けをしばらく持っていました。しかし、Linuxのカーネルを素で読み始めるのはハードルが高く感じていました。そんな所にReseaの公開を知り、マイクロカーネルというカーネル部分が軽量、かつ教育・研究用途に機能が絞り込まれているため全体像を掴みやすいのではないか、ということで動かしつつ、コードを追い始めてみることにしました。記事によると以下のボリュームだそうです。
行数は空行やコメント行を含めて,カーネルが約5000行(コア部分は3000行),そしてユーザランドが約4500行になりました。 Unix互換性を提供しないことで,MINIXよりシンプルかつコンパクトで読みやすい物ができたと思っています。
さて、Reseaは詳細にわたるドキュメントが準備されています(Resea Documentation)。本稿では、以下の章のチュートリアルに沿って、手元のMac OSX環境で動かしてみます。
- 3. Getting Started
- 5. Userland Programming
本稿では紹介しませんが、以下の章では、Reseaのアーキテクチャ、設計の考え方に触れることができます。
- 4. Design
- 5. Servers
- 7. Kernel Programming
- 8. Internals
マイクロカーネルとは
Wikipediaには、 "マイクロカーネル ...(中略) OSが担う各種機能のうち、必要最小限のみをカーネル空間に残し、残りをユーザーレベルに移すことで全体の設計が簡素化でき、結果的にカスタマイズ性が向上し、性能も向上できるというOSの設計手法" とあります。
さらにReseaの盛り上がりを受け、@nullpo_head氏が、『マイクロカーネルとL4について』(2019/12/15)を公開されました。氏は、カーネル部分を(Cではなく)Rustで実装するマイクロカーネル自作OSプロジェクトを進められています。マイクロカーネルをより良く知るのにおすすめです。
Mac OSX上で動かすとは
Reseaは、カーネルはC、ユーザランドプログラムはRustで書かれています。また、一部ユーティリティがPythonで書かれています。
まず、Mac OSX上にビルドのための環境を一式揃えます。ビルドが終わったら、QEMUというエミュレータ上で Reseaを起動します。QEMUが「仮想のコンピュータ」となり、その上でReseaを起動し、色々と実験をしてみることができます。
コンパイル、ビルドは、
make build
make run
コマンドで行います。そのコマンドで行われていることの詳細は、この後クローンするReseaリポジトリのMakefile
およびkernel/arch/x64/arch.mk
に定義されています。それぞれのファイルに、例えば
.PHONY: build
.PHONY: run
.PHONY: clean
などに続けて、make build
make run
make clean
などの振る舞いが定義されています。例えば、本稿中で
make run
として実行すると、QEMUqemu-system-x86_64
が立ち上がります。その仮想の64bit x86 CPU上でbuild/hdd.img
をハードディスクとして認識し、Reseaが起動します。本稿のゴールは一旦「動かす」ことなので、これ以上
Makefile
の構成詳細は記述しません。例えば、こちら( - 自動化のためのGNU Make入門講座 - Makefileの基本:ルール)で、基本を知ることができます。環境準備
リポジトリのclone
以下のReseaリポジトリをクローンします。
$ git clone https://github.com/seiyanuta/resea.git $ cd reseaプロジェクトは、以下のディレクトリから構成されています。
- docs: ドキュメント
- kernel: Cで実装されたカーネル部分
- libs/resea: Rustで実装されたユーザランド部分
- servers: Rustで実装されたサーバ群
- tools: Pythonツール群
- misc: その他
必要パッケージの導入
チュートリアルに沿って、パッケージを導入します。実行環境により要否が異なります。
$ brew install llvm python3 qemu bochs i386-elf-grub xorriso mtools
- llvm: LLVMコンパイラプラットフォーム
- python3: Python3系
- qemu: プロセッサエミュレータ
- bochs: PC/AT互換機(x86系)エミュレータ
- i386-elf-grub: i386用の高機能ブートローダ
- xorriso: ISO9660ファイルシステムの操作ツール
- mtools: MSDOSファイルの操作ツール
筆者環境では以下を考慮して、一部を抜きました。
$ brew install llvm qemu i386-elf-grub xorriso mtools
pyenv
でPython環境を作っており、Python3系はインストール済のため、今回はスキップ一旦動かすだけならエミュレータに
qemu
を使えば良いので、bochs
は入れなくても構わない
qemu
はすでにインストールしたことがあったため、エラー。brew upgrade qemu
で、最新版をインストールPythonパッケージのインストール
$ pip install -r tools/requirements.txt現Python3環境に応じて、
pip
またはpip3
コマンドを使います。Rust Nightlyと必要パッケージのインストール
rustup
を使います。rustup.rs - The Rust toolchain installerで最新の実行コマンドを確認します。$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh上記を実行すると、以下のプロンプトが表示されます。
... Current installation options: default host triple: x86_64-apple-darwin default toolchain: stable profile: default modify PATH variable: yes 1) Proceed with installation (default) 2) Customize installation 3) Cancel installation >
1
と答え、先に進みます。... stable installed - rustc 1.39.0 (4560ea788 2019-11-04) Rust is installed now. Great! To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH environment variable. Next time you log in this will be done automatically. To configure your current shell run source $HOME/.cargo/env上記のように、インストールが完了しました。パスを通しておきます。
$ source $HOME/.cargo/envデフォルトでは安定版が導入されています。
$ rustc --version rustc 1.39.0 (4560ea788 2019-11-04)Nightlyバージョンを導入し、切り替えます。
$ rustup default nightly
以下のようにインストールが完了します。
info: syncing channel updates for 'nightly-x86_64-apple-darwin' info: latest update on 2019-12-15, rust version 1.41.0-nightly (c8ea4ace9 2019-12-14) ... nightly-x86_64-apple-darwin installed - rustc 1.41.0-nightly (c8ea4ace9 2019-12-14)念のためバージョンを確認します。
$ rustc --version rustc 1.41.0-nightly (c8ea4ace9 2019-12-14)必要に応じて
rustup default stable
コマンドで、安定版に戻すことができます。必要パッケージをインストールします。
$ rustup component add rust-src $ cargo install xargo
rustup
は、Rust言語のインストーラです。cargo
は、Rustのパッケージの取得、ビルドを行うためのツールです。... Finished release [optimized] target(s) in 54.06s Installing /<user directory>/.cargo/bin/xargo Installed package `xargo v0.3.18` (executable `xargo`)上記のように表示され、インストールが正常に終了しました。
Reseaのビルド
$ make build # Build a kernel executable. $ make iso # Build an ISO image.(参考) ビルド時に見られるエラー等
- 安定版のRustの場合、
make build
でエラーが出ます。... XARGO servers/shell WARNING: the sysroot can't be built for the Stable channel. Switch to nightly. error: failed to run `rustc` to learn about target-specific information Caused by: process didn't exit successfully: `rustc - --crate-name ___ --print=file-names -C lto -Z emit-stack-sizes -Z external-macro-backtrace --target user_x64 --crate-type bin --crate-type rlib --crate-type dylib --crate-type cdylib --crate-type staticlib --crate-type proc-macro --print=sysroot --print=cfg` (exit code: 1) --- stderr error: the option `Z` is only accepted on the nightly compiler make: *** [build/servers/shell.elf] Error 101Nightly Rustが入っていることを確認します。
make iso
でwarning
が出ました$ make iso GRUB build/resea.iso i386-elf-grub-mkrescue: warning: cannot open directory `/usr/local/Cellar/i386-elf-grub/2.04/share/locale': No such file or directory. GNU xorriso 1.5.2 : RockRidge filesystem manipulator, libburnia project.Reseaの実行
以下を実行すると、QEMU上で動作しました。
$ make run GUI=1 # Run on QEMU.
make run
コマンドを実行したターミナル上では、キーボード割り込みなどのログが観察できます。QEMU自体が終了できない状態となったので、アクティビティモニタからプロセスを強制終了しました。
ユーザランドプログラムを書いてみる
Hello, World! - Resea Documentation に沿って進めます。
$ cp -r servers/hello servers/rand $ cd servers/rand $ ls Cargo.toml Xargo.toml lib.rs main.rsファイルを編集して行きます。
Cargo.tomlの編集
servers/rand/Cargo.toml
を編集します。$ code Cargo.toml # VSCodeの場合編集前
[package] name = "hello" version = "0.0.0" authors = ["Seiya Nuta <nuta@seiya.me>"] edition = "2018" [lib] crate-type = ["staticlib"] path = "lib.rs" [dependencies] resea = { path = "../../libs/resea" }編集後
[package] name = "rand" # Update here! version = "0.0.0" authors = ["Your Name <yourname@example.com>"] # and here! edition = "2018" [lib] crate-type = ["staticlib"] path = "lib.rs" [dependencies] resea = { path = "../../libs/resea" }main.rsの編集
servers/rand/main.rs
を編集します。$ code main.rs # VSCodeの場合編集前
#[no_mangle] pub fn main() { info!("Hello World!"); }編集後
#[no_mangle] pub fn main() { info!("Hello World from rand server!"); }.build.mkの追記
reasea/
直下の.build.mk
に、環境変数STARTUPS
を足します。$ cd ../../ $ echo "STARTUPS += rand" >> .build.mkQEMUで実行する
$ make run
例えば、Cargo.tomlファイルの編集を忘れると、以下のようなエラーが出ます。
error: two packages named `hello` in this workspace: - /Users/tomo.masuda/code/resea/servers/hello/Cargo.toml - /Users/tomo.masuda/code/resea/servers/rand/Cargo.toml make: *** [build/servers/rand.elf] Error 101以下の通り、起動に成功しました。
... [memmgr] entering mainloop... [kernel] sys_open: created @memmgr.5 [kernel] sys_trasnfer: transfering @memmgr.5 -> @memmgr.2 [kernel] send: @memmgr.1 -> @kernel.2 => @kernel.1 (header=0000000005011008) [kernel] recv: @kernel.1 <- @2 (header=0000000005011008, notification=0000000000000000) [kernel] timer_create: id=2 initial=0, interval=0 [kernel] send: @kernel.2 -> @memmgr.1 => @memmgr.1 (header=0000000005810004) [kernel] recv: @memmgr.1 <- @1 (header=0000000005810004, notification=0000000000000000) [rand] Hello World from rand server! [kernel] WARN: Exception #6 [kernel] WARN: RIP = 0000000001000022 CS = 000000000000002b RFL = 0000000000000202 [kernel] WARN: SS = 0000000000000023 RSP = 0000000003000000 RBP = 0000000000000000 [kernel] WARN: RAX = 0000000000000000 RBX = 0000000000000000 RCX = 0000000001013f40 [kernel] WARN: RDX = 0000000000000001 RSI = 0000000002fffd68 RDI = 0000000002fffdc8 [kernel] WARN: R8 = 0000000000000001 R9 = 0000000000000000 R10 = 0000000000000000 [kernel] WARN: R11 = 0000000000000206 R12 = 0000000000000000 R13 = 0000000000000000 [kernel] WARN: R14 = 0000000000000000 R15 = 0000000000000000 ERR = 0000000000000000 [kernel] WARN: NYI: ignoring thread_kill_current (#rand.8)アクティビティモニタからプロセスを強制終了します。
make: *** [run] Killed: 9 $先に進めたら、追記するかもしれません。
- 投稿日:2019-12-15T20:29:05+09:00
自作マイクロカーネルOS「Resea」をMac OS X上で動かしてみる
Reseaとは何か、なぜ動かしてみるのか
Resea(りーせあ)とは
『CとRustで一から作るマイクロカーネルOS』(2019/12/13)という記事で知りました。これはResea という seiyanuta (Seiya Nuta) 氏が公開した教育・研究向けマイクロカーネル自作OSを紹介したものです。実際に、さくらインターネットのIaaS上で、Webサーバとして動作させるまでを達成しています。稼動中のサーバにアクセスするだけでも、ちょっとした感動があります。
筆者は、Podcast『Turing Complete FM』を聴いて以降、低レイヤに興味が出て、OS、カーネルをちゃんと理解したいという動機付けをしばらく持っていました。しかし、Linuxのカーネルを素で読み始めるのはハードルが高く感じていました。そんな所にReseaの公開を知り、マイクロカーネルというカーネル部分が軽量、かつ教育・研究用途に機能が絞り込まれているため全体像を掴みやすいのではないか、ということで動かしつつ、コードを追い始めてみることにしました。記事によると以下のボリュームだそうです。
行数は空行やコメント行を含めて,カーネルが約5000行(コア部分は3000行),そしてユーザランドが約4500行になりました。 Unix互換性を提供しないことで,MINIXよりシンプルかつコンパクトで読みやすい物ができたと思っています。
さて、Reseaは詳細にわたるドキュメントが準備されています(Resea Documentation)。本稿では、以下の章のチュートリアルに沿って、手元のMac OSX環境で動かしてみます。
- 3. Getting Started
- 5. Userland Programming
本稿では紹介しませんが、以下の章では、Reseaのアーキテクチャ、設計の考え方に触れることができます。
- 4. Design
- 5. Servers
- 7. Kernel Programming
- 8. Internals
マイクロカーネルとは
Wikipediaには、 "マイクロカーネル ...(中略) OSが担う各種機能のうち、必要最小限のみをカーネル空間に残し、残りをユーザーレベルに移すことで全体の設計が簡素化でき、結果的にカスタマイズ性が向上し、性能も向上できるというOSの設計手法" とあります。
さらにReseaの盛り上がりを受け、@nullpo_head氏が、『マイクロカーネルとL4について』(2019/12/15)を公開されました。氏は、カーネル部分を(Cではなく)Rustで実装するマイクロカーネル自作OSプロジェクトを進められています。マイクロカーネルをより良く知るのにおすすめです。
Mac OS X上で動かすとは
Reseaは、カーネルはC、ユーザランドプログラムはRustで書かれています。また、一部ユーティリティがPythonで書かれています。
まず、Mac OSX上にビルドのための環境を一式揃えます。ビルドが終わったら、QEMUというエミュレータ上で Reseaを起動します。QEMUが「仮想のコンピュータ」となり、その上でReseaを起動し、色々と実験をしてみることができます。
コンパイル、ビルドは、
make build
make run
コマンドで行います。そのコマンドで行われていることの詳細は、この後クローンするReseaリポジトリのMakefile
およびkernel/arch/x64/arch.mk
に定義されています。それぞれのファイルに、例えば
.PHONY: build
.PHONY: run
.PHONY: clean
などに続けて、make build
make run
make clean
などの振る舞いが定義されています。例えば、本稿中で
make run
として実行すると、QEMUqemu-system-x86_64
が立ち上がります。その仮想の64bit x86 CPU上でbuild/hdd.img
をハードディスクとして認識し、Reseaが起動します。本稿のゴールは一旦「動かす」ことなので、これ以上
Makefile
の構成詳細は記述しません。例えば、こちら( - 自動化のためのGNU Make入門講座 - Makefileの基本:ルール)で、基本を知ることができます。環境準備
リポジトリのclone
以下のReseaリポジトリをクローンします。
$ git clone https://github.com/seiyanuta/resea.git $ cd reseaプロジェクトは、以下のディレクトリから構成されています。
- docs: ドキュメント
- kernel: Cで実装されたカーネル部分
- libs/resea: Rustで実装されたユーザランド部分
- servers: Rustで実装されたサーバ群
- tools: Pythonツール群
- misc: その他
必要パッケージの導入
チュートリアルに沿って、パッケージを導入します。実行環境により要否が異なります。
$ brew install llvm python3 qemu bochs i386-elf-grub xorriso mtools
- llvm: LLVMコンパイラプラットフォーム
- python3: Python3系
- qemu: プロセッサエミュレータ
- bochs: PC/AT互換機(x86系)エミュレータ
- i386-elf-grub: i386用の高機能ブートローダ
- xorriso: ISO9660ファイルシステムの操作ツール
- mtools: MSDOSファイルの操作ツール
筆者環境では以下を考慮して、一部を抜きました。
$ brew install llvm qemu i386-elf-grub xorriso mtools
pyenv
でPython環境を作っており、Python3系はインストール済のため、今回はスキップ一旦動かすだけならエミュレータに
qemu
を使えば良いので、bochs
は入れなくても構わない
qemu
はすでにインストールしたことがあったため、エラー。brew upgrade qemu
で、最新版をインストールPythonパッケージのインストール
$ pip install -r tools/requirements.txt現Python3環境に応じて、
pip
またはpip3
コマンドを使います。Rust Nightlyと必要パッケージのインストール
rustup
を使います。rustup.rs - The Rust toolchain installerで最新の実行コマンドを確認します。$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh上記を実行すると、以下のプロンプトが表示されます。
... Current installation options: default host triple: x86_64-apple-darwin default toolchain: stable profile: default modify PATH variable: yes 1) Proceed with installation (default) 2) Customize installation 3) Cancel installation >
1
と答え、先に進みます。... stable installed - rustc 1.39.0 (4560ea788 2019-11-04) Rust is installed now. Great! To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH environment variable. Next time you log in this will be done automatically. To configure your current shell run source $HOME/.cargo/env上記のように、インストールが完了しました。パスを通しておきます。
$ source $HOME/.cargo/envデフォルトでは安定版が導入されています。
$ rustc --version rustc 1.39.0 (4560ea788 2019-11-04)Nightlyバージョンを導入し、切り替えます。
$ rustup default nightly
以下のようにインストールが完了します。
info: syncing channel updates for 'nightly-x86_64-apple-darwin' info: latest update on 2019-12-15, rust version 1.41.0-nightly (c8ea4ace9 2019-12-14) ... nightly-x86_64-apple-darwin installed - rustc 1.41.0-nightly (c8ea4ace9 2019-12-14)念のためバージョンを確認します。
$ rustc --version rustc 1.41.0-nightly (c8ea4ace9 2019-12-14)必要に応じて
rustup default stable
コマンドで、安定版に戻すことができます。必要パッケージをインストールします。
$ rustup component add rust-src $ cargo install xargo
rustup
は、Rust言語のインストーラです。cargo
は、Rustのパッケージの取得、ビルドを行うためのツールです。... Finished release [optimized] target(s) in 54.06s Installing /<user directory>/.cargo/bin/xargo Installed package `xargo v0.3.18` (executable `xargo`)上記のように表示され、インストールが正常に終了しました。
Reseaのビルド
$ make build # Build a kernel executable. $ make iso # Build an ISO image.(参考) ビルド時に見られるエラー等
- 安定版のRustの場合、
make build
でエラーが出ます。... XARGO servers/shell WARNING: the sysroot can't be built for the Stable channel. Switch to nightly. error: failed to run `rustc` to learn about target-specific information Caused by: process didn't exit successfully: `rustc - --crate-name ___ --print=file-names -C lto -Z emit-stack-sizes -Z external-macro-backtrace --target user_x64 --crate-type bin --crate-type rlib --crate-type dylib --crate-type cdylib --crate-type staticlib --crate-type proc-macro --print=sysroot --print=cfg` (exit code: 1) --- stderr error: the option `Z` is only accepted on the nightly compiler make: *** [build/servers/shell.elf] Error 101Nightly Rustが入っていることを確認します。
make iso
でwarning
が出ました$ make iso GRUB build/resea.iso i386-elf-grub-mkrescue: warning: cannot open directory `/usr/local/Cellar/i386-elf-grub/2.04/share/locale': No such file or directory. GNU xorriso 1.5.2 : RockRidge filesystem manipulator, libburnia project.Reseaの実行
以下を実行すると、QEMU上で動作しました。
$ make run GUI=1 # Run on QEMU.
make run
コマンドを実行したターミナル上では、キーボード割り込みなどのログが観察できます。QEMU自体が終了できない状態となったので、アクティビティモニタからプロセスを強制終了しました。
ユーザランドプログラムを書いてみる
Hello, World! - Resea Documentation に沿って進めます。
$ cp -r servers/hello servers/rand $ cd servers/rand $ ls Cargo.toml Xargo.toml lib.rs main.rsファイルを編集して行きます。
Cargo.tomlの編集
servers/rand/Cargo.toml
を編集します。$ code Cargo.toml # VSCodeの場合編集前
[package] name = "hello" version = "0.0.0" authors = ["Seiya Nuta <nuta@seiya.me>"] edition = "2018" [lib] crate-type = ["staticlib"] path = "lib.rs" [dependencies] resea = { path = "../../libs/resea" }編集後
[package] name = "rand" # Update here! version = "0.0.0" authors = ["Your Name <yourname@example.com>"] # and here! edition = "2018" [lib] crate-type = ["staticlib"] path = "lib.rs" [dependencies] resea = { path = "../../libs/resea" }main.rsの編集
servers/rand/main.rs
を編集します。$ code main.rs # VSCodeの場合編集前
#[no_mangle] pub fn main() { info!("Hello World!"); }編集後
#[no_mangle] pub fn main() { info!("Hello World from rand server!"); }.build.mkの追記
reasea/
直下の.build.mk
に、環境変数STARTUPS
を足します。$ cd ../../ $ echo "STARTUPS += rand" >> .build.mkQEMUで実行する
$ make run
例えば、Cargo.tomlファイルの編集を忘れると、以下のようなエラーが出ます。
error: two packages named `hello` in this workspace: - /Users/tomo.masuda/code/resea/servers/hello/Cargo.toml - /Users/tomo.masuda/code/resea/servers/rand/Cargo.toml make: *** [build/servers/rand.elf] Error 101以下の通り、起動に成功しました。
... [memmgr] entering mainloop... [kernel] sys_open: created @memmgr.5 [kernel] sys_trasnfer: transfering @memmgr.5 -> @memmgr.2 [kernel] send: @memmgr.1 -> @kernel.2 => @kernel.1 (header=0000000005011008) [kernel] recv: @kernel.1 <- @2 (header=0000000005011008, notification=0000000000000000) [kernel] timer_create: id=2 initial=0, interval=0 [kernel] send: @kernel.2 -> @memmgr.1 => @memmgr.1 (header=0000000005810004) [kernel] recv: @memmgr.1 <- @1 (header=0000000005810004, notification=0000000000000000) [rand] Hello World from rand server! [kernel] WARN: Exception #6 [kernel] WARN: RIP = 0000000001000022 CS = 000000000000002b RFL = 0000000000000202 [kernel] WARN: SS = 0000000000000023 RSP = 0000000003000000 RBP = 0000000000000000 [kernel] WARN: RAX = 0000000000000000 RBX = 0000000000000000 RCX = 0000000001013f40 [kernel] WARN: RDX = 0000000000000001 RSI = 0000000002fffd68 RDI = 0000000002fffdc8 [kernel] WARN: R8 = 0000000000000001 R9 = 0000000000000000 R10 = 0000000000000000 [kernel] WARN: R11 = 0000000000000206 R12 = 0000000000000000 R13 = 0000000000000000 [kernel] WARN: R14 = 0000000000000000 R15 = 0000000000000000 ERR = 0000000000000000 [kernel] WARN: NYI: ignoring thread_kill_current (#rand.8)アクティビティモニタからプロセスを強制終了します。
make: *** [run] Killed: 9 $先に進めたら、追記するかもしれません。
- 投稿日:2019-12-15T19:08:32+09:00
あれ?.bash_profileや.bashrcが効いてないな?って思った時に読む記事
Macのバージョンアップに伴い、bashからzsh切り替わるとターミナルの$が、%になるんやけどここで気づいて欲しいのは僕らの「~/.bash_profile」はどうなったんやということ
bashからzshに移行メモにあるようにシンプルにとりあえず丸コピーでいいわっていう人はこれbash$ cat .bash_profile >> .zprofileなんやったら。あの上書きされると困る人もいるので一応追記コマンドにしてます
bash$ cat .bashrc >> .zshrc余談
あと余談なんやけどpyenvを入れた後に上記作業もやってると色々面倒で以下のようなことが起きてた
python2>3自動切り替えされんなんや分からんとりま「pyenv init」やzsh~ % pyenv init # Load pyenv automatically by appending # the following to ~/.zshrc: eval "$(pyenv init -)"親切に「~/.zshrcに追加しろ!」って教えてくれるんですね。
なので、cat使って一行で追加するとecho "eval \"\$(pyenv init -)\"" >> .zshrc前提環境:zsh
蛇足
あれお前profileに追記してないやんけという人はこちら
本当に正しい .bashrc と .bash_profile の使ひ分けいまさらですがzshって2013年には切り替えよっていわれてたんですね
ヾ(o゚ω゚o)ノ゙bashからzshに移行して2014年を迎えよう! ref:
https://gist.github.com/harapeko/8045912
- 投稿日:2019-12-15T17:56:25+09:00
MediaPipe の Hand Tracking を mac で動かす (動いた)
すでにやっている人がたくさんいるけど、復習ということで。
環境
MacBookPro + catalina 10.15.2 + Xcode 11.3 (11C29)
準備
先に brew のインストールが必要。bazel のインストールで jdk8 を要求されるかもしれない(下のコマンドには含む)。 bazel を普通に brew install bazel すると 1.2.1 とかインストールされるけど、bazel のバージョンが 1.1.0 以降だとダメぽいので、公式の通りにする。これ後で何か弊害でそう。
$ git clone https://github.com/google/mediapipe.git $ brew cask install homebrew/cask-versions/adoptopenjdk8 $ brew install https://raw.githubusercontent.com/bazelbuild/homebrew-tap/f8a0fa981bcb1784a0d0823e14867b844e94fb3d/Formula/bazel.rb $ brew link bazel $ brew install opencv@3xcode 関係で何かエラーが出たら、以下をためしてみる (自己責任で!)。
$ sudo xcodebuild -license accept $ sudo xcode-select -r $ sudo xcode-select -pHellp World のビルド
$ export GLOG_logtostderr=1 $ bazel run --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hello_world:hello_worldHello World が 10 回表示されたら OK。
Hand Tracking のビルトと実行
https://github.com/google/mediapipe/blob/master/mediapipe/examples/desktop/README.md
上記 URL には次のコマンドでビルドでいきるとあるけど、うちの環境では six module がないといわれて途中で止まった。$ bazel build -c opt mediapipe/examples/desktop/hand_tracking:hand_tracking_cpu --define MEDIAPIPE_DISABLE_GPU=1six を pip3 でインストールしたらいけた。
$ pip3 install sixビルドを通ったら下記で実行できる。
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_cpu --calculator_graph_config_file=mediapipe/graphs/hand_tracking/hand_tracking_desktop_live.pbtxt5fps くらいは出てる気がする。
Multiple Hand Tracking を試す
あっさり動いた。
$ bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 \ mediapipe/examples/desktop/multi_hand_tracking:multi_hand_tracking_cpu $ GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/multi_hand_tracking/multi_hand_tracking_cpu \ --calculator_graph_config_file=mediapipe/graphs/hand_tracking/multi_hand_tracking_desktop_live.pbtxt
- 投稿日:2019-12-15T17:56:25+09:00
MediaPipe の Hand Tracking を mac で動かす
すでにやっている人がたくさんいるけど、復習ということで。
環境
MacBookPro + catalina 10.15.2 + Xcode 11.3 (11C29)
準備
先に brew のインストールが必要。bazel のインストールで jdk8 を要求されるかもしれない(下のコマンドには含む)。 bazel を普通に brew install bazel すると 1.2.1 とかインストールされるけど、bazel のバージョンが 1.1.0 以降だとダメぽいので、公式の通りにする。これ後で何か弊害でそう。
$ git clone https://github.com/google/mediapipe.git $ brew cask install homebrew/cask-versions/adoptopenjdk8 $ brew install https://raw.githubusercontent.com/bazelbuild/homebrew-tap/f8a0fa981bcb1784a0d0823e14867b844e94fb3d/Formula/bazel.rb $ brew link bazel $ brew install opencv@3xcode 関係で何かエラーが出たら、以下をためしてみる (自己責任で!)。
$ sudo xcodebuild -license accept $ sudo xcode-select -r $ sudo xcode-select -pHellp World のビルド
$ export GLOG_logtostderr=1 $ bazel run --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hello_world:hello_worldHello World が 10 回表示されたら OK。
Hand Tracking のビルトと実行
https://github.com/google/mediapipe/blob/master/mediapipe/examples/desktop/README.md
上記 URL には次のコマンドでビルドできると書かれているけど、うちの環境では six module がないといわれて途中で止まった。$ bazel build -c opt mediapipe/examples/desktop/hand_tracking:hand_tracking_cpu --define MEDIAPIPE_DISABLE_GPU=1six を pip3 でインストールしたらいけた。
$ pip3 install sixビルドを通ったら下記で実行できる。
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_cpu --calculator_graph_config_file=mediapipe/graphs/hand_tracking/hand_tracking_desktop_live.pbtxt5fps くらいは出てる気がする。
Multiple Hand Tracking を試す
あっさり動いた。
$ bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 \ mediapipe/examples/desktop/multi_hand_tracking:multi_hand_tracking_cpu $ GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/multi_hand_tracking/multi_hand_tracking_cpu \ --calculator_graph_config_file=mediapipe/graphs/hand_tracking/multi_hand_tracking_desktop_live.pbtxtlandmark データの検証
手と指の位置のデータ (landmark) を取得して、表示させてみたのが次の図。手ひとつについて21点の landmark を認識して、それぞれ0番から20番まで手の各ポイントに割り当てられているようだ。番号は固定で、手の各位置と対応している。x,y,z の座標データが含まれているが、z は常に 0 になっている、つまり、奥行は取れていない。
データもシンプルで使い勝手もいいので、いろいろできそうな気がしてきた。すごいよね google の人たち。
- 投稿日:2019-12-15T16:26:21+09:00
いつのまにかzshでもないbashでもないshになってた話
こないだ何も知らずにchshした後の続きで
しらーんまにKPバッシュっぽくなってて、コナンくんよろしく「あれれーおかしーぞー?」って思って、
↑試行錯誤してたあとによーくターミナルみたら....
おまえ"sh(シェル)"やんwww結局前と全く同じコマンドを打ってからウィンドウ開き直したら直りました
terminalchsh -s /bin/zsh
完
- 投稿日:2019-12-15T13:44:20+09:00
MacBook Pro でOpenPose その2
MacBook Pro でOpenPoseでMacBook ProでもOpenPoseが動作することがわかったのですが「GPUで動かせないかな?」と思い調べていたところPlaidMLというものをあるということで、下記を読んでみたところ、自分でもなんとかできそうかなということで試してみました。
環境
- MacBook Pro 15in 2018 2.2 GHz Core i7 32GB Memory
- Mojave 10.14.6
- python 3.7.5
- homebrew でpythonとvirtualenv、wgetをインストール
設定手順
準備
準備としては、Pythonの仮想環境を設定します。前回の環境を使っても良かったのですが、何か競合等がある場合を考えて作り直しました。
仮想環境を作成 $ virtualenv mppose-plaidml 仮想環境へ入る $ source mppose-plaidml/bin/activatePlaidML設定、動作確認
仮想環境へ入った後、PlaidMLパッケージのインストールと使用するデバイスの設定を行います。自分のMacBook ProにはRadeon Pro 555xが入っていたのでそちらを選択しました。
PlaidMLとベンチマークのパッケージをインストール $ pip install plaidml-keras plaidbench PlaidMLで使用するデバイスを設定 $ plaidml-setup ※デバイスの設定以外は y で ・・・ < 中略 > ・・・ デバイスの設定箇所では一覧に表示されたデバイスの番号を選択してEnter Multiple devices detected (You can override by setting PLAIDML_DEVICE_IDS). Please choose a default device: 1 : llvm_cpu.0 2 : opencl_intel_uhd_graphics_630.0 3 : opencl_cpu.0 4 : opencl_amd_radeon_pro_555x_compute_engine.0 5 : metal_intel(r)_uhd_graphics_630.0 6 : metal_amd_radeon_pro_555x.0 Default device? (1,2,3,4,5,6)[1]:6 ・・・ < 中略 > ・・・パッケージのインストールとデバイスの設定が終わったら、動作確認を行います
ベンチマークで動作を確認 $ plaidbench keras mobilenet Running 1024 examples with mobilenet, batch size 1, on backend plaid INFO:plaidml:Opening device "metal_amd_radeon_pro_555x.0" ※この表示が出ていれば選択したデバイスで動作している Compiling network... Warming up... Running... Example finished, elapsed: 0.545s (compile), 14.425s (execution) ----------------------------------------------------------------------------------------- Network Name Inference Latency Time / FPS ----------------------------------------------------------------------------------------- mobilenet 14.09 ms 0.00 ms / 1000000000.00 fps Correctness: PASS, max_error: 1.675534622336272e-05, max_abs_error: 7.674098014831543e-07, fail_ratio: 0.0動作していることは分かったのですが「CPUを使った場合と比べて早いのか遅いのか」が分からずどうすればいいのかなと思ったのですが、コマンドの前に
PLAIDML_DEVICE_IDS="デバイス名"
の記述をすればそのデバイスで動作するという情報があり、試してみました。CPUを実行デバイスに設定してベンチマーク $ PLAIDML_DEVICE_IDS="opencl_cpu.0" plaidbench keras mobilenet Running 1024 examples with mobilenet, batch size 1, on backend plaid INFO:plaidml:Opening device "opencl_cpu.0" Compiling network... Warming up... Running... Example finished, elapsed: 3.034s (compile), 141.360s (execution) ----------------------------------------------------------------------------------------- Network Name Inference Latency Time / FPS ----------------------------------------------------------------------------------------- mobilenet 138.05 ms 134.30 ms / 7.45 fps Correctness: FAIL, max_error: 0.005546755623072386, max_abs_error: 0.0003522038459777832, fail_ratio: 0.076結果としてはRadeon Pro 555xでCPUの10倍ほどのパフォーマンスが出るようなので、効果は出ているのかと思います。
あと、アクティビティモニターの
ウィンドウ -> GPUの履歴
を選択するとGPUデバイス一覧と動作状況がリアルタイムで参照できるので、そちらを使って動作状況を見るという方法もあります。OpenPose設定
では、OpenPoseを設定していきます。手順としては大方は前回と同じですが、PlaidMLを使うために手順を一部変える必要があります。
OpenPoseを動作させるためのパッケージをインストールします。 $ pip install ipython configobj pillow opencv-python Kerasバックエンド版のOpenPoseをGithubよりクローンします。 $ git clone https://github.com/michalfaber/keras_Realtime_Multi-Person_Pose_Estimation.git ディレクトリへ移動します。 $ cd keras_Realtime_Multi-Person_Pose_Estimation/ リポジトリ内のmodelディレクトリに移動してcaffeとkerasの学習モデルをダウンロードします。 $ cd model $ sh get_caffe_model.sh $ sh get_keras_model.sh モデル処理のモジュールにPlaidMLを使用するための修正を加えます。 $ vi cmu_model.py ※ ソースの文頭に下記の2行を追加するだけでいいです。 import plaidml.keras plaidml.keras.install_backend() 空のinit.pyを作成します。(私の環境では、これを作成しないと後のpythonスクリプトを動作させる際にmodelディレクトリ配下のpythonモジュールが読みこめず、エラーになりました) $ touch __init.py__ リポジトリのトップへ戻り、caffeのnumpy学習モデルレイヤをダンプします。 $ cd ../ $ docker run -v `pwd`:/workspace -it bvlc/caffe:cpu python dump_caffe_layers.py caffeの学習モデルレイヤをkeras用に変換します。 $ python caffe_to_keras.py以上で設定は完了です。
動作は成功、しかし・・・・
ということで、前回と同じくサンプル写真とカメラで動作確認をしてみたのですが・・・
サンプル写真の姿勢検出をしてみる。 $ python demo_image.py --image sample_images/ski.jpg カメラを起動して姿勢検出をしてみる。 $ python demo_camera.pyカメラの姿勢検出で、大体processing time 0.21sec程度という結果となり、CPUでの動作結果(processing time 0.07sec程度)よりもパフォーマンスが落ちてしまいました。
「どうしてだろう?」と調べてみたところ、PlaidMLのissueにこんなやりとりが上がっていました。
Plaidml backend slower than TF backend #530考えられる可能性としては「現在のPlaidMLが対応している計算モデルが少ない」ということなのかもしれません、今回使用したOpenPoseの計算モデル(CMU?)には対応できていないということなのかと思います。
通常であればここで諦めて「GPUを使った環境を用意する」のが正当かと思います。
今回は「現状自宅にある環境で、どこまでできるか?」というところなので、一応ここまでできたので、あとは
- PlaidMLのバージョンアップ後を期待する(1年以上更新が止まっているようなので期待薄?)
- PlaidMLが対応している計算モデルで動くように作り変えてみる
といったところで、色々考えつつやっていこうかと思います。
- 投稿日:2019-12-15T11:00:40+09:00
macOS Catalinaへアップグレードしたら「空き容量が足りません」エラーが出たときの対処方法
macOSをMojaveからCatalinaへアップグレードしたら
コンピュータにmacOSをインストールできませんでした
Macintosh HDにはインストールに必要な空き領域がありません
と出てインストールが途中で止まってしまった。
画面に再起動ボタンが出ているので、これをクリックして再起動しても、
再び同じメッセージでOS起動できない状態。。。MACサポートへ問合せしてみたら、以下の手順を教えてくれ、その手順でやったら
復活できたので、その手順を共有。準備
データが入っていない空の外付けHDDを用意(USBタイプ)
外付けHDDへCatalinaインストール
- macを起動時に Option + Command + R でmacOS復元モードで起動
- ディスクユーティリティを選択
- guidパーティションテーブル方式を選択できるようにするために、以下のようにすべてのデバイスを表示させる
![]()
- 外付けHDDを挿す
- ディスクユーティリティ画面の左ペインに外付けHDDが表示されるのを確認し、それを選択
- 「消去」ボタンをクリックし、以下を選択
- フォーマット:macos拡張ジャーナリング
- 方式:GUIDパーティションマップ
- 「消去」ボタンをクリック
- macOS復元画面に戻り、「macOSを再インストール」を選択
- インストール先のディスクに、先ほどフォーマットした外付けHDDを選択
- Catalinaが外付けHDDにインストールされるので、完了するまで待つ
データの退避と、不要データの削除
- osインストールが完了したら、Finderをクリックし、左ペインにMacintoshHDが見えるか確認
- MacintoshHDが見えたら元のデータが取り出せる
- MacintoshHD のDataに元のデータが入っているので、MacintoshHDを選択してもそのままだと見えない。Finderの検索窓に”home”と打つとData内のファイルが見えるので、そのファイルを右クリックし、置き場所のフォルダを表示させる。
- 退避しておきたい対象のフォルダ or ファイルをデスクトップにDrag & Dropして退避する
- MacintoshHDの不要なファイルを削除して、ディスク容量を空ける
内蔵DiskへCatalinaインストール
- OS再起動させ、Command + R でmacOS復元モードで起動
- 「macOSを再インストール」を選択し、Catalinaのインストールを実行
- Catalinaインストールが無事完了!
- 投稿日:2019-12-15T09:46:25+09:00
Spyder4 をアイコンから起動させる(Mac編)
SpyderはAnacondaに付いてくるIDE(プログラムを書くためのソフトウェア)で、直感的で使いやすい。特にサイエンス系やプログラミング初心者に向いていると思います。最近、待望のSpyder4がリリースされ、プログラマーたちがよく使っている(イメージの)ダークモードが使えるようになりました。
If you like PyCharm's dark theme, check out an early version of what we've got coming in Spyder 4! pic.twitter.com/0WnqEnKe9e
— Spyder IDE (@Spyder_IDE) November 4, 2018しかし、実際にインストールしようとするとちょっとややこしかったので、ここに記録しておきたいと思います。
準備
Spyderの公式ページではAnacondaからのインストールを強く勧めているので、とりあえずAnacondaをインストールしておきます。Anacondaのインストールは公式ページからダウンロードして直感的にNext、Nextと進めるだけでできます。
Spyder4をインストールする
Anacondaがインストールできたら、とりあえず新しい環境を作ります。これは、もし後で問題が起きたとしても、この環境を消したり、新しい環境をまた作ればよいので、保険になります。
conda create -n spyder4 python=3.7新しい環境ができたら、
conda activate spyder4
と入力・実行して、今作った新しい環境に移ります。そして、spyder4をインストールします。conda install spyder==4.0インストールが完了したら、
spyder
と入力・実行してspyder4を立ち上げます。
無事に立ち上がったら、spyder4のインストールは完成です。ややこしかったのは、なぜかAnaconda Navigator(Anacondaをインストールする際にインストールされたソフトウェア)にspyder4がいなかったので、Terminalからspyder4を起動する必要があるところです。(最初からパソコンにanacondaがインストールされていない場合では、また状況は違うかもしれませんが。)
アイコンから起動させる
Macに標準装備されているAutomatorというアプリは、人間がクリックしたりドラッグしたりする操作を自動化してくれる便利アプリです。単純な繰り返し作業は、このアプリに任せることができます。今回はこれを利用してSpyder4をアイコンから起動させるようにします。
方法1
Spyder4は、実は下記の場所にあるアイコンをダブルクリックすることで起動させることができます。しかし、これを他の場所に移すと起動できないので、Automatorを使って、『これをクリックし、起動させる』ことをします。
~/opt/anaconda3/envs/spyder4/bin/spyder
(anaconda3の場所が異なることがあります)1. Automatorを起動し、新規作成を選択します。
2. Workflowを選択します。
3. 上記のファイルをAutomatorの右側にドラッグ&ドロップします。
4. 検索バーでOpen Finder Items を検索し、この項目を右側の欄にドラッグ&ドロップします。
5. このWorkflowを保存します。場所をApplicationsにすれば、Launchpadから起動できます。File FormatをApplicationに選択します。
以上で完成です。
アイコンの変更
アイコンをSpyderのものに変えたいのであれば、下記の場所にダークモードのpngファイフがあるので、これをアイコンに使っても良いでしょう。
~/opt/anaconda3/pkgs/spyder-4.0.0-py37_0/lib/python3.7/site-packages/spyder/images/spyder_dark.png
Macではアイコンの変更は非常に簡単です。
1. 画像をコピーします。(注:画像ファイルではなく、画像自体をコピーします。つまり、画像をPreviewなどで開いて、全選択して(⌘+A)コピーします。)
2. 次に、変更先のアプリのアイコンを右クリックして、Get Infoを選択します。
3. 左上のアイコンの部分を選択して、ペースト(⌘+V)するだけで完成です。
方法2
AppleScriptを使います。AppleScriptはMacOSをコードで操作できます。
1. Automatorを起動し、新規作成を選択します。
2. Workflowを選択します。
3. 検索バーでRun AppleScriptを検索し、この項目を右側の欄にドラッグ&ドロップします。
4. Scriptの欄に下記コードを書き込みます。tell application "Terminal" do script " " activate do script "conda activate spyder4" in window 1 do script "spyder" in window 1 end tellあとは方法1と同様に保存して完成です。
(番外編)Kiteを使って自動予測入力
Kiteはコードの予測入力をしてくれるAdd onです。Spyderはデフォルトでは予測入力機能が余り充実していないので、このような(無料の)自動予測入力ツールがあると助かります。
- 投稿日:2019-12-15T09:32:08+09:00
Mac+Docker+ubuntu (??)
動作環境
Mac OS Catalina 10.15.1
概要
Mac上でROSを動かしたいと思い、公式を確認したところサポートされてるのがubuntu上だけだったので、Dockerを使ってubuntuを入れた後、その中でROSを動かしたいと思ったのでその実行手順をまとめておこうと思う。rosを入れる手順は別の記事でまとめようと思う。
まずはDockerをインストールする
とりあえず、MacにDockerをインストールする
https://hub.docker.com/editions/community/docker-ce-desktop-mac
公式サイトでまずは自分のアカウントを作ってログインする
そして右上のGet Dockerからインストールできる
この時、ターミナル上で以下のコマンドでちゃんとインストールされたか確認できる
docker versionこの時、macのアプリケーションフォルダに入ってるDockerをクリックして起動させてないといけないらしく、参考にした記事には載ってなかったのでこちらには載せておく
ubuntuを入れる
これでDockerは入ったのでubuntuを入れていく
docker pull ubuntu:16.04今回はubuntu 16.04を入れる
https://hub.docker.com/_/ubuntu/
こちらのdockerhubの方でpull可能なubuntuのバージョンは載ってるので好きなのを入れましょう
docker imagesこれでpullしたものを確認する
ubuntu16.04があればきちんとpullできている
ubuntuが入ったら
まずはubuntuの起動をする
docker run -it -d --name ubuntu1604 ubuntu:16.04dockerのrunコマンドで起動する
正しく起動されてるか確認する
docker psコンテナ名はubuntu1604なので、正しく起動されてたら出てくると思う
もし、出てこない場合は
docker ps -aこれでpullがちゃんとできてるか確認する
起動したらそのコンテナに入る
docker exec -it ubuntu1604 /bin/bashこれでコンテナ内に入れた
抜けたい時は
exit再度入りたい場合は
docker exec -it ubuntu1604 bashこれで入れる
コンテナを停止させる場合
docker stop ubuntu1604再度動かす場合
docker start ubuntu1604停止と再起動はどちらもコンテナから抜けてからやる必要がある
ubuntuに入った状態でまずはユーザーを追加する
adduser user_nameuser_nameには自分の好きな名前を入れよう
gpasswd -a user_name sudoこれでubuntu内でユーザーが追加された
これで一通りできたわけだが、例えばubuntu内でpythonのコードを書いて実行するには
ファイルの読み書きができないといけないが、docker内で処理されるので、macに入れてるテキストエディタは使えないということでubuntuにvimを入れておいた
sudo apt-get update sudo apt-get install vimこれでvimをインストールできた
参考文献
Dockerをインストールした時に参考にさせていただいた
https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81ubuntu入れる時に参考にさせていただいた
https://weblabo.oscasierra.net/docker-ubuntu1604/ユーザーを追加する時に参考にさせていただいた
https://qiita.com/white_aspara25/items/c1b9d02310b4731bfbaavim入れる時参考にさせていただいた
https://qiita.com/YumaInaura/items/3432cc3f8a8553e05a6e
- 投稿日:2019-12-15T03:21:23+09:00
MacBook Pro でOpenPose
MacBook Proで機械学習、Deep Leaning系の記事を調べていた際、Macで姿勢検出ができるという記事を
いくつか見つけて色々試してみたところ動作したので、備忘録的に書いておきます。環境
- MacBook Pro 15in 2018 2.2 GHz Core i7 32GB Memory
- Mojave 10.14.6
- python 3.7.5
- homebrew でpythonとvirtualenv、wgetをインストール
設定手順
準備
準備としては、Pythonの仮想環境を設定します。
python仮想環境を作成します。 $ virtualenv mppose python仮想環境に入ります。 $ source mppose/bin/activateOpenPose設定
OpenPoseを設定していきます。
動作させるために必要なパッケージをインストールします。 $ pip3 install tensorflow ipython configobj keras pillow opencv-python Kerasバックエンド版のOpenPoseのリポジトリをクローンして移動します。 $ git clone https://github.com/michalfaber/keras_Realtime_Multi-Person_Pose_Estimation.git $ cd keras_Realtime_Multi-Person_Pose_Estimation/ リポジトリ内のmodelディレクトリに移動してcaffeとkerasの学習モデルをダウンロードします。 $ cd model $ sh get_caffe_model.sh $ sh get_keras_model.sh 空のinit.pyを作成します。(私の環境では、これを作成しないと後のpythonスクリプトを動作させる際にmodelディレクトリ配下のpythonモジュールが読みこめず、エラーになりました) $ touch __init.py__ リポジトリのトップへ戻り、caffeのnumpy学習モデルレイヤをダンプします。 $ cd ../ $ docker run -v `pwd`:/workspace -it bvlc/caffe:cpu python dump_caffe_layers.py caffeの学習モデルレイヤをkeras用に変換します。 $ python caffe_to_keras.py以上で設定は完了です。
動作確認
サンプル写真の姿勢検出をしてみる。 $ python demo_image.py --image sample_images/ski.jpg カメラを起動して姿勢検出をしてみる。 $ python demo_camera.pyカメラで姿勢検出をしてみたところ、大体processing time 0.07sec程度で検出ができているようで、CPUのみでもそこそこ動くものだなといったところです。姿勢検出系は他にもあるようなので、何かできるようなものがあればまた試してみようかと思います。