SlideShare a Scribd company logo
1 of 10
Download to read offline
Yocto Project ハンズオン 
岩松信洋 
iwamatsu@nigauri.org / @iwamatsu 
2014/09/27 
1 はじめに 
本ハンズオンではYocto Project で公開されているPoky を使ってLinux OS イメージを構築、起動、イ 
メージの修正等を行います。Poky の基本的な使い方が理解できることを目的としています。 
本ハンズオンで利用する環境は以下の通りです。 
 Poky: バージョン1.6.1 
 利用するLinux ディストリビューション: Ubuntu 12.04 LTS 
 ターゲットハードウェア: QEMU/ARM 
 ビルド用マシン: CPU 12 コア/ メモリ64GB / ディスク100GB (さくらインターネットさん提供) 
今回主催者側でビルド用マシンを用意しています。参加登録時にSSH 公開鍵の送付をお願いしています。 
各自そのSSH 環境でビルド用マシンにログインしてください。端末としてGNU/Linux をお使いの方は以 
下のようにしてログインできます。 
  
$ ssh ubuntu@ビルド用マシンのIP のアドレス 
  
1.1 本ドキュメントの表記について 
 コマンドの$ はユーザによる実行を意味しています。 
 コマンドの# はroot による実行を意味しています。 
 コマンドのn は続けて入力することを意味しています。 
 テキストファイル変更方法は全てvi で統一しています。emacs などを使いたい方は別途インストール 
してください。 
  
$ sudo apt-get install emacs 
  
1
2 開発環境構築 
まず開発環境を構築します。Poky を利用する使ってビルドするために必要なソフトウェアをビルド用マシ 
ンにインストールします。Debian / Ubuntu の場合は以下のように実行します。 
1. sudo apt-get update を実行する 
  
$ sudo apt-get update 
  
2. sudo apt-get upgrade を実行する 
  
$ sudo apt-get upgrade 
  
3. 開発環境に必要なパッケージをインストールする 
  
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib  
build-essential chrpath libsdl1.2-dev xterm 
  
2.1 Poky のダウンロード 
Yocto Project で提供されているリファレンスビルドシステム、Poky をダウンロードします。Yocto 
Project のWeb サイトからtar ボールを取得することもできますが、今回はバージョン管理システムで管理 
されているソースコードを取得する方法で説明します。 
1. ホームディレクトリに移動する 
  
$ cd 
  
2. yocto ディレクトリを作成し、移動する 
  
$ mkdir yocto 
$ cd yocto 
  
3. Poky のGit リポジトリをクローンする 
  
$ git clone git://git.yoctoproject.org/poky 
  
4. poky ディレクトリに移動する 
  
$ cd poky 
  
5. yocto-1.6.1 タグをyocto-handson ローカルブランチとしてチェックアウトする。 
  
$ git checkout -b yocto-handson yocto-1.6.1 
  
2
3 Poky ディレクトリレイアウト 
Poky のディレクトリがどのようになっているのか確認します。 
  
$ ls 
LICENSE README.hardware documentation meta-selftest meta-yocto oe-init-build-env scripts 
README bitbake meta meta-skeleton meta-yocto-bsp oe-init-build-env-memres 
  
 LICENSE: Poky で提供されるレシピ等のライセンス 
 bitbake: BitBake ユーティリティ 
 documentation: ドキュメントソース 
 scripts: サポートスクリプト 
 meta/conf: 主要な設定ファイル群。bitbake の設定やリファレンスボード用の設定など。 
 meta/classes: BitBake クラスファイル群 
 meta/recipes-* : レシピ 
 meta-yocto : Yocto で管理されるレシピ等 
4 Linux OS イメージをビルドする 
ではPoky を使ってLinux OS イメージをビルドしましょう。Poky では以下のリファレンスイメージが提 
供されています。 
 core-image-minimal 
Unix の基本的な操作ができるLinux OS イメージを提供するレシピ 
 core-image-sato 
matchbox をベースとしたLinux OS イメージを提供するレシピ 
 core-imagte-x11 
x11 の基本部分を含んだLinux OS イメージを提供するレシピ 
 core-image-weston 
Wayland/Weston の基本部分を含んだLinux OS イメージを提供するレシピ 
 core-image-lsb 
Linux Standard Base に準拠したLinux OS イメージを提供するレシピ 
今回はcore-image-minimal をターゲットにしてビルドします。 
4.1 BitBake が動作する環境の構築 
Poky ではBitBake と呼ばれるビルドツールを使ってLinux OS イメージをビルドします(BitBake は 
Poky に含まれています)。BitBake は専用の環境変数を設定しないと正しく動作しません。Poky にはこの環 
境変数を設定するためのツールoe-init-build-env が用意されているので、これを実行します。 
3
1. ~/yocto ディレクトリに移動する 
  
