install - Tokyo-NixOS/Tokyo-NixOS-Meetup-Wiki GitHub Wiki

NixOSのインストール

前書

NixOSのインストール自体は難しくないですがコマンドラインを利用します。
気をつけたいところはパーティショニングです。
コマンドラインインストールをやったことがない場合は一度バーチャルマシンで試すのはいいかもしれません。


英語を読める方はぜひ一度公式インストールマニュアルに目を通してください。
-> 公式マニュアル

公式ページから最新のISOファイルをダウンロードします。
-> ダウンロードページ

このチュートリアルはMinimal Installation CDを使う前提です。

CDで起動したら、Grub画面が表示されます。そこで「NixOS <バージョン> Installer」を選択したままエンターキーを押します。

ブートが終わりましたら、プロンプトが表示されます。
この状態ではいつでも「alt+F8」でマニュアルを表示することができます。(「alt+F1」を押せばプロンプトに戻れます)

プロンプトで最初に行いたい事はキーボードレイアウトを日本語レイアウトに変更することです。

$ loadkeys jp106

パーティショニング

NixOSのインストールにでは「fdisk」や「gdisk」を利用して手動でパーティショニングを行います。
パーティショニングは複雑なトピックであります。

NixOSのソフトウェアはすべて「/nix/store/」にインストールされます。OSのデザインから「/nix/store/」が大きいなるので、十分な領域を与えたいです。(50ギガ以上は無難)

パーティショニングを行う前にArchlinuxのパーティショニングWikiページを読むのを勧めます。

MBRとGPTのに種類のパーティションがあります。簡単にまとめると

  • UEFIシステムはGPTを使わないといけない
  • GPTでgrubを利用できません(その代わりgummibootを使います)

詳しくはArchlinuxのWikiを参考にしてください。-> GPT か MBR の選択

参考までに1Tのハードディスクのパーティショニング(GPT):

  • /dev/sda1/bootを512M
  • /dev/sda2にswapを20G (RAMは16G)
  • /dev/sda3/を100G
  • /dev/sda4/homeの残りの810.5G

MBR

まずはfdiskで利用できるディスクを確認します。

$ fdisk -l

一つのハードディスクがある場合はすべてのディスクがリストされます。一つのハードディスクがある場合は「/dev/sda」がリストアップされるはず。

次はfdiskでパーティションを作ります。

$ fdisk /dev/sda

fdiskからパーティションを作ります。下記はあくまで参考のための例となります。
利用しているPCによって調整が必要となります。

  • o を入力して、enterキーを押します(パーティションテーブルを作成)

bootパーティション作成(任意)

  • nを入力して、enterキーを押します(パーティションを新しく作る)
  • pを入力して、enterキーを押します(種類をprimary)
  • enterキーを押します(パーティション番号、デフォルトのまま)
  • enterキーを押します(初めてのセクター、デフォルトのまま)
  • +200Mを入力して、enterキーを押します(サイズ設定、bootは100M以上がおすすめ)

swapパーティション作成(任意)

  • nを入力して、enterキーを押します(パーティションを新しく作る)
  • pを入力して、enterキーを押します(種類をprimary)
  • enterキーを押します(パーティション番号、デフォルトのまま)
  • enterキーを押します(初めてのセクター、デフォルトのまま)
  • +8Gを入力して、enterキーを押します(サイズ設定、PCのメモリによります 参考ページ)
  • tを入力して、enterキーを押します(パーティション種類変更)
  • 2を入力して、enterキーを押します(今作ったパーティション)
  • 82を入力して、enterキーを押します(swapに設定)

/パーティションの作成

  • nを入力して、enterキーを押します(パーティションを新しく作る)

  • pを入力して、enterキーを押します(種類をprimary)

  • enterキーを押します(パーティション番号、デフォルトのまま)

  • enterキーを押します(初めてのセクター、デフォルトのまま)

  • enterキーを押します(残り領域をすべて利用する)

  • pを入力して、enterキーを押して、パーティションテーブルを確認します

