Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
1
Linux のユーザーランドを
init から全てまるごと
Golang で書く
Tetsuyuki Kobayashi
2018.4.15 Go Conference 2018 Spring
2
 The latest version of this slide will
be available from here
 http://www.slideshare.net/tetsu.koba/presentati
ons
3
Who am I?
 20+ years involved in embedded systems
 10 years in real time OS, such as iTRON
 10 years in embedded Java...
はじめに
 golang の実行ファイルは自己完結的
 基本ライブラリ (libc に相当するもの )
は自前で持っている
 インストールするときに依存性が少ない
 後、何を追加したら、 Linux
カーネルと golang の実行ファ...
最小構成を理解するのは
エンジニアリングの基本
 削って削って、残ったものが本質。
 本日の「最小限」の定義
 ホスト名を解決してネットワークに
アクセスできること
 TLS( 暗号化通信 ) はオプション
 現在時刻を UTC で扱...
本日話すること
 gokrazy の紹介
 docker での最小限のコンテナの
実験
 最小限のルートファイルシステム
 miminumgo: 最小限の初期化処理
をする go パッケージ
Gokrazy の紹介
Gokrazy とは
 https://gokrazy.org/
 golang だけで Linux のユーザーランドを
構築してくれる
 ラズパイ 3 用のマイクロ SD カードを作成
 init, dhcp, ntp とユーザーのプ...
Gokrazy 動作中のルートファイ
ルシステム
/dev (mount devtmpfs)
/dev/pts (mount devpts)
/etc/hosts (auto generated)
/etc/localtime
/etc/res...
Gokrazy の制限
 sh など通常のコマンドは含んでいない
 参考 gobox
 カーネルモジュールをロードするしくみ
は無い
 必要なモジュールはあらかじめカーネル
にビルトインしておく
 デバイスの抜き差しは扱わない
docker での
最小限のコンテナの実験
docker で busybox 一個のファ
イルを動かしてみた
 docker では実マシンでの初期
化処理を自動で行ってくれる
 具体的にそれが何かを実験で調べ
てみた。
 dockerでbusybox一個だけのファイルを含むイメージ...
docker が自動生成したファイル
/dev (mount devtmpfs)
/dev/pts (mount devpts)
/etc/hostname
/etc/hosts
/etc/mtab -> /proc/mounts
/etc/r...
最小限のルートファイルシステム
最小限のルートファイルシステム
/dev (mount devtmpfs)
/dev/pts (mount devpts)
/etc/hosts (auto generated)
/etc/resolv.conf -> /proc/net/pn...
時刻に関して
 最小限では UTC のみが扱える
 ローカルタイムを扱うには /etc/localtime
を追加
 その他のタイムゾーンを扱うには
 /usr/share/zoneinfo/ 以下のファイルが
必要
 または、 ru...
TLS( 暗号化通信 ) に関して
 最小限では TLS は扱えない
 /etc/ssl/certs/ 以下のファイルが必要
 ルート証明書だけでも
 /etc/ssl/certs/ca-certificates.crt
minimumgo: 最小限の初期化処理を
してくれる go パッケージ
minimumgo
 最小限の初期化処理をしてくれる
go パッケージを自作した
 ブランク (_) import するだけ
 その golang の実行ファイルを init
として動かせる
 設定はカーネルパラメータで
 ntp サ...
