Debian noroot 環境におけるキーボード設定操作での重篤な障害とその回避策について

# はじめに

[Debian noroot][DBNR] とは、 [Android OS][ANDR] 上において root 権限を取ることなく [Debian 環境][DEBI]を構築するためのアプリケーションです。
CPU の性能とメモリ容量が潤沢にある Android 端末であれば、 [Debian noroot][DBNR] の導入によって Android 端末上で非常に軽快な [Debian 環境][DEBI]を実現することができます。

しかし、自分の手元の端末である [Xperia Z Ultra][ZULT] 上での [Debian noroot 環境][DBNR]において、[xfce][XFCE] のキーボードの設定変更の操作を行ったところ、"[問題が発生したため \[Debian\] を終了します][FTAL]" のメッセージと共にアプリ全体が異常終了し、 [Debian noroot 環境][DBNR]が起動しなくなる重篤な障害が発生しました。

障害の原因を調べた結果、 [xfce][XFCE] のキーボードレイアウトの設定ファイルの存在が [xfce][XFCE] の起動の阻害とアプリ全体の異常終了を引き起こしていたのが原因であると判明しました。

そこで、 [xfce][XFCE] の起動スクリプトファイルに障害の原因となる設定ファイルを削除するコマンドを追記することにより、今回の障害を回避し、正常に [Debian noroot 環境][DBNR]が起動することを確認しました。

本稿では、今回発生した [Debian noroot 環境][DBNR]での重篤な障害の経緯と障害の回避策について述べます。

本稿では最初に、 ”[今回の障害の経緯][CHAP01]” の章で、今回の障害についての具体的な経緯について述べます。

次に、 "[今回の障害の原因][CHAP02]" の章において、今回判明した障害の原因について述べ、 "[問題の回避策][CHAP03]" の章において、今回の障害の具体的な回避策について述べます。

最後に "[結論][CHAP04]" の章において、本稿についての結論を述べます。

# 今回の障害の経緯

本章では最初に、 "[障害の内容][SEC0101]" の節において、今回の障害の具体的な内容について述べます。

次に、 "[障害の対応][SEC0102]" の節において今回発生した障害について行った対応について述べます。

## 障害の内容

本節では、今回発生した重篤な障害について、問題となった [xfce][XFCE] のキーボード設定の操作及び、設定の結果実際に発生した障害の内容について述べます。

先ず、自分の手元の [Xperia Z Ultra][ZULT] のファームウェアを更新し、[Android OS][ANDR] のバージョンを 4.4.2 に引き上げました。
そして、 [Debian noroot 環境][DBNR]を使用していたところ、 [xfce][XFCE] のキーボードの設定パネルにおいて、キーボードのレイアウトの設定変更で「_システムデフォルトを使用する (U)_」(下記の画像の赤丸で囲った部分) のチェックを外す操作を行っていた時に、 "**問題が発生したため [Debian] を終了します**" のメッセージと共に [Debian noroot 環境][DBNR]及び [Debian noroot アプリ][DBNR]が異常終了しました。

![(keyboard panel of xfce)][IMG1]

そして、再度 [Debian noroot 環境][DBNR]を起動しようとしても、 [xfce][XFCE] の起動時に "**問題が発生したため [Debian] を終了します**" のメッセージが表示されて [Debian noroot アプリ][DBNR]全体が異常終了を起こすようになり、 [Debian noroot 環境][DBNR]が完全に起動しなくなりました。

## 障害の対応

本節では、今回発生した障害について、 [Debian noroot 環境][DBNR]を正常に起動させることができるようになるまでに行った具体的な対応について述べます。

まず、 USB ケーブルを用いて PC と [Xperia Z Ultra][ZULT] を接続して ```adb shell``` コマンドを用いたデバッグや ```adb backup``` コマンドによるバックアップを試みましたが全く効果がなく、已む無く [Xperia Z Ultra][ZULT] の root 権限の取得を行いました。

ここで、端末を rooted にした状態から、ターミナルエミュレータである [ConnectBot][CONN] を用いて [Debian noroot 環境][DBNR]のイメージが置かれている ```/data/data/com.cuntubuntu/files/img``` ディレクトリにカレントディレクトリを移動して ```./home/***/.cache/session/xfce*``` を削除しても状況が変わりませんでした。

最終的に [Debian noroot 環境][DBNR]のイメージを tarball で固めてストレージ上に救出した上でアプリデータの全削除と [Debian noroot 環境][DBNR]のクリーンインストールを行いました。

そして、再度 [Debian noroot アプリ][DBNR]を起動させたところ、完全に初期化された [Debian noroot 環境][DBNR]が正常に起動することを確認しました。

# 今回の障害の原因

本章では、 [Debian noroot 環境][DBNR]の復旧及び、障害の現象の調査の過程において判明した障害の原因について述べます。

まず、 tarball で固めた [Debian noroot 環境][DBNR]のイメージを ```/data/data/com.cuntubuntu/files/img``` ディレクトリに復旧させて、再度 gnome の設定ファイルを中心に原因を調べたところ、キーボードレイアウトの設定ファイルである ```./home/***/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml``` を取り除くと、 [Debian noroot 環境][DBNR]が問題なく正常に起動することが判明しました。

