OpenWrt for Arduino Yun cheat sheet: Difference between revisions

 
(696 intermediate revisions by the same user not shown)
Line 1: Line 1:
OpenWrt running on Atheros AR9331 of Arduino Yun, LLC edtion OpenWrt-Yun also Linino, is in obsolete (and has secutiry issues) at kernel and various packages. I will try to investigate the upgrade to the latest version of OpenWrt. (With Absolutely NO Warranty)
OpenWrt which runs on the Atheros AR 9331 of Arduino Yun, LLC edition OpenWrt-Yun also Linino is obsolete in the kernel and various packages (and there are security problems). I will drill down on how to upgrade to the latest version of OpenWrt. ('''With Absolutely NO Warranty''')




Arduino Yun の Atheros AR9331 で稼働する OpenWrt が、LLC 版 OpenWrt-Yun も Linino もカーネルやパッケージが古くていろいろ残念。 OpenWrt の最新版(trunk)との同期がとれるかを実験する 。つまり Arduino Yun の Atheros AR9331 のオペレーティングシステム(OS)である OpenWrt-Yun のセキュリティバージョンアップに順次対応できるように準備する。
Prepare for the Security update of OpenWrt-Yun, Arduino Yun Operating System. '''In the IoT ERA, I think it is a very important thing.'''
 
<syntaxhighlight lang="text" enclose="div">
BusyBox v1.25.1 () built-in shell (ash)
 
    _________
    /        /\      _    ___ ___  ___
  /  LE    /  \    | |  | __|  \| __|
  /    DE  /    \  | |__| _|| |) | _|
/________/  LE  \  |____|___|___/|___|                      lede-project.org
\        \  DE /
  \    LE  \    /  -----------------------------------------------------------
  \  DE    \  /    Reboot (17.01-SNAPSHOT, r3796-473e994)
    \________\/    -----------------------------------------------------------
 
root@Arduino:~# cat /proc/cpuinfo
system type            : Atheros AR9330 rev 1
machine                : Arduino Yun
processor              : 0
cpu model              : MIPS 24Kc V7.4
BogoMIPS                : 265.42
wait instruction        : yes
microsecond timers      : yes
tlb_entries            : 16
extra interrupt vector  : yes
hardware watchpoint    : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa                    : mips1 mips2 mips32r1 mips32r2
ASEs implemented        : mips16
shadow register sets    : 1
kscratch registers      : 0
package                : 0
core                    : 0
VCED exceptions        : not available
VCEI exceptions        : not available
 
root@Arduino:~# uname -a
Linux Arduino 4.4.108 #0 Fri Dec 29 23:36:25 2017 mips GNU/Linux
</syntaxhighlight>
 
