设为首页 收藏本站
查看: 1641|回复: 0

[经验分享] 自制linux系统——打造属于自己的linux系统

[复制链接]

尚未签到

发表于 2018-5-19 11:00:41 | 显示全部楼层 |阅读模式
  很多时候我们直接使用别人帮我们打包好的一个linux系统,总感觉某些工具或者命令多余或者效果不好,那我们是否可以自制一个比较符合自己需求的linux系统出来了,答案是肯定的,而且实现这个目标也并困难,需要的时间也不会太长。接下来就给大家分享如何自制的过程。
  

  环境需求:
  1、Vmware虚拟机
  2、Centos6.8光盘镜像IS0文件
  3、Vmware上安装一份Centos6.8的操作系统
  

  第一步:装载一块新硬盘到虚拟机的Centos6.8系统上,并保证系统正常读取
  [root@Centos6 ~]# 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
  [root@Centos6 ~]# echo "- - -" > /sys/class/scsi_host/host0/scan
  [root@Centos6 ~]# 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
  [root@Centos6 ~]#
  

  第二步:分区格式化并挂载,boot分区200M,根分区2G,统一格式化成ext4文件系统,boot分区卷标:boot,根分区卷标:root,boot分区挂载到/mnt/boot,根分区挂载到/mnt/root
  [root@Centos6 ~]# 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.
  [root@Centos6 ~]# 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
  [root@Centos6 ~]# 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.
  [root@Centos6 ~]# 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.
  [root@Centos6 ~]# mkdir /mnt/boot
  [root@Centos6 ~]# mkdir /mnt/root
  [root@Centos6 ~]# mount /dev/sdb1 /mnt/boot
  [root@Centos6 ~]# mount /dev/sdb2 /mnt/root
  [root@Centos6 ~]#
  

  第三步:创建boot分区的所有文件
  复制当前操作系统的内核文件和文件系统驱动加载文件到自制linux系统的boot分区下
  [root@Centos6 ~]# cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot
  [root@Centos6 ~]# 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
  [root@Centos6 ~]#
  

  安装grub到自制linux系统的boot分区下
  [root@Centos6 ~]# 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
  [root@Centos6 ~]# 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
  [root@Centos6 ~]#
  

  手工创建grub.conf文件
  [root@Centos6 ~]# clear
  [root@Centos6 ~]# vim /mnt/boot/grub/grub.conf
  [root@Centos6 ~]# 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
  [root@Centos6 ~]#
  

  第四步:创建根分区的一级目录,创建fstab文件,复制自制linux系统上所需要的命令及其库文件
  [root@Centos6 ~]# mkdir /mnt/root/{boot,etc,dev,bin,sbin,lib,lib64,home,root,proc,sys,usr,var,opt,mnt,media}
  [root@Centos6 ~]# ls /mnt/root
  bin   dev  home  lib64       media  opt   root  sys  var
  boot  etc  lib   lost+found  mnt    proc  sbin  usr
  [root@Centos6 ~]# cd /mnt
  [root@Centos6 mnt]# vim root/etc/fstab
  [root@Centos6 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
  [root@Centos6 mnt]#
  

  由于库文件较多,纯手工复制太过麻烦,在这里我就使用我之前已经编写好的专用于复制命令及库文件的shell脚本来操作(需要本脚本的可以到博文附件中自行下载)
  [root@Centos6 mnt]# ls
  boot  copycmd.sh  root
  [root@Centos6 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
  [root@Centos6 mnt]#
  

  第五步:检验自制linux系统的boot分区和根分区上必须的文件是否完整
  制作完成后boot分区的上所有文件(如下所列文件一个都不能少)
  [root@Centos6 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
  [root@Centos6 mnt]#
  

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

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

  

DSC0001.jpg

  

DSC0002.jpg

  

DSC0003.jpg

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


附件:http://down.51cto.com/data/2368165

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-461963-1-1.html 上篇帖子: linux 正则 下篇帖子: linux high cpu
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表