====== 開発環境用コンテナのセットアップ(Ubuntu以外のディストリビューション使用の場合) ====== Ubuntu 以外のディストリビューションを利用している場合でも、クロスコンパイラなどの導入を考えると\\ Ubuntu の環境を構築するのがお勧めです。 仮想マシンを作成するとリソースを消費しますので、コンテナ(LXC((https://ja.wikipedia.org/wiki/LXC)) (([[http://knowledge.sakura.ad.jp/tech/2108/|15分で分かるLXC(Linux Containers)の仕組みと基本的な使い方 - さくらのナレッジ]])))でUbuntuの環境を作成する方法を紹介します。 ホストの環境は Debian(Jessie) を想定しています。 ※ [[.emdebian_toolchain:start]] (([[http://qiita.com/myahal@github/items/fc332e53713df244518f|armhfクロスコンパイル環境を作る - Qiita]]))もあるようです。 \\ ===== Ubuntu コンテナの作成 ===== ==== LXC パッケージの導入 ==== LXC を使用するためのパッケージを導入します。 root@jessie:~# apt-get install lxc Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: debootstrap dh-python libapparmor1 libmpdec2 libpython3-stdlib libpython3.4-minimal libpython3.4-stdlib libseccomp2 python3 python3-minimal python3.4 python3.4-minimal rsync Suggested packages: lua5.2 python3-doc python3-tk python3-venv python3.4-venv python3.4-doc binutils binfmt-support The following NEW packages will be installed: debootstrap dh-python libapparmor1 libmpdec2 libpython3-stdlib libpython3.4-minimal libpython3.4-stdlib libseccomp2 lxc python3 python3-minimal python3.4 python3.4-minimal rsync 0 upgraded, 14 newly installed, 0 to remove and 0 not upgraded. Need to get 5,822 kB of archives. After this operation, 22.7 MB of additional disk space will be used. Do you want to continue? [Y/n] Do you want to continue? [Y/n] y Get:1 http://ftp.jaist.ac.jp/debian/ jessie/main libmpdec2 amd64 2.4.1-1 [85.7 kB] Get:2 http://ftp.jaist.ac.jp/debian/ jessie/main libpython3.4-minimal amd64 3.4.2-1 [492 kB] Get:3 http://ftp.jaist.ac.jp/debian/ jessie/main libpython3.4-stdlib amd64 3.4.2-1 [2,088 kB] Get:4 http://ftp.jaist.ac.jp/debian/ jessie/main libseccomp2 amd64 2.1.1-1 [27.6 kB] Get:5 http://security.debian.org/ jessie/updates/main lxc amd64 1:1.0.6-6+deb8u2 [626 kB] Get:6 http://ftp.jaist.ac.jp/debian/ jessie/main libapparmor1 amd64 2.9.0-3 [60.3 kB] Get:7 http://ftp.jaist.ac.jp/debian/ jessie/main python3.4-minimal amd64 3.4.2-1 [1,646 kB] Get:8 http://ftp.jaist.ac.jp/debian/ jessie/main python3.4 amd64 3.4.2-1 [204 kB] Get:9 http://ftp.jaist.ac.jp/debian/ jessie/main python3-minimal amd64 3.4.2-2 [34.7 kB] Get:10 http://ftp.jaist.ac.jp/debian/ jessie/main libpython3-stdlib amd64 3.4.2-2 [18.1 kB] Get:11 http://ftp.jaist.ac.jp/debian/ jessie/main dh-python all 1.20141111-2 [66.4 kB] Get:12 http://ftp.jaist.ac.jp/debian/ jessie/main python3 amd64 3.4.2-2 [21.2 kB] Get:13 http://ftp.jaist.ac.jp/debian/ jessie/main rsync amd64 3.1.1-3 [390 kB] Get:14 http://ftp.jaist.ac.jp/debian/ jessie/main debootstrap all 1.0.67 [62.7 kB] Fetched 5,822 kB in 2s (2,785 kB/s) Selecting previously unselected package libmpdec2:amd64. (Reading database ... 29812 files and directories currently installed.) Preparing to unpack .../libmpdec2_2.4.1-1_amd64.deb ... 〜〜〜 中略 〜〜〜 Setting up python3 (3.4.2-2) ... running python rtupdate hooks for python3.4... running python post-rtupdate hooks for python3.4... Setting up lxc (1:1.0.6-6+deb8u2) ... Setting up dh-python (1.20141111-2) ... Processing triggers for libc-bin (2.19-18+deb8u1) ... Processing triggers for systemd (215-17+deb8u2) ... root@jessie:~# \\ ==== コンテナの作成 ==== lxc-create コマンドで、Ubuntu テンプレートを使用して Ubuntu のコンテナを作成します。 root@jessie:~# MIRROR=https://mirrors.kernel.org/ubuntu lxc-create -n trusty -t ubuntu -- -r trusty Checking cache download in /var/cache/lxc/trusty/rootfs-amd64 ... Installing packages in template: ssh,vim,language-pack-en Downloading ubuntu trusty minimal ... W: Cannot check Release signature; keyring file not available /usr/share/keyrings/ubuntu-archive-keyring.gpg I: Retrieving Release I: Retrieving Packages I: Validating Packages I: Retrieving Packages I: Validating Packages I: Resolving dependencies of required packages... I: Resolving dependencies of base packages... ... Generating locales... en_US.UTF-8... up-to-date Generation complete. Creating SSH2 RSA key; this may take some time ... Creating SSH2 DSA key; this may take some time ... Creating SSH2 ECDSA key; this may take some time ... Creating SSH2 ED25519 key; this may take some time ... initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused update-rc.d: warning: default stop runlevel arguments (0 1 6) do not match ssh Default-Stop values (none) initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused invoke-rc.d: policy-rc.d denied execution of start. Current default time zone: 'Asia/Tokyo' Local time is now: Fri Jan 8 11:38:36 JST 2016. Universal Time is now: Fri Jan 8 02:38:36 UTC 2016. ## # The default user is 'ubuntu' with password 'ubuntu'! # Use the 'sudo' command to run tasks as root in the container. ## root@jessie:~# \\ ==== 設定 ==== Debian の lxc-create では細かい設定をしてくれないので、手動で設定を変更します。 === /var/lib/lxc/trusty/config の編集 === root@jessie:~# nano -w /var/lib/lxc/trusty/config # Template used to create this container: /usr/share/lxc/templates/lxc-ubuntu # Parameters passed to the template: -r trusty # For additional config options, please look at lxc.container.conf(5) # Common configuration lxc.include = /usr/share/lxc/config/ubuntu.common.conf # Container specific configuration lxc.rootfs = /var/lib/lxc/trusty/rootfs lxc.mount = /var/lib/lxc/trusty/fstab lxc.utsname = trusty lxc.arch = amd64 # Network configuration lxc.network.type = veth lxc.network.link = lxcbr0 lxc.network.flags = up lxc.devttydir = lxc \\ === lxcbr0 I/F の作成 === bridge-utils パッケージを導入します。 root@jessie:~# apt-get install bridge-utils /etc/network/interfaces を編集し、lxcbr0 の設定を追加します。 root@jessie:~# nano -w /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet dhcp auto lxcbr0 iface lxcbr0 inet static address 192.168.8.1 netmask 255.255.255.0 pre-up brctl addbr lxcbr0 \\ === dnsmasq の導入 === DHCPサーバ/DNSキャッシュ用 dnsmasq パッケージを導入します。 root@jessie:~# apt-get install dnsmasq /etc/dnsmasq.conf を編集します。 root@jessie:~# nano -w /etc/dnsmasq.conf 下記エントリを追加します。 interface=lxcbr0 bind-interfaces dhcp-range=192.168.8.50,192.168.8.150,12h \\ === iptables の設定 === iptables の設定を自動化するため、iptables-persistent パッケージを導入します。\\ 導入時に現在のルールを保存するか聞かれるため、eth0 への MASQUERADE 設定(コンテナから外へ抜けるため) を追加しておきます。 root@jessie:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE \\ root@jessie:~# apt-get install iptables-persistent Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: netfilter-persistent The following NEW packages will be installed: iptables-persistent netfilter-persistent 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 18.9 kB of archives. After this operation, 147 kB of additional disk space will be used. Do you want to continue? [Y/n] Get:1 http://ftp.jaist.ac.jp/debian/ jessie/main netfilter-persistent all 1.0.3 [8,036 B] Get:2 http://ftp.jaist.ac.jp/debian/ jessie/main iptables-persistent all 1.0.3 [10.8 kB] Fetched 18.9 kB in 0s (198 kB/s) Preconfiguring packages ... Selecting previously unselected package netfilter-persistent. (Reading database ... 31310 files and directories currently installed.) Preparing to unpack .../netfilter-persistent_1.0.3_all.deb ... Unpacking netfilter-persistent (1.0.3) ... Selecting previously unselected package iptables-persistent. Preparing to unpack .../iptables-persistent_1.0.3_all.deb ... Unpacking iptables-persistent (1.0.3) ... Processing triggers for man-db (2.7.0.2-5) ... Processing triggers for systemd (215-17+deb8u2) ... Setting up netfilter-persistent (1.0.3) ... update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults Setting up iptables-persistent (1.0.3) ... Processing triggers for systemd (215-17+deb8u2) ... \\ ==== Ubuntu コンテナの起動 ==== lxc-start コマンドで、作成した Ubuntu コンテナを起動します。 root@jessie:~# lxc-start -n trusty lxc-start: No such file or directory - Mount of '/sys/fs/fuse/connections' onto '/usr/lib/x86_64-linux-gnu/lxc/rootfs/sys/fs/fuse/connections' failed <4>init: plymouth-upstart-bridge main process (5) terminated with status 1 <4>init: plymouth-upstart-bridge main process ended, respawning <4>init: hwclock main process (7) terminated with status 77 <4>init: ureadahead main process (8) terminated with status 5 <4>init: plymouth-upstart-bridge main process (15) terminated with status 1 <4>init: plymouth-upstart-bridge main process ended, respawning * Starting Mount filesystems on boot ...done. * Starting Signal sysvinit that the rootfs is mounted ...done. * Stopping Send an event to indicate plymouth is up ...done. * Starting Clean /tmp directory ...done. * Starting Populate and link to /run filesystem ...done. * Stopping Populate and link to /run filesystem ...done. * Stopping Clean /tmp directory ...done. * Starting Track if upstart is running in a container ...done. * Starting load fallback graphics devices ...done. * Starting workaround for missing events in container ...done. * Starting Initialize or finalize resolvconf ...done. * Stopping load fallback graphics devices ...done. <4>init: console-font main process (114) terminated with status 1 * Stopping workaround for missing events in container ...done. * Starting userspace bootsplash ...done. Ubuntu 14.04.3 LTS trusty console trusty login: <4>init: setvtrgb main process (417) terminated with status 1 <4>init: plymouth-upstart-bridge main process (21) killed by TERM signal Ubuntu 14.04.3 LTS trusty console trusty login: ubuntu/ubuntu でログインできます。 Ubuntu 14.04.3 LTS trusty console trusty login: ubuntu Password: Last login: Fri Jan 8 13:09:57 JST 2016 on lxc/console Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.16.0-4-amd64 x86_64) * Documentation: https://help.ubuntu.com/ ubuntu@trusty:~$ ifconfig eth0 Link encap:Ethernet HWaddr 4e:0a:d2:c2:7a:ff inet addr:192.168.8.79 Bcast:192.168.8.255 Mask:255.255.255.0 inet6 addr: fe80::4c0a:d2ff:fec2:7aff/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:20 errors:0 dropped:0 overruns:0 frame:0 TX packets:35 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2020 (2.0 KB) TX bytes:4178 (4.1 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) ubuntu@trusty:~$ \\ ssh でログインすることもできます。 root@jessie:~# lxc-ls --fancy NAME STATE IPV4 IPV6 AUTOSTART ---------------------------------------------- trusty RUNNING 192.168.8.79 - NO root@jessie:~# ssh -l ubuntu 192.168.8.79 The authenticity of host '192.168.8.79 (192.168.8.79)' can't be established. ECDSA key fingerprint is 10:86:e7:23:d0:6d:98:da:ef:14:d6:8b:45:7c:09:fc. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.8.79' (ECDSA) to the list of known hosts. ubuntu@192.168.8.79's password: Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.16.0-4-amd64 x86_64) * Documentation: https://help.ubuntu.com/ Last login: Fri Jan 8 13:23:18 2016 ubuntu@trusty:~$ \\ ===== Ubuntu 環境の利用 ===== あとは、apt-get でクロスコンパイラパッケージを導入するなり、Ubuntu のマシンを用意したのと同じことが可能です。 ubuntu@trusty:~$ sudo apt-get update [sudo] password for ubuntu: Hit http://security.ubuntu.com trusty-security InRelease Hit http://security.ubuntu.com trusty-security/main amd64 Packages Ign https://mirrors.kernel.org trusty InRelease Hit http://security.ubuntu.com trusty-security/restricted amd64 Packages Hit https://mirrors.kernel.org trusty-updates InRelease Hit http://security.ubuntu.com trusty-security/universe amd64 Packages Hit https://mirrors.kernel.org trusty Release.gpg Hit https://mirrors.kernel.org trusty-updates/main amd64 Packages Hit http://security.ubuntu.com trusty-security/multiverse amd64 Packages Hit https://mirrors.kernel.org trusty-updates/restricted amd64 Packages Hit http://security.ubuntu.com trusty-security/main Translation-en Hit https://mirrors.kernel.org trusty-updates/universe amd64 Packages Hit http://security.ubuntu.com trusty-security/multiverse Translation-en Hit https://mirrors.kernel.org trusty-updates/multiverse amd64 Packages Hit https://mirrors.kernel.org trusty-updates/main Translation-en Hit http://security.ubuntu.com trusty-security/restricted Translation-en Hit https://mirrors.kernel.org trusty-updates/multiverse Translation-en Hit http://security.ubuntu.com trusty-security/universe Translation-en Hit https://mirrors.kernel.org trusty-updates/restricted Translation-en Hit https://mirrors.kernel.org trusty-updates/universe Translation-en Hit https://mirrors.kernel.org trusty Release Hit https://mirrors.kernel.org trusty/main amd64 Packages Hit https://mirrors.kernel.org trusty/restricted amd64 Packages Hit https://mirrors.kernel.org trusty/universe amd64 Packages Hit https://mirrors.kernel.org trusty/multiverse amd64 Packages Get:1 https://mirrors.kernel.org trusty/main Translation-en_US Hit https://mirrors.kernel.org trusty/main Translation-en Get:2 https://mirrors.kernel.org trusty/multiverse Translation-en_US Hit https://mirrors.kernel.org trusty/multiverse Translation-en Get:3 https://mirrors.kernel.org trusty/restricted Translation-en_US Hit https://mirrors.kernel.org trusty/restricted Translation-en Get:4 https://mirrors.kernel.org trusty/universe Translation-en_US Hit https://mirrors.kernel.org trusty/universe Translation-en Get:5 https://mirrors.kernel.org trusty/main Translation-en_US Ign https://mirrors.kernel.org trusty/main Translation-en_US Ign https://mirrors.kernel.org trusty/multiverse Translation-en_US Ign https://mirrors.kernel.org trusty/restricted Translation-en_US Ign https://mirrors.kernel.org trusty/universe Translation-en_US Reading package lists... Done ubuntu@trusty:~$ ARMhf 開発ツールの導入 ubuntu@trusty:~$ sudo apt-cache search gcc|grep armhf cpp-arm-linux-gnueabihf - The GNU C preprocessor (cpp) for armhf architecture gcc-arm-linux-gnueabihf - The GNU C compiler for armhf architecture libatomic1-armhf-cross - support library providing __atomic built-in functions libgcc-4.8-dev-armhf-cross - GCC support library (development files) libgcc1-armhf-cross - GCC support library libgomp1-armhf-cross - GCC OpenMP (GOMP) support library libsfatomic1-armhf-cross - support library providing __atomic built-in functions (soft float ABI) libsfgcc-4.8-dev-armhf-cross - GCC support library (soft float ABI development files) libsfgcc1-armhf-cross - GCC support library (soft float ABI) libsfgomp1-armhf-cross - GCC OpenMP (GOMP) support library (soft float ABI) gfortran-arm-linux-gnueabihf - The GNU Fortran 95 compiler for armhf architecture gobjc++-arm-linux-gnueabihf - The GNU Objective-C++ compiler for armhf architecture gobjc-arm-linux-gnueabihf - The GNU Objective-C compiler for armhf architecture libatomic1-dbg-armhf-cross - support library providing __atomic built-in functions (debug symbols) libgcc-4.7-dev-armhf-cross - GCC support library (development files) libgcc1-dbg-armhf-cross - GCC support library (debug symbols) libgomp1-dbg-armhf-cross - GCC OpenMP (GOMP) support library (debug symbols) libmudflap0-4.7-dev-armhf-cross - GCC mudflap support libraries (development files) libmudflap0-4.8-dev-armhf-cross - GCC mudflap support libraries (development files) libmudflap0-armhf-cross - GCC mudflap shared support libraries libmudflap0-dbg-armhf-cross - GCC mudflap shared support libraries (debug symbols) libsfatomic1-dbg-armhf-cross - support library providing __atomic built-in functions (soft float ABI debug symbols) libsfgcc-4.7-dev-armhf-cross - GCC support library (soft float ABI development files) libsfgcc1-dbg-armhf-cross - GCC support library (debug symbols) libsfgomp1-dbg-armhf-cross - GCC OpenMP (GOMP) support library (soft float ABI debug symbols) libsfmudflap0-armhf-cross - GCC mudflap shared support libraries (soft float) libsfmudflap0-dbg-armhf-cross - GCC mudflap shared support libraries (soft float debug symbols) ubuntu@trusty:~$ sudo apt-get install gcc-arm-linux-gnueabihf Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: binutils binutils-arm-linux-gnueabihf cpp-4.8-arm-linux-gnueabihf cpp-arm-linux-gnueabihf gcc-4.8-arm-linux-gnueabihf gcc-4.8-arm-linux-gnueabihf-base gcc-4.8-multilib-arm-linux-gnueabihf libasan0-armhf-cross libatomic1-armhf-cross libc6-armel-armhf-cross libc6-armel-cross libc6-armhf-cross libc6-dev-armel-armhf-cross libc6-dev-armel-cross libc6-dev-armhf-cross libcloog-isl4 libgcc-4.8-dev-armhf-cross libgcc1-armhf-cross libgmp10 libgomp1-armhf-cross libisl10 libmpc3 libmpfr4 libsfasan0-armhf-cross libsfatomic1-armhf-cross libsfgcc-4.8-dev-armhf-cross libsfgcc1-armhf-cross libsfgomp1-armhf-cross linux-libc-dev-armel-cross linux-libc-dev-armhf-cross Suggested packages: binutils-doc gcc-4.8-locales cpp-doc gcc-4.8-doc libgcc1-dbg-armhf-cross libgomp1-dbg-armhf-cross libitm1-dbg-armhf-cross libatomic1-dbg-armhf-cross libasan0-dbg-armhf-cross libtsan0-dbg-armhf-cross libbacktrace1-dbg-armhf-cross libquadmath-dbg-armhf-cross binutils-gold make manpages-dev autoconf automake1.9 libtool flex bison gdb-arm-linux-gnueabihf gcc-doc The following NEW packages will be installed: binutils binutils-arm-linux-gnueabihf cpp-4.8-arm-linux-gnueabihf cpp-arm-linux-gnueabihf gcc-4.8-arm-linux-gnueabihf gcc-4.8-arm-linux-gnueabihf-base gcc-4.8-multilib-arm-linux-gnueabihf gcc-arm-linux-gnueabihf libasan0-armhf-cross libatomic1-armhf-cross libc6-armel-armhf-cross libc6-armel-cross libc6-armhf-cross libc6-dev-armel-armhf-cross libc6-dev-armel-cross libc6-dev-armhf-cross libcloog-isl4 libgcc-4.8-dev-armhf-cross libgcc1-armhf-cross libgmp10 libgomp1-armhf-cross libisl10 libmpc3 libmpfr4 libsfasan0-armhf-cross libsfatomic1-armhf-cross libsfgcc-4.8-dev-armhf-cross libsfgcc1-armhf-cross libsfgomp1-armhf-cross linux-libc-dev-armel-cross linux-libc-dev-armhf-cross 0 upgraded, 31 newly installed, 0 to remove and 0 not upgraded. Need to get 23.6 MB of archives. After this operation, 73.2 MB of additional disk space will be used. Do you want to continue? [Y/n]