简单定制linux系统

这是一些学习笔记,存在不足之处,请指正。

平台:vmware 12 操作系统:centos5.1

  • 硬盘

准备硬盘,20G

分区
  1. fdisk /dev/sdb

格式化分区
  1. mke2fs -j /dev/sdb1
  2. mkswap /dev/sdb2
  3. mke2fs -j /dev/sdb3
挂载硬盘
  1. mkdir /mnt/{boot,sysroot}
  2. mount /dev/sdb1 /mnt/boot
  3. mount /dev/sdb3 /mnt/sysroot
生成grub
  1. grub-install --root-directory=/mnt /dev/sdb1 

/mnt:可以理解为根分区

/dev/sdb1:挂在到/mnt/boot下的分区

  1. ls -l /mnt/boot
  2. drwxr-xr-x 2 root root  1024 Aug  3 07:45 grub 
  3. drwx------ 2 root root 12288 Aug  3 07:42 lost+found

  • 内核相关配置

vmlinuz

此处为了方便,不编译内核,,直接复制现有的内核

  1. cp /boot/vmlinuz-2.6.18-398.el5 /mnt/boot/vmlinuz
initrd

initrd是在内存上加载的驱动根目录文件系统的一个文件,要在现有的/boot/initrd-2.6.18-398.el5.img稍作修改即可

  1. file initrd-2.6.18-398.el5.img  
  2. initrd-2.6.18-398.el5.img: gzip compressed data, from Unix, last modified: Wed Jul 20 15:23:58 2011, max compression

initrd-2.6.18-398.el5.img为压缩文件,先复制为gzip可以识别的格式,再解压

  1. cp /boot/initrd-2.6.18-398.el5.img /~/initrd-2.6.18-164.el5.img.gz
  2. cd
  3. gunzip initrd-2.6.18-164.el5.img.gz

说明:

initrd也可以这样操作,更加简便。在/root/test下

  1. zcat  /boot/initrd-2.6.18-398.el5.img | cpio -id

然后就可以看到文件的内容:

  1. ls
  2. bin  dev  etc  init  lib  proc  sbin  sys  sysroot

initrd-2.6.18-398.el5.img为cpio归档文件

  1. file initrd-2.6.18-164.el5.img  
  2. initrd-2.6.18-164.el5.img: ASCII cpio archive (SVR4 with no CRC)
  3. mkdir test
  4. cd !$

在一个单独的文件夹下进行解压

  1. cpio -id < initrd-2.6.18-164.el5.img

修改init文件

  1. vim init
  2. 找到
  3. mkrootdev -t ext3 -o defaults,ro /dev/vol0/root
  4. 改为
  5. mkrootdev -t ext3 -o defaults,ro /dev/sda3

说明:当硬盘挂载到新的虚拟机上时,/根所在分区会被识别为/dev/sda3

重新打包,并放到/mnt/boot下

  1. find . | cpio -H newc -o --quiet | gzip -9 > /mnt/boot/initrd.gz

  • 建立系统启动相关文件

在/mnt/sysroot/创建/根下的文件夹

  1. mkdir -pv bin,sbin,usr/{bin,sbin},proc,sys,home,root,mnt,media,var,lib,etc,dev,boot,tmp
init

系统启动需要/sbin/init

  1. cp /sbin/init /mnt/sysroot/sbin/

init还需要一些库文件的支持

  1. ldd /sbin/init
  2. linux-vdso.so.1 =>  (0x00007fff3adc4000)
  3. libsepol.so.1 => /lib64/libsepol.so.1 (0x0000003f67a00000)
  4. libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003f67600000)
  5. libc.so.6 => /lib64/libc.so.6 (0x0000003f5f800000)
  6. libdl.so.2 => /lib64/libdl.so.2 (0x0000003f60000000)
  7. /lib64/ld-linux-x86-64.so.2 (0x0000003f5f400000)

