XTMOD EX 3.0 for NexBox A95x (s905x 1G/8G)

XDAフォーラムにあるカスタムROMが動かなかったので作成してみました。TX3 PROは動きますがなぜかNexBox A95xだけは動きません。

https://mega.nz/#F!BOJngI6R!V4HRKaKSyomO9b1L1ijOcA

カスタマイズするとこんな感じになります。

4000円以下のAndroid BOXでキーボードとマウスを接続してデスクトップPCとして結構使えます。RAMが1GBしかないのでアプリを厳選して使うとストレスが少ないと思います。デスクトップとして使う場合は2GBあると良いでしょう。不便な点はAndroidはスマートフォンやタブレット向けのOSなのでどうしてもスワイプを使うアプリだとうまく使いこなせません。たとえばGoogle Earthはズームができません。リモコンのみで使う場合ではスクロールができないのでストレスを感じますがPuffinブラウザでは仮想コントロールが左下にあるのでそれを使ってスクロール等の操作はできます。このタイプのTV BOXは音楽プレーヤやYoutubeなどのマルチメディア再生をメインとして使うのでブラウザなどのアプリは補助的な用途として考えた方がよいでしょう。

 

Android TV BOXにLibreELECをインストールする

 

最近はテレビにつながるAndroid BOXが売られています。テレビのHDMIにつなげてホームサーバと連携して動画を再生したりNETFLIXのようなオンラインTVを楽しむことができます。このAndroid BOXは一昔前の中華Padを思わせるような、名も知らないメーカーから数多く市場に出回っています。特にAMLogicのSoCを使った製品が性能が高く多くの中華製品に見られます。興味があったのでアマゾンで見つけた最安値の製品、NEXBOX A95X Amlogic S905X(1GB RAM 8GB ROM )を取り寄せてみました。アマゾンのレビューではあまり評価が芳しくありません。いろいろ調べてみるとこの Amlogic S905Xを使った製品はどれもそれほど違わず、性能的には大差ないと思われます。

テレビはないのでパソコンのモニターに繋げてみました。上のホーム画面とは少し違いますがつなげれば使えるようになっています。少し動かしてみると画面がちらついたり隅のあたりがかすれていたり、どうもクオリティが今一つです。いろんなアプリが入っていますが何と言っても目玉の売りのアプリはKODIです。メーカごとに独自の名前をつけてますが、中身はれっきとしたKODIです。多少カスタマイズされててアドオンがプレインストールされていたりします。KODIで試しに再生してみると非常にスムーズできれいに再生できました。それはAMLogicの優れたSoCが性能を発揮してるためです。中身がKODI以外は残念なので入れ替えることにしました。XDAのフォーラムをみてカスタムROMをインストールしてみることにしました。ただし結果は散々たる有様でROMをフラッシュしたとたん赤ランプに変わり文鎮化してしまったのです。

AMLogicのSoCの場合は同じSoCにも関わらずちょっとした差異でもカスタムROMが適用外となりアップグレードしたものの文鎮化という結果になります。メーカーが違ってもアップグレードできることもありAMLogicのSoCは厄介な感じです。そこでいろいろと情報を集めてみました。それとNEXBOXは文鎮化してしまったので、これは勉強代として違うメーカーの製品、Lovicool TX3PROも取り寄せました。スペックは同じです。

AMLogic製品のアップグレード方法

Android系のスマートホンやタブレットにカスタムROMを入れる場合、まずカスタムリカバリーのTWRPを入れて、それを使ってアップグレードします。仮に間違ったROMを入れてもTWRPを立ち上げて正しいROMを入れればいいので心配ありません。AMLogic製品のアップグレードはIMGファイルを使ったアップグレードなのでTWRPは使いません。あえて使うとすればROMをバックアップするときくらいです。アップグレードは専用のソフト( Amlogic_USB_burning_tool_2.0.8)を使ったUSBでアップグレードする方法とSD( BootcardMaker v2.0.0.2)を使った方法があります。

SDでアップグレードするときはIMGファイルをBurn Card Maker v2.0.0.2を使ってマイクロSDに書き込みます。私の場合どうもうまくできなかったのでBootcardMaker v1.0.1でu-boot.binをマイクロSDカードに書き込み、そのあとBurn Card Maker v2.0.0.2を使ってROMイメージを書き込みました。

アップグレードは Amlogic USB burning toolの方が確実にできます。また文鎮化した場合にはこの方法でしか回復できません(シリアルを使う場合も試しましたがうまく行きませんでした)。 Amlogic USB burning toolもなかなか癖がありデバイスをなかなか認識しません。Windowsのドライバーを何度かインストールしてみましたがあまり関係ないようです。Linuxのlsusbで調べたらデバイスを認識してませんでした。試行錯誤して最初にAmlogic USB burning toolを立ち上げ、つぎにUSBケーブルをつなぎ、AC電源を入れると認識しやすくなりました。

LibreELEC

LibreELECはKODIに特化したROMです。ほかにもOpenELECがあるのですが基本はKODI専用機です。ほかにはデビアン系のARMBIANやUBUNTUがあるのですが、Xwindowデスクトップを動かすには非力過ぎます。似たようなスペックのChromeBookを使ってUbuntuを入れてますがLXDEや軽いTrustyのKDEでなんとか使えるレベルです。最近のデバイスは性能が向上しているとはいえ実用的レベルではないので、ミニマリズム的考え方でLibreELECを入れてみました。フォーラムでかなり親切に解説されているのでよく読んでインストールします。LibreELEC.USB-SD.CreatorでマイクロSDを焼いたあと、dtb.imgをマイクロSDの中のものと置き換えます。

