zoukankan      html  css  js  c++  java
  • 定制centos安装iso

    参考

    https://gist.github.com/pauljeff/4b9ad551cb6c35870d7c
    https://www.redhat.com/archives/kickstart-list/2014-August/msg00010.html
    http://www.alexlinux.com/centos-7-kickstart-example
    http://www.smorgasbork.com/2014/07/16/building-a-custom-centos-7-kickstart-disc-part-1/
    
    https://github.com/joyent/mi-centos-7
    http://ngyuki.hatenablog.com/entry/2014/07/08/224533
    http://qiita.com/rprev/items/255718ac40b71778c78a
    
    #livecd
    http://minimal.linux-bg.org
    
    https://github.com/CentOS/sig-core-livemedia
    http://billauer.co.il/blog/2012/06/livedvd-kickstart-modified
    http://multix.jp/headless-liveboot-centos
    https://github.com/jonlives/centosdojo_resources
    
    #book
    Live Linux CDs: Building and Customizing Bootables
    The Official Damn Small Linux Book: The Tiny Adaptable Linux That Runs on Anything
    

    usb-disk和usb-cdrom

    u盘可制做usb-disk和usb-cdrom两种类型的引导盘。usb-cdrom是用iso写入u盘制成的。usb-cdrom使用isolinux引导,usb-disk使用syslinux引导,同时syslinux.cfg和isolinux.cfg里面的引导位置不同,需要使用cdrom设备或者label。另外iso9600分为通用模式与混合模式(hybrid iso),有些服务器仅支持混合模式的u盘引导。
    
    #查看iso光盘镜像模式
    file -s my.iso
    
    #转换通用模式到混合模式
    isohybrid my.iso
    

    制作usb-disk安装盘

    我建议使用usb-disk方式制作引导盘,修改引导盘内容比较方便。我使用unbutu系统,文件位置与centos略有不同。

    #u盘复位(写主引导区)
    sudo dd if=/dev/zero of=/dev/sdb bs=512 count=1
    
    #分区
    sudo fdisk /dev/sdb
    n 分成1个主分区,使用全部容量
    t 指定分区类型 选择c W95 FAT32 (LBA)
    a 设置可引导
    w 写入
    
    #格式化,卷标(label)为BOOT
    sudo mkfs.vfat -n 'BOOT' /dev/sdb1
    
    #写入MBR数据,注意是设备名sdb,不是分区名sdb1
    sudo dd conv=notrunc bs=440 count=1 if=/usr/lib/SYSLINUX/mbr.bin of=/dev/sdb
    
    #写入syslinux引导,,注意是分区名sdb1,不是设备名sdb
    sudo syslinux /dev/sdb1
    
    #拷贝syslinux必须文件
    cp -rfp /usr/lib/syslinux/modules/bios/{libcom32.c32,libutil.c32,vesamenu.c32} /media/ken/BOOT
    
    #拷贝内核引导文件
    sudo mount /data/iso/CentOS-7-x86_64-Minimal-1511.iso /mnt
    cp -rfp /mnt/isolinux/{initrd.img,vmlinuz} /media/ken/BOOT
    
    #syslinux启动菜单 使用传统网卡命名
    cat > /media/ken/BOOT/syslinux.cfg << EOF
    default vesamenu.c32
    prompt 0
    timeout 150
    
    label linux                                                                     
      menu default
      menu label ^Install CentOS 7                                                  
      kernel vmlinuz                                                                
      append initrd=initrd.img inst.stage2=hd:sdb1:/ quiet net.ifnames=0 biosdevname=0 
    
    label kickstart
      menu label Install CentOS 7 of ^Kickstart                                                
      kernel vmlinuz                                                                
      append initrd=initrd.img inst.stage2=hd:sdb1:/ net.ifnames=0 biosdevname=0 ks=hd:sdb1:/ks.cfg
    EOF
    #如果是usb-cdrom方式,hd:sdb1需要变动
    
    #kickstart,/media/ken/BOOT/ks.cfg,这个文件挂载u盘做为本地源,使用eth传统网卡名,支持gpt分区,网卡dhcp
    lang en_US.UTF-8
    keyboard us
    timezone Asia/Shanghai
    
    install
    cdrom
    text
    
    network --onboot=yes --device=eth0 --bootproto=dhcp --ipv6=auto --activate
    network --onboot=yes --device=eth1 --bootproto=dhcp --ipv6=auto --activate
    network --hostname=localhost.localdomain
    
    auth --enableshadow --passalgo=sha512
    rootpw --iscrypted $6$vE77HiPeSYicTrZH$YHPVeEss83QgJ9t736MkNpw5NqiG18GsXPIhFqKDCe6eN3W33IOnVgFtw6xArfUzP.n7UN2QKNowXYzqjQOfE.
    
    #zerombr
    bootloader --boot-drive=sda --location=mbr
    ignoredisk --only-use=sda
    part swap --fstype='swap' --ondisk=sda --size=8000
    part biosboot --fstype='biosboot' --size=1
    part / --fstype='xfs' --ondisk=sda --size=50000
    part /opt --fstype='xfs' --ondisk=sda --size=1 --grow
    
    firewall --disabled
    selinux --disabled
    firstboot --disabled
    services --enabled=network,rc-local --disabled=NetworkManager,postfix
    reboot
    
    %packages
    @core
    %end
    
    %pre
    clearpart --drives=sda --all --initial
    /usr/sbin/parted -s /dev/sda mklabel gpt
    %end
    
    %post
    for nic in eth0 eth1
    do
    /usr/bin/cat > /etc/sysconfig/network-scripts/ifcfg-$nic << EOF
    DEVICE=$nic
    BOOTPROTO=dhcp
    #IPADDR=10.0.10.101
    #NETMASK=255.255.255.0
    ONBOOT=yes
    EOF
    done
    
    /usr/bin/cat > /etc/sysconfig/network << EOF
    NETWORKING=yes
    #GATEWAY=10.0.10.1
    EOF
    
    cd /etc/yum.repos.d
    mkdir bak
    mv -f CentOS* bak/
    
    /usr/bin/mkdir /mnt/usb
    /usr/bin/echo 'mount -o ro /dev/sdb1 /mnt/usb' >> /etc/rc.local
    /usr/bin/chmod 755 /etc/rc.local
    
    /usr/bin/cat > /etc/yum.repos.d/usb.repo << EOF
    [centos7-usb]
    name=CentOS-$releasever - usb
    baseurl=file:///mnt/usb/repo
    gpgcheck=0
    enabled=1
    EOF
    %end
    
    #制作本地yum源
    1 yum -y install yum-utils
    reposync - synchronize a remote yum repository to a local directory using yum to retrieve packages
    使用reposync可将rpm文件下载到本地
    
    2 yum -y install net-tools vim wget --downloaddir=/root/repo --downloadonly
    也可将rpm文件下载到本地
    
    3 yum -y install createrepo
    createrepo -d -p --update /root/repo
    
    将/root/repo目录拷贝至/media/ken/BOOT下面
    

    其他

    #写iso镜像到u盘
    dd if=/opt/iso/CentOS-7-x86_64-Minimal-1511.iso of=/dev/sdb
    
    #u盘克隆
    ddrescue /dev/sdb /dev/sdc -v -f
    
    #生成系统密码
    python -c 'import crypt; print(crypt.crypt("123456", "$6$MySalt"))'
    
    #用虚拟机测试iso
    qemu-kvm -m 2048 -vga qxl -cdrom filename.iso 
    or
    qemu-system-x86_64 -m 1024 -vga qxl -cdrom my-livecd.iso
    
    /dev/shm
    /sys/fs/cgroup
    /run/install/isodir  # 挂载引导U盘(sdb1)分区
    /run/install/repo    # 挂载inst.stage2指向的目标,这里是引导U盘(sdb1)分区内centos7的iso文件,挂载源/dev/loop0
    
    /mnt/sysimage         # 目标硬盘(sda)的root分区
    /mnt/sysimage/dev/shm # tmpfs
    /mnt/sysimage/opt     # 目标硬盘(sda)的opt分区
    

    制作一个livecd

    1 制作一个live cd,尽可能的减少容量,ssh服务,curl,python环境,网
    2 被安装服务器远程pxe引导这个live cd,上面启动ssh服务和http接口服务,自动将被安装服务器的信息post给安装控制服务器,自动分配的ip信息。

    yum -y install livecd-tools
    git clone https://github.com/CentOS/sig-core-livemedia
    cd sig-core-livemedia/kickstarts
    
    #https://github.com/rhinstaller/livecd-tools/tree/master/imgcreate
    #livecd-tools调用python模块imgcreate,生成引导img
    
    import imgcreate
    ks = imgcreate.read_kickstart("foo.ks")
    imgcreate.ImageCreator(ks, "foo").create()
    

    livecd-creator --cache=/root/cache --tmpdir=/root/tmp --config=ks.cfg --name=my-livecd

    #kickstart - ks.cfg
    bootloader --location=mbr --append='norhgb quiet net.ifnames=0 biosdevname=0'
    clearpart --all
    firstboot --disabled
    firewall --disabled
    selinux --disabled
    auth --enableshadow --passalgo=sha512
    rootpw --iscrypted $6$MySalt$e0fnxWlZ3UCN4HnSSx6U7zQGgzX7AlGBfZ75msCser0B2ZPRHBmwZjOVW6Cai/1Ba5f7B5uTsucedaHsEd8W6/
    
    install
    lang en_US.UTF-8
    network --bootproto dhcp --device eth0 --onboot yes
    part / --fstype=ext4 --size=1024
    reboot
    zerombr
    
    repo --name=base    --baseurl=http://yum.local/centos/7/os/$basearch
    repo --name=update  --baseurl=http://yum.local/centos/7/updates/$basearch
    repo --name=extra   --baseurl=http://yum.local/centos/7/extras/$basearch
    repo --name=local   --baseurl=file:///root/rpms
    
    %packages
    basesystem
    kernel
    rootfiles
    firewalld
    aic94xx-firmware
    linux-firmware
    vim-minimal
    net-tools
    #raidcfg #dell tools
    #syscfg #dell tools
    %end
    
    %pre
    %end
    
    %post
    %end
    
    /mnt/livecd
    ├── isolinux
    │   ├── boot.cat
    │   ├── initrd0.img
    │   ├── isolinux.bin
    │   ├── isolinux.cfg
    │   ├── vesamenu.c32
    │   └── vmlinuz0
    └── LiveOS
        ├── osmin.img
        └── squashfs.img
    
  • 相关阅读:
    关于pem与ppk格式的密钥的相互转换
    关于linux免密登录的配置及ssh客户端基于私钥文件的登录
    关于yum update和yum upgrade的区别
    Golang文件操作整理
    整理那些用于基本生存的shell命令
    Docker command line 学习笔记
    关于fork
    tips for using shortcuts
    chapter2
    使用MarkDown的编辑器
  • 原文地址:https://www.cnblogs.com/liujitao79/p/6214327.html
Copyright © 2011-2022 走看看