zoukankan      html  css  js  c++  java
  • 为openstack制作CoreOS虚拟机镜像(基于CoreOS官方提供镜像)

    OpenStack源码交流群: 538850354

    1.下载CoreOS镜像(633.1.0版本)

    CoreOS官网已经有openstack使用的虚拟机镜像,可以直接下载,然后进行修改

    http://stable.release.core-os.net/amd64-usr/current/coreos_production_openstack_image.img.bz2

    #如果需要使用iso文件制作镜像,可以参考我的博客:http://www.isjian.com/2014/12/iso_openstack_coreos_images/

    2.guestfish修改CoreOS镜像

    2.1 安装guestfish工具
    yum install libguestfs-tools-c-1.20.11-11.el6.x86_64
    2.2 使用guestfish挂载CoreOS镜像
    guestfish -a coreos_production_openstack_image.img -i
     
    #挂载相应分区
    mount /dev/sda9 /
    mkdir /cloudinit
    mount /dev/sda6 /cloudinit
     
    #cloud-config.yml是系统提供的开机配置文件,我们可以把需要开机执行的服务,或者对系统的修改定制以一定语法写入这个文件(下文中设置sshd),如果此文件语法没有错误,CoreOS会在每次开机时执行它
    #cloujd-config.yml位于系统的/usr/share/oem目录下,sda6分区上, 本次是临时挂载在/cloudinit目录下
    2.3 开启root账户

    默认情况下,CoreOS禁用root账户,所以需要修改/etc/shadow文件,修改root用户那行,把第二字段置为空即可

    2.4 设置sshd

    #编辑/cloudinit/cloud-init.yml文件,设置sshd_config文件,允许root用户登录,允许密码认证

    #cloud-config
    coreos:
        units:
          - name: user-configdrive.service
            mask: yes
          - name: user-configvirtfs.service
            mask: yes
    write_files:
        - path: /etc/ssh/sshd_config
          permissions: 0600
          owner: root:root
          content: |
            UsePrivilegeSeparation sandbox
            Subsystem sftp internal-sftp
            PermitRootLogin yes
            AllowUsers root
            PasswordAuthentication yes
            ChallengeResponseAuthentication no

     

    3 启动虚拟机

    上面步骤使用guestfish工具修改了CoreOS镜像,现在可以使用这个镜像启动虚拟机,使用root账号无需密码登录系统(上面/etc/shadow中设置)

    • 如果你使用libvirt方式管理虚拟机,那么需要定义xml文件,然后使用virsh命令启动虚拟机
    • 如果直接使用命令行启动虚拟机,那么使用 qemu-kvm -m 1024 coreos_production_openstack_image.img 启动

     

    4 设置cloudinit.sh脚本

    4.1 新建/etc/cloud-init.sh脚本

    #需要编写一个cloud-init.sh脚本,此脚本在系统开机时从metadata服务器获取数据, 完成修改主机名,修改root密码,ssh密钥注入

    #!/bin/bash
    #cloud-init.sh
    #author:xxx
    #date:2015-4-15
     
    #get the env
    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin
     
    STATUS_CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://169.254.169.254/latest`
    if [ ! "$STATUS_CODE" -eq "200" ]; then
        /bin/sleep 3
    fi
     
    # set the root password using user data
    STATUS_CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://169.254.169.254/latest/user-data`
    if [ "$STATUS_CODE" -eq "200" ]; then
        PASS=`curl -m 10 -s http://169.254.169.254/latest/user-data | awk -F '"' '{for(i=1;i<=NF;i++){if($i ~ /password/) print $(i+2)}}'`
        if [ "$PASS" != " " ]; then
        /usr/bin/echo "root:${PASS}" > tmp.txt
        /usr/sbin/chpasswd < tmp.txt
        rm -f tmp.txt
        fi
    fi
     
    # set the hostname using the meta-data service
    STATUS_CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://169.254.169.254/latest/meta-data/hostname`
    if [ "$STATUS_CODE" -eq "200" ]; then
        curl -f http://169.254.169.254/latest/meta-data/hostname > /tmp/metadata-hostname 2>/dev/null
        if [ $? -eq 0 ]; then
            TEMP_HOST=`cat /tmp/metadata-hostname | awk -F '.novalocal' '{print $1}'`
            /usr/bin/hostnamectl set-hostname ${TEMP_HOST}
            /usr/bin/hostname $TEMP_HOST
            rm -f /tmp/metadata-hostname
        fi
    fi
     
    # get the user ssh key using the meta-data service
    STATUS_CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key`
    if [ "$STATUS_CODE" -eq "200" ]; then
        mkdir -p /root/.ssh
        /usr/bin/echo >> /root/.ssh/authorized_keys
        curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys
        chmod 0700 /root/.ssh
        chmod 0600 /root/.ssh/authorized_keys
    fi
    4.2 设置开机启动

    新建一个配置单元cloudinit.service, 此配置单元用来在开机时执行cloud-init.sh脚本

    #cat /etc/systemd/system/cloudinit.service
    [Unit]
    Description=OpenStack nova
    Requires=coreos-setup-environment.service
    After=coreos-setup-environment.service
    Before=user-config.target
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    EnvironmentFile=-/etc/environment
    ExecStart=/usr/bin/bash /etc/cloud-init.sh          #执行的脚本文件cloud-init.sh
    [Install]
    WantedBy=multi-user.target
    4.3 设置cloudinit.service开机启动
    #开机启动
    systemctl enable cloudinit.service
    #检测是否生效
    systemctl is-enabled cloudinit

     

    5 设置网络

    5.1 使用dhcp方式

    在/etc/systemd/network/目录下新建eth0.network文件,文件内容如下

    [Match]
    Name=eth0
    [Network]
    DHCP=yes
    5.2 使用固定IP方式
    cat eth0.network
    [Match]
    Name=eth0
    [Network]
    Address=192.168.1.15/24
    Gateway=192.168.1.1
    DNS=223.5.5.5

     

    6 设置时间同步,时区

    6.1设置ntpd

    #查看ntpd状态, 启用

    systemctl status ntpd
    systemctl enable ntpd
    6.2修改ntp time servers

    #ntp servers 可以通过修改/etc/ntp.conf配置文件,格式如下

    server 0.pool.example.com
    server 1.pool.example.com
    6.3 设置时区
    #查看当前状态
    timedatectl status
    #查看可用时区
    timedatectl list-timezones
    #修改时区
    timedatectl set-timezone Asia/ShangHai
    #再次查看当前状态
    timedatectl status
  • 相关阅读:
    帝国 标签模板 使用程序代码 去除html标记 并 截取字符串
    iis6 伪静态 iis配置方法 【图解】
    您来自的链接不存在 帝国CMS
    帝国cms Warning: Cannot modify header information headers already sent by...错误【解决方法】
    .fr域名注册 51元注册.fr域名
    帝国网站管理系统 恢复栏目目录 建立目录不成功!请检查目录权限 Godaddy Windows 主机
    星外虚拟主机管理平台 开通数据库 出现Microsoft OLE DB Provider for SQL Server 错误 '8004' 从字符串向 datetime 转换失败
    ASP.NET 自定义控件学习研究
    CSS层叠样式表之CSS解析机制的优先级
    ASP.NET程序员工作面试网络收藏夹
  • 原文地址:https://www.cnblogs.com/jython/p/4477106.html
Copyright © 2011-2022 走看看