マイクロSDをブートさせるにはかなり機種ごとにばらつきがありますが、大き分けてリセットボタンのあるタイプをないタイプがあります。リセットボタンのあるタイプはボタンを押しながら電源を入れればマイクロSDをブートできます。リセットボタンのないタイプはAndoroidのターミナルエミュレータからreboot updateでマイクロSDがブートします。

LibreELECはマイクロSDから起動するのでROM焼きのリスクがないのが良いところです。起動して問題なかったら内部メモリにインストールすることもできます。

LibreELECの問題の一つはリモコンがまず動かなくなります。カスタマイズはかなり面倒なので当面は使ってなかったスマホをKODIのリモコンアプリを入れて使うことにしました。

 

References

 

Tor + Polipoを導入する

Torはプライバシー保護のためネット経路を分散化するツールです。Torだけでも良い気がしますがProxyを挟むと接続がスムーズになるそうなので、Torの導入に合わせてProxyのPolipoも入れてみます。

構築方法は大きく分けて2つあり、個々のPCで構築する方法と、ルーターに入れてネットから接続する方法とあります。

個々のPCに導入する方法

Torブラウザをインストールするのが一番簡単ですが、今回はmacOSにTorを導入してみました。

brew install tor

/usr/local/etc/tor/torrc:

SocksPort 9050
Log notice syslog
DataDirectory /usr/local/Cellar/tor/data
ControlPort 9051
DisableDebuggerAttachment 0
HardwareAccel 1

~/.polipo:

proxyAddress =127.0.0.1
proxyPort = 8123
allowedClients = 127.0.0.1
allowedPorts = 1-65535
proxyName = localhost
cacheIsShared = false
socksParentProxy = localhost:9050
socksProxyType = socks5
chunkHighMark = 67108864
dnsUseGethostbyname = yes
disableVia = true
censoredHeaders = from,accept-language,x-pad,link
censorReferer = maybe
maxConnectionAge = 5m
maxConnectionRequests = 120
serverMaxSlots = 8
serverSlots = 2
tunnelAllowedPorts = 1-65535
logSyslog = true
scrubLogs = false

macOSのプロキシの設定: Socksを除きポートは8123

モニターのアプリarmをインストール

brew install arm

Poliloの設定を調べるには次のアドレスにアクセスします。

http://127.0.0.1:8123/polipo/config

 

ルーターに入れる方法(OpenWrtの場合

主にWi-Fi経由のアクセスになります。VLANでネットワークを分けて通常のネットワークと切り離して使います。

Torはメモリを多く必要としているので最小限64MBは必要です。インターネットに繋がっているルーターにはいろいろなデーモンを動かしているので負荷の少ないハブ代わりに使っているルーターにインストールしてみました。

ネットワーク図:

192.168.1.0/24
VLAN1(通常のLAN) ----+
                     |--Router--Internet
VLAN2(Tor Network)---+
192.168.2.0/24

 

OpenWrtのダッシュボードのNetworkでインターフェース(例:TRANSTOR)を作ります。

例)General Setup:

Protocol: Static Address
IPv4 address: 192.168.2.1
IPv4 netmask: 255.255.255.0
DHCP Server
  Start: 100
  Limit: 125
  Leasetime:12h
Advanced Settings
 DHCP-Options:6,192.168.2.1
              3,192.168.2.254

例)Physical Settings:

  • Bridge interfaces: チェックを入れます
  • VLAN Interface: “eth0.2” (transtor)

WIFIを設定します。

  • Wireless Network: Master “Tor” (transtor)

Switchを設定します。

Firewallを設定します。

  • Zones: Wifi(trantor) Input:accept Output:accept Forward:reject

インターネットのGWの親機のルーターも同様に設定します。

パッケージをインストールします。

opkg update
opkg install tor
opkg install polipo luci-app-polipo

PolipoとTorの設定です。

例)/etc/config/polipo:

config polipo 'daemon'
 option daemonise '1'
 option pidFile '/var/run/polipo.pid'

config polipo 'general'
 option enabled '1'
 option proxyAddress '0.0.0.0'
 option allowedPorts '1-65535'
 option tunnelAllowedPorts '1-65535'
 option chunkHighMark '1048576'
 option dnsQueryIPv6 'happily'
# option dnsUseGethostbyname 'reluctantly'
 option dnsUseGethostbyname 'yes'
 option disableVia 'true'
 option censoredHeaders 'from,accept-language,x-pad,link'
 option censorReferer 'maybe'
 #option logFile '/var/log/polipo.log'
 list allowedClients '192.168.2.0/24'
 option socksParentProxy 'localhost:9050'
 option socksProxyType 'socks5'

config polipo 'cache'

config polipo 'pmm'

例)/etc/tor/torrc:

