定制微型linux实现基于帐号密码登录、提供ssh服务,提供Nginx服务
linux启动流程上一篇博客有详细介绍
定制linux系统前的准备工准
# wget http://pkgs.repoforge.org/axel/axel-2.4-1.el6.rf.i686.rpm 支持多线程下载 # rpm -ivh axel-2.4-1.el6.rf.i686.rpm
安装开发包组,解决依赖关系
# yum groupinstall -y "Development Tools"
# yun groupinstall -y "Server Platform Development"
定制微型linux的环境
宿主机环境:
# uname -ro 2.6.32-358.el6.i686 GNU/Linux
宿主机:为定制微型linux系统提供所需运行环境
目标机:运行定制的微型linux系统
下载源码包:
axel http://www.linux-mips.org/pub/linux/mips/kernel/v3.0/linux-3.13.6.tar.gz
axel http://www.busybox.net/downloads/busybox-1.21.1.tar.bz2
axel http://nginx.org/download/nginx-1.5.9.tar.gz
axel https://matt.ucc.asn.au/dropbear/releases/dropbear-2014.63.tar.bz2
busybox集成了linux的大部分名命令,为定制的linux提供各种命令,以及为定制的linux系统提供根系统,使其能够正常工作
dropbear为定制的linux提供ssh服务
Nginx为定制的linux提供web服务
定制微型linux的具体步骤
1.新添加一块磁盘20G,为新添加的一块磁盘创建分区:将/dev/sdd3的文件类型改为82(swap)
/dev/sdd1:200M /dev/sdd2: /dev/sdd3:251M
编辑脚本使其能够进行分区和格式化 # vim partdisk.sh #!/bin/bash # parted(){ read -p "Input the new device of disk:" dev echo "n p 1 +251M n p 2 +2G n p 3 +128M t 3 82 w" | fdisk $dev &> /dev/null kpartx -af $dev &> /dev/null 重复kpartx和partx使其能够读取新分区 partx -a $dev &> /dev/null kpartx -af $dev &> /dev/null partx -a $dev &> /dev/null kpartx -af $dev &> /dev/null partx -a $dev &> /dev/null con=`fdisk -l $dev | awk ‘/^\/dev/{print $1}‘ 2> /dev/null` if [ -z "$con" ];then echo -e "\033[31mfdisk Error\033[0m" return 1 else echo -e "\033[32mfdisk OK\033[0m" fi for i in 1 2;do dmsetup remove_all mke2fs -t ext4 ${dev}$i &> /dev/null done dmsetup remove_all mkswap ${dev}3 &> /dev/null } parted 调用自定义的函数
2.创建两个目录/mnt/boot、/mnt/sysroot为定制微型linux做准备
3.将/dev/sdd1挂载到/mnt/boot目录下;将/dev/sdd2挂载到/mnt/sysroot目录下
4.为目标机安装grub
5.编译并定制自己的内核
解压源码至/usr/src/并为其创建连接 # tar xf linux-3.13.6.tar.xz -C /usr/src/ # cd /usr/src/ # ln -sv linux-3.13.6 linux # cd linux 编译内核 # make allnoconfig # make menuconfig
5.1将一下选项编译到内核中
定制自己的版本: General setup --->() Local version - append to kernel release:输入自己的版本号号Tiny General setup --->() ((none)) Default hostname:输入默认主机名 选择支持的cpu(lscpu查看cpu型号): Processor type and features ---> [*] Symmetric multi-processing support Processor type and features ---> Processor family (Pentium-Pro) ---> (X)Pentium-II/Celeron(pre-Coppermine) 支持动态装卸载模块: [*] Enable loadable module support 选择支持PCI总线(使用lspci查看): Bus options (PCI etc.) ---> [*] PCI support 选择支持的SCSI磁盘(使用lspci查看): Device Drivers --->[*] Fusion MPT device support ---><*> Fusion MPT ScsiHost drivers for SPI Device Drivers --->[*] Fusion MPT device support ---><*> Fusion MPT misc device (ioctl) driver Device Drivers --->[*] Fusion MPT device support --->[*] Fusion MPT logging facility(启用日志) Device Drivers --->SCSI device support ---><*> SCSI device support Device Drivers --->SCSI device support ---><*> SCSI device support Device Drivers --->SCSI device support ---><*> SCSI disk support Device Drivers --->SCSI device support --->[*] SCSI low-level drivers (NEW) 选择支持的文件系统: File systems ---><*> The Extended 4(ext4) filesystem 选择可执行文件的格式: Executable file formats / Emulations --->[*] Kernel support forELF binaries Executable file formats / Emulations --->[*] Write ELF core dumps withpartial segments (NEW) Executable file formats / Emulations ---><*> Kernel support forscripts starting with#! 选择支持的输入输出设备驱动(使用lspci查看): Device Drivers --->Input device support --->[*] Keyboards ---><*> AT keyboard (NEW) Device Drivers --->Input device support --->[*] Mice ---><*> PS/2mouse (NEW) Device Drivers --->Input device support --->[*] USB support ---><*> Support forHost-side USB Device Drivers --->Input device support ---><*> xHCI HCD (USB 3.0) support Device Drivers --->Input device support ---><*> EHCI HCD (USB 2.0) support Device Drivers --->Input device support ---><*> UHCI HCD (most Intel and VIA) support 选择支持的实时时钟: Device Drivers --->[*] Real Time Clock 选择支持的TCP/IP协议: [*] Networking support --->Networking options ---><*> Unix domain sockets [*] Networking support --->Networking options ---><*> UNIX: socket monitoring interface [*] Networking support --->Networking options --->[*] TCP/IP networking [*] Networking support --->Networking options --->[*] IP: multicasting [*] Networking support --->Networking options --->[*] IP: advanced router [*] Networking support --->Networking options ---> [*] IP: policy routing [*] Networking support --->Networking options --->[*] IP: verbose route monitoring [*] Networking support --->Networking options --->[*] IP: kernel level autoconfiguration [*] Networking support --->Networking options --->[*] IP: DHCP support [*] Networking support --->Networking options --->[*] IP: RARP support [*] Networking support --->Networking options ---><*> IP: tunneling [*] Networking support --->Networking options ---><*> IP: IPsec transport mode (NEW) [*] Networking support --->Networking options ---><*> IP: IPsec tunnel mode (NEW) [*] Networking support --->Networking options ---><*> IP: IPsec BEET mode (NEW) [*] Networking support --->Networking options ---><*> Large Receive Offload (ipv4/tcp) (NEW) [*] Networking support --->Networking options ---><*> INET: socket monitoring interface(NEW) [*] Networking support --->Networking options ---><*> UDP: socket monitoring interface [*] Networking support --->Networking options --->[*] TCP: advanced congestion control [*] Networking support --->Networking options --->[*] IP: TCP syncookie support 选择支持的网卡驱动(使用lspci查看): Device Drivers--->[*] Network device support--->[*] Ethernet driver support (NEW)--->[*] AMD devices (NEW) Device Drivers--->[*] Network device support--->[*] Ethernet driver support (NEW)---><*> AMD PCnet32 PCI support 选择devtmpfs filesystem: Device Drivers--->Generic Driver Options ---> [*] Maintain a devtmpfs filesystem to mount at /dev 选择Automount devtmpfs at /dev : Device Drivers--->Generic Driver Options ---> [*] Automount devtmpfs at /dev, after the kernel mounted the rootfs 启用config_lbdaf支持大文件: -*- Enable the block layer --->[*] Support for large (2TB+) block devices and files
5.2拷贝生成的.config到根目录下重新命名:config-3.13.6-el6.i686作为目标机中微型linux的配置文件 # cp .config /root/config-3.13.6-el6.i686 5.3生成内核映像文件:bzImage # make bzImage -j 4 5.4 为微型linux系统提供内核文件:bzImage # cp arch/x86/boot/bzImage /mnt/boot/ # sync # ls /mnt/boot/
6.准备根文件系统
1.将busybox编译成静态二进制文件,方便以后管理 Busybox Settings --->Build Options --->[*] Build BusyBox as a static binary (no shared libs) 2.指定跟文件系统所在的路径(这里为/mnt/sysroot,操作时根据自己的设置进行配置) Busybox Settings--->Installation Options("make install" behavior)--->(./_install)BusyBox installation prefix(NEW):根据自己的配置输入指定的路径:/mnt/sysroot
# make
# make install
6.4编译安装完成之后会在/mnt/sysroot目录下生成如下根文件系统
6.5 为目标机创建其他的文件系统
# mkdir /mnt/sysroot/{etc/rc.d,root,var/log,proc,sys,boot,lib,dev,src,mnt,media,home,tmp} -pv
6.6 为目标机提供grub配置文件
# vim /mnt/boot/grub/grub.conf default=0 timeout=5 title Tiny Linux(3.13.6-MageEdu.i686) root (hd0,0) kernel /bzImage ro root=/dev/sda2 init=/sbin/init
6.7 # sync 重复执行sync保证数据同步至磁盘然后关闭宿主机
7.测试新定制的系统能否正常运行
8.为其提供配置文件,启用虚拟终端,启用基于账号和密登录
8.1使用自己写的脚本移植bash到目标机中 # bash /study/cpcommand.sh Enter a available Command OR quit (quit):bash Copy bash Successful!!! Copy /lib/libtinfo.so.5 Successful!!! Copy /lib/libdl.so.2 Successful!!! Copy /lib/libc.so.6 Successful!!! Copy /lib/ld-linux.so.2 Successful!!! Enter a available Command OR quit (quit):quit quit wait 1 second..... # cd /mnt/sysroot/etc 8.2 为新系统提供主机名 # mkdir /mnt/sysroot/etc/sysconfig # vim /mnt/sysroot/etc/sysconfig/network HOSTNAME=TinyLinux.magedu.com 8.3提供启动初始化脚本 # vim rc.d/rc.sysinit #!/bin/sh # echo -e "\033[32mTiny\033[0mlinux" [ -r /etc/sysconfig/network ] && . /etc/sysconfig/network [ -z "$HOSTNAME" -o "$HOSTNAME" == "(none)" ] && HOSTNAME=localhost /bin/hostname $HOSTNAME echo "Mounting proc filesystem" mount -t proc proc /proc echo "Mounting sysfs filesystem" mount -t sysfs sysfs /sys mdev -s ifconfig lo 127.0.0.1 ifconfig eth0 172.16.19.10 mount -a 8.4给rc.sysinit执行权限 # chmod +x init.d/rc.sysinit 8.5为目标系统提供fstab文件 # vim fstab /dev/sda1 /boot ext4 defaults 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /dev/sda2 / ext4 defaults 0 0 /dev/sda3 swap swap defaults 0 0 8.6为目标机提供inittab # vim inittab ::sysinit:/etc/rc.d/rc.sysinit 执行初始化脚本rc.sysinit ::respawn:/sbin/getty 19200 tty1 启用虚拟终端 ::respawn:/sbin/getty 19200 tty2 ::respawn:/sbin/getty 19200 tty3 ::respawn:/sbin/getty 19200 tty4 ::respawn:/sbin/getty 19200 tty5 ::respawn:/sbin/getty 19200 tty6 ::ctrlaltdel:/sbin/reboot 定义组合键 ::shutdown:/bin/umount -a -r 执行shutdown之前卸载所有已经挂在的设备 8.7为目标系统提供帐号和密码 # useradd tinylinux -p123456 # head -1 /etc/passwd > /mnt/sysroot/etc/passwd # tail -l /etc/passwd >> /mnt/sysroot/etc/passwd # head -1 /etc/group > /mnt/sysroot/etc/group # tail -1 /etc/group >> /mnt/sysroot/etc/group # head -1 /etc/shadow > /mnt/sysroot/shadow # tail -1 /etc/shadow >> /mnt/sysroot/shadow 8.8为目标机提供Banner # vim /mnt/sysroot/etc/issue Welcom to Tiny Linux of MageEdu Kernel \r on an \m
本文出自 “Linux之旅” 博客,请务必保留此出处http://openlinuxfly.blog.51cto.com/7120723/1391874