Gentoo on Windows 10 (Gentoo Advent Calender 2016 5日目)

これはGentoo Advent Calendar 2016 Advent Calendar 2016 - Adventarの5日目の記事です。

昨日はろ。の人の記事でした。

Gentoo Advent Calendar - KMYの日記

流石にコンパイラ変えるのはやったことないですね。

概要

Windows10でWindows Subsystem for Linuxってのが追加されました。
そこでそれを使ってGentooを動かしてみようって話です。

ぶっちゃけて言ってしまえば、

github.com

github.com

この2つを読めばどうということはない記事です。
まぁそれでも良ければ読んでいただければ幸いです。

Windows Subsystem for Linuxって?

以降WSLと略します。
Windowsで動いているサブシステムでLinuxカーネルのエミュレーションをするシステムみたいな感じ?

f:id:neotaso:20161204172350j:plain

ASCIIのASCII.jp:Windows Subsystem for Linuxの中身を詳しく見る|Windows Info を読んでみるとなんとなくわかってくれると思う。

本当にGentoo動くの?

A: 動きます。
このWSL、インストールすると、デフォルトでUbuntuが入るのですが、どうもUbuntu側の利用しているのもよく見るとCloud imageっぽい感じがある。
じゃあファイル置き換えれば行けるんじゃね?みたいな感じで、WSL-Distribution-Switcher(以後WSL-DS)というプロジェクトが生まれました。(知らないけど多分そう)
とはいえ、WSLなりの制限はあるし、カーネルもUbuntu14.04のカーネル3.4.0互換しかないし、色々割り切って使う必要はあります。

入れ方

ここから入れ方を解説していきます。
Gentoo-WSLのページにあるのを言い換えただけの感じがしますが。

ちょっとはGentooを使ったことのある人向けな感じなので、これを機にGentoo使ってみたい!ってなった人はごめんなさい。

WSLをインストールする

詳しい説明は割愛

  1. Windows 10のanniversary update以降を入れる
  2. "プログラムの追加と削除"からWSL(beta)を追加
  3. Windows 10の開発者モードをオンにする
  4. 再起動する
  5. "Bash on Ubuntu on Windows"が追加されるはずなので起動する
  6. Ubuntuのインストールを待つ

WSL-DSをつかってGentooを展開する

  1. まずGitHubから適当な方法でファイルを取得して、適当な場所に置く(WSL配下でなくてよい)
  2. Python3をインストールする(PATHに入れといたほうが楽)
  3. WSL-DSのフォルダにgentoostage3-*-nomultilib.tar.bz2を置く
  4. cmdかPower ShellでWSL-DSのフォルダにcdして、python install.py stage3-*.tar.bz2を実行する

ちなみに、このときにUbuntu環境でのhomeや/etc/passwdなどは引き継がれます

nomultilibを使うのは、WSLが64bitでしか実行できないからっぽい。

Gentooのセットアップをする

bashを起動する前にログインユーザをrootに変えておきます
> lxrun /setdefaultuser root
Gentooのstage3にはsudoがないのと、pam_wheel.soが有効になっているので、wheelグループに一般ユーザを入れておかないと、su root出来ないからですね。説明めんどくさいのでrootでログインしちゃいます
ちなみにrootを書き換えれば他のユーザをログインユーザに変える事ができる

  1. "Bash on Ubuntu on Windows"(中身はGentoo)を起動するなり、cmd.exeで> bashなりしてGentoo環境に入ります。
  2. # nano /usr/lib64/python2.7/site-packages/_emerge/AbstractEbuildProcess.pyして、_enable_ipc_daemon = Falseに書き換える。(python3.4の方も同様に書き換える)
  3. USEに-ipcを加える(適当にmake.confも書き換える)
  4. package.useにsys-apps/portage -ipcを追加する
  5. repos.conf (2日目の記事)を書く
  6. # emerge-webrsync
  7. なんかgcc関連のシンボリックリンクが壊れてるので直す f:id:neotaso:20161205011017p:plain シンボリックリンクシンボリックリンク貼ってるので、こう、解決してうまくやって。なんでこうなってるのかわからないんだけど、分かる人が居たら教えて!

2、3のあたりの処理は、WSLがSystemV IPCの機能を持ってないから

emergeもeselectも動く!
これでWindowsGentooライフが楽しめますね。

f:id:neotaso:20161205012549p:plain

あの長いSLが走る

使ってみて

なんかアレな部分

  • WSL自身に色々不具合がある
  • デフォで入ってる.bashrcがエラー出すし、umaskが設定されてない
  • WSLで足りてなくてビルドに失敗する物がある
  • psが動かない(WindowsのInsider Previewでは解決されてる)
  • やっぱり遅い
  • デフォルトのターミナルのcmdのアレが弱い

psが動かない原因のお陰で、glibcコンパイル出来なかったりします。

遅いのは、やっぱりAPIの変換掛けてたりするからなんでしょうね。

あと、bashで起動するconhost?のアイコンは、lxssディレクトリのアイコンを変更することで自分の好きなのに変えられる。


明日の記事はらりおさんです。よろしくお願いいたします。