使用例
package main
import (
"log"
"net/http"
)
func main() {
log.Fatal(http.ListenAndServe(":80",
http.FileServer(http.Dir("...
使用例
package main
// This should be imported at first
import _ "github.com/tetsu-koba/minimumgo"
import (
"log"
"net/http"
...
minimumgo
 https://github.com/tetsu-koba/minimumgo
 example に ラズパイ用にビルドして
initramfs のイメージを作成して動かす
方法を書きました
最後に
 本セッションの観察や実験を通して、 Linux の
起動時に行っていることが明らかに。
 「 Linux のユーザーランドを golang で init から
まるごと全部書く」 -> 達成。
 minimumgo パッケージは...
References
 gokrazy
 Linuxのユーザーランドをinitから全てまるごと
golangで書く
 dockerでbusybox一個だけのファイルを
含むイメージを作って動かしたらどうなるか
 dockerでgolan...
25
Q & A
@tetsu_koba
Thank you for listening!
Nächste SlideShare
Wird geladen in …5
×

Linuxのユーザーランドをinitから全てまるごとgolangで書く

8.722 Aufrufe

Veröffentlicht am

Writing whole linux userland in golang

Veröffentlicht in: Ingenieurwesen
  • Visit this site: tinyurl.com/sexinarea and find sex in your area for one night)) You can find me on this site too)
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • Sex in your area for one night is there tinyurl.com/hotsexinarea Copy and paste link in your browser to visit a site)
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • Girls for sex are waiting for you https://bit.ly/2TQ8UAY
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • Meetings for sex in your area are there: https://bit.ly/2TQ8UAY
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • Best site for flirting and sex in your area you can find there: https://bit.ly/2SlcOnO
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

Linuxのユーザーランドをinitから全てまるごとgolangで書く

  1. 1. 1 Linux のユーザーランドを init から全てまるごと Golang で書く Tetsuyuki Kobayashi 2018.4.15 Go Conference 2018 Spring
  2. 2. 2  The latest version of this slide will be available from here  http://www.slideshare.net/tetsu.koba/presentati ons
  3. 3. 3 Who am I?  20+ years involved in embedded systems  10 years in real time OS, such as iTRON  10 years in embedded Java Virtual Machine  Now GCC, Linux, QEMU, Android, …  Blogs  https://qiita.com/tetsu_koba  http://d.hatena.ne.jp/embedded/  http://kobablog.wordpress.com/(English)  Twitter  @tetsu_koba
  4. 4. はじめに  golang の実行ファイルは自己完結的  基本ライブラリ (libc に相当するもの ) は自前で持っている  インストールするときに依存性が少ない  後、何を追加したら、 Linux カーネルと golang の実行ファ イルだけで動かせる?
  5. 5. 最小構成を理解するのは エンジニアリングの基本  削って削って、残ったものが本質。  本日の「最小限」の定義  ホスト名を解決してネットワークに アクセスできること  TLS( 暗号化通信 ) はオプション  現在時刻を UTC で扱えること  タイムゾーンはオプション
  6. 6. 本日話すること  gokrazy の紹介  docker での最小限のコンテナの 実験  最小限のルートファイルシステム  miminumgo: 最小限の初期化処理 をする go パッケージ
  7. 7. Gokrazy の紹介
  8. 8. Gokrazy とは  https://gokrazy.org/  golang だけで Linux のユーザーランドを 構築してくれる  ラズパイ 3 用のマイクロ SD カードを作成  init, dhcp, ntp とユーザーのプロセスが実 行される  WebUI でプロセスの状態が見られる
  9. 9. Gokrazy 動作中のルートファイ ルシステム /dev (mount devtmpfs) /dev/pts (mount devpts) /etc/hosts (auto generated) /etc/localtime /etc/resolv.conf -> /proc/net/pnp /etc/ssl/ca-bundle.pem /gokrazy/dhcp /gokrazy/init /gokrazy/ntp /proc (mount proc) /sys (mount sysfs) /tmp (mount tmpfs) /user/hello
  10. 10. Gokrazy の制限  sh など通常のコマンドは含んでいない  参考 gobox  カーネルモジュールをロードするしくみ は無い  必要なモジュールはあらかじめカーネル にビルトインしておく  デバイスの抜き差しは扱わない
  11. 11. docker での 最小限のコンテナの実験
  12. 12. docker で busybox 一個のファ イルを動かしてみた  docker では実マシンでの初期 化処理を自動で行ってくれる  具体的にそれが何かを実験で調べ てみた。  dockerでbusybox一個だけのファイルを含むイメージを作って動かしたらどうなるか
  13. 13. docker が自動生成したファイル /dev (mount devtmpfs) /dev/pts (mount devpts) /etc/hostname /etc/hosts /etc/mtab -> /proc/mounts /etc/resolv.conf /proc (mount proc) /sys (mount sysfs)
  14. 14. 最小限のルートファイルシステム
  15. 15. 最小限のルートファイルシステム /dev (mount devtmpfs) /dev/pts (mount devpts) /etc/hosts (auto generated) /etc/resolv.conf -> /proc/net/pnp /proc (mount proc) /sys (mount sysfs) /tmp (mount tmpfs) /etc/hostname が無い場合のデフォルトの hostname は IP アドレスの ASCII 表現
  16. 16. 時刻に関して  最小限では UTC のみが扱える  ローカルタイムを扱うには /etc/localtime を追加  その他のタイムゾーンを扱うには  /usr/share/zoneinfo/ 以下のファイルが 必要  または、 runtime.GOROOT 以下に /lib/time/zoneinfo.zip を置く
  17. 17. TLS( 暗号化通信 ) に関して  最小限では TLS は扱えない  /etc/ssl/certs/ 以下のファイルが必要  ルート証明書だけでも  /etc/ssl/certs/ca-certificates.crt
  18. 18. minimumgo: 最小限の初期化処理を してくれる go パッケージ
  19. 19. minimumgo  最小限の初期化処理をしてくれる go パッケージを自作した  ブランク (_) import するだけ  その golang の実行ファイルを init として動かせる  設定はカーネルパラメータで  ntp サーバの指定
  20. 20. 使用例 package main import ( "log" "net/http" ) func main() { log.Fatal(http.ListenAndServe(":80", http.FileServer(http.Dir("/")))) } この golang のプログラムを一個だけ動かしたい場合
  21. 21. 使用例 package main // This should be imported at first import _ "github.com/tetsu-koba/minimumgo" import ( "log" "net/http" ) func main() { log.Fatal(http.ListenAndServe(":80", http.FileServer(http.Dir("/")))) } minimumgo パッケージを import するだけで、 これを init として動かせる。
  22. 22. minimumgo  https://github.com/tetsu-koba/minimumgo  example に ラズパイ用にビルドして initramfs のイメージを作成して動かす 方法を書きました
  23. 23. 最後に  本セッションの観察や実験を通して、 Linux の 起動時に行っていることが明らかに。  「 Linux のユーザーランドを golang で init から まるごと全部書く」 -> 達成。  minimumgo パッケージは実験用。  ブラックボックスとして使うのでなくてソー スコードを参考にしてください。 
  24. 24. References  gokrazy  Linuxのユーザーランドをinitから全てまるごと golangで書く  dockerでbusybox一個だけのファイルを 含むイメージを作って動かしたらどうなるか  dockerでgolangの実行ファイル1個だけを 含むイメージを作って動かす  https://github.com/tetsu-koba/minimumgo 
  25. 25. 25 Q & A @tetsu_koba Thank you for listening!

×