AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-27515

larsks's questions

Martin Hope
larsks
Asked: 2025-03-20 03:36:05 +0800 CST

Terraform 中条件块内的条件块

  • 5

我正在使用 Terraform 来管理 Github 组织。我们有一个标准的“通用存储库”模块,用于确保我们的存储库共享通用配置。我想添加对配置 GitHub 页面的支持,这需要对pages元素的支持,如下所示:

  pages {
    build_type = "legacy"
    cname = "example.com"
    source {
      branch = "master"
      path   = "/docs"
    }
  }

一切都是可选的。特别是,source只有在 时才是必需的build_type == "legacy" || build_type == null,整个pages块可以省略。我不知道如何进行source条件化,所以我最终将其拆分成两个dynamic块,如下所示:

  # There are two `dynamic "pages"` blocks here to account for the fact that `source` is only required
  # if `build_type` is "legacy". The `for_each` at the top of each block will only enable the block when
  # the necessary conditions are met.
  dynamic "pages" {

    # enable this block if `pages` is not null and `build_type` is "legacy" (or null)
    for_each = var.pages == null ? [] : var.pages.build_type == "legacy" || var.pages.build_type == null ? ["enabled"] : []

    content {
      source {
        branch = var.pages.source.branch
        path   = var.pages.source.path
      }

      cname      = var.pages.cname
      build_type = var.pages.build_type
    }
  }

  dynamic "pages" {

    # enable this block if `pages` is not null and `build_type` is "workflow"
    for_each = var.pages == null ? [] : var.pages.build_type == "workflow" ? ["enabled"] : []

    content {
      cname      = var.pages.cname
      build_type = var.pages.build_type
    }
  }

pages我在模块中定义变量如下:

variable "pages" {
  description = "Configuration for github pages"
  type = object({
    source = optional(object({
      branch = string
      path   = string
    }))
    build_type = optional(string, "legacy")
    cname      = optional(string)
  })
  default = null
}

有没有更好的方法来解决这个问题?

terraform
  • 1 个回答
  • 20 Views
Martin Hope
larsks
Asked: 2022-10-01 08:27:31 +0800 CST

为什么 argocd 不断重新同步我的作业?

  • 1

我正在使用 ArgoCD部署应用程序。部署清单包括一个为应用程序执行一些一次性初始化的作业。Job 资源如下所示:

apiVersion: batch/v1
kind: Job
metadata:
  labels:
    app.kubernetes.io/instance: house
    app.kubernetes.io/name: step-certificates
  name: create-acme-provisioner
  namespace: step-certificates
spec:
  backoffLimit: 100
  template:
    metadata:
      labels:
        app.kubernetes.io/instance: house
        app.kubernetes.io/name: step-certificates
    spec:
      containers:
      - command:
        - /bin/bash
        - -c
        - |
          while ! step ca health; do
            echo "waiting for ca"
            sleep 1
          done

          if ! step ca provisioner list | grep -q '"name": "acme"'; then
            step ca provisioner add acme --type ACME \
              --admin-subject step \
              --password-file /home/step/secrets/passwords/password \
              --admin-provisioner "Admin JWK"
          fi
        image: cr.step.sm/smallstep/step-ca:0.22.1
        name: create-acme-provisioner
        volumeMounts:
        - mountPath: /home/step/certs
          name: certs
          readOnly: true
        - mountPath: /home/step/config
          name: config
          readOnly: true
        - mountPath: /home/step/secrets
          name: secrets
          readOnly: true
        - mountPath: /home/step/secrets/passwords
          name: ca-password
          readOnly: true
      restartPolicy: Never
      securityContext:
        fsGroup: 1000
        runAsGroup: 1000
        runAsNonRoot: true
        runAsUser: 1000
      volumes:
      - configMap:
          name: step-certificates-certs
        name: certs
      - configMap:
          name: step-certificates-config
        name: config
      - name: secrets
        secret:
          secretName: step-certificates-secrets
      - name: ca-password
        secret:
          secretName: step-certificates-ca-password
  ttlSecondsAfterFinished: 60

它按预期工作——在主应用程序启动时它会失败几次,但随后它会运行,一切看起来都很好:

$ kubectl get pods
NAME                            READY   STATUS      RESTARTS   AGE
create-acme-provisioner-7zhp2   0/1     Completed   0          12s
step-certificates-0             2/2     Running     0          54m
$ kubectl get jobs
NAME                      COMPLETIONS   DURATION   AGE
create-acme-provisioner   1/1           3s         20s

问题是 ArgoCD 不断重新同步作业资源。每分钟,所以作业再次运行......再次......等等。来自 argocd-application-controller pod 的日志如下所示:

