Linux是一个开源的操作系统,我们可以对他进行更改,让他符合我们的需求,这也是Linux的热爱者比windows多的因为,作为一个Linux爱好者,如果不能自己手动制作一个Linux,那岂不是“丢人”呢。下面将介绍一个Linux的制作方法
在制作定制的linux时,要将所有的开发环境安装完整
Development Tools
首先,我们要下载linux的内核,并且解压缩
[root@localhost src]#tar xf linux-3.13.6.tar.xz
创建符号链接
[root@localhost src]#ln -sv linux-3.13.6 linux
将默认的选项全部取消
[root@localhost linux]# make allnocinfig
选定内核编译时,我们需要的选项
[root@localhost linux]# make menuconfig
选择如下:标*号选择项
1、*64-bit kernel 选择64位的内核支持2、General setup —> *Local version – append to kernel release 添加为cshang linux-3(自己随便填写) 版本号,自己定义 3、*Enable loadable module support —> *Module unloading 开启装卸载模块支持 4、Enable the block layer —> *Block layer SG support v4 允许使用块层 5、Processor type and features —> 处理类型和特点 *Symmetric multi-processing support 开启多处理器 Processor family (Core 2/newer Xeon) —> *Core 2/newer Xeon 支持intel的cpu *Multi-core scheduler support (NEW) 支持多核调度 6、 Bus options (PCI etc.) —> *PCI support 支持PCI总线 7、 Executable file formats / Emulations —> *Kernel support for ELF binaries *Kernel support for scripts starting with #! 内核上可执行文件的格式:ELF的二进制,shell脚本 8、 Device Drivers —> 设备驱动 SCSI device support —> SCSI硬盘的驱动 *SCSI device support *SCSI disk support SCSI的硬件驱动和磁盘驱动 *Fusion MPT device support —> *Fusion MPT ScsiHost drivers for SPI *Fusion MPT logging facility *USB support —> *Support for Host-side USB *EHCI HCD (USB 2.0) support *OHCI HCD (USB 1.1) support *UHCI HCD (most Intel and VIA) suppor 开启USB的支持,有2.0,1.1的接口,包括Intel的VIA Input device support —> *Mouse interface *Keyboards —> *Mice —> 输入设备驱动:鼠标接口,键盘,鼠标 Generic Driver Options —> *Maintain a devtmpfs filesystem to mount at /dev *Automount devtmpfs at /dev, after the kernel mounted the rootfs 挂载系统时,包含dev的文件系统,而且当内核挂载根文件系统后 将dev的文件系统自动挂载到/dev下 上面这项是我没选到的,困扰了我一天半加一个晚上 9、 File systems —> *The Extended 4 (ext4) filesystem 开启支持ext4的文件系统支持 10、*Networking support —> Networking options —> *Unix domain sockets 同一主机间的进程间通信,对于开启后面的nginx服务需要 *TCP/IP networking *IP: multicasting *IP: advanced router *IP: policy routing *IP: equal cost multipath *IP: verbose route monitoring 开启TCP/IP的支持 11、Device Drivers —> *Network device support —> *Network core driver support *Ethernet driver support —> *Intel devices *Intel(R) PRO/1000 Gigabit Ethernet support *Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support 对于不用的网卡选项,我们可以不选 以上为编译时加载网络相关的驱动
编译内核
[root@localhost linux]# make -j 4
这里是开启4个线程同时编译
编译会生成一个arch/x86/boot/bzImage的文件
为目标主机制作系统
fdisk /dev/sdb
sdb1为50M,sdb2为512M
格式化分区,并进行挂载
[root@localhost ~]# mke2fs -t ext4 /dev/sdb1 [root@localhost ~]# mke2fs -t ext4 /dev/sdb2 [root@localhost ~]# mkdir /mnt/{boot,sysroot} [root@localhost ~]# mount /dev/sdb1 /mnt/boot/ [root@localhost ~]# mount /dev/sdb2 /mnt/sysroot/
为目标主机生成grub引导程序
[root@localhost ~]# grub-install –root-directory=/mnt/ /dev/sdb
为grub引导提供配置文件
[root@localhost ~]# vim /mnt/boot/grub/grub.conf timeout=5 default=0 title c-shang‘s Mini Linux (3.13.6) root (hd0,0) kernel /bzImage ro root=/dev/sda2 init=/sbin/init
安装busybox为目标主机提供程序、命令
[root@localhost src]# tar xf busybox-1.22.1.tar.bz2
编译安装busybox,采用静态安装
[root@localhost busybox-1.22.1]# make menuconfig Busybox Settings —> Build Options —> *Build BusyBox as a static binary (no shared libs) [root@localhost busybox-1.22.1]# make -j 4 [root@localhost busybox-1.22.1]# make install
生成的文件都在当前目录下的_install目录中
将busybox生成的程序文件拷贝到目标主机上
[root@localhost busybox-1.22.1]# cp -a /usr/src/busybox-1.22.1/_install/* /mnt/sysroot/
为目标主机创建系统目录
[root@localhost busybox-1.22.1]# cd /mnt/sysroot/ [root@localhost sysroot]# for i in `ls /`;do mkdir $i;done
使目录主机支持用户登录功能,用户为root和luffy,密码为sch
为目录主机准备一系列配置文件,在/mnt/sysroot目录下
[root@localhost sysroot]# vim etc/inittab ::sysinit:/etc/rc.d/rc.sysinit tty1::respawn:/sbin/getty 19200 tty1 tty2::respawn:/sbin/getty 19200 tty2 tty3::respawn:/sbin/getty 19200 tty3 tty4::respawn:/sbin/getty 19200 tty4 ::ctrlaltdel::/sbin/reboot ::shutdown:/bin/umount -a -r
创建自动挂载文件系统的配置文件
[root@localhost sysroot]# vim etc/fstab /dev/sda2 / ext4 defaults 0 0 /dev/sda1 /boot ext4 defaults 0 0 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0
创建init程序启动后调用的脚本程序
[root@localhost sysroot]# mkdir etc/rc.d [root@localhost sysroot]# vim etc/rc.d/rc.sysinit #!/bin/sh #the script of the system begin echo -e "\033[32mWelcome to c-shang‘s Mini Linux\033[0m" mount -n -o remount,rw /dev/sda2 mount -a mdev -s #自动创建设备文件 [root@localhost sysroot]# chmod +x etc/rc.d/rc.sysinit
创建账号文件
[root@localhost sysroot]# vim etc/passwd root:x:0:0::/root:/bin/sh luffy:x:500:500::/home/luffy:/bin/sh
为用户创建密码文件
[root@localhost sysroot]# openssl passwd -1 -salt `openssl rand -hex 4` Password: #输入sch $1$7f5be4e4$Lyc99NCEhov63faNUKHtP/
[root@localhost sysroot]# vim etc/shadow root:$1$4b2741bf$Dx190CllodtsmR29/e6CF/:16733:0:99999:7::: luffy:$1$4b2741bf$Dx190CllodtsmR29/e6CF/:16733:0:99999:7:::
上面的格式一定要正确,由于我少写了一部分,导致我认证无法通过,但是通过
排查,觉得无法登陆,问题肯定是在关于用户的这些文件上,排查成功
[root@localhost sysroot]# chmod go= etc/shadow #更改权限
为用户添加组文件
[root@localhost sysroot]# vim etc/group root:x:0 luffy:x:500
为普通用户创建家目录
[root@localhost sysroot]# mkdir home/luffy
最后,将内核编译生成的bzImage文件拷贝到目录系统上
[root@localhost ~]# cp /usr/src/linux/arch/x86/boot/bzImage /mnt/boot/
创建一个新的虚拟机,把宿主机上sdb硬盘加载上去
这样,一个定制的linux系统就完成了
到此,手动制作的Linux就完成了,是不是有些成就感了,下一个步骤,我们还可以在上面的基础上,busybox,提供远程登录的功能。
本文出自 “牛叉的孩子光着屁屁” 博客,请务必保留此出处http://cshang.blog.51cto.com/6143980/1565671
原文地址:http://cshang.blog.51cto.com/6143980/1565671