----更新:一个脚本能够一键制做这个小Linux,功能没有写的那么多,基本的开机能够了,见附件mklinux----linux

先简述一下开机原理:ios

机器加电--bios读取cmos设定--把控制权交给第一个开机装置MBR,如若是第一个开机装置MBR中没有bootloader则交给第二个,依次类推--MBR中的bootloader程序根据在硬盘中的设置读取内核与一个叫initrd的虚拟文件系统,由于如今的硬盘大都是SATA与SCSI的,内核中不集成这个驱动,经过加载Initrd这个虚拟的文件系统来加载SCSI的驱动,又有同窗问了:为何不把驱动作到内核中呢?这个是由于SCSI的驱动不少,作进去内核会很臃肿--毕竟是虚拟的文件系统,因此要切换到真实的文件系统上来,内核来完成根切换--完成根切换后内核把控制权交给init程序--init读取/etc/inittab它的配置文件,根据配置文件完成初始化。经过看配置文件咱们可知inittab完成这些工做1.默认开机级别 2.调用/etc/rc.d/rc.sysinit完成环境初始化 3.根据默认的开机级别启动不一样的服务脚本 /etc/rc.d/rc 这个脚本完成的任务 4.设定Ctrl+Alt+Del键的做用 5.设定电源UPS管理 6.调用/sbin/mingetty启动6个终端 。6.若是是5级别的话启动图形界面。OK  下面再来讲说rc.sysinit完成的工做:1.初始化网络,设定主机名 2.启动SELinux 3.加密装置 4.设置系统时钟 5.加载驱动 6.启动软raid与LVM 7.启用quota 8.可写方式从新挂载/ 9.启动日志     基本原理就是这样的bash

下面在vmware上来制做一个微型的Linux系统,能基于passwd认证,网络可用,iptables可用,ssh可用,vi可用,其它的都舍去了,其实它就是一个tiny防火墙。网络

环境:vmware8.0  redhat5.8(宿主机) 内核2.6ssh

一.为宿主机添加一块2G大小scsi硬盘,开机。ide

这个我就不演示了。测试

二.在新建的硬盘上创建系统加密

1.对新建的硬盘分区spa

fdisk /dev/sdb              ##这个是新加的那个硬盘

n

p

1

1

+50M                         ##新建一个分区为/boot分区

n

p

2

[回车]

+1G                          ##新建一个分区为/分区

w                              ##保存

# partprobe /dev/sdb    ##不用重启机器,立马分区生效

# mke2fs –j /dev/sdb1

# mke2fs –j /dev/sdb2  ##格式化两个分区

# mkdir –pv /mnt/{boot,sysroot}   ##创建两个目录,用于挂载sdb1,sdb2

# mount /dev/sdb1 /mnt/boot

# mount /dev/sdb2 /mnt/sysroot    ##挂载它们

2.提供内核日志

# cp /boot/vmlinuz-`uname -r` /mnt/boot/vmlinuz-tiny    ##用宿主机的内核

3.提供Initrd这个用于切换根分区的文件,这个文件不一样系统是不同的,下面咱们修改原来的。

# cp /boot/initrd-`uname -r`.img /tmp/initrd.gz

# cd /tmp

# gzip –d initrd.gz     ##解压后type initrd可知为cpio压缩的,下面用cpio解压

# mkdir init

# cd init

# cpio –ivcdu <..>

# vi init     ##编辑它

#resumeLABEL=SWAP-sda3   ##注释这个swap分区,由于咱们没有启用swap

mkrootdev -t ext3 -o defaults,ro /dev/sda2    ##把咱们新建的第二个分区未来看成根分区,看好是sda2

##由于把这个磁盘放到新机器上它就是sda2

保存,退出

# find . | cpio –ovcB | gzip –9>/mnt/boot/initrd-tiny

3.为磁盘安装grub,分两个步骤,先安装/boot/grub这个配置部分,再安装MBR中的程序部分

# grub-install –root-directory=/mnt /dev/sdb    ##程序会到/mnt下找boot目录,在boot下生成grub的配置目录,