time="2022-09-30T16:20:42Z" level=info msg="Initialized new operation: {&SyncOperation{Revision:114442fcfb789190cfb9e7353a636369e7113c01,Prune:true,DryRun:false,SyncStrategy:nil,Resources:[]SyncOperationResource{SyncOperationResource{Group:batch,Kind:Job,Name:create-acme-provisioner,Namespace:,},},Source:nil,Manifests:[],SyncOptions:[CreateNamespace=true],} { true} [] {-1 &Backoff{Duration:30s,Factor:*2,MaxDuration:10m,}}}" application=step-certificates-infra
time="2022-09-30T16:20:42Z" level=info msg="Tasks (dry-run)" application=step-certificates-infra syncId=00259-Dpgma tasks="[Sync/0 resource batch/Job:step-certificates/create-acme-provisioner nil->obj (,,)]"
time="2022-09-30T16:20:42Z" level=info msg="Applying resource Job/create-acme-provisioner in cluster: https://10.96.0.1:443, namespace: step-certificates"
time="2022-09-30T16:20:42Z" level=info msg="Applying resource Job/create-acme-provisioner in cluster: https://10.96.0.1:443, namespace: step-certificates"
time="2022-09-30T16:20:42Z" level=info msg="Adding resource result, status: 'Synced', phase: 'Running', message: 'job.batch/create-acme-provisioner created'" application=step-certificates-infra kind=Job name=create-acme-provisioner namespace=step-certificates phase=Sync syncId=00259-Dpgma
time="2022-09-30T16:21:45Z" level=info msg="Initialized new operation: {&SyncOperation{Revision:114442fcfb789190cfb9e7353a636369e7113c01,Prune:true,DryRun:false,SyncStrategy:nil,Resources:[]SyncOperationResource{SyncOperationResource{Group:batch,Kind:Job,Name:create-acme-provisioner,Namespace:,},},Source:nil,Manifests:[],SyncOptions:[CreateNamespace=true],} { true} [] {-1 &Backoff{Duration:30s,Factor:*2,MaxDuration:10m,}}}" application=step-certificates-infra
time="2022-09-30T16:21:45Z" level=info msg="Tasks (dry-run)" application=step-certificates-infra syncId=00260-KsLXq tasks="[Sync/0 resource batch/Job:step-certificates/create-acme-provisioner nil->obj (,,)]"
time="2022-09-30T16:21:45Z" level=info msg="Applying resource Job/create-acme-provisioner in cluster: https://10.96.0.1:443, namespace: step-certificates"
time="2022-09-30T16:21:45Z" level=info msg="Applying resource Job/create-acme-provisioner in cluster: https://10.96.0.1:443, namespace: step-certificates"
time="2022-09-30T16:21:45Z" level=info msg="Adding resource result, status: 'Synced', phase: 'Running', message: 'job.batch/create-acme-provisioner created'" application=step-certificates-infra kind=Job name=create-acme-provisioner namespace=step-certificates phase=Sync syncId=00260-KsLXq
time="2022-09-30T16:22:49Z" level=info msg="Initialized new operation: {&SyncOperation{Revision:114442fcfb789190cfb9e7353a636369e7113c01,Prune:true,DryRun:false,SyncStrategy:nil,Resources:[]SyncOperationResource{SyncOperationResource{Group:batch,Kind:Job,Name:create-acme-provisioner,Namespace:,},},Source:nil,Manifests:[],SyncOptions:[CreateNamespace=true],} { true} [] {-1 &Backoff{Duration:30s,Factor:*2,MaxDuration:10m,}}}" application=step-certificates-infra
time="2022-09-30T16:22:49Z" level=info msg="Tasks (dry-run)" application=step-certificates-infra syncId=00261-itFqU tasks="[Sync/0 resource batch/Job:step-certificates/create-acme-provisioner nil->obj (,,)]"
time="2022-09-30T16:22:49Z" level=info msg="Applying resource Job/create-acme-provisioner in cluster: https://10.96.0.1:443, namespace: step-certificates"
time="2022-09-30T16:22:49Z" level=info msg="Applying resource Job/create-acme-provisioner in cluster: https://10.96.0.1:443, namespace: step-certificates"
time="2022-09-30T16:22:49Z" level=info msg="Adding resource result, status: 'Synced', phase: 'Running', message: 'job.batch/create-acme-provisioner created'" application=step-certificates-infra kind=Job name=create-acme-provisioner namespace=step-certificates phase=Sync syncId=00261-itFqU

为什么 ArgoCD 重新同步此资源,我如何让它停止?

kubernetes
  • 1 个回答
  • 29 Views
Martin Hope
larsks
Asked: 2020-11-29 05:21:50 +0800 CST

为什么未标记的 VLAN 与端口 PVID 分开配置?

  • 2

昨天错误配置交换机端口后,我很好奇:在什么情况下,您会在交换机端口上配置未标记的 VLAN,而不将 PVID 设置为同一个 VLAN?

