手把手带你自制Linux系统之五 一些小细节的完善
来源:互联网 发布:闪电算法 编辑:程序博客网 时间:2024/04/29 23:16
1. 设置主机名
mkdir /mnt/sysroot/etc/sysconfigvi /mnt/sysroot/etc/sysconfig/network
内容:
HOSTNAME="minilinux"
rc.sysinit中使用hostname命令使HOSTNAME生效
vi /mnt/sysroot/etc/rc.d/rc.sysinit
添加
echo "Set the hostname..."[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network[ -z $HOSTNAME -o "$HOSTNAME" == "(none)" ] && HOSTNAME=localhost/bin/hostname $HOSTNAME
2. 终端提示信息
系统在完成所有初始化工作后会启动虚拟终端,如mingetty和agetty,它们在调用login前会打印一段信息,
来提示当前系统是哪个发行版,内核版本号及平台架构。比如:
这段信息其实来自/etc/issue文件, 这个文件也常被用来获取当前系统发行版。
[root@localhost ~]# cat /etc/issueCentOS release 5.4 (Final)Kernel \r on an \m
vi /mnt/sysroot/etc/issue
Mini Linux (2.6.18)Kernel \r on an \mMy Mini Linux
3. 设置内核参数
Linux内核启动后,仍然可以通过向内核传递参数的方式来对内核进行一系列的配置,达到优化内核的目的,传递给内核的这些参数就是内核参数。
调整内核参数有两种方式:
1). 修改/proc下内核参数文件内容,/proc是虚拟文件系统,不能使用编辑器来修改,可以使用echo value重定向的方式修改。
如:将 timeout_timewait 参数设置为30秒:
# echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
参数修改后立即生效,但是重启系统后,该参数恢复成默认值。
2). 修改/etc/sysctl.conf文件。检查sysctl.conf文件,如果已经包含需要修改的参数,则修改该参数的值,如果没有需要修改的参数,在sysctl.conf文件中添加参数。如:
net.ipv4.tcp_fin_timeout=30
保存退出后,可以重启机器使参数生效,如果想使参数马上生效,也可以执行如下命令:
# sysctl -p
下面就使用第二种方式修改内核参数,打开IP转发功能。
创建内核参数文件:
vi /mnt/sysroot/etc/sysctl.conf
添加内容:
net.ipv4.ip_forward = 1
使sysctl.conf文件每次开机生效:
vi /mnt/sysroot/etc/rc.d/rc.sysinit
添加:
sysctl -p &>/dev/null[ $? -eq 0 ] && success "Set kernel parameter" || failure "Set kernel parameter"
bincp.sh 复制 sysctl命令
开机后查看/proc/sys/net/ipv4/ip_forward,内容为1,说明内核参数生效
4. 单用户模式
当runlevel(运行级别)为1时,系统进入单用户模式。一个非常有用的应用场景是在忘记登录密码时,
进入单用户模式(不需要密码),然后重设密码。
在inittab中添加runlevel为1时的动作
vi /mnt/sysroot/etc/inittab
增加一行
l1:1:wait:/etc/rc.d/rc 1
rc.d下添加rc1.d,其中加入相应服务的软链接,目前只有一个network服务
mkdir /mnt/sysroot/etc/rc.d/rc1.dcd /mnt/sysroot/etc/rc.d/rc1.dln -sv ../init.d/network K90network
使用init 1/S/s 命令可以进入单用户模式。类似关机/重启脚本,关机时进入0运行级别,重启时进入6进行级别。使用init命令进入1运行级别时会遍历/etc/rc.d/rc1.d下的脚本,关闭或打开相应服务。需要在rc1.d中添加一个真正切换到单用户模式下的服务脚本。
创建单用户模式服务脚本
vi /mnt/sysroot/etc/rc.d/init.d/single
内容
#!/bin/bash#exec /sbin/init S
添加可执行权限,并在rc1.d下创建软链接
chmod +x /mnt/sysroot/etc/rc.d/init.d/singlecd /mnt/sysroot/etc/rc.d/rc1.d/ln -sv ../init.d/single S98single
5. 重新挂载根文件系统可读写
vi etc/rc.d/rc.sysinit
添加:
echo "Remount rootfs..."mount -n -o remount,rw /[ $? -eq 0 ] && success "Remount rootfs" || failure "Remount rootfs"
-n 选项很关键,指明挂载时不要写入 /etc/mtab文件,因为这条命令执行前,文件系统还是只读的,不加-n会导致命令执行失败。
6. 挂载/etc/fstab中定义的其他文件系统
/etc/fstab中定义了各种文件系统的信息,系统在启动后应该保证挂载的文件系统和fstab中描述的信息一致。
创建fstab文件
vi /mnt/sysroot/etc/fstab
内容:
/dev/hda2 / ext3 defaults 0 0 /dev/hda1 /boot ext3 defaults 0 0 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0
查看/proc/mounts文件中已挂载的文件系统,对比/etc/fatab找出还没有挂载的文件系统,然后挂载。
在rc.sysinit中加入如下命令:
echo "Mount other filesystem..."
grep -E -v "\<swap|proc|sysfs\>" /etc/fstab | awk '{print $1}' | while read LINE; do awk '{print $1}' /proc/mounts | grep "^$LINE$" > /dev/null; if [ $? -ne 0 ]; then echo "mount -o rw $LINE `grep "^$LINE\>" /etc/fstab | awk '{print $2}'`" mount -o rw $LINE `grep "^$LINE\>" /etc/fstab | awk '{print $2}'` fi done
[ $? -eq 0 ] && success "Mount other filesystem" || failure "Mount other filesystem"
7. 总结
至此,一个具备丰富功能的MiniLinux算是完成了。但是这个Linux中使用的kernel,initrd,所有命令等,大部分来自另一个系统中现成的东西,将这些东西堆砌起来做成的这个MiniLinux顶多算是组装,完全谈不上自制。在下一章中将要从头开始做一个Linux系统,不过这次不再使用现成的东西,而改用源码编译的方式来制作,真正达到自制的目的。
- 手把手带你自制Linux系统之五 一些小细节的完善
- 手把手带你自制Linux系统之二 简易Linux的制作
- 手把手带你自制Linux系统之六 编译内核及busybox完成系统定制
- 手把手带你自制Linux系统之一 准备工作
- 手把手带你自制Linux系统之三 添加关机重启及用户登录功能
- 手把手带你自制Linux系统之四 添加网络功能
- Mavericks系统安装的一些小细节
- linux 整理的一些小应用(待完善)
- 作为Linux小白,一些需要注意的小细节
- 手把手教你自制一寸两寸照
- 手把手带你入门之Swagger UI
- 手把手带你入门之Swagger UI
- 手把手教你如何建立自己的Linux系统
- 手把手教你如何建立自己的Linux系统
- 【MFC基础教程】小宝手把手带你去做自己的计算器
- 自制小功能的一些总结
- linux的一些细节!
- char的一些小细节
- 多用字面量语法,少用与之等价的方法
- Maximum Value
- 读取手机联系人
- 判断某一年是闰年还是平年
- ionic学习笔记3
- 手把手带你自制Linux系统之五 一些小细节的完善
- 机器学习算法与Python实践之(四)支持向量机(SVM)实现
- 打印图案
- 假设检验中的p值
- HDU-3466-Proud Merchants(01背包问题)
- Android中往手机自带的存储空间写入文件
- iOS开发学习之OC篇1、类的创建
- Androidstudio加速编译
- 递归与非递归遍历二叉树(前序、中序、后序)