前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在一台 256 兆内存的 VPS 中部署 NixOS

在一台 256 兆内存的 VPS 中部署 NixOS

作者头像
星哥玩云
发布2022-07-04 11:06:46
1.1K0
发布2022-07-04 11:06:46
举报
文章被收录于专栏:开源部署

我想给大家分享一下我从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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文档服务
文档服务(Document Service,DS)是腾讯云数据万象提供云上文档处理服务,支持多种类型的文件生成图片或 html 格式的预览,可以解决文档内容的页面展示问题,满足 PC、App 等多端的文档在线浏览需求。同时,本产品还提供文本隐私筛查能力,可以有效识别文本中的身份证号、银行卡号、手机号等敏感数据,满足数据可用性和隐私保护的各种要求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档