在我使用过的所有交换机上,这两个值都是单独配置的(其中 VLAN 标记主要是出口配置,而 PVID 是入口设置),但如果它们不匹配,您的配置似乎已损坏。

networking vlan switch
  • 1 个回答
  • 2598 Views
Martin Hope
larsks
Asked: 2020-10-13 07:45:42 +0800 CST

尝试从客户端到客户端而不是客户端到服务器进行通信时,wireguard“需要目标地址”

  • 2

我有一个简单的wireguard 网络,由一个“服务器”(唯一具有外部可路由IP 地址的设备)和两个客户端组成。服务器和客户端之间的通信似乎工作得很好:从服务器,我可以使用它们的线保护地址访问客户端,并且我可以访问客户端“后面”的地址。同样,我可以从客户端访问服务器的wireguard 地址。

不起作用的是客户端到客户端的通信。如果我从一个客户端尝试ping使用其wireguard ip地址到另一个客户端,则ping失败并显示:

From 192.168.64.10 icmp_seq=1 Destination Host Unreachable
ping: sendmsg: Destination address required

此外,该ping尝试不会导致客户端和服务器之间的任何 UDP 流量。

我在下面包含了我的wireguard配置。

VPN 节点

在所有节点上:

  • net.ipv4.ip_forward是1
  • FORWARD餐桌上没有限制
  • 我不用来wg-quick调出vpn。我正在使用包含在这篇文章底部的 shell 脚本。

服务器

# ip addr show wg0
39: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.64.1/24 scope global wg0
       valid_lft forever preferred_lft forever
# ip route show | grep wg0
10.0.0.0/8 dev wg0 scope link
192.168.1.0/24 dev wg0 scope link
192.168.11.0/24 dev wg0 scope link
192.168.13.0/24 dev wg0 scope link
192.168.64.0/24 dev wg0 proto kernel scope link src 192.168.64.1
[Interface]
PrivateKey = <secret key>
ListenPort = 50001

[Peer]
PublicKey = 1cML7...
AllowedIps = 192.168.1.0/24, 192.168.11.0/24, 192.168.13.0/24, 192.168.64.10/32
PersistentKeepalive = 30

[Peer]
PublicKey = mRjd9...
AllowedIps = 10.0.0.0/8, 192.168.64.11/32
PersistentKeepalive = 30

客户 1

# ip addr show wg0
33: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.64.10/24 scope global wg0
       valid_lft forever preferred_lft forever
# ip route | grep wg0
10.0.0.0/8 dev wg0 scope link
192.168.64.0/24 dev wg0 proto kernel scope link src 192.168.64.10
[Interface]
PrivateKey = <secret key>
ListenPort = 50001

[Peer]
PublicKey = 2VtQ/...
Endpoint = wg.example.com:50001
AllowedIps = 0.0.0.0/0, 192.168.64.1/32
PersistentKeepalive = 30

[Peer]
PublicKey = mRjd9...
AllowedIps = 10.0.0.0/8, 192.168.64.11/32
PersistentKeepalive = 30

客户 2

# ip addr show wg0
11: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.64.11/24 scope global wg0
       valid_lft forever preferred_lft forever
# ip route show | grep wg0
192.168.1.0/24 dev wg0 scope link
192.168.11.0/24 dev wg0 scope link
192.168.13.0/24 dev wg0 scope link
192.168.64.0/24 dev wg0 proto kernel scope link src 192.168.64.11
[Interface]
PrivateKey = <secret key>
ListenPort = 50001

[Peer]
PublicKey = 2VtQ/...
Endpoint = wg.example.com:50001
AllowedIps = 0.0.0.0/0, 192.168.64.1/32
PersistentKeepalive = 30

[Peer]
PublicKey = 1cML7...
AllowedIps = 192.168.1.0/24, 192.168.11.0/24, 192.168.13.0/24, 192.168.64.10/32
PersistentKeepalive = 30

接口配置脚本

节点上的wg0接口使用以下脚本配置:

#!/bin/sh

dev=$1
addr=$2

ip link add $dev type wireguard
ip addr add $addr dev $dev

wg setconf $dev /etc/wireguard/$dev.conf

ip link set $dev  up
vpn firewall wireguard
  • 1 个回答
  • 10869 Views
Martin Hope
larsks
Asked: 2020-04-02 11:32:02 +0800 CST

Kibana 和 Logstash:什么时候字段不是字段?

  • 0

我已经grok在我们的 logstash 配置中启用了过滤器,以便使用%{HAPROXYHTTP}and%{HAPROXYTCP}模式解析来自 HAProxy 的日志。这似乎工作得很好,从 haproxy 查看任何日志条目的详细信息,我可以看到各种提取的字段(bytes_read、client_ip、client_port、termination_state、actconn、feconn 等)。

但是在 Kibana 的“创建新的可视化”屏幕中,配置 Y 轴时,“字段”弹出窗口中没有这些字段可用。