問題がなければ

  • wを入力して、enterキーを押して、パーティションテーブルを記録します

パーティショニングはこれで終わりました!
新しく出来たパーティションはfdisk -lで確認できます。

GPT

まずはfdiskで利用できるディスクを確認します。

$ fdisk -l

一つのハードディスクがある場合はすべてのディスクがリストされます。一つのハードディスクがある場合は「/dev/sda」がリストアップされるはず。

GPTパーティションを作成する際はgdiskを使います。

$ gdisk /dev/sda

gdiskからパーティションを作ります。下記はあくまで参考のための例となります。
利用しているPCによって調整が必要となります。

  • o を入力して、enterキーを押します(パーティションテーブルを作成)

bootパーティション作成(必須)

  • nを入力して、enterキーを押します(パーティションを新しく作る)
  • enterキーを押します(パーティション番号、デフォルトのまま)
  • enterキーを押します(初めてのセクター、デフォルトのまま)
  • +512Mを入力して、enterキーを押します(サイズ設定、UEFIのbootは512Mがおすすめ)
  • ef00を入力して、enterキーを押します(パーティションタイプ、EFI Systemに設定)

swapパーティション作成(任意)

  • nを入力して、enterキーを押します(パーティションを新しく作る)
  • enterキーを押します(パーティション番号、デフォルトのまま)
  • enterキーを押します(初めてのセクター、デフォルトのまま)
  • +8Gを入力して、enterキーを押します(サイズ設定、PCのメモリによります 参考ページ)
  • 8200を入力して、enterキーを押します(パーティションタイプ、Linux swapに設定)

/パーティションの作成

  • nを入力して、enterキーを押します(パーティションを新しく作る)

  • enterキーを押します(パーティション番号、デフォルトのまま)

  • enterキーを押します(初めてのセクター、デフォルトのまま)

  • enterキーを押します(残り領域をすべて利用する)

  • enterキーを押します(パーティションタイプ、デフォルトのLinux filesystemのまま)

  • pを入力して、enterキーを押して、パーティションテーブルを確認します

問題がなければ

  • wを入力して、enterキーを押して、パーティションテーブルを記録します

ファイルシステム

NixOSではいろいろなファイルシステムを利用できます。どれを利用すれば良いのわからない場合はext4が無難です。

前のパーティショニング通りにしていれば、

  • /dev/sda1はブート用
  • /dev/sda2はswap用
  • /dev/sda3は/用

では早速ファイルシステムを作ります

bootパーティションのみはGPTとMBRによってファイルシステムは変わります、利用したパーティションシステムに合ったファイルシステムを作る必要があります

次のコマンドは利用するパーティションシステムによって異なります


MBRの場合はext4にします

$ mkfs.ext4 -L boot /dev/sda1

GPTの場合はfat32にしないと行けないです

$ mkfs.fat -F32 /dev/sda1

$ mkswap /dev/sda2
$ mkfs.ext4 -L nixos /dev/sda3

パーティショニングをマウント

まずは/をマウントします

$ mount /dev/disk/by-label/nixos /mnt

次は/bootフォルダーを作ります

$ mkdir /mnt/boot

次のコマンドは利用するパーティションシステムによって異なります


MBRの場合はラベルを利用して/bootをマウントします。

$ mount /dev/disk/by-label/boot /mnt/boot

GPTの場合はmkfs.fatでラベルをパーティションにつけれないので、IDから直接マウントします。

$ mount /dev/sda1 /mnt/boot

最後にswapを有効にします

$ swapon /dev/sda2

ネットワーク

インストールにはネットワークが必要です。
有線で接続していれば自動的にネットワークが設定されます。

pingコマンドでネットワークを試せます。

$ ping nixos.org -c3

Wifi

Wifiの設定はMinimal CDで多少面倒なので、自信がなければ有線かFull CDでGUIで設定がおすすめです。

Wifi設定は専用なバーチャルコンソールに行いたいので、alt+F2を押して第2バーチャルコンソールに移動します。

最初はネットワークインターフェイスを確認します

$ ifconfig -a

