0:00:02.000,0:00:08.000
皆さんこんにちは。私の発表にお越しいただきありがとうございます。
0:00:08.000,0:00:17.000
本発表では、Debian インストーラに対する GNU/Screen の組み込みに関してお話します。
0:00:19.000,0:00:24.000
まずは組み込みのあらましについてお話しします。
0:00:24.000,0:00:26.000
すなわち、Debian インストーラとはどんなものか、
0:00:26.000,0:00:30.000
GNU/Screen とはどんなものか、
0:00:30.000,0:00:35.000
GNU/Screen を Debian インストーラに組み込む必要性、
0:00:35.000,0:00:40.000
GNU/Screen サポートをインストーラに追加する方法についてお話します。
0:00:42.000,0:00:47.000
Debian インストーラとはどんなものでしょうか?
0:00:47.000,0:00:51.000
ここにおられる多くの方が Debian インストーラをご存知のことと思います。
0:00:51.000,0:00:55.000
Debian インストーラは単なるインストーラです。
0:00:55.000,0:01:01.000
しかしながら実際のところ、[br]これは起動可能な Debian 環境であり、
0:01:01.000,0:01:07.000
そのサイズが極力小さくなるように調整されています。
0:01:08.000,0:01:15.000
すなわち、[br]インストーライメージに文書は含まれないということです。
0:01:15.000,0:01:34.000
それ以外の普通の人にとって通常ならば利用価値の高い情報[br](一般に「/usr/share/doc」へ配置される情報) も含まれません。
0:01:34.000,0:01:37.000
しかしながらインストール時ならば、これらの情報は必要ありません。
0:01:37.000,0:01:44.000
そうすることで、[br]インストーラのサイズを小さくすることが可能です。
0:01:44.000,0:01:50.000
かつて、インストーラは 1 枚か 2 枚のフロッピー内に収まっていました。
0:01:50.000,0:01:53.000
すなわち、インストーラサイズはとても小さかったということです。
0:01:53.000,0:01:55.000
今では、そうすることは不可能です。
0:01:55.000,0:02:04.000
なぜなら、カーネルサイズだけでフロッピーのサイズを超えてしまうからです。
0:02:04.000,0:02:14.000
また、インストーラはパーティション分割ソフトウェアを備えています。
0:02:14.000,0:02:24.000
このおかげで、パーティションを分割したり、[br]インストーラの中に新しいディスクイメージ作成したりできます。
0:02:24.000,0:02:36.000
その後、「debootstrap」が Debian 環境をインストールします。
0:02:36.000,0:02:41.000
最後に、インストーラがブートローダをインストールします。
0:02:41.000,0:02:53.000
ブートローダには数多くの種類が用意されています。[br]その一例として PC や ARM64 向けの GRUB があります。
0:02:53.000,0:03:07.000
また、armel や armhf などの ARM プラットフォーム向けの[br]ブートローダには flash-kernel があります。
0:03:12.000,0:03:15.000
GNU/Screen とは何でしょうか?
0:03:15.000,0:03:17.000
第一に、それはターミナルマルチプレクサです。
0:03:17.000,0:03:28.000
すなわち、これを使うことで物理的な端末の中に[br]複数の仮想的な端末を持つことが可能になります。
0:03:28.000,0:03:42.000
さらに、ショートカットを使って仮想的な端末を切り替えることも可能です。
0:03:42.000,0:03:47.000
GNU/Screen の場合、ショートカットは「Ctrl-A + 1」、2、3、4 です。
0:03:47.000,0:04:00.000
Tmux (GNU/Screen の代替品) の場合、ショートカットは「Ctrl-B + 1」、2、3、4 です。
0:04:00.000,0:04:14.000
ここまでの説明から、皆様は Debian インストーラ内で GNU/Screen を必要とする理由が気になっているのではないでしょうか。
0:04:14.000,0:04:19.000
どんなご利益があるのでしょうか?
0:04:19.000,0:04:22.000
それでは皆様に普通のインストーラをご覧に入れましょう。
0:04:22.000,0:04:28.000
これが普通のインストーラです。
0:04:28.000,0:04:30.000
ユーザインターフェイスがあります。
0:04:30.000,0:04:42.000
もしパーティション分割や新しいディスクイメージの作成時に問題が生じたなら、[br]ログを確認したいと思うのではないでしょうか。
0:04:42.000,0:04:49.000
そんな時は、「Alt-F4」キーを押してログコンソールに切り替えることが可能です。
0:04:49.000,0:04:55.000
これが普通の PC の場合です。
0:04:55.000,0:05:03.000
元の画面に戻りたければ、「Alt-F1」キーを押します。
0:05:03.000,0:05:06.000
それでは実演をご覧ください。
0:05:53.000,0:05:56.000
これが普通の Debian インストーラ画面です。
0:05:56.000,0:06:00.000
ここで「Alt-F2」キーを押します。
0:06:00.000,0:06:06.000
するとコマンドラインが表示されます。
0:06:06.000,0:06:09.000
ここでは多くの情報を見ることが可能です。
0:06:09.000,0:06:17.000
「Alt-F4」キーを押せば、ログを見ることも可能です。
0:06:19.000,0:06:22.000
元の画面に戻りたければ、「Alt-F1」キーを押します。
0:06:22.000,0:06:26.000
これで元の画面に戻りました。
0:06:26.000,0:06:28.000
これが普通の PC の場合です。
0:06:28.000,0:06:36.000
しかしながら組込み機器の場合、このような便利な方法はありません。
0:06:55.000,0:06:58.720
armel や armhf などの組込み機器では、
0:06:58.720,0:07:09.000
シリアルコンソールまたはネットワークを介した SSH などを使ってインストールするのが普通です。
0:07:09.000,0:07:14.000
したがって、用意される物理的な画面は一つだけです。
0:07:14.000,0:07:17.150
他に画面はありません。
0:07:17.150,0:07:19.000
実は、方法が全く無いわけではありません。
0:07:19.000,0:07:21.000
前のページを見ることが可能です。
0:07:21.000,0:07:29.000
そのための「戻る」オプションがここにあります。
0:07:29.000,0:07:34.000
戻って、このメニューを表示することが可能です。
0:07:34.000,0:07:42.000
これは上級者向けのメニューであり、[br]組込み機器でもここからシェルを起動することが可能です。
0:07:42.000,0:07:46.000
シェルが起動されれば、ログを確認することが可能です。
0:07:46.000,0:07:52.000
ログは「/var/log/syslog」に保存されています。
0:07:52.000,0:07:54.000
ログを開いて、内容を確認することが可能です。
0:07:54.000,0:07:58.000
しかしながら、ログを確認するときは、
0:07:58.000,0:08:03.000
毎回戻ってシェルを起動しなければいけません。
0:08:03.000,0:08:05.000
好きなときにログを確認することも不可能です。
0:08:05.000,0:08:10.000
なぜなら、インストーラが作業している間 (パッケージのインストール中など) はメニューを表示できないからです。
0:08:10.000,0:08:16.000
普通の PC ではいつでもできることが組込み機器ではできないのです。
0:08:16.000,0:08:18.000
そこで私は考えました。
0:08:18.000,0:08:24.000
もし GNU/Screen を Debian インストーラに組み込んだら、
0:08:24.000,0:08:36.000
armel などの組込み機器に対するインストールを普通の PC と同じように簡単で便利なものにできるのではないでしょうか。
0:08:42.000,0:08:47.000
このような経緯で、私は GNU/Screen の組み込み作業を開始しました。
0:08:50.000,0:08:54.000
では、どのように組み込み作業を行えばよいのでしょうか?
0:08:54.000,0:08:58.000
しばらく検索した後、
0:08:58.000,0:09:07.000
私は GNU/Screen バイナリパッケージとそれが依存するパッケージ (ライブラリなど) が udeb をサポートする必要があるという点に気が付きました。
0:09:07.000,0:09:18.000
udeb は Debian インストーラ用の特別なフォーマットで、[br]インストーライメージのサイズを小さくする目的で使われます。
0:09:18.000,0:09:22.000
すなわち、例えば文書は udeb 内から削除されます。
0:09:22.000,0:09:32.000
したがって、第一に、GNU/Screen とそれが依存するライブラリに udeb を作らせる必要があります。
0:09:33.000,0:09:40.000
第二に、これらの udeb を Debian インストーライメージに追加する必要があります。
0:09:42.000,0:09:52.000
第三に、Debian インストーラ内で GNU/Screen を起動させるためのスクリプトを書く必要があります。
0:09:55.000,0:10:00.000
udeb のサポートから話を始めましょう。
0:10:05.000,0:10:13.000
通常、udeb は「debian/control」で管理されます。
0:10:15.000,0:10:19.000
udeb はソースパッケージに対するバイナリパッケージのようなものです。
0:10:19.000,0:10:28.000
udeb (新しいバイナリ) をサポートするにはセクションを追加します。
0:10:28.000,0:10:38.000
その後、新しい「-udeb.install」ファイルを作成します。
0:10:38.000,0:10:49.000
これの内容は本来の「.install」ファイルとほぼ同一ですが、[br]不要なファイルに関するエントリを削除します。
0:10:49.000,0:10:53.000
この後、パッチを作成します。
0:10:53.000,0:11:05.000
そして、パッケージメンテナにパッチを送り、[br]パッチの内容を適用してもらいます。
0:11:05.000,0:11:12.000
新しい udeb パッケージが追加されました。
0:11:12.000,0:11:15.000
しかしながら、パッケージが DM によってメンテナンスされている場合、
0:11:15.000,0:11:28.000
残念なことに、DM はパッケージをアップロードするために、[br]パッケージをスポンサーしてくれる DD を探す必要があります。
0:11:28.000,0:11:35.000
同様の理由により、新しい udeb パッケージは NEW キューに入ります。
0:11:35.000,0:11:40.000
さらに、ftp-master がアップロードを認可するまで待つ必要もあります。
0:11:40.000,0:11:49.000
したがって、アップロードされるまでに通常のパッケージよりも時間がかかります。
0:11:52.000,0:12:01.000
私は GNU/Screen とそれが依存するパッケージに udeb サポートを追加し、
0:12:01.000,0:12:10.000
4 つのバグを報告し、それぞれにパッチを添付しました。
0:12:28.000,0:12:34.000
これで、udeb パッケージの準備ができました。
0:12:34.000,0:12:40.000
しかしながら、Debian インストーライメージにこれを追加する作業が残っています。
0:12:40.000,0:12:54.000
そこで、udeb サポートを追加するために、[br]「debian-installer.git」リポジトリに対してパッチを当てました。
0:12:56.000,0:13:08.000
最後に、Debian インストーラの起動後に GNU/Screen コマンドを起動する必要があります。
0:13:08.000,0:13:22.000
さらに、PC 上の Debian インストーラ環境をエミューレートするための GNU/Screen の設定も必要です。
0:13:22.000,0:13:29.000
Debian インストーラには 4 つの仮想画面が用意されています。
0:13:29.000,0:13:37.000
1 つ目が主画面、2 つ目がコマンドラインコンソール、最後がログコンソールです。
0:13:37.000,0:13:42.000
この状態をエミュレートしたいわけです。
0:13:49.000,0:13:54.000
それでは実演をご覧ください。
0:14:01.000,0:14:06.000
今回は、Debian インストーラを仮想マシン上で実行しています。
0:14:29.000,0:14:34.000
こちらが GNU/Screen をサポートする Debian インストーラです。
0:14:34.000,0:14:40.000
したがって、1 番、2 番、3 番、4 番、という 4 つの仮想端末が用意されています。
0:14:40.000,0:14:56.000
さらに、「Ctrl-A + 2」、「Ctrl-A + 3」、「Ctrl-A + 4」などの[br]ショートカットを使って端末を切り替えることが可能です。
0:14:56.000,0:15:01.000
こちらがログです。
0:15:06.000,0:15:12.000
PC 側の立場からすると、ご覧のとおり、[br]これはそれほど便利というわけではないように見えます。
0:15:12.000,0:15:17.000
なぜなら、PC では「Alt-F1」、「Alt-F2」、「Alt-F3」[br]を使って画面を切り替えることが可能だからです。
0:15:17.000,0:15:23.000
しかしながら組込み機器側の立場からすると、[br]これはかなり便利です。
0:15:35.000,0:15:40.000
進捗をご報告しましょう。
0:15:40.000,0:15:47.000
実際には、ここに挙げた事柄の処理はすでに完了しています。
0:15:47.000,0:15:53.000
例えば、最初の 2 つはライブラリに関するものです。
0:15:53.000,0:15:56.000
実際には、これらの処理は必要ありませんでした。
0:15:56.000,0:16:05.000
なぜなら、Laurent さんから教わったのですが、
0:16:05.000,0:16:09.000
GNU/Screen を 2 回コンパイルするように設定できたからです。
0:16:09.000,0:16:24.000
すなわち、1 回目に通常の GNU/Screen を、2 回目に audit と pam ライブラリを使わない GNU/Screen をコンパイルするということです。
0:16:24.000,0:16:32.000
この方針を採ることにより、GNU/Screen の udeb バイナリのサイズを小さくすることが可能になりました。
0:16:32.000,0:16:38.000
実のところ、本当にサポートする必要があるライブラリは ncurses です。
0:16:38.000,0:16:49.000
ncurses は GNU/Screen のバイナリパッケージと併せて 2 週間前に ftp-master へアップロードされました。
0:16:49.000,0:17:06.000
Debian インストーライメージについて言えば、今週 Debian インストーラ Stretch Alpha 7 がリリースされた後、対応するコミットをプッシュしました。
0:17:06.000,0:17:10.000
Alpha 7 のリリース後にコミットをプッシュしたので、
0:17:10.000,0:17:21.000
Debian インストーラに組み込まれた GNU/Screen を試すにはデイリーイメージを使ってください。
0:17:29.000,0:17:32.000
それでは、恩恵を受けるデバイスについて考えてみましょう。
0:17:32.000,0:17:43.000
恩恵を受けるデバイスとして、シリアルコンソールや SSH ネットワークコンソールを使ってインストールされた通常の ARM ボードや、
0:17:43.000,0:17:56.000
SPARC64 および IBM s390/s390x などの巨大なマシンが挙げられます。
0:17:56.000,0:18:01.000
PC にも恩恵を受けるものがあるでしょう。
0:18:01.000,0:18:04.000
なぜなら、一部の PC はヘッドレスだからです。
0:18:04.000,0:18:13.000
この種のどちらかと言えば PC サーバのような PC は HDMI や VGA ポートを装備していません。
0:18:17.000,0:18:26.000
初期の私の提案に対してコメントをくださった様々な方々と
0:18:26.000,0:18:35.000
udeb パッケージのアップロードに関する手助けに感謝申し上げます。
0:18:35.000,0:18:37.000
本当にありがとうございました。
0:18:37.000,0:18:42.000
[拍手]
0:18:42.000,0:19:02.000
何かご質問があればお願いします。
0:19:02.000,0:19:04.000
[座長]: ええ、どうぞ。
0:19:04.000,0:19:13.000
[質問者 00]: まず初めに、私は SPARC 組み込みシステムをいつも使っています。
0:19:13.000,0:19:15.000
[質問者 00]: そんなわけで、この組み込み作業が大いに役立つことは間違いありません。
0:19:15.000,0:19:19.000
[質問者 00]: 本当に有難うございます。
0:19:19.000,0:19:21.000
[質問者 00]: あなたの作業に深く感謝しております。
0:19:25.000,0:19:32.000
[質問 00-00]: 作業を遂行する上で最も難しかったことは何ですか?
0:19:32.000,0:19:39.000
[質問 00-01]: また、「簡単じゃないか」と最も驚いたことは何ですか?
0:19:39.000,0:19:44.000
実は、最も難しかったことはパッケージをアップロードすることです。
0:19:44.000,0:19:50.000
なぜなら、あるパッケージは DM によってメンテナンスされていたからです。
0:19:50.000,0:19:58.000
通常、DM は DD のスポンサーシップがなくても[br]担当のパッケージをアップロードできます。
0:19:58.000,0:20:01.000
しかし、udeb は新しいパッケージとみなされるため、
0:20:01.000,0:20:06.000
スポンサーとなる DD を見つける必要がありました。
0:20:06.000,0:20:19.000
DD を見つけてアップロードしてもらうのに、ほぼ 2 ヶ月かかりました。
0:20:21.000,0:20:24.000
[質問者 00]: あと、難しいと思っていたにも関わらず、
0:20:24.000,0:20:26.000
[質問者 00]: 簡単だったことは何ですか?
0:20:26.000,0:20:29.000
えーっと
0:20:29.000,0:20:30.000
[質問者 00]: 難しいことばかりでしたか?
0:20:30.000,0:20:31.000
[笑い]
0:20:31.000,0:20:34.000
技術的な側面から言えば、組み込み作業は骨の折れる作業ではありませんでした。
0:20:34.000,0:20:37.000
なぜなら、すべてのものは用意されていたからです。
0:20:37.000,0:20:42.000
私は単に udeb サポートを追加するための簡単なパッチを書いて、
0:20:42.000,0:20:48.000
Debian インストーラの中で GNU/Screen を起動するスクリプトを書いただけです。
0:20:48.000,0:20:52.000
したがって、技術的な側面から言えば、[br]組み込み作業はそんなに難しいものではありません。
0:20:52.000,0:20:54.000
[質問者 00]: 素晴らしいですね。
0:20:54.000,0:20:55.000
ありがとうございます。
0:20:55.000,0:21:00.000
[質問者 00]: 他に質問は?
0:21:01.000,0:21:07.000
[質問者 01]: 今回の成果は Stretch Alpha 7 に含まれるとのことでしたが、
0:21:07.000,0:21:13.000
違います。Stretch Alpha 7 の後にコミットをプッシュしました。
0:21:13.000,0:21:15.000
[質問者 01]: なるほど、[br]ということは成果が含まれるのはフリーズの後になる予定ですか?
0:21:15.000,0:21:16.000
そうです。
0:21:16.000,0:21:17.000
[質問者 01]: わかりました。
0:21:17.000,0:21:25.000
[質問 01-00]: GNU/Screen 関連のコンポーネントをすべて追加することで、[br]イメージのサイズはどの程度増加しますか?
0:21:25.000,0:21:29.000
[質問者 01]: ものすごくですか? ほんの少しですか? それともサイズは変わりませんか?
0:21:29.000,0:21:41.000
そうですね、Debian インストーライメージのサイズはこれまでに比べてほんの少し増加するでしょう。
0:21:41.000,0:21:49.000
例えば、armel プラットフォームの「QNAP」シリーズというものがあります。
0:21:49.000,0:21:57.000
Debian インストーラは「QNAP」シリーズをサポートしています。
0:21:57.000,0:22:00.000
しかしながら、「QNAP」シリーズにはサイズ制限があります。
0:22:00.000,0:22:07.000
なぜなら、カーネルと初期 RAM ディスクをフラッシュメモリに収める必要があり、
0:22:07.000,0:22:16.000
カーネル用のフラッシュメモリサイズがおよそ 2 MB で初期 RAM ディスク用のサイズが 4 MB だからです。
0:22:18.390,0:22:21.100
したがって、フラッシュメモリのサイズは制限されています。
0:22:21.100,0:22:29.000
対して、GNU/Screen の udeb パッケージのサイズはおよそ 500 KB です。
0:22:29.000,0:22:38.000
したがって、「QNAP」向けのイメージに限って言えば、[br]今回の成果を含めることは不可能かもしれません。
0:22:38.000,0:22:43.000
それ以外のイメージでは、問題ないと思います。
0:22:43.000,0:22:48.000
考慮すべき大きなサイズ制限はありません。
0:22:57.000,0:23:03.000
現在のところ、今回の成果は Debian インストーラの日次ビルドイメージに含まれます。
0:23:03.000,0:23:08.000
このため、日次ビルドイメージを使えば今回の成果を試用可能です。
0:23:08.000,0:23:22.000
URL は「https://d-i.debian.org/daily-images/」です。
0:23:22.000,0:23:25.000
ここには多くのイメージがあります。
0:23:25.000,0:23:41.000
なぜなら、ここには amd64 や GNU Hurd などのサポート済みアーキテクチャすべてに対するイメージがあるからです。
0:23:42.000,0:23:49.000
したがって、適切なアーキテクチャとイメージを選ぶ必要があります。
0:23:54.000,0:23:56.000
これで私の発表を終わります。ご清聴ありがとうございました。
0:23:56.000,0:24:00.000
[拍手]