また、問題の設定ファイルである ```./home/***/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml``` を再度元に戻すと障害が再現することも判明しました。

即ち、 ```$HOME/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml``` が [xfce][XFCE] の起動前に存在していることで [Debian noroot 環境][DBNR]の起動時に [xfce][XFCE] の起動を阻害してアプリ全体を異常終了し、今回の重篤な障害が発生する事が判明しました。

# 問題の回避策

本章では、[前々章][CHAP01]で述べた問題の経緯及び[前章][CHAP02]で述べた問題の原因を踏まえて、今回発生した問題の回避策について述べます。

[前章][CHAP02]で述べた通り、 [xfce][XFCE] の起動前に ```$HOME/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml``` の存在が、 [xfce][XFCE] の起動阻害と [Debian noroot][DBNR] アプリ全体が異常終了する原因となっていました。

即ち、 [xfce][XFCE] の起動プロセスが記述されているスクリプトファイルである ```/startx.sh``` に ```$HOME/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml``` を強制的に削除させるコマンドを追記することにより、問題の発生を回避することが出来ます。

具体的には、 ```/start.sh``` ファイルに、以下のようにして [xfce][XFCE] を起動するための ```xfce-session``` コマンドが書かれている行の前に問題の設定ファイルを強制的に削除する ```rm -f``` コマンドを記述します。

```/startx.sh
...
# xfce の起動前に問題の設定ファイルを強制的に削除する
...
rm -f $HOME/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml
...
dbus-launch --exit-with-session sh -c 'xfce4-session ; setsid sh -c "cd /proc/ ; for f in [0-9]* ; do [ \$f = \$\$ ] || kill -9 \$f ; done"' &

wait
```

以上の設定により、誤って [xfce][XFCE] キーボードレイアウトの設定操作を行って [Debian noroot 環境][DBNR]が異常終了しても、再起動時に [xfce][XFCE] の起動の前に異常終了の原因となる設定ファイルが強制的に削除される為、問題なく [Debian noroot 環境][DBNR]が起動することを確認しました。

# 結論

本稿では、自分の手元の端末上の [Debian noroot 環境][DBNR]において、[xfce][XFCE] のキーボードの設定変更の操作を行った際に発生した重篤な障害について、障害の原因を調べました。

その結果に基づき、障害を回避するための設定を行い、その後誤った設定を行っても重篤な問題が起こることなく、正常に [Debian noroot 環境][DBNR]が起動する事を確認しました。

[Debian noroot 環境][DBNR]において、本稿で述べた問題回避策を取ることなく、 [xfce][XFCE] 上において、キーボードのレイアウト設定を変更する操作を行った場合、**現時点では root 権限を取得するか、 "[Debian noroot 環境の障害復旧用の環境の構築][ZOLQ]" の投稿で述べた障害復旧用の環境からの起動を行うか、若しくは [Debian noroot 環境][DBNR]をクリーンインストールしない限り、再度正常に [Debian noroot 環境][DBNR]を起動することは不可能です**。

従って、 [Debian noroot 環境][DBNR]を新たにインストールした際には、**予め本稿で述べた設定の他、 [Debian noroot 環境][DBNR]の起動時における障害全体への対応のため、　[Debian noroot 環境の障害復旧用の環境の構築][ZOLQ]を行っておくことを強く御勧め致します**。

# 謝辞

本稿の記述に当たって、 [Android OS][ANDR] 端末上で非常に軽快な [Debian 環境][DEBI]を実現することを可能にした [Debian noroot 環境][DBNR]の開発者である [pelya 氏][PELY]に心より感謝致します。
そして最後に、 [Debian noroot 環境][DBNR]と [Android OS][ANDR] 及び [Debian 環境][DEBI]の全ての事に関わる全ての皆様に心より感謝致します。

<!-- 各章及び各節のリンク一覧 -->

[CHAP01]:#今回の障害の経緯
[CHAP02]:#今回の障害の原因
[CHAP03]:#問題の回避策
[CHAP04]:#結論
[SEC0101]:#障害の内容
[SEC0102]:#障害の対応

<!-- 外部リンク一覧 -->

[DBNR]:https://play.google.com/store/apps/details?id=com.cuntubuntu&hl=ja
[ANDR]:https://www.android.com/intl/ja_jp/
[DEBI]:https://www.debian.org/index.ja.html
[ZULT]:http://www.sony.jp/tablet/products/Z_ultra/
[FTAL]:https://www.google.co.jp/search?q=%E5%95%8F%E9%A1%8C%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%9F%E3%81%9F%E3%82%81+%E3%82%92%E7%B5%82%E4%BA%86%E3%81%97%E3%81%BE%E3%81%99+android&ie=utf-8&oe=utf-8
[XFCE]:https://xfce.org/
[IMG1]:https://qiita-image-store.s3.amazonaws.com/0/86258/84b0587a-df3c-a829-92c8-b698dfdee9d7.jpeg
[CONN]:https://play.google.com/store/apps/details?id=org.connectbot
[ZOLQ]:http://qiita.com/z80oolong/items/0049269559270ccc68bd
[PELY]:https://github.com/pelyahttps://source.android.com/