はじめに
GNU Guix System(以下Guix System)とは、GNUの開発するLinuxディストロのひとつで、GNU Guix(以下Guix)という パッケージマネージャと密結合している。GuixはSchemeで管理できるパッケージマネージャで、 隔離された環境によるビルドやロールバック可能な操作が特徴で、再現性と環境の隔離に重点を置いている。 これをWindowsの入ったx64のPCにインストールする。面倒なので新しいディスクを用意してそちらにインストールした。 Windowsのディスクはそのまま残したので、起動時にF12を連打してブートディスクを選択すればWindowsも起動できる。
必要なもの
- インストール先のPC
- 私はWindows 10、Bitlockerで暗号化されたディスクの組み合わせのPCにインストールした。 注意として、(たぶん)このPCはインターネットに繋がっていなければならない。
- USBメモリかDVDドライブ
- インストールディスクを一時的に作る必要がある。容量は8GBあれば余裕だと思う(たぶん2GBもない)。
- 内蔵SSDかHDD
- 必須ではないが、Windowsと共存させたい場合、ディスクを分けるのが最も楽。元のWindowsを潰してよいなら そこに上書きすればよいと思うが、保証はできない。あんまりやらないけど、外付けでも同様にできるとは思う。
ディスクの準備
私はWindowsユーザーなので、Rufusを使ってUSBにインストールディスクを作成した。LinuxのPCがある場合は 公式のドキュメントのとおりにやるとよいと思います。
まず、公式サイトからGNU Guix SystemのISOファイルをダウンロードして、適当なUSBメモリやDVDに焼く。
Rufusでディスクイメージを作る際に注意点がある。 ISOモードではなくDDモードで焼いてほしい。そうしないとちゃんとbootできない。 これはRufusのはじめの画面では選択できず、「スタート」を押した後に聞いてくるので、 そのときに「ISOモード(推奨)」ではなく「DDモード」を選択して欲しい。
ブートディスクの変更
PCのメーカーや購入時期によって違うと思うので詳しい説明は省く。 先程作ったインストールディスクからブートされるよう、BIOSやUEFIの設定を変えておけばよい。 また、インストールディスクを抜いたらGuix Systemをそのまま立ち上がるよう、 2番目のブートディスクをこれからインストールするディスクにしておく。
GUI(風)インストーラでインストール
あんまり需要はないかもしれないが、言葉だけだとわかりにくいかもしれないので、画像を付けておく。
さて、インストールディスクからのブートが成功すると、以下のような画面が得られる。 Locale languageなので「日本語」を選択。ちなみに日本語を選んでもインストーラは英語のまま。

Figure 1: Locale language
次に、Locale locationで「日本」を選択。

Figure 2: Locale location
ここでインストーラの選択画面が表れる。GUI風のインストーラを使いたいので 「Graphical install using a terminal based interface」を選択。

Figure 3: GNU Guix install
タイムゾーンを「Asia」「Tokyo」と選択。

Figure 4: Timezoneの大まかな地域選択

Figure 5: Timezoneの選択
次にキーボードレイアウトを選択。日本語配列なら「日本語」を選択。

Figure 6: (キーボードの)Layout
キーボードレイアウトにもバリエーションがあるので、それを選択。 こだわりがなければ「日本語」にしておけばよい。

Figure 7: (キーボードレイアウトの)Variant
PCの名前を入力する。

Figure 8: Hostname
代替サーバの検索を有効にするか選択。 このオプションをオンにすると、LAN内のサーバからビルド済みバイナリを探して、インストールでそれも利用するようにする。 これをオンにすればダウンロードの速度の向上が期待される。(おそらくハッシュ値を利用して)純正であると確認された ものだけを使うので、セキュリティリスクはないが、盗聴している人がいる場合はなにをインストールしているか見ることが できる。

Figure 9: Substitute server discovory.
rootのパスワードを入力。ある程度強いものにしておきましょう。