##/dev/sdb表明安装到MBR中

# ls /mnt/boot 查看是否生成了grub目录 ,若是有则继续

# grub

>root (hd1,0)/         ##输入 root (hd1,0)/ 按TAB查看有没有刚才拷贝的vmlinuz-tiny,有的话继续

>setup (hd2)           ##安装到MBR中

为grub创建配置文件/mnt/boot/grub/grub.conf

# vi /mnt/boot/grub/grub.conf

default=0

timeout=3

title A Tiny Linux

root (hd0,0)

kernel /vmlinuz-tiny

initrd /initrd-tiny

到此grub安装完毕

4.在/mnt/sysroot 下创建必备的目录

# mkdir -pv /mnt/sysroot/{root,sbin,bin,usr/{lib,sbin,bin},etc/rc.d,var,\

proc,sys,tmp,dev,lib,home}

5.移植init这个程序到/mnt/sysroot下

# which init    #可知Init在/sbin/下

# ldd /sbin/init 查看依赖的库文件

把init与下面显示的库文件复制到相对应的位置

# cp /sbin/init /mnt/sysroot/sbin/init

# cp /lib/libsepol.so.1 /mnt/sysroot/lib

# cp /lib/libselinux.so.1 /mnt/sysroot/lib

# cp lib/libc.so.6  /mnt/sysroot/lib

# cp /lib/libdl.so.2 /mnt/sysroot/lib

# cp /lib/ld-linux.so.2 /mnt/sysroot/lib

6.以一样方式移植bash,方法同上,我就不写了

7.有了这两个程序,在添加以下配置文件系统就能够启动了

# vi /mnt/sysroot/etc/inittab

id:3:initdefault:

si::sysinit:/etc/rc.d/rc.sysinit

# vi /etc/rc.d/rc.sysinit

#!/bin/bash

export PATH=/bin:/sbin:/usr/bin:/usr/sbin

echo "Welcome to Tiny Linux"

/bin/bash

chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit

到此系统基本能够启动了,下面测试

休眠宿主机,新建虚拟机,选择磁盘时选已存在的磁盘,用刚才的磁盘

测试可否启动到bash,若是能则继续

三.添加一些命令,并支持密码认证,hostname,并支持网络

你是否发现copy命令与库时很麻烦,下面提供个脚本cp.sh,用来copy命令与库的,关闭tinylinux,打开宿主机继续吧

# vi cp.sh

