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

[经验分享] Linux入门之定制Linux系统

[复制链接]
发表于 2018-5-24 13:42:58 | 显示全部楼层 |阅读模式
定制Linux系统




  简单回顾下系统启动的相关内容

  

      编译过程:编译内核、busybox
      为系统上的新硬盘建立分区,这里根据需要先建立一个大小为200M的主分区作为新建系统的boot分区和一个512M的分区作为目标系统(即正在构建的新系统,后面将沿用此名称)的根分区;200M的分区格式化后将其挂载至/mnt/boot目录下;512M的分区格式化后将挂载至/mnt/sysroot目录;两个分区的文件系统均为ext4。
  此处还可以添加第三个分区用于swap,大小为256MB或其它你喜欢的空间额度。记得使用mkswap将其创建为swap分区。
一、编译Linux内核
1.获取内核源码,解压至/usr/src
# tar xflinux-3.13.6.tar.xz -C /usr/src/
2.创建软链接
[root@station75 src]#ln -sv  linux-3.13.6/ linux
3.生成配置文件
[root@station75linux]# make allnoconfig
4.配置
[root@station75linux]# make menuconfig
主要的配置选项
64位系统支持

  • 64-bit kernel
  • 设置版本信息
    General setup  --->()   Local version - append to kernel release


    选择cpu类型
    Processor type and features  --->Processor family (Generic-x86-64)  --->(X) Core 2/newer Xeon
    支持多核心
    Processor type and features  --->
  • Symmetric multi-processing  support
  • 支持动态模块加载

  • Enable loadable module  support  --->
  • PCI总线支持(cpu需要总线与其他模块沟通)
    Bus options (PCI etc.)  --->
  • PCI support
  • scsi硬盘驱动
    (lspci查看硬盘类型)
    Device Drivers  ---> SCSI device support --->  <*> SCSI device supportà<*> SCSI disk support
    另:Device  Drivers  --->
  • Fusion MPT device  support  ---> <*>   Fusion MPT ScsiHost drivers for SPI
        <*>   Fusion MPT misc  device (ioctl) driver
  • 文件系统
    File systems  ---> <*> The Extended 4 (ext4)  filesystem
    支持ELF(可执行文件)
      Executable file formats / Emulations  à
  • Kernel  support for ELF binaries
      <*> Kernel support for scripts starting with #!
  • I/O驱动
    Device Drivers  ---> Input device support  --->
  •    Keyboards   --->
                                           
  •    Mice   --->
    支持USB驱动Device Drivers  --->
  •   USB support  ---> <*>   Support for Host-side USB   à <*>     EHCI HCD (USB 2.0) support
                     <*>     UHCI HCD (most Intel and VIA) support
                     <*>     OHCI HCD (USB 1.1) support
  • 实时时钟
    Device Drivers  --->
  • Real Time Clock  --->
  • devtmfs
    Device Drivers  ---> Generic Driver Options  -->
  • Maintain a devtmpfs filesystem  to mount at /dev
  • 网卡
    协议
  • Networking  support  ---> Networking  options  --->
  • TCP/IP networking
                                                       <*> Unix domain sockets
    驱动Device  Drivers  --->
  • Network device  support  --->
  •    Ethernet driver support (NEW)  ---> <*>     Intel(R) PRO/1000 Gigabit Ethernet  support/ <*>     Intel(R)  PRO/1000 PCI-Express Gigabit Ethernet support


  • 5.编译成bzImage
    make bzImage –j # 指定使用几个进程编译
    6.准备分区
    准备分区 sda1 sda2 分别挂在至/mnt/boot/mnt/sysroot
    /dev/sdb1
    50M   /mnt/boot
    /dev/sdb2
    512M  /mnt/sysroot
    swap
    256M mkswap  (82)


    7.安装grub程序
    grub-install--root-directory=/mnt /dev/sdb
    8.
    二、编译busybox
    解决依赖关系:需要先安装glibc-staticfor centos(cd 2 中)
    1.获取源码,解压
    2.编译安装
    make menuconfig
    配置选项
    静态编译
    (不使用动态库)
    Busybox Settings  ---> Build Options  --->
  • Build BusyBox as a static binary  (no shared libs)








  • 3.编译安装
    make        &&  make install
    三、定制
    1.复制bzImage到 /mnt/boot下
    [root@station75linux]# cp arch/x86/boot/bzImage /mnt/boot/
    2.拷贝编译好的文件_install至/mnt/sysroot
    [root@station75busybox-1.22.1]# cp -a _install/* /mnt/sysroot/
    3.创建文件系统
    主要是在/mnt/sysroot目录下创建完整的目录结构
    [root@station75sysroot]# mkdir -pv etc/rc.d var/log root home lib64 dev proc sys boot mntmedia tmp srv
    4.配置grub配置文件
    vim/mnt/boot/grub/grub.conf


      default=0
      timeout=5
      title Mini Linux
      root (hd0,0)
      kernel /bzImage ro root=/dev/sda2 init=/sbin/init quiet
    5.初始化
    /etc/inittab   /sbin/init的配置文件


      ::sysinit:/etc/rc.d/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:/etc/rc.d/rc.sysdown  指定关机脚本
      



    /etc/rc.d/rc.sysinit   初始化脚本


      #!/bin/sh
      echo "Welcome"
      [ -r /etc/sysconfig/network ]    && . /etc/sysconfig/network
      [ -z "$HOSTNAME" -o    "HOSTNAME" =="none" ] && HOSTNAME=localhost
      /bin/hostname $HOSTNAME                                                 设置主机名
      mdev –s
      mkdir /dev/pts
      ifconfig lo 127.0.0.1
      ifconfig eth0 172.16.37.11
      mount –a
      /etc/rc.d/*.start start


    /etc/fstab  自动挂载


      /dev/sda1       /boot   ext4       defaults        0 0
      proc                    /proc       proc    defaults        0 0
      sysfs              /sys     sysfs       defaults        0 0
      devtpts         /dev/pts       devpts  mode=620  0 0
      /dev/sda2       /       ext4    defaults        0 0
      /dev/sda3       swap    swap       defaults        0 0


    6.设定主机名
    主机名设置在/etc/sysconfig/network内,创建这个目录,建立文件,
    mkdir/mnt/sysroot/etc/sysconfig/network 在启动脚本中也需要读取整个文件


      HOSTNAME=Mini-Linux
    7.banner信息
    创建文件/mnt/sysroot/ect/issue


      Welcome to the world of linux
      Kernel \r
      

    8.设置PS1信息


      #export PS1='[\u@\h  \W]\$'
    四、远程登录
    使用dropbear远程登录(在host主机上实现),用虚拟终端登录时用户需要有家目录
    1、获取源码,编译安装
    ./config 默认安装在usr/local下
    # makePROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
    # makePROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install
    2、移植dropbear到目标机
    使用bincp.sh移植命令dropbeardropbearkey dbclient scp
    这些命令会被存储于目标系统的/usr/local/sbin或/usr/local/bin目录中
    3、dropbear登陆需要验证用户名,需名称解析
    在宿主机上使用默认选项编译的dropbear将依赖nsswitch实现用户名称解析,因此,还需要为目标主机提供nss相关的库文件及配置文件


      # cp -d /lib64/libnss_files*  /mnt/sysroot/lib64/
      # cp -d /usr/lib64/libnss3.so    /usr/lib64/libnss_files.so /mnt/sysroot/usr/lib64/
    配置文件
      [root@station75 ~]# cp    /etc/nsswitch.conf  /mnt/sysroot/etc/
      [root@station75 ~]# vim    /mnt/sysroot/etc/nsswitch.conf
      passwd:     files
      shadow:     files
      group:      files
      hosts:      files dns
      ~
      

      

      

    4、设置安全shell
    安全起见,dropbear默认情况下仅允许其默认shell出现在/etc/shells文件中的用户远程登录,因此,这里还需要创建/etc/shells文件,并添加所有允许的shell
      /bin/sh
      /bin/hush
      /bin/ash
      /sbin/nologin
      /bin/bash
    5、生成密钥文件
    在目标机上生成dropbearkey文件
    mkdir/mnt/sysroot/etc/dropbear
    [root@station75sysroot]# dropbearkey -t rsa -s 2048  -f etc/dropbear/dropbear_rsa_host_key
    [root@station75sysroot]# dropbearkey -t dss -f etc/dropbear/dropbear_dss_host_key
    6、准备一些目录
    mkdir/mnt/sysroot/var/run   提供pid文件存放路径
    mkdir/mnt/syroot/var/lock


    7、为远程登录的用户提供伪终端设备文件
    编辑/mnt/sysroot/etc/fstab,添加如下一行:
    devtpts    /dev/pts   devpts  mode=620  0 0
    创建目录 /# mkdir /mnt/sysroot/dev/pts
    此处这样做无法正确生成会被覆盖,因此在初始化脚本中生成


    8、测试调试
    dropbear  -F -E 运行在前端


    dev/pts为什么没有
    9、使dropbear开机自动启动,关机关闭
    提供服务脚本,放置在/etc/rc.d/init.d(需手工创建)下见附件
    复制function函数
    # cp/etc/rc.d/init.d/functions  /mnt/sysroot/etc/rc.d/init.d/
    创建目录/etc/rc.d/rc3.d  链接 dropbear启动脚本至该目录
    [root@station75rc3.d]# ln -sv ../init.d/dropbear S70dropbear 路径很重要


      [root@station75 rc.d]# ln -sv    init.d/dropbear dropbear.start
      `dropbear.start' ->    `init.d/dropbear'
      [root@station75 rc.d]# ln -sv    init.d/dropbear dropbear.stop
      `dropbear.stop' -> `init.d/dropbear'
      到rc.sysinit中执行
      

    关机脚本,在inittab中执行


      #!/bin/sh
      sync
      sleep 2
      sync
      /etc/rc.d*.stop stop
      /bin/umount -a -r
      poweroff
      

    五、Nginx
    1、在宿主机编译安装nginx-1.2.5
    实现安装pcre


      # tar nginx-1.2.5.tar.gz
      # cd nginx-1.2.5
      # ./configure --prefix=/usr/local    --conf-path=/etc/nginx/nginx.conf     --error-log-path=/var/log/nginx/error.log --user=nginx --group=nginx    --http-log-path=/var/log/nginx/access.log     --without-pcre --without-http_rewrite_module    --without-http_geo_module --without-http_fastcgi_module  --without-http_uwsgi_module  --without-http_scgi_module    --without-http_memcached_module --without-http_upstream_ip_hash_module    --without-http_upstream_least_conn_module     --without-http_upstream_keepalive_module    --http-log-path=/var/log/nginx
      # make
      # make install
      

      

    2、移植二进制程序及其依赖的库文件,方能实现其在目标系统上正常运行。建议使用前面的bincp.sh脚本进行
    3、移植配置文件至目标系统
      # mkdir  /mnt/sysroot/etc/nginx/
      # cp /etc/nginx/  /mnt/sysroot/etc/nginx/
    4、移植测试页面至目标系统,当然,也可以不采用下面的步骤而在目标系统上直接创建
    # mkdir/mnt/sysroot/usr/local/html
    设置测页index.html
    5、提供服务脚本
    脚本见附件,具体步骤见dropbear


      [root@station75 init.d]# ln -sv    ../init.d/nginx nginx.start
      `nginx.start' -> `../init.d/nginx'
      [root@station75 init.d]# ln -sv    ../init.d/nginx nginx.stop
      `nginx.stop' -> `../init.d/nginx'
      

    6、提供用户
    使用输出重定向将nginx用户添加到目标主机的passwd和group文件中
    7、
    8、测试
    启动目标主机,首先配置好网络属性,并使用adduser为其添加nginx用户和nginx组。
    然后使用如下命令启动nginx,即可通过浏览器测试访问。


      

    运维网声明 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-480705-1-1.html 上篇帖子: Linux:Vim命令 下篇帖子: linux内存和swap
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

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

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

    扫描微信二维码查看详情

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


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


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


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



    合作伙伴: 青云cloud

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