これですべてのインターフェイスはリストアップされるはずです。
WifiインターフェイスはwlpXs0の名前でリストアップされるはず(Xは数字になります、例wlp4s0

wifiインターフェイス名をわかったら、次は利用できるアクセスポイント(ESSID)を確認します。

$ iwlist wlp4s0 scan | grep ESSID

wlp4s0ifconfigで見つけたインターフェイスに変更

次はwpa_supplicantサービスを停止します。

$ systemctl stop wpa_supplicant

interfaceにインタフェース名、ESSIDをアクセスポイント名とpassphraseをパスワードに入れ替えて、 次はこのコマンドで接続します

$ wpa_supplicant -i interface -c <(wpa_passphrase ESSID passphrase)

インターフェイスはwlp4s0、アクセスポイントはhogehogeとパスワードはhimitsuなら

$ wpa_supplicant -i wlp4s0 -c <(wpa_passphrase 'hogehoge' 'himitsu')

情報に問題がなければ大量なメッセージが表示されてアクセスポイントに接続されます。
第2バーチャルコンソールをこのままにしてalt+F1でバーチャルコンソール1に戻って、pingコマンドで接続状態を確認しましょう。

$ ping nixos.org -c3

pingは失敗なら、alt+F2でwifi接続バーチャルコンソールに戻ってからctrl+cwpa_supplicantプロセスを終了してもう一度試すか有線を利用すれば良い。

wpa_supplicantのメッセージにWRONG_KEYが含まれている場合はパスワードが間違ってると意味します。

設定

NixOSの設定ファイルを生成します。

$ nixos-generate-config --root /mnt

このコマンドでファイルは2つ生成されます

  • /mnt/etc/nixos/hardware-configuration.nix
  • /mnt/etc/nixos/configuration.nix

/mnt/etc/nixos/hardware-configuration.nixは変更が必要ないが、less等で確認するには損がない。
hardware-configuration.nixにはカーネルモジュールとファイルシステムが設定されています。

configuration.nixはメインの設定ファイルとなります。
今の段階でMBRの場合には必ず変更しないといけないです。

エディターはnanoしか入っていないので、vim派の人は

$ nix-env -iA nixos.vim
$ echo "set backspace=2" > ~/.vimrc

emacs派の人は

$ nix-env -iA nixos.emacs

のコマンドで好きなエディターを利用できます。(ネットワーク必要)

vimemacsもわからない場合はnanoが簡単でおすすめです。

configuration.nixを編集しましょう。
configurationはNixOSのメインの設定ファイルであって、変更する事でシステムのいろいろをカスタマイズできます。

Nix言語で書かれていて、オプションがいろいろあります。
公式サイトでオプションを検索できます。オプションページ

またコマンドラインでも探せます。

$ nixos-option networking.hostName
Value:
"nixos"

Default:
"nixos"

Description:

The name of the machine. Leave it empty if you want to obtain
it from a DHCP server (if using DHCP).

Declared by:
  "/nix/store/0q3jj4lqvvl4b330jfnwh56jjcm823m3-nixos-16.03pre75064.faae09f/nixos/nixpkgs/nixos/modules/tasks/network-interfaces.nix"

Defined by:
  "/nix/store/0q3jj4lqvvl4b330jfnwh56jjcm823m3-nixos-16.03pre75064.faae09f/nixos/nixpkgs/nixos/modules/tasks/network-interfaces.nix"

この時点で必要が必要なのはブートローダーです。 MBRとGPTそれぞれに設定が異なりますので、利用したパーティションシステムに合わせて設定をしましょう。

次のステップは利用するパーティションシステムによって異なります


必須 MBRの場合の設定はboot.loader.grub.device、デフォルトではコメントアウトされていますのでコメントアウトを外しましょう。
/dev/sdaはパーティションをセットアップしたディスクを指定する、/dev/sdaディスク以外にパーティションを作った場合は設定の変更が必要です。(この設定は有効でないとgrubはインストールされず、ブートはできません)

  boot.loader.grub.device = "/dev/sda";

GPTの場合はgrubが利用できないが、代わりにgummibootがデフォルトで設定されているはず。 設定が正しくと記述されているを確認しましょう。

  boot.loader.gummiboot.enable = true;
  boot.loader.efi.canTouchEfiVariables = true;

ついでにホスト名も好きな名前に設定しましょう

  networking.hostName = "nixos";

Wifiを使う場合はnetworking.wireless.enableを有効にします

  networking.wireless.enable = true;

国際化も設定しましょう

  i18n = {
    consoleFont   = "lat2-Terminus16";
    consoleKeyMap = "jp106";
    defaultLocale = "ja_JP.UTF-8";
  };

  time.timeZone = "Asia/Tokyo";

X11やデスクトップ環境を設定する場合は下記のように設定すれば良いです

Gnome

  services = {
    xserver = {
      enable = true;
      # X11で日本語キーボードレイアウト
      layout = "jp";
      displayManager.gdm.enable = true;
      desktopManager.gnome3.enable = true;
    };
  };

KDE

  services = {
    xserver = {
      enable = true;
      # X11で日本語キーボードレイアウト
      layout = "jp";
      displayManager.kdm.enable = true;
      desktopManager.kde4.enable = true;
    };
  };

XFCE

  services = {
    xserver = {
      enable = true;
      # X11で日本語キーボードレイアウト
      layout = "jp";
      desktopManager.xterm.enable = false;
      desktopManager.xfce.enable = true;
    };
  };

e19 / Enlightenment

  services = {
    xserver = {
      enable = true;
      # X11で日本語キーボードレイアウト
      layout = "jp";
      desktopManager.xterm.enable = false;
      desktopManager.e19.enable = true;
    };
  };

i3

  services = {
    xserver = {
      enable = true;
      # X11で日本語キーボード
      layout = "jp";
      desktopManager.xterm.enable = false;
      windowManager.i3.enable = true;
    };
  };

Awesome

  services = {
    xserver = {
      enable = true;
      # X11で日本語キーボード
      layout = "jp";
      desktopManager.xterm.enable = false;
      windowManager.awesome.enable = true;
    };
  };

Xmonad

  services = {
    xserver = {
      enable = true;
      # X11で日本語キーボード
      layout = "jp";
      windowManager.xmonad.enable = true;
      windowManager.xmonad.enableContribAndExtras = true;
      windowManager.default = "xmonad";
      desktopManager.default = "none";
      desktopManager.xterm.enable = false;
    };
  };

デフォルトのディスプレイマネージャーはSLiMとなります。
使えなくはないですが、多少古いので他のディスプレイマネージャーを利用したいかたもいます

LightDMの場合

  services.xserver.displayManager.lightdm.enable = true;

SDDMの場合

  services.xserver.displayManager.sddm.enable = true;

ユーザ作成もconfiguration.nixでできます。 users.extraUsersの後に来るのはユーザ名となります。

  # fooを好きなユーザ名に変更
  users.extraUsers.foo = {
    isNormalUser = true;
    # homeディレクトリを作る
    createHome   = true;
    uid          = 1000;
  };

インストール

ようやくインストールできます

$ nixos-install

最後に新しいシステムのrootパスワード頼まれます。
うまく設定できなかった場合はもう一度nixos-installを実行しましょう。

終わったら、マシンをパワーオフします。

$ poweroff

パワーオフ語はインストールCDやUSBを外してから起動しましょう。

再起動しましたら、設定したX11環境のログインもしくはプロンプトのログインが出ます。

configuration.nixでユーザを作り、X11環境を利用場合は、そのユーザのパスワードが設定されていないので、ctrl+alt+F2で別なバーチャルコンソールでrootとしてログインし、passwdコマンドでパスワードを設定しましょう。
ユーザ名がfooであれば:

$ passwd foo

exitコマンドでログアウトします。

$ exit

ctrl+alt+F7でX11のバーチャルコンソールに戻り、configuration.nixで設定したユーザでログインできます!

これでセットアップが完了しました。

⚠️ **GitHub.com Fallback** ⚠️