自制linux系统——打造属于自己的linux系统

很多时候我们直接使用别人帮我们打包好的一个linux系统,总感觉某些工具或者命令多余或者效果不好,那我们是否可以自制一个比较符合自己需求的linux系统出来了,答案是肯定的,而且实现这个目标也并困难,需要的时间也不会太长。接下来就给大家分享如何自制的过程。

环境需求:

1、Vmware虚拟机

2、Centos6.8光盘镜像IS0文件

3、Vmware上安装一份Centos6.8的操作系统

第一步:装载一块新硬盘到虚拟机的Centos6.8系统上,并保证系统正常读取

[[email protected] ~]# lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda      8:0    0   20G  0 disk

├─sda1   8:1    0  200M  0 part /boot

├─sda2   8:2    0    5G  0 part /

└─sda3   8:3    0    5G  0 part /test

sr0     11:0    1  3.7G  0 rom

[[email protected] ~]# echo "- - -" > /sys/class/scsi_host/host0/scan

[[email protected] ~]# lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda      8:0    0   20G  0 disk

├─sda1   8:1    0  200M  0 part /boot

├─sda2   8:2    0    5G  0 part /

└─sda3   8:3    0    5G  0 part /test

sr0     11:0    1  3.7G  0 rom

sdb      8:16   0   20G  0 disk

[[email protected] ~]#

第二步:分区格式化并挂载,boot分区200M,根分区2G,统一格式化成ext4文件系统,boot分区卷标:boot,根分区卷标:root,boot分区挂载到/mnt/boot,根分区挂载到/mnt/root

[[email protected] ~]# fdisk /dev/sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with disk identifier 0x7a85194e.

Changes will remain in memory only, until you decide to write them.

After that, of course, the previous content won‘t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to

switch off the mode (command ‘c‘) and change display units to

sectors (command ‘u‘).

Command (m for help): n

Command action

e   extended

p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-2610, default 1):

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +200M

Command (m for help): n

Command action

e   extended

p   primary partition (1-4)

p

Partition number (1-4): 2

First cylinder (27-2610, default 27):

Using default value 27

Last cylinder, +cylinders or +size{K,M,G} (27-2610, default 2610): +2G

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

[[email protected] ~]# lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

sda      8:0    0    20G  0 disk

├─sda1   8:1    0   200M  0 part /boot

├─sda2   8:2    0     5G  0 part /

└─sda3   8:3    0     5G  0 part /test

sr0     11:0    1   3.7G  0 rom

sdb      8:16   0    20G  0 disk

├─sdb1   8:17   0 203.9M  0 part

└─sdb2   8:18   0     2G  0 part

[[email protected] ~]# mkfs.ext4 -L boot /dev/sdb1

mke2fs 1.41.12 (17-May-2010)

Filesystem label=boot

OS type: Linux

Block size=1024 (log=0)

Fragment size=1024 (log=0)

Stride=0 blocks, Stripe width=0 blocks

52208 inodes, 208812 blocks

10440 blocks (5.00%) reserved for the super user

First data block=1

Maximum filesystem blocks=67371008

26 block groups

8192 blocks per group, 8192 fragments per group

2008 inodes per group

Superblock backups stored on blocks:

8193, 24577, 40961, 57345, 73729, 204801

Writing inode tables: done

Creating journal (4096 blocks): done

Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

[[email protected] ~]# mkfs.ext4 -L root /dev/sdb2

mke2fs 1.41.12 (17-May-2010)

Filesystem label=root

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

131648 inodes, 526128 blocks

26306 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=541065216

17 block groups

32768 blocks per group, 32768 fragments per group

7744 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912

Writing inode tables: done

Creating journal (16384 blocks): done

Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 27 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

[[email protected] ~]# mkdir /mnt/boot

[[email protected] ~]# mkdir /mnt/root

[[email protected] ~]# mount /dev/sdb1 /mnt/boot

[[email protected] ~]# mount /dev/sdb2 /mnt/root

[[email protected] ~]#

第三步:创建boot分区的所有文件

复制当前操作系统的内核文件和文件系统驱动加载文件到自制linux系统的boot分区下

[[email protected] ~]# cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot

[[email protected] ~]# ll /mnt/boot