SOCKSPort 9050
SocksBindAddress localhost:9050
Log notice file /var/log/tor/notices.log
RunAsDaemon 1
PidFile /var/run/tor.pid
AvoidDiskWrites 1
DataDirectory /var/lib/tor
# This is for our transparent network
VirtualAddrNetwork 10.192.0.0/10
AutomapHostsOnResolve 1
TransPort 9040
TransListenAddress 192.168.2.1
DNSPort 9053
DNSListenAddress 192.168.2.1
User tor

 

例)Chromebookでの設定:

 

つぎのいずれかのサイトでテストしてみます。

次のように表示されればTorネットワーク接続に成功です。

Congratulations. This browser is configured to use Tor.
Your IP address appears to be: xx.xx.xx.xx

ブラウザの設定

Firefox

アドレスバーに about:configと入れて次のように編集します。

network.proxy.socks_remote_dns --> true

Chromium

/Applications/Chromium.app/Contents/MacOS/chromium --proxy-server="socks5://192.168.2.1:9050" --host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE 192.168.2.1"

Chromiumだけ次のようなエラーがありましたがネットの接続は問題ありません。

504 Connect to 127.0.0.1:8123 failed: General SOCKS server failure
following error occurred while trying to access http://127.0.0.1:8123/polipo/config:

References:

OpenWRTにproxyサーバを導入する(旧)

 

OpenWrtでWeb Proxyをセットアップする(NEW)に移動しました。

いままではPrivoxyを使っていたがどうも表示しないサイトがあるばかりでなく、apt使っても固まったりするので置き換えてみました。

Optional 1: Tinyproxy

ほぼOpenWRTのサイト通りでOKです。

opkg update
opkg install tinyproxy luci-app-tinyproxy

uci set tinyproxy.@tinyproxy[0].enabled=1
uci commit
/etc/init.d/tinyproxy enable
/etc/init.d/tinyproxy restart

uci add firewall redirect
uci set firewall.@redirect[0].name='Transparent Proxy Redirect'
uci set firewall.@redirect[0].src=lan
uci set firewall.@redirect[0].proto=tcp
uci set firewall.@redirect[0].dest_port=8080
uci set firewall.@redirect[0].src_dport=80
uci set firewall.@redirect[0].src_dip='!192.168.1.1'
uci set firewall.@redirect[0].dest_ip=192.168.1.1
uci commit firewall
/etc/init.d/firewall restart

 

/etc/config/firewall:

config redirect 
        option target 'DNAT' 
        option dest 'lan' 
        option enabled '0' 
        option name 'Transparent Proxy Redirect' 
        option src 'lan' 
        option proto 'tcp' 
        option dest_port '8080' 
        option src_dport '80' 
        option src_dip '!192.168.1.1' 
        option dest_ip '192.168.1.1'

/etc/config/tinyproxy:

config tinyproxy
 option User 'nobody'
 option Group 'nogroup'
 option Timeout '600'
 option DefaultErrorFile '/usr/share/tinyproxy/default.html'
 option StatFile '/usr/share/tinyproxy/stats.html'
 option LogFile '/var/log/tinyproxy.log'
 option LogLevel 'Critical'
 option MaxClients '100'
 option MinSpareServers '5'
 option MaxSpareServers '20'
 option StartServers '10'
 option MaxRequestsPerChild '0'
 option ViaProxyName 'tinyproxy'
 option Port '8080'
 option enabled '1'
 list ConnectPort '443'
 list ConnectPort '563'
 list Allow '127.0.0.1'
 list Allow '192.168.1.0/24'

Optional 2: Srelay

Srelayはリポジトリにパッケージがないのでちょっと厄介です。

VB等の仮想空間にDebianなどの開発環境を作ります。

ルーターに合ったSDKをOpenWRTからダウンロードして展開します。

ソースのルートディレクトリに移動しパッケージをコンパイルします。

pushd package
git clone https://github.com/Blaok/openwrt-srelay.git
popd
scripts/feeds install -d m srelay
make package/srelay/compile

bin/${arch}/packages/baseにパッケージが作成します。

ルーターに移動しopkgでインストールします。

/etc/srelay.confファイルを編集します。

192.168.1.0/24 any -

Srelayを起動します。

/etc/init.d/srelay enable
/etc/init.d/srelay start

ブラウザの設定を行います。

SOCKS Host: 192.168.1.1 Port: 1080  SOCKS v5

Optional 3: Polipo

パッケージをインストールします。

opkg install polipo
opkg install luci-app-polipo

ブラウザをポート8123に合わせます。

References:

 

家のプライベートネットワークにVPN(IKEv2)をセットアップする

以前VPSにIKEv2のVPNを構築しましたが、今回は家庭内LANにVPN接続のセットアップを行いました。ルーターはバッファーロー製でOpenWrt(Chaos Calmer 15.05.1)が入っています。このルーターはVPSに strongSwanクライアントとして接続してあり、かつ今回はVPNサーバーとして同時に活用しようとする計画です。IPsecの設定はサーバー側もクライアント側もほぼ同じです。ネットワークのルーティングがうまく行くか不安なところがありますが、今後検証してみるつもりです。

構成図

                                Internet
                                   :
VPS:10.0.0.0/24 === 192.168.1.0/24:Router:192.168.100.0/24 === Users(Road Warriors)

Router側の設定

