0%

CoreOS镜像制作

coreos_build.jpg

介绍

CoreOS,一个轻量的linux分布式操作系统。CoreOS中的应用都以容器形式在系统中运行。个人觉得CoreOS不能算是一个linux发行版,只能算是一种订制系统。(BTW,CoreOS的订制应该是源自Gentoo这个发行版)

环境

  • CoreOS的编译与操作系统无关(此处使用的是RHEL7.2),硬件要求必须是X86-64系统。
  • 编译系统必须安装 curl、git、python2、bzip2
  • CoreOS SDK编译有两种方法(Option1 & Option2),Option1 需要选择和需要编译的CoreOS相匹配的golang版本。
  • 使用Option2 方法安装,需要设置https_proxy代理(否则,无法法访问GoogleSource)

制作&安装

本人使用Option2方法完成CoreOS编译,并使用coreos-install安装CoreOS到xen vm上。

制作

准备

安装Repo

下载repo,用于下载CoreOS SDK

1
2
curl http://storage.googleapis.com/git-repo-downloads/repo > ./repo
chmod a+x ./repo

下载SDK

创建一个目录用于存放coreos sdk

1
2
mkdir coreos
cd coreos

repo初始化目录,并同步git repos

1
2
repo init -u https://github.com/coreos/manifest.git
repo sync

Chroot到coreos SDK

1
./chromite/bin/cros_sdk

编译

设置core用户登陆密码

设置core用户密码,已被系统安装完后登陆系统使用。

1
./set_shared_user_password.sh

选择目标编译平台

选择amd64-usrarm64-usr

1
./setup_board --default --board=amd64-usr

编译Packages

1
./build_packages

制作CoreOS镜像

可以选择编译开发版(dev)还是生成版(prod)

1
./build_image prod

制作可以引导CoreOS镜像

1
./image_to_vm.sh --board=amd64-usr --format=xen --from=/mnt/host/source/src/build/images/amd64-usr/developer-1409.0.0+2017-05-15-1456-a1/coreos_production_image.bin --disk_layout=base
  • --format 根据不同需要选择制作不同格式的可引导镜像
  • --disk_layout 默认是空,建议选择base

安装

*** 经过上述步骤的操作,已经将coreos镜像制作完成,并放置在”./src/build/images/amd64-usr”目录下。 ***

安装的过程需要使用liveCD启动,然后挂在需要安装的裸盘,使用coreos-install安装。镜像的传递是,先将镜像放置到一个webserver上,然后coreos-install再通过这个webserver下载、并安装。

*** 在将镜像放置到webserver之前,需要先将镜像压缩成bz2文件,然后再将bz2进行签名 ***(签名无法使用官方的私钥,只能自己申请,详细请见)。

步骤

*** 本人的安装步骤,不是唯一的、方便、快捷的方法,更多安装方式建议阅者自行调研 ***

下载coreos-install安装脚本

1
wget https://raw.githubusercontent.com/coreos/init/master/bin/coreos-install

修改coreos-install中的公钥

在coreos-install中有个变量GPG_KEY用于存储官方的公钥,需要将这个公钥换成你给镜像签名时对应的公钥。

** 此处略去俺公钥内容 **

镜像在下载到目标机后,coreos-install会对下载的镜像进行校验,这是不替换公钥,只能想办法让官方帮你签名

使用coreos-install安装CoreOS

使用liveCD启动系统后,先确认需要安装CoreOS的硬盘,然后执行coreos-install进行安装

1
sudo ./coreos-install -d /dev/xvda -V 1409.0.0 -o xen -v -b http://192.168.1.82:8000 -c /media/configdrive/openstack/latest/user_data
  • -d 指定安装目标设备
  • -V 指定安装版本,一定要与URL中的路径能匹配上
  • -o 镜像名称中需要指出是xenorkvmor…
  • -b 镜像下载URL

问题&解决

不能引导问题

若成功编译安装,但不能正常引导,可以对比做bzip2之前镜像的前512字节和安装后xvda的前512字节是否一致。本人遇到不能引导问题,是因为本应使用bzip2压缩的镜像使用了tar

参考&鸣谢

  • 感谢同事为我提供的VPN翻墙服务
  • 感谢同事为我提供的WebService服务,方便完成网络安装CoreOS
  • container linux document