install - Tokyo-NixOS/Tokyo-NixOS-Meetup-Wiki GitHub Wiki
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
まずは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
で確認できます。
まずは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の設定はMinimal CDで多少面倒なので、自信がなければ有線かFull CDでGUIで設定がおすすめです。
Wifi設定は専用なバーチャルコンソールに行いたいので、alt+F2
を押して第2バーチャルコンソールに移動します。
最初はネットワークインターフェイスを確認します
$ ifconfig -a
これですべてのインターフェイスはリストアップされるはずです。
WifiインターフェイスはwlpXs0
の名前でリストアップされるはず(X
は数字になります、例wlp4s0
)
wifiインターフェイス名をわかったら、次は利用できるアクセスポイント(ESSID)を確認します。
$ iwlist wlp4s0 scan | grep ESSID
※ wlp4s0
はifconfig
で見つけたインターフェイスに変更
次は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+c
でwpa_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
のコマンドで好きなエディターを利用できます。(ネットワーク必要)
vim
もemacs
もわからない場合は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やデスクトップ環境を設定する場合は下記のように設定すれば良いです
services = {
xserver = {
enable = true;
# X11で日本語キーボードレイアウト
layout = "jp";
displayManager.gdm.enable = true;
desktopManager.gnome3.enable = true;
};
};
services = {
xserver = {
enable = true;
# X11で日本語キーボードレイアウト
layout = "jp";
displayManager.kdm.enable = true;
desktopManager.kde4.enable = true;
};
};
services = {
xserver = {
enable = true;
# X11で日本語キーボードレイアウト
layout = "jp";
desktopManager.xterm.enable = false;
desktopManager.xfce.enable = true;
};
};
services = {
xserver = {
enable = true;
# X11で日本語キーボードレイアウト
layout = "jp";
desktopManager.xterm.enable = false;
desktopManager.e19.enable = true;
};
};
services = {
xserver = {
enable = true;
# X11で日本語キーボード
layout = "jp";
desktopManager.xterm.enable = false;
windowManager.i3.enable = true;
};
};
services = {
xserver = {
enable = true;
# X11で日本語キーボード
layout = "jp";
desktopManager.xterm.enable = false;
windowManager.awesome.enable = true;
};
};
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
で設定したユーザでログインできます!
これでセットアップが完了しました。