total 29167

-rw-------. 1 root root 25587665 Sep 11 12:54 initramfs-2.6.32-642.el6.x86_64.img

drwx------. 2 root root    12288 Sep 11 12:40 lost+found

-rwxr-xr-x. 1 root root  4264528 Sep 11 12:54 vmlinuz-2.6.32-642.el6.x86_64

[[email protected] ~]#

安装grub到自制linux系统的boot分区下

[[email protected] ~]# grub-install --root-directory=/mnt /dev/sdb

Probing devices to guess BIOS drives. This may take a long time.

Installation finished. No error reported.

This is the contents of the device map /mnt/boot/grub/device.map.

Check if this is correct or not. If any of the lines is incorrect,

fix it and re-run the script `grub-install‘.

(fd0) /dev/fd0

(hd0) /dev/sda

(hd1) /dev/sdb

[[email protected] ~]# tree /mnt/boot

/mnt/boot

├── grub

│   ├── device.map

│   ├── e2fs_stage1_5

│   ├── fat_stage1_5

│   ├── ffs_stage1_5

│   ├── iso9660_stage1_5

│   ├── jfs_stage1_5

│   ├── minix_stage1_5

│   ├── reiserfs_stage1_5

│   ├── stage1

│   ├── stage2

│   ├── ufs2_stage1_5

│   ├── vstafs_stage1_5

│   └── xfs_stage1_5

├── initramfs-2.6.32-642.el6.x86_64.img

├── lost+found

└── vmlinuz-2.6.32-642.el6.x86_64

2 directories, 15 files

[[email protected] ~]#

手工创建grub.conf文件

[[email protected] ~]# clear

[[email protected] ~]# vim /mnt/boot/grub/grub.conf

[[email protected] ~]# cat /mnt/boot/grub/grub.conf

default=0

timeout=3

title Centos6.8--lovefirewall

root (hd0,0)

kernel /vmlinuz-2.6.32-642.el6.x86_64 root=UUID=062befd6-d27d-4e45-8675-e9b5771ac934 selinux=0 init=/bin/bash

initrd /initramfs-2.6.32-642.el6.x86_64.img

[[email protected] ~]#

第四步:创建根分区的一级目录,创建fstab文件,复制自制linux系统上所需要的命令及其库文件

[[email protected] ~]# mkdir /mnt/root/{boot,etc,dev,bin,sbin,lib,lib64,home,root,proc,sys,usr,var,opt,mnt,media}

[[email protected] ~]# ls /mnt/root

bin   dev  home  lib64       media  opt   root  sys  var

boot  etc  lib   lost+found  mnt    proc  sbin  usr

[[email protected] ~]# cd /mnt

[[email protected] mnt]# vim root/etc/fstab

[[email protected] mnt]# cat root/etc/fstab

UUID=8c0add68-89a7-43b6-ade0-10e1647c2531 /boot ext4 defaults 1 1

UUID=062befd6-d27d-4e45-8675-e9b5771ac934 /     ext4 defaults 1 2

[[email protected] mnt]#

由于库文件较多,纯手工复制太过麻烦,在这里我就使用我之前已经编写好的专用于复制命令及库文件的shell脚本来操作(需要本脚本的可以到博文附件中自行下载)

[[email protected] mnt]# ls

boot  copycmd.sh  root

[[email protected] mnt]# ./copycmd.sh

Please input a command name or quit: bash

Please input a command name or quit: poweroff

Please input a command name or quit: reboot

Please input a command name or quit: ls

Please input a command name or quit: pwd

Please input a command name or quit: cp

Please input a command name or quit: mv

Please input a command name or quit: rm

Please input a command name or quit: touch

Please input a command name or quit: mkdir

Please input a command name or quit: cat

Please input a command name or quit: head

Please input a command name or quit: tail

Please input a command name or quit: cut

Please input a command name or quit: sort

Please input a command name or quit: uniq

Please input a command name or quit: paste

Please input a command name or quit: dd

Please input a command name or quit: diff

Please input a command name or quit: du

Please input a command name or quit: df

Please input a command name or quit: clear

Please input a command name or quit: vim

Please input a command name or quit: grep

Please input a command name or quit: egrep

Please input a command name or quit: fgrep

Please input a command name or quit: sed

Please input a command name or quit: awk

Please input a command name or quit: date

Please input a command name or quit: clock

Please input a command name or quit: cal

Please input a command name or quit: chown

Please input a command name or quit: chmod

Please input a command name or quit: lsblk

Please input a command name or quit: blkid

Please input a command name or quit: fdisk

Please input a command name or quit: kpartx

Please input a command name or quit: mkfs

Please input a command name or quit: mkfs.ext3

Please input a command name or quit: mkfs.ext4

Please input a command name or quit: mke2fs

Please input a command name or quit: mkswap

Please input a command name or quit: swapon

Please input a command name or quit: swapoff

Please input a command name or quit: mount

Please input a command name or quit: umount

Please input a command name or quit: tune2fs

Please input a command name or quit: e2label

Please input a command name or quit: dumpe2fs

Please input a command name or quit: e2fsck

Please input a command name or quit: fuser

Please input a command name or quit: kill

Please input a command name or quit: find

Please input a command name or quit: gzip

Please input a command name or quit: bzip2

Please input a command name or quit: xz

Please input a command name or quit: zip

Please input a command name or quit: tar

Please input a command name or quit: gunzip

Please input a command name or quit: unxz

Please input a command name or quit: bunzip2

Please input a command name or quit: cpio

Please input a command name or quit: lscpu

Please input a command name or quit: shutdown

Please input a command name or quit: man

Please input a command name or quit: more

Please input a command name or quit: less

Please input a command name or quit: basename

Please input a command name or quit: dirname

Please input a command name or quit: file

Please input a command name or quit: which

Please input a command name or quit: whereis

Please input a command name or quit: stat

Please input a command name or quit: wc

Please input a command name or quit: tr

Please input a command name or quit: bc

Please input a command name or quit: tee

Please input a command name or quit: tree

Please input a command name or quit: test

Please input a command name or quit: fsck

Please input a command name or quit: free

Please input a command name or quit: zcat

Please input a command name or quit: lsmod

Please input a command name or quit: quit

[[email protected] mnt]#

第五步:检验自制linux系统的boot分区和根分区上必须的文件是否完整

制作完成后boot分区的上所有文件(如下所列文件一个都不能少)

[[email protected] mnt]# tree boot

boot

├── grub

│   ├── device.map

│   ├── e2fs_stage1_5

│   ├── fat_stage1_5

│   ├── ffs_stage1_5

│   ├── grub.conf

│   ├── iso9660_stage1_5

│   ├── jfs_stage1_5

│   ├── minix_stage1_5

│   ├── reiserfs_stage1_5

│   ├── stage1

│   ├── stage2

│   ├── ufs2_stage1_5

│   ├── vstafs_stage1_5

│   └── xfs_stage1_5

├── initramfs-2.6.32-642.el6.x86_64.img

├── lost+found

└── vmlinuz-2.6.32-642.el6.x86_64

2 directories, 16 files

[[email protected] mnt]#

制作完成后自制linux根分区的上所有文件,/etc/fstab文件一定不能少,否则系统无法自动分区信息,也无法找到根,bash的命令文件和库文件一定不能少,否则系统没shell入口,我们是无法与操作系统交互的,其它命令没有的话进入系统后就没什么功能可用,但不会影响系统的启动。

[[email protected] mnt]# tree root

root

├── bin

│   ├── awk

│   ├── basename

│   ├── bash

│   ├── cat

│   ├── chmod

│   ├── chown

│   ├── cp

│   ├── cpio

│   ├── cut

│   ├── date

│   ├── dd

│   ├── df

│   ├── egrep

│   ├── fgrep

│   ├── find

│   ├── grep

│   ├── gunzip

│   ├── gzip

│   ├── kill

│   ├── ls

│   ├── lsblk

│   ├── mkdir

│   ├── more

│   ├── mount

│   ├── mv

│   ├── pwd

│   ├── rm

│   ├── sed

│   ├── sort

│   ├── tar

│   ├── touch

│   ├── umount

│   └── zcat

├── boot

├── dev

├── etc

│   └── fstab

├── home

├── lib

├── lib64

│   ├── ld-linux-x86-64.so.2

│   ├── libacl.so.1

│   ├── libattr.so.1

│   ├── libaudit.so.1

│   ├── libblkid.so.1

│   ├── libbz2.so.1

│   ├── libcap.so.2

│   ├── libcom_err.so.2

│   ├── libcrypt.so.1

│   ├── libc.so.6

│   ├── libdbus-1.so.3

│   ├── libdevmapper.so.1.02

│   ├── libdl.so.2

│   ├── libe2p.so.2

│   ├── libext2fs.so.2

│   ├── libfreebl3.so

│   ├── libgcc_s.so.1

│   ├── libm.so.6

│   ├── libncurses.so.5

│   ├── libncursesw.so.5

│   ├── libnih-dbus.so.1

│   ├── libnih.so.1

│   ├── libnsl.so.1

│   ├── libpcre.so.0

│   ├── libproc-3.2.8.so

│   ├── libpthread.so.0

│   ├── libreadline.so.6

│   ├── libresolv.so.2

│   ├── librt.so.1

│   ├── libselinux.so.1

│   ├── libsepol.so.1

│   ├── libtinfo.so.5

│   ├── libudev.so.0

│   ├── libutil.so.1

│   ├── libuuid.so.1

│   └── libz.so.1

├── lost+found

├── media

├── mnt

├── opt

├── proc

├── root

├── sbin

│   ├── blkid

│   ├── clock

│   ├── dumpe2fs

│   ├── e2fsck

│   ├── e2label

│   ├── fdisk

│   ├── fsck

│   ├── fuser

│   ├── kpartx

│   ├── lsmod

│   ├── mke2fs

│   ├── mkfs

│   ├── mkfs.ext3

│   ├── mkfs.ext4

│   ├── mkswap

│   ├── poweroff

│   ├── reboot

│   ├── shutdown

│   ├── swapoff

│   ├── swapon

│   └── tune2fs

├── sys

├── usr

│   ├── bin

│   │   ├── bc

│   │   ├── bunzip2

│   │   ├── bzip2

│   │   ├── cal

│   │   ├── clear

│   │   ├── diff

│   │   ├── dirname

│   │   ├── du

│   │   ├── file

│   │   ├── free

│   │   ├── head

│   │   ├── less

│   │   ├── lscpu

│   │   ├── man

│   │   ├── paste

│   │   ├── stat

│   │   ├── tail

│   │   ├── tee

│   │   ├── test

│   │   ├── tr

│   │   ├── tree

│   │   ├── uniq

│   │   ├── unxz

│   │   ├── vim

│   │   ├── wc

│   │   ├── whereis

│   │   ├── which

│   │   ├── xz

│   │   └── zip

│   └── lib64

│       ├── libgpm.so.2

│       ├── liblzma.so.0

│       ├── libmagic.so.1

│       └── perl5

│           └── CORE

│               └── libperl.so

└── var

21 directories, 124 files

[[email protected] mnt]#

第六步:关闭虚拟机,移除用于自制linux系统的硬盘,新建一个虚拟机,直接使用移除下来这块硬盘,开机启动系统,检验是否能正常启动并进入系统

当然这只是一个纯内核加了一些基本的命令组合成的一个微linux系统,要想让它能够产生比较强大的功能,还需要做较多的后续工作,当然能进行到这一步,说明我们自制linux的心愿已经实现了。

时间: 2024-10-08 05:24:17

自制linux系统——打造属于自己的linux系统的相关文章

51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程(高俊峰)

51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程 第一课 Linux运维经验分享与思路 1.一般把主机名,写到hosts下    127.0.0.1    hostname,因为很多应用要解析到本地.oracle没有这个解析可能启动不了. 2.注释掉UUID以及MAC地址,需要绑定网卡的时候,这个可能会有影响. 3.磁盘满了无法启动,  var下木有空间,无法创创建PID等文件,导致文件无法启动,按e   进入single  然后b  重启进入单用户模式. 4.ssh登陆系

Linux学习笔记(一)——Linux系统概要及基本操作

一.  Linux系统概要 本章的主要内容是对Linux系统的结构和各组件的功能做一个简单的介绍,涉及到Linux系统各组件的相关概念.为了更好的了解Linux系统,首先对Linux系统的基本概念做一个简单的介绍. 1.1           Linux系统组成 Linux系统由四部分组成,各组件在Linux系统中既相对独立由相互联系,每个组件实现相对独立的功能,如果将各组件分开,就不是一个完整的Linux系统.各组件协调工作才能构成一个完整的Linux系统. Linux系统主要分为下面四部分:

Linux系统的理解及学习Linux内核的心得

作业列表      linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作 linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码 linux内核分析作业3:跟踪分析Linux内核的启动过程 linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 linux内核分析作业5:分析system_call中断处理过程 linux内核分析作业6:分析Linux内核创建一个新进程的过程 Linux内核分析作业7:L

Linux学习笔记——例说makefile 增加系统共享库

0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力.所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法. 例说makefile大致分为4个部分 1.只有单个C文件 2.含有多个C文件 3.需要包括头文件路径 4.增加宏定义 5.增加系统共享库 6.增加自定义共享库 7.一个实际的例子 [代码仓库]--makefile-example

linux系统运行级别改变时,系统所做的工作

# 其实计算机的关闭也就是运行级别的切换: # init进程监控运行级别是否改变. # 如果运行级别改变了,init进程就会触发 /etc/rc.d/rc 脚本运行. # rc 脚本作用是: #    1.如果当前计算机运行有,在当前运行级别 #   (correctrunlevel )/etc/rc.d/rc$runlevel.d/目录下以K开头的服务.就关闭. #     2.开启当前运行级别(correct runlevel )/etc/rc.d/rc$runlevel.d/目录下#   

ubuntu系统备份与恢复(也适用于其他linux系统)

在windows环境下面,有很多的备份恢复软件,系统也自带了备份恢复功能,比较知名的软件比如ghost等,为什么要备份系统,我之前一直都是系统出现问题就全新安装原版的windows,然后各种设置,各种软件都要重新弄,很是麻烦,所以网上也出现了很多ghost系统,这类系统里面一般包含了万能驱动助理,这样系统在安装的时候就会自动检测你电脑的硬件并且安装相应的驱动,这类系统也通常会包含很多常用软件,优点是很多设置都优化了,很多常用软件也都安装了,方便用户使用,驱动也能自动安装,不过缺点是满足不了所有人

Linux系统入门之如何安装Linux系统

题目:Linux系统入门之如何安装Linux系统 一.准备工具: 1.Linux 镜像文件(Linux iso文件),直接的在 百度里面输入下载Linux系统版本即可 例如: 2.虚拟机模拟工具,例如:Vmare workstation 10 或者virtualbox虚拟机工具 抑或者vmware palyer虚拟机工具 3.笔记本的硬件要求,一般现在的笔记本几乎都是满足要求的,这个放心 内存至少2G,硬盘大小至少100G,其它的没有什么 二.简单的描述虚拟机的安装(重要点截图) 三.简单的描述

【Linux基础入门】1、Linux系统简介

1.1 Linux为何物? Linux 就是一个操作系统,就像你多少已经了解的 Windows(xp,7,8,10)和 Mac OS .这里简单介绍一下操作系统在整个计算机系统中的角色.我们的应用体系主要由四层构成,分别为:硬件(最大层).内核.系统调用和应用程序,我们的 Linux 也就是系统调用和内核那两层.当然直观地看,我们使用的操作系统还包含一些在其上运行的应用程序,比如文本编辑器.浏览器.电子邮件等. 1.2 Linux历史简介 操作系统始于二十世纪五十年代,当时的操作系统能运行批处理

【转】将 Linux 应用程序移植到 64 位系统上

原文网址:http://www.ibm.com/developerworks/cn/linux/l-port64.html 随着 64 位体系结构的普及,针对 64 位系统准备好您的 Linux® 软件已经变得比以前更为重要.在本文中,您将学习如何在进行语句声明.赋值.位移.类型转换.字符串格式化以及更多操作时,防止出现可移植性缺陷. 0 评论: Harsha S. Adiga, 软件工程师, IBM 2006 年 5 月 18 日 内容 在 IBM Bluemix 云平台上开发并部署您的下一个