累了吗?不,你没有。记住你是个英雄。棘手的部分来了。我们将(呃...你将)构建客户端的根文件系统。这应该不会很难,但你可能需要使用试错法。
创建根文件系统最简单的方法是使用一个已经可以正常工作的文件系统,并根据无盘操作的需求对其进行定制。当然,如果你喜欢 :=),你也可以手动构建一个(就像在过去的好时光一样),但我不会在这里解释这个。
# cd /usr/src/linux # make modules_install INSTALL_MOD_PATH=/nfsroot |
# cd /nfsroot # touch fastboot # chmod 0 fastboot |
# cd /nfsroot/sbin # ln -s ../bin/true fsck.nfs |
启动脚本将必须进行定制,以便挂载文件系统的某些部分:/dev目录,如果你不使用 devfs,/tmp,/var和/etc目录。以下是一些实现此目的的代码
# this part only if you don't use devfs mke2fs -q -i 1024 /dev/ram0 16384 mount -n -t ext2 -o rw,suid,dev,exec, \ async,nocheck /dev/ram0 /dev # this part for everyone mke2fs -q -i 1024 /dev/ram1 16384 mount -n -t ext2 -o rw,suid,dev,exec, \ async,nocheck /dev/ram1 /tmp chmod 1777 /tmp cp -a /etc /tmp mke2fs -q -i 1024 /dev/ram2 16384 mount -n -t ext2 -o rw,suid,dev,exec, \ async,nocheck /dev/ram2 /etc find /tmp/etc -maxdepth 1 -exec cp -a '{}' /etc ';' mount -f -t ext2 -o rw,suid,dev,exec, \ async,nocheck,remount /dev/ram2 /etc mount -f -o remount / cp -a /var /tmp mke2fs -q -i 1024 /dev/ram3 16384 mount -t ext2 -o rw,suid,dev,exec, \ async,nocheck /dev/ram3 /var find /tmp/var -maxdepth 1 -exec cp -a '{}' /var ';' |
IPADDR="$(bootpc | awk '/IPADDR/ \ { match($0,"[A-Za-z]+") s=substr($0,RSTART+RLENGTH) match(s,"[0-9.]+") print substr(s,RSTART,RLENGTH) } ')" HOST="$(bootpc | awk '/HOSTNAME/ \ { match($0,"[A-Za-z]+") s=substr($0,RSTART+RLENGTH) match(s,"[A-Za-z0-9-]+") print substr(s,RSTART,RLENGTH) }')" DOMAIN="$(bootpc | awk '/DOMAIN/ \ { match($0,"[A-Za-z]+") s=substr($0,RSTART+RLENGTH) match(s,"[A-Za-z0-9-.]+") print substr(s,RSTART,RLENGTH) }')" |
然后,应使用 hostname $HOSTNAME 命令设置主机名。完成此操作后,就可以动态生成包含客户端 IP 地址或主机名的配置文件了。
*.* /dev/tty12 *.* @dns or IP of the logs server |
如果你使用 logrotate 并且已完成上述操作,则应将 logrotate 配置文件(/etc/logrotate.conf在大多数机器上)替换为空文件
# rm -f /etc/logrotate.conf # touch /etc/logrotate.conf |