我有一个配置了一个从整个磁盘设备创建的 ZFS 池的 FreeBSD 文件服务器。也就是说,池是这样创建的:
zpool create pool0 raidz ada0 ada1 ada2
Run Code Online (Sandbox Code Playgroud)
这意味着磁盘具有 ZFS 磁盘标签,而不是 FreeBSD 磁盘标签。这是将磁盘与 ZFS 一起使用的推荐方法:
ZFS 可以使用单独的片或分区,但推荐的操作模式是使用整个磁盘。[来自
zpool(1M)]
像这样格式化磁盘可以最大限度地提高文件系统在各种 ZFS 实现之间的可移植性。不幸的是,这意味着没有地方可以放置freebsd-boot包含 FreeBSD 加载程序的分区......或者至少,我认为这就是它的意思,但我正在寻找确认。
系统当前从包含嵌入式加载程序(以及/boot目录,尽管它可以存在于 ZFS 中)的 CF 卡启动。这工作得很好,但我很好奇 - 有没有办法将嵌入式加载程序安装到 ZFS 标记的磁盘上?
编辑:我一直试图自己回答这个问题。我想也许我可以非破坏性地将 GPT 标签应用到 ZFS 磁盘,然后尝试嵌入引导代码——但是虽然 GPT 标签不会导致 ZFS 出现问题,但 ZFS 似乎以某种方式在标签上进行了践踏。所以这里有一个不同的问题:OpenSolaris 是否支持 GPT 磁盘标签?这里的最终目标是拥有一个可以在 FreeBSD 和 OpenSolaris 下运行的磁盘池,同时能够从它引导到 FreeBSD。
昨天错误配置了交换机端口后,我很好奇:在什么情况下您会在交换机端口上配置未标记的 VLAN,而不将PVID 设置为同一 VLAN?
在我使用过的所有交换机上,这两个值都是单独配置的(其中 VLAN 标记主要是出口配置,PVID 是入口设置),但如果它们不匹配,则似乎配置已损坏。
我编写了一个自定义 Puppet 事实,需要biosdevname安装该工具。我不确定如何正确设置以便在因子尝试实例化自定义事实之前安装此工具。
Facts 是在这个过程的早期加载的,所以我不能简单地把 apackage { biosdevname: ensure => installed }放在 manifest 中,因为当 Puppet 到达这里的时候,自定义的 fact 已经失败了。
我很好奇我是否可以通过 Puppet 的运行阶段解决这个问题。我试过:
stage { pre: before => Stage[main] }
class { biosdevname: stage => pre }
Run Code Online (Sandbox Code Playgroud)
和:
class biosdevname {
package { biosdevname: ensure => installed }
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用...... Puppet 在进入pre舞台之前加载事实:
info: Loading facts in physical_network_config
./physical_network_config.rb:33: command not found: biosdevname -i eth0
info: Applying configuration version '1320248045'
notice: /Stage[pre]/Biosdevname/Package[biosdevname]/ensure: created …Run Code Online (Sandbox Code Playgroud) 我们使用 Puppet 来管理 OpenStack 安装。OpenStack 由许多松散连接的部分组成,所有部分都通过 AMQP 进行通信。几个部分使用一个通用配置文件 ( /etc/nova/nova.conf),因此典型的服务资源如下所示:
service { 'openstack-nova-network':
ensure => running,
enable => true,
subscribe => File['/etc/nova/nova.conf'],
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好。
现在我们使用 Puppet 来安装一些底层 Python 代码的修补程序。当我们替换 Python 源文件之一时,我们希望重新启动使用它的服务。通常,这与订阅的服务集完全相同
/etc/nova/nova.conf。
我希望我可以通过通知文件来利用现有的依赖项来做到这一点,就像这样......
file { '/path/to/some/file':
source => 'puppet:///.../',
notify => File['/etc/nova/nova.conf'],
}
Run Code Online (Sandbox Code Playgroud)
...但这似乎不起作用。除了notify为每个服务输入显式
条目之外,还有更好的方法来做到这一点吗?
更新
你知道,我开始怀疑我的问题并不完全清楚。我想为造成的混乱道歉,并尽量让我的要求更明确一点:
我意识到我可以使用一组显式依赖项来做到这一点,无论是作为subscribe服务的notify值还是已安装文件的值。问题是这意味着维护一个 M*N 的依赖矩阵。引入新文件意味着:
service资源,或file资源这种重复的复制粘贴工作很容易出错,尤其是当多人负责配置时。
一种选择是维护一个中央服务列表:
$services = [ service1, service2, service ]
Run Code Online (Sandbox Code Playgroud)
因为那时我可以这样做:
file { '/usr/lib/python/glance/notifier/notify_qpid.py':
notify => …Run Code Online (Sandbox Code Playgroud) 我正在尝试上传磁盘映像以在 Azure 云平台上使用。我一直在按照这些说明进行操作,但是调整图像大小给我带来了困难。
我从 qcow2 图像开始:
$ qemu-img info --output=json myimage.qcow2
{
"virtual-size": 8589934592,
"filename": "myimage.qcow2",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 1468272640,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "0.10",
"refcount-bits": 16
}
},
"dirty-flag": false
}
Run Code Online (Sandbox Code Playgroud)
我将此图像转换为原始磁盘:
$ qemu-img convert -f qcow2 -O raw myimage.qcow2 myimage.img
Run Code Online (Sandbox Code Playgroud)
然后,按照说明,我将 的大小四舍五入到偶数兆字节:
$ MB=$((1024 * 1024))
$ size=$(qemu-img info -f raw --output json "$1" |
gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
$ rounded_size=$((($size/$MB + 1) * $MB))
$ echo $rounded_size …Run Code Online (Sandbox Code Playgroud) 我安装了 CentOS 5.5,默认的 php 包是 5.1.6。我想安装5.2.9,所以我添加了/etc/yum.repo.d/CentOS-Testing.repo
[c5-testing]
name=CentOS-5 Testing
baseurl=http://dev.centos.org/centos/$releasever/testing/$basearch/
enabled=0
gpgcheck=1
gpgkey=http://dev.centos.org/centos/RPM-GPG-KEY-CentOS-testing
Run Code Online (Sandbox Code Playgroud)
php-5.2.9-2.el5.centos.x86_64.rpm可用http://dev.centos.org/centos/5/testing/x86_64/RPMS/
所以我试过:yum clean all,yum search php-5.2.9-2.el5.centos.x86_64.rpm --> 警告:找不到匹配项:php-5.2.9-2.el5.centos.x86_64.rpm
我做错了什么?谢谢你的帮助。
我有一个非常简单的 Puppet(子)模块,它应该使用 Git 从远程位置克隆存储库:
class wppuppet::git(
$location = '/var/www/wp'
) {
file { $location:
ensure => 'directory',
mode => '0755',
}
exec { 'git-wp':
command => 'git clone https://github.com/WordPress/WordPress ${location}',
require => Package['git'],
}
Package['git']
-> File[ $location ]
-> Exec['git-wp']
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它经常失败并出现以下错误:
Error: git clone https://github.com/WordPress/WordPress ${location} returned 128 instead of one of [0]
Error: /Stage[main]/Wppuppet::Git/Exec[git-wp]/returns: change from notrun to 0 failed:
git clone https://github.com/WordPress/WordPress ${location} returned 128 instead one of [0]
Run Code Online (Sandbox Code Playgroud)
我用${location}和尝试过$location,但结果保持不变。