我需要做什么才能使这些提取的字段可用于可视化?

elasticsearch kibana logstash
  • 2 个回答
  • 219 Views
Martin Hope
larsks
Asked: 2020-03-06 03:49:56 +0800 CST

Promethius、group_left 和“on”与“ignoring”

  • 1

在Issue #2204中,Prometheus 开发人员之一说:

...原则上,您应该倾向于ignoring生成on通用的可共享规则...

我很困惑如何使用ignoring会导致更通用的规则。例如,考虑一种情况,我们有一个设备的“信息”指标和几个统计信息,如下所示:

device_info{id="1", owner="coyote", project="acme"}
device_rx_bytes{id="1"}
device_tx_bytes{id="1"}
device_rx_errors{id="1"}
device_tx_errors{id="1"}

如果我想按项目获得接收率,我需要将device_rx_bytes指标与相应的device_info指标相关联。对我来说,这闻起来像一个 SQL 连接,我会写:

rate(device_rx_bytes[5m]) * on(id) group_left(project) device_info

这似乎是“通用的”,因为它只对用于分组id的标签 ( ) 和我们想要传播到结果的标签( ) 做出假设project。如果我正确理解了ignoring运算符,则相应的表达式会更复杂,因为我需要从右侧列出左侧不存在的所有标签。就像是:

rate(device_rx_bytes[5m]) * ignoring(owner, project) group_left(project) device_info

那是对的吗?如果是,为什么ignoring优先于on(不仅在上面的引用中,而且在各种文档和示例中)?

monitoring prometheus
  • 1 个回答
  • 5597 Views
Martin Hope
larsks
Asked: 2020-03-03 06:31:44 +0800 CST

prometheus 指标是否具有某种“新鲜度”生命周期?

  • 4

我每 15 分钟抓取一些指标(openstack cinder 卷大小),结果会产生一个不连续的图表,如下所示:

在此处输入图像描述

(这是简单查询的结果cinder_volume_size_gb)。

指标“存在”大约五分钟,然后消失,直到下一个抓取间隔。哪些配置设置会影响此行为?

metrics prometheus openstack
  • 1 个回答
  • 1257 Views
Martin Hope
larsks
Asked: 2019-12-12 08:17:38 +0800 CST

使用 OVN 设置 DHCP

  • 2

我正在尝试设置一个类似于此处描述的环境,其中 OVN 将为逻辑网络提供 DHCP 服务。