$ cd ~/yocto 
  
2. oe-init-build-env を実行する 
  
$ source poky/oe-init-build-env build_qemuarm 
  
3. pwd コマンドを実行し、カレントディレクトリを確認する 
  
$ pwd 
/home/ubuntu/yocto/build_qemuarm 
  
oe-init-build-env 実行後、/home/ubuntu/yocto/build qemuarm ディレクトリに移動しているこ 
とを確認してください。build qemuarm ディレクトリにはconf ディレクトリがあり、この中にbblay-ers. 
conf とlocal.conf の2つのファイルが作成されています。この2 つのファイルの内容を確認してみま 
しょう。 
4.2 conf/bblayers.conf の確認 
bblayers.conf ではビルドに必要なレイヤーを指定します。指定されているレイヤーはビルド時に指定さ 
れているレイヤーで提供されているレシピが全て読み込まれ、ビルドに内容に反映されます。 
  
LCONF_VERSION = 6 
BBPATH = $fTOPDIRg 
BBFILES ?=  
BBLAYERS ?=   
/home/ubuntu/yocto/poky/meta  
/home/ubuntu/yocto/poky/meta-yocto  
/home/ubuntu/yocto/poky/meta-yocto-bsp  
 
BBLAYERS_NON_REMOVABLE ?=   
/home/ubuntu/yocto/poky/meta  
/home/ubuntu/yocto/poky/meta-yocto  
 
  
4.3 conf/local.conf の確認と編集 
local.conf ではbitbake に与える変数を設定します。例えば、ビルドターゲット、CPU アーキテクチャ、 
ソースコード格納ディレクトリ、ハードウェア機能などです。 
今回はqemuarm をターゲットとしてビルドします。ターゲットはMACHINE という変数で指定 
します。デフォルトではMACHINE ??= qemux86となっており、qemux86 が指定されています。 
qemuarm を有効にするために#MACHINE ?= qemuarmの行頭にある# を削除してください。 
  
$ vi conf/local.conf 
...... 
MACHINE ?= qemuarm 
 
 
  行頭の#を削除する 
  
4
4.4 ビルド 
ビルドする準備が整いましたので、実際にビルドしてみましょう。ビルドするにはbitbake にビルドした 
いレシピ名を指定します。今回はcore-image-minimal イメージをビルドしますので、以下のように実行 
します。今回のビルド環境では完了までに約30 分ほどかかります。 
  
$ bitbake core-image-minimal 
  
5 Linux イメージを起動する 
ビルドが完了したら、Linux OS イメージを起動してみましょう。起動するには以下のコマンドを実行し 
ます。 
  
$ runqemu qemuarm nographic 
  
Note: nographic オプションについて 
nographic を付けない場合、別のウィンドウが開いてその中でLinux が立ち上があります。今回のハンズオンでは 
リモート環境で実施している都合でウィンドウを開くことができないためこのオプションを使用します。 
実行するとsudo のパスワードを求められるので、パスワードyoctohandson を入力してください。 
  
Continuing with the following parameters: 
KERNEL: [/home/ubuntu/yocto/build_qemuarm/tmp/deploy/images/qemuarm/zImage-qemuarm.bin] 
ROOTFS: 
[/home/ubuntu/yocto/build_qemuarm/tmp/deploy/images/qemuarm/core-image-minimal- 
qemuarm-20140926010952.rootfs.ext3] 
FSTYPE: [ext3] 
Setting up tap interface under sudo 
[sudo] password for ubuntu: 
..... 
random: dd urandom read with 86 bits of entropy available 
random: nonblocking pool is initialized 
Poky (Yocto Project Reference Distro) 1.6.1 qemuarm /dev/ttyAMA0 
qemuarm login: 
  
起動できましたでしょうか。起動できたらログインしていろいろ触ってみましょう。ログインユーザは 
root、パスワードは必要ありません。 
終了するには以下のコマンドを実行します。 
注意: shutdown 時の注意 
5
必ずQEMU 上で実行してください。 
  
# shutdown -h now 
  
QEMU が終わらない場合はCtrl+A x (Ctrl とA を同時に押した後、x を押す)を押すと、QEMU 
が終了します。 
6 カスタムイメージレシピを作成する 
core-image-minimal をベースにカスタムイメージを作ってみましょう。core-image-minimal のレシ 
ピはpoky/meta/recipes-core/images/core-image-minimal.bb にあります。このファイルを直接編 
集してカスタムイメージを作ってもよいのですが、これでは変更内容をpoky 内で管理することになります。 
正しい方法は変更内容を管理するレイヤーを作成し、このレイヤーでレシピの変更内容等を管理することで 
す。そのためにはまずレイヤーを作る必要があります。 
6.1 カスタム用レイヤーを作成する 
カスタム用レイヤーを作成する場合、エディタ等で設定ファイルを一から作成することもできるのですが、 
今回はレイヤーの雛形を作成してくれるyocto-layer スクリプトを使ってみます。これはpoky で提供され 
ています。 
1. ~yocto ディレクトリに移動する 
  
$ cd ~yocto 
  
2. yocto-layer を実行する 
yocto-layer にcreate オプションと作成したいレイヤーの名前を指定して実行します。今回は 
handson という名前のレイヤーを作成します。途中で質問されますが、全てエンターキーを押してく 
ださい。完了するとレイヤー名にmeta-というプレフィックスが付加されたディレクトリが作成され 
ます。 
  
$ yocto-layer create handson 
Please enter the layer priority you'd like to use for the layer: [default: 6] 
Would you like to have an example recipe created? (y/n) [default: n] 
Would you like to have an example bbappend file created? (y/n) [default: n] 
New layer created in meta-handson. 
Don't forget to add it to your BBLAYERS (for details see meta-handson$$README). 
  
3. meta-handson ディレクトリがあるか確認する 
  
$ ls 
build_qemuarm meta-handson poky 
  
6
6.2 core-image-minimal レシピにパッケージを追加する 
core-image-minimal イメージにパッケージを追加します。パッケージは何でもよいのですが、今回は 
dropbear (SSH サーバ) を追加します。パッケージを追加方法はいくつかありますが、今回はcore-image-minimal 
レシピに修正を加えるためのcore-image-minimal.bbappend ファイルを作成する方法を使い 
ます。 
1. meta-handson ディレクトリに移動し、recipes-core/images ディレクトリを作成する 
  
$ cd meta-handson 
$ mkdir -p recipes-core/images 
  
2. エディタでrecipes-core/images/core-image-minimal.bbappend ファイルを開く 
  
$ vi recipes-core/images/core-image-minimal.bbappend 
  
3. 下記の内容を書き込み、エディタを終了する 
  
IMAGE_INSTALL += dropbear 
  
7 カスタムイメージレシピをビルドし起動する 
先ほど作成したhandson レイヤーを使ったカスタムイメージレシピをビルドしてみましょう。 
7.1 作成したmeta-handson レイヤーをbblayers.conf に追加する 
今の状態ではmeta-handson レイヤーが利用できる状態ではありません。conf/bblayers.conf に追加 
する必要があります。 
1. ~/yocto/build qemuarm に移動する 
  
$ cd ~/yocto/build qemuarm 
  
2. conf/bblayers.conf をエディタで開き、meta-handson レイヤーのパスを追加する。 
  
$ vi conf/bblayers.conf 
  
7
LCONF_VERSION = 6 
BBPATH = $fTOPDIRg 
BBFILES ?=  
BBLAYERS ?=   
/home/ubuntu/yocto/poky/meta  
/home/ubuntu/yocto/poky/meta-yocto  
/home/ubuntu/yocto/poky/meta-yocto-bsp  
/home/ubuntu/yocto/meta-handson  
 
 
  meta-handson レイヤーのパスを追加 
 
BBLAYERS_NON_REMOVABLE ?=   
/home/ubuntu/yocto/poky/meta  
/home/ubuntu/yocto/poky/meta-yocto  
 
  
7.2 meta-handson レイヤーが有効になっているか確認する 
ビルドの前に修正が反映されているか確認してみましょう。まず、作成したmeta-handson レイヤーが有 
効になっているか確認します。確認するにはbitbake-layers コマンドのshow-layers オプションを指定し 
ます。実行すると以下のように出力され、リストにmeta-handson あることを確認できます。 
  
$ bitbake-layers show-layers 
layer path priority 
========================================================================== 
meta /home/ubuntu/yocto/poky/meta 5 
meta-yocto /home/ubuntu/yocto/poky/meta-yocto 5 
meta-yocto-bsp /home/ubuntu/yocto/poky/meta-yocto-bsp 5 
meta-handson /home/ubuntu/yocto/meta-handson 6 
  
