页面

2011年3月26日

制作Archlinux的无盘工作站

前言

之前整理房间时发现以前淘汰下来的一套旧电脑主机,于是装起来玩玩。 CPU、内存、显卡什么的都有,就差一个IDE的硬盘,本来想外接一个移动硬盘装系统的,主板BIOS却不支持从USB启动。还好自带的网卡支持PXE,于是便研究了下Linux下的无盘工作站。

测试环境:

服务器

  • OS:Archlinux
  • IP:10.10.10.10/24

客户端

  • OS:Archlinux
  • IP:DHCP

备注

服务器和客户端都处在同一个10.0.0.0/24网段中,客户端的所有数据全部保存在服务器上,本身不带硬盘等存储设备。


服务器配置

一、安装系统

正常安装一个可用的系统,这个没什么好写的,看Arch Wiki即可。

二、配置dhcp服务

pacman -S dhcpd

编辑 /etc/dhcpd.conf,添加以下内容

ddns-update-style interim;
subnet 10.0.0.0 netmask 255.255.255.0 {
  range 10.0.0.100 10.0.0.200;  # 分配地址的范围
  option routers 10.10.10.10;
  option subnet-mask 255.255.255.0;
  next-server 10.10.10.10;
  filename "pxelinux.0";
  allow booting;
  allow bootp;
}

三、配置nfs服务

由于客户端是没有存储设备的,客户端产生的所有数据都需要保存到服务器上,方法是用nfs

pacman -S nfs-utils

编辑 /etc/exports,添加以下内容

/srv/arch/pc01 10.0.0.0/24(rw,sync,no_root_squash,no_subtree_check)

注:/srv/arch/pc01 为客户端系统所在目录,详见下面的『安装客户端系统』;红色的10.0.0.0/24表示允许访问的IP地址段。

四、配置tftp服务

pacman -S tftp-hpa mkpxelinux

然后运行

(root) mkpxelinux

客户端配置

安装客户端系统

注意,这个系统仍然是安装在服务器端,当客户机开机后就是用这个系统启动的,所以如果是自定义内核的需要确保包含客户端的硬件驱动,也可以直接用Archlinux的内核。这里假设客户端的系统安装到 /srv/arch/pc01

mkdir -p /srv/arch/pc01/var/{cache/pacman/pkg,lib/pacman}

复制服务器的软件源列表到客户端,这个要注意客户端是32位或64位的,要把软件源改为相应的

cp /etc/pacman.d/mirrorlist /srv/arch/pc01/mirrorlist
cp /etc/pacman.conf /srv/arch/pc01/pacman.conf

同步客户端的软件源

pacman --root /srv/arch/pc01 --cachedir /srv/arch/pc01/var/cache/pacman/pkg --config /srv/arch/pc01/pacman.conf -Sy

为客户端安装基本系统

pacman --root /srv/arch/pc01 --cachedir /srv/arch/pc01/var/cache/pacman/pkg --config /srv/arch/pc01/pacman.conf -S base

chroot 进客户端系统

mount -t proc proc /srv/arch/pc01/proc
mount -t sysfs sysfs /srv/arch/pc01/sys
mount -t tmpfs udev /srv/arch/pc01/dev
cp /etc/resolv.conf /srv/arch/pc01/etc/resolv.conf
chroot /srv/arch/pc01

编辑 /etc/mkinitcpio.conf 并添加以下内容

MODULES="nfs" # 添加 nfs
HOOKS="base udev net autodetect pata scsi sata filesystems" # 添加 net

生成适用于pxe启动的客户端内核

pacman -S mkinitcpio-nfs-utils
mkinitcpio -p kernel26

编辑客户端的 /etc/fstab

10.10.10.10:/srv/arch/pc01 / nfs defaults 0 0
proc /proc proc defaults 0 0

编辑客户端的 /etc/rc.conf

NETWORK_PERSIST="yes"
DAEMONS=(... !network ...) # 禁用网络

复制客户端内核到 /var/tftpboot

exit  # 退出chroot
cp /srv/arch/pc01/boot/vmlinux26 /var/tftpboot
cp /srv/arch/pc01/boot/kernel26.img /var/tftpboot

编辑 /var/tftpboot/pxelinux.cfg/default,在最下面新建一个 label

label Archlinux
kernel vmlinuz26
append initrd=kernel26.img rootfstype=nfs nfsroot=10.10.10.10:/srv/arch/pc01 ip=::::::dhcp

启动服务

/etc/rc.d/dhcpd start
/etc/rc.d/tftp start
/etc/rc.d/nfs-server start

允许服务被访问,编辑 /etc/hosts.allow

nfsd : all
rpcbind : all
mountd : all
tftpd : all
in.tftpd : all

到这里为止,服务器的配置已经完成,可以去打开客户端的电源,注意确保客户端的网络连通。 :)


参考文献


全文完

没有评论:

发表评论