まずDynamic DNSをセットアップします。認証局(CA)をサーバ側にインストールするので必須になります。OpenWRTのパッケージはstrongswan-fullで一通り全てのパッケージを入れておけば間違い無いのですが、必要なパッケージが判れば個別にインストールして最小限に済ませておく事も出来ます。モジュールはstrongswan-mod-eap-mschapv2strongswan-mod-pubkeyは最低限必要になります。また対応するカーネルモジュールも入れておきます。

今回接続するクライアントはAndroidとLinux、Windows、macOSのPCを想定して設定しています。

/etc/ipsec.conf:

# ipsec.conf - strongSwan IPsec configuration file

config setup
 #plutostart=no

conn %default
 ikelifetime=60m
 keylife=20m
 rekeymargin=3m
 keyingtries=1

conn common
 keyexchange=ikev2
 left=%any
 leftcert=vpnClientCert.pem
 leftsourceip=%config
 leftauth=pubkey
 leftfirewall=yes

# VPNと接続
conn vps-router
 keyexchange=ikev2
 left=moon.mydns.jp
 leftid="C=JP, O=MyDomain, CN=router@moon.mydns.jp --san=router@moon.mydns.jp"
 leftid2=router@moon.mydns.jp
 leftsubnet=192.168.1.0/24
 leftauth=pubkey
 leftfirewall=yes
 leftcert=vpnClientCert.pem
 right=vps.net.jp
 rightid=@vps.net.jp
 rightsubnet=10.0.0.0/24
 rightauth=pubkey
 rightfirewall=yes
 ike=aes128-sha256-modp2048
 esp=aes128-sha256-modp2048
 auto=start

# 家のRouterに接続
# IKEv2 Certificate for Linux and Android
conn home-linux-android
 keyexchange=ikev2
 left=moon.mydns.jp
 leftid2=router@moon.mydns.jp
 leftsubnet=0.0.0.0/0,::/0
 leftauth=pubkey
 leftfirewall=yes
 leftcert=HomeServerCert.pem
 right=%any
 rightid2=*linux@roadwarrior
 rightauth=pubkey
 rightallowany=yes
 rightsourceip=192.168.100.0/26
 dpdaction=clear
 dpddelay=300s
 rekey=no
 reauth=no
 fragmentation=yes
 auto=add

# EAP/MSCHAPv2 for Windows and macOS
conn home-windows-macos
 keyexchange=ikev2
 left=moon.mydns.jp
 leftid2=router@moon.mydns.jp
 leftsubnet=0.0.0.0/0,::/0
 leftauth=pubkey
 leftfirewall=yes
 leftcert=HomeServerCert.pem
 right=%any
 rightid2=*@roadwarrior
 rightsourceip=192.168.100.64/26
 rightauth=eap-mschapv2
 ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
 esp=aes256-sha256,aes256-sha1,3des-sha1!
 dpdaction=clear
 dpddelay=300s
 rekey=no
 reauth=no
 fragmentation=yes
 auto=add

 

/etc/ipsec.secrets:

# /etc/ipsec.secrets - strongSwan IPsec secrets file
MyName : EAP "MyPass"
: RSA vpnClientKey.pem
: RSA HomeServerKey.pem

 

/etc/ipsec.d/certs/vpnClientCert.pem
/etc/ipsec.d/certs/HomeServerCert.pem
/etc/ipsec.d/cacerts/caCert.pem
/etc/ipsec.d/private/HomeServerKey.pem
/etc/ipsec.d/private/vpnClientKey.pem

 

認証局、鍵の作成は過去の記事を参考に作成します。

/etc/strongswan.conf:

# strongswan.conf - strongSwan configuration file
# Refer to the strongswan.conf(5) manpage for details
# Configuration changes should be made in the included files