Figure 10: System administrator password

Figure 11: (System administrator passwordの) Password confirmation required
ユーザの作成。 TAB
キーで「Add」を選択し、 Enter
してユーザ情報を入力。「Name」がユーザ名になる。

Figure 12: User creation

Figure 13: User creation(新規追加画面)

Figure 14: User creation(パスワードの確認)

Figure 15: User creation(ユーザ追加後)
デスクトップ環境を選択。=SPC= でチェックをつけられる。 複数選択可なので、今後使ってみたいものは気軽に入れてしまってもいいかも。 複数選んでもデフォルトは勝手にGNOMEになったので、違うものを入れてしまって戸惑うみたいなことには ならなそう。私はとりあえずデフォルトの「GNOME」と今後使ってみたい「Emacs EXWM」を追加した。

Figure 16: Desktop environment
ネットワークサービスを選択。基本はデフォルトのままでよさそう。 SSHで外から入りたい場合はOpenSSHのデーモンを有効にしないといけないかもしれない(よくしらない)。

Figure 17: Network service
パーティションをどのように切るかの流れを選択。パーティションとは、ざっくり言えばディスクの切り分けのこと(なはず)。 よく知らない場合は、「Guided - using the entire disk」か「Guided using the entire disk with encryption」 を選んでおくとよい。後者を選ぶとディスクが暗号化される。立ち上げる前にパスワードを要求されるようになるが、 ディスクを盗まれたり廃棄したり警察に押収されたりしたときに中身を勝手に見られることを防ぐことができるので、 なるべくこちらを選ぶことをおすすめする。ここでも後者を選択する。 「Manual」にすれば、一つのディスクで複数のOSを取り回せると思うが、試していない。上級者向け。

Figure 18: Partitioning method
使うディスクを選択。ここで間違ったディスクを選択するとそのディスクの中身は二度と戻りません。慎重に選びましょう。

Figure 19: Disk
パーティションの切り方を選択。といってもhomeディレクトリを別のパーティションとして切るか否かを聞いている。 homeディレクトリを分けることによって、今回のようにOSをインストールする際にhome以下のデータをそのままとっておける。 私はそこまで魅力を感じなかった(それよりもパーティションが分かれることによる管理コストのほうが面倒そう)ので、 「Everything is one partition」を選択。

Figure 20: Partition scheme
最後の確認。選択したディスクが消えてもよいディスクかしっかり確認して、「OK」を選択。

Figure 21: Guided partitioning
ディスクの暗号化に使うパスワードを入力。これもそこそこの長さにしておこう。 ディスクに対するパスワードなので、ネットワーク経由の攻撃とは違い、総当たりに対してソフトウェア的なブロックは見込めない。 総当たりされても一生解読されないくらいの長さにしましょう。

Figure 22: (ディスク暗号化の)Password required

Figure 23: (ディスク暗号化の)Password confirmation required
本当にフォーマットして(パーティション切って)よいか最後の確認。「Continue」を押すと二度と戻れません。 ここで確認できることは多くないですが、よいと思ったら「Continue」を選択。

Figure 24: Format disk?
すると以下の画面になるので、少し待つ。

Figure 25: Preparing partitions
ここで、はじめてSchemeが出てくる。guixはここに書いてあるとおりにシステムを構築してくれる。
最初にLocaleとして日本語を選択したが、日本語フォントはOSに含まれていないので、
このまま進むと豆腐だらけのOSを使うことになる。
これを防ぐため、システムのconfigureを変更する。 TAB
で「Edit」を選択。

Figure 26: Configuration file
するとnanoというエディタが立ち上がる。

Figure 27: nanoによる /etc/configure.scm
の編集画面
そこに、このような節があるはずだ。
|
|
ここにはグローバルにインストールされるパッケージが羅列されている。
この specification->package
の列にの日本語フォントのパッケージを追加すればよい。
つまり、以下のように変更する。
|
|
そうしたら、 C-x
(つまりコントロールを押しながらx)を押し、そのまま Enter
を押して保存する。

