定制centos安装iso

本文详细介绍如何定制CentOS安装ISO,包括制作USB-Disk安装盘的过程、配置Kickstart文件实现自动化安装、创建本地YUM源及生成LiveCD的方法。
参考
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
posted on 2016-12-23 12:03 北京涛子 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/liujitao79/p/6214327.html

### 定制 CentOS 8 ISO 镜像 为了定制 CentOS 8 的 ISO 镜像,可以遵循一系列操作流程来实现这一目标。这不仅涉及准备基础环境,还包括编辑配置文件以及最终构建新的 ISO 文件。 #### 准备工作环境 首先需要准备好一个运行 CentOS 或兼容系统的主机作为开发平台。确保该环境中已安装必要的工具包,比如 `yum-utils` 和 `genisoimage` 工具用于处理 RPM 包管理和创建 ISO 映像: ```bash sudo yum install -y yum-utils genisoimage ``` 接着克隆官方提供的 CentOS 8 系列 ISO 镜像下载资源库中的内容到本地磁盘上以便于后续修改[^2]。 #### 修改软件源列表和其他自定义更改 进入解压后的目录结构内找到并打开 `.treeinfo` 文件(对于某些较新版本可能是 `.composeinfo`),这里记录着整个发行版的信息摘要;另外还需要关注 `repodata/` 下面的各种 XML 文档,它们描述了仓库元数据。根据实际需求调整这些文档里的条目,例如指定不同的上游服务器位置或是加入额外的第三方存储库链接。 针对想要预装的应用程序集合,则要通过编写 kickstart 脚本来完成自动化部署过程。Kickstart 是一种无人值守安装方式,允许管理员提前规划好所有选项从而简化批量机器初始化的工作量。一份典型的 `%packages` 段落可能如下所示: ```ks %packages --ignoremissing @core openssh-clients vim-enhanced epel-release %end ``` 上述片段表示除了核心组件外还会拉取 OpenSSH客户端、增强型 Vi 编辑器以及 EPEL 扩展支持。 #### 创建新的 ISO 文件 当所有的准备工作都完成后就可以着手打包成果了。先利用 `mkisofs` 命令行实用程序生成临时映射表单,再借助之前提到过的 `genisoimage` 来合成完整的光碟镜像。下面给出了一组参数组合供参考: ```bash cd /path/to/customized_iso_root/ sudo genisoimage \ -o ~/custom_CentOS-8-x86_64.iso \ -b isolinux/isolinux.bin \ -c isolinux/boot.cat \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ -R -J -V "CustomCentOS" . ``` 这段脚本会读取当前路径下的文件夹作为输入素材,并输出名为 `custom_CentOS-8-x86_64.iso` 的可引导介质至用户的家目录里[^1]。 值得注意的是,在 CentOS 7 中曾经存在过由于错误设置了 `$discinfo` 变量而导致的空间不足问题,不过这个问题已经在后来的版本中得到了修正,因此在 CentOS 8 上进行类似操作时不必担心遇到同样的麻烦[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值