10: Edison上のYocto Linuxで採用されたパッケージマネージャ opkg をいじる

よく訓練されたアップル信者、都元です。昨日のエントリーはこちらです。さてここからは、Edisonに搭載されたYocto Linuxの中で動いていきます。久しぶりのソフトウェアの世界へ! 今回はopkgについてです。

細々とした環境整備

さてその前に。Edisonの中身はさすが組み込み、最低限の環境しかありません。bashが贅沢な世界です。/bin/shはbusyboxに繋がってます。

まぁ本番運用するハードならばそれが理想的かと思いますが、色々遊んでみるためには少しリッチな方向に調節したいものです。

# echo "alias ll='ls -la --color=auto'" >.profile
# echo "rm='rm -i'" >>.profile
# source .profile

上記を参考に、お好みの設定を書き込んでおきましょう。

opkg

私も初めて使うパッケージマネージャなので、細かいことはよくわかりません。とりあえずパッケージリポジトリの設定が必要なので、下記コマンドで設定ファイルを書き込みます。

# tee /etc/opkg/base-feeds.conf << _EOF_ >/dev/null
src/gz all        http://repo.opkg.net/edison/repo/all
src/gz edison     http://repo.opkg.net/edison/repo/edison
src/gz core2-32   http://repo.opkg.net/edison/repo/core2-32
_EOF_

# tee /etc/opkg/intel-iotdk.conf << _EOF_ >/dev/null
src intel-all     http://iotdk.intel.com/repos/1.1/iotdk/all
src intel-iotdk   http://iotdk.intel.com/repos/1.1/intelgalactic
src intel-quark   http://iotdk.intel.com/repos/1.1/iotdk/quark
src intel-i586    http://iotdk.intel.com/repos/1.1/iotdk/i586
src intel-x86     http://iotdk.intel.com/repos/1.1/iotdk/x86
_EOF_

あとは下記の通りパッケージ一覧のダウンロード、opkg list-installedでインストール済みパッケージの確認、opkg list-upgradableでアップグレード対象のパッケージ確認等、色々やってみましょう。

# opkg update
Downloading http://repo.opkg.net/edison/repo/all/Packages.gz.
Inflating http://repo.opkg.net/edison/repo/all/Packages.gz.
Updated list of available packages in /var/lib/opkg/all.
Downloading http://repo.opkg.net/edison/repo/edison/Packages.gz.
Inflating http://repo.opkg.net/edison/repo/edison/Packages.gz.
Updated list of available packages in /var/lib/opkg/edison.
Downloading http://repo.opkg.net/edison/repo/core2-32/Packages.gz.
Inflating http://repo.opkg.net/edison/repo/core2-32/Packages.gz.
Updated list of available packages in /var/lib/opkg/core2-32.
Downloading http://iotdk.intel.com/repos/1.1/iotdk/all/Packages.
Updated list of available packages in /var/lib/opkg/intel-all.
Downloading http://iotdk.intel.com/repos/1.1/intelgalactic/Packages.
Updated list of available packages in /var/lib/opkg/intel-iotdk.
Downloading http://iotdk.intel.com/repos/1.1/iotdk/quark/Packages.
Updated list of available packages in /var/lib/opkg/intel-quark.
Downloading http://iotdk.intel.com/repos/1.1/iotdk/i586/Packages.
Updated list of available packages in /var/lib/opkg/intel-i586.
Downloading http://iotdk.intel.com/repos/1.1/iotdk/x86/Packages.
Updated list of available packages in /var/lib/opkg/intel-x86.

こちらでフルアップグレード。

# opkg upgrade

こんな感じでモノをインストールできます。

# opkg install bash git

せっかくbashをインストールしたので使いましょう。

# chsh -s /bin/bash

easy_installとpipの導入

# wget https://bootstrap.pypa.io/ez_setup.py --no-check-certificate -O - | python
# easy_install pip
# pip -V
pip 1.5.6 from /usr/lib/python2.7/site-packages/pip-1.5.6-py2.7.egg (python 2.7)

簡単ですね。素晴らしい。

aws-cliの導入

pipまで入ってしまえば、これもコレだけ! 簡単すぎますね。

# pip install awscli
# aws --version
aws-cli/1.6.7 Python/2.7.3 Linux/3.10.17-poky-edison+

Javaの導入

Javaを入れたくなってしまいました。はい、わたくしjava-jaから来ました。

# wget --no-check-certificate --no-cookies - --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u25-b17/jdk-8u25-linux-i586.tar.gz
# tar -xvzf jdk-8u25-linux-i586.tar.gz
# ln -s /home/root/jdk1.8.0_25 /usr/java
# echo 'export PATH=$PATH:/usr/java/bin' >>.profile
# source .profile
# java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) Client VM (build 25.25-b02, mixed mode)

Javaの利用許諾には別途同意してください :)

うぇっへっへ。ちなみに、/usr/javaに直接展開しようとしたら、disk fullでした…。/homeに大きなディスクがマウントされてるんですねー。

# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root               463.9M    386.7M     41.4M  90% /
devtmpfs                480.2M         0    480.2M   0% /dev
tmpfs                   480.5M         0    480.5M   0% /dev/shm
tmpfs                   480.5M    496.0K    480.0M   0% /run
tmpfs                   480.5M         0    480.5M   0% /sys/fs/cgroup
tmpfs                   480.5M    496.0K    480.0M   0% /etc/machine-id
systemd-1                 5.5M      5.1M    454.0K  92% /boot
tmpfs                   480.5M      4.0K    480.5M   0% /tmp
systemd-1                 2.2G    473.5M      1.8G  21% /home
tmpfs                   480.5M         0    480.5M   0% /var/volatile
/dev/mmcblk0p5         1003.0K     19.0K    913.0K   2% /factory
/dev/mmcblk0p10           2.2G    473.5M      1.8G  21% /home
/dev/mmcblk0p7            5.5M      5.1M    454.0K  92% /boot

さて、動作確認。

# tee Hello.java << _EOF_ >/dev/null
public class Hello {
  public static void main(String[] args) {
    System.out.println("Hello, world!");
  }
}
_EOF_
# javac Hello.java
# java Hello
Hello, world!

OKです! (Javaだけ確認が念入り)

やっちまった時 〜 リセット

色々いじりすぎて収集がつかなくなってしまったら、reboot otaコマンドを撃ちこめば、configure_edisonを実行する前まで戻ってくれます。OSさえ起動しなくなってしまったら…。USBからどうにかする手段があるようなので、また別の機会にご紹介しますね。

明日のエントリーはこちらです。