Figure 28: nanoによる /etc/configure.scm
の編集画面(編集後)
次の画面が表示されるのでそのまま従って Enter
を押下。

Figure 29: Press enter to contiunue
すると、次のようにインストールが始まる。ここでしばらく待機。
なお、shepherdとは一般的なLinuxにおけるsystemdに相当するもので、サービスマネージャである。
guix-daemonはguixを走らせるために重要なデーモンで、guixはこれを通じて操作することで管理者権限なしで
/gnu/store/
以下を触ることができる(らしい)。

Figure 30: インストール開始画面
インストールが終わると、以下のような画面が現れる。指示に従って、 Enter
を押す。

Figure 31: インストールの終わりの画面
これでインストールは終了だ。以下のような画面が出てくるので、指示に従い、インストールディスクを 抜いて再起動する。

Figure 32: Installation complete
起動
再起動すると、GRUBが立ち上がる。GRUBはBoot loaderで、OSの立ち上げを担う。 私はもともとメインで使っていたディスクをBitlockerで暗号化していたため、 マスターブートキーを入力させられている。おそらくそうでない人はここでなにも聞かれないのではなかろうか。

Figure 33: マスターブートキーの入力
その後、以下のようなGRUBのグラフィカルな画面が現れる。ほっておけば先に進むし、 Enter
を押してもよい。

Figure 34: GRUBのOS選択画面
すると、Guix Systemをインストールしたディスクの暗号化のパスワードを聞かれるので、入力。

Figure 35: ディスク暗号化のパスワードを入力
これで、Guix Systemが立ち上がる。日本語を表示できることを確認。

Figure 36: Guix Systemのログイン画面
あとはGNOMEのUIなので、普通にログインできるだろう。
日本語を表示したい
今、日本語を表示できることを確認した。
このままGuix Systemに一切のカスタマイズを加えるつもりがないのならば、この章は飛ばしても構わない。
しかし、おそらくGuix Systemを使う人は、ほとんど全員カスタマイズしたくなる性分の人だろう。
特にGuixは自由ソフトウェアを思想としており、プロプライエタリなドライバはデフォルトでは利用できない。
後述する手順を踏めば利用可能だが、それはここで言うカスタマイズに相当することに留意して欲しい。
また、ひとつ後の章では guix
コマンドによるパッケージのインストールも扱うので、
もしエディタにEmacsを使いたいという場合は、この章を次の章の後に行うとよい。
実は今日本語が表示できているのが奇跡な状態である。
詳細はわかっていないが、インストール時特有のプロセスによって日本語が表示できている。
カスタマイズしたくなり、 guix system reconfigure /etc/config.scm
したあかつきには、
もれなく文字が豆腐になった無惨なGuix System(というかGNOME)を見ることになる。
これを解決するため、 /var/lib/gdm/.config/fontconfig/fonts.conf
を作成し、以下のように書く。
場所的にルート権限が必要なので注意。
特にこだわりがなければ sudo nano /var/lib/gdm/.config/fontconfig/fonts.conf
|
|
gdmとはGNOME Display Managerのことであり、内部的なユーザとして扱われている。 しかしこいつはグローバルにインストールされたフォントの場所を知らないため、これを教えてあげようというわけだ。 その後、フォントのキャッシュを更新するために以下のコマンドを実行する。
|
|
これで guix system reconfigure /etc/config.scm
しても日本語が表示できるようになった。
ちなみに、 /etc/config.scm
ファイル(厳密には、別に場所はここである必要はないし、名前も自由)に作ってもらうことも
可能らしい。Taijuさんの設定ファイルにあるように、 services
に以下を追加すればよい。
|
|
パッケージのインストールのしかた
まずはじめに、
|
|
を走らせる必要がある。このコマンドはチャンネルから情報を取ってきて、各パッケージをアップデートしてくれる。
チャンネルとは、ざっくり言えばパッケージの定義の集合である。
厳密に言えば、Guile(Schemeの処理系のひとつ)のモジュールと呼ばれる単位で公開されているので、もっと柔軟でなんでもできる。
guix pull
自体がアップデートなしても実行に体感何分かかかること、guix自身がそこそこ頻繁にアップデートされること、
アップデートが入ると体感10分くらいかかることに留意してほしい。要は、 guix pull
はそこそこ遅い。
インストール基本的には以下のようなものを実行すればよい。これでEmacsをインストールできる。
|
|
また、アンインストールは以下のコマンド。
|
|
ちなみに guix insall
は guix package -i
のエイリアスで、
パッケージに関する操作はすべて guix package
に集約されている。たとえば、
|
|
とすれば、前の世代に戻れる。 私もあまり詳しくないが、ざっくり言えば、インストールやアンインストールをするたびに世代が進む(たぶん)。
インストールされたパッケージをリストするには
|
|
で、インストールできるパッケージをリストするには
|
|
また、正規表現にマッチするパッケージを検索するには
|
|
とする。
日本語IMEを入れる
私はSKK使いだが、残念ながら未だGuixのIMEにSKKを使う方法を知らない。 とりあえず最低限日本語を入力するため、 ibusとibus-anthyをインストールする。
|
|
そして、issueにあるように、 ~/.bash_profile
に以下を追記する。なければ新規作成。
|
|
もし ~/.cache/ibus
が存在するなら、全て削除し、再起動する。
再起動したあと、画面右上のボタンから設定に移行し、左のメニューからキーボードを選択する。 すると、以下のようになるはずだ。