charon {
 load_modular = yes
 dns1 = 8.8.8.8
 dns2 = 8.8.4.4
 threads = 16
 plugins {
 include strongswan.d/charon/*.conf
 }
}

 

/etc/strongswan.d/charon/kernel-netlink.conf:

mtu = 1376を追加

Note: MTU値1500からPPPoEヘッダー長+IPsecヘッダー長を引いた値

Firewallの設定

/etc/config/firewall:

次の設定を追加します。

config rule
        option src 'wan'
        option dest 'lan'
        option proto 'esp'
        option target 'ACCEPT'

config rule
        option src 'wan'
        option dest 'lan'
        option dest_port '500'
        option proto 'udp'
        option target 'ACCEPT'

config rule
        option src 'wan'
        option proto 'esp'
        option target 'ACCEPT'

config rule
        option src 'wan'
        option proto 'udp'
        option dest_port '500'
        option target 'ACCEPT'

config rule
        option src 'wan'
        option proto 'udp'
        option dest_port '4500'
        option target 'ACCEPT'

/etc/firewall.user:

設定を追加します。

iptables -I INPUT  -m policy --dir in --pol ipsec --proto esp -j ACCEPT
iptables -I FORWARD  -m policy --dir in --pol ipsec --proto esp -j ACCEPT
iptables -I FORWARD  -m policy --dir out --pol ipsec --proto esp -j ACCEPT
iptables -I OUTPUT   -m policy --dir out --pol ipsec --proto esp -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE

Client側の設定

Android

strongSwanのクライアントアプリをストアからインストールします。

PKCS#12ファイルをコピーして設定のセキュリティからインストールします。

strongSwanのアプリからAdd VPN Profileでサーバー名をFQDNで入れます。

VPNタイプをIKEv2 Certificateにします。

User identityを選択します。

CA certificateを指定します。

Saveして接続します。

macOS(High Sierra)の場合

Apple Configurator 2でCertificatesとVPNを編集します。名前をつけて保存したらダブルクリックしてプロファイルをインストールします。

設定のNetworkでVPNを起動します。

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <dict> <key>IKEv2</key> <dict> <key>AuthenticationMethod</key> <string>Certificate</string> <key>ChildSecurityAssociationParameters</key> <dict> <key>DiffieHellmanGroup</key> <integer>14</integer> <key>EncryptionAlgorithm</key> <string>AES-256</string> <key>IntegrityAlgorithm</key> <string>SHA1-96</string> <key>LifeTimeInMinutes</key> <integer>1440</integer> </dict> <key>DeadPeerDetectionRate</key> <string>Medium</string> <key>DisableMOBIKE</key> <integer>0</integer> <key>DisableRedirect</key> <integer>0</integer> <key>EnableCertificateRevocationCheck</key> <integer>0</integer> <key>EnablePFS</key> <integer>0</integer> <key>ExtendedAuthEnabled</key> <true/> <key>IKESecurityAssociationParameters</key> <dict> <key>DiffieHellmanGroup</key> <integer>14</integer> <key>EncryptionAlgorithm</key> <string>AES-128</string> <key>IntegrityAlgorithm</key> <string>SHA1-96</string> <key>LifeTimeInMinutes</key> <integer>1440</integer> </dict> <key>LocalIdentifier</key> <string>user@roadwarriior</string> <key>PayloadCertificateUUID</key> <string>E1D73F77-FB03-428E-BD5B-8167B90C80D1</string> <key>RemoteAddress</key> <string>moon.mydns.jp</string> <key>RemoteIdentifier</key> <string>moon.mydns.jp</string> <key>ServerCertificateCommonName</key> <string>mmoon.mydns.jp</string> <key>ServerCertificateIssuerCommonName</key> <string>Root CA</string> <key>UseConfigurationAttributeInternalIPSubnet</key> <integer>0</integer> </dict> <key>IPv4</key> <dict> <key>OverridePrimary</key> <integer>0</integer> </dict> <key>PayloadDescription</key> <string>Configures VPN settings</string> <key>PayloadDisplayName</key> <string>VPN</string> <key>PayloadIdentifier</key> <string>com.apple.vpn.managed.EA117620-4605-48FA-A5AA-1D8EE6D1F97A</string> <key>PayloadType</key> <string>com.apple.vpn.managed</string> <key>PayloadUUID</key> <string>EA117620-4605-48FA-A5AA-1D8EE6D1F97A</string> <key>PayloadVersion</key> <integer>1</integer> <key>Proxies</key> <dict> <key>HTTPEnable</key> <integer>0</integer> <key>HTTPSEnable</key> <integer>0</integer> </dict> <key>UserDefinedName</key> <string>home vps</string> <key>VPNType</key> <string>IKEv2</string> </dict> </array> <key>PayloadDisplayName</key> <string>ikv2.home</string> <key>PayloadIdentifier</key> <string>MacBook-Pro.C852D634-193B-4ACC-84F0-EA8FC55AF9C0</string> <key>PayloadRemovalDisallowed</key> <false/> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>A5E63D53-E8B1-4796-AD2A-285930D9A88F</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>

Chromebookにbusyboxをインストールする

Chromebookのchronosのshellでコマンド操作するときどうも使いづらい。

例えばテキスト編集するのにviコマンドを使いますが、カーソルの動きがおかしくどうも使いづらいのでbusyboxをインストールしてみます。

Linux PCでダウンローしてパッケージを展開します。croutonを使っている場合、Downloadsに展開すればChomreOSからもアクセスできます。

dpkg-deb -x busybox-static_<VER>_armhf.deb busybox-static

busybox-static/bin/busyboxができます。これを/usr/local/binにコピします。

cp -a busybox-static/bin/busybox /usr/local/bin
chown root:root /usr/local/bin/busybox

busybox <コマンド名>でも使えますが、busyboxのコマンドを登録してしてみます。

list="usleep brctl traceroute6 ifdown mt deallocvt loadkmap cttyhack mdev ftpput start-stop-daemon getty dumpleases run-parts nc telnet setkeycodes dpkg-deb udhcpd [[ syslogd dpkg adjtimex cmp vconfig dumpkmap acpid rpm2cpio crontab ifup strings dos2unix tftp ar logread unlzop patch klogd unzip lzop watchdog chvt crond tunctl delete-chroot ed lzopcat time telnetd less unix2dos devmem ftpget rpm nslookup rdate ipcalc freeramdisk openvt vi diff cpio traceroute udhcpc vim ash microcom loadfont httpd killall"
for i in $list; do ln -s busybox $i; done

これでunziptelnetがChromebookで使えるようになります。

Android: SSHデーモンを有効にする

Google Playにsshサーバーアプリはありますが広告がついていたりするので使いたくない場合があります。Androidにsshdサーバがある場合はそれを使ってサーバを起動してみます。ユーザー名はandroidでアクセスするのですがパスワードの設定をしたくない(または出来ない)のでRSA鍵を使ってアクセスできるようにします。root化してあることが前提です。

スクリプトマネージャーとBusybox(Stephen版) をPlayストアからインストールします。sshdデーモンのスクリプトを起動するために使います。

アンドロイドはLinuxにシステムが近いのですが異っている部分も多いのでアンドロイドの環境に合わせて設定します。アンドロイドをデベロッパーモードにしadbを使えるようにします。/etcは読込専用であるため/dataにssh用のディレクトリを作成します。

sshサーバ鍵の作成

adbでアンドロイドにアクセスします。

sdb shell

root権限にします。

su

ssh用のディレクトリを作成します。

mkdir /data/ssh

sshサーバの鍵を作成します。

RSA鍵の作成(鍵は2048ビットまた4096ビットにします)

ディレクトリ付きでファイル名を入力します。パスワードは無しにします。これで秘密鍵と公開鍵が作成されます。

ssh-keygen -t rsa -b 2048 -f /data/ssh/ssh_host_rsa_key

同じようにDSA鍵の作成します。ディレクトリ付きでファイル名を入力します。パスワードは無しにします

ssh-keygen -t dsa -b 1024 -f /data/ssh/ssh_host_dsa_key

Clientの公開鍵を登録

/data/ssh/authorized_keysにClientの公開鍵を書込みます。

cat > /data/ssh/authorized_keys <<'EOF'
...
(クライアントの~/.ssh/id_rsa.pubの内容をカット&ペストします)
...
EOF

sshdの設定ファイルは/etc/ssh/sshd_configです。この設定を変更せず使います。

サーバを起動できるか試してみます。

/system/bin/sshd -f /etc/ssh/sshd_config

psコマンドで確認します。起動が確認できたら公開鍵を登録した同じユーザーでsshログインをしてみます。

ifconfigでサーバのIPアドレスを確認して、

ssh root@<サーバIP>

アクセスが確認できたらsshデーモンを終了します。

kill `pidof ssh`

スクリプトマネージャーに登録

スクリプトマネージャーを起動します。ディレクトリ/storage/emulated/0/scriptsを作って移動します。

•••マークを押してNew Scriptを選択します。

起動スクリプト名をstart_sshdとして、editボタンを押します。

#!/system/bin/sh
echo 'Starting SSH Server...'
/system/bin/sshd -f /etc/ssh/sshd_config

編集が終わったら•••マークを押してsaveを押します。

スクリクト名をstop_sshdとして、editボタンを押します。

#!/system/bin/sh
echo 'Stopping SSH Server...'
/system/xbin/kill `/system/bin/pidof sshd`

編集が終わったら•••マークを押してsaveを押します。

一つ前の画面に戻りroot権限で実行できるようにSuボタンを押しセーブします。

以上でScriptの画面からsshサーバの起動・停止ができるようになります。

Huawei P8 LiteにOpenKirin’s RROSをインストールする

P8 lite用のLineage OS 14.1はまだ開発段階でトラブルが多そうだったので13.0をインストールしたのですが、バッテリーの減りが激しく調整していたら別のROMOpenKirin’s RROSというのがあったのでこのROMを使って7.1.2にアップグレードすることにしました。

サイトのリンク先からTwrp、ROM、GppsをダウンロードしてP8 LiteのSDに移します。

リブートしてカスタムリカバリのTwrpを起動し、Twrpを更新します。

リブートして再度Twrpを起動し内部のメモリをすべて消去します。

新しいROMとGappsをフラッシュします。

Post installation

On Call Proximity、XPlayer、Footej CameraをGoogle Playからインストールします。

 

Windows PCでmac OS、Windows、Linuxをトリプルブート (High Sierra編)

High Sieeraの通知が来たのでアップグレードすることにしました。機種は前回と同じ、Thinkcentre M73とThinkpad X220です。

注意:macOSは動作する機種が限られるのでインストールする前に機種のスペックをチェックして下さい。またBIOSもOSX86のサイトで見でmacOS用に最適化してください。

Thinkcentre M73のアップグレード

直接アップグレードする方法で試してみました。方法はサイトにあるとおりです。

私の機種はSSDでなくHDDなのでAlternative Guideの方法を使います。ところがインストール途中で止まってリブートしてしまうので先に進めません。High Sierra用のUniBeastはまだないのでUSBドライブを使った方法にしてみました。

まず8GB以上のUSBドライブを挿してmacOSでバニラのインストールディスクを作ります。

$ sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/USB --applicationpath /Applications/Install\ macOS\ High\ Sierra.app --nointeraction

sourceforgeから最新のCloverをダウンロードしてサイトのとおりにインストールします。そしてUSBドライブのEFIにkextsとconfig.plistをインストールします。

このUSBドライブドライブをブートします。アップグレードもできますが、問題の少ないクリーンインストールをお勧めします。インストールが終わったら、最新のsierraのMultiBeastを使ってCloverをインストールします。

以上で終了です。

Thinkpad X220の再インストール

用意するもの

  • High Sierraのインストールディスク

Thinkpad X220用のEFIを入れ替えればOKです。

  • MS Windows 7のインストールディスク

CDまたはUSBをディスクまたはイメージファイル(WIMファイル:cdrivebackup.wim)

  • MS Windows 10のインストールディスク(WIMファイルを使う場合)

Windows 10のISOをMSサイトからダウンロードします。MS WindowsでrufusユーティリティでPartition SchemeをGPT partition Scheme for UEFIにしてUSBインストールディスクを作成します。

  • LinuxのLive用ディスク(例:Linux Mint 18.2 Sonya KDE)

LinuxのターミナルまたはrufusユーティリティのddコマンドでUSBディスクを作成します。

High Sierraのインストール

これにはかなりはまって、MS Windowsのパーティションが引っかかってインストーラーが動きません。そこでバックアップをとってMSとmacOSのパーティションを消してインストーラーを走らせてみました。

ところがHDDユーティリティでパーティションのみでHDDドライブを認識しません。そのためパーティション作成が出来なくなっています。そこで前バージョンのSierraのUSBインストールでパーティションを作成してからHigh Sierraのインストールをします。

Disk Utilityの左上のアイコンからすべてのデバイスを表示にチェックします。

パーティションを作成してHigh Sierraのインストールをします。

インストールがおわったらunidentified developersのアプリケーションを開けるように設定します。

$ sudo spctl --master-disable

Windows 7のインストール

BIOSでUEFI Onlyにしてブートします。UEFIとMBRの両方だとインストーラーがMBRとディスクを認識して先に進めません。

Windows 7のインストールディスクでインストールする場合は、macOSで作ったMS用のパーティションを消してMS用の用のパーティションを作成し、そのままインストールを続けます。

WIMイメージファイルの場合は、まずWindows 10のインストーラでmacOSで作ったMS用のパーティションを消してMS用の用のパーティションを作成します。

MSRパーティションとWindows用のパーティションの2つが作成してあることを確認してリブートして電源をオフにします。

BIOSをUEFIとMBR両方の設定にしてLive用Linuxを起動します。WIMファイルはWindowsのインストーラからdismを使ってもできるのですが、WIMファイルはP7zipで圧縮してあるだけなので、Linuxから操作したほうが簡単です。

バックアップのイメージファイル、cdrivebackup.wimをHDDのWindows用パーティションに移して、ターミナルから、

$ sudo 7z x cdrivebackup.wim

として展開します。

Windows 10のインストーラを起動してCMDターミナルを開きます。ブートシステムを作成します。

x:\>diskpart
x:\>list volume
x:\>select volume 1 <-- UEFI
x:\>assign letter b
x:\>list volume
x:\>exit
x:\>bcdboot c:\windows /s b: /f UEFI

Linuxのインストール(例:Linux Mint 18.2 Sonya KDE)

BIOSをUEFIMBR両方の設定にしてLive用Linuxを起動します。パーティションを多くしたくないのでLVMを使ってみます。

formatコマンドでブート用(500MB)とLVM用(残り全部)を作成します。タイプをブート用はLinux filesystem(20)、LVM用にはLinux LVM(30)にします。

Optional: LUKS暗号化する場合

LVM用のディスクをcryptsetupでLUKSディスクにします。このあとLVMの作業にとりかかります。

LVMでパーティションの作成

$ sudo pvcreate <LVMパーティション> (例:/dev/sda7、LUKSの場合は/dev/mapper/LUKS name)
$ sudo vgcreate <VG name> <LVMパーティション>
$ sudo lvcreate --name <NAME> --size <SIZE> <VG name>

lvcreateで最小限の区分けでシステム用、home用、swap用を作ります。

最大限ディスクを使うには次のようにします。

lvcreate --name <NAME> -l +100%FREE <VG name>

Installation

インストーラーを起動します。

パーティションのところでManualを選択します。

home、swap、システムそしてbootのパーティションを変更します。

homeパーティション:

Use as EXT4
Formatにチェック
Mount Point: /home

システムパーティション:

Use as EXT4
Formatにチェック
Mount Point: /

swapパーティション:

Use as SWAP

bootパーティション

Use as EXT2
Formatにチェック
Mount Point: /boot

Boot loaderはUEFIのある/dev/sda1を選択します。

パーティショニングが終わったらインストールを続けます。

インストールが終わったらリブートしないでインストーラを終了します。

Post Installation

LVMとLUKS(Optional)がブート時に使えるように修正します。

HDDにインストールしたパーティションをマウントします。

$ sudo mkdir /target
$ sudo mount /dev/<VG name>/<system name> /target
$ sudo mount /dev/<VG name>/<home name> /target/home
$ sudo mount  /dev/<boot partition> /target/boot
$ sudo mount -o bind /dev /target/dev
$ sudo mount -o bind /sys /target/sys
$ sudo mount -o bind /proc /target/proc
$ sudo chroot /target
$ sudo cd /etc/initramfs-tools

hooks:

$ sudo cp -a /usr/share/initramfs-tools/hooks/lvm2 ./hooks
$ sudo chmod 755 ./hooks/lvm2

script: (なくても動きます)

$ sudo mkdir -p ./scripts/local-block
$ sudo cp -a /usr/share/initramfs-tools/scripts/init-premount/lvm2 ./scripts/init-premount
$ sudo cp -a /usr/share/initramfs-tools/scripts/init-bottom/lvm2 ./scripts/init-bottom
$ sudo cp -a /usr/share/initramfs-tools/scripts/local-top/lvm2 ./scripts/local-top
$ sudo cp -a /usr/share/initramfs-tools/scripts/local-block/lvm2 ./scripts/local-block
$ sudo chmod 755 ./scripts/init-premount/lvm2  ./scripts/init-bottom/lvm2 ./scripts/local-top/lvm2 ./scripts/local-block/lvm2

initramfsを更新します。

$ sudo update-initramfs -u -k all

LUKSを使う場合(Optional)

NOTE: 最新の方法ではなくて旧式の方法です。

blkid <LUKSパーティション>でUUIDを調べます。

conf.d/cryptroot:

CRYPTOPTS=target=sdaX_crypt,source=/dev/disk/by-uuid/<UUID>

hooks:

旧式のスクリプトファイルをダウンロードして実行形式にします。

https://labs.hottuna.tk/OpenWrt/stuff/archives/triple_boot/

$ sudo chmod 755 ./hooks/cryptroot

modulesファイルに追加します。

dm-crypt 
dm-mod

modules(Optional): レノボキーボードを使う場合追加します。(LUKSのパスワード解除にキーボードを使うため)

hid
usbhid
hid_generic
ohci_pci
hid-lenovo

initramfsを更新します。

$ sudo update-initramfs -u -k all

リブートします。

UEFIの編集

WindowsからEasyUEFIを使いUEFIメニューを編集します。もしCloverのブートメニューがなければ次のように作ります。

アプリケーションのHomeに戻ってメニューの一番上にもっていきます。

Optional

Numix Icon Theme

$ sudo add-apt-repository ppa:numix/ppa
$ sudo apt-get update
$ sudo apt-get install numix-icon-theme

IME

aptまたはaptitudeでfcitxをインストールします。

fcitxと関連のlibs、frontend、mozc、fcitx-classic-uiをインストールします。

ターミナルからim-configを実行して、fcitxを選択します。

ログアウトして再ログインします。

メニュー->Applications->Settingsからfcitxを実行してmozcを追加します。

  • BroadcomのFirmware

BroadcomのWi-Fiモジュールの換装を行った場合、Firmwareをイントールします。

$ sudo apt install firmware-b43-installer

Troubleshoot

  • High Sierra(Thinkpad X220)音がならない

ThinkPad X220 macOS 10.13 Utility and Kext Pack の中の/EFI/CLOVER/kexts/Other/AppleHDA_20672/Library/Extentionsにコピーし、Kext Utilityでアップデートします。

References:

How to Create a macOS High Sierra Public Beta Installation USB

Huawei P8 Lite ALE-L02にLineage OS 13.0をインストールする

 

先日、Lunia525にAndroidをインストールして一見快調かに思えたが、GPSなどまだまだ動かない機能が多くて、ちょっと日常では使えそうにありません。そこでHuawei P8 liteを1万円ちょっとで取り寄せてみました。

Huawei P8 liteにした理由は低価格、ドコモのプラスエリア対応、そしてLineage OSに対応してるためです。ドコモのプラスエリアは特殊な電波帯なので、これだけでかなり選択肢が狭まってしまいます。海外で売られているような一般のスマホでは少し田舎に行くと電波を掴まないという問題があって、普段気が付かないだけで、実際そういう場面に遭遇した時はかなりショックでした。より多くの電波を捉えるという意味でHuawei P8は価値あるスマホと言えます。

組み込み系はみなそうですが機種の選定がとても大事です。カスタムファームウェアに対応している機種はほんの一部です。さらにマイナーバージョンも見なくてはいけません。P8 Liteは大きく分けてDual SIMバージョンとSingle SIMバージョンがありSingle SIMバージョンにはLineage OS対応がありません。日本で手に入る機種はALE-L02なのでLineage OSをインストールできます。

カスタムファームウェアのインストールの流れ

簡単に言ってしまえばカスタムリカバリのTwrpをインストールして、それを使ってカスタムファームウェアをフラッシュするだけです。ただ機種によってインストールの流れが微妙に違うのでよくXDAフォーラムを検索して調べるとかして、機種のクセを調べておきます。

必要なファイルをダウンロードします。

1. ブートローダをアンロックする。

ブートローダにロックがかかっているので外す作業にとりかかります。パスワードの取得はファーウェイのサイトで機種情報を入れてパスワードを聞くだけです。

現状のP8でデベロッパーモードにしてUSBとADBを使えるようにします。

PCとP8をUSBケーブルで繋ぎ、ADBのディレクトリ(Shift+右クリックでCMD窓)から次のように入力してブートローダーを起動します。

adb shell
adb reboot bootloader

ブートローダーの画面なったらロック解除のパスワードを入れます。

fastboot oem unlock [xxxxxxxxxxxxxxxxx]

パスワード解除に成功かどうかはスマホの画面で確認できます。

2.カスタムリカバリ(Twrp)をインストール

ファイル名を短く纏めます。(例:recovery.img)

カスタムリカバリをフラッシュします。

fastboot flash recovery recovery.img

3. Lineage OSのインストール

Lineage OS 13.0と EMUI 4.1をマイクロSDに入れてP8 Liteにセットします。

Twrpを起動して内部メモリをすべて消してdataを再フォーマットします。

EMUI 4.1 B895をインストールします。これはDual SIMを使えうようにするためのようです。

フラッシュして起動できたことを確認できたら、再度、Twrpで内部メモリ全部とdataをフォーマットします。

Lineage OS 13.0とGapps(オプション)をインストールします。

リブートして作業は終わりです。

 

References: