<?xml version="1.0" encoding="UTF-8"?><feed
	xmlns="http://www.w3.org/2005/Atom"
	xmlns:thr="http://purl.org/syndication/thread/1.0"
	xml:lang="zh-TW"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" >
	<title type="text">固有源碼</title>
	<subtitle type="text">Legacy Domain, Legacy Source, Legacy Builder</subtitle>

	<updated>2022-07-24T09:57:15Z</updated>

	<link rel="alternate" type="text/html" href="https://frogbsd.wordpress.com" />
	<id>http://frogbsd.wordpress.com/feed/atom/</id>
	<link rel="self" type="application/atom+xml" href="https://frogbsd.wordpress.com/feed/atom/" />

	<generator uri="http://wordpress.com/">WordPress.com</generator>
<link rel="search" type="application/opensearchdescription+xml" href="https://frogbsd.wordpress.com/osd.xml" title="固有源碼" />
<link rel="search" type="application/opensearchdescription+xml" href="https://s1.wp.com/opensearch.xml" title="WordPress.com" />
	<link rel='hub' href='https://frogbsd.wordpress.com/?pushpress=hub' />
	<entry>
		<author>
			<name>zmx</name>
							<uri>https://frogbsd.wordpress.com/</uri>
						</author>

		<title type="html"><![CDATA[macOS stuck at Checking for updates]]></title>
		<link rel="alternate" type="text/html" href="https://frogbsd.wordpress.com/2022/07/24/macos-stuck-at-checking-for-updates/" />

		<id>http://frogbsd.wordpress.com/?p=158</id>
		<updated>2022-07-24T09:57:15Z</updated>
		<published>2022-07-24T09:57:15Z</published>
		<category scheme="https://frogbsd.wordpress.com" term="Mac" />
		<summary type="html"><![CDATA[]]></summary>

					<content type="html" xml:base="https://frogbsd.wordpress.com/2022/07/24/macos-stuck-at-checking-for-updates/"><![CDATA[<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
sudo launchctl kickstart -k system/com.apple.softwareupdated
</pre></div>]]></content>
		
					<link rel="replies" type="text/html" href="https://frogbsd.wordpress.com/2022/07/24/macos-stuck-at-checking-for-updates/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://frogbsd.wordpress.com/2022/07/24/macos-stuck-at-checking-for-updates/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>zmx</name>
							<uri>https://frogbsd.wordpress.com/</uri>
						</author>

		<title type="html"><![CDATA[Make all ansible role tasks infinity retry by yq]]></title>
		<link rel="alternate" type="text/html" href="https://frogbsd.wordpress.com/2022/07/04/make-all-ansible-role-tasks-infinity-retry-by-yq/" />

		<id>http://frogbsd.wordpress.com/?p=153</id>
		<updated>2022-07-04T08:31:45Z</updated>
		<published>2022-07-04T08:31:45Z</published>
		<category scheme="https://frogbsd.wordpress.com" term="Linux" /><category scheme="https://frogbsd.wordpress.com" term="cicd" /><category scheme="https://frogbsd.wordpress.com" term="YAML" />
		<summary type="html"><![CDATA[]]></summary>

					<content type="html" xml:base="https://frogbsd.wordpress.com/2022/07/04/make-all-ansible-role-tasks-infinity-retry-by-yq/"><![CDATA[
<div class="wp-block-jetpack-markdown"><p>So you want mitigate connectivity problem during installation</p>
<p>In <code>main.yml</code> you have</p>
<pre><code>- name: Install requirements packages
  yum:
    name:
      - epel-release
      - jq
- name: Install Icinga packages
  yum:
    name:
      - icinga2      
</code></pre>
<p>Run</p>
<pre><code>yq -i '(.[] | select (has(&quot;yum&quot;)) | .yum.retries) = 10 ' main.yml
yq -i '(.[] | select (has(&quot;yum&quot;)) | .yum.delay) = 5 ' main.yml
yq -i '(.[] | select (has(&quot;yum&quot;)) | .yum.until) = &quot;result | succeeded&quot; ' main.yml
# I am too lazy to figure out one line code
</code></pre>
<p>Now you have</p>
<pre><code>- name: Install requirements packages
  yum:
    name:
      - epel-release
      - jq
    retries: 10
    delay: 5
    until: result | succeeded
- name: Install Icinga packages
  yum:
    name:
      - icinga2
    retries: 10
    delay: 5
    until: result | succeeded
</code></pre>
</div>
]]></content>
		
					<link rel="replies" type="text/html" href="https://frogbsd.wordpress.com/2022/07/04/make-all-ansible-role-tasks-infinity-retry-by-yq/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://frogbsd.wordpress.com/2022/07/04/make-all-ansible-role-tasks-infinity-retry-by-yq/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>zmx</name>
							<uri>https://frogbsd.wordpress.com/</uri>
						</author>

		<title type="html"><![CDATA[Kustomize replacement on annotations]]></title>
		<link rel="alternate" type="text/html" href="https://frogbsd.wordpress.com/2021/11/23/kustomize-replacement-on-annotations/" />

		<id>http://frogbsd.wordpress.com/?p=148</id>
		<updated>2021-11-23T06:34:51Z</updated>
		<published>2021-11-23T06:34:51Z</published>
		<category scheme="https://frogbsd.wordpress.com" term="Cloud" /><category scheme="https://frogbsd.wordpress.com" term="kubernetes" />
		<summary type="html"><![CDATA[The magic of `fieldPaths` is `metadata.annotations.[external-dns.alpha.kubernetes.io/hostname]`

NOT `metadata.annotations.external-dns.alpha.kubernetes.io/hostname`
NOT `metadata.annotations[external-dns.alpha.kubernetes.io/hostname]`
]]></summary>

					<content type="html" xml:base="https://frogbsd.wordpress.com/2021/11/23/kustomize-replacement-on-annotations/"><![CDATA[
<p class="wp-block-paragraph">The magic of <code>fieldPaths</code> is <code>metadata.annotations.[external-dns.alpha.kubernetes.io/hostname]</code></p>



<p class="wp-block-paragraph">NOT <code>metadata.annotations.external-dns.alpha.kubernetes.io/hostname</code><br />NOT <code>metadata.annotations[external-dns.alpha.kubernetes.io/hostname]</code> <br />NOT <code> metadata.annotations.external-dns\.alpha.\kubernetes\.io/hostname </code> </p>



<p class="wp-block-paragraph"><code>Version:kustomize/v4.4.0 GitCommit:63ec6bdb3d737a7c66901828c5743656c49b60e1</code></p>



<p class="wp-block-paragraph"><code>cat parameters.env</code></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
FQDN=host.domain.tld
</pre></div>


<p class="wp-block-paragraph"><code>cat ingress.yaml</code></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ports:
    - name: "8000"
      port: 8000
  type: NodePort
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "my-service-ingress"
  annotations:
    external-dns.alpha.kubernetes.io/hostname:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-TLS-1-1-2017-01
    alb.ingress.kubernetes.io/healthcheck-port: traffic-port
spec:
  rules:
    - host:
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 8000
</pre></div>


<p class="wp-block-paragraph"><code>cat kustomizaiton.yaml</code></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
replacements:
- source:
    kind: ConfigMap
    fieldPath: data.FQDN
  targets:
  - select:
      kind: Ingress
      name: my-service-ingress
    fieldPaths:
      - spec.rules.0.host
      - metadata.annotations.&#91;external-dns.alpha.kubernetes.io/hostname]
</pre></div>]]></content>
		
					<link rel="replies" type="text/html" href="https://frogbsd.wordpress.com/2021/11/23/kustomize-replacement-on-annotations/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://frogbsd.wordpress.com/2021/11/23/kustomize-replacement-on-annotations/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>zmx</name>
							<uri>https://frogbsd.wordpress.com/</uri>
						</author>

		<title type="html"><![CDATA[TLS Termination on AWS NLB to avoid managing certs in contour]]></title>
		<link rel="alternate" type="text/html" href="https://frogbsd.wordpress.com/2021/09/24/tls-termination-on-aws-nlb-to-avoid-managing-certs-in-contour/" />

		<id>http://frogbsd.wordpress.com/?p=145</id>
		<updated>2021-09-24T03:26:56Z</updated>
		<published>2021-09-24T03:26:56Z</published>
		<category scheme="https://frogbsd.wordpress.com" term="Cloud" /><category scheme="https://frogbsd.wordpress.com" term="kubernetes" /><category scheme="https://frogbsd.wordpress.com" term="tls" />
		<summary type="html"><![CDATA[開源定律：官方文件永遠裝不起來。

雖然 Contour 本身就可以 TLS Termination，但是採用 AWS NLB 做 TLS Termination 有些好處：]]></summary>

					<content type="html" xml:base="https://frogbsd.wordpress.com/2021/09/24/tls-termination-on-aws-nlb-to-avoid-managing-certs-in-contour/"><![CDATA[
<p class="wp-block-paragraph">開源定律：官方文件永遠裝不起來</p>



<p class="wp-block-paragraph">雖然 Contour 本身就可以 TLS Termination，但是採用 AWS NLB 做 TLS Termination 有些好處：</p>



<ul class="wp-block-list"><li>分離傳輸加密跟流量調度</li><li>簡化憑證管理</li></ul>



<p class="wp-block-paragraph"><a href="https://projectcontour.io/guides/deploy-aws-tls-nlb/">AWS Network Load Balancer TLS Termination with Contour (projectcontour.io)</a> 雖然官網有這篇文章，新世紀開源戰士當然總是碰到初號機不會動的窘境。(Sep 2021)</p>



<p class="wp-block-paragraph">這是不動的官網寫法</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
apiVersion: v1
kind: Service
metadata:
  name: envoy
  namespace: projectcontour
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:us-east-2:185309785115:certificate/7610ed7d-5a81-4ea2-a18a-7ba1606cca3e"
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
spec:
  externalTrafficPolicy: Local
  ports:
  - port: 80
    name: http
    protocol: TCP
  selector:
    app: envoy
  type: LoadBalancer
</pre></div>


<p class="wp-block-paragraph">這是會動的寫法</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
apiVersion: v1
kind: Service
metadata:
  name: envoy
  namespace: projectcontour
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:us-east-2:185309785115:certificate/7610ed7d-5a81-4ea2-a18a-7ba1606cca3e"
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
    service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
spec:
  externalTrafficPolicy: Local
  ports:
  - port: 443
    name: https
    protocol: TCP
    targetPort: 8080
  selector:
    app: envoy
  type: LoadBalancer
</pre></div>


<h1 class="wp-block-heading"></h1>
]]></content>
		
					<link rel="replies" type="text/html" href="https://frogbsd.wordpress.com/2021/09/24/tls-termination-on-aws-nlb-to-avoid-managing-certs-in-contour/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://frogbsd.wordpress.com/2021/09/24/tls-termination-on-aws-nlb-to-avoid-managing-certs-in-contour/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>zmx</name>
							<uri>https://frogbsd.wordpress.com/</uri>
						</author>

		<title type="html"><![CDATA[Grafana Loki with S3 Backend Using Tanka]]></title>
		<link rel="alternate" type="text/html" href="https://frogbsd.wordpress.com/2021/09/17/grafana-loki-with-s3-backend-using-tanka/" />

		<id>http://frogbsd.wordpress.com/?p=142</id>
		<updated>2021-09-17T08:16:29Z</updated>
		<published>2021-09-17T08:16:29Z</published>
		<category scheme="https://frogbsd.wordpress.com" term="Cloud" /><category scheme="https://frogbsd.wordpress.com" term="loki" />
		<summary type="html"><![CDATA[Grafana Loki 按照官網文件安裝起不來，因為文件跟很深的預設值會裝出 schema on GCP + data on AWS 組態。]]></summary>

					<content type="html" xml:base="https://frogbsd.wordpress.com/2021/09/17/grafana-loki-with-s3-backend-using-tanka/"><![CDATA[
<p class="wp-block-paragraph">官網文件安裝起不來，因為文件跟很深的預設值會裝出 schema on GCP + data on AWS 組態。</p>



<p class="wp-block-paragraph">如果不依賴 helm charts 做自動化的話，建議依照官方建議用 <a href="https://grafana.com/docs/loki/latest/installation/tanka/">Tanka | Grafana Labs</a> 安裝。</p>



<p class="wp-block-paragraph">要補上的主要是 <code>schema_config</code> 那一段</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
local gateway = import 'loki/gateway.libsonnet';
local loki = import 'loki/loki.libsonnet';
local promtail = import 'promtail/promtail.libsonnet';

loki + promtail + gateway {
  _config+:: {
    namespace: 'loki',
    htpasswd_contents: '',

    // S3 variables remove if not using aws
    storage_backend: 's3',
    s3_access_key: '',
    s3_secret_access_key: '',
    s3_address: 'ap-northeast-1',
    s3_bucket_name: 'loki',

    //Set this variable based on the type of object storage you're using.
    boltdb_shipper_shared_store: 's3',
    compactor_pvc_class: 'gp2',

    loki+: {
      schema_config: {
        configs: &#91;{
          from: '2020-10-24',
          store: 'boltdb-shipper',
          object_store: 's3',
          schema: 'v11',
          index: {
            prefix: '%s_index_' % $._config.table_prefix,
            period: '%dh' % $._config.index_period_hours,
          },
        }],
      },
    },

    promtail_config+: {
      clients: &#91;{
        scheme:: 'http',
        hostname:: 'gateway.%(namespace)s.svc' % $._config,
        username:: 'loki',
        password:: '',
        container_root_path:: '/var/lib/docker',
      }],
    },

    replication_factor: 3,
    consul_replicas: 1,
  },
}
</pre></div>


<p class="wp-block-paragraph">在 Grafana Data Source 用 <a href="http://gateway.loki.svc/">http://gateway.loki.svc</a> 就可以了</p>
]]></content>
		
					<link rel="replies" type="text/html" href="https://frogbsd.wordpress.com/2021/09/17/grafana-loki-with-s3-backend-using-tanka/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://frogbsd.wordpress.com/2021/09/17/grafana-loki-with-s3-backend-using-tanka/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>zmx</name>
							<uri>https://frogbsd.wordpress.com/</uri>
						</author>

		<title type="html"><![CDATA[Build Periodically in Jenkins Templating Engine]]></title>
		<link rel="alternate" type="text/html" href="https://frogbsd.wordpress.com/2021/08/26/build-periodically-in-jenkins-templating-engine/" />

		<id>http://frogbsd.wordpress.com/?p=138</id>
		<updated>2021-08-26T08:44:26Z</updated>
		<published>2021-08-26T08:39:08Z</published>
		<category scheme="https://frogbsd.wordpress.com" term="Uncategorized" /><category scheme="https://frogbsd.wordpress.com" term="cicd" />
		<summary type="html"><![CDATA[翻半天資料才找到 Jenkins Templating Engine 怎麼做定期建置]]></summary>

					<content type="html" xml:base="https://frogbsd.wordpress.com/2021/08/26/build-periodically-in-jenkins-templating-engine/"><![CDATA[
<p class="wp-block-paragraph">翻半天資料才找到 Jenkins Templating Engine 怎麼做定期建置</p>



<h1 class="wp-block-heading">Free Style Job</h1>



<p class="wp-block-paragraph">GUI 點一點就好，很簡單</p>



<h1 class="wp-block-heading">Declarative Pipeline</h1>



<p class="wp-block-paragraph">也很簡單，pipeline 裡面宣告一下就好</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: groovy; title: ; notranslate">
pipeline {
  agent any

  triggers {
      cron('H 0 1,15 * *')
  }
</pre></div>


<h1 class="wp-block-heading">Jenkins Templating Engine</h1>



<p class="wp-block-paragraph"><a href="https://boozallen.github.io/sdp-docs/jte/2.2.2/index.html" rel="nofollow">https://boozallen.github.io/sdp-docs/jte/2.2.2/index.html</a><br />JTE 支援兩種方式，Scripted Pipeline 跟 Declarative Pipeline，Scripted 較早出也較成熟。<br />設定的方式非常不直覺，其實在任何一個 stage 裡面的 node scope 設定 properties 就可以。</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
cat libraries/common/steps/common_init.groovy
</pre></div>

<div class="wp-block-syntaxhighlighter-code "><pre class="brush: groovy; title: ; notranslate">
@Init

void call() {
  stage('Common: Init'){
    node {
      properties(&#91;pipelineTriggers(&#91;cron('H 0 1,15 * *')])])
      cleanWs(disableDeferredWipeout: true)
      checkout scm        
    }
  }
}
</pre></div>]]></content>
		
					<link rel="replies" type="text/html" href="https://frogbsd.wordpress.com/2021/08/26/build-periodically-in-jenkins-templating-engine/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://frogbsd.wordpress.com/2021/08/26/build-periodically-in-jenkins-templating-engine/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>zmx</name>
							<uri>https://frogbsd.wordpress.com/</uri>
						</author>

		<title type="html"><![CDATA[Argo CD PreSync 雞蛋問題]]></title>
		<link rel="alternate" type="text/html" href="https://frogbsd.wordpress.com/2021/07/22/argo-cd-presync-flaw/" />

		<id>http://frogbsd.wordpress.com/?p=134</id>
		<updated>2021-07-22T01:05:25Z</updated>
		<published>2021-07-22T01:05:25Z</published>
		<category scheme="https://frogbsd.wordpress.com" term="Cloud" /><category scheme="https://frogbsd.wordpress.com" term="Uncategorized" /><category scheme="https://frogbsd.wordpress.com" term="argocd" /><category scheme="https://frogbsd.wordpress.com" term="cicd" />
		<summary type="html"><![CDATA[如果你看 Argo CD Resource Hooks 官方文件，會告訴你 PreSync 可以拿來做 database schema migration，然而這是有問題的。]]></summary>

					<content type="html" xml:base="https://frogbsd.wordpress.com/2021/07/22/argo-cd-presync-flaw/"><![CDATA[
<p class="wp-block-paragraph">如果你看 Argo CD <a href="https://argo-cd.readthedocs.io/en/stable/user-guide/resource_hooks/">Resource Hooks</a> 官方文件，會告訴你 PreSync 可以拿來做 database schema migration，然而這是有問題的。</p>



<p class="wp-block-paragraph">這有個問題，譬如說外部的資料庫我們會這樣宣告</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
apiVersion: v1
kind: Service
metadata:
  name: postgres
spec:
  type: ExternalName
  externalName: foo.bar.us-east-2.rds.amazonaws.com
</pre></div>


<p class="wp-block-paragraph">大部分像這樣的 Resource 都是在 PreSync 之後的 Sync phase 去同步的，這就造成 Application 第一次安裝的時候，尚未跑到 Sync phase -&gt; 資料庫不存在 -&gt; PreSync 階段的 databae schema migration <code>kind: Job</code> 就會失敗。</p>



<p class="wp-block-paragraph">如果把 <code>kind: Service</code> 標記成 Presync phase 會有另一個問題，Presync hook 成功跑完以後就會消失。(另一個模式是每次跑之前砍掉重建，問題差不多)</p>



<p class="wp-block-paragraph">由於會消失，像是 <code>kind: Service</code> 或是 <code>kind: PersistentVOlume</code> 就不能放在 Presync phase。</p>



<p class="wp-block-paragraph">解決方法是改用 <a href="https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/">Sync Waves</a></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
apiVersion: v1
kind: Service
metadata:
  name: postgres
  annotations:
    argocd.argoproj.io/sync-wave: "-1"  
spec:
  type: ExternalName
  externalName: foo.bar.us-east-2.rds.amazonaws.com
</pre></div>


<p class="wp-block-paragraph">透過自由標記正負整數來控制執行順序，都 2021 了還有這種非 DAG 的設計也頗為奇妙。Flux CD 則是設計成比較好用的 <a href="https://fluxcd.io/docs/components/kustomize/kustomization/#kustomization-dependencies">spec.dependsOn</a></p>



<p class="wp-block-paragraph">參考資料：</p>



<ul class="wp-block-list"><li><a href="https://github.com/argoproj/argo-cd/issues/3837"># PreSync hook resources are recreated on sync</a></li><li><a href="https://github.com/argoproj/argo-cd/issues/3846"># PVC with Pre-Sync or Helm&#8217;s Pre-Install annotation getting terminated by argo during every sync process</a></li></ul>
]]></content>
		
					<link rel="replies" type="text/html" href="https://frogbsd.wordpress.com/2021/07/22/argo-cd-presync-flaw/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://frogbsd.wordpress.com/2021/07/22/argo-cd-presync-flaw/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>zmx</name>
							<uri>https://frogbsd.wordpress.com/</uri>
						</author>

		<title type="html"><![CDATA[在 macOS 中安装 PyGTK 之 2016 版]]></title>
		<link rel="alternate" type="text/html" href="https://frogbsd.wordpress.com/2016/11/05/macos-pygtk-2016/" />

		<id>http://frogbsd.wordpress.com/?p=114</id>
		<updated>2016-11-05T13:57:11Z</updated>
		<published>2016-11-05T13:57:11Z</published>
		<category scheme="https://frogbsd.wordpress.com" term="Mac" /><category scheme="https://frogbsd.wordpress.com" term="Programming" />
		<summary type="html"><![CDATA[如果你有機會在看到落落長的官網 Building GTK-OSX 或是 2015 版的 在Mac OS X中安 [&#8230;]]]></summary>

					<content type="html" xml:base="https://frogbsd.wordpress.com/2016/11/05/macos-pygtk-2016/"><![CDATA[<p>如果你有機會在看到落落長的官網 <a href="https://wiki.gnome.org/Projects/GTK+/OSX/Building">Building GTK-OSX</a> 或是 2015 版的 <a href="https://zhuanlan.zhihu.com/p/20188965">在Mac OS X中安装PyGTK</a> 之前看到我這篇，那只需要簡短的</p>
<pre><code>brew install gtk-mac-integration
python /usr/local/lib/pygtk/2.0/pygtk-demo.py
</code></pre>
<p>收工 -_-</p>
]]></content>
		
					<link rel="replies" type="text/html" href="https://frogbsd.wordpress.com/2016/11/05/macos-pygtk-2016/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://frogbsd.wordpress.com/2016/11/05/macos-pygtk-2016/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>zmx</name>
							<uri>https://frogbsd.wordpress.com/</uri>
						</author>

		<title type="html"><![CDATA[Pacemaker 1.1.14 新增 clone-min]]></title>
		<link rel="alternate" type="text/html" href="https://frogbsd.wordpress.com/2016/01/04/pacemaker-clone-min/" />

		<id>http://frogbsd.wordpress.com/?p=108</id>
		<updated>2016-01-04T11:46:16Z</updated>
		<published>2016-01-04T11:46:16Z</published>
		<category scheme="https://frogbsd.wordpress.com" term="Cluster" /><category scheme="https://frogbsd.wordpress.com" term="Linux" />
		<summary type="html"><![CDATA[以前有 clone-max 控制 Instance 總數，clone-node-max 控制每個節點上 Ins [&#8230;]]]></summary>

					<content type="html" xml:base="https://frogbsd.wordpress.com/2016/01/04/pacemaker-clone-min/"><![CDATA[<p>以前有 clone-max 控制 Instance 總數，clone-node-max 控制每個節點上 Instance 最多數量。現在多了 clone-min，可以應用的情況：</p>
<ul>
<li>在 Proxy Frontend 起來之前確保有多個 Service Backend Instance 跑起來了</li>
<li>對於需要 Quorum 的 Cluster，保證有足夠的 Instance 起來，例如 RabbitMQ</li>
</ul>
<p>Ref: <a href="http://clusterlabs.org/pipermail/users/2015-December/001933.html">Pacemaker 1.1.14 &#8211; Release Candidate (try it out!)</a></p>
]]></content>
		
					<link rel="replies" type="text/html" href="https://frogbsd.wordpress.com/2016/01/04/pacemaker-clone-min/#comments" thr:count="1" />
			<link rel="replies" type="application/atom+xml" href="https://frogbsd.wordpress.com/2016/01/04/pacemaker-clone-min/feed/atom/" thr:count="1" />
			<thr:total>1</thr:total>
			</entry>
		<entry>
		<author>
			<name>zmx</name>
							<uri>https://frogbsd.wordpress.com/</uri>
						</author>

		<title type="html"><![CDATA[Linux Partition 命名規則真是一團亂]]></title>
		<link rel="alternate" type="text/html" href="https://frogbsd.wordpress.com/2015/04/01/linux-partition-%e5%91%bd%e5%90%8d%e8%a6%8f%e5%89%87%e7%9c%9f%e6%98%af%e4%b8%80%e5%9c%98%e4%ba%82/" />

		<id>http://frogbsd.wordpress.com/?p=105</id>
		<updated>2016-01-04T12:04:11Z</updated>
		<published>2015-04-01T13:30:32Z</published>
		<category scheme="https://frogbsd.wordpress.com" term="Linux" /><category scheme="https://frogbsd.wordpress.com" term="storage" />
		<summary type="html"><![CDATA[主要是 /dev/sda1 /dev/mapper/namep1 /dev/mapper/name1 /dev [&#8230;]]]></summary>

					<content type="html" xml:base="https://frogbsd.wordpress.com/2015/04/01/linux-partition-%e5%91%bd%e5%90%8d%e8%a6%8f%e5%89%87%e7%9c%9f%e6%98%af%e4%b8%80%e5%9c%98%e4%ba%82/"><![CDATA[<p>主要是 /dev/sda1 /dev/mapper/namep1 /dev/mapper/name1 /dev/mapper/name-part1<br />
分隔字元要用 p 還是 -part 還是沒有，各種程式搞不定，然後又一堆 hard code。</p>
<p><a title="[parted-devel] &quot;linux: use devicemapper task name instead of device node name&quot; causes dmraid breakage" href="http://lists.alioth.debian.org/pipermail/parted-devel/2010-May/003657.html">[parted-devel] &#8220;linux: use devicemapper task name instead of device node name" causes dmraid breakage</a></p>
<p><a href="https://bugs.launchpad.net/ubuntu/+source/debian-installer/+bug/1430074">fix handling of multipathed disks</a></p>
<p><a href="http://markmail.org/thread/yfz2m6q6uifmtlhk">[dm-devel] What is the deal with the partition separator?</a></p>
]]></content>
		
					<link rel="replies" type="text/html" href="https://frogbsd.wordpress.com/2015/04/01/linux-partition-%e5%91%bd%e5%90%8d%e8%a6%8f%e5%89%87%e7%9c%9f%e6%98%af%e4%b8%80%e5%9c%98%e4%ba%82/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://frogbsd.wordpress.com/2015/04/01/linux-partition-%e5%91%bd%e5%90%8d%e8%a6%8f%e5%89%87%e7%9c%9f%e6%98%af%e4%b8%80%e5%9c%98%e4%ba%82/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
	</feed>