Figure 37: IME変更前の状態
画面に写ったプラスボタンをクリックし、「日本語」を選択すると、 「日本語(Anthy)」が出ているので、それを選択する。

Figure 38: 言語の選択

Figure 39: IMEの選択
すると、以下のようになる。

Figure 40: IME変更後の状態
「Japanese」や「English(US)」は不要なので、右のスリードットを押して得られるメニューで削除を選択。

Figure 41: 不要なIMEの削除
これで無事日本語が入力できるはずだ。
不自由なソフトウェア
不自由なソフトウェア(プロプライエタリなドライバやファームウェア含む)を使いたい場合、 デフォルトのguixチャンネルは利用できない。 そのために、非公式のチャンネルとしてnonguixというものが存在する。 この章ではこのチャンネルを導入する。不自由なソフトウェアを利用したくない場合は、この章は飛ばしてよい。
READMEにあるように、 ~/.config/guix/channels.scm
に以下を書く。
このファイルはユーザが利用するguixのチャンネルを定義する。自分でGitレポジトリを作ってチャンネルとすることも可能だ。
|
|
これを書いたら、 guix pull
しておこう。
次に、Linuxカーネル及び不自由なファームウェア、ドライバを導入する。
これもREADMEにあるように、 /etc/config.scm
を以下のように変更する。
編集には管理者権限が必要であることに注意。
|
|
最後に、以下のコマンドを実行。こちらにも管理者権限が必要なので sudo
がついている。
guix system reconfigure
は、Guix Systemそのものの設定を読み直し、適宜ビルドするコマンドである。
そこそこに時間がかかるため、気長に待とう。
|
|
おわりに
Guix SystemやGuixの日本語情報はあまりなく、大変かもしれないが、是非使ってみて欲しい。 日本語の記事を書いてくれるとさらに嬉しい。
謝辞など
Guix Systemを導入し、さらにこの記事を書くにあたり、 Taijuさんにとてもお世話になりました。 この場を借りて感謝の意を表したいと思います。本当にありがとうございました。
また、Taijuさんと共にGuix-jpというGNU Guix及びGNU Guix Systemの日本語コミュニティを立ち上げました。 すこしでもGuixに興味を持った方は、是非遊びにきてください!!