SlideShare una empresa de Scribd logo
1 de 18
2016/10/8
第12回kernel/vm探検隊
knok@debian.org / @knok
https://goo.gl/38GEqR
qemu-debootstrap
qemu-debootstrapで
始める異世界生活
2016/10/8
第12回kernel/vm探検隊
knok@debian.org / @knok
Debianでよく困ること
多数のアーキテクチャに対応
amd64/i386/armel/armhf/arm64/mips/mipsel/powerpc/ppc64el/s390x
kFreeBSD-amd64/i386/Hurd-i386
特定アーキテクチャ限定のバグ報告
FTBFS
Fail to Build from Source
所持していないアーキテクチャ対応をどうするか
arm … ok
mips … ?
sparc … ?
ia64 ?????
物理 or 仮想
porterbox
https://db.debian.org/machines.cgi
開発者向けに提供される物理マシン
条件が揃えばDebian開発者以外の人でも使える
http://www.clear-code.com/blog/2016/2/24.html
qemu
誰でも使えるOSSな仮想マシン
debootstrap
Debian/Ubuntu最小環境を構築するコマンド
Debianにおいてほとんどのファイルはパッケージ管理下またはパッケージが生成
大昔はbase.tgzというファイルが必要だった
必要なパッケージをリポジトリから取得、展開 (first stage)
アーキテクチャにかかわらず実行できる部分
設定スクリプトの起動 (second stage)
{pre|post}instスクリプトを実行
対象アーキテクチャのインタプリタバイナリが解釈
invoke-policy.dを一時的に無効にする
qemu-user-static
qemu user modeのパッケージ
同じOSの異なるCPUエミュレーションを提供
ライブラリはすべてstatic linkされている
このファイルだけで他のCPUのバイナリを実行できる
dynamic link binaryは然るべき場所にshared libraryが必要
http://www.irasutoya.com/2015/01/blog-post_517.html
binfmt_misc
Linux kernelの機能
拡張子あるいはバイナリのシグネチャを元に、指定したコマンドを呼び出す
ユーザーからはデータなどが透過的に実行可能に見える
近代のfileコマンドのmagic(5)ほど複雑なシグネチャは扱えない
2.1.43以降の機能
Documentation/binfmt_misc.txt
利用例
Wine, Mono
binfmt-supportパッケージ
qemu-debootstrap
qemu-user-staticを利用するdebootstrapのラッパー
ファイルの取得、展開までは通常と同じ
qemu-$(arch)-staticをusr/binにコピー
これを経由してsecond stageを処理
/bin/sh等がqemu経由で実行される
{pre|post}instスクリプト等を処理
qemu-user-staticパッケージに同梱
出来上がった環境も普通にchrootできる
execve(2)実行
/sbin
/bin
/bin/sh
/usr/bin
/usr/bin/qemu-armhf-static
/usr/sbin
/proc
/dev
:
armhf chroot環境
./root/
# chroot ./chroot /bin/sh
chroot(2)実行
/usr/bin/qemu-armhf-static
経由で/bin/sh 実行
実行バイナリハンドラー探索
search_binary_handler
chroot内で、その外部のshared
libraryは参照できない→static link
注意点
十分にこなれていない
arm - そこそこ動く (たまにunsupported syscall)
mips - そこそこ動くがバグも結構ある (libcでの名前解決ができない)
powerpc - instruction errorがそこそこ発生 - buildが完遂しない
OS層のエミュレーションはしない
qemuのシステムエミュレーションを使いましょう
Hurd
kFreeBSD
パフォーマンス
chasenのビルド時間を計測
emulator qemu-user qemu-user qemu-system
arch armv7l armv7l armv7l(vexpress)
storage chroot qcow2+chroot qcow2
real 9:45.553 9:39.006 15:30.793
user 9:32.860 9:23.464 12:27.250
sys 0:11.612 0:12.100 2:08.660
パフォーマンスグラフ
*BSD support (FreeBSD)
pkg install qemu-user-static
get FreeBSD-10.3-RELEASE-arm-armv6-RPI-B.img.xz
xz -d
mount
mdconfig -a -t vnode -f FreeBSD-10.3-RELEASE-arm-armv6-RPI-B.img -u 0
mount /dev/md0s2a /mnt
execute
qemu-arm-static /mnt/rescue/ls
FreeBSDでchroot
binmiscctl add armelf --interpreter "/usr/local/bin/qemu-arm-static" ¥
--magic
"¥x7f¥x45¥x4c¥x46¥x01¥x01¥x01¥x00¥x00¥x00¥x00¥x00¥x00¥x00¥x00¥x00¥x02¥x00¥x28¥x00"
¥
--mask "¥xff¥xff¥xff¥xff¥xff¥xff¥xff¥x00¥xff¥xff¥xff¥xff¥xff¥xff¥xff¥xff¥xfe¥xff¥xff¥xff" ¥
--size 20 --set-enabled
mkdir /mnt/usr/local/bin
cp /usr/local/bin/qemu-arm-static /mnt/usr/local/bin/
chroot /mnt /bin/sh
uname -a
FreeBSD freebsd 10.3-RELEASE FreeBSD 10.3-RELEASE #0 r297264: Fri Mar 25 02:10:02 UTC
*BSD support (NetBSD/OpenBSD)
対応しているはずだが動かない…
segfault
pkgsrc (2.6)
2.7
util/log.c
NULLに対してstrstrを行っているのが原因
アドホックな処置をしても何も表示せずに終了
OpenBSDは未確認
LXCと組み合わせる
LXC 1.0: Some more advanced container usage
[4/10] | Stéphane Graber's website -
https://www.stgraber.org/2013/12/23/lxc-1-0-some-
more-advanced-container-usage/
dockerで動かしている人もいる模様
さらなる異世界へ
RPM系distroで使えるツール
rinse
http://collab-maint.alioth.debian.org/rinse/
rpmstrap
https://github.com/blipvert/rpmstrap
数年更新なし
*BSDのlinux emulationでchroot
FreeBSD 10-REL + linux.ko + Debian lennyで動作確認
参考
Debian Chroot - Crypto++ Wiki -
https://cryptopp.com/wiki/Debian_Chroot
ArmHardFloatChroot - Debian Wiki -
https://wiki.debian.org/ArmHardFloatChroot
QemuUserModeHowTo - FreeBSD Wiki -
https://wiki.freebsd.org/QemuUserModeHowTo
かわいいフリー素材集 いらすとや -
http://www.irasutoya.com/

