はじめに

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

Figure 1: Locale language

次に、Locale locationで「日本」を選択。

Figure 2: Locale location

Figure 2: Locale location

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

Figure 3: GNU Guix install

Figure 3: GNU Guix install

タイムゾーンを「Asia」「Tokyo」と選択。

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

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

Figure 5: Timezoneの選択

Figure 5: Timezoneの選択

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

Figure 6: (キーボードの)Layout

Figure 6: (キーボードの)Layout

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

Figure 7: (キーボードレイアウトの)Variant

Figure 7: (キーボードレイアウトの)Variant

PCの名前を入力する。

Figure 8: Hostname

Figure 8: Hostname

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

Figure 9: Substitute server discovory.

Figure 9: Substitute server discovory.

rootのパスワードを入力。ある程度強いものにしておきましょう。

Figure 10: System administrator password

Figure 10: System administrator password

Figure 11: (System administrator passwordの) Password confirmation required

Figure 11: (System administrator passwordの) Password confirmation required

ユーザの作成。 TAB キーで「Add」を選択し、 Enter してユーザ情報を入力。「Name」がユーザ名になる。

Figure 12: User creation

Figure 12: User creation

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

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

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

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

Figure 15: User creation(ユーザ追加後)

Figure 15: User creation(ユーザ追加後)

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

Figure 16: Desktop environment

Figure 16: Desktop environment

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

Figure 17: Network service

Figure 17: Network service

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

Figure 18: Partitioning method

Figure 18: Partitioning method

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

Figure 19: Disk

Figure 19: Disk

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

Figure 20: Partition scheme

Figure 20: Partition scheme

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

Figure 21: Guided partitioning

Figure 21: Guided partitioning

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

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

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

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

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

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

Figure 24: Format disk?

Figure 24: Format disk?

すると以下の画面になるので、少し待つ。

Figure 25: Preparing partitions

Figure 25: Preparing partitions

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

Figure 26: Configuration file

Figure 26: Configuration file

するとnanoというエディタが立ち上がる。

Figure 27: nanoによる /etc/configure.scm の編集画面

Figure 27: nanoによる /etc/configure.scm の編集画面

そこに、このような節があるはずだ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
(pacakges
 (append
  (list
   ;; このへんはEmacs EXWMをDesktop environmentとして選んだときだけ
   (specification->package "emacs")
   (specification->package "emacs-exwm")
   (specification->package
    "emacs--desktop-environment")
   (specification->package "nss-certs"))
  %base-packages))

ここにはグローバルにインストールされるパッケージが羅列されている。 この specification->package の列にの日本語フォントのパッケージを追加すればよい。 つまり、以下のように変更する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
(pacakges
 (append
  (list
   ;; このへんはEmacs EXWMをDesktop environmentとして選んだときだけ
   (specification->package "emacs")
   (specification->package "emacs-exwm")
   (specification->package
    "emacs--desktop-environment")
   (specification->package "nss-certs")
   (specification->package "fontconfig")
   (specification->package "font-google-noto"))
  %base-packages))

そうしたら、 C-x (つまりコントロールを押しながらx)を押し、そのまま Enter を押して保存する。

Figure 28: nanoによる /etc/configure.scm の編集画面(編集後)

Figure 28: nanoによる /etc/configure.scm の編集画面(編集後)

次の画面が表示されるのでそのまま従って Enter を押下。

Figure 29: Press enter to contiunue

Figure 29: Press enter to contiunue

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

Figure 30: インストール開始画面

Figure 30: インストール開始画面

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

Figure 31: インストールの終わりの画面

Figure 31: インストールの終わりの画面

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

Figure 32: Installation complete

Figure 32: Installation complete

起動

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

Figure 33: マスターブートキーの入力

Figure 33: マスターブートキーの入力

その後、以下のようなGRUBのグラフィカルな画面が現れる。ほっておけば先に進むし、 Enter を押してもよい。

Figure 34: GRUBのOS選択画面

Figure 34: GRUBのOS選択画面

すると、Guix Systemをインストールしたディスクの暗号化のパスワードを聞かれるので、入力。

Figure 35: ディスク暗号化のパスワードを入力

Figure 35: ディスク暗号化のパスワードを入力

これで、Guix Systemが立ち上がる。日本語を表示できることを確認。

Figure 36: 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

1
2
3
4
5
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
  <dir>/run/current-system/profile/share/fonts/</dir>
</fontconfig>

gdmとはGNOME Display Managerのことであり、内部的なユーザとして扱われている。 しかしこいつはグローバルにインストールされたフォントの場所を知らないため、これを教えてあげようというわけだ。 その後、フォントのキャッシュを更新するために以下のコマンドを実行する。

1
fc-cache -fv

これで guix system reconfigure /etc/config.scm しても日本語が表示できるようになった。 ちなみに、 /etc/config.scm ファイル(厳密には、別に場所はここである必要はないし、名前も自由)に作ってもらうことも 可能らしい。Taijuさんの設定ファイルにあるように、 services に以下を追加すればよい。

