linux,打造自己的专属迷你小linux(二)完善小linux功能,使其丰满

本文详细介绍了如何在小Linux环境下添加网络功能,包括安装网卡驱动、配置内核参数、实现网络启动、切换运行级别及关机操作,以及如何使系统支持账号和密码登录。通过步骤指导,读者可以轻松掌握小Linux网络系统的搭建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建立具有网络功能的小linux

先将需要的网络基础命令拷贝到小linux下
然后拷贝 ping和ifconfig
要添加网络功能就必须由网卡驱动,网卡驱动pcnet32
但是pcnet32有一个依存的模块是mii,mii没有依存的模块,
那所以我们就只需拷贝这两个模块到我们的
小linux下即可,拷贝前先查看一下这两个模块所在的路径,使用modinfo来查看,
查看完之后,我们发现需要在/mnt/sysroot/lib下创建一个目录叫modules,
那么我们先切换到这个目录下,然后创建
modules这个目录,在当前目录下拷贝以上两个模块,

cp /lib/modules/2.6.18-164.el5/kernel/drivers/net/pcnet32.ko ./
cp /lib/modules/2.6.18-164.el5/kernel/drivers/net/mii.ko ./


完成之后,我们需要让这两个模块在小linux启动时挂载使用,
系统启动加载额外的设备驱动在,/etc/rc.d/rc.sysinit
脚本中实现,并赋予IP地址,那么接下来就是编辑这个脚本
在里面加入一下内容:

 [  -d  /lib/modules/mii.ko  ]   &&  /sbin/insmod   /lib/modules/mii.ko
 [  -d  /lib/modules/pcnet32.ko  ]  &&  /sbin/insmod  /lib/modules/pcnet32.ko
 echo "Load The ethernet card drivers ok"



 在这个脚本中此时还没有bash的环境变量,所以必须使用命令的全路径,牢记

 echo "set address for lo..."
 /sbin/ifconfig 127.0.0.1/8
 
 echo "set address for eth0..."
 /sbin/ifconfig 192.168.0.188/24


 

####################################################################
让小linux实现使用/etc/sysctl.conf来实现配置内核参数:

配置linux系统的内核参数是在哪一步完成的呢?在/etc/rc.d/rc.sysinit脚本中完成的,它用来设置内核参数

if  [[  -x /sbin/sysctl && -r /etc/sysctl.conf  ]] ; then
          echo  {1}quot;configuring  kernel parameters............."
          /sbin/sysctl -p /etc/sysctl.conf
          echo {1}quot;...........kernel parameters  done."
fi


 

将这一段脚本添加到/etc/rc.d.rc.sysinit内即可实现小linux启动时来配置内核的参数
然后我们也会发现我们的小linux下没有这个文件/etc/sysctl.conf
所以我们需要在其下面创建这个文件,格式按照如下写,写你需要的而并不是全部复制!!!

# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename
# Useful for debugging multi-threaded applications
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1

# Controls the maximum size of a message, in bytes
kernel.msgmnb = 65536

# Controls the default maxmimum size of a mesage queue
kernel.msgmax = 65536

# Controls the maximum shared segment size, in bytes
kernel.shmmax = 4294967295

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 268435456


###########################################################
怎样使小linux切换到runlevel  1
定义系统默认运行级别是在/etc/inittab 中定义的,

id:3:initdefault:  定义默认运行级别

# System initialization.   这里还有七个级别下所需要脚本的定义
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0  在这个级别下需要开启任何服务,只需要关闭所有服务
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3  当默认选定级别3,就会运行写的目录下的脚本,以开启该级别下的服务
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6


级别0 1 6 都是特殊的级别

在小linux的/etc/inittab里添加一行

# for runlevel
l1:1:wait:/sbin/init -t1 S


有了这一行不当紧,你的小linux就可以切换到级别1 了

################################################################
可以使小linux关机

虽然使用init 0 可以关机  但实际上它是调用 halt 来实现的
那么只需要定义/etc/inittab就可以了,

# for runlevel
l0:0:wait:/etc/rc.d/rc.shutdown


 

为了实现关机,你还应该做的是任何在内存内还没有同步到磁盘的数据都同步到磁盘,
这样就要使用sync命令了,记得将sync命令拷贝到小linux上
同步到磁盘以后还要卸载所有文件系统,卸载完以后再实现关机,但是这时候是否能
找到这个关机命令呢?
我们现在/etc/rc.d/创建rc.shutdown这个脚本【记得将chmod也拷贝到小linux内】
在这个脚本内写入如下内容:

#!/bin/bash
#
sync   同步内存内没有同步到磁盘的数据
sleep 1 让其睡一秒   是数据完全同步完全
umount /dev/sda1           在你的系统如上在/etc/mtab这个文件你可以直接使用 umount -a这个命令来卸载全部
umount /dev/sda2
swapoff  -a 关闭所有被标示为swap的文件系统
exec /sbin/halt  -p   目的是避免打开子shell关不了机


 

