Golang版のbusyboxを探していたら、gokrazyの方に行っちゃった。 [プログラミング]
最初はGolangでbusyboxがないかと探していたら、gokrazyの方に目がいってしまった件。
作ろうとしたこと。
・Golang版のbusybox
割と簡単に実装できそうだが、出来上がるバイナリがでかいのでモバイル用のユーザーランドとしてはダメかも。
・Rust版のbusybox
書き方がむずくてやる気にならない。というかすんなりコンパイルが通らなくてストレスが溜まりそう。Golangほどバイナリが大きくならないので、使うには問題なさそうな気はする。
実はGolang版のbusybox的なことは作られていて、gokrazyというものらしい。ファイルサイズもGoにしては小さくて実用に足る感じではある。しかし、先にやられてしまうとはなぁ。人が考えることは大体似たようなものではあるのだな。なんかラズベリーパイに使っているところを見るとなかなか見込みはあるようである。
https://qiita.com/tetsu_koba/items/aa2d245a61db98299a89
ん?よく見たらBusyboxのような部分は含まないらしい。ユーザーランドという名前に騙された。よく考えるとユーザーランドという呼び名は結構あいまいに使われている気もするな。カーネルに対するユーザーランド的な。
ユーザーランドという言葉を調べてみると、カーネル以外のすべてみたいなことが書いてあった。基本的にカーネル以外の実行環境のことを言うらしい。Linuxカーネル以外全部じゃん! 結構いい加減な分け方なんだけど、実際そうなんだから仕方がない。
上のサイトを見ていると「libc や busybox のコマンドを含んでいない」とあるので、ログインして何かできる状態ではないようである。そもそもbusybox自体かなり限られたユーザーランドであるので、gokrazyを入れただけでは何もできないんじゃないかと思われます。
カーネルモジュールを含んでいない、ということなので、カーネルの一部ですらない。結局何やってるんでしょうね…。initとかの作業をしているみたいですが、initはカーネルの中身ではなかったんだ…。
https://www.slideshare.net/tetsu.koba/linuxinitgolang
やはりshさえも入っていなかった。これは本当に特定通信をやり取りするだけのもので、シェルに入って云々というものではなかった。ということは、立ち上げてそれ以上手を入れることができないような状態みたいですね。ラズパイのコンソールがどうなのかは知らんけど。
カーネルモジュールのロードもできないし(スタティックに組み込めという話)、デバイスの抜き差しすらできない(uvev?)。カーネルがやっていそうなところもカーネル自身が結構やっていないことも多いんかなと思ったり。こういうことをしない限りは、カーネルとの境を意識することもないわけだよね。
それと依存性とかもいろいろ関係して単体では動かないことが結構あるんやね。Golangがわりと単体で実行できるという性質を持っているけど、その他のツールが依存性をがっつり持っているので、簡単にミニマム構成にできないってことなのか。
gokrazyはGolang版busyboxではなかったのだが、goで書いたbusyboxライクなものもあるみたい。それはファイルの大きさとかどうなのかなぁ。依存性は少ないのだろうけれども。gokrazyが終わった後ぐらいには、ちょっとみてみたい気もする。というか、初めはそっちが興味があったんだけれども。
gokrazyはラズパイ依存のものみたいなので、ケースワークとしてはminimumgoの方がわかりやすいかも知れない。
https://qiita.com/tetsu_koba/items/059849c0871a7e3bd94f
ソースを見てもしんどくならない程度に短い。バイナリが小さいというのも分かろうもの。というか、Golangのネックはバイナリがデカくなるというところだと思っていたのだが、用途によってはそうでもないのですね。
gokrazyはGolang版busyboxではなかったのだが、goで書いたbusyboxライクなものもあるみたい。それはファイルの大きさとかどうなのかなぁ。依存性は少ないのだろうけれども。Goのいいところの一つはlibcなどに依存しないところなので、こういう環境の方がワンバイナリになっていていいのではないかと思ったり。まぁC言語とかでもスタティックにリンクすればいいんだろうけど、そうする人は少ないよな。
作ろうとしたこと。
・Golang版のbusybox
割と簡単に実装できそうだが、出来上がるバイナリがでかいのでモバイル用のユーザーランドとしてはダメかも。
・Rust版のbusybox
書き方がむずくてやる気にならない。というかすんなりコンパイルが通らなくてストレスが溜まりそう。Golangほどバイナリが大きくならないので、使うには問題なさそうな気はする。
実はGolang版のbusybox的なことは作られていて、gokrazyというものらしい。ファイルサイズもGoにしては小さくて実用に足る感じではある。しかし、先にやられてしまうとはなぁ。人が考えることは大体似たようなものではあるのだな。なんかラズベリーパイに使っているところを見るとなかなか見込みはあるようである。
https://qiita.com/tetsu_koba/items/aa2d245a61db98299a89
ん?よく見たらBusyboxのような部分は含まないらしい。ユーザーランドという名前に騙された。よく考えるとユーザーランドという呼び名は結構あいまいに使われている気もするな。カーネルに対するユーザーランド的な。
ユーザーランドという言葉を調べてみると、カーネル以外のすべてみたいなことが書いてあった。基本的にカーネル以外の実行環境のことを言うらしい。Linuxカーネル以外全部じゃん! 結構いい加減な分け方なんだけど、実際そうなんだから仕方がない。
上のサイトを見ていると「libc や busybox のコマンドを含んでいない」とあるので、ログインして何かできる状態ではないようである。そもそもbusybox自体かなり限られたユーザーランドであるので、gokrazyを入れただけでは何もできないんじゃないかと思われます。
カーネルモジュールを含んでいない、ということなので、カーネルの一部ですらない。結局何やってるんでしょうね…。initとかの作業をしているみたいですが、initはカーネルの中身ではなかったんだ…。
https://www.slideshare.net/tetsu.koba/linuxinitgolang
やはりshさえも入っていなかった。これは本当に特定通信をやり取りするだけのもので、シェルに入って云々というものではなかった。ということは、立ち上げてそれ以上手を入れることができないような状態みたいですね。ラズパイのコンソールがどうなのかは知らんけど。
カーネルモジュールのロードもできないし(スタティックに組み込めという話)、デバイスの抜き差しすらできない(uvev?)。カーネルがやっていそうなところもカーネル自身が結構やっていないことも多いんかなと思ったり。こういうことをしない限りは、カーネルとの境を意識することもないわけだよね。
それと依存性とかもいろいろ関係して単体では動かないことが結構あるんやね。Golangがわりと単体で実行できるという性質を持っているけど、その他のツールが依存性をがっつり持っているので、簡単にミニマム構成にできないってことなのか。
gokrazyはGolang版busyboxではなかったのだが、goで書いたbusyboxライクなものもあるみたい。それはファイルの大きさとかどうなのかなぁ。依存性は少ないのだろうけれども。gokrazyが終わった後ぐらいには、ちょっとみてみたい気もする。というか、初めはそっちが興味があったんだけれども。
gokrazyはラズパイ依存のものみたいなので、ケースワークとしてはminimumgoの方がわかりやすいかも知れない。
https://qiita.com/tetsu_koba/items/059849c0871a7e3bd94f
ソースを見てもしんどくならない程度に短い。バイナリが小さいというのも分かろうもの。というか、Golangのネックはバイナリがデカくなるというところだと思っていたのだが、用途によってはそうでもないのですね。
gokrazyはGolang版busyboxではなかったのだが、goで書いたbusyboxライクなものもあるみたい。それはファイルの大きさとかどうなのかなぁ。依存性は少ないのだろうけれども。Goのいいところの一つはlibcなどに依存しないところなので、こういう環境の方がワンバイナリになっていていいのではないかと思ったり。まぁC言語とかでもスタティックにリンクすればいいんだろうけど、そうする人は少ないよな。
タグ:Golang
コメント 0