Más contenido relacionado

La actualidad más candente

Trema day 1
Trema day 1Trema day 1
Trema day 1ykuga
 
FPGAスタートアップ資料
FPGAスタートアップ資料FPGAスタートアップ資料
FPGAスタートアップ資料marsee101
 
Unix32 v 20100508
Unix32 v 20100508Unix32 v 20100508
Unix32 v 20100508xylnao
 
UNIX/32V
UNIX/32V UNIX/32V
UNIX/32V xylnao
 
(仮)このMany Core CPU野郎!!
(仮)このMany Core CPU野郎!!(仮)このMany Core CPU野郎!!
(仮)このMany Core CPU野郎!!Naoto MATSUMOTO
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacksyaegashi
 
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Kazuo Asano (@kazuo_asa)
 
2017年のFPGA Community活動について
2017年のFPGA Community活動について2017年のFPGA Community活動について
2017年のFPGA Community活動についてMr. Vengineer
 
MPSoCのPLの性能について
MPSoCのPLの性能についてMPSoCのPLの性能について
MPSoCのPLの性能についてmarsee101
 
OSC2017Hokkaido
OSC2017HokkaidoOSC2017Hokkaido
OSC2017Hokkaidoslankdev
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西Masahide Yamamoto
 
Lxc cf201207-presen
Lxc cf201207-presenLxc cf201207-presen
Lxc cf201207-presenKouhei Maeda
 
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Takuya ASADA
 

La actualidad más candente (20)

Trema day 1
Trema day 1Trema day 1
Trema day 1
 
FPGAスタートアップ資料
FPGAスタートアップ資料FPGAスタートアップ資料
FPGAスタートアップ資料
 
Riscv+fpga200606
Riscv+fpga200606Riscv+fpga200606
Riscv+fpga200606
 
Arch TCP/IP BOOTP
Arch TCP/IP BOOTPArch TCP/IP BOOTP
Arch TCP/IP BOOTP
 
PYNQ祭り
PYNQ祭りPYNQ祭り
PYNQ祭り
 
Unix32 v 20100508
Unix32 v 20100508Unix32 v 20100508
Unix32 v 20100508
 
UNIX/32V
UNIX/32V UNIX/32V
UNIX/32V
 
(仮)このMany Core CPU野郎!!
(仮)このMany Core CPU野郎!!(仮)このMany Core CPU野郎!!
(仮)このMany Core CPU野郎!!
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacks
 
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6
 
2017年のFPGA Community活動について
2017年のFPGA Community活動について2017年のFPGA Community活動について
2017年のFPGA Community活動について
 
xv6 + mist32 + mruby
xv6 + mist32 + mrubyxv6 + mist32 + mruby
xv6 + mist32 + mruby
 
MPSoCのPLの性能について
MPSoCのPLの性能についてMPSoCのPLの性能について
MPSoCのPLの性能について
 
OSC2017Hokkaido
OSC2017HokkaidoOSC2017Hokkaido
OSC2017Hokkaido
 
141030ceph
141030ceph141030ceph
141030ceph
 
GR-CITRUSハンズオン
GR-CITRUSハンズオンGR-CITRUSハンズオン
GR-CITRUSハンズオン
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西
 
Linux : PSCI
Linux : PSCILinux : PSCI
Linux : PSCI
 
Lxc cf201207-presen
Lxc cf201207-presenLxc cf201207-presen
Lxc cf201207-presen
 
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」
 

Similar a qemu-debootstrap

FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料一路 川染
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築yaegashi
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成Izumi Tsutsui
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineEtsuji Nakai
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
VirtualBox と Rocky Linux 8 で始める Pacemaker  ~ VirtualBox でも STONITH 機能が試せる! Vi...VirtualBox と Rocky Linux 8 で始める Pacemaker  ~ VirtualBox でも STONITH 機能が試せる! Vi...
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...ksk_ha
 
Debianで組み込み環境
Debianで組み込み環境Debianで組み込み環境
Debianで組み込み環境Youhei SASAKI
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)l_b__
 
はじめてのpostmarketOSインストール Windowsタブレット #kagolug Beginner for install postmar...
はじめてのpostmarketOSインストール Windowsタブレット  #kagolug  Beginner for install postmar...はじめてのpostmarketOSインストール Windowsタブレット  #kagolug  Beginner for install postmar...
はじめてのpostmarketOSインストール Windowsタブレット #kagolug Beginner for install postmar...Netwalker lab kapper
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座Masahito Zembutsu
 
20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_BetaKohei KaiGai
 
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...Netwalker lab kapper
 
Debian Next Release Goal: Multiarch
Debian Next Release Goal: MultiarchDebian Next Release Goal: Multiarch
Debian Next Release Goal: MultiarchYouhei SASAKI
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMFAtomu Hidaka
 
20210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.020210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.0Kohei KaiGai
 
OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)Satoshi Shimazaki
 
ARM Server DAY 20121221-ver.1.5
ARM Server DAY 20121221-ver.1.5ARM Server DAY 20121221-ver.1.5
ARM Server DAY 20121221-ver.1.5ogawatadashi
 
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC Online2020 #osc20on Hacking Linux ...
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC Online2020 #osc20on Hacking Linux ...WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC Online2020 #osc20on Hacking Linux ...
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC Online2020 #osc20on Hacking Linux ...Netwalker lab kapper
 

Similar a qemu-debootstrap (20)

FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
 
Pdp11 on-fpga
Pdp11 on-fpgaPdp11 on-fpga
Pdp11 on-fpga
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container Engine
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
VirtualBox と Rocky Linux 8 で始める Pacemaker  ~ VirtualBox でも STONITH 機能が試せる! Vi...VirtualBox と Rocky Linux 8 で始める Pacemaker  ~ VirtualBox でも STONITH 機能が試せる! Vi...
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
 
Debianで組み込み環境
Debianで組み込み環境Debianで組み込み環境
Debianで組み込み環境
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
 
はじめてのpostmarketOSインストール Windowsタブレット #kagolug Beginner for install postmar...
はじめてのpostmarketOSインストール Windowsタブレット  #kagolug  Beginner for install postmar...はじめてのpostmarketOSインストール Windowsタブレット  #kagolug  Beginner for install postmar...
はじめてのpostmarketOSインストール Windowsタブレット #kagolug Beginner for install postmar...
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
 
20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta
 
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...
 
Debian Next Release Goal: Multiarch
Debian Next Release Goal: MultiarchDebian Next Release Goal: Multiarch
Debian Next Release Goal: Multiarch
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
 
20210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.020210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.0
 
OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)
 
ARM Server DAY 20121221-ver.1.5
ARM Server DAY 20121221-ver.1.5ARM Server DAY 20121221-ver.1.5
ARM Server DAY 20121221-ver.1.5
 
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC Online2020 #osc20on Hacking Linux ...
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC Online2020 #osc20on Hacking Linux ...WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC Online2020 #osc20on Hacking Linux ...
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC Online2020 #osc20on Hacking Linux ...
 

Más de Takatsugu Nokubi

10年ぶりの ニューラルネットワーク
10年ぶりの ニューラルネットワーク10年ぶりの ニューラルネットワーク
10年ぶりの ニューラルネットワークTakatsugu Nokubi
 
Language toolを使ってみる
Language toolを使ってみるLanguage toolを使ってみる
Language toolを使ってみるTakatsugu Nokubi
 
自由ソフトウェアによるライブストリーミング
自由ソフトウェアによるライブストリーミング自由ソフトウェアによるライブストリーミング
自由ソフトウェアによるライブストリーミングTakatsugu Nokubi
 

Más de Takatsugu Nokubi (6)

AIと金融
AIと金融AIと金融
AIと金融
 
10年ぶりの ニューラルネットワーク
10年ぶりの ニューラルネットワーク10年ぶりの ニューラルネットワーク
10年ぶりの ニューラルネットワーク
 
Text gen-and-gpt2
Text gen-and-gpt2Text gen-and-gpt2
Text gen-and-gpt2
 
Language toolを使ってみる
Language toolを使ってみるLanguage toolを使ってみる
Language toolを使ってみる
 
自由ソフトウェアによるライブストリーミング
自由ソフトウェアによるライブストリーミング自由ソフトウェアによるライブストリーミング
自由ソフトウェアによるライブストリーミング
 
自由なデータ
自由なデータ自由なデータ
自由なデータ
 

qemu-debootstrap