这样复制命令和库文件较为麻烦,因此写了如下的脚本,只要将需要复制的命令名称输入,即可复制对应命令库文件

  1. #!/bin/bash
  2. #
  3. dst=/mnt/sysroot
  4. libcp(){
  5. lib_path=${1%/*}
  6. [ ! -d $dst$lib_path ] && mkdir -p $dst$lib_path
  7. [ ! -e $dst$1 ] && cp $1 $dst$lib_path && echo "copy $1 finished."
  8. }
  9. bincp(){
  10. cmd_path=${1%/*}
  11. [ ! -d $dst$cmd_path ] && mkdir -p $dst$cmd_path
  12. [ ! -e $dst$1 ] && cp $1 $dst$cmd_path
  13. for lib in `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do
  14. libcp $lib
  15. done
  16. }
  17. read -p "Enter the command that you want to copy: " user_cmd
  18. until [ $user_cmd == "q" ]; do
  19. ! which $user_cmd && echo -e "\e[31;5m\tWrong Command!\e[0m" && read -p "Enter the command that you want to copy: " user_cmd && continue
  20. cmd_real_path=`which $user_cmd | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
  21. bincp $cmd_real_path
  22. echo "Command $user_cmd copy finished."
  23. echo -e "\e[32m##########################################################\e[0m"
  24. read -p "Enter the command that you want to copy: " user_cmd
  25. done

在这里我复制的命令有ls、mkdir、rm、ln、chown,chmod、ping、mount、insmod、modprobe等

到此处,可以使用chroot /mnt/sysroot/ 切换到其中,可以发现,刚才复制的命令都可以使用。

inittab
  1. cd /mnt/sysroot/etc/ 
  2. vim inittab 
  3. #在里面写入:
  4. id:3:initdefault 
  5. si::sysinit:/etc/rc.d/rc.sysinit 

这定义了开机之后以第3中模式(即命令行模式进入系统),并启动系统sysinit

rc.sysinit
  1. vim /etc/rc.d/rc.sysinit
  2. #!/bin/bash 
  3. echo -e "====================================" 
  4. echo -e "  \e[31;5mWelcome to MY Linux\3[0m" 
  5. echo -e "  \e[32m`date`\e[0m"  
  6. echo -e "===================================="  
  7. insmod /lib/modules/mii.ko 
  8. insmod /lib/modules/pcnet32.ko
  9. ifconfig eth0 192.168.8.61/16
  10. ifconfig lo 127.0.0.1
  11. /bin/bash 

定义了系统启动后好后,显示的内容,以及启用的shell,这里是/bin/bash

说明:这两个模块和网络驱动相关

insmod /lib/modules/mii.ko

insmod /lib/modules/pcnet32.ko

增加执行权限

  1. chmod +x rc.sysinit  

grub.conf

进入/mnt/boot/grub下,找到grub.conf,编辑

  1. default=0 
  2. timeout=5  
  3. title My Linux 
  4.         root (hd0,0) 
  5.         kernel /vmlinuz ro root=/dev/sda3
  6.         initrd /initrd.gz 

这个文件定义了开机加电自检之后,系统读取了MBR中bootloarder,如何去加载内核等相关信息

到此,制作完成。

在vmware中新建一个虚拟机,使用刚才制作的硬盘启动,OK。

来自为知笔记(Wiz)

时间: 2024-10-16 10:24:10

简单定制linux系统的相关文章

定制简单的Linux系统

制作思路: 新加一块硬盘,设置两个分区,一个存/boot,一个存/,创建文件系统并格式化.要注意,现在我们家的硬盘是要可以拔下来安装到其他机器上使用的,否则就没有意义了.试验中的硬盘sdb当换到其他机器上就是我们熟悉的sda了. 简单的Linux系统应该包括:内核文件,grub,bash,再加些常用工具就可以了. 准备工作: 添加工具和命令可以通过脚本来实现,所以我们先准备一个可以复制命令并安装的脚本. #!/bin/bash #----------------------------- #Fi

使用kernel编译+busybox定制Linux系统--实现ssh远程登录+web服务的迷你主机

在运维工作中很多时候我们需要裁剪Linux系统,减少系统性能的消耗,提升系统服务的性能,以往通过光盘安装的Linux都是比较臃肿的,但出现这样的需求后,我可以对Linux进行重新编译再busybox工具移植即可实现,接下来我们一步一步实现kernel编译+busybox定制Linux系统--实现ssh远程登录+web服务: 实现过程如下: 一.规划子主机的磁盘存储规划 1.添加一个大小为10G的硬盘 2.查询系统硬件信息参数: # lspci  00:00.0 Host bridge: Inte

linux内核分析 第三周 构造一个简单的Linux系统MenuOS

一.计算机的三个法宝 存储程序计算机,函数调用堆栈,中断二.操作系统的两把剑:1.中断上下文的切换,保存现场和恢复现场2.进程上下文的切换. 三.linux内核源代码的分析: ·arch/目录保存支持多种CPU类型的源代码,重点是x86·init目录:含有main.c,内核启动相关的代码基本都在init目录下·ipc目录:进程间的通信·kernel目录:有Linux内核的核心代码.四.构造一个简单的Linux系统 使用实验楼的虚拟机打开shell 1.cd LinuxKernel/2.qemu

作业3:构造一个简单的Linux系统MenuOS 20135115臧文君

构造一个简单的Linux系统MenuOS 注:作者:臧文君,原创作品转载请注明出处,<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内核源代码介绍 1.根目录 arch/x86目录下的代码是我们重点关注的,arch中包括支持不同CPU的源代码. init目录下包含内核启动相关的代码,如main.c(start_kernel函数相当于普通C程序的main函数,是Linux内核初始化的起点). ipc

Linux内核设计第三周——构造一个简单的Linux系统

Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核源代码分析 arch/目录保存支持多种CPU类型的源代码 其中的关键目录包括:Documentation.drivers.firewall.fs(文件系统).include init目录:含有main.c,内核启动相关的代码基本都在init目录下 start_kernal()函数为启动函数,初始化内

20135327郭皓--Linux内核分析第三周 构造一个简单的Linux系统MenuOS

Linux内核分析第三周  构造一个简单的Linux系统MenuOS 前提回顾 1.计算机是如何工作的三个法宝 1.存储程序计算机 2.函数调用堆栈 3.中断 2.操作系统的两把宝剑 中断上下文的切换 进程上下文的切换 第一讲  Linux内核源代码介绍 arch目录包括了所有和体系结构相关的核心代码.它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录.PC机一般都基于此目录. init目录包含核心的初始化代码(不是系统的引导代

《Linux内核分析》第三周笔记 构造一个简单的Linux系统MenuOS

构造一个简单的Linux系统MenuOS 一.linux内核源代码简介 三大法宝(存储程序计算机.函数调用堆栈.中断)和两把宝剑(中断上下文的切换:保存现场和恢复现场.进程上下文的切换) 1.在linux内核源码里面arch占有的代码量相当庞大.arch/x86目录下的代码是我们重点关注的. 2.内核启动相关的代码基本都在init目录下(main.c). start_kernel是初始化linux内核的起点. start_kernel相当于c程序中的main函数 3.linux内核的核心代码在k

《Linux内核分析》第三周 构建一个简单的Linux系统MenuOS

[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK THREE(2.29——3.6)构造一个简单的Linux系统MenuOS SECTION 1 Linux内核源代码简介 1.操作系统的两把宝剑(回顾上一讲) 中断上下文的切换——保存现场&恢复现场 进程上下文的切换 2.Linux内核源代码简介 打开内核源代码页面 arch/目录:支持不同CPU的源代码:其中的

第三周——构建一个简单的Linux系统MenuOS

[洪韶武 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ] 第三周  构建一个简单的Linux系统MenuOS