VMware Workstation 里面的虚拟机为客户虚拟机(以下简称虚机,采用 CentOS 7.8 图形化);我们称在虚机里面基于 KVM 运行的虚拟机为 KVM虚拟机(以下简称 KVM虚机,采用 CentOS 7.4),是的,两层套娃虚机在启动前,必须在 VMware Workstation 上为其开启虚拟化引擎 虚拟化 Intel VT-x/EPT 或 AMD-V虚机网络配置为 NAT 或 桥接,因为未来 KVM虚机 需要借助 虚机 的外网能力进行联网安装软件包G016 完成 CentOS 安装及 G019 和 G020 完成 RedHat OpenStack 环境搭建及基础操作目录按钮来显示文章整体目录结构
注意:虚机 指的是 CentOS 7.8
#挂载光盘
[root@cloudcs ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@cloudcs ~]# ls /mnt/
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
#配置本地YUM源
[root@cloudcs ~]# mkdir /tmp/repo
[root@cloudcs ~]# mv /etc/yum.repos.d/*.repo /tmp/repo/
[root@cloudcs ~]# vim /etc/yum.repos.d/local.repo
[root@cloudcs ~]# cat /etc/yum.repos.d/local.repo
[local_repo]
name = local
baseurl = file:///mnt/
gpgcheck = 0
#安装虚拟化软件包及虚拟机镜像管理工具
[root@cloudcs ~]# yum groupinstall -y "Virtualization*"
[root@cloudcs ~]# yum install -y libguestfs-tools-c.x86_64
注意:虚机通过命令ifconfig可看到一张虚拟网卡vritbr0,该虚拟网卡为kvm虚机default 默认的NAT网络类型网卡(192.168.122.1)
#创建目录上传ISO镜像
[root@cloudcs ~]# mkdir -p /soft/disk
#将 CentOS 7.4 上传到 /soft 目录下
[root@cloudcs ~]# ls /soft/
CentOS-7-x86_64-DVD-1708.iso disk
#创建 kvm虚机 使用的磁盘文件
[root@cloudcs ~]# qemu-img create -f qcow2 /soft/disk/centos7.qcow2 15G
Formatting '/soft/disk/centos7.qcow2', fmt=qcow2 size=16106127360 encryption=off cluster_size=65536 lazy_refcounts=off
#创建 kvm 虚机
virt-install \
--name centos \
--disk path=/soft/disk/centos7.qcow2 \
--vcpus 1 \
--memory 2048 \
--location /soft/CentOS-7-x86_64-DVD-1708.iso \
--network network=default
注意:当开启网络后,必须可以通过DHCP自动获取到IP地址,如下图
默认采用最小化 minimal 安装
重启kvm 虚机,并以root身份登录,测试kvm 虚机能否连通外网
注意:修改的是kvm虚机,不是虚机,概念分不清?参考第一部分约定
# 修改 kvm 虚机网卡配置文件,使其只包括以下 4 行内容
[root@local ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
[root@local ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=dhcp
DEVICE=eth0
ONBOOT=yes
根据2.3.5小节测试,kvm 虚机可正常连通外网,此时直接在线安装软件包即可。目的是为了可以获取到客户自定义元数据信息,如主机名及root密码等。
[root@local ~]# yum install -y cloud-utils-growpart cloud-init
#输出
Loaded plugins: fastestmirror
base | 3.6 kB 00:00
extras | 2.9 kB 00:00
updates | 2.9 kB 00:00
(1/4): extras/7/x86_64/primary_db | 247 kB 00:00
(2/4): base/7/x86_64/group_gz | 153 kB 00:00
(3/4): updates/7/x86_64/primary_db | 16 MB 00:31
(4/4): base/7/x86_64/primary_db | 6.1 MB 00:36
Determining fastest mirrors
* base: mirrors.cn99.com
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package cloud-init.x86_64 0:19.4-7.el7.centos.6 will be installed
--> Processing Dependency: python-six for package: cloud-init-19.4-7.el7.centos.6.x86_64
--> Processing Dependency: python-setuptools for package: cloud-init-19.4-7.el7.centos.6.x86_64
--> Processing Dependency: python-requests for package: cloud-init-19.4-7.el7.centos.6.x86_64
--> Processing Dependency: python-prettytable for package: cloud-init-19.4-7.el7.centos.6.x86_64
...省略...
Dependency Updated:
audit.x86_64 0:2.8.5-4.el7 audit-libs.x86_64 0:2.8.5-4.el7
libselinux.x86_64 0:2.5-15.el7 libselinux-python.x86_64 0:2.5-15.el7
libselinux-utils.x86_64 0:2.5-15.el7 libsemanage.x86_64 0:2.5-14.el7
libsepol.x86_64 0:2.5-10.el7 policycoreutils.x86_64 0:2.5-34.el7
Complete!
编辑/etc/cloud/cloud.cfg配置文件,在cloud_init_modules下添加以下内容
#添加内容
- resolv-conf
#最终配置文件效果
[root@local ~]# vi /etc/cloud/cloud.cfg
[root@local ~]# cat /etc/cloud/cloud.cfg
users:
- default
disable_root: 1
ssh_pwauth: 0
mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2']
resize_rootfs_tmp: /dev
ssh_deletekeys: 1
ssh_genkeytypes: ~
syslog_fix_perms: ~
disable_vmware_customization: false
cloud_init_modules:
- disk_setup
- migrator
- bootcmd
- write-files
- growpart
- resizefs
- set_hostname
- update_hostname
- update_etc_hosts
- rsyslog
- users-groups
- ssh
- resolv-conf
cloud_config_modules:
- mounts
- locale
- set-passwords
- rh_subscription
- yum-add-repo
- package-update-upgrade-install
- timezone
- puppet
- chef
- salt-minion
- mcollective
- disable-ec2-metadata
- runcmd
cloud_final_modules:
- rightscale_userdata
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- scripts-user
- ssh-authkey-fingerprints
- keys-to-console
- phone-home
- final-message
- power-state-change
system_info:
default_user:
name: centos
lock_passwd: true
gecos: Cloud User
groups: [adm, systemd-journal]
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
shell: /bin/bash
distro: rhel
paths:
cloud_dir: /var/lib/cloud
templates_dir: /etc/cloud/templates
ssh_svcname: sshd
# vim:syntax=yaml
编辑 /etc/sysconfig/network 配置文件,使其包含以下内容,避免访问 EC2 元数据服务时出现问题。
#添加内容
NOZEROCONF=yes
#最终配置文件效果
[root@local ~]# vi /etc/sysconfig/network
[root@local ~]# cat /etc/sysconfig/network
#Created by anaconda
NOZEROCONF=yes
编辑 /etc/default/grub 配置文件,使其包含以下引导选项内容,为了确保控制台的信息出现在 dashboard 的日志标签页中,以及 nova console-log 日志的输出内容中。
#添加内容
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
#最终配置文件效果
[root@local ~]# vi /etc/default/grub
[root@local ~]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
GRUB_DISABLE_RECOVERY="true"
#执行命令使参数生效
[root@local ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-c515a8f65bf14e138d99b2c451179327
Found initrd image: /boot/initramfs-0-rescue-c515a8f65bf14e138d99b2c451179327.img
done
[root@local ~]# init 0
注意:以下步骤在虚机中操作,不是kvm 虚机,概念分不清?参考第一部分约定
[root@cloudcs ~]# virsh list --all
Id Name State
----------------------------------------------------
- centos shut off
[root@cloudcs ~]# virt-sysprep -d centos
#输出
[ 0.0] Examining the guest ...
[ 25.4] Performing "abrt-data" ...
[ 25.4] Performing "backup-files" ...
[ 26.3] Performing "bash-history" ...
[ 26.4] Performing "blkid-tab" ...
[ 26.4] Performing "crash-data" ...
[ 26.4] Performing "cron-spool" ...
[ 26.4] Performing "dhcp-client-state" ...
[ 26.4] Performing "dhcp-server-state" ...
[ 26.4] Performing "dovecot-data" ...
[ 26.4] Performing "logfiles" ...
[ 26.5] Performing "machine-id" ...
[ 26.5] Performing "mail-spool" ...
[ 26.5] Performing "net-hostname" ...
[ 26.5] Performing "net-hwaddr" ...
[ 26.5] Performing "pacct-log" ...
[ 26.5] Performing "package-manager-cache" ...
[ 26.5] Performing "pam-data" ...
[ 26.5] Performing "passwd-backups" ...
[ 26.5] Performing "puppet-data-log" ...
[ 26.6] Performing "rh-subscription-manager" ...
[ 26.6] Performing "rhn-systemid" ...
[ 26.6] Performing "rpm-db" ...
[ 26.6] Performing "samba-db-log" ...
[ 26.6] Performing "script" ...
[ 26.6] Performing "smolt-uuid" ...
[ 26.6] Performing "ssh-hostkeys" ...
[ 26.6] Performing "ssh-userdir" ...
[ 26.6] Performing "sssd-db-log" ...
[ 26.6] Performing "tmp-files" ...
[ 26.6] Performing "udev-persistent-net" ...
[ 26.6] Performing "utmp" ...
[ 26.6] Performing "yum-uuid" ...
[ 26.6] Performing "customize" ...
[ 26.6] Setting a random seed
[ 26.6] Setting the machine ID in /etc/machine-id
[ 26.7] Performing "lvm-uuids" ...
#查找 centos 实例对应的磁盘文件
[root@cloudcs ~]# virsh domblklist centos
Target Source
------------------------------------------------
vda /soft/disk/centos7.qcow2
hda -
#创建并清理压缩镜像
[root@cloudcs ~]# virt-sparsify --compress /soft/disk/centos7.qcow2 /tmp/centos-cloud.qcow2
#输出
[ 0.0] Create overlay file in /tmp to protect source disk
[ 0.1] Examine source disk
100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[ 13.6] Fill free space in /dev/centos/root with zero
100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[ 31.5] Clearing Linux swap on /dev/centos/swap
[ 33.3] Fill free space in /dev/sda1 with zero
[ 40.9] Copy to destination and make sparse
[ 101.4] Sparsify operation completed with no errors.
virt-sparsify: Before deleting the old disk, carefully check that the
target disk boots and works correctly.
将镜像centos-cloud.qcow2注册到OpenStack平台,以下为图形化注册演示,命令行注册请参考博文 G020-OP-INS-RHEL-02 RedHat OpenStack 发放云主机(命令行)
开启添加 ROOT 密码后,可通过命令行或 WebUI 界面进行 root 密码自定义
在/etc/openstack-dashboard/local_settings文件中,把can_set_password参数的值设为True
[root@controller ~]# vim /etc/openstack-dashboard/local_settings
...
'can_set_password': True
...
在/etc/nova/nova.conf文件中,把inject_password参数的值设为True
[root@controller ~]# vim /etc/nova/nova.conf
...
inject_password=true
...
重启服务
[root@controller ~]# systemctl restart openstack-nova-compute.service
[root@controller ~]# systemctl restart httpd.service
在计算节点上的/etc/nova/nova.conf文件中,把inject_password参数的值设为True
[root@compute ~]# vim /etc/nova/nova.conf
...
inject_password=true
...
重启服务
[root@compute ~]# systemctl restart openstack-nova-compute.service
注意:网络及路由请参考 G020 创建,务必保证路由及网关存在,否则无法获取到客户自定义主机名
观察启动流程及尝试登录,测试镜像正确无误
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些
有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b
Heroku支持人员告诉我,为了在我的Web应用程序中使用自定义字体(未安装在系统中,您可以在bash控制台中使用fc-list查看已安装的字体)我必须部署一个包含所有字体的.fonts文件夹里面的字体。问题是我不知道该怎么做。我的意思是,我不知道文件名是否必须遵循heroku的任何特殊模式,或者我必须在我的代码中做一些事情来考虑这种字体,或者如果我将它包含在文件夹中它是自动的......事实是,我尝试以不同的方式更改字体的文件名,但根本没有使用该字体。为了提供更多详细信息,我们使用字体的过程是将PDF转换为图像,更具体地说,使用rghostgem。并且最终图像根本不使用自定义字体。在
我正在使用Heroku(heroku.com)来部署我的Rails应用程序,并且正在构建一个iPhone客户端来与之交互。我的目的是将手机的唯一设备标识符作为HTTPheader传递给应用程序以进行身份验证。当我在本地测试时,我的header通过得很好,但在Heroku上它似乎去掉了我的自定义header。我用ruby脚本验证:url=URI.parse('http://#{myapp}.heroku.com/')#url=URI.parse('http://localhost:3000/')req=Net::HTTP::Post.new(url.path)#boguspara
这是我在ActiveAdmin中的自定义页面ActiveAdmin.register_page"Settings"doaction_itemdolink_to('Importprojects','settings/importprojects')endcontentdopara"Text"endcontrollerdodefimportprojectssystem"rakedataspider:import_projects_ninja"para"OK"endendend我想做的是,当我单击“导入项目”按钮时,我想在Controller中执行rake任务。但是我无法访问该方法。可能是什
有没有办法在Rails中为确认字段自定义消息?例如在设计中我必须输入密码和password_confirmation并且错误消息是:Passwordconfirmationdoesn'tmatchPassword我可以更改事件记录语言环境消息(“不匹配”),但它会在该语言环境消息的开头和结尾输出密码确认和密码,所以我得到如下内容:"PasswordconfirmationmustmatchPassword"有没有办法将其更改为不同的字符串?PasswordconfirmationandPasswordmustmatch.编辑另一件事是拥有完全自定义的消息,例如:'Setpassword