共计 4198 个字符,预计需要花费 11 分钟才能阅读完成。
我想给大家分享一下我从 Debian7.7 转移到 NixOS14.12 系统的经验。
我使用的是 256MB RAM 的基于 KVM(Kernal Virtual Machine) 的 RamNode 的 VPS(Virtual Private Server)
在我开通一个 ID:399523 的通行证去问 RamNode 的服务支持请求添加一个 NixOS 的安装镜像 ISO 文件来挂载前,需要先找到一个可用的 SystemRescCd 镜像。
启动:系统恢复(sysresccd),默认的启动项。
通过命令行使用 VNC(Virtual Network Computing) 来控制。
通过 ssh 来安装系统比用 VNC 舒服些。所以我们设置 root 密码然后连接到正在运行的 SystemRescCd VPS
sysresccd ~ # passwd root
好的,现在我们连接进来了,开始 NixOS 的安装过程吧。首先,准备运行环境和存储空间。VPS 给了我们 30GB 的 HDD 空间在 /dev/sda
my-laptop $ ssh root@ipv4-of-your-vps
sysresccd ~ # bash
sysresccd ~ # export
sysresccd ~ # export LC_ALL=POSIX
sysresccd ~ # fdisk /dev/sda
我已经创建了一个虚拟内存交换分区在 /dev/sda1。然而根据我以往的经验,最好是提供至少 1G 的空间,因为 nix-env -i 命令构建包的时候可能会需要超过 700MB 的 RAM。
磁盘空间剩下的部分给 /dev/sda2。我通常会用 LVM,但这次我不去烦了,而是让 NixOS 启动和运行得尽量得快一些 :-)
sysresccd ~ # fdisk -l /dev/sda
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders, total 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa3f12756
Device Boot Start End Blocks Id System
/dev/sda1 2048 1050623 524288 82 Linux swap / Solaris
/dev/sda2 1050624 62914559 30931968 83 Linux
提示说安装系统要求的 RAM 容量的下限是至少 768MB。设置 Linux 的虚拟内存交换区在 /dev/sda1 然后激活它。
sysresccd ~ # mkswap /dev/sda1
sysresccd ~ # swapon /dev/sda1
在 /dev/sda2 创建 Ext4 的文件系统,起名为 nixos 然后挂载它。
sysresccd ~ # mkfs.ext4 -j -L nixos /dev/sda2
sysresccd ~ # mount LABEL=nixos /mnt
我们需要准备 Nix 环境来从运行着的 linux 系统安装 NixOS。SystemRescCd 没有足够大的分区(最大到 120MB),所以我把 tmpfs 挂载在 /var/empty 目录,这样就可以提供 256MB 的虚拟文件空间。
sysresccd ~ # mount -t tmpfs -o size=256M tmpfs /var/empty
创建一个我们用于安装 / 构建 NixOS 系统的用户 / 组
sysresccd ~ # groupadd -r -g 30000 nixbld
sysresccd ~ # useradd -c “Nix build user 1” -u 30001 -d /var/empty -g nixbld -G nixbld -M -N -r -s “$(which nologin)” nixbld1
sysresccd ~ # usermod -s “$(which bash)” nixbld1
sysresccd ~ # mkdir -m 0755 /mnt/nixtmp && chown nixbld1:nixbld /mnt/nixtmp
sysresccd ~ # ln -sv /mnt/nixtmp /nix
`/nix’ -> `/mnt/nixtmp’
更换为 nixbld1 用户来安装 Nix 环境。
sysresccd ~ # su – nixbld1
nixbld1@sysresccd ~ $ export
nixbld1@sysresccd ~ $ export LC_ALL=POSIX
nixbld1@sysresccd ~ $ export NIX_IGNORE_SYMLINK_STORE=1
nixbld1@sysresccd ~ $ bash <(curl https://nixos.org/nix/install)
nixbld1@sysresccd ~ $ . /var/empty/.nix-profile/etc/profile.d/nix.sh
nixbld1@sysresccd ~ $ nix-channel –remove nixpkgs
nixbld1@sysresccd ~ $ nix-channel –add http://nixos.org/channels/nixos-14.12 nixos
nixbld1@sysresccd ~ $ nix-channel –update
nixbld1@sysresccd ~ $ cat <<EOF > configuration.nix
{fileSystems.”/” = {};
boot.loader.grub.enable = false;
}
EOF
nixbld1@sysresccd ~ $ export NIX_PATH=nixpkgs=/var/empty/.nix-defexpr/channels/nixos:nixos=/var/empty/.nix-defexpr/channels/nixos/nixos
nixbld1@sysresccd ~ $ export NIXOS_CONFIG=/var/empty/configuration.nix
nixbld1@sysresccd ~ $ nix-env -i -A config.system.build.nixos-install -A config.system.build.nixos-option -A config.system.build.nixos-generate-config -f “<nixos>”
nixbld1@sysresccd ~ $ exit
sysresccd ~ # . /var/empty/.nix-profile/etc/profile.d/nix.sh
sysresccd ~ # nixos-generate-config –root /mnt
我们就要完成了!该配置你的 NixOS 系统的配置文件了。系统的样子完全就取决于你怎么设置这配置文件了。
sysresccd ~ # nano -w /mnt/etc/nixos/configuration.nix
通常只要按下面这样设置这几个参数就足够了。
boot.loader.grub.device = “/dev/sda”;
networking.hostName = “mynixos”;
services.openssh.enable = true;
users.extraUsers.user1 = {
isNormalUser = true;
uid = 1000;
home = “/home/user1”;
extraGroups = [“wheel”];
};
最后,启动 NixOS 系统!
sysresccd ~ # unset NIXOS_CONFIG
sysresccd ~ # export NIX_PATH=nixpkgs=/var/empty/.nix-defexpr/channels/nixos:nixos=/var/empty/.nix-defexpr/channels/nixos/nixos
sysresccd ~ # nixos-install
到这里我们几乎就全完成了。如果你想登录你的 NixOS,别忘了为你的用户和 root 设置密码。
sysresccd ~ # ls -latrh /nix/store/*/bin/bash
-rwxr-xr-x 1 nixbld1 nixbld 801K Jan 1 1970 /nix/store/r5sxfcwq9324xvcd1z312kb9kkddqvld-bash-4.3-p30/bin/bash
sysresccd ~ # nixos-install –chroot /nix/store/r5sxfcwq9324xvcd1z312kb9kkddqvld-bash-4.3-p30/bin/bash
(chroot) passwd root
(chroot) passwd user1
(chroot) exit
sysresccd ~ # usermod -s “$(which nologin)” nixbld1
sysresccd ~ # rm /nix
sysresccd ~ # rm -rf /mnt/nixtmp
sysresccd ~ # umount /mnt
sysresccd ~ # swapoff /dev/sda1
sysresccd ~ # sysctl -w vm.drop_caches=3
sysresccd ~ # sync
sysresccd ~ # shutdown -r now
一旦你登录到你的 NixOS 系统,别忘了检查报错和警告等的日志记录,并更新系统。
my-laptop ~ $ ssh user1@my-vps
[user1@mynixos:~]$ sudo su –
[root@mynixos:~]# journalctl -b -p crit
[root@mynixos:~]# journalctl -b -p warning
[root@mynixos:~]# nix-channel –update
[root@mynixos:~]# nixos-rebuild switch –upgrade
[root@mynixos:~]# nix-env -u ‘*’
余下的请看这里 NixOS Manual ;-)
祝你愉快 & 好运!
英文原文:Deploying NixOS on a 256 RAM VPS