我有一个名为 `net0 的逻辑交换机,有两个端口:

[root@ovn0 ~]# ovn-nbctl show
[root@ovn0 ~]# ovn-nbctl show
switch 0507d649-0730-4fdc-95cd-943b25e613ab (net0
    port port2
        addresses: ["c0:ff:ee:00:00:12 10.0.0.12"]
    port port1
        addresses: ["c0:ff:ee:00:00:11 10.0.0.11"]

这些端口绑定在两个名为ovn1and的机箱上ovn2:

[root@ovn0 ~]# ovn-sbctl show
Chassis ovn0
    hostname: ovn0.virt
    Encap geneve
        ip: "192.168.122.80"
        options: {csum="true"}
Chassis ovn1
    hostname: ovn1.virt
    Encap geneve
        ip: "192.168.122.99"
        options: {csum="true"}
    Port_Binding port1
Chassis ovn2
    hostname: ovn2.virt
    Encap geneve
        ip: "192.168.122.109"
        options: {csum="true"}
    Port_Binding port2

On ovn1,port1是br-int开关的一部分:

[root@ovn1 ~]# ovs-vsctl list-ports br-int
ovn-ovn0-0
ovn-ovn2-0
port1

它有适当的iface-id:

[root@ovn1 ~]# ovs-vsctl  list interface port1 |egrep -v '\[]|{}'
_uuid               : 63101ec6-be8c-4df7-bdab-e43f8bc4f7f9
admin_state         : up
external_ids        : {iface-id="port1"}
ifindex             : 0
ingress_policing_burst: 0
ingress_policing_rate: 0
link_resets         : 1
link_state          : up
mac                 : "c0:ff:ee:00:00:11"
mac_in_use          : "c0:ff:ee:00:00:11"
mtu                 : 1500
name                : "port1"
ofport              : 2
statistics          : {collisions=0, rx_bytes=0, rx_crc_err=0, rx_dropped=0, rx_errors=0, rx_frame_err=0, rx_over_err=0, rx_packets=0, tx_bytes=3672, tx_dropped=0, tx_errors=0, tx_packets=20}
status              : {driver_name=openvswitch}
type                : internal

我已经在该端口上配置了 dhcp 选项:

[root@ovn0 ~]# ovn-nbctl lsp-get-dhcpv4-options port1
29f9e321-93d1-4974-8cd7-7f65ad376f51 (10.0.0.0/24)

哪个地图:

[root@ovn0 ~]# ovn-nbctl list dhcp_options
_uuid               : 29f9e321-93d1-4974-8cd7-7f65ad376f51
cidr                : "10.0.0.0/24"
external_ids        : {}
options             : {lease_time="3600", router="10.0.0.1", server_id="10.0.0.1"}

On ovn1,port1已添加到名为 的网络命名空间中vm1:

[root@ovn1 ~]# ip netns exec vm1 ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: port1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether c0:ff:ee:00:00:11 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::2c8b:65ff:fe00:4/64 scope link
       valid_lft forever preferred_lft forever

MAC 地址与之前在逻辑端口数据库中配置的 MAC 地址相匹配。

如果我在该网络命名空间中针对 port1 运行 dhcp 客户端,它永远不会得到回复:

[root@ovn1 ~]# ip netns exec vm1 dhclient -d port1
Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/port1/c0:ff:ee:00:00:11
Sending on   LPF/port1/c0:ff:ee:00:00:11
Sending on   Socket/fallback
DHCPDISCOVER on port1 to 255.255.255.255 port 67 interval 7 (xid=0x75a05a70)
DHCPDISCOVER on port1 to 255.255.255.255 port 67 interval 21 (xid=0x75a05a70)
.
.
.
No DHCPOFFERS received.

让 OVN 响应此端口上的 DHCP 请求还需要什么?

更新 1

ovn-trace建议 dhcp 请求只是广播出所有接口:

[root@ovn0 ~]# ovn-trace net0 'inport=="port1" && eth.src==c0:ff:ee:00:00:11 && ip4.src==0.0.0.0 && eth.dst==ff:ff:ff:ff:ff:ff && ip4.dst==255.255.255.255 && udp.src==68 && udp.dst==67'
# udp,reg14=0x2,vlan_tci=0x0000,dl_src=c0:ff:ee:00:00:11,dl_dst=ff:ff:ff:ff:ff:ff,nw_src=0.0.0.0,nw_dst=255.255.255.255,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=68,tp_dst=67

ingress(dp="net0", inport="port1")
----------------------------------
 0. ls_in_port_sec_l2 (ovn-northd.c:4028): inport == "port1" && eth.src == {c0:ff:ee:00:00:11}, priority 50, uuid e155c87e
    next;
 1. ls_in_port_sec_ip (ovn-northd.c:3642): inport == "port1" && eth.src == c0:ff:ee:00:00:11 && ip4.src == 0.0.0.0 && ip4.dst == 255.255.255.255 && udp.src == 68 && udp.dst == 67, priority 90, uuid 5548c089
    next;
17. ls_in_l2_lkup (ovn-northd.c:5678): eth.mcast, priority 70, uuid 51b48b77
    outport = "_MC_flood";
    output;

multicast(dp="net0", mcgroup="_MC_flood")
-----------------------------------------

    egress(dp="net0", inport="port1", outport="net0-gw")
    ----------------------------------------------------
         9. ls_out_port_sec_l2 (ovn-northd.c:4115): eth.mcast, priority 100, uuid 7db51d27
            output;
            /* output to "net0-gw", type "" */

    egress(dp="net0", inport="port1", outport="port1")
    --------------------------------------------------
            /* omitting output because inport == outport && !flags.loopback */

    egress(dp="net0", inport="port1", outport="port2")
    --------------------------------------------------
         9. ls_out_port_sec_l2 (ovn-northd.c:4115): eth.mcast, priority 100, uuid 7db51d27
            output;
            /* output to "port2", type "" */
networking
  • 1 个回答
  • 490 Views
Martin Hope
larsks
Asked: 2015-01-20 06:03:22 +0800 CST

如何自省特定挂载的“共享子树”挂载标志?

  • 5

在 Linux 下,共享子树标志控制挂载点如何与父挂载命名空间和子挂载命名空间共享。这些标志包括MS_SHARED、MS_PRIVATE和MS_SLAVE。如何查看在特定挂载点上设置了哪些标志?

这些标志不会出现在mount或 的输出中/proc/mounts。

linux
  • 1 个回答
  • 237 Views
Martin Hope
larsks
Asked: 2014-11-17 14:41:01 +0800 CST

Windows unattend.xml 文件中的 `<component>` 元素需要哪些属性?

  • 5

文件中的<component>元素unattend.xml——用于提供全自动 Windows 安装所需的信息——通常带有许多属性,例如:

<component 
  name="Microsoft-Windows-International-Core-WinPE"
  processorArchitecture="amd64"
  publicKeyToken="31bf3856ad364e35"
  language="neutral"
  versionScope="nonSxS">

<!-- ... -->

</component>

虽然name和processorArchitecture是相当不言自明的,并且language暗示它可能引入了特定于语言环境的设置,但我无法找到任何关于这些属性的任何文档。

特别是,什么是versionScope和publicKeyToken?目前它们似乎是“神奇的常数”。

windows-server-2012
  • 1 个回答
  • 1703 Views
Martin Hope
larsks
Asked: 2014-11-15 09:36:58 +0800 CST

在 KVM 上无人值守安装 Windows Server 2012

  • 5

我正在尝试使用virt-install. 安装程序抱怨,“Windows 无法<ProductKey>从无人参与的应答文件中读取设置”,我一直无法弄清楚如何在这一点之后继续进行。

我从以下autounattend.xml文件开始:

<unattend xmlns="urn:schemas-microsoft-com:unattend"
xmlns:ms="urn:schemas-microsoft-com:asm.v3"
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
  <settings pass="windowsPE">
    <component name="Microsoft-Windows-Setup"
    publicKeyToken="31bf3856ad364e35" language="neutral"
    versionScope="nonSxS" processorArchitecture="x86">
      <UserData>
        <AcceptEula>true</AcceptEula>
        <ProductKey>
          <Key>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</Key>
          <WillShowUI>OnError</WillShowUI>
        </ProductKey>
      </UserData>
      <ImageInstall>
        <OSImage>
          <WillShowUI>Never</WillShowUI>
          <InstallTo>
            <DiskID>0</DiskID>
            <PartitionID>1</PartitionID>
          </InstallTo>
          <InstallFrom>
            <MetaData>
              <Key>/IMAGE/Name</Key>
              <Value>Windows Longhorn SERVERSTANDARDCORE</Value>
            </MetaData>
          </InstallFrom>
        </OSImage>
      </ImageInstall>
    </component>
  </settings>
</unattend>

我正在使用以下方法将其烘焙到 ISO 映像中mkisofs:

$ ls config/
autounattend.xml
$ mkisofs -o config.iso -J -r config

然后我开始像这样安装:

virt-install -n ws2012 -r 2048 -w network=default,model=virtio \
  --disk path=ws2012.qcow2,device=disk,bus=virtio \
  --cdrom en_windows_server_2012_r2_with_update_x64_dvd_4065220.iso \
  --disk path=virtio-win-0.1-81.iso,device=cdrom \
  --disk path=config.iso,device=cdrom \
  --os-type windows --os-variant win2k8

查看x:\windows\panther\setupact.log,我可以看到安装程序确实找到了无人参与文件:

2014-11-14 12:29:43, Info  [0x060114] IBS
Callback_Productkey_Validate_Unattend:User specified an unattend
xml file

指定的产品密钥有效(我可以从该文件复制并粘贴到产品密钥对话框中,安装将正确进行)。

你知道如何使这个安装工作​​吗?

kvm-virtualization
  • 2 个回答
  • 4135 Views
Martin Hope
larsks
Asked: 2014-05-23 17:36:56 +0800 CST

删除一个 openvswitch 网桥上的端口会导致另一个网桥上的 MAC 地址发生变化

  • 1

我正在尝试在名为的 openvswitch 网桥上设置显式 MAC 地址br-ex。我正在运行 Fedora 20 并使用本机 ifdown/ifup命令来配置网桥(我的网络配置文件的详细信息在这个问题的底部)。

br-ex通过运行重新创建ifdown br-ex后 ifup eth0,我的 OVS 配置如下所示:

# ovs-vsctl show
1ab8ae7e-e9da-4af9-9226-03b54f5d2544
    Bridge br-int
        Port br-int
            Interface br-int
                type: internal
        Port int-br-ex
            Interface int-br-ex
        Port "tapa1747c68-d3"
            tag: 1
            Interface "tapa1747c68-d3"
                type: internal
    Bridge br-ex
        Port "eth0"
            Interface "eth0"
        Port br-ex
            Interface br-ex
                type: internal
    ovs_version: "2.0.1"

记下 MAC 地址br-ex:

# ip link show dev br-ex
80: br-ex: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default 
    link/ether fa:16:3e:ef:91:ec brd ff:ff:ff:ff:ff:ff

int-br-ex现在从中删除端口br-int,该端口不再以任何方式连接到br-ex:

# ovs-vsctl --if-exists del-port br-int int-br-ex

并注意MAC地址br-ex已经改变:

# ip link show dev br-ex
80: br-ex: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default 
    link/ether f2:2a:d3:bf:3c:47 brd ff:ff:ff:ff:ff:ff

刚才发生了什么?

网络配置

我有,在/etc/sysconfig/network-scripts:

# cat ifcfg-br-ex
DEVICE=br-ex
DEVICETYPE=ovs
TYPE=OVSBridge
ONBOOT=yes
OVSBOOTPROTO=dhcp
OVSDHCPINTERFACES=eth0
MACADDR=fa:16:3e:ef:91:ec

# cat ifcfg-eth0
DEVICE="eth0"
ONBOOT="yes"
BOOTPROTO=none
TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=br-ex

这里发生了什么?为什么MAC地址在br-ex变化?我如何让它粘住?

networking
  • 1 个回答
  • 9681 Views
Martin Hope
larsks
Asked: 2012-12-18 08:57:55 +0800 CST

使用 virtio 扫描附加的新磁盘?

  • 1

virsh attach-disk我可以使用...成功地将磁盘附加到正在运行的 KVM 实例

virsh attach-disk node-1 /dev/vg_lunsr/lun1  vdb
Disk attached successfully

...但是这些新设备在没有重启的情况下不会被访客看到,这几乎违背了动态附件的目的。如果这些是 SCSI 设备,我将使用例如/sys/class/scsi_host/host0/scan请求 SCSI 驱动程序扫描新设备。virtio 块驱动程序是否具有等效功能?

kvm-virtualization
  • 2 个回答
  • 3734 Views
Martin Hope
larsks
Asked: 2012-11-01 09:00:13 +0800 CST

Windows 2008 启动脚本不会运行?

  • 5

我正在尝试让一个非常简单的批处理脚本在我的 Windows 2008 Server (R2) 系统启动时运行。我已经通过运行将脚本添加到本地组策略中的“启动脚本” ,并且在我运行时gpedit.msc看到了下面列出的脚本,但脚本没有被执行。即使在重新启动后, “上次执行”列也是空的,并且永远不会创建应该由脚本创建的文件。Windows Settings/Scripts (Startup/Shutdown)/Startuprsop.mscrsop

目前,脚本的全部内容是:

rem Check if this script is running.
date /t > c:\temp\flag

目标目录 ( c:\temp) 存在。该脚本称为c:\scripts\startup.bat,如果我手动运行它,它可以正常工作。

windows-server-2008
  • 3 个回答
  • 9398 Views
Martin Hope
larsks
Asked: 2012-10-25 05:43:30 +0800 CST

创建一个伪终端让 sudo 开心

  • 7

我需要自动配置云实例(运行 Fedora 17),以下初始事实为真:

  • 我有基于 ssh 密钥的远程用户访问权限 ( cloud)
  • 该用户通过sudo.

手动配置就像登录和运行一样简单sudo su -,但我想完全自动化这个过程。诀窍是系统默认为requiretty启用该选项sudo,这意味着尝试执行以下操作:

ssh remotehost sudo yum -y install puppet

将失败:

sudo: sorry, you must have a tty to run sudo

我现在正在解决这个问题,首先推送一个将在伪终端上运行命令的小 Python 脚本:

import os
import sys
import errno
import subprocess

pid, master_fd = os.forkpty()

if pid == 0:
    # child process: now that we're attached to a
    # pty, run the given command.
    os.execvp(sys.argv[1], sys.argv[1:])
else:
    while True:
        try:
            data = os.read(master_fd, 1024)
        except OSError, detail:
            if detail.errno == errno.EIO:
                break

        if not data:
            break

        sys.stdout.write(data)

    os.wait()

假设这是 named pty,然后我可以运行:

ssh remotehost ./pty sudo yum -y install puppet

这工作正常,但我想知道是否有我没有考虑过的可用解决方案。

  • 我通常会考虑expect,但默认情况下它没有安装在这个系统上。
  • screen可以在紧要关头做到这一点,但我想到的最好的是:

    screen -dmS sudo somecommand
    

    ...这确实有效但会吃掉输出。

是否有任何其他可用的工具可以为我分配一个普遍可用的伪终端?

cloud
  • 1 个回答
  • 1995 Views
Martin Hope
larsks
Asked: 2012-08-17 07:10:09 +0800 CST

OpenStack:我可以将卷转换为映像吗?

  • 6

我试图找出 OpenStack 中阻力最小的路径,以从实时 CD 获取可用于部署新来宾实例的磁盘映像。

如果您从实时 CD 启动 OpenStack 实例,您可以将操作系统安装到“临时”磁盘(在这种情况下,它将是/dev/vda)...

...很好,但是无法从该磁盘创建映像;该image-create命令将尝试(并失败)对 Live CD 本身进行快照(因为这是启动卷)。

您可以创建并附加一个新卷(使用volume-create和volume-attach),然后在其上安装操作系统,但似乎没有任何方法可以将该卷转换为 Glance 托管的映像以供其他实例使用。

作为管理员,我显然可以登录到存储主机并直接从卷块设备创建一个新的 glance 图像,但这不是任何通过 API 或 Web GUI 进行交互的人都可以使用的途径。

还有其他选择吗?

virtualization
  • 4 个回答
  • 15908 Views
Martin Hope
larsks
Asked: 2012-08-03 08:48:08 +0800 CST

是否可以通知 Puppet 中的 File[] 资源并触发订阅该文件的资源?

  • 2

我们正在使用 Puppet 来管理 OpenStack 安装。OpenStack 由许多松散连接的部分组成,所有部分都通过 AMQP 进行通信。几个部分使用一个公共配置文件 ( /etc/nova/nova.conf),因此典型的服务资源如下所示:

service { 'openstack-nova-network':
  ensure    => running,
  enable    => true,
  subscribe => File['/etc/nova/nova.conf'],
}

这一切都很好。

现在我们正在使用 Puppet 为一些底层 Python 代码安装修补程序。当我们替换其中一个 Python 源文件时,我们想重新启动使用它的服务。通常,这与订阅的服务集完全相同 /etc/nova/nova.conf。

我希望我可以通过通知文件来利用现有的依赖关系,就像这样......

file { '/path/to/some/file':
  source => 'puppet:///.../',
  notify => File['/etc/nova/nova.conf'],
}

...但这似乎没有用。除了 notify为每项服务添加明确的条目外,还有更好的方法吗?

更新

你知道,我开始怀疑我的问题并不完全清楚。对于造成的混乱,我深表歉意,并尝试让我的要求更明确一点:

我意识到我可以使用一组显式依赖项来做到这一点,无论是作为subscribe服务的notify值还是已安装文件的值。问题是这意味着要维护一个 M*N 的依赖矩阵。引入新文件意味着:

  • 更新 Mservice资源,或
  • 更新 N 个file资源

这种重复复制粘贴的工作很容易出错,尤其是在多人负责配置的情况下。

一种选择是维护一个中央服务列表:

$services = [ service1, service2, service ]

因为那时我可以这样做:

file { '/usr/lib/python/glance/notifier/notify_qpid.py':
  notify => Service[$services],
}

但这行不通,因为服务列表在不同的主机上是不同的。可能我可以翻转它并维护一个“修补程序”文件列表:

$hotfix_files = [
  '/usr/lib/python2.6/site-packages/glance/notifier/notify_qpid.py',
  '/root/puppet/modules/openstack/files/nova/impl_qpid.py',
]

然后更新所有服务定义一次:

service { 'openstack-nova-network':
  ensure    => running,
  enable    => true,
  subscribe => [
    File['/etc/nova/nova.conf'],
    File[$hotfix_files],
  ]
}

但这仍然需要手动维护修改文件列表。

我真正想做的是,“通知所有订阅的服务/etc/nova/nova.conf”。

puppet
  • 3 个回答
  • 13686 Views
Martin Hope
larsks
Asked: 2012-06-21 13:34:25 +0800 CST

应用于本地目的地流量时,DNAT 和 REDIRECT 是否等效?

  • 6

在设置我们的 OpenStack 环境时,我遇到了一个问题,该问题阻止实例联系主机上运行的服务器。元数据服务(公开 HTTP API)在主机的 8775 端口上运行,OpenStack 网络代码添加以下 DNAT 规则以通过端口 80 上的特殊地址授予访问权限:

-A PREROUTING -d 169.254.169.254/32 
  -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8775 

实例通过本地桥接设备连接到主机,并169.254.169.254分配给lo.

虽然此规则成功匹配来自尝试访问的来宾实例的数据包http://169.254.168.254/,但它们永远不会到达侦听服务。

用基本等效的 REDIRECT 替换此 DNAT 规则可以使一切正常工作:

-A PREROUTING -d 169.254.169.254/32 
  -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8775 

我试图理解为什么 REDIRECT 起作用而 DNAT 失败。从 iptables 文档中不清楚该DNAT规则是否适用于本地目标流量。我希望这里有人可以提供权威的答案,最好有文档支持,或者可以建议我的配置中可能有什么问题会阻止 DNAT 规则按预期工作。

networking nat iptables openstack
  • 2 个回答
  • 2123 Views
Martin Hope
larsks
Asked: 2010-01-26 13:04:06 +0800 CST

你能推荐一个强大的 OpenAPI 2.0 提供商吗?

  • 1

帮我找到一个强大的 OpenID 2.0 提供商!

我们正在为我们的组织寻找各种 SSO 解决方案,我想建议 OpenID 作为一个可行的选择,因为 (a) 在许多 Web 应用程序中都有良好的消费者支持,并且 (b) 它比 Shibboleth 更易于实施,这是替代技术。然而,这需要我们找到一个强大的 OpenID 提供者,最好是满足 2.0 规范的提供者。

到目前为止,我遇到的唯一解决方案是:

  • 阿特拉斯人群

    这看起来很棒,尽管 4000 美元的价格标签可能很难卖。

  • 社区 ID

    这看起来是一个有趣的想法,但我不确定项目质量是否处于合适的水平(目前)。特别是,尚不清楚 LDAP 支持是否真的有效(这将是我们环境中的要求)。

您是否在您的环境中实施了 OpenID?你在用什么?您是否选择了另一种 SSO 技术?

authentication web openid single-sign-on
  • 1 个回答
  • 128 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve