centos6
1、yum groupinstall "Development Tools" "Server Platform Development" -y
2、下载内核
tar xf 下载文件.tarr.xz -C /usr/src
3 cd /usr/src
4、ln -sv 解压文件 linux
5、cd linux
6、ls /boot/
make hellp 查看帮助手册
7、make allnoconfig (所有可选择特性通通关掉)
ls -a
less .config
要想编译内核首先要查看当前硬件平台各种状态信息cup型号硬盘借口型号等,命令:lscpu 、lspci 、等
8、make menuconfig 选择特性
* 64-bit kennel (编译成64内核)
File systems 可被模块化功能→ * Second extended fs support
→ * The Extended 4 (exit4) filesystem 扩张文件系统类型
可不选项 →* Ext4 POSIX Acess Control LIsts (NEW) 文件的访问控制权限列表
能支持哪些可执行文件格式,linux支持elf格式和#!开头的shell脚本
Executable file formats / Emulations → * Kernel support for ELF binaries
→ * Write ELF core dumps with partial segments (NEW)
→ * Kernel support for scripts starting with #!
* Enble loadable module support 支持模块装载
* module unloading (NEW) 支持模块动态卸载
不启用 Module signature verification (NEW) 模块签名验证
processor type and featuress 处理器类型和功能 → processor family (ceneric-x86-64) → *二选一: X Core 2/newer xeon / X ceneric-x86-64
→ *Symmetric multi-processing support 对称对核器的支持
Bus options (PCL etc.) → *PCI support 支持PCI
##额外知识点:硬盘驱动,如果没驱动要借助ramdisk实现,
首先打开另外窗口命令lscpi查看虚拟机硬盘接口类型 storage controller: LSI(接口型号) logic / Symbios logic 53c1030 PCI-X Fusion-MPT(格式) Dual Ultra320 SCSI (rev 01)
Device Drivers 设备驱动程序 → SCSI device support → * SCSI device support
→ * SCSI disk support (NEW)
↓ USE支持类型接口命令:lsusb 或者lsusb -v可以查看,根据类型选择驱动 ↓
→ * USB support USB驱动→ * Support for host-side USB
→ * EHCI HCD (USB 2.0)supprot
→ * EHCI HCD (USB 3.0)supprot (NEW)
→ * UHCI HCD (most intel and VIA) support
→ * OHCI HCD support
→ Input device support 输入驱动 → * Keyboards → * AT keyboard (NEW) 标准键盘驱动
→ * Mouse interface 鼠标驱动
→ * Mice → * PS/2 mouse (NEW)
→ Fusion MPT device support ( Fusion MPT格式做进内核)→ * Fusion MPT ScsiHost drivers for SPI
→ *Fusion MPT ScsiHost drivers for FC
→ *Fusion MPT ScsiHost drivers for SAS
→ * Fusion MPT misc device (ioct1) driver 这项至关重要
→ * Fusion MPT logging facility 日志功能不怎么重要
Device Drivers 设备驱动程序 →Ceneric Driver Options 特殊驱动程序选项→ * Maintain a devtmpfs filesystem to mount ati /dev内核所识别的设备文件通通出到/dev目录下,让dev/目录下也有设备文件(不能识别的装入模块的还得uduv来创建)→ * Automount devtmpfs at /dev after the kernel mountch the rootfs 注明:init运行系统才选择此项,否则可不予选择
底下还有一项编译网卡驱动供参考↓
9、make -j 4 bzImage (只编译内核文件,编译BZ2压缩格式的内核)
编译内核完成;复制一下最后显示内核路径
10、shutdown -h now
添加硬盘 保存在个位置(这步骤原本编译前就该事前操作了,前面漏了)
11、开机
12、创建分区 创建文件系统 挂载分区
fdisk /dev/sdb
mke2fs -t exit4 /dev/sdb1
mke2fs -t exit4 /dev/sdb2
mkdri /mnt/{boot,sysroot}
grub-install --root-directory=/mnt /dev/sdb
ls /mnt/boot/grub/ 查看一下
mount /dev/sdb2 /mnt/sysroot/ 挂载文件系统 #目前内核还驱动不了文件体统
13、cd /usr/src/linux
cp /arch/x86/boot/bzImage /mnt/boot/bzImage (复制内核到/mnt/boot/bzImage,地址先前有通知我们)
14、vim /mnt/boot/grub/grub.conf
default=0
timeout=3
title Mini linux (3.10.67)
root (hd0,0)
kernel /bzImage ro root=/dev/sda2 init=/bin/bash //如果是用init运行系统则将 init=/bin/bash改为 init=/bin/init
15、sync 同步(我们启动默认在内存中完成,内存的数据同步到磁盘上,不然待会挂起数据还在内存当中)
16、挂起
17、新建虚拟机.
1、i/o类型:要选择刚刚编译的驱动LSILogic(L), 上面编译驱动类型自行决定。
2、磁盘选择:使用现有虚拟磁盘→使用MINI_LINUX→保持现有格式→完成
启动虚拟机 (注:sync后别太快开机,不然数据还没完全同步到磁盘上)
18、此时开机会报错:kernel panic - not syncing no init found
解决方法1:移一个bash进来,直接启动bash就OK了,此处不用此方法
解决方法2;提供真正文件系统busybox
以下编译busybox 方法:
1、cd /usr/src/linux
vim /usr/src/linux/init/main.c 查看主程序此步骤可以忽略2、cd /mnt/sysroot/
3、mkdri -pv etc dev proc sys bin sbin usr/{bin,sbin,lib,lib64} lib64 lib/modules home var/{log,run,lock} tmp mnt media root
4、cd
5、vim bincp.sh 复制程序(命令)到指定目录下,同时将其所依赖的库文件复制到对应的目录
#!/bin/bash
#
target=/mnt/sysroot
[ -d $target ] || mkdir /mnt/sysroot
read -p "A command: " command
libcp() { //函数
for lib in $(ldd $1 | grep -o "[^[:space:]]*/lib[^[:space:]]*"); do //获取库路径。ldd可以列出一个程序所需要得动态链接库(so)
libdir=$(dirname $lib) //取库目录名 赋值给libdir
[ -d $target$libdir ] || mkdir -p $target$libdir
[ -f $target$lib ] || cp $lib $target$lib
done
}
while [ "$command" !='quit' ]; do //$command不等于quit执行循环
if ! which $command &> /dev/null; then //判断$command是否存在
read -p "No such command, enter again: " command
continue
fi
command=$(which --skip-alias $command) //获取路劲 赋值给command
comnddir=$(dirname $command) //取目录名字 赋值给comdir
[ -d $target$cmnddir ] || mkdir -p $target$cmnddir
[ -f $target$command ] || cp $command $target$command
libcp $command
read -p "Another command(quit): " command
done
保存退出后:
检测语法错误:bash -n bincp.sh
bash bincp.sh //添加自己想用的程序(命令)
ls
bash
quit
6、chroot /mnt/sysroot/ /bin/bash //改变根目录
7、sync
8、重启 mini linux (不要启动太快,sync同步需要时间)
开机成功
以下是用init运行系统方法:
1、cd /mnt/sysroot/
2、vim /mnt/sysroot/sbin/init
#!/bin/bash
#
echo -e "\tWelcome to \033[032mMini\033[0m Linux"
mount -n -t proc proc /proc
mount -n -t sysfs sysfs /sys
mount -n -o remount,rw /dev/sda2/
/bin/bash
3、 chmod +x /mnt/sysroot/sbin/init
bash bincp.sh //添加自己想用的程序(命令)
blkid
touch
top
quit
4、sync
5、type echo
6、cp arch/x86/boot/bzImage /mnt/boot/
7、sync
启动挂起
ls /dev 查看里面此时就有文件了
mount -n -t proc proc /proc
mount -n -t ext4 -o remount,rw /dev/sda2/
vim /
编译busybox:
Mini Linux: kernel+busybox busybox也有udev不过名字叫mdev
busybox:
静态方式编译,依赖于glibc-static
1、下载busybox源文件
tar xf busybox-1.22.1.tar.bz2
cd busybox-1.22.1
Linux程序的编译安装两种方式:
1、共享库编译方式 : 每个程序运行时可能依赖到外部的共享库,我们移植时意味着我们必须将共享库也移植过去
2、静态编译方式:将所依赖各种库文件都直接编译到程序来,对程序来说只要一个文件就可以了
以下是静态编译到一个文件方法:
yum install -y glibc-static //静态方式编译,依赖于glibc-static
make menuconfig //编译选择
make && make insatll
cd /mnt/sysroot/ → rm -rf ./* //删除上面手动添加的文件
cp -a _install/* /mnt/sysroot/ //上面insatll完成生成的文件复制到/mnt/sysroot/下
chroot /mnt/sysroot/ /bin/ash
vim /mnt/boot/grub/grub.conf
default=0
timeout=3
title Mini linux (3.10.67)
root (hd0,0)
kernel /bzImage ro root=/dev/sda2 init=/bin/init
ls 查看一下根目录文件
mkdir -pv etc lib lib64 proc sys dev root home boot mnt media tmp var //缺上面文件就创建上面文件
sync
vim etc/inittab //重启开机时系统运行busybox时,busybox会到的配置文件
::sysinit:/etc/rc.d/rc.sysinit //sysinit 系统初始化运行
三选一 ①
console::respawn:-/bin/sh //respawn 后面程序关了会重新启动一次 控制台 注:控制台跟终端三选一
三选一 ③ //建议使用这个登录界面的
::respawn:/sbin/getty 9600 tty1 //getty 会自动调用login来打印一个登录提示符 串型终端1 注:控制台跟终端三选一
::respawn:/sbin/getty 9600 tty2 //这三个都是登录界面用到的 可以设置6个终端 串型终端2 注:控制台跟终端三选一
::respawn:/sbin/getty 9600 tty3 串型终端3 注:控制台跟终端三选一
三选一 ②
tty1::respawn://bin/sh //askfirst 默认补打开终端 启动终端巧回车键 终端2 注:控制台跟终端三选一
tty2::askfirst:/bin/sh 终端2 注:控制台跟终端三选一
tty3::askfirst:/bin/sh 终端3 注:控制台跟终端三选一
::ctrlaltdel:/sbin/reboot //ctrlaltdel 按ctrl+delete键会运行操作
::shutdown:/bin/umount -a -r //shutdown 关机运行时运行操作
mkdir etc/rc.d
vim etc/rc.d/rc.sysinint
挂载
#!/bin/sh //此时没有BASH所以用sh
#
echo -e "\tWelcome to \033[032mMini\033[0m Linux" //开机显示信息
mount -t proc proc /proc
mount -t sysfs sysfs /sys
echo "scan /sys and to populate to /dev..." //扫描/ sys并填充到/ dev
mdev -s
mount -o remount,rw /dev/sda2/
echo "mounting all filesystems..."
mount -a //意思挂载剩余的文件系统
echo "Load driver for e1000...." //装载网卡驱动
insmod /lib/modules/e1000.ko
echo "Initializing ehternet card..." //初始化以太网卡
ifconfig eth0 192.168.0.117 up //激活给IP地址 IP地址根据情况设定
ifconfig lo 127.0.0.1 up //
设置主机名①
[ -f /etc/sysconfig/network ] && ./etc/sysconfig/network
[ -z "$HOSTNAME" -o "$HOSTNAME" == '(none)' ] && HOSTNAME='locahost'
hostname $HOSTNAME
接上设置主机名 ②
1、mkdir etc/sysconfig
2、vim etc/sysconfig/network
HOSTNAME=XXXX名字 // 编辑:
chmod +x etc/rc.d/rc.sysinint
sync
重启
挂载文件系统:
编辑fstable
vim /etc/fstable
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/sda1 /boot ext4 defaults 0 0
/dev/sda2 / ext4 defaults 0 0
devtmpfs /dev ext4 defaults 0 0 //开机会自动挂载可以不用写这行
由于上面操作出错proc无法挂载我们直接复制程序(命令)到指定目录下,同时将其所依赖的库文件复制到对应的目录:
bash bincp.sh
mount
quit
sync //同步
重启
编译网卡驱动:
命令:lspci查看网卡设备
modinfo e1000 查看模块信息
cd /usr/src
cd /linux //上面下载解压保存的原文件
make menuconfig //重新编译添加网络功能
Networking support → Networking options开启全网络功能 → * Tcp/IP networking //网络最主要一项
→ * IP: multicasting //组播或者多播
→ * IP:advanced router //高级路由
→ * IP:Kernel level autoconfiguration //内核级自动配置
Device Drivers → * Network device support → * Ethernet driver support → * Intel devices (NEW) → * Inter (R) PRO/1000 Gigabit Ethernet support英特尔(R)PRO / 1000千兆以太网支持 (根据实际情况选择) //编译网卡驱动
make -j 4 bzImage
cp arch/x86/boot/bzImage /mnt/boot/
sync
启动开机
ifconfig -a //查看
ifconfig eth0 192.168.0.117 up //激活给IP地址
ifconfig lo 127.0.0.1 up //
ping 一下IP地址测试
完成
假设:如果上述不是直接编译内核而是编译成模块 需要单独编译一下
cd /usr/src
cd /linux //上面下载解压保存的原文件
make M=drivers/net/ethernet/intel/e1000/ //找到e1000的位置编译
mkdir /mnt/sysroot/lib/modules -pv //注:事先查看此目录没有,没有在创建
cp drivers/net/ethernet/intel/e1000/e1000.ko /mnt/sysroot/lib/modules //编译生成的模块放到此目录下
sync 同步
重启
insmod /lib/modules/e100.ko //手动装载模块,
此时ifconfig没有地址,驱动程序开机不会自动装载。需要在sysctl目录写个脚本扫描识别有哪些新的设备,而后找到合适的驱动程序,此步骤很复杂
创建帐号密码:
touch /etc/passwd /etc/group /etc/shadow
adduser root
sync
cd /mnt/sysroot/
chroot /mnt/sysroot/ /bin/sh //切换根文件
vim etc/passwd
root:x:0:0::/root:/bin/bash //改为0
vim etc/group
root:x:0:
openssl passwd -1 -salt $(openssl rand -hex 4) //md5加密生成密码
生成的密码复制到 /etc/shadow 对应的位置中去
chmod 400 etc/shadow
sync
重启
添加ssh服务
cd /mnt/sysroot/
vim etc/issue //系统启动时打印信息
Welcome to mini linux //开机后显示信息
Kernel \r //开机后显示版本号
cd
dropbear是轻量的sshd服务器
下载dropbear原文件
解压文件:tar xf dropbear-2013.58.tar.bz2
cd dropbear-2013.58.tar.bz2
./configure --help 先查看:编译不能启用 - -enable-pam意思基于pam做认证,因为busybox没有pam功能(- -enable显示默认禁用)
./configure //编译安装
vim options.h //使用里面默认值 不修改
make //还可以写'make PROGRAMS='
make install
bash bincp.sh //复制程序(命令)到指定目录下,同时将其所依赖的库文件复制到对应的目录:
dropbear
dropbearkey
dbclinet
quit
远程连接需要用到tty设备文件,每个终端都需要一个终端文件
cd /mnt/sysroot/
mdkir /dev/pts //创建挂载目录
vim /etc/fstable //pts挂载个伪文件系统
devpts /dev/pts devpts mode=620 0 0 //新增此列,mode=620表示挂载文件系统内部他们对应的访问权限
为目标系统dropbear生成秘钥文件
mkdir /etc/dropbear
cd etc/dropbear
dropbearkey -t rsa -s 2048 -f dropbearkey_rsa_host_key //生成秘钥文件 路劲名对应options.h配置文件里设置的路径和文件名
dropbearkey -t dss -f dropbearkey_dss_host_key //生成秘钥文件 路劲名对应options.h配置文件里设置的路径和文件名
远程登录像ssh这种对安全选项比较严格,使用的sh不是安全是无法登录的
定义安全SH:
vim etc/shells
/bin/sh
/bin/ash
/bin/hush
/bin/bash
/sbin/nologin
sync
在用户登录时,dropbear需要将用户名转化为id号并检查用户账号信息。
添加网络转化服务功能模块
vim etc/nsswitch.conf
passwd: files
group: files
shadow: files
hosts: files dns //先找files文件 在找DNS
复制关联模块到相应的目录下
cp -d /li64/libnss_files* li64/
mkdir usr/lib64
cp -d /usr/lib64/libnss3.so usr/lib64
cp -d /usr/lib64/libnssutil3.so usr/lib64
cp -d /usr/lib64/libnss_files* usr/lib64
sync
重启开机
注:开机前原有的用来编译的系统要关机,不然当你启动dropbear时会出故障的,因为会在当前系统创建文件
开机登录后: 命令提示符仍然显示:-bash-4.1# 编辑.bash_profile:
vi .bash_profile
export PS1='[\u\@\h \w]\$' //u用户 h主机
export PATH= $PATH:/usr/local/bin:/usr/local/sbin //echo $PATH先查看有哪些路径
exit 退出重新登录此时上面定义的主机名则会显现出来
运行dropbear
mkdir /var/run //创建 dropbear.pid文件的目录
dropbear -F -E //开启dropbear,工作到前台. (命令:killall dropbear则是停掉dropbear)
登录
netstart -tnl //查看是否已经运行开始监听了,此时可以远程控制访问了
vim /etc/profile //远程登录定义一个专用的全局的配置文件
[ $UID -eq 0 ] && export PATH=/bin:/sbin:/usr/bin:/usr/sbin //UID是管理员才能运行后面配置
du -sh / //查看根文件的大小