1
2
3
4
5
6
7
8
(extra-special-file "/var/lib/gdm/.config/fontconfig/fonts.conf"
                    (plain-file "gdm-fonts.conf"
                                "<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
  <dir>/run/current-system/profile/share/fonts/</dir>
</fontconfig>
"))

パッケージのインストールのしかた

まずはじめに、

1
guix pull

を走らせる必要がある。このコマンドはチャンネルから情報を取ってきて、各パッケージをアップデートしてくれる。 チャンネルとは、ざっくり言えばパッケージの定義の集合である。 厳密に言えば、Guile(Schemeの処理系のひとつ)のモジュールと呼ばれる単位で公開されているので、もっと柔軟でなんでもできる。 guix pull 自体がアップデートなしても実行に体感何分かかかること、guix自身がそこそこ頻繁にアップデートされること、 アップデートが入ると体感10分くらいかかることに留意してほしい。要は、 guix pull はそこそこ遅い。

インストール基本的には以下のようなものを実行すればよい。これでEmacsをインストールできる。

1
guix install emacs

また、アンインストールは以下のコマンド。

1
guix remove emacs

ちなみに guix insallguix package -i のエイリアスで、 パッケージに関する操作はすべて guix package に集約されている。たとえば、

1
guix package --roll-back

とすれば、前の世代に戻れる。 私もあまり詳しくないが、ざっくり言えば、インストールやアンインストールをするたびに世代が進む(たぶん)。

インストールされたパッケージをリストするには

1
guix package -I

で、インストールできるパッケージをリストするには

1
guix package -A

また、正規表現にマッチするパッケージを検索するには

1
guix search regexp

とする。

日本語IMEを入れる

私はSKK使いだが、残念ながら未だGuixのIMEにSKKを使う方法を知らない。 とりあえず最低限日本語を入力するため、 ibusとibus-anthyをインストールする。

1
guix install ibus ibus-anthy

そして、issueにあるように、 ~/.bash_profile に以下を追記する。なければ新規作成。

1
2
3
4
5
6
export GUIX_GTK2_IM_MODULE_FILE="$HOME/.guix-profile/lib/gtk-2.0/2.10.0/immodules-gtk2.cache"
export GUIX_GTK3_IM_MODULE_FILE="$HOME/.guix-profile/lib/gtk-3.0/3.0.0/immodules-gtk3.cache"
export IBUS_COMPONENT_PATH="$HOME/.guix-profile/share/ibus/component"
export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus

もし ~/.cache/ibus が存在するなら、全て削除し、再起動する。

再起動したあと、画面右上のボタンから設定に移行し、左のメニューからキーボードを選択する。 すると、以下のようになるはずだ。

Figure 37: IME変更前の状態

Figure 37: IME変更前の状態

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

Figure 38: 言語の選択

Figure 38: 言語の選択

Figure 39: IMEの選択

Figure 39: IMEの選択

すると、以下のようになる。

Figure 40: IME変更後の状態

Figure 40: IME変更後の状態

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

Figure 41: 不要なIMEの削除

Figure 41: 不要なIMEの削除

これで無事日本語が入力できるはずだ。

不自由なソフトウェア

不自由なソフトウェア(プロプライエタリなドライバやファームウェア含む)を使いたい場合、 デフォルトのguixチャンネルは利用できない。 そのために、非公式のチャンネルとしてnonguixというものが存在する。 この章ではこのチャンネルを導入する。不自由なソフトウェアを利用したくない場合は、この章は飛ばしてよい。

READMEにあるように、 ~/.config/guix/channels.scm に以下を書く。 このファイルはユーザが利用するguixのチャンネルを定義する。自分でGitレポジトリを作ってチャンネルとすることも可能だ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
(cons* (channel
        (name 'nonguix)
        (url "https://gitlab.com/nonguix/nonguix")
        ;; Enable signature verification:
        (introduction
         (make-channel-introduction
          "897c1a470da759236cc11798f4e0a5f7d4d59fbc"
          (openpgp-fingerprint
           "2A39 3FFF 68F4 EF7A 3D29  12AF 6F51 20A0 22FB B2D5"))))
       %default-channels)

これを書いたら、 guix pull しておこう。

次に、Linuxカーネル及び不自由なファームウェア、ドライバを導入する。 これもREADMEにあるように、 /etc/config.scm を以下のように変更する。 編集には管理者権限が必要であることに注意。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
;; (use-modules (gnu)) の行を以下に変更
(use-modules (gnu)
             (nongnu packages linux)
             (nongnu system linux-initrd))

(operating-system
 ;; 以下の行を追記
 (kernel linux)
  (initrd microcode-initrd)
  (firmware (list linux-firmware))
  ...
  )

最後に、以下のコマンドを実行。こちらにも管理者権限が必要なので sudo がついている。 guix system reconfigure は、Guix Systemそのものの設定を読み直し、適宜ビルドするコマンドである。 そこそこに時間がかかるため、気長に待とう。

1
sudo guix system reconfigure /etc/config.scm

おわりに

Guix SystemやGuixの日本語情報はあまりなく、大変かもしれないが、是非使ってみて欲しい。 日本語の記事を書いてくれるとさらに嬉しい。

謝辞など

Guix Systemを導入し、さらにこの記事を書くにあたり、 Taijuさんにとてもお世話になりました。 この場を借りて感謝の意を表したいと思います。本当にありがとうございました。

また、Taijuさんと共にGuix-jpというGNU Guix及びGNU Guix Systemの日本語コミュニティを立ち上げました。 すこしでもGuixに興味を持った方は、是非遊びにきてください!!