function cpbin {

if which $1 &>/dev/null; then

local binpath=$(which --skip-alias $1)

else

return 10

fi

if [ ! -d /mnt/sysroot${binpath%/*} ];then

mkdir -p /mnt/sysroot${binpath%/*}

fi

if [ ! -e /mnt/sysroot/$binpath ];then

cp $binpath /mnt/sysroot/$binpath

else

return 11

fi

}

function cplib {

if which $1 &>/dev/null;then

local binpath=$(which --skip-alias $1)

else

return 10

fi

modules=$(ldd $binpath | grep -o '[^[:space:]]*/lib/[^[:space:]]\+')

for I in $modules

do

[ ! -e /mnt/sysroot$I ]&& cp $I /mnt/sysroot/$I

done

}

while : ;do

read -p "A command (q to exit): " cmd

if [ $cmd != "q" ];then

stat=

cpbin$cmd

stat=$?

if [ $stat== "10" ] ;then

echo "No such Command"

elif [ $stat== "11" ];then

echo "$cmd have been existed "

else

cplib $cmd

fi

else

break;

fi

done

给个执行权限,就拷贝须要的命令吧!!

1.拷贝 ls mv cat cp ifconfig ping vi iptables mingetty login depmod modprobe hostname mount shudown reboot sync halt poweroff

# sh cp.sh 输入以上命令便可

2.修改/mnt/sysroot/etc/inittab 以下

id:3:initdefault:

si::sysinit:/etc/rc.d/rc.sysinit

1:2345:respawn:/sbin/mingetty tty1        ##就添加了几个虚拟终端

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

init 调用mingetty来启动虚拟终端,mingetty会调用login来让用户登录,而login会调用pam接口来认证用户的帐号密码,pam对这个tinylinux来讲,显的太大了,因而咱们用修改过的login程序直接调用/etc/passwd /etc/shadow 来认证吧,上面移植那个login是为了库文件,修改过的login在附件中

4.下载login,copy到/mnt/sysroot/bin下,并给执行权限

# chmod +x /mnt/syroot/bin/login

5.创建/etc/passwd /etc/shadow  /etc/group ,直接用系统上的吧

# grep ^root /etc/passwd>/mnt/sysroot/etc/passwd

# grep ^root /etc/group >/mnt/sysroot/etc/group

# grep ^root /etc/shadow >/mnt/sysroot/etc/shadow

# chmod 400 /mnt/sysroot/etc/shadow

或许你觉得认证应该完了,其实login会调用/lib/libnss开头的库文件,把它们与它们的配置文件/etc/nsswitch.conf 移植过去

# cp /etc/nsswitch.conf /mnt/sysroot/etc/

# cp /lib/libnss* /mnt/sysroot/lib/

6.通常内核编译时网卡驱动被编译成模块,好比vmware须要的pcnet32模块,因此咱们要移植过去,固然还有它依赖的mii模块。iptables须要的模块有不少,咱们不可能一个个的加载. # find /lib/modules/2.6.18-308.el5/kernel/ | grep netfilter  发现netfilter的模块的主要目录,移植过去。

# modinfo pcnet32    ##查看pcnet32的位置,及依赖模块

# modinfo mii    ##查看mii的位置,没有依赖任何模块

移植它们

# mkdir -pv /mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/ipv4

# cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/pcnet32.ko \

/mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/

# cp  /lib/modules/2.6.18-308.el5/kernel/drivers/net/mii.ko \

/mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/

# cp /lib/modules/2.6.18-308.el5/kernel/net/netfilter/   \

/mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/

# cp /lib/modules/2.6.18-308.el5/kernel/net/ipv4/netfilter/ \

/mnt/sysroot/lib/modules/2.6.18-308.el5/kernel/drivers/net/ipv4/

# chroot /mnt/sysroot/

# depmod              ##生成依赖关系以便modprobe加载

iptables 依赖/lib/iptables 下的模块,移植过去

# cp /lib/iptables /mnt/sysroot/lib/

7.修改/mnt/sysroot/etc/rc.d/rc.sysinit,以下

#!/bin/bash

export PATH=/bin:/sbin:/usr/bin:/usr/sbin

echo "Welcome to Tiny Linux"

modprobe pcnet32

modprobe iptable_filter

modprobe iptable_nat

mount -o rw /

ifconfig eth0 172.16.1.2/16

hostname www.laoguang.me

export PS1='[\u@\h \W]\$'

休眠宿主机,启动tinylinx,哇,须要验证了,输入你宿主机root的帐号密码,登录成功,这时ifconfig 你会发现eth0有ip了,世界立马美好了好多。

8.移植/etc/sysctl.conf 并修改ip_forward的值

# cp /etc/sysctl.conf /mnt/sysroot/etc/

# vi /mnt/sysroot/etc/sysctl.conf

net.ipv4.ip_forward=1

开机测试

# iptables -A INPUT -p icmp -j DROP

ping 一下别的主机测试

头疼,移植Dropbear实现ssh有空再写。。。。。。。。

linux上pcnet模块,制做微型linux相关推荐

  1. Tiny Core Linux 4.5 发布,微型 Linux 操作系统

    世界上最小的Linux桌面发行版--Tiny Core Linux 今天发布了4.5版本. Tiny Core Linux是一个基于Linux2.6版本内核,采用BusyBox.Tiny X.FLTK ...

  2. linux上安装shell编辑器与linux运维面试题

    分两个部分 一.安装B-shell解释器 安装cygwin  Eclipse要找到安装的bin路径 https://cygwin.com 二.安装编辑器shellEd 下载可以得到一个:net.sou ...

  3. linux上安装osg_如何在 Linux 上安装并启用 Flatpak 支持? | Linux 中国

    Flatpak 提供了一种通用的包封装格式,可以在任何 Linux 发行版中使用.它提供了一个沙箱(隔离的)环境来运行应用程序,不会影响其他应用程序和发行版核心软件包.-- Magesh Maruth ...

  4. Linux从头开始学--学习笔记9知识点补充-ubuntu,centos;在linux上创建c程序;linux基础命令,shell命令,vi命令,man帮助手册

    这是我从头开始学习Linux的学习笔记,后续还会更新. 记录自己的技术成长,也希望和大家分享交流,欢迎关注~ 本笔记为coursera网站课程<Linux for Developers>的 ...

  5. 操作系统课程设计:Linux系统调用/基于模块的文件系统/Linux驱动/统计Linux系统缺页的次数 整合

    目录 一.可选题目 题目1:新增Linux系统调用 题目2:实现基于模块的文件系统 题目3:新增Linux驱动程序 题目4:统计Linux系统缺页的次数 二.操作顺序 附录:参考资料 题1 题2 题3 ...

  6. 在linux上编译错误,Daemontools 在 Linux上编译错误解决

    在Linux上编译daemontools出现错误 执行install出现 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .t ...

  7. linux离线安装redmine_9 款 Linux 上的最佳笔记应用 | Linux 中国

    无论你做什么,做笔记总是一个好习惯.https://linux.cn/article-12307-1.html作者:Ankush Das译者:Xingyu.Wang 无论你做什么,做笔记总是一个好习惯 ...

  8. sqlserver linux 付费吗_9 款 Linux 上的最佳笔记应用 | Linux 中国

    无论你做什么,做笔记总是一个好习惯. 来源:https://linux.cn/article-12307-1.html 作者:Ankush Das 译者:Xingyu.Wang 无论你做什么,做笔记总 ...

  9. linux上类似迅雷的软件,linux下有没有像迅雷或者快车的那种下载软件?

    clark_2011 于 2011-04-02 17:17:55发表: 学习中! teber 于 2011-04-02 11:39:13发表: 一直用迅雷,看来下东西还要两个系统来回切了, 要是能多台 ...

最新文章

  1. 从《黑客帝国》说起,我们如何证明这个世界不是一个系统?
  2. 浅析营销型网站SEO优化的四大原则!
  3. go语言的channel特性
  4. linux内核版本 2.6.39,linux – 为什么这个内核模块在2.6.39上被标记为永久
  5. 数据与程序分离——程序中那些表的事儿
  6. 云计算的认识和看法_云存储已经成为存储的未来,你的存储跟上节奏了吗?
  7. 综述 | 知识图谱实体链接:一份“由浅入深”的综述
  8. Spring-context-ApplicationEvent/ApplicationListener/ApplicationEventMulticaster
  9. 机器学习基础(四十四)—— 优化
  10. c语言c99标准_从年薪10万到年薪30万,C语言程序员必读的5本书
  11. Security+认证学习/备考经验
  12. Json时间格式转换
  13. 中文字体的英文名称(宋体 微软雅黑)
  14. 基本存款账户编号怎么查_基本存款账户编号是行号吗?
  15. 【一起学加密4】一次性密码本
  16. IE浏览器调用jquery需要注意的小问题
  17. 华为 服务器 驱动 linux,华为服务器SAS控制器驱动问题
  18. QQ音乐 最新歌曲源 API(稳定)
  19. 【鸿蒙】HarMonyOS之Text组件的常用属性
  20. 关于Firefox 3.x 火狐的旧插件

热门文章

  1. 2018年房价跌了?100个城市新房均价涨1259元
  2. ROS学习笔记(1)ROS安装(推荐使用鱼香ROS安装工具,少走很多弯路)
  3. Mysql常用函数之Rank 排名函数
  4. 关于初学者Invalid byte tag in constant pool: 19错误
  5. python手记(四):pillow(一) Image类简单图片处理
  6. R10-10 给订单量最多的员工,加薪1000元
  7. java中dom树形结构_DOM树的结构
  8. conda的安装与使用
  9. conda安装albumentations
  10. BZOJ4031——HEOI小z的房间