'''NOTE:''' Arduino.cc (LLC) goes to '''LininoOS'''!!!
: [https://www.arduino.cc/en/Guide/ArduinoYunLin Arduino Yún LininoOS]  (since 2-Nov-2016)


'''☆注意☆''' Arduino Yun の AR9331 部が完全に文鎮化する可能性あり '''☆注意☆'''


= OpenWrt-Yun Chaos Calmer 15.05 =
= OpenWrt-Yun Chaos Calmer 15.05 =
[https://forum.arduino.cc/index.php?topic=347224.0 Arduino Yun フォーラムで発見した] RedSnake64 さんの実装。
RedSnake64's implementation can be found at [https://forum.arduino.cc/index.php?topic=347224.0 Arduino Yun forum.]


RedSnake64 edition OpenWrt-Yun:
RedSnake64 edition OpenWrt-Yun:
  [https://github.com/RedSnake64/openwrt-yun/tree/15.05 https://github.com/RedSnake64/openwrt-yun/tree/15.05]
  [https://github.com/RedSnake64/openwrt-yun/tree/15.05 https://github.com/RedSnake64/openwrt-yun/tree/15.05]
  [https://github.com/RedSnake64/openwrt-yun/releases ChaosCalmer_v1.3]
  [https://github.com/RedSnake64/openwrt-yun/releases ChaosCalmer_v1.4]
:人柱で導入してみた。mDNS がつかえず .local でアクセスできなかった。IP 指定で設定まではいけたがいったん実験終了。
:I tried it. 'mDNS' is not active, so I could not be accessed in '.local'.
<syntaxhighlight lang="bash" enclose="div">
 
opkg install avahi-daemon-service-http
:Grasp that implementation. I decided to make Arduino Yun package that can be used in OpenWrt trunk Bleeding Edge.
</syntaxhighlight>
 
:違いが見えてきたので OpenWrt trunk でつかえる Arduino Yun package つくることにする。
RedSnake64 edition become Arduino LLC Official edition:
[https://github.com/arduino/openwrt-yun-1505 https://github.com/arduino/openwrt-yun-1505]


= Investigate the Yun Profile of Origin OpenWrt =
= Explore the Yun Profile of the OpenWrt / LEDE Project =
OpenWrt Project には、すでに Arduino Yun Profile がある。
The OpenWrt / LEDE Project, already exist a Arduino Yun Profile.
  [https://git.openwrt.org/?p=openwrt.git;a=blob;f=target/linux/ar71xx/generic/profiles/arduino.mk;h=8ae5054a7e312213cf872833594b16c0f0237cf1;hb=HEAD target/linux/ar71xx/generic/profiles/arduino.mk]
  [https://git.openwrt.org/?p=source.git;a=blob;f=target/linux/ar71xx/generic/profiles/arduino.mk;h=8ae5054a7e312213cf872833594b16c0f0237cf1;hb=HEAD target/linux/ar71xx/generic/profiles/arduino.mk]
  [https://git.openwrt.org/?p=openwrt.git;a=commit;h=914d4fc6219538640ce843b6cf2a6cab5d71db8a ar71xx: add Arduino Yun]
  [https://git.openwrt.org/?p=source.git;a=commitdiff;h=fa137d51f5cbc678922950a6b06883c1d2141ac2 ar71xx: add Arduino Yun]


  [https://github.com/openwrt/packages/tree/master/utils/yunbridge https://github.com/openwrt/packages/tree/master/utils/yunbridge]
  [https://github.com/openwrt/packages/tree/master/utils/yunbridge https://github.com/openwrt/packages/tree/master/utils/yunbridge]
  [https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/packages/packages/yunbridge_160-f2042052115e71ad2c91f77e78d21db8275fcdd6_ar71xx.ipk yunbridge]
  [https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/packages/packages/yunbridge_160-f2042052115e71ad2c91f77e78d21db8275fcdd6_ar71xx.ipk yunbridge]
:Arduino YUN bridge library が取り込まれている。
:Arduino Yun bridge library has been implemented.


OpenWrt snapshot images:
OpenWrt snapshot images:
  [https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/ https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/]
  [https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/ https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/]
  [https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/packages/ https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/packages/]
  [https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/packages/ https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/packages/]
[https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-generic-yun-16M-squashfs-sysupgrade.bin openwrt-ar71xx-generic-yun-16M-squashfs-sysupgrade.bin]
::Mirror site: [http://ftp.stw-bonn.de/pub/openwrt/snapshots/trunk/ar71xx/generic/ http://ftp.stw-bonn.de/pub/openwrt/snapshots/trunk/ar71xx/generic/]
:時々ビルドに失敗して snapshots から消えてしまうようだ。一週間ぐらい気長に待つ。
:この System Image は Arduino Yun のハードウェアは対応してるが、もちろん Yun 独自のソフトウェアは組み込まれていない。
::公式サイトが落ちまくってるようなので、ミラーサイト [http://ftp.stw-bonn.de/pub/openwrt/snapshots/trunk/ar71xx/generic/ http://ftp.stw-bonn.de/pub/openwrt/snapshots/trunk/ar71xx/generic/]


OpenWrt / LEDE snapshot images:
[http://downloads.lede-project.org/snapshots/targets/ar71xx/generic/ http://downloads.lede-project.org/snapshots/targets/ar71xx/generic/]
[http://downloads.lede-project.org/snapshots/targets/ar71xx/generic/packages/ http://downloads.lede-project.org/snapshots/targets/ar71xx/generic/packages/]
[http://downloads.lede-project.org/snapshots/packages/mips_24kc/ http://downloads.lede-project.org/snapshots/packages/mips_24kc/]
:'''This System Image is corresponding Arduino Yun Hardware. but, of course Arduino Yun own software is not implemented.'''
OpenWrt Core:
  [https://git.openwrt.org/?p=openwrt.git;a=tree git.openwrt.org Git - openwrt trunk tree]
  [https://git.openwrt.org/?p=openwrt.git;a=tree git.openwrt.org Git - openwrt trunk tree]
:OpenWrt 本体とコアなパッケージのレポジトリ。
[https://git.openwrt.org/?p=openwrt.git;a=shortlog;h=HEAD shortlog]


OpenWrt / LEDE Core:
[https://git.lede-project.org/?p=source.git;a=tree git.lede-project.org Git - source.git/tree]
[https://git.lede-project.org/?p=source.git;a=shortlog shortlog]
OpenWrt Packages:
  [https://github.com/openwrt/packages https://github.com/openwrt/packages]
  [https://github.com/openwrt/packages https://github.com/openwrt/packages]
  [https://github.com/openwrt/luci https://github.com/openwrt/luci]
  [https://github.com/openwrt/luci https://github.com/openwrt/luci]
Line 44: Line 93:
  [https://github.com/openwrt/targets https://github.com/openwrt/targets]
  [https://github.com/openwrt/targets https://github.com/openwrt/targets]
  [https://github.com/openwrt-management/packages https://github.com/openwrt-management/packages]
  [https://github.com/openwrt-management/packages https://github.com/openwrt-management/packages]
:本家のオプションパッケージは github で管理するようになっている。
:Optional package of OpenWrt Project is managed on github.


[https://wiki.openwrt.org/doc/packages#official_packages Where to get packages OpenWrt Wiki]
= Explore the OpenWrt-Yun =
 
= Investigate the OpenWrt-Yun =
== OpenWrt-Yun arduino packages ==
== OpenWrt-Yun arduino packages ==
LLC edition arduino package:
LLC edition arduino package:
Line 55: Line 102:
RedSnake64 edition arduino package:
RedSnake64 edition arduino package:
  [https://github.com/RedSnake64/openwrt-arduino-packages/tree/for-15.05 https://github.com/RedSnake64/openwrt-arduino-packages/tree/for-15.05]
  [https://github.com/RedSnake64/openwrt-arduino-packages/tree/for-15.05 https://github.com/RedSnake64/openwrt-arduino-packages/tree/for-15.05]
LLC edition OpenWrt CC version arduino package:
[https://github.com/arduino/openwrt-arduino-packages/tree/for-15.05 https://github.com/arduino/openwrt-arduino-packages/tree/for-15.05]
:Hmmmm.... '''CONFIG_USE_UCLIBC=y'''
::(I go USE_MUSL ;)


Arduino OpenWrt Yún packages:
Arduino OpenWrt Yún packages:
Line 80: Line 132:
(y) yun-scripts
(y) yun-scripts
</syntaxhighlight>
</syntaxhighlight>
#avrdude は純正パッケージがある。Yun 用に設定された avrdude.conf があれば良い。avrdude.conf は ./files に配置する。
#avrdude: use a OpenWrt package. Configuration for the Arduino Yun should be placed in /etc/avrdude.conf.
#cpu-mcu-bridge は純正パッケージの yunbridge と重なるが互換性をかんがえるとこっちにする。(あとで yunbridge を動作検証する)
#cpu-mcu-bridge: overlaps with OpenWrt yunbridge package. For compatibility use a Arduino package.
#cwiid RedSnake64 版のみだし Nintendo Wii remote interface なので削除する。
#cwiid: only RedSnake64 edition. cwiid is Nintendo Wii remote interface package, so should delete.
#node は純正パッケージで。
#node: '''If you want to run node.js, Should turn on MIPS FPU EMULATOR kernel config.'''
#node-serialport は純正パッケージでエラーがでるのでこっちに取り込む。純正 node-arduino-firmata も同様なので取り込む
#node, node-serialport: use a OpenWrt package. so should delete.
#:もし、純正モジュールで稼働するなら不要。y ではないので m する必要はなく n でよい。しかし現状は純正モジュールが build 失敗しているようで ipk が配布されていないようだ。安定するまでは m で。
#"-legacy" mean that the 0.9.x version.
#::当面は arduino packages で取り込む方針にする。
#rng-tools: use a OpenWrt package. so should delete.
#"-legacy" は 0.9.x 版という意味。間違えて Makefile 変えてしまった。忘れないように。
#v8m-rb: Not required, so should delete.
#rng-tools は純正パッケージは問題あり。
 
#:START=98 から START=48 にしないと Yun 独自の起動スクリプト S49generate_new_gpg_key で不具合がでる。これより前に rngd を起動する必要がある。
'''My new arduino packages here''':
#:純正パッケージの rngd.init にパッチあててから build させる方針にする。
[https://github.com/nxhack/openwrt-arduino-packages https://github.com/nxhack/openwrt-arduino-packages]
#v8m-rb はコンパイルエラーになるが パッケージの patch '-fno-strict-overflow'. 追加すればよい。(悪手だがやむなし)
 
Arturo Rinaldi edition linino packages:
[https://github.com/artynet/LEDE/tree/linino-20/package/linino https://github.com/artynet/LEDE/tree/linino-20/package/linino]
 
= Important concept of OpenWrt =
'''The Minimized (smaller footprint) is Highest Priority. This is the large difference in policy between PC GNU/Linux and OpenWrt.'''
 
= Trunk Bleeding Edge / Reboot version of OpenWrt-Yun package and build environment =
 
[https://github.com/openwrt/openwrt.git https://github.com/openwrt/openwrt.git]
[https://github.com/nxhack/openwrt-yun-build-extra https://github.com/nxhack/openwrt-yun-build-extra]
[https://github.com/nxhack/openwrt-arduino-packages https://github.com/nxhack/openwrt-arduino-packages]
 
Setup repos:
<syntaxhighlight lang="bash" enclose="div">
mkdir Build_Path_Some_Where
cd Build_Path_Some_Where
git clone https://github.com/openwrt/openwrt.git
git clone --depth=1 --branch master --single-branch https://github.com/nxhack/openwrt-yun-build-extra.git
cd openwrt
ln -s ../openwrt-yun-build-extra/* .
</syntaxhighlight>
Or lede-17.01
<syntaxhighlight lang="bash" enclose="div">
mkdir Build_Path_Some_Where
cd Build_Path_Some_Where
git clone --branch lede-17.01 https://github.com/openwrt/openwrt.git
git clone --depth=1 --branch lede-17.01 --single-branch https://github.com/nxhack/openwrt-yun-build-extra.git
cd openwrt
ln -s ../openwrt-yun-build-extra/* .
</syntaxhighlight>
 
 
Please modify ./files/etc/opkg/distfeeds.conf
 
First Time, Setup cross compile build environment (ubuntu 14.04):
<syntaxhighlight lang="bash" enclose="div">
./FIRST_SETUP_ubuntu_Trusty_Tahr.sh
</syntaxhighlight>
:Also run fine on 'Bash on Ubuntu on Widnows' ;)
 
Build:
<syntaxhighlight lang="bash" enclose="div">
./build.sh
</syntaxhighlight>
 
When build succeed, You find '''lede-ar71xx-generic-yun-16M-squashfs-sysupgrade.bin''' in ./bin/targets/ar71xx/generic directory.
:(Apply Yun-Shield patch, then SELECT Yun Shield: '''lede-ar71xx-generic-yun-shield-squashfs-sysupgrade.bin''')
 
In order to using the packages, You must placed kernel packages and arduino packages to server (or SD card).
 
=== '''LEDE Trunk Breaking changes''' ===
[https://github.com/lede-project/source/commit/bb46b635df48d5c2368f98646c16e3333cbc11fb ar71xx: move Arduino Yun to generic building code]
 
To use the new partitioning, you need to update your U-Boot env in advance:
<syntaxhighlight lang="bash" enclose="div">
setenv mtdparts "spi0.0:256k(u-boot)ro,64k(u-boot-env),15936k(firmware),64k(nvram),64k(art)ro"
setenv bootcmd "run addboard; run addtty; run addparts; run addrootfs; bootm 0x9f050000 || bootm 0x9fde0000"
saveenv
</syntaxhighlight>
 
memo memo... be careful
<syntaxhighlight lang="bash" enclose="div">
setenv board Yun
setenv mtdparts "spi0.0:256k(u-boot)ro,64k(u-boot-env),15936k(firmware),64k(nvram),64k(art)ro"
setenv rootfstype "squashfs,jffs2"
setenv bootargs "console=ttyATH0,250000 board=Yun mem=64M"
setenv noinitrd
</syntaxhighlight>
 
 
 
memo...
:setenv serverip ‹tftp-server-ip›; setenv ipaddr ‹yun-board-ip›;
 
<syntaxhighlight lang="bash" enclose="div">
setenv serverip 192.168.1.10;
setenv ipaddr 192.168.1.1;
ping 192.168.1.10;
</syntaxhighlight>
 
[http://www.arduino.org/learning/tutorials/advanced-guides/how-to-upgrade-lininoio-os-from-u-boot LininoIO OS upgrade from U-boot]
[https://www.arduino.cc/en/Tutorial/YunUBootReflash Reflashing the OpenWrt-Yun image on the Yún]
[https://www.arduino.cc/en/Tutorial/YunSysRestore Restore the 1.5.3 image after you did sysupgrade to 1.6.2 on old Yún]
 
Restore old image:
<syntaxhighlight lang="bash" enclose="div">
setenv bootargs board=YUN console=ttyATH0,250000 mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot env)ro,14656k(rootfs),1280k(kernel),64k(nvram),64k(art),15936k@0x50000(firmware) rootfstype=squashfs,jffs2 noinitrd
saveenv
</syntaxhighlight>


== Essential items in the kernel configuration ==
== Essential items in the kernel configuration ==
'''diffconfig'''
<syntaxhighlight lang="text" enclose="div">
<syntaxhighlight lang="text" enclose="div">
CONFIG_TARGET_ar71xx=y
CONFIG_TARGET_ar71xx=y
CONFIG_TARGET_ar71xx_generic=y
CONFIG_TARGET_ar71xx_generic=y
CONFIG_TARGET_ar71xx_generic_Yun=y
CONFIG_TARGET_ar71xx_generic_DEVICE_arduino-yun=y
 
CONFIG_ALL_KMODS=y
CONFIG_ALL_NONSHARED=y
CONFIG_DEVEL=y
CONFIG_BUILD_PATENTED=y
CONFIG_CCACHE=y
CONFIG_IB=y
CONFIG_IB_STANDALONE=y
CONFIG_IMAGEOPT=y
CONFIG_IMAGEOPT=y
CONFIG_PREINITOPT=y
CONFIG_KERNEL_MIPS_FPU_EMULATOR=y
CONFIG_TARGET_PREINIT_SUPPRESS_STDERR=y
CONFIG_LIBCURL_COOKIES=y
CONFIG_TARGET_PREINIT_TIMEOUT=2
CONFIG_LIBCURL_FILE=y
# CONFIG_TARGET_PREINIT_SHOW_NETMSG is not set
CONFIG_LIBCURL_FTP=y
# CONFIG_TARGET_PREINIT_SUPPRESS_FAILSAFE_NETMSG is not set
CONFIG_LIBCURL_HTTP=y
CONFIG_TARGET_PREINIT_IFNAME=""
CONFIG_LIBCURL_NO_SMB="!"
CONFIG_TARGET_PREINIT_IP="192.168.1.1"
CONFIG_LIBCURL_OPENSSL=y
CONFIG_TARGET_PREINIT_NETMASK="255.255.255.0"
CONFIG_LIBCURL_PROXY=y
CONFIG_TARGET_PREINIT_BROADCAST="192.168.1.255"
CONFIG_LUCI_LANG_en=y
CONFIG_INITOPT=y
CONFIG_MAKE_TOOLCHAIN=y
CONFIG_TARGET_INIT_PATH="/bin:/sbin:/usr/bin:/usr/sbin"
CONFIG_NODEJS_8=y
CONFIG_TARGET_INIT_ENV=""
CONFIG_NODEJS_ICU_NONE=y
CONFIG_TARGET_INIT_CMD="/sbin/init"
CONFIG_OPENSSL_WITH_COMPRESSION=y
CONFIG_TARGET_INIT_SUPPRESS_STDERR=y
CONFIG_OPENSSL_WITH_DEPRECATED=y
CONFIG_VERSIONOPT=y
CONFIG_OPENSSL_WITH_EC=y
CONFIG_VERSION_DIST="OpenWrt"
CONFIG_OPENSSL_WITH_NPN=y
CONFIG_VERSION_NICK="Bleeding Edge"
CONFIG_OPENSSL_WITH_PSK=y
CONFIG_VERSION_NUMBER=""
CONFIG_OPENSSL_WITH_SRP=y
CONFIG_VERSION_REPO="http://downloads.openwrt.org/snapshots/trunk/%S/packages"
CONFIG_PACKAGE_ajtcl=m
CONFIG_VERSION_MANUFACTURER="Arduino"
CONFIG_PACKAGE_ajtcl-alljoynjs=m
CONFIG_VERSION_MANUFACTURER_URL=""
CONFIG_PACKAGE_ajtcl-alljoynjs-samples=m
CONFIG_VERSION_PRODUCT="Arduino Yun"
CONFIG_PACKAGE_ajtcl-samples=m
CONFIG_VERSION_HWREV="1.0"
CONFIG_PACKAGE_ajtcl-services=m
# CONFIG_VERSION_FILENAMES is not set
CONFIG_PACKAGE_alljoyn=m
 
CONFIG_PACKAGE_alljoyn-about=m
CONFIG_PER_FEED_REPO=y
CONFIG_PACKAGE_alljoyn-c=m
CONFIG_PER_FEED_REPO_ADD_DISABLED=y
CONFIG_PACKAGE_alljoyn-config=m
CONFIG_PER_FEED_REPO_ADD_COMMENTED=y
CONFIG_PACKAGE_alljoyn-config-samples=m
CONFIG_FEED_packages=y
CONFIG_PACKAGE_alljoyn-controlpanel=m
CONFIG_FEED_luci=y
CONFIG_PACKAGE_alljoyn-controlpanel-samples=m
CONFIG_FEED_routing=y
CONFIG_PACKAGE_alljoyn-non-gw-config=m
CONFIG_FEED_telephony=y
CONFIG_PACKAGE_alljoyn-notification=m
CONFIG_FEED_management=y
CONFIG_PACKAGE_alljoyn-notification-samples=m
CONFIG_FEED_arduino=y
CONFIG_PACKAGE_alljoyn-sample_apps=m
# CONFIG_SMIMEOPT is not set
CONFIG_PACKAGE_alljoyn-samples=m
CONFIG_OPKGSMIME_PASSPHRASE=y
CONFIG_PACKAGE_alljoyn-services_common=m
 
CONFIG_PACKAGE_arduinoos=m
CONFIG_DEFAULT_base-files=y
CONFIG_PACKAGE_argp-standalone=y
CONFIG_DEFAULT_busybox=y
CONFIG_PACKAGE_avahi-daemon-service-ssh=y
CONFIG_DEFAULT_dnsmasq=y
CONFIG_PACKAGE_avahi-dbus-daemon=y
CONFIG_DEFAULT_dropbear=y
CONFIG_PACKAGE_avahi-dnsconfd=y
CONFIG_DEFAULT_firewall=y
CONFIG_PACKAGE_avahi-utils=y
CONFIG_DEFAULT_fstools=y
CONFIG_DEFAULT_ip6tables=y
CONFIG_DEFAULT_iptables=y
CONFIG_DEFAULT_iwinfo=y
CONFIG_DEFAULT_kmod-ath9k=y
CONFIG_DEFAULT_kmod-gpio-button-hotplug=y
CONFIG_DEFAULT_kmod-usb-core=y
CONFIG_DEFAULT_kmod-usb2=y
CONFIG_DEFAULT_libc=y
CONFIG_DEFAULT_libgcc=y
CONFIG_DEFAULT_mtd=y
CONFIG_DEFAULT_netifd=y
CONFIG_DEFAULT_odhcp6c=y
CONFIG_DEFAULT_odhcpd=y
CONFIG_DEFAULT_opkg=y
CONFIG_DEFAULT_ppp=y
CONFIG_DEFAULT_ppp-mod-pppoe=y
CONFIG_DEFAULT_swconfig=y
CONFIG_DEFAULT_uboot-envtools=y
CONFIG_DEFAULT_uci=y
CONFIG_DEFAULT_uclient-fetch=y
CONFIG_DEFAULT_wpad-mini=y
 
CONFIG_PACKAGE_avrdude=y
CONFIG_PACKAGE_avrdude=y
CONFIG_PACKAGE_badblocks=y
CONFIG_PACKAGE_blkid=y
CONFIG_PACKAGE_block-mount=y
CONFIG_PACKAGE_bluez-libs=m
CONFIG_PACKAGE_bossa=y
CONFIG_PACKAGE_ca-bundle=y
CONFIG_PACKAGE_ca-certificates=y
CONFIG_PACKAGE_ciao=y
CONFIG_PACKAGE_ciao-connector-phant=m
CONFIG_PACKAGE_ciao-connector-smtp=m
CONFIG_PACKAGE_ciao-connector-xmpp=m
CONFIG_PACKAGE_cpu-mcu-bridge=y
CONFIG_PACKAGE_cpu-mcu-bridge=y
CONFIG_PACKAGE_curl=y
CONFIG_PACKAGE_dbus=y
CONFIG_PACKAGE_dbus-utils=y
CONFIG_PACKAGE_dosfstools=y
CONFIG_PACKAGE_duktape=m
CONFIG_PACKAGE_e2fsprogs=y
CONFIG_PACKAGE_fdisk=y
CONFIG_PACKAGE_gnupg=y
CONFIG_PACKAGE_hidapi=m
CONFIG_PACKAGE_kmod-fs-exfat=m
CONFIG_PACKAGE_kmod-fs-msdos=y
CONFIG_PACKAGE_kmod-fs-vfat=y
CONFIG_PACKAGE_kmod-loop=y
CONFIG_PACKAGE_kmod-nls-cp437=y
CONFIG_PACKAGE_kmod-nls-iso8859-1=y
CONFIG_PACKAGE_kmod-nls-utf8=y
CONFIG_PACKAGE_kmod-scsi-core=y
CONFIG_PACKAGE_kmod-scsi-generic=y
CONFIG_PACKAGE_kmod-spi-bitbang=y
CONFIG_PACKAGE_kmod-spi-dev=y
CONFIG_PACKAGE_kmod-spi-gpio=y
CONFIG_PACKAGE_kmod-spi-gpio-custom=y
CONFIG_PACKAGE_kmod-usb-storage=y
CONFIG_PACKAGE_libavahi-client=y
CONFIG_PACKAGE_libavahi-compat-libdnssd=y
CONFIG_PACKAGE_libavahi-dbus-support=y
CONFIG_PACKAGE_libblkid=y
CONFIG_PACKAGE_libbz2=y
CONFIG_PACKAGE_libcap=m
CONFIG_PACKAGE_libcomerr=y
CONFIG_PACKAGE_libcurl=y
CONFIG_PACKAGE_libdaemon=y
CONFIG_PACKAGE_libdbus=y
CONFIG_PACKAGE_libelf1=y
CONFIG_PACKAGE_libevdev=m
CONFIG_PACKAGE_libexpat=y
CONFIG_PACKAGE_libext2fs=y
CONFIG_PACKAGE_libfdisk=y
CONFIG_PACKAGE_libffi=y
CONFIG_PACKAGE_libftdi1=y
CONFIG_PACKAGE_libfuse=m
CONFIG_PACKAGE_libgdbm=y
CONFIG_PACKAGE_libiwinfo-lua=y
CONFIG_PACKAGE_liblua=y
CONFIG_PACKAGE_liblucihttp=y
CONFIG_PACKAGE_liblucihttp-lua=y
CONFIG_PACKAGE_liblzma=m
CONFIG_PACKAGE_libncurses=y
CONFIG_PACKAGE_libopenssl=y
CONFIG_PACKAGE_libpam=m
CONFIG_PACKAGE_libpcre=y
CONFIG_PACKAGE_libpopt=m
CONFIG_PACKAGE_libreadline=y
CONFIG_PACKAGE_librt=y
CONFIG_PACKAGE_libsmartcols=y
CONFIG_PACKAGE_libss=y
CONFIG_PACKAGE_libstdcpp=y
CONFIG_PACKAGE_libubus-lua=y
CONFIG_PACKAGE_libudev-fbsd=m
CONFIG_PACKAGE_libusb-1.0=y
CONFIG_PACKAGE_libusb-compat=y
CONFIG_PACKAGE_libustream-openssl=y
CONFIG_PACKAGE_libuuid=y
CONFIG_PACKAGE_logrotate=m
CONFIG_PACKAGE_lua=y
CONFIG_PACKAGE_lua-base64=m
CONFIG_PACKAGE_lua-coxpcall=m
CONFIG_PACKAGE_lua-wsapi-base=m
CONFIG_PACKAGE_lua-wsapi-xavante=m
CONFIG_PACKAGE_lua-xavante=m
CONFIG_PACKAGE_luafilesystem=m
CONFIG_PACKAGE_luci=y
CONFIG_PACKAGE_luci-app-arduino-webpanel=y
CONFIG_PACKAGE_luci-app-arduino-webpanel=y
CONFIG_PACKAGE_luci-app-firewall=y
CONFIG_PACKAGE_luci-base=y
CONFIG_PACKAGE_luci-i18n-base-en=y
CONFIG_PACKAGE_luci-i18n-firewall-en=y
CONFIG_PACKAGE_luci-lib-ip=y
CONFIG_PACKAGE_luci-lib-json=y
CONFIG_PACKAGE_luci-lib-jsonc=y
CONFIG_PACKAGE_luci-lib-nixio=y
CONFIG_PACKAGE_luci-mod-admin-full=y
CONFIG_PACKAGE_luci-proto-ipv6=y
CONFIG_PACKAGE_luci-proto-ppp=y
CONFIG_PACKAGE_luci-theme-bootstrap=y
CONFIG_PACKAGE_luci-theme-openwrt=y
CONFIG_PACKAGE_mg=y
CONFIG_PACKAGE_nano=y
CONFIG_PACKAGE_node=m
CONFIG_PACKAGE_node=m
CONFIG_PACKAGE_node-actions-on-google=m
CONFIG_PACKAGE_node-alexa-app=m
CONFIG_PACKAGE_node-alexa-sdk=m
CONFIG_PACKAGE_node-arduino-firmata=m
CONFIG_PACKAGE_node-authenticate-pam=m
CONFIG_PACKAGE_node-autobahn=m
CONFIG_PACKAGE_node-aws-iot-device-sdk=m
CONFIG_PACKAGE_node-aws-sdk=m
CONFIG_PACKAGE_node-azure-event-hubs=m
CONFIG_PACKAGE_node-azure-iot-device-amqp=m
CONFIG_PACKAGE_node-azure-iot-device-http=m
CONFIG_PACKAGE_node-azure-iot-device-mqtt=m
CONFIG_PACKAGE_node-azure-iothub=m
CONFIG_PACKAGE_node-bignum=m
CONFIG_PACKAGE_node-binaryjs=m
CONFIG_PACKAGE_node-bleacon=m
CONFIG_PACKAGE_node-bleno=m
CONFIG_PACKAGE_node-bleno=m
CONFIG_PACKAGE_node-bluetooth-hci-socket=m
CONFIG_PACKAGE_node-browserify=m
CONFIG_PACKAGE_node-bufferutil=m
CONFIG_PACKAGE_node-coap=m
CONFIG_PACKAGE_node-cpx=m
CONFIG_PACKAGE_node-cylon=m
CONFIG_PACKAGE_node-cylon-firmata=m
CONFIG_PACKAGE_node-cylon-gpio=m
CONFIG_PACKAGE_node-cylon-i2c=m
CONFIG_PACKAGE_node-eddystone-beacon=m
CONFIG_PACKAGE_node-ejdb=m
CONFIG_PACKAGE_node-epoll=m
CONFIG_PACKAGE_node-exorcist=m
CONFIG_PACKAGE_node-express=m
CONFIG_PACKAGE_node-ffi=m
CONFIG_PACKAGE_node-firmata=m
CONFIG_PACKAGE_node-forever=m
CONFIG_PACKAGE_node-fuse-bindings=m
CONFIG_PACKAGE_node-hap-nodejs=m
CONFIG_PACKAGE_node-hashmap=m
CONFIG_PACKAGE_node-hashtable=m
CONFIG_PACKAGE_node-homebridge=m
CONFIG_PACKAGE_node-i2c-bus=m
CONFIG_PACKAGE_node-ibmiotf=m
CONFIG_PACKAGE_node-ideino-linino-lib=m
CONFIG_PACKAGE_node-iothub-explorer=m
CONFIG_PACKAGE_node-johnny-five=m
CONFIG_PACKAGE_node-jsonfile=m
CONFIG_PACKAGE_node-level=m
CONFIG_PACKAGE_node-leveldown=m
CONFIG_PACKAGE_node-levelup=m
CONFIG_PACKAGE_node-logfmt=m
CONFIG_PACKAGE_node-lwm2m-node-lib=m
CONFIG_PACKAGE_node-mdns=m
CONFIG_PACKAGE_node-mknod=m
CONFIG_PACKAGE_node-mocha=m
CONFIG_PACKAGE_node-modbus=m
CONFIG_PACKAGE_node-mqtt=m
CONFIG_PACKAGE_node-muzzley-client=m
CONFIG_PACKAGE_node-nconf=m
CONFIG_PACKAGE_node-net-ping=m
CONFIG_PACKAGE_node-nino-io=m
CONFIG_PACKAGE_node-nitrogen=m
CONFIG_PACKAGE_node-nitrogen-cli=m
CONFIG_PACKAGE_node-nitrogen-leveldb-store=m
CONFIG_PACKAGE_node-noble=m
CONFIG_PACKAGE_node-noble=m
CONFIG_PACKAGE_node-node-expat=m
CONFIG_PACKAGE_node-node-hid=m
CONFIG_PACKAGE_node-node-inspect=m
CONFIG_PACKAGE_node-node-lambda=m
CONFIG_PACKAGE_node-node-red=m
CONFIG_PACKAGE_node-node-red-contrib-gpio=m
CONFIG_PACKAGE_node-node-red-contrib-homekit=m
CONFIG_PACKAGE_node-node-red-node-arduino=m
CONFIG_PACKAGE_node-node-static=m
CONFIG_PACKAGE_node-npm=m
CONFIG_PACKAGE_node-npm-check-updates=m
CONFIG_PACKAGE_node-onoff=m
CONFIG_PACKAGE_node-pm2=m
CONFIG_PACKAGE_node-reverse-wstunnel=m
CONFIG_PACKAGE_node-rimraf=m
CONFIG_PACKAGE_node-rpio=m
CONFIG_PACKAGE_node-serialport=m
CONFIG_PACKAGE_node-serialport=m
CONFIG_PACKAGE_node-simple-xmpp=m
CONFIG_PACKAGE_node-sleep=m
CONFIG_PACKAGE_node-socket.io=m
CONFIG_PACKAGE_node-socket.io=m
CONFIG_PACKAGE_node-socket.io-client=m
CONFIG_PACKAGE_node-socket.io-client=m
CONFIG_PACKAGE_node-socket.io-client-legacy=m
CONFIG_PACKAGE_node-socket.io-client-legacy=m
CONFIG_PACKAGE_node-socket.io-legacy=m
CONFIG_PACKAGE_node-socket.io-legacy=m
CONFIG_PACKAGE_node-soracom=m
CONFIG_PACKAGE_node-sqlite3=m
CONFIG_PACKAGE_node-sqlite3=m
CONFIG_PACKAGE_node-statvfs=m
CONFIG_PACKAGE_node-twilio=m
CONFIG_PACKAGE_node-typescript=m
CONFIG_PACKAGE_node-uglify-js=m
CONFIG_PACKAGE_node-usb=m
CONFIG_PACKAGE_node-utf-8-validate=m
CONFIG_PACKAGE_node-ws=m
CONFIG_PACKAGE_node-ws=m
CONFIG_PACKAGE_node-xmpp=m
CONFIG_PACKAGE_node-xmpp-client=m
CONFIG_PACKAGE_node-xmpp-component=m
CONFIG_PACKAGE_node-xmpp-server=m
CONFIG_PACKAGE_node-yarn=m
CONFIG_PACKAGE_openssl-util=y
CONFIG_PACKAGE_python-base=y
CONFIG_PACKAGE_python-email=m
CONFIG_PACKAGE_python-light=y
CONFIG_PACKAGE_python-logging=y
CONFIG_PACKAGE_python-netifaces=m
CONFIG_PACKAGE_python-openssl=y
CONFIG_PACKAGE_python-paho-mqtt=y
CONFIG_PACKAGE_python-pyserial=y
CONFIG_PACKAGE_python-xml=y
CONFIG_PACKAGE_querierd=m
CONFIG_PACKAGE_reset-serial=y
CONFIG_PACKAGE_rng-tools=y
CONFIG_PACKAGE_rng-tools=y
CONFIG_PACKAGE_rpcd=y
CONFIG_PACKAGE_rpcd-mod-rrdns=y
CONFIG_PACKAGE_shellinabox=m
CONFIG_PACKAGE_spacebrew=y
CONFIG_PACKAGE_spacebrew=y
CONFIG_PACKAGE_strace=y
CONFIG_PACKAGE_swap-utils=y
CONFIG_PACKAGE_temboo=y
CONFIG_PACKAGE_temboo=y
CONFIG_PACKAGE_uSDaemon=y
CONFIG_PACKAGE_terminfo=y
CONFIG_PACKAGE_v8m-rb=m
CONFIG_PACKAGE_tune2fs=y
CONFIG_PACKAGE_uSDaemon=m
CONFIG_PACKAGE_uboot-ar71xx-linino-yun=y
CONFIG_PACKAGE_uhttpd=y
CONFIG_PACKAGE_uhttpd-mod-lua=y
CONFIG_PACKAGE_uhttpd-mod-ubus=y
CONFIG_PACKAGE_usbutils=y
CONFIG_PACKAGE_wget=y
CONFIG_PACKAGE_wireless-tools=y
CONFIG_PACKAGE_yun-conf=y
CONFIG_PACKAGE_yun-conf=y
CONFIG_PACKAGE_yun-scripts=y
CONFIG_PACKAGE_yun-scripts=y
CONFIG_PACKAGE_zlib=y
CONFIG_SDK=y
CONFIG_VERSIONOPT=y
CONFIG_VERSION_BUG_URL=""
CONFIG_VERSION_CODE=""
CONFIG_VERSION_DIST="OpenWrt"
CONFIG_VERSION_HOME_URL=""
CONFIG_VERSION_HWREV="1.0"
CONFIG_VERSION_MANUFACTURER="Arduino"
CONFIG_VERSION_MANUFACTURER_URL=""
CONFIG_VERSION_NUMBER=""
CONFIG_VERSION_PRODUCT="Arduino Yun"
CONFIG_VERSION_REPO="https://downloads.openwrt.org/snapshots"
CONFIG_VERSION_SUPPORT_URL=""
CONFIG_uhttpd_lua=y
# CONFIG_VERSION_CODE_FILENAMES is not set
# CONFIG_VERSION_FILENAMES is not set
</syntaxhighlight>
[https://raw.githubusercontent.com/nxhack/openwrt-yun-build-extra/master/openwrt-yun-lininoos.config openwrt-yun-lininoos.config]
== Difference between the LLC edition ==
'''IPv6 stack is enabled.'''


CONFIG_PACKAGE_kmod-nls-base=y
'''Device name of the leds has been changed.'''
CONFIG_PACKAGE_kmod-nls-cp437=y
'''ds:green:wlan''' -> '''arduino:blue:wlan'''
CONFIG_PACKAGE_kmod-nls-iso8859-1=y
'''ds:green:usb''' -> '''arduino:white:usb'''
CONFIG_PACKAGE_kmod-nls-utf8=y
[https://git.openwrt.org/?p=openwrt.git;a=blobdiff;f=target/linux/ar71xx/base-files/etc/uci-defaults/01_leds;h=39f472a5bb63896153f425f381714788a756d5ef;hp=1db6ad0482ccd308f84ffb080bcd5f11201fc70d;hb=914d4fc6219538640ce843b6cf2a6cab5d71db8a;hpb=124526b5b091e2c4487860bcea26099ec442d301 target/linux/ar71xx/base-files/etc/uci-defaults/01_leds]
[https://github.com/nxhack/openwrt-arduino-packages/commit/eb7130ac331ce491765f27372d987d9d7415f6c0 https://github.com/nxhack/openwrt-arduino-packages/commit/eb7130ac331ce491765f27372d987d9d7415f6c0]


CONFIG_PACKAGE_kmod-sdhci=y
'''Should be started before the Yun original startup script "S49generate_new_gpg_key".'''
To enable rngd, add rngd section to /etc/config/system
:<syntaxhighlight lang="bash" enclose="div">
config rngd
        option enabled '1'
        option device '/dev/urandom'
        option fill_watermark '4000'
</syntaxhighlight>


CONFIG_PACKAGE_kmod-gpio-button-hotplug=m
'''BUSYBOX ASH BANNER The date disappear.'''
CONFIG_PACKAGE_kmod-input-core=y
[https://git.openwrt.org/?p=openwrt.git;a=commit;h=39fabb5068e95ab9c0901dd4f37129111d88ae00 https://git.openwrt.org/?p=openwrt.git;a=commit;h=39fabb5068e95ab9c0901dd4f37129111d88ae00]
CONFIG_PACKAGE_kmod-input-evdev=y
:<syntaxhighlight lang="diff" enclose="div">
CONFIG_PACKAGE_kmod-input-gpio-encoder=m
+# don't create a version string containing the actual timestamp
CONFIG_PACKAGE_kmod-input-gpio-keys=m
+export KCONFIG_NOTIMESTAMP=1
CONFIG_PACKAGE_kmod-input-gpio-keys-polled=y
+
CONFIG_PACKAGE_kmod-input-joydev=m
</syntaxhighlight>
CONFIG_PACKAGE_kmod-input-matrixkmap=m
CONFIG_PACKAGE_kmod-input-polldev=y
CONFIG_PACKAGE_kmod-input-uinput=m


CONFIG_PACKAGE_libavahi-client=y
'''BUSYBOX ASH HELP Banner disappear.'''
CONFIG_PACKAGE_libavahi-dbus-support=y
CONFIG_ASH_HELP The default has been changed to 'n'.
CONFIG_PACKAGE_avahi-dbus-daemon=y
[https://github.com/openwrt/openwrt/blob/master/package/utils/busybox/Config-defaults.in#L2617 https://github.com/openwrt/openwrt/blob/master/package/utils/busybox/Config-defaults.in#L2617]
CONFIG_PACKAGE_avahi-dnsconfd=y
CONFIG_PACKAGE_avahi-utils=y


CONFIG_PACKAGE_gnupg=y
'''Add a configuration of the AR9331 as AVR writer to the original package.'''
CONFIG_PACKAGE_libgpg-error=y
[https://github.com/nxhack/openwrt-yun-build-extra/blob/master/files/etc/avrdude.conf#L1108-L1122 /etc/avrdude.conf]


CONFIG_PACKAGE_nano=y
/etc/avrdude.conf:
CONFIG_PACKAGE_curl=y
:<syntaxhighlight lang="text" enclose="div">
CONFIG_PACKAGE_wget=y
programmer
  id    = "linuxgpio";
  desc  = "Use the Linux sysfs interface to bitbang GPIO lines";
  type  = "linuxgpio";
  reset = ~18;
  sck  = 11;
  mosi  = 27;
  miso  = 8;
;
</syntaxhighlight>
</syntaxhighlight>


  [https://wiki.openwrt.org/doc/software/python Python OpenWrt Wiki]
  '''BUSYBOX: telnet is disabled.'''
nc localhost 6571


python-mini が python-light に変更されている。
'''PATH has changed.'''
<syntaxhighlight lang="text" enclose="div">
CONFIG_TARGET_INIT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" to CONFIG_TARGET_INIT_PATH="/usr/sbin:/usr/bin:/sbin:/bin"
If you are using Chaos Calmer then python-mini package is replaced by python-light package. Currently python package adds a lot of dependencies so we suggest that you don't even try to install full version, unless you have at least 50MB of free space on your flash storage.
 
'''uhttpd: SSL is forced.'''
option redirect_https '1'
[https://github.com/nxhack/openwrt-arduino-packages/tree/for-trunk/yun-conf/files/etc/config/uhttpd#L7 /etc/config/uhttpd]
enable openssl-util libustream-openssl
CONFIG_OPENSSL_WITH_COMPRESSION=y
 
'''uhttpd: Use URL alias handle. Do not apply alias patch.'''
[https://github.com/nxhack/openwrt-arduino-packages/tree/for-trunk/yun-conf/files/etc/config/uhttpd#L20-L22 /etc/config/uhttpd]
 
:Add to /etc/config/uhttpd
:<syntaxhighlight lang="text" enclose="div">
list alias '/arduino=/cgi-bin/luci'
list alias '/data=/cgi-bin/luci'
list alias '/mailbox=/cgi-bin/luci'
</syntaxhighlight>
</syntaxhighlight>


= Important concept of OpenWrt =
'''Procd button mechanism exists. triggerhappy is not required.'''
'''The Minimized is Highest Priority. This is the large difference in policy between PC GNU/Linux and OpenWrt.'''
(triggerhappy use HID button mechanism, It depends on kmod-input-*)
(kmod-gpio-button-hotplug + procd buttons, Of course, smaller footprint)
I sent PR, adding ath79_register_gpio_keys_polled.
[https://git.openwrt.org/?p=openwrt.git;a=commit;h=10ae130265302c717b1580514ada28d9a48a2484 https://git.openwrt.org/?p=openwrt.git;a=commit;h=10ae130265302c717b1580514ada28d9a48a2484]
[https://github.com/nxhack/openwrt-arduino-packages/tree/for-trunk/yun-conf/files/etc/hotplug.d/button/00-button /etc/hotplug.d/button/00-button]
[https://github.com/nxhack/openwrt-arduino-packages/tree/for-trunk/yun-conf/files/etc/config/system#L19-L28 /etc/config/system]
 
:Add button section to /etc/config/system.
:<syntaxhighlight lang="bash" enclose="div">
config button
        option button  'wps'
        option action  'pressed'
        option handler '/usr/bin/wifi-reset-button-pressed'
 
config button
        option button  'wps'
        option action  'released'
        option handler '/usr/bin/wifi-reset-button-released'
</syntaxhighlight>


:OR add button section to /etc/config/system.
:<syntaxhighlight lang="bash" enclose="div">
config button
        option button  'wps'
        option action  'pressed'
        option handler '/usr/bin/blink-start 100'


'''サイズが最小限になるようにコンフィグレーションすることが最優先。これが PC GNU/Linux と大きな方針の差であることに気がついた。'''
config button
        option button  'wps'
        option action  'released'
        option handler '/usr/bin/blink-stop'


= Trunk version of OpenWrt-Yun package and build environment =
config button
調査・実験中...
        option button  'wps'
  [https://github.com/nxhack/openwrt-arduino-packages https://github.com/nxhack/openwrt-arduino-packages]
        option action 'released'
[https://github.com/nxhack/openwrt-yun-build-extra https://github.com/nxhack/openwrt-yun-build-extra]
        option min    '5'
        option max    '30'
        option handler '/usr/bin/wifi-reset-and-reboot'


= OpenWrt-Yun build memo =
config button
LLC edition OpenWrt-Yun:
        option button  'wps'
<syntaxhighlight lang="bash" enclose="div">
        option action  'released'
git clone --depth=1 --branch master --single-branch https://github.com/arduino/openwrt-yun.git
        option min    '30'
        option max    '999'
        option handler '/usr/bin/reset-to-factory-anyway'
</syntaxhighlight>
</syntaxhighlight>
RedSnake64 edition OpenWrt-Yun:
 
<syntaxhighlight lang="bash" enclose="div">
'''Definitely enable MIPS_FPU_EMULATOR. (disabled by default config)'''
git clone --depth=1 --branch 15.05 --single-branch https://github.com/RedSnake64/openwrt-yun.git
For reduce kernel size, change the kernel config.
  1. Limit the target architecture to MIPS 24Kc. AR933X, AR724X
  2. Limit the target board.
  3. Enable PCI. need for making various packages.
[https://raw.githubusercontent.com/nxhack/openwrt-yun-build-extra/master/openwrt-yun-lininoos.config openwrt-yun-lininoos.config]
 
:check fpu emu debugfs
:<syntaxhighlight lang="bash" enclose="div">
ls -l /sys/kernel/debug/mips/fpuemustats
</syntaxhighlight>
</syntaxhighlight>


LLC 版と RedSnake64 版を参考に、本家の trunk でビルド可能にする。
= memo =
== Arduino IDE Bridge Library ==
Must apply this patch.
<syntaxhighlight lang="diff" enclose="div">
--- a/Bridge/src/Bridge.cpp
+++ b/Bridge/src/Bridge.cpp
@@ -52,7 +52,7 @@
    // Wait for OpenWRT message
    // "Press enter to activate console"
    stream.print(F("run-bridge\n"));
-    delay(500);
+    delay(5000);
    dropAll();
 
    // Reset the brigde to check if it is running
</syntaxhighlight>


Origin OpenWrt:
== refresh fstab : uci ==
<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
git clone --depth=1 --branch master --single-branch https://github.com/openwrt/openwrt.git
uci delete fstab.@mount[0]
uci delete fstab.@mount[0]
uci commit
</syntaxhighlight>
</syntaxhighlight>


Ubuntu 14.04 環境でクロスコンパイルのための準備。
<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
apt-get update
uci set fstab.automount=global
apt-get install -y git subversion build-essential asciidoc \
uci set fstab.automount.from_fstab='1'
fastjar flex gawk libgtk2.0-dev intltool zlib1g-dev \
uci set fstab.automount.anon_mount='1'
genisoimage libncurses5-dev libssl-dev ruby sdcc unzip \
uci commit
bison libboost-dev libxml-parser-perl libusb-dev bin86 \
bcc sharutils openjdk-7-jdk mercurial cvs bzr \
nodejs-legacy curl g++-multilib squashfs-tools
</syntaxhighlight>
</syntaxhighlight>
:出来上がった Image の検証用に squashfs-tools も入れておく。 (unsquashfs openwrt-ar71xx-generic-yun-16M-squashfs-sysupgrade.bin)


[https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions Installing Node.js via package manager | Node.js]
== extroot ==
:Ubuntu 純正パッケージの nodejs, npm 使うとビルドこける。
<syntaxhighlight lang="bash" enclose="div">
opkg update
opkg install e2fsprogs dosfstools fdisk rsync badblocks tune2fs
# opkg install kmod-fs-f2fs mkf2fs f2fsck
cd /usr/sbin
ln -s fsck.fat dosfsck
cd /
umount /dev/sda1
### Destroy partition information.
dd if=/dev/zero of=/dev/sda bs=4096 count=1000
### FAT32 = 14G, ext4 = 14G, else swap
(echo o; echo n; echo p; echo 1; echo; echo +14G; echo n; echo p; echo 2; echo; echo +14G; echo n; echo p; echo 3; echo; echo; echo t; echo 1; echo c; echo t; echo 3; echo 82; echo w) | fdisk /dev/sda
mkfs.fat /dev/sda1
mkfs.ext4 /dev/sda2
mkswap /dev/sda3
mkdir -p /mnt/sda2
mount /dev/sda2 /mnt/sda2
cd /
tar -C /overlay -cvf - . | tar -C /mnt/sda2 -xf -
# rsync -a --exclude=/mnt/ /overlay/ /mnt/sda2/
umount /dev/sda2
rm -rf /mnt/sda2
 
# check /etc/config/fstab
# remove unused fstab entry at booting time.


[https://downloads.openwrt.org/sources/ https://downloads.openwrt.org/sources/]
uci add fstab mount
:パッケージのソースの取得に失敗する場合はここからとって ./dl/ 配下に置いておく。
uci set fstab.@mount[0].target=/overlay
uci set fstab.@mount[0].device=/dev/sda2
uci set fstab.@mount[0].fstype=ext4
uci set fstab.@mount[0].enabled=1
uci set fstab.@mount[0].check_fs=1
uci set fstab.@mount[0].options=rw,sync,noatime,nodiratime
uci commit
reboot
</syntaxhighlight>


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
wget http://pkgs.fedoraproject.org/repo/pkgs/libconfuse/confuse-2.7.tar.gz/45932fdeeccbb9ef4228f1c1a25e9c8f/confuse-2.7.tar.gz
cd /mnt/sda2
wget http://pkgs.fedoraproject.org/repo/pkgs/avrdude/avrdude-6.1.tar.gz/9db8c25b935d34234b9b1ba16ad55fd5/avrdude-6.1.tar.gz
rm -rf *
rm -rf .??*
cd /
tar -C /overlay -cvf - . | tar -C /mnt/sda2 -xf -
 
uci add fstab mount
uci set fstab.@mount[0].target=/overlay
uci set fstab.@mount[0].device=/dev/sda2
uci set fstab.@mount[0].fstype=ext4
uci set fstab.@mount[0].enabled=1
uci set fstab.@mount[0].check_fs=1
uci set fstab.@mount[0].options=rw,sync,noatime,nodiratime
uci commit
reboot
</syntaxhighlight>
</syntaxhighlight>


./feeds.conf.default:
<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="text" enclose="div">
block detect > /etc/config/fstab ; vi /etc/config/fstab
src-git packages https://github.com/openwrt/packages.git
# edit /etc/config/fstab : Set all enabled '0' -> enabled '1' exclude extroot device
src-git luci https://github.com/openwrt/luci.git
src-git routing https://github.com/openwrt-routing/packages.git
src-git telephony https://github.com/openwrt/telephony.git
src-git management https://github.com/openwrt-management/packages.git
##src-git targets https://github.com/openwrt/targets.git                                                                     
#src-git oldpackages http://git.openwrt.org/packages.git                                                                     
#src-svn xwrt http://x-wrt.googlecode.com/svn/trunk/package                                                                 
#src-svn phone svn://svn.openwrt.org/openwrt/feeds/phone                                                                     
#src-svn efl svn://svn.openwrt.org/openwrt/feeds/efl                                                                         
#src-svn xorg svn://svn.openwrt.org/openwrt/feeds/xorg                                                                       
#src-svn desktop svn://svn.openwrt.org/openwrt/feeds/desktop                                                                 
#src-svn xfce svn://svn.openwrt.org/openwrt/feeds/xfce                                                                       
#src-svn lxde svn://svn.openwrt.org/openwrt/feeds/lxde                                                                       
#src-link custom /usr/src/openwrt/custom-feed                                                                               
#src-git arduino https://github.com/RedSnake64/openwrt-arduino-packages.git;for-15.05
src-git arduino https://github.com/nxhack/openwrt-arduino-packages.git;for-trunk
</syntaxhighlight>
</syntaxhighlight>
:これでビルド実験中...


./build.sh:
After firmware upgrade with luci.(backup, sysupgrade, restore)
<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
#!/bin/bash -ex
# edit /etc/opkg.conf
# remove extroot settings
opkg update
opkg install e2fsprogs dosfstools fdisk rsync badblocks tune2fs
mkdir -p /mnt/sda2
mount /dev/sda2 /mnt/sda2
rm /mnt/sda2/etc/.extroot-uuid
umount /mnt/sda2


#FEEDS
# check /etc/config/fstab
./scripts/feeds uninstall -a
# remove unused fstab entry at booting time.
rm -rf feeds
./scripts/feeds update -a
./scripts/feeds install -a


#UNINSTALL BROKEN PACKAGES
uci add fstab mount
#./scripts/feeds uninstall aria2 freecwmp libfreecwmp libmicroxml crtmpserver dansguardian
uci set fstab.@mount[0].target=/overlay
uci set fstab.@mount[0].device=/dev/sda2
uci set fstab.@mount[0].fstype=ext4
uci set fstab.@mount[0].enabled=1
uci set fstab.@mount[0].check_fs=1
uci set fstab.@mount[0].options=rw,sync,noatime,nodiratime
uci commit
reboot
</syntaxhighlight>


#DELETE PACKAGES
Accessing original root
rm -rf ./package/feeds/packages/node-serialport
[https://lede-project.org/docs/user-guide/extroot_configuration#accessing_original_root https://lede-project.org/docs/user-guide/extroot_configuration#accessing_original_root]
rm -rf ./package/feeds/packages/node-arduino-firmata
<syntaxhighlight lang="bash" enclose="div">
config mount
option target /overlay-boot
option device /dev/mtdblock3
option fstype jffs2
option options rw,sync
option enabled 1
option check_fs 0
</syntaxhighlight>


#LINK CUSTOM PACKAGES
== basic tools setup : opkg ==
ln -s ../../../feeds/arduino/node-serialport ./package/feeds/arduino/
<syntaxhighlight lang="bash" enclose="div">
ln -s ../../../feeds/arduino/node-arduino-firmata ./package/feeds/arduino/
# edit /etc/opkg.conf for extroot
opkg update
opkg list-upgradable
opkg install unzip
opkg install screen
opkg install coreutils-ls coreutils-stty
opkg install dropbearconvert
opkg install e2fsprogs fdisk dosfstools badblocks tune2fs
opkg install avahi-utils avahi-daemon-service-ssh
# opkg install kmod-fs-f2fs mkf2fs f2fsck
opkg install rsync
opkg install diffutils
opkg install logrotate
opkg install mg
opkg install openssh-client --force-overwrite
opkg install procps-ng procps-ng-ps procps-ng-w procps-ng-vmstat procps-ng-watch
opkg install procps-ng-top --force-overwrite
</syntaxhighlight>


#PATCH SOME PACKAGES
<syntaxhighlight lang="bash" enclose="div">
sed -i -e s/^START=98/START=48/ ./feeds/packages/utils/rng-tools/files/rngd.init
mkdir -p -m 1777 /usr/local/var/tmp
export TMPDIR=/usr/local/var/tmp
opkg install python-pip
opkg install python-six
# Edit /etc/pip.conf
#  cache-dir=/usr/local/var/tmp/.cache
#  log-file=/usr/local/var/tmp/pip-log.txt
# pip install --upgrade pip
pip install beaver
pip install supervisor
</syntaxhighlight>
:If OOM occurs, re-run pip. or use swap


#COPY CONFIG FILE
:[https://gist.github.com/nxhack/71e7988e60106de14564 python supervisor startup script for OpenWrt-yun]
mv .config .config.$$
cp openwrt-yun-minimum.config .config


make oldconfig
: my local setup
make
<syntaxhighlight lang="bash" enclose="div">
/etc/init.d/cron enable
/etc/init.d/cron start
</syntaxhighlight>
</syntaxhighlight>
:純正パッケージには(ar71xx環境では)コンパイルできない壊れたものもいろいろある。


== Difference between the LLC edition ==
== dosfsck --> fsck.fat ==
<syntaxhighlight lang="bash" enclose="div">
cd /
umount /mnt/sda1
fsck.fat -y -v -w /dev/sda1
mount /dev/sda1 /mnt/sda1
</syntaxhighlight>


led の デバイス名が 変更になった。純正に合わせる。
<syntaxhighlight lang="bash" enclose="div">
'''arduino:blue:wlan'''  '''arduino:white:usb'''
cd /usr/sbin
[https://git.openwrt.org/?p=openwrt.git;a=blobdiff;f=target/linux/ar71xx/base-files/etc/uci-defaults/01_leds;h=39f472a5bb63896153f425f381714788a756d5ef;hp=1db6ad0482ccd308f84ffb080bcd5f11201fc70d;hb=914d4fc6219538640ce843b6cf2a6cab5d71db8a;hpb=124526b5b091e2c4487860bcea26099ec442d301 target/linux/ar71xx/base-files/etc/uci-defaults/01_leds]
ln -s fsck.fat dosfsck
[https://github.com/nxhack/openwrt-arduino-packages/commit/eb7130ac331ce491765f27372d987d9d7415f6c0 https://github.com/nxhack/openwrt-arduino-packages/commit/eb7130ac331ce491765f27372d987d9d7415f6c0]
</syntaxhighlight>


rng-tools は純正版ではだめ LLC 版の init script に合わせる。
== fsck ==
S98rngd -> S48rngd
START=98 -> START=48
START=98 から START=48 にしないと Yun独自の起動スクリプト S49generate_new_gpg_key で不具合がでる。これより前に rngd を起動する必要がある。
package build の前に rngd.init を変更する。
<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
sed -i -e s/^START=98/START=48/ ./feeds/packages/utils/rng-tools/files/rngd.init
opkg install badblocks
</syntaxhighlight>
</syntaxhighlight>


BUSYBOX ASH BANNER の日付がなぜか出ない。
<syntaxhighlight lang="bash" enclose="div">
表示しないように変更されていた。
e2fsck -t -y -f -c /dev/sda2
[https://git.openwrt.org/?p=openwrt.git;a=commit;h=39fabb5068e95ab9c0901dd4f37129111d88ae00 https://git.openwrt.org/?p=openwrt.git;a=commit;h=39fabb5068e95ab9c0901dd4f37129111d88ae00]
<syntaxhighlight lang="diff" enclose="div">
+# don't create a version string containing the actual timestamp
+export KCONFIG_NOTIMESTAMP=1
+
</syntaxhighlight>
</syntaxhighlight>


BUSYBOX ASH HELP のバナーが出ない。
== YunFirstConfig ==
CONFIG_ASH_HELP がデフォルトが n に変更されていた。
  https://www.arduino.cc/en/Tutorial/YunFirstConfig
  [https://github.com/openwrt/openwrt/blob/master/package/utils/busybox/Config-defaults.in https://github.com/openwrt/openwrt/blob/master/package/utils/busybox/Config-defaults.in]
 
https://github.com/arduino-libraries/Bridge/tree/master/examples/YunFirstConfig


  AR9331 を AVR ライタにするために /etc/avrdude.conf に設定追加する。
== Luci and arduino-webpanel ==
  https://github.com/arduino/lede-yun/commit/565508f99cc8922d55b47554de98f7dcb441a461#diff-f2fe3255fb192223dd3dbef288fe215f


== mDNS ==
<syntaxhighlight lang="text" enclose="div">
<syntaxhighlight lang="text" enclose="div">
programmer
host-name-from-machine-id=no
  id    = "linuxgpio";
host-name=MY_HOST_NAME
  desc  = "Use the Linux sysfs interface to bitbang GPIO lines";
domain-name=local
  type  = "linuxgpio";
</syntaxhighlight>
  reset = ~18;
 
  sck  = 11;
== homebridge ==
  mosi  = 27;
<syntaxhighlight lang="bash" enclose="div">
  miso  = 8;
opkg install node-homebridge
;
opkg install sudo
npm install -g homebridge-temperature-cmd
npm install -g homebridge-humidity-cmd
</syntaxhighlight>
 
== IGMP querierd ==
<syntaxhighlight lang="bash" enclose="div">
opkg install querierd
</syntaxhighlight>
edit /etc/querierd
:supesify a interface
 
<syntaxhighlight lang="bash" enclose="div">
/etc/init.d/querierd enable
/etc/init.d/querierd start
</syntaxhighlight>
</syntaxhighlight>


== TO DO ==
== drop caches ==
#rc.local
<syntaxhighlight lang="bash" enclose="div">
#: LLC の openwrt-yun 直下の files ディレクトリ以下を build する直下にもってくる。
echo 3 > /proc/sys/vm/drop_caches
#: LLC の files 配下の lib ディレクトリ以下のファイルはバージョンが合わず、置き換えてはいけない。ハマった。
#: RedSnake64 版の files をベースに必要なものを吟味して追加する。
#uboot-linino コンパイルエラーとる
#:extern inline -> static inline, extern __inline__ -> static inline
#::ブートローダの書き換え失敗したら完全に文鎮になるので検証はこわくてできない。
#.config 差異
#DISTRIB_TAINTS 意味調査
#:./include/version.mk 確認する。OpenWrt snapshot では、最終的に DISTRIB_TAINTS="" である。
#BUSYBOX 差異
#:デフォルトが微妙にちがう。OpenWrt 本家を基本にするにはデフォルトは変更しない方針にする。
#:気持ち悪いのが CROND_DIR="/var/spool/cron" から CROND_DIR="/etc" になっている事。動いてから考えよう。
#純正パッケージの patch
#:build.sh に純正パッケージのパッチを当てる処理を追加する。
#SD card の automount 方法調査する。(uSDaemon がいまいちすぎるので)
#:OpenWrt (e)udev まだ試していないが。
#::/etc/udev/rules.d/11-sd-cards-auto-mount.rules
#::<syntaxhighlight lang="text" enclose="div">
KERNEL!="sda[0-9]", GOTO="sd_cards_auto_mount_end"
# Global mount options
ACTION=="add", ENV{mount_options}="relatime"
# Filesystem specific options
ACTION=="add", IMPORT{program}="/sbin/blkid -o udev -p %N"
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"
ACTION=="add", RUN+="/bin/mkdir -p /mnt/%k", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%k"
ACTION=="remove", RUN+="/bin/umount -l /mnt/%k", RUN+="/bin/rmdir /mnt/%k"
# exit
LABEL="sd_cards_auto_mount_end"
</syntaxhighlight>
</syntaxhighlight>
#::<syntaxhighlight lang="bash" enclose="div">
 
udevadm control --reload-rules
== network ==
eth1 -> wan
wlan0 -> lan
 
[https://github.com/nxhack/openwrt-arduino-packages/blob/for-trunk/yun-conf/files/etc/config/network /etc/config/network]
[https://github.com/nxhack/openwrt-arduino-packages/blob/for-trunk/yun-conf/files/etc/config/firewall#L22 /etc/config/firewall]
[https://github.com/nxhack/openwrt-yun-build-extra/blob/master/files/etc/config/dhcp#L18 /etc/config/dhcp]
 
== Secure ==
[https://wiki.openwrt.org/doc/howto/secure.access Secure your router's access]
 
[https://wiki.openwrt.org/inbox/howto/dropbear-security Dropbear Security]
 
== revision check ==
<syntaxhighlight lang="bash" enclose="div">
./scripts/getver.sh
</syntaxhighlight>
</syntaxhighlight>
#::なるほど、(e)udev を使わないのはサイズの問題だね。system image はできるだけ小さくするのが最優先になっている。
#hardware button の処理 procd ???? triggerhappy ? 検証する。
#: /dev/input* が無い。
#:: input-gpio-keys-polled でエラー 調査する。
#:: Error: Driver 'gpio-keys-polled' is already registered, aborting...
#:::本家 [https://github.com/openwrt/openwrt/blob/master/target/linux/ar71xx/files/arch/mips/ath79/mach-arduino-yun.c https://github.com/openwrt/openwrt/blob/master/target/linux/ar71xx/files/arch/mips/ath79/mach-arduino-yun.c] に ath79_register_gpio_keys_polled が無い。
#::: パッチつくった [https://github.com/nxhack/openwrt-yun-build-extra/blob/master/patches/00-arduino-yun-gpio_keys_polled.patch 00-arduino-yun-gpio_keys_polled.patch]
#:::: pull req どーやったらいいのか...
#: "gpio-button-hotplug" がおかしい気がする。上記のパッチあてて kmod-input 系に置き換えると動作した。
#: cat /sys/kernel/debug/gpio
#: どこかで "insmod gpio-button-hotplug" してやれば kmod-input なしでいけそう。検証する。だめだった。
#:: [https://github.com/nxhack/openwrt-yun-build-extra/blob/master/files/lib/preinit/05_enable_reset_button_ar71xx https://github.com/nxhack/openwrt-yun-build-extra/blob/master/files/lib/preinit/05_enable_reset_button_ar71xx]
#::: 設定削除した。もういちど通常の kmod-input-* にもどして次に行く。やはり gpio-button-hotplug" がなぜ動かないのかソース読む。
#: procd で /etc/rc.button でどんな設定していいか...
#: procd は inetd の賢い版 なにやれるのかドキュメントがないのでソースよむか...
#opkg packages
#: procps -> procps-ng, procps-ng-ps, procps-ng-w, procps-ng-top
#: logrotate がないので作った。
#: python-pip があった


= Bricked =
= Bricked =
  [http://playground.arduino.cc/Hardware/Yun#restoring_a_yun My Yún doesn't boot anymore! How can I restore it?]
  [http://playground.arduino.cc/Hardware/Yun#restoring_a_yun My Yún doesn't boot anymore! How can I restore it?]


YunSerialTerminal をロードしてシリアルコンソールを有効にする。SDカードは抜いておく事。YUN RST ボタンをおす。
Load YunSerialTerminal to enable serial console. Unplug SD card . Press 'YUN RST' button.


#YunSerialTerminal で prompt が出て OS の操作ができる場合。
#If the prompt is out && if the OS can operable.
##なんとかして network を生かす。
##Enabling the network.
##:<syntaxhighlight lang="bash" enclose="div">
##:<syntaxhighlight lang="bash" enclose="div">
ifconfig インターフェース IPアドレス
ifconfig IF IP
route add default gw どこか
route add default gw somewhere
</syntaxhighlight>
</syntaxhighlight>
##:/etc/resolv.conf を編集。
##:Edit /etc/resolv.conf
##SD card で正常な sysupgrade のイメージをもってくる。
##Bring the official sysupgrade image via SD card.
##:<syntaxhighlight lang="bash" enclose="div">
##:<syntaxhighlight lang="bash" enclose="div">
mkdir /mnt/sda1
mkdir /mnt/sda1
mount -t vfat /dev/sda1 /mnt/sda1
mount -t vfat /dev/sda1 /mnt/sda1
</syntaxhighlight>
</syntaxhighlight>
#YunSerialTerminal で u-boot を操作できる場合。
#If you can operate the u-boot via YunSerialTerminal.
##[https://www.arduino.cc/en/Tutorial/YunUBootReflash https://www.arduino.cc/en/Tutorial/YunUBootReflash]
##[https://www.arduino.cc/en/Tutorial/YunUBootReflash https://www.arduino.cc/en/Tutorial/YunUBootReflash]
= TO DO =
#uboot-linino
#:Once the bootloader rewrite fails, I am afraid that completely become brick...
#/etc/opkg.conf, /etc/opkg/distfeeds.conf, /etc/opkg/customfeeds.conf
#:Since the strange message came out, modified distfeeds.conf, It is correct to modify opkg.conf.
#::* opkg_conf_parse_file: Duplicate src declaration
#:[https://wiki.openwrt.org/doc/techref/opkg https://wiki.openwrt.org/doc/techref/opkg]
#:[https://wiki.openwrt.org/doc/packages https://wiki.openwrt.org/doc/packages]
#:Specification seems not yet settled.
#OOM
#:(extroot environment)
#::/etc/opkg/distfeeds.conf : Limit repositories.
#::/etc/opkg.conf : lists_dir ext /var/opkg-lists place not tmpfs. ex. lists_dir ext /usr/local/var/opkg-lists
#::/etc/opkg.conf : Add 'option force_space'
#:<syntaxhighlight lang="text" enclose="div">
lists_dir ext /usr/local/var/opkg-lists
option tmp_dir /usr/local/var/tmp
option force_space
</syntaxhighlight>
#:'''Anyway,  Do not place any objects to /tmp and /var (symlink of /tmp).'''
#sysupgrade with ExtRoot
#: [http://wiki.mbirth.de/know-how/software/openwrt/sysupgrade-with-extroot.html sysupgrade with ExtRoot :: wiki.mbirth.de]
#:<syntaxhighlight lang="bash" enclose="div">
sysupgrade ...
# reboot...
rm /mnt/sda2/etc/.extroot-uuid
reboot
#...
opkg update
opkg upgrade $(opkg list-upgradable | awk '($1 !~ "^kmod|Multiple") {print $1}')
</syntaxhighlight>
#LEDE Project
#: [https://www.lede-project.org/ https://www.lede-project.org/]
#Kernel 4.4
#:How can I reduce kernel size?
#::It does not fit in 1280k.
#:[https://github.com/lede-project/source/pull/1145/commits/105afb63e97cae24890cd76952c80366b2db9921 ar71xx: make arduino yun work with kernel size > 1280k and use generic.mk by camille-hack · Pull Request #1145 · lede-project/source]
#:[https://github.com/lede-project/source/pull/1145 ar71xx: make arduino yun work with kernel size > 1280k and use generic.mk by camille-hack · Pull Request #1145 · lede-project/source]
#::Merged!!!
#PKG DPENDS
#:<syntaxhighlight lang="bash" enclose="div">
To find missing library provider, if the case is not obvious (usually it is just a library name), you may search in $STAGING_DIR/pkginfo folder.
</syntaxhighlight>