这样就可以实现真正意义上得关机了,

记得在你的大脚本中添加这些东西,以实现自动完善
#####################################################################
使小linux使用账号和密码登陆:
cp -d 如果是链接  就拷贝链接
1,、启动至少一个终端
2.打印登陆提示用户
3、/etc/passwd ,/etc/shadow,/etc/group,/etc/gshadow最起码的文件
光有以上这些可以吗?
系统在识别用户的时候是靠ID号来识别的,用户的账号和ID号的对应关系是在/etc/passwd内的
但是如果不把这些信息放在此处,那么系统是不是就不知道这个对应关系了吧
这样系统就必须提供一种机制,让系统知道,当我们需要去把用户的账号转换成ID时到什么地方
去找,并不是login就知道到这里去找,而是login调用库文件将用户的账号和密码转换过来,
而这些库文件和login并没有紧密的耦合关系,调用哪个库文件不是login说了算得,为是由我们定义的
一种机制实现的,这种机制叫做名称服务开关,即nsswitch,它什么都没有只有一个配置文件在/etc/nsswitch.conf
只需要将这个配置文件提供给login,当login接受用户输入的账号,就必须到一个位置去验证ID号
此时这个配置文件内就定义了它要按照那种机制去找,如果定义了是按照文件去查找,login就会
查到相应的库文件,然后由库文件查找到用户的ID号,这样就用户可以更换这种机制
因此这些库文件分别对应一种机制就会有一个超找方法
一般,这些库文件会再/lib下
实际在/usr/lib也有,
可以ls -l /usr/lib | grep libnss
可以看到许多链接文件
其中libnss_files.so就是到passwd里查找的
对我们来说我们只需要files就可以了,当然files要想发挥机制必须结合主库文件
主库文件是libnss3.so,libnssckbi.so等,需要将他们留下,同时files想要工作就必须结合
compat来实现,因此也要将它留住,

我们拷贝库文件时拷贝是链接,但是实际拷贝的是源文件,所以我们就要用到cp的新命令
cp  -d  保留链接,
这样可以应付升级后找不到文件,添加链接就不会有这样的问题了

cp /usr/lib/libnss3.so /mnt/sysroot/usr/lib
                 libnssckbi.so
                 libnssutil3.so
cp -d         libnss_files.so
                 libnss_compat.so


 

当然最后两个拷过去之后是个死链接,你还要拷贝他俩所指向的文件
这些文件在/lib下,ls -l /lib | grep libnss
然后拷贝files和compat四个文件到相应的目录下即可

然后就是启动至少一个终端:
编辑/mnt/sysroot/etc/inittab加上就可以了

# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6


此时我们启动时,/etc/rc.d/rc.sysinit已经直接启动了一个/bin/bash 用户登录的时候是
不允许再启动的,此时我们应该将我们小linux下的这个文件重新编辑一下,去掉那个”/bin/bash“
然后该打印登录提示了,我们此时需要一个login,我们需要将这个login放在我们小linux对应的目录下即/bin/login
但是此时这个login是有依赖的库文件的,所以我们应该将对应的库文件拷过来,即cp -d /lib/libcrypt.so.1

cp -d /lib/libcrypt-2.5.so
cp /lib/libm.so.6这样就可以实现了
sync记得多敲几下


然后你需要用户的相关信息,如果你不嫌麻烦的话,就自己定义这个文件,或者直接把原有的拷贝过来
cp -p保留原权限

然后再拷贝   /etc/nsswith.conf 到小linux下就准备完毕了
接下来就是
启用级别一,编辑小linux下的/etc/inittab,在里面加入
l1:1:wait:/sbin/init -t1 S


 

此时就可以见证奇迹了
################################################################
显示主机名,以及登录信息

在linux启动流程中我们知道有一个脚本有给主机命名的功能,那就是/etc/rc.d/rc.sysinit
还有主机名是放在/etc/sysconfig/network里面的,所以我们应该再其下面建立这个文件

在这个文件内写入HOSTNAME=little.linux.org就可以了
然后我们改编辑rc.sysinit脚本了,在脚本内写上

[ -r /etc/sysconfig/network ]  &&  source /etc/sysconfig/network
[ -z $HOSTNAME ] && HOSTNAME = localhost

echo "$HOSTNAME" > /proc/sys/kernel/hostname


想打印登录信息都在/etc/issue内那我们就自己建立以下,在里面编辑
welcome to little.linux.org.

然后在切换到小linux下,在root下建立一个文件叫bash_profile在里面写入

PS='[\u@\h \W]\




即可,
然后执行以下source ~/.bash_profile即可生效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值