7.3 core-image-minimal.bbappend の適用を確認する 
次にcore-image-minimal レシピに修正を行うcore-image-minimal.bbappend が適用されるか確 
認します。確認するにはbitbake-layers コマンドのshow-appends オプションを指定します。実行する 
と以下のように出力され、リストにcore-image-minimal.bb の追加用レシピとしてmeta-handson に 
あるcore-image-minimal.bbappend が指定されていることが確認できます。 
  
$ bitbake-layers show-appends 
Parsing recipes..done. 
=== Appended recipes === 
中略 
core-image-minimal.bb: 
/home/ubuntu/yocto/meta-handson/recipes-core/images/core-image-minimal.bbappend 
省略 
  
7.4 実際にcore-image-minimal.bbappend の内容が適用されるか確認する 
最後にcore-image-minimal.bbappend の内容が適用されるか確認します。bitbake コマンド 
に-e オプションを付けて実行すると指定したレシピの最終的な内容が出力されます。core-image-minimal. 
bbappend ではIMAGE INSTALL 変数にdropbear を追加する修正を行っているので、最 
8
終的なレシピではこの変更が反映されているはずです。実行して確認してみましょう。そのまま実行すると大 
量の出力が行われますので、grep を使ってIMAGE INSTALL を検索します。 
  
$ bitbake -e core-image-minimal | grep ^IMAGE_INSTALL= 
IMAGE_INSTALL=packagegroup-core-boot run-postinsts dropbear 
  
7.5 core-image-minimal をビルドして起動する 
ビルドして作成されたイメージを起動してみましょう。ビルド方法と起動方法は最初の方法と同じです。 
  
$ bitbake core-image-minimal 
$ runqemu qemuarm nographic 
  
7.6 dropbear の動作確認 
起動したら、ログインしてdropbear が起動しているか確認してみましょう。ps コマンドの結果を 
dropbear でgrep するのが簡単でしょう。 
  
root@qemuarm:~# ps | grep dropbear 
274 root 2300 S /usr/sbin/dropbear -r /etc/dropbear/dropbear_rsa_hos 
292 root 2252 S grep dropbear 
  
またdropbear はSSH サーバとクライアントを提供しますので、ビルドサーバから起動しているイメー 
ジにログインすることもできます。 
1. 起動しているイメージに割り振られているIP アドレスを確認する 
ifcon
g コマンドで割り当てられているIP とアドレスを確認できます。以下の結果ではIP アドレ 
スとして192.168.7.2 が割り当てられています。 
  
root@qemuarm:~# ifconfig eth0 | grep inet addr 
 
 
  起動しているイメージ上で実行 
inet addr:192.168.7.2 Bcast:192.168.7.255 Mask:255.255.255.0 
  
2. ビルドマシンから起動しているイメージにSSH でログインする 
(a)作業用PC で、もうひとつターミナルソフトウェアを立ち上げます。 
(b)新しく立ち上げたターミナルソフトウェアからビルド用マシンにログインします。 
(c)SSH でビルド用マシンから起動しているイメージにログインします。 
  
$ ssh root@192.168.7.2 
 
 
  ビルドマシンから実行 
  
終了するには以下のコマンドを実行します。 
注意: shutdown 時の注意 
必ずQEMU 上で実行してください。 
9

More Related Content

What's hot

日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
kumake
 

What's hot (20)

Go入門
Go入門Go入門
Go入門
 
Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編
 
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
Ready Player MeのアバターをVRMにする(動画と一緒に見てください)。
Ready Player MeのアバターをVRMにする(動画と一緒に見てください)。Ready Player MeのアバターをVRMにする(動画と一緒に見てください)。
Ready Player MeのアバターをVRMにする(動画と一緒に見てください)。
 
UEFIベアメタルプログラミング
UEFIベアメタルプログラミングUEFIベアメタルプログラミング
UEFIベアメタルプログラミング
 
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理
 
YoctoLTSについて調べてみた
YoctoLTSについて調べてみたYoctoLTSについて調べてみた
YoctoLTSについて調べてみた
 
Launch the First Process in Linux System
Launch the First Process in Linux SystemLaunch the First Process in Linux System
Launch the First Process in Linux System
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
Yoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作るYoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作る
 
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
 
今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた
 
YoctoでLTSディストリを作るには
YoctoでLTSディストリを作るにはYoctoでLTSディストリを作るには
YoctoでLTSディストリを作るには
 
Building Embedded Linux UDOONEO
Building Embedded Linux UDOONEOBuilding Embedded Linux UDOONEO
Building Embedded Linux UDOONEO
 
golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)
 
UEFI時代のブートローダ
UEFI時代のブートローダUEFI時代のブートローダ
UEFI時代のブートローダ
 
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 (  Redmine of one plant 2022 ...ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 (  Redmine of one plant 2022 ...
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
 
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチをOSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 

Similar to Yocto Project ハンズオン / 参加者用資料

20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
Tsuyoshi Yamada
 

Similar to Yocto Project ハンズオン / 参加者用資料 (20)

【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
Metro
MetroMetro
Metro
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
 
LibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATELibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATE
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書く
 
20230128.pptx
20230128.pptx20230128.pptx
20230128.pptx
 
LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2
 
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
 
Code ignitertalk 01
Code ignitertalk 01Code ignitertalk 01
Code ignitertalk 01
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西
 
Osc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 jOsc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 j
 
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...
 
Xenomai-3.0 on Ubilinux with Intel Edison
Xenomai-3.0 on Ubilinux with Intel EdisonXenomai-3.0 on Ubilinux with Intel Edison
Xenomai-3.0 on Ubilinux with Intel Edison
 
Windows subsystem for linuxで始める組み込みlinux ラズパイ3のブートイメージを作ってみる-
Windows subsystem for linuxで始める組み込みlinux  ラズパイ3のブートイメージを作ってみる-Windows subsystem for linuxで始める組み込みlinux  ラズパイ3のブートイメージを作ってみる-
Windows subsystem for linuxで始める組み込みlinux ラズパイ3のブートイメージを作ってみる-
 
qemuのriscv64にDebianを入れてみた
qemuのriscv64にDebianを入れてみたqemuのriscv64にDebianを入れてみた
qemuのriscv64にDebianを入れてみた
 
openSUSE におけるパッケージ管理入門
openSUSE におけるパッケージ管理入門openSUSE におけるパッケージ管理入門
openSUSE におけるパッケージ管理入門
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会
 
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
 
今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集
 

Recently uploaded

Recently uploaded (11)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Yocto Project ハンズオン / 参加者用資料

  • 1. Yocto Project ハンズオン 岩松信洋 iwamatsu@nigauri.org / @iwamatsu 2014/09/27 1 はじめに 本ハンズオンではYocto Project で公開されているPoky を使ってLinux OS イメージを構築、起動、イ メージの修正等を行います。Poky の基本的な使い方が理解できることを目的としています。 本ハンズオンで利用する環境は以下の通りです。 Poky: バージョン1.6.1 利用するLinux ディストリビューション: Ubuntu 12.04 LTS ターゲットハードウェア: QEMU/ARM ビルド用マシン: CPU 12 コア/ メモリ64GB / ディスク100GB (さくらインターネットさん提供) 今回主催者側でビルド用マシンを用意しています。参加登録時にSSH 公開鍵の送付をお願いしています。 各自そのSSH 環境でビルド用マシンにログインしてください。端末としてGNU/Linux をお使いの方は以 下のようにしてログインできます。 $ ssh ubuntu@ビルド用マシンのIP のアドレス 1.1 本ドキュメントの表記について コマンドの$ はユーザによる実行を意味しています。 コマンドの# はroot による実行を意味しています。 コマンドのn は続けて入力することを意味しています。 テキストファイル変更方法は全てvi で統一しています。emacs などを使いたい方は別途インストール してください。 $ sudo apt-get install emacs 1
  • 2. 2 開発環境構築 まず開発環境を構築します。Poky を利用する使ってビルドするために必要なソフトウェアをビルド用マシ ンにインストールします。Debian / Ubuntu の場合は以下のように実行します。 1. sudo apt-get update を実行する $ sudo apt-get update 2. sudo apt-get upgrade を実行する $ sudo apt-get upgrade 3. 開発環境に必要なパッケージをインストールする $ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath libsdl1.2-dev xterm 2.1 Poky のダウンロード Yocto Project で提供されているリファレンスビルドシステム、Poky をダウンロードします。Yocto Project のWeb サイトからtar ボールを取得することもできますが、今回はバージョン管理システムで管理 されているソースコードを取得する方法で説明します。 1. ホームディレクトリに移動する $ cd 2. yocto ディレクトリを作成し、移動する $ mkdir yocto $ cd yocto 3. Poky のGit リポジトリをクローンする $ git clone git://git.yoctoproject.org/poky 4. poky ディレクトリに移動する $ cd poky 5. yocto-1.6.1 タグをyocto-handson ローカルブランチとしてチェックアウトする。 $ git checkout -b yocto-handson yocto-1.6.1 2
  • 3. 3 Poky ディレクトリレイアウト Poky のディレクトリがどのようになっているのか確認します。 $ ls LICENSE README.hardware documentation meta-selftest meta-yocto oe-init-build-env scripts README bitbake meta meta-skeleton meta-yocto-bsp oe-init-build-env-memres LICENSE: Poky で提供されるレシピ等のライセンス bitbake: BitBake ユーティリティ documentation: ドキュメントソース scripts: サポートスクリプト meta/conf: 主要な設定ファイル群。bitbake の設定やリファレンスボード用の設定など。 meta/classes: BitBake クラスファイル群 meta/recipes-* : レシピ meta-yocto : Yocto で管理されるレシピ等 4 Linux OS イメージをビルドする ではPoky を使ってLinux OS イメージをビルドしましょう。Poky では以下のリファレンスイメージが提 供されています。 core-image-minimal Unix の基本的な操作ができるLinux OS イメージを提供するレシピ core-image-sato matchbox をベースとしたLinux OS イメージを提供するレシピ core-imagte-x11 x11 の基本部分を含んだLinux OS イメージを提供するレシピ core-image-weston Wayland/Weston の基本部分を含んだLinux OS イメージを提供するレシピ core-image-lsb Linux Standard Base に準拠したLinux OS イメージを提供するレシピ 今回はcore-image-minimal をターゲットにしてビルドします。 4.1 BitBake が動作する環境の構築 Poky ではBitBake と呼ばれるビルドツールを使ってLinux OS イメージをビルドします(BitBake は Poky に含まれています)。BitBake は専用の環境変数を設定しないと正しく動作しません。Poky にはこの環 境変数を設定するためのツールoe-init-build-env が用意されているので、これを実行します。 3
  • 4. 1. ~/yocto ディレクトリに移動する $ cd ~/yocto 2. oe-init-build-env を実行する $ source poky/oe-init-build-env build_qemuarm 3. pwd コマンドを実行し、カレントディレクトリを確認する $ pwd /home/ubuntu/yocto/build_qemuarm oe-init-build-env 実行後、/home/ubuntu/yocto/build qemuarm ディレクトリに移動しているこ とを確認してください。build qemuarm ディレクトリにはconf ディレクトリがあり、この中にbblay-ers. conf とlocal.conf の2つのファイルが作成されています。この2 つのファイルの内容を確認してみま しょう。 4.2 conf/bblayers.conf の確認 bblayers.conf ではビルドに必要なレイヤーを指定します。指定されているレイヤーはビルド時に指定さ れているレイヤーで提供されているレシピが全て読み込まれ、ビルドに内容に反映されます。 LCONF_VERSION = 6 BBPATH = $fTOPDIRg BBFILES ?= BBLAYERS ?= /home/ubuntu/yocto/poky/meta /home/ubuntu/yocto/poky/meta-yocto /home/ubuntu/yocto/poky/meta-yocto-bsp BBLAYERS_NON_REMOVABLE ?= /home/ubuntu/yocto/poky/meta /home/ubuntu/yocto/poky/meta-yocto 4.3 conf/local.conf の確認と編集 local.conf ではbitbake に与える変数を設定します。例えば、ビルドターゲット、CPU アーキテクチャ、 ソースコード格納ディレクトリ、ハードウェア機能などです。 今回はqemuarm をターゲットとしてビルドします。ターゲットはMACHINE という変数で指定 します。デフォルトではMACHINE ??= qemux86となっており、qemux86 が指定されています。 qemuarm を有効にするために#MACHINE ?= qemuarmの行頭にある# を削除してください。 $ vi conf/local.conf ...... MACHINE ?= qemuarm 行頭の#を削除する 4
  • 5. 4.4 ビルド ビルドする準備が整いましたので、実際にビルドしてみましょう。ビルドするにはbitbake にビルドした いレシピ名を指定します。今回はcore-image-minimal イメージをビルドしますので、以下のように実行 します。今回のビルド環境では完了までに約30 分ほどかかります。 $ bitbake core-image-minimal 5 Linux イメージを起動する ビルドが完了したら、Linux OS イメージを起動してみましょう。起動するには以下のコマンドを実行し ます。 $ runqemu qemuarm nographic Note: nographic オプションについて nographic を付けない場合、別のウィンドウが開いてその中でLinux が立ち上があります。今回のハンズオンでは リモート環境で実施している都合でウィンドウを開くことができないためこのオプションを使用します。 実行するとsudo のパスワードを求められるので、パスワードyoctohandson を入力してください。 Continuing with the following parameters: KERNEL: [/home/ubuntu/yocto/build_qemuarm/tmp/deploy/images/qemuarm/zImage-qemuarm.bin] ROOTFS: [/home/ubuntu/yocto/build_qemuarm/tmp/deploy/images/qemuarm/core-image-minimal- qemuarm-20140926010952.rootfs.ext3] FSTYPE: [ext3] Setting up tap interface under sudo [sudo] password for ubuntu: ..... random: dd urandom read with 86 bits of entropy available random: nonblocking pool is initialized Poky (Yocto Project Reference Distro) 1.6.1 qemuarm /dev/ttyAMA0 qemuarm login: 起動できましたでしょうか。起動できたらログインしていろいろ触ってみましょう。ログインユーザは root、パスワードは必要ありません。 終了するには以下のコマンドを実行します。 注意: shutdown 時の注意 5
  • 6. 必ずQEMU 上で実行してください。 # shutdown -h now QEMU が終わらない場合はCtrl+A x (Ctrl とA を同時に押した後、x を押す)を押すと、QEMU が終了します。 6 カスタムイメージレシピを作成する core-image-minimal をベースにカスタムイメージを作ってみましょう。core-image-minimal のレシ ピはpoky/meta/recipes-core/images/core-image-minimal.bb にあります。このファイルを直接編 集してカスタムイメージを作ってもよいのですが、これでは変更内容をpoky 内で管理することになります。 正しい方法は変更内容を管理するレイヤーを作成し、このレイヤーでレシピの変更内容等を管理することで す。そのためにはまずレイヤーを作る必要があります。 6.1 カスタム用レイヤーを作成する カスタム用レイヤーを作成する場合、エディタ等で設定ファイルを一から作成することもできるのですが、 今回はレイヤーの雛形を作成してくれるyocto-layer スクリプトを使ってみます。これはpoky で提供され ています。 1. ~yocto ディレクトリに移動する $ cd ~yocto 2. yocto-layer を実行する yocto-layer にcreate オプションと作成したいレイヤーの名前を指定して実行します。今回は handson という名前のレイヤーを作成します。途中で質問されますが、全てエンターキーを押してく ださい。完了するとレイヤー名にmeta-というプレフィックスが付加されたディレクトリが作成され ます。 $ yocto-layer create handson Please enter the layer priority you'd like to use for the layer: [default: 6] Would you like to have an example recipe created? (y/n) [default: n] Would you like to have an example bbappend file created? (y/n) [default: n] New layer created in meta-handson. Don't forget to add it to your BBLAYERS (for details see meta-handson$$README). 3. meta-handson ディレクトリがあるか確認する $ ls build_qemuarm meta-handson poky 6
  • 7. 6.2 core-image-minimal レシピにパッケージを追加する core-image-minimal イメージにパッケージを追加します。パッケージは何でもよいのですが、今回は dropbear (SSH サーバ) を追加します。パッケージを追加方法はいくつかありますが、今回はcore-image-minimal レシピに修正を加えるためのcore-image-minimal.bbappend ファイルを作成する方法を使い ます。 1. meta-handson ディレクトリに移動し、recipes-core/images ディレクトリを作成する $ cd meta-handson $ mkdir -p recipes-core/images 2. エディタでrecipes-core/images/core-image-minimal.bbappend ファイルを開く $ vi recipes-core/images/core-image-minimal.bbappend 3. 下記の内容を書き込み、エディタを終了する IMAGE_INSTALL += dropbear 7 カスタムイメージレシピをビルドし起動する 先ほど作成したhandson レイヤーを使ったカスタムイメージレシピをビルドしてみましょう。 7.1 作成したmeta-handson レイヤーをbblayers.conf に追加する 今の状態ではmeta-handson レイヤーが利用できる状態ではありません。conf/bblayers.conf に追加 する必要があります。 1. ~/yocto/build qemuarm に移動する $ cd ~/yocto/build qemuarm 2. conf/bblayers.conf をエディタで開き、meta-handson レイヤーのパスを追加する。 $ vi conf/bblayers.conf 7
  • 8. LCONF_VERSION = 6 BBPATH = $fTOPDIRg BBFILES ?= BBLAYERS ?= /home/ubuntu/yocto/poky/meta /home/ubuntu/yocto/poky/meta-yocto /home/ubuntu/yocto/poky/meta-yocto-bsp /home/ubuntu/yocto/meta-handson meta-handson レイヤーのパスを追加 BBLAYERS_NON_REMOVABLE ?= /home/ubuntu/yocto/poky/meta /home/ubuntu/yocto/poky/meta-yocto 7.2 meta-handson レイヤーが有効になっているか確認する ビルドの前に修正が反映されているか確認してみましょう。まず、作成したmeta-handson レイヤーが有 効になっているか確認します。確認するにはbitbake-layers コマンドのshow-layers オプションを指定し ます。実行すると以下のように出力され、リストにmeta-handson あることを確認できます。 $ bitbake-layers show-layers layer path priority ========================================================================== meta /home/ubuntu/yocto/poky/meta 5 meta-yocto /home/ubuntu/yocto/poky/meta-yocto 5 meta-yocto-bsp /home/ubuntu/yocto/poky/meta-yocto-bsp 5 meta-handson /home/ubuntu/yocto/meta-handson 6 7.3 core-image-minimal.bbappend の適用を確認する 次にcore-image-minimal レシピに修正を行うcore-image-minimal.bbappend が適用されるか確 認します。確認するにはbitbake-layers コマンドのshow-appends オプションを指定します。実行する と以下のように出力され、リストにcore-image-minimal.bb の追加用レシピとしてmeta-handson に あるcore-image-minimal.bbappend が指定されていることが確認できます。 $ bitbake-layers show-appends Parsing recipes..done. === Appended recipes === 中略 core-image-minimal.bb: /home/ubuntu/yocto/meta-handson/recipes-core/images/core-image-minimal.bbappend 省略 7.4 実際にcore-image-minimal.bbappend の内容が適用されるか確認する 最後にcore-image-minimal.bbappend の内容が適用されるか確認します。bitbake コマンド に-e オプションを付けて実行すると指定したレシピの最終的な内容が出力されます。core-image-minimal. bbappend ではIMAGE INSTALL 変数にdropbear を追加する修正を行っているので、最 8
  • 9. 終的なレシピではこの変更が反映されているはずです。実行して確認してみましょう。そのまま実行すると大 量の出力が行われますので、grep を使ってIMAGE INSTALL を検索します。 $ bitbake -e core-image-minimal | grep ^IMAGE_INSTALL= IMAGE_INSTALL=packagegroup-core-boot run-postinsts dropbear 7.5 core-image-minimal をビルドして起動する ビルドして作成されたイメージを起動してみましょう。ビルド方法と起動方法は最初の方法と同じです。 $ bitbake core-image-minimal $ runqemu qemuarm nographic 7.6 dropbear の動作確認 起動したら、ログインしてdropbear が起動しているか確認してみましょう。ps コマンドの結果を dropbear でgrep するのが簡単でしょう。 root@qemuarm:~# ps | grep dropbear 274 root 2300 S /usr/sbin/dropbear -r /etc/dropbear/dropbear_rsa_hos 292 root 2252 S grep dropbear またdropbear はSSH サーバとクライアントを提供しますので、ビルドサーバから起動しているイメー ジにログインすることもできます。 1. 起動しているイメージに割り振られているIP アドレスを確認する ifcon
  • 10. g コマンドで割り当てられているIP とアドレスを確認できます。以下の結果ではIP アドレ スとして192.168.7.2 が割り当てられています。 root@qemuarm:~# ifconfig eth0 | grep inet addr 起動しているイメージ上で実行 inet addr:192.168.7.2 Bcast:192.168.7.255 Mask:255.255.255.0 2. ビルドマシンから起動しているイメージにSSH でログインする (a)作業用PC で、もうひとつターミナルソフトウェアを立ち上げます。 (b)新しく立ち上げたターミナルソフトウェアからビルド用マシンにログインします。 (c)SSH でビルド用マシンから起動しているイメージにログインします。 $ ssh root@192.168.7.2 ビルドマシンから実行 終了するには以下のコマンドを実行します。 注意: shutdown 時の注意 必ずQEMU 上で実行してください。 9
  • 11. # shutdown -h now 8 実機向けイメージをビルドする TBD 付録A レシピの内容を見る meta/recipes-core/zlib/zlib 1.2.8.bb { HOMEPAGE { SECTION { LICENSE { LIC FILES CHKSUM { SRC URI { SRC URI[md5sum] { SRC URI[sha256sum] { RDEPENDS { do con
  • 12. gure { do compile { do install meta/recipes-core/coreutils/coreutils 8.22.bb { SUMMARY { DESCRIPTION { HOMEPAGE { BUGTRACKER { DEPENDS { EXTRA OECONF { PACKAGECONFIG { do compile prepend { do install append 10