update some content

master
Eric Chang 4 years ago
parent b8600ab259
commit 27b5a11382

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -591,7 +591,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -333,7 +333,7 @@ if (!doNotTrack) {
<p>之前為了能夠在執行完 ansible playbook 後能有個log 可以看</p>
<p>所以在每次執行的時候,都要加入 tee 的指令</p>
<p>像是</p>
<pre tabindex="0"><code>ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
<pre><code>ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
</code></pre><p>一直都是放在crontab 裡面執行,也就沒有去管他</p>
<p>反正也沒有人關心結果怎樣 (攤手</p>
@ -593,6 +593,6 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>

@ -16,7 +16,7 @@
<description>&lt;p&gt;之前為了能夠在執行完 ansible playbook 後能有個log 可以看&lt;/p&gt;
&lt;p&gt;所以在每次執行的時候,都要加入 tee 的指令&lt;/p&gt;
&lt;p&gt;像是&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
&lt;pre&gt;&lt;code&gt;ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;一直都是放在crontab 裡面執行,也就沒有去管他&lt;/p&gt;
&lt;p&gt;反正也沒有人關心結果怎樣 (攤手&lt;/p&gt;</description>
</item>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -476,6 +476,6 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -478,6 +478,6 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -418,6 +418,6 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -477,6 +477,6 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -3208,7 +3208,7 @@ if (!doNotTrack) {
<p>這幾天在玩ansible 時,碰到一個問題</p>
<p>假如我有個yaml檔作為資料來源檔名是 abc.yml</p>
<p>大概長這樣</p>
<pre tabindex="0"><code> &quot;teams&quot;: [
<pre><code> &quot;teams&quot;: [
{
&quot;chinese_name&quot;: &quot;TEAM1&quot;,
&quot;description&quot;: &quot;TEAM1&quot;,
@ -3751,6 +3751,6 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>

@ -637,7 +637,7 @@
<description>&lt;p&gt;這幾天在玩ansible 時,碰到一個問題&lt;/p&gt;
&lt;p&gt;假如我有個yaml檔作為資料來源檔名是 abc.yml&lt;/p&gt;
&lt;p&gt;大概長這樣&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; &amp;quot;teams&amp;quot;: [
&lt;pre&gt;&lt;code&gt; &amp;quot;teams&amp;quot;: [
{
&amp;quot;chinese_name&amp;quot;: &amp;quot;TEAM1&amp;quot;,
&amp;quot;description&amp;quot;: &amp;quot;TEAM1&amp;quot;,

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -480,6 +480,6 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -476,6 +476,6 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -453,7 +453,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -594,7 +594,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta name="generator" content="Hugo 0.88.1" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.87.0" /><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
@ -46,9 +46,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -838,7 +838,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -489,7 +489,7 @@
<description>&lt;p&gt;之前為了能夠在執行完 ansible playbook 後能有個log 可以看&lt;/p&gt;
&lt;p&gt;所以在每次執行的時候,都要加入 tee 的指令&lt;/p&gt;
&lt;p&gt;像是&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
&lt;pre&gt;&lt;code&gt;ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;一直都是放在crontab 裡面執行,也就沒有去管他&lt;/p&gt;
&lt;p&gt;反正也沒有人關心結果怎樣 (攤手&lt;/p&gt;</description>
</item>
@ -762,7 +762,7 @@
<description>&lt;p&gt;這幾天在玩ansible 時,碰到一個問題&lt;/p&gt;
&lt;p&gt;假如我有個yaml檔作為資料來源檔名是 abc.yml&lt;/p&gt;
&lt;p&gt;大概長這樣&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; &amp;quot;teams&amp;quot;: [
&lt;pre&gt;&lt;code&gt; &amp;quot;teams&amp;quot;: [
{
&amp;quot;chinese_name&amp;quot;: &amp;quot;TEAM1&amp;quot;,
&amp;quot;description&amp;quot;: &amp;quot;TEAM1&amp;quot;,

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta name="generator" content="Hugo 0.88.1" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.87.0" /><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
@ -46,9 +46,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -840,7 +840,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401693"></script>
</body>
</html>

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta name="generator" content="Hugo 0.88.1" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.87.0" /><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
@ -46,9 +46,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401693" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401693" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -846,7 +846,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401693"></script>
</body>
</html>

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta name="generator" content="Hugo 0.88.1" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.87.0" /><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
@ -46,9 +46,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401693" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401693" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -551,7 +551,7 @@ if (!doNotTrack) {
<p>這幾天在玩ansible 時,碰到一個問題</p>
<p>假如我有個yaml檔作為資料來源檔名是 abc.yml</p>
<p>大概長這樣</p>
<pre tabindex="0"><code> &quot;teams&quot;: [
<pre><code> &quot;teams&quot;: [
{
&quot;chinese_name&quot;: &quot;TEAM1&quot;,
&quot;description&quot;: &quot;TEAM1&quot;,
@ -891,7 +891,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401693"></script>
</body>
</html>

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta name="generator" content="Hugo 0.88.1" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.87.0" /><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
@ -46,9 +46,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401693" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401693" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -854,7 +854,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401693"></script>
</body>
</html>

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta name="generator" content="Hugo 0.88.1" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.87.0" /><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
@ -46,9 +46,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401693" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401693" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -625,7 +625,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401693"></script>
</body>
</html>

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta name="generator" content="Hugo 0.88.1" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.87.0" /><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
@ -46,9 +46,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -856,7 +856,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta name="generator" content="Hugo 0.88.1" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.87.0" /><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
@ -46,9 +46,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -845,7 +845,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta name="generator" content="Hugo 0.88.1" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.87.0" /><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
@ -46,9 +46,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -845,7 +845,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta name="generator" content="Hugo 0.88.1" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.87.0" /><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
@ -46,9 +46,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -852,7 +852,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta name="generator" content="Hugo 0.88.1" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.87.0" /><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
@ -46,9 +46,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -846,7 +846,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta name="generator" content="Hugo 0.88.1" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.87.0" /><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
@ -46,9 +46,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -845,7 +845,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta name="generator" content="Hugo 0.88.1" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.87.0" /><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
@ -46,9 +46,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -441,7 +441,7 @@ if (!doNotTrack) {
<p>之前為了能夠在執行完 ansible playbook 後能有個log 可以看</p>
<p>所以在每次執行的時候,都要加入 tee 的指令</p>
<p>像是</p>
<pre tabindex="0"><code>ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
<pre><code>ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
</code></pre><p>一直都是放在crontab 裡面執行,也就沒有去管他</p>
<p>反正也沒有人關心結果怎樣 (攤手</p>
@ -862,7 +862,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta name="generator" content="Hugo 0.88.1" /><meta charset="utf-8">
<meta name="generator" content="Hugo 0.87.0" /><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="application/ld+json">
{
@ -46,9 +46,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -848,7 +848,7 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -331,7 +331,7 @@ if (!doNotTrack) {
<p>設定了新的 vmbridge 之後就可以在新VM的設定畫面中指定網卡走這個界面出去</p>
<p>可是這樣做出來的VM ,一直無法開機</p>
<p>錯誤訊息如下</p>
<pre tabindex="0"><code>kvm: -drive file=/zp/images/100/vm-100-disk-1.qcow2,if=none,id=drive-virtio0,format=qcow2,cache=none,aio=native,detect-zeroes=on: file system may not support O_DIRECT
<pre><code>kvm: -drive file=/zp/images/100/vm-100-disk-1.qcow2,if=none,id=drive-virtio0,format=qcow2,cache=none,aio=native,detect-zeroes=on: file system may not support O_DIRECT
kvm: -drive file=/zp/images/100/vm-100-disk-1.qcow2,if=none,id=drive-virtio0,format=qcow2,cache=none,aio=native,detect-zeroes=on: Could not open '/zp/images/100/vm-100-disk-1.qcow2': Invalid argument
TASK ERROR: start failed: command '/usr/bin/kvm -id 100 -name 123123 -chardev 'socket,id=qmp,path=/var/run/qemu-server/100.qmp,server,nowait' -mon 'chardev=qmp,mode=control' -pidfile /var/run/qemu-server/100.pid -daemonize -smbios 'type=1,uuid=da27a9ea-fd55-4542-b2a7-8d5b09bf7611' -smp '2,sockets=1,cores=2,maxcpus=2' -nodefaults -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' -vga std -vnc unix:/var/run/qemu-server/100.vnc,x509,password -cpu kvm64,+lahf_lm,+sep,+kvm_pv_unhalt,+kvm_pv_eoi,enforce -m 2048 -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' -device 'usb-tablet,id=tablet,bus=uhci.0,port=1' -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' -iscsi 'initiator-name=iqn.1993-08.org.debian:01:b972d1ad783' -drive 'file=/zp/template/iso/ubuntu-18.04.1-live-server-amd64.iso,if=none,id=drive-ide2,media=cdrom,aio=threads' -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=200' -drive 'file=/zp/images/100/vm-100-disk-1.qcow2,if=none,id=drive-virtio0,format=qcow2,cache=none,aio=native,detect-zeroes=on' -device 'virtio-blk-pci,drive=drive-virtio0,id=virtio0,bus=pci.0,addr=0xa,bootindex=100' -netdev 'type=tap,id=net0,ifname=tap100i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' -device 'virtio-net-pci,mac=A2:EA:45:EE:17:25,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300'' failed: exit code 1
</code></pre><p>當然先去拜google果然就看到了提示需要把 磁碟的 Cache 從預設的 Default(No Cache) 改成 write through</p>
@ -340,14 +340,14 @@ TASK ERROR: start failed: command '/usr/bin/kvm -id 100 -name 123123 -chardev 's
<p>總之呢,改完之後就可以了 &hellip;</p>
<h3 id="strongfont-colorred必須手動設定路由fontstrong"><!-- raw HTML omitted --><!-- raw HTML omitted -->必須手動設定路由<!-- raw HTML omitted --><!-- raw HTML omitted --></h3>
<h4 id="update">Update</h4>
<pre tabindex="0"><code>這邊可能是我有誤解應該不需要先在pve 本機設定 10G網卡的 IP
<pre><code>這邊可能是我有誤解應該不需要先在pve 本機設定 10G網卡的 IP
直接進web console 去設定 vmbr1 就好了
</code></pre><p>設定好新的VM開機、設定IP、重開機之後會發現還是ping 不到另一台機器..(翻桌!)</p>
<p>只好又去拜google ,就看到了底下這篇</p>
<p><a href="https://forum.proxmox.com/threads/how-to-add-second-nic.40905/">https://forum.proxmox.com/threads/how-to-add-second-nic.40905/</a></p>
<p>大概點出了方向,必須要手動增加路由(感覺有點蠢)</p>
<p>像我的光纖網卡走的是 192.168.50.0/24 就要去把原有的192.168.50.0/24的路由給砍掉然後再新增(是不是很蠢?)</p>
<pre tabindex="0"><code>root@ssd:/etc/network# ip route del 192.168.50.0/24
<pre><code>root@ssd:/etc/network# ip route del 192.168.50.0/24
root@ssd:/etc/network# ip route add 192.168.50.0/24 dev vmbr1
root@ssd:/etc/network# ip route
@ -357,7 +357,7 @@ default via 192.168.11.253 dev vmbr0 onlink
root@ssd:/etc/network#
</code></pre><p>OK ping 一下對面看能不能過</p>
<pre tabindex="0"><code>root@ssd:/etc/network# ping 192.168.50.10
<pre><code>root@ssd:/etc/network# ping 192.168.50.10
PING 192.168.50.10 (192.168.50.10) 56(84) bytes of data.
64 bytes from 192.168.50.10: icmp_seq=1 ttl=64 time=0.083 ms
64 bytes from 192.168.50.10: icmp_seq=2 ttl=64 time=0.067 ms
@ -374,9 +374,9 @@ PING 192.168.50.10 (192.168.50.10) 56(84) bytes of data.
<p>在linux 上,我習慣用 iperf 來測試兩台主機的連接速度</p>
<p>兩邊都用 apt install iperf 裝好套件</p>
<p>然後找一台作為 server ,執行</p>
<pre tabindex="0"><code>iperf -s
<pre><code>iperf -s
</code></pre><p>然後到另一台,去執行</p>
<pre tabindex="0"><code>2018-11-30 15:36:58 [minion@ubuntu ~]$ iperf -d -t 600 -P 10 -c 192.168.50.200
<pre><code>2018-11-30 15:36:58 [minion@ubuntu ~]$ iperf -d -t 600 -P 10 -c 192.168.50.200
WARNING: option -d is not valid for server mode
------------------------------------------------------------
Client connecting to 192.168.50.200, TCP port 5001
@ -389,7 +389,7 @@ TCP window size: 85.0 KByte (default)
</code></pre><p>哈哈哈,有目有!測試速度來到了 9.18 Gbits 啊! 就是一個爽啊!</p>
<p>記得那個 server IP 是你 VM 裡面設定的 IP不是 proxmox 上面的</p>
<p>同場加映走 1Gb 網路的測試結果</p>
<pre tabindex="0"><code>2018-11-30 16:39:37 [minion@ubuntu ~]$ iperf -d -t 600 -P 10 -c 192.168.11.171
<pre><code>2018-11-30 16:39:37 [minion@ubuntu ~]$ iperf -d -t 600 -P 10 -c 192.168.11.171
WARNING: option -d is not valid for server mode
------------------------------------------------------------
Client connecting to 192.168.11.171, TCP port 5001
@ -410,16 +410,16 @@ TCP window size: 85.0 KByte (default)
<p>在 mapuser/mapgroup這邊要改成 root/wheel 不然會有無法寫入的問題</p>
<p><img src="https://i.imgur.com/Yn7qYdK.png" alt="FREENAS NFS Sharing"></p>
<p>安裝完之後,實際跑一下 dd 看看速度多少</p>
<pre tabindex="0"><code>Last login: Mon Dec 3 03:10:54 2018
<pre><code>Last login: Mon Dec 3 03:10:54 2018
2018-12-03 03:15:03 [administrator@ubuntu ~]$ dd if=/dev/zero of=testfile bs=10240 count=1000000
1000000+0 records in
1000000+0 records out
10240000000 bytes (10 GB, 9.5 GiB) copied, 9.63458 s, 1.1 GB/s
</code></pre><pre tabindex="0"><code>2018-12-03 03:17:28 [administrator@ubuntu ~]$ dd if=/dev/zero of=testfile bs=20480 count=1000000
</code></pre><pre><code>2018-12-03 03:17:28 [administrator@ubuntu ~]$ dd if=/dev/zero of=testfile bs=20480 count=1000000
1000000+0 records in
1000000+0 records out
20480000000 bytes (20 GB, 19 GiB) copied, 16.0786 s, 1.3 GB/s
</code></pre><pre tabindex="0"><code>2018-12-03 03:17:50 [administrator@ubuntu ~]$ dd if=/dev/zero of=testfile bs=4096 count=1000000
</code></pre><pre><code>2018-12-03 03:17:50 [administrator@ubuntu ~]$ dd if=/dev/zero of=testfile bs=4096 count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB, 3.8 GiB) copied, 4.80629 s, 852 MB/s
@ -723,7 +723,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -308,7 +308,7 @@ if (!doNotTrack) {
<p>在用template產生檔案之前爲了避免錯誤所以我先用 file module 去建立目錄</p>
<p>怪就怪在建立目錄的task沒錯但是要產生檔案時卻出現了目的目錄不存在的錯誤</p>
<p>原本的 playbook 大概長這樣</p>
<pre tabindex="0"><code>- name: make dconf/profile folder
<pre><code>- name: make dconf/profile folder
file:
path: &quot;{{ item }} &quot;
state: directory
@ -334,7 +334,7 @@ if (!doNotTrack) {
owner: root
group: root
</code></pre><p>執行時的 LOG</p>
<pre tabindex="0"><code>TASK [userdesktop-1804 : generate 00_msb_settings] *******************************************************************************
<pre><code>TASK [userdesktop-1804 : generate 00_msb_settings] *******************************************************************************
Wednesday 18 December 2019 14:36:26 +0800 (0:00:00.328) 0:02:20.653 ****
fatal: [hqpc108.abc.com.tw]: FAILED! =&gt; {
&quot;changed&quot;: false,
@ -346,7 +346,7 @@ MSG:
Destination directory /etc/dconf/db/msb.d does not exist
</code></pre><p>怪了,登錄遠端電腦看一下</p>
<pre tabindex="0"><code>administrator@ubuntu:/etc/dconf/db$ ls -alrt
<pre><code>administrator@ubuntu:/etc/dconf/db$ ls -alrt
total 28
drwxr-xr-x 2 root root 4096 Dec 18 12:22 ibus.d
drwxr-xr-x 2 root root 4096 Dec 18 14:27 gdm.d
@ -358,7 +358,7 @@ drwxr-xr-x 4 root root 4096 Dec 18 14:37 ..
</code></pre><p>發現了怪異的狀況,那個 msb.d 被單引號包起來了,代表包含了一些特殊字元</p>
<p>複製貼上後,才注意到,原來最後多了一個空白。</p>
<p>回去看 playbook 內容</p>
<pre tabindex="0"><code>- name: make dconf/profile folder
<pre><code>- name: make dconf/profile folder
file:
path: &quot;{{ item }} &quot;
state: directory
@ -661,7 +661,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -316,7 +316,7 @@ if (!doNotTrack) {
<p>原來的寫法是在 /usr/share/glib-2.0/schemas/ 底下新增一個設定檔</p>
<p>然後用dconf 去產生設定</p>
<p>原本的內容長這樣</p>
<pre tabindex="0"><code>[com.canonical.Unity.Launcher]
<pre><code>[com.canonical.Unity.Launcher]
favorites=['application://ubiquity.desktop', 'application://launchers.desktop', 'application://nautilus.desktop', 'application
://gnome-terminal.desktop', 'application://google-chrome.desktop', 'application://goldendict.desktop', 'application://stardict
.desktop', 'application://libreoffice-writer.desktop', 'application://libreoffice-calc.desktop', 'unity://running-apps', 'unit
@ -328,7 +328,7 @@ y://expo-icon', 'unity://devices']
<li>mkdir -p /etc/dconf/profile</li>
<li>vim /etc/dconf/profile/user</li>
</ol>
<pre tabindex="0"><code>#This line allows the user to change the default favorites later.
<pre><code>#This line allows the user to change the default favorites later.
user-db:user
#This line defines a system database named msb
system-db:msb
@ -336,7 +336,7 @@ system-db:msb
<li>mkdir -p /etc/dconf/db/msb.d</li>
<li>vim /etc/dconf/db/msb.d/00_msb_settings</li>
</ol>
<pre tabindex="0"><code># Define default favorite apps
<pre><code># Define default favorite apps
[org/gnome/shell]
favorite-apps = ['chromium-browser.desktop', 'firefox.desktop', 'gnome-terminal.desktop', 'nautilus.desktop']
</code></pre><p>把這些步驟改成 ansible 語法再派送到client ,重開機之後就可以正確顯示設定好的「我的最愛」了</p>
@ -629,7 +629,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -13,7 +13,7 @@
"articleSection" : "post",
"name" : "[筆記] 為了保存log 用script 指令執行ansible \/ Another Way to Keep Ansible Log using script command",
"headline" : "[筆記] 為了保存log 用script 指令執行ansible \/ Another Way to Keep Ansible Log using script command",
"description" : "\u003cp\u003e之前為了能夠在執行完 ansible playbook 後能有個log 可以看\u003c\/p\u003e\n\u003cp\u003e所以在每次執行的時候都要加入 tee 的指令\u003c\/p\u003e\n\u003cp\u003e像是\u003c\/p\u003e\n\u003cpre tabindex=\u00220\u0022\u003e\u003ccode\u003eANSIBLE_CONFIG=\/home\/D\/ansiblecontrol\/ansible.cfg \/usr\/local\/bin\/ansible-playbook \/home\/D\/ansiblecontrol\/playbook.user_client.yml --vault-password-file=\/home\/D\/ansiblecontrol\/vault.passwd -i \/home\/D\/ansiblecontrol\/inventory\/production -f1 --limit tyuserclients |tee \/tmp\/tyuserclients.log\n\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e一直都是放在crontab 裡面執行,也就沒有去管他\u003c\/p\u003e\n\u003cp\u003e反正也沒有人關心結果怎樣 (攤手\u003c\/p\u003e",
"description" : "\u003cp\u003e之前為了能夠在執行完 ansible playbook 後能有個log 可以看\u003c\/p\u003e\n\u003cp\u003e所以在每次執行的時候都要加入 tee 的指令\u003c\/p\u003e\n\u003cp\u003e像是\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003eANSIBLE_CONFIG=\/home\/D\/ansiblecontrol\/ansible.cfg \/usr\/local\/bin\/ansible-playbook \/home\/D\/ansiblecontrol\/playbook.user_client.yml --vault-password-file=\/home\/D\/ansiblecontrol\/vault.passwd -i \/home\/D\/ansiblecontrol\/inventory\/production -f1 --limit tyuserclients |tee \/tmp\/tyuserclients.log\n\u003c\/code\u003e\u003c\/pre\u003e\u003cp\u003e一直都是放在crontab 裡面執行,也就沒有去管他\u003c\/p\u003e\n\u003cp\u003e反正也沒有人關心結果怎樣 (攤手\u003c\/p\u003e",
"inLanguage" : "en",
"author" : "Eric Chang",
"creator" : "Eric Chang",
@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -307,12 +307,12 @@ if (!doNotTrack) {
<p>之前為了能夠在執行完 ansible playbook 後能有個log 可以看</p>
<p>所以在每次執行的時候,都要加入 tee 的指令</p>
<p>像是</p>
<pre tabindex="0"><code>ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
<pre><code>ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
</code></pre><p>一直都是放在crontab 裡面執行,也就沒有去管他</p>
<p>反正也沒有人關心結果怎樣 (攤手</p>
<p>後來發現有個指令叫 script 可以完整紀錄指令執行期間的console 畫面變化(包含了ansi color!)</p>
<p>剛剛測試了一下,發現的確是可以用,不過也沒感覺有特別好用的地方,就只是做個紀錄吧,說不定以後其他地方可以用得到</p>
<pre tabindex="0"><code>sciprt -c 'make EXTRA_ARGS=&quot;-i inventory/production --limit hqpc074&quot; user_client' -f hqpc074.out'
<pre><code>sciprt -c 'make EXTRA_ARGS=&quot;-i inventory/production --limit hqpc074&quot; user_client' -f hqpc074.out'
</code></pre><p>結果長這樣
<img src="https://i.imgur.com/F9KFAWV.png" alt=""></p>
<p>就真的跟console 的畫面一樣</p>
@ -602,7 +602,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -311,7 +311,7 @@ if (!doNotTrack) {
<h3 id="task-內容">TASK 內容</h3>
<p>其實task 內容沒有很複雜簡單來說就是先檢查user的 firefox profile 目錄</p>
<p>如果存在就pass如果不存在就幫user建立</p>
<pre tabindex="0"><code>- name: check if user profile exists
<pre><code>- name: check if user profile exists
become_user: &quot;{{ item.name }}&quot;
stat:
path: &quot;{{ firefox_home }}&quot;
@ -323,7 +323,7 @@ if (!doNotTrack) {
<p>所以可以肯定的是 stat 這個屬性一定在</p>
<p>可是也一定有什麼問題,造成取不到值</p>
<p>當然就是先debug 來看看(有些不重要的屬性,我就先拿掉了)</p>
<pre tabindex="0"><code>ok: [hqdc075] =&gt; {
<pre><code>ok: [hqdc075] =&gt; {
&quot;profile_exists&quot;: {
&quot;changed&quot;: false,
&quot;msg&quot;: &quot;All items completed&quot;,
@ -391,7 +391,7 @@ if (!doNotTrack) {
<h3 id="修正後續task">修正後續task</h3>
<p>後面的task 稍微改一下,在指定 with_items 的時候,直接指定 profile_exists.results</p>
<p>接下來的用法就比較簡單了跟原本接stat 變數的語法差不多</p>
<pre tabindex="0"><code>- name: run firefox to create default profile
<pre><code>- name: run firefox to create default profile
become_user: &quot;{{ item.item.name }}&quot;
shell: &quot;firefox --headless &amp;&quot;
ignore_errors: True
@ -688,7 +688,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -313,7 +313,7 @@ if (!doNotTrack) {
<p>當user ip (ansible_default_ipv4.address) 在清單內 ( {{ iuser_list }} )時</p>
<p>會去加入一些文字到 /etc/environment</p>
<p>反之,則取消這一段文字</p>
<pre tabindex="0"><code>- name: get internet user list
<pre><code>- name: get internet user list
set_fact:
iuser_list: &quot;{{ ch['client_hosts']['abc.com'] |selectattr('iuser', 'defined')| list }}&quot;
@ -339,7 +339,7 @@ if (!doNotTrack) {
with_items: &quot;{{ iuser_list }}&quot;
</code></pre><p>先做出一個可以上internet 的 user list</p>
<p>內容大概長這樣</p>
<pre tabindex="0"><code>hwaddress: f4:4d:30:45:ee:6f', host: pc114', ipv4: 192.168.1.114', user: [liwa'], iuser: True
<pre><code>hwaddress: f4:4d:30:45:ee:6f', host: pc114', ipv4: 192.168.1.114', user: [liwa'], iuser: True
hwaddress: f4:4d:30:45:ef:aa', host: pc120', ipv4: 192.168.1.120', user: [wany'], iuser: True
</code></pre><p>然後判斷當client ip 在這個清單中時,就去修改,反之就刪除修改的部份</p>
<p>有權限上internet的電腦在一開始跑就卡關了這兩個task 都會被執行到</p>
@ -351,7 +351,7 @@ hwaddress: f4:4d:30:45:ef:aa', host: pc120', ipv4: 192.168.1.120', user: [wany']
<p>那怎麼解決呢?</p>
<p>把原本清單中的 ipv4 另外整理成一個list 然後再去比對client ip 有沒有在這個list 中</p>
<p>就會變成這樣</p>
<pre tabindex="0"><code>- name: get internet user ip list
<pre><code>- name: get internet user ip list
set_fact:
iuser_ip_list: &quot;{{ ch['client_hosts']['kw.com'] |selectattr('iuser', 'defined')| map(attribute='ipv4')|list }}&quot;
@ -665,7 +665,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -607,7 +607,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -308,7 +308,7 @@ if (!doNotTrack) {
<p>尤其是有牽涉到從外部導入yaml檔案時更是常常讓我不知道到底該怎麼抓出想要的變數</p>
<p>這次還是用selectattr 來處理,希望下次能夠記得&hellip;</p>
<p>首先是導入的yaml檔案內容長這樣</p>
<pre tabindex="0"><code>client_hosts:
<pre><code>client_hosts:
abc.com:
- host: hqdc021
ipv4: 192.168.11.21
@ -350,17 +350,17 @@ if (!doNotTrack) {
</code></pre><p>在playbook中首先先導入這個檔案</p>
<pre tabindex="0"><code>- name: load client_host
<pre><code>- name: load client_host
include_vars:
file: client_hosts.yml
name: ch
</code></pre><p>然後用這個剛剛導入的檔案,去做出想要的清單</p>
<p>像底下這個就是指定了client_hosts的 abc.com 這個域名底下iuser有被定義的資料再轉成list</p>
<pre tabindex="0"><code>- name: get internet user list
<pre><code>- name: get internet user list
set_fact:
iuser_list: &quot;{{ ch['client_host']['abc.com']|selectattr('iuser','defined')|list }}&quot;
</code></pre><p>然後就可以用來做condition了</p>
<pre tabindex="0"><code>- name: copy environment block to /etc/environment
<pre><code>- name: copy environment block to /etc/environment
copy:
content: |
PATH=&quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games&quot;
@ -658,7 +658,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -13,7 +13,7 @@
"articleSection" : "post",
"name" : "[筆記] Ansible how to use \u0027list\u0027 in yaml file ",
"headline" : "[筆記] Ansible how to use \u0027list\u0027 in yaml file ",
"description" : "\u003cp\u003e這幾天在玩ansible 時,碰到一個問題\u003c\/p\u003e\n\u003cp\u003e假如我有個yaml檔作為資料來源檔名是 abc.yml\u003c\/p\u003e\n\u003cp\u003e大概長這樣\u003c\/p\u003e\n\u003cpre tabindex=\u00220\u0022\u003e\u003ccode\u003e \u0026quot;teams\u0026quot;: [\n {\n \u0026quot;chinese_name\u0026quot;: \u0026quot;TEAM1\u0026quot;,\n \u0026quot;description\u0026quot;: \u0026quot;TEAM1\u0026quot;,\n \u0026quot;gid\u0026quot;: 10125,\n \u0026quot;location\u0026quot;: [\n \u0026quot;hq\u0026quot;\n ],\n \u0026quot;name\u0026quot;: \u0026quot;aa\u0026quot;,\n \u0026quot;users\u0026quot;: [\n \u0026quot;chen\u0026quot;,\n \u0026quot;chou\u0026quot;,\n \u0026quot;huani\u0026quot;,\n \u0026quot;yey\u0026quot;,\n \u0026quot;wa\u0026quot;\n ]\n },\n {\n \u0026quot;chinese_name\u0026quot;: \u0026quot;TEAM2\u0026quot;,\n \u0026quot;description\u0026quot;: \u0026quot;TEAM2\u0026quot;,\n \u0026quot;gid\u0026quot;: 10126,\n \u0026quot;location\u0026quot;: [\n \u0026quot;hq\u0026quot;\n ],\n \u0026quot;name\u0026quot;: \u0026quot;bb\u0026quot;,\n \u0026quot;users\u0026quot;: [\n \u0026quot;chhiao\u0026quot;,\n \u0026quot;chgc\u0026quot;,\n \u0026quot;chy\u0026quot;,\n \u0026quot;hsi\u0026quot;,\n \u0026quot;li\u0026quot;,\n \u0026quot;li\u0026quot;,\n \u0026quot;chgchi\u0026quot;\n ]\n }\n\t\t]\n\t\t\n\u003c\/code\u003e\u003c\/pre\u003e",
"description" : "\u003cp\u003e這幾天在玩ansible 時,碰到一個問題\u003c\/p\u003e\n\u003cp\u003e假如我有個yaml檔作為資料來源檔名是 abc.yml\u003c\/p\u003e\n\u003cp\u003e大概長這樣\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003e \u0026quot;teams\u0026quot;: [\n {\n \u0026quot;chinese_name\u0026quot;: \u0026quot;TEAM1\u0026quot;,\n \u0026quot;description\u0026quot;: \u0026quot;TEAM1\u0026quot;,\n \u0026quot;gid\u0026quot;: 10125,\n \u0026quot;location\u0026quot;: [\n \u0026quot;hq\u0026quot;\n ],\n \u0026quot;name\u0026quot;: \u0026quot;aa\u0026quot;,\n \u0026quot;users\u0026quot;: [\n \u0026quot;chen\u0026quot;,\n \u0026quot;chou\u0026quot;,\n \u0026quot;huani\u0026quot;,\n \u0026quot;yey\u0026quot;,\n \u0026quot;wa\u0026quot;\n ]\n },\n {\n \u0026quot;chinese_name\u0026quot;: \u0026quot;TEAM2\u0026quot;,\n \u0026quot;description\u0026quot;: \u0026quot;TEAM2\u0026quot;,\n \u0026quot;gid\u0026quot;: 10126,\n \u0026quot;location\u0026quot;: [\n \u0026quot;hq\u0026quot;\n ],\n \u0026quot;name\u0026quot;: \u0026quot;bb\u0026quot;,\n \u0026quot;users\u0026quot;: [\n \u0026quot;chhiao\u0026quot;,\n \u0026quot;chgc\u0026quot;,\n \u0026quot;chy\u0026quot;,\n \u0026quot;hsi\u0026quot;,\n \u0026quot;li\u0026quot;,\n \u0026quot;li\u0026quot;,\n \u0026quot;chgchi\u0026quot;\n ]\n }\n\t\t]\n\t\t\n\u003c\/code\u003e\u003c\/pre\u003e",
"inLanguage" : "en",
"author" : "Eric Chang",
"creator" : "Eric Chang",
@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -307,7 +307,7 @@ if (!doNotTrack) {
<p>這幾天在玩ansible 時,碰到一個問題</p>
<p>假如我有個yaml檔作為資料來源檔名是 abc.yml</p>
<p>大概長這樣</p>
<pre tabindex="0"><code> &quot;teams&quot;: [
<pre><code> &quot;teams&quot;: [
{
&quot;chinese_name&quot;: &quot;TEAM1&quot;,
&quot;description&quot;: &quot;TEAM1&quot;,
@ -345,7 +345,7 @@ if (!doNotTrack) {
]
</code></pre><p>稍微整理一下,比較容易看</p>
<pre tabindex="0"><code> &quot;teams&quot;: [
<pre><code> &quot;teams&quot;: [
{
&quot;chinese_name&quot;: &quot;TEAM1&quot;,
&quot;description&quot;: &quot;TEAM1&quot;,
@ -365,7 +365,7 @@ if (!doNotTrack) {
]
</code></pre><p>在 ansible playbook 中,我用 include_vars 把這個檔案叫進來</p>
<pre tabindex="0"><code>- name: load teams.yml
<pre><code>- name: load teams.yml
tags: env
include_vars:
file: files/kw/teams.yml
@ -374,7 +374,7 @@ if (!doNotTrack) {
<p>那如果我想要用users這個清單中的id作為建立帳號的來源</p>
<p>我就可以用底下這段,先把 users 裡面的內容,指給 dc_users 這個 localvar</p>
<p>然後加上 when 的條件,限定只有 name == aa 的 users 才會被指定給 dc_users</p>
<pre tabindex="0"><code>- name: set aa_users
<pre><code>- name: set aa_users
tags: env
set_fact:
aa_users: &quot;{{ item.users }}&quot;
@ -382,7 +382,7 @@ if (!doNotTrack) {
with_items: &quot;{{ teams }}&quot;
</code></pre><p>這樣子執行下來是沒有問題的,不過就是醜了點 XD</p>
<p>之後要抓 user 帳號時,就可以直接用 aa_users 來跑迴圈</p>
<pre tabindex="0"><code>- name: create folder for aa_users
<pre><code>- name: create folder for aa_users
tags: env
file:
path: &quot;/tmp/{{ item }}&quot;
@ -395,7 +395,7 @@ if (!doNotTrack) {
<p>p.s 講話一定要參雜用英文單字,這樣看起來比較屌&hellip;</p>
<p>所以沒辦法直接在底下的create folder task 直接叫出來</p>
<p>如果直接叫 teams.users ,那會是一個清單</p>
<pre tabindex="0"><code> [&quot;chen&quot;,&quot;chou&quot;,&quot;huani&quot;,&quot;yey&quot;,&quot;wa&quot;]
<pre><code> [&quot;chen&quot;,&quot;chou&quot;,&quot;huani&quot;,&quot;yey&quot;,&quot;wa&quot;]
</code></pre><p>然後 ansible 也很厲害,就這個樣子,他還是會去忠實的執行建立目錄</p>
<p>所以在 /tmp 底下就會多出一個</p>
<blockquote>
@ -693,7 +693,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -311,7 +311,7 @@ if (!doNotTrack) {
<p>但是一開始在執行的時候,碰到了一些錯誤</p>
<h3 id="錯誤訊息">錯誤訊息</h3>
<p>playbook 在執行時的錯誤訊息如下</p>
<pre tabindex="0"><code>TASK [firefox : Create profiles] *************************************************************************************************
<pre><code>TASK [firefox : Create profiles] *************************************************************************************************
Tuesday 24 December 2019 14:28:58 +0800 (0:00:00.067) 0:00:00.946 ******
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: Exception: b'Error: no DISPLAY environment variable specified\n'
fatal: [hqdc075]: FAILED! =&gt; {
@ -359,7 +359,7 @@ hqdc075 : ok=3 changed=1 unreachable=0 failed=1 s
<p>發現可以用 ssh_args 加入-o xxxxxx</p>
<p>可是又找不到 ssh 怎麼用這個 -o</p>
<p>只好又回去找辣個男人問看看ssh的參數</p>
<pre tabindex="0"><code> -o option
<pre><code> -o option
Can be used to give options in the format used in the configuration file. This is useful for specifying options
for which there is no separate command-line flag. For full details of the options listed below, and their possi
ble values, see ssh_config(5).
@ -411,14 +411,14 @@ hqdc075 : ok=3 changed=1 unreachable=0 failed=1 s
<p>但是真的不曉得怎麼區分這兩種</p>
<p>反正只有兩個,就 try and error 吧</p>
<p>在ansible 中修改inventory file ,在想要修改的 host 後面加入 ssh_args=&quot;-o ForwardAgent=yes&quot;</p>
<pre tabindex="0"><code>hqdc075 ansible_host=192.168.11.75 ssh_args=&quot;-o ForwardAgent=yes&quot;
<pre><code>hqdc075 ansible_host=192.168.11.75 ssh_args=&quot;-o ForwardAgent=yes&quot;
</code></pre><p>或者 ansible.cfg</p>
<p>在[ssh_connection]區段中</p>
<p>加入</p>
<pre tabindex="0"><code>ssh_args=&quot;-o ForwardAgent=yes&quot;
<pre><code>ssh_args=&quot;-o ForwardAgent=yes&quot;
</code></pre><p>再跑一次 就看到正常執行了</p>
<pre tabindex="0"><code>PLAY RECAP ************************************************************************************************
<pre><code>PLAY RECAP ************************************************************************************************
hqdc075 : ok=7 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Tuesday 24 December 2019 14:37:37 +0800 (0:00:01.027) 0:00:17.879 ******
@ -433,7 +433,7 @@ firefox : debug ex ---- 0.07s
</code></pre><p>這次的過程順便了解了ssh 加入 -X 可以在ssh session 中執行遠端主機上的圖形界面程式</p>
<p>例如</p>
<pre tabindex="0"><code>ssh -X username@hostname firefox
<pre><code>ssh -X username@hostname firefox
</code></pre><p>就可以透過ssh 執行遠端的firefox</p>
<p>如下圖</p>
<p><img src="https://i.imgur.com/5xoDFRe.png" alt=""></p>
@ -728,7 +728,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -24,7 +24,7 @@
"datePublished": "2021-08-26 12:08:43 \u002b0800 CST",
"dateModified" : "2021-08-26 12:08:43 \u002b0800 CST",
"url" : "https:\/\/h.cowbay.org\/post\/auto-fetch-wildcard-ssl-certs-acme-dns-lego\/",
"wordCount" : "730",
"wordCount" : "920",
"image" : "https://h.cowbay.orghttps://h.cowbay.org/images/post-default-8.jpg"",
"keywords" : [ ""acme"",""acme-dns"",""lego"",""ssl"","Blog" ]
}
@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -308,7 +308,7 @@ if (!doNotTrack) {
<p>不過LAN裡面的機器越來越多每次看到警告說沒有加密的訊息就有點不爽之前用了很多方式去申請全域憑證申請倒是還好沒太多問題。但是一碰到要更新就都無法自動因為都會要求去修改DNS 的 TXT 或者是 CNAME 記錄。</p>
<p>一般來說如果是其他DNS 供應商大部分都會提供API那就還好。 BUT !! (對然生就是離不開這個BUT &hellip;) 我們的域名是老闆在 iwantmyname 買的,一開始是給 webfaction 代管後來webfaction 被godaddy 買走,就轉到 namecheap 去(我也不知道為什麼不在godaddy 就好)。</p>
<p>DNS 管理基本上都是大同小異啦可是namecheap 免費賬戶不提供 API 應該說要使用namecheap 提供的API ,需要滿足以下的條件</p>
<pre tabindex="0"><code>I want to enable API for my account. Are there any specific requirements?
<pre><code>I want to enable API for my account. Are there any specific requirements?
We have certain requirements for activation to prevent system abuse. In order to have API enabled for your account, you should meet one of the following requirements:
@ -335,13 +335,13 @@ tar zxvf acme-dns_0.8_linux_amd64.tar.gz &amp;&amp; sudo mv acme-dns /usr/local/
<p>本機如果有開firewall ,記得要放行 udp 53</p>
<hr>
<h4 id="設定acme-dns">設定acme-dns</h4>
<pre tabindex="0"><code>#建立 acme-dns 目錄
<pre><code>#建立 acme-dns 目錄
mkdir -p /etc/acme-dns
mkdir -p /var/lib/acme-dns
#建立 acme-dns 設定檔
sudo vim /etc/acme-dns/config.cfg
</code></pre><p>config 的內容如下,順便補上一些自己的註解</p>
<pre tabindex="0"><code>#/etc/acme-dns/config.cfg
<pre><code>#/etc/acme-dns/config.cfg
[general]
# DNS interface
# 本來預設是只有 :53 在某些VPS 上會出錯,所以改成 0.0.0.0:53
@ -397,9 +397,9 @@ logformat = &quot;text&quot;
</code></pre><p>編輯完後,存檔離開。</p>
<p>新增 acme-dns.service 的systemd config</p>
<pre tabindex="0"><code>sudo vim /etc/systemd/system/acme-dns.service
<pre><code>sudo vim /etc/systemd/system/acme-dns.service
</code></pre><p>內容如下</p>
<pre tabindex="0"><code># /etc/systemd/system/acme-dns.service
<pre><code># /etc/systemd/system/acme-dns.service
[Unit]
Description=ACMD DNS
After=network.target
@ -412,7 +412,7 @@ Restart=on-failure
WantedBy=multi-user.target
</code></pre><p>存檔離開,並啟用 acme-dns service</p>
<pre tabindex="0"><code>sudo systemctl daemon-reload
<pre><code>sudo systemctl daemon-reload
sudo systemctl enable --now acme-dns.service
# 檢查一下狀態是否正常
sudo systemctl status acme-dns
@ -430,12 +430,12 @@ curl http://localhost:9000/health
<h5 id="透過lego-取得憑證">透過lego 取得憑證</h5>
<p>只要確認上面的防火牆設定、acme-dns 設定、以及 DNS 的修改生效之後剩下的lego 指令就很簡單了</p>
<p><a href="https://go-acme.github.io/lego/dns/acme-dns/">https://go-acme.github.io/lego/dns/acme-dns/</a></p>
<pre tabindex="0"><code># 第一個ACME_DNS_API_BASE是剛剛設定acme-dns API port
<pre><code># 第一個ACME_DNS_API_BASE是剛剛設定acme-dns API port
# 然後 ACME_DNS_STORAGE_PATH 是lego存放賬戶資料的地方
# 後面就是lego 的指令
ACME_DNS_API_BASE=http://localhost:9000 ACME_DNS_STORAGE_PATH=/home/minion/.lego-acme-dns-accounts.json lego --email changch@abc.com --dns acme-dns --domains *.abc.com run
</code></pre><p>執行完成後,會在目錄底下產生一個叫 .lego 的目錄,用來存放憑證檔案</p>
<pre tabindex="0"><code>2021-08-26 11:55:16 [minion@hqs058 ~]$ ls -la .lego/certificates/
<pre><code>2021-08-26 11:55:16 [minion@hqs058 ~]$ ls -la .lego/certificates/
total 28
drwx------ 2 minion sudo 4096 Aug 26 09:35 .
drwx------ 4 minion sudo 4096 Aug 26 09:33 ..
@ -448,20 +448,20 @@ drwx------ 4 minion sudo 4096 Aug 26 09:33 ..
</code></pre><p>沒錯,就這麼簡單!!</p>
<p>甚至於我要撤銷這些憑證也很簡單!!!</p>
<p>把最後面的 run 改成 revoke 就可以了!</p>
<pre tabindex="0"><code>ACME_DNS_API_BASE=http://localhost:9000 ACME_DNS_STORAGE_PATH=/home/minion/.lego-acme-dns-accounts.json lego --email changch@abc.com --dns acme-dns --domains *.abc.com revoke
<pre><code>ACME_DNS_API_BASE=http://localhost:9000 ACME_DNS_STORAGE_PATH=/home/minion/.lego-acme-dns-accounts.json lego --email changch@abc.com --dns acme-dns --domains *.abc.com revoke
2021/08/26 11:59:13 Trying to revoke certificate for domain *.abc.com
2021/08/26 11:59:14 Certificate was revoked.
2021/08/26 11:59:14 Certificate was archived for domain: *.abc.com
</code></pre><p>再來跑一次申請新憑證測試看看</p>
<pre tabindex="0"><code>ACME_DNS_API_BASE=http://localhost:9000 ACME_DNS_STORAGE_PATH=/home/minion/.lego-acme-dns-accounts.json lego --email changch@abc.com --dns acme-dns --domains *.abc.com run
<pre><code>ACME_DNS_API_BASE=http://localhost:9000 ACME_DNS_STORAGE_PATH=/home/minion/.lego-acme-dns-accounts.json lego --email changch@abc.com --dns acme-dns --domains *.abc.com run
2021/08/26 12:00:51 [INFO] [*.abc.com] acme: Obtaining bundled SAN certificate
2021/08/26 12:00:52 [INFO] [*.abc.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/25150773810
2021/08/26 12:00:52 [INFO] [*.abc.com] acme: authorization already valid; skipping challenge
2021/08/26 12:00:52 [INFO] [*.abc.com] acme: Validations succeeded; requesting certificates
2021/08/26 12:00:53 [INFO] [*.abc.com] Server responded with a certificate.
</code></pre><p>同樣地會產生新的ssl 憑證</p>
<pre tabindex="0"><code>2021-08-26 12:00:53 [minion@hqs058 ~]$ ls -la .lego/certificates/
<pre><code>2021-08-26 12:00:53 [minion@hqs058 ~]$ ls -la .lego/certificates/
total 28
drwx------ 2 minion sudo 4096 Aug 26 12:00 .
drwx------ 5 minion sudo 4096 Aug 26 11:59 ..
@ -472,12 +472,41 @@ drwx------ 5 minion sudo 4096 Aug 26 11:59 ..
2021-08-26 12:02:37 [minion@hqs058 ~]$
</code></pre><p>超方便的啊!!!!</p>
<p>後面要更新就把指令最後的 run 改成 renew</p>
<pre tabindex="0"><code>ACME_DNS_API_BASE=http://localhost:9000 ACME_DNS_STORAGE_PATH=/home/minion/.lego-acme-dns-accounts.json lego --email changch@abc.com --dns acme-dns --domains *.abc.com renew
<pre><code>ACME_DNS_API_BASE=http://localhost:9000 ACME_DNS_STORAGE_PATH=/home/minion/.lego-acme-dns-accounts.json lego --email changch@abc.com --dns acme-dns --domains *.abc.com renew
2021/08/26 12:04:00 [*.abc.com] The certificate expires in 89 days, the number of days defined to perform the renewal is 30: no renewal.
</code></pre><p>因為是剛剛才要到的憑證,當然是不能更新啦&hellip;</p>
<p>把這個指令寫到 crontab ,以後時間到了就會自動更新憑證</p>
<p>後續再搭配 ansible 來抓新的憑證,派送到其他伺服器去</p>
<p>終於可以不用再為ssl 憑證煩惱了!!!</p>
<h3 id="更新-renew-過程">更新 renew 過程</h3>
<p>剛剛在巡機器(人家是巡田水,我在巡機器&hellip; )</p>
<p>剛好看到這台reverse proxy ,然後算算時間也差不多了</p>
<p>就順手跑了一次更新也順利update 了</p>
<p>之後應該就是用這種方式繼續下去吧,除非有更簡便的方法,不然不想再搞這個憑證的問題了!</p>
<pre><code>2021/10/28 13:53:36 [INFO] [*.abc.com] acme: Trying renewal with 645 hours remaining
2021/10/28 13:53:36 [INFO] [*.abc.com] acme: Obtaining bundled SAN certificate
2021/10/28 13:53:37 [INFO] [*.abc.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/43963334430
2021/10/28 13:53:37 [INFO] [*.abc.com] acme: use dns-01 solver
2021/10/28 13:53:37 [INFO] [*.abc.com] acme: Preparing to solve DNS-01
2021/10/28 13:53:37 [INFO] [*.abc.com] acme: Trying to solve DNS-01
2021/10/28 13:53:37 [INFO] [*.abc.com] acme: Checking DNS record propagation using [8.8.8.8:53 192.168.0.10:53 168.95.1.1:53 127.0.0.53:53]
2021/10/28 13:53:39 [INFO] Wait for propagation [timeout: 1m0s, interval: 2s]
2021/10/28 13:53:47 [INFO] [*.abc.com] The server validated our request
2021/10/28 13:53:47 [INFO] [*.abc.com] acme: Cleaning DNS-01 challenge
2021/10/28 13:53:47 [INFO] [*.abc.com] acme: Validations succeeded; requesting certificates
2021/10/28 13:53:48 [INFO] [*.abc.com] Server responded with a certificate.
</code></pre><p>看一下憑證的狀況,沒什麼問題,日期也更新了</p>
<pre><code>2021-10-28 14:09:06 [mini@s058 ~]$ ls -lart ~/.lego/certificates/
total 28
drwx------ 5 minion sudo 4096 Aug 26 11:59 ..
drwx------ 2 minion sudo 4096 Aug 26 12:00 .
-rw------- 1 minion sudo 227 Oct 28 13:53 _.abc.com.key
-rw------- 1 minion sudo 238 Oct 28 13:53 _.abc.com.json
-rw------- 1 minion sudo 3751 Oct 28 13:53 _.abc.com.issuer.crt
-rw------- 1 minion sudo 5325 Oct 28 13:53 _.abc.com.crt
2021-10-28 14:10:12 [mini@s058 ~]$
</code></pre>
</article>
</div>
@ -770,7 +799,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -617,7 +617,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -307,7 +307,7 @@ if (!doNotTrack) {
<p>這兩天在測試pgbackrest ,簡單筆記一下測試狀況</p>
<h4 id="install">install</h4>
<p>在ubuntu 18.04 安裝pgbackrest 很簡單內建在apt裡面所以可以直接用</p>
<pre tabindex="0"><code>sudo apt install pgbackrest
<pre><code>sudo apt install pgbackrest
</code></pre><p>進行安裝</p>
<h4 id="config">config</h4>
<p>pgbackrest 的設定檔在 /etc/pgbackrest/pgbackrest.conf
@ -317,7 +317,7 @@ if (!doNotTrack) {
要特別注意要不就是每次都指定config路徑要不就是把那個錯誤的設定檔幹掉</p>
<h4 id="config-內容">config 內容</h4>
<p>內容其實很簡單</p>
<pre tabindex="0"><code>postgres@hqdc039:~$ cat /etc/pgbackrest/pgbackrest.conf
<pre><code>postgres@hqdc039:~$ cat /etc/pgbackrest/pgbackrest.conf
[demo]
pg1-path=/database/11/main
@ -361,7 +361,7 @@ process-max=4
當然要新增其他進階的,就要自己研究了,內容有夠長
<a href="https://pgbackrest.org/configuration.html">https://pgbackrest.org/configuration.html</a></p>
<p>在postgresql 中,要新增一些設定,主要是 archive_command</p>
<pre tabindex="0"><code>postgres@hqdc039:~$ grep -A 100 &quot;for pgbackrest&quot; /etc/postgresql/11/main/postgresql.conf
<pre><code>postgres@hqdc039:~$ grep -A 100 &quot;for pgbackrest&quot; /etc/postgresql/11/main/postgresql.conf
#for pgbackrest
archive_command = 'pgbackrest --stanza=demo archive-push %p'
archive_mode = on
@ -375,7 +375,7 @@ postgres@hqdc039:~$
<p><strong>max_wal_senders</strong>
簡單說就是定義在抄寫wal 的時候,可以同時抄給幾台
這是postgresql 的說明</p>
<pre tabindex="0"><code>the maximum number of simultaneously running WAL sender processes
<pre><code>the maximum number of simultaneously running WAL sender processes
</code></pre><p><strong>wal_level</strong>
有三種等級,參考 <a href="https://blog.csdn.net/pg_hgdb/article/details/78666719">https://blog.csdn.net/pg_hgdb/article/details/78666719</a></p>
<ul>
@ -391,14 +391,14 @@ postgres@hqdc039:~$
這次環境很簡單,所以就只有設定一個
依照上面的pgbackrest.conf 內容設定好了需要先建立這個stanza
指令:</p>
<pre tabindex="0"><code>postgres@hqdc039:~$ pgbackrest --stanza=demo stanza-create --log-level-console=detail
<pre><code>postgres@hqdc039:~$ pgbackrest --stanza=demo stanza-create --log-level-console=detail
2019-09-04 16:21:40.700 P00 INFO: stanza-create command begin 2.16: --log-level-console=detail --pg1-path=/database/11/main --repo1-cipher-pass=&lt;redacted&gt; --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --stanza=demo
2019-09-04 16:21:41.525 P00 INFO: stanza-create command end: completed successfully (825ms)
postgres@hqdc039:~$
</code></pre><p>接著就可以執行備份了</p>
<h4 id="backup">backup</h4>
<p>備份指令也很簡單要注意的是如果不帶參數pgbackrest 會自行決定要用incremental或者是 full backup</p>
<pre tabindex="0"><code>postgres@hqdc039:~$ pgbackrest --stanza=demo --log-level-console=detail backup
<pre><code>postgres@hqdc039:~$ pgbackrest --stanza=demo --log-level-console=detail backup
2019-09-04 16:41:17.458 P00 INFO: backup command begin 2.16: --log-level-console=detail --pg1-path=/database/11/main --repo1-cipher-pass=&lt;redacted&gt; --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo1-retention-full=2 --stanza=demo
2019-09-04 16:41:17.697 P00 INFO: last backup label = 20190904-134245F, version = 2.16
2019-09-04 16:41:18.607 P00 INFO: execute non-exclusive pg_start_backup() with label &quot;pgBackRest backup started at 2019-09-04 16:41:17&quot;: backup begins after the next regular checkpoint completes
@ -425,7 +425,7 @@ WARN: a timeline switch has occurred since the last backup, enabling delta check
2019-09-04 16:41:25.215 P00 INFO: expire command end: completed successfully (21ms)
postgres@hqdc039:~$
</code></pre><p>執行後,可以檢查一下</p>
<pre tabindex="0"><code>postgres@hqdc039:~$ pgbackrest --stanza=demo --log-level-console=info info
<pre><code>postgres@hqdc039:~$ pgbackrest --stanza=demo --log-level-console=info info
stanza: demo
status: ok
cipher: aes-256-cbc
@ -454,12 +454,12 @@ postgres@hqdc039:~$
<a href="https://github.com/pgbackrest/pgbackrest/issues/800">https://github.com/pgbackrest/pgbackrest/issues/800</a>
才找到正確的用法</p>
<p>先把DB整個砍掉</p>
<pre tabindex="0"><code>postgres@hqdc034:/zp/database$ time dropdb demo
<pre><code>postgres@hqdc034:/zp/database$ time dropdb demo
</code></pre><p>然後停止postgresql 服務</p>
<pre tabindex="0"><code>postgres@hqdc034:/zp/database$ pg_ctlcluster 10 main stop
<pre><code>postgres@hqdc034:/zp/database$ pg_ctlcluster 10 main stop
sudo systemctl stop postgresql@10-main
</code></pre><p>接著就可以來下指令還原了</p>
<pre tabindex="0"><code>postgres@hqdc034:/zp/database$ time pgbackrest --stanza=demo --log-level-console=info --delta --type=time &quot;--target=2019-09-05 11:00:00.268248+08&quot; --target-action=promote restore
<pre><code>postgres@hqdc034:/zp/database$ time pgbackrest --stanza=demo --log-level-console=info --delta --type=time &quot;--target=2019-09-05 11:00:00.268248+08&quot; --target-action=promote restore
2019-09-05 11:15:57.480 P00 INFO: restore command begin 2.13: --delta --log-level-console=info --pg1-path=/zp/database/10/main --process-max=4 --repo1-path=/var/lib/pgbackrest --stanza=demo --target=&quot;2019-09-05 11:00:00.268248+08&quot; --target-action=promote --type=time
2019-09-05 11:15:57.624 P00 INFO: restore backup set 20190905-111109F
2019-09-05 11:15:57.947 P00 INFO: remove invalid files/paths/links from /zp/database/10/main
@ -473,15 +473,15 @@ user 0m6.896s
sys 0m0.832s
</code></pre><p>在DB目錄中會產生一個recovery.conf這是用來給 postgresql 看的檔案,裡面會紀錄怎麼還原、以及還原的類型、時間點,這邊指定要恢復到 <em><strong>2019-09-05 11:00:00.268248+08</strong></em>
這個時間格式要看資料庫的設定,可以藉由以下指令得到</p>
<pre tabindex="0"><code>postgres@hqdc034:/zp/database$ psql -Atc &quot;select current_timestamp&quot;
<pre><code>postgres@hqdc034:/zp/database$ psql -Atc &quot;select current_timestamp&quot;
2019-09-05 11:14:27.268248+08
</code></pre><p>檢查一下recovery.conf</p>
<pre tabindex="0"><code>postgres@hqdc034:/zp/database$ cat /zp/database/10/main/recovery.conf
<pre><code>postgres@hqdc034:/zp/database$ cat /zp/database/10/main/recovery.conf
restore_command = 'pgbackrest --log-level-console=info --stanza=demo archive-get %f &quot;%p&quot;'
recovery_target_time = '2019-09-05 11:00:00.268248+08'
recovery_target_action = 'promote'
</code></pre><p>重新啟動postgresql 然後看看被砍掉的demo DB有沒有回來</p>
<pre tabindex="0"><code>postgres@hqdc034:/zp/database$ pg_ctlcluster 10 main start
<pre><code>postgres@hqdc034:/zp/database$ pg_ctlcluster 10 main start
Warning: the cluster will not be running as a systemd service. Consider using systemctl:
sudo systemctl start postgresql@10-main
postgres@hqdc034:/zp/database$ psql
@ -790,7 +790,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -311,7 +311,7 @@ if (!doNotTrack) {
不過沒想到用了幾個指令,都沒辦法辨別出正確的型號</p>
<h4 id="fdisk">fdisk</h4>
<p>沒有看到廠牌、型號</p>
<pre tabindex="0"><code>2019-09-10 13:20:55 [minion@hqdc075 ~]$ sudo fdisk /dev/sdb
<pre><code>2019-09-10 13:20:55 [minion@hqdc075 ~]$ sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
@ -332,7 +332,7 @@ Command (m for help): q
</code></pre><h4 id="inxi">inxi</h4>
<p>內接的intel ssd 有看到不過外接的這顆SSD沒有model 可是可以看到序號
我在想這個序號應該是外接盒的序號而不是SSD的</p>
<pre tabindex="0"><code>2019-09-10 13:21:51 [minion@hqdc075 ~]$ sudo inxi -Dxx
<pre><code>2019-09-10 13:21:51 [minion@hqdc075 ~]$ sudo inxi -Dxx
Drives: HDD Total Size: 640.2GB (11.3% used)
ID-1: /dev/nvme0n1 model: INTEL_SSDPEKKF256G7L size: 256.1GB serial: BTPYXXXXX firmware: 123P
ID-2: USB /dev/sda model: SD/MMC size: 128.1GB serial: 201205XXXXXX-0:0 temp: 0C
@ -340,7 +340,7 @@ Drives: HDD Total Size: 640.2GB (11.3% used)
2019-09-10 13:21:55 [minion@hqdc075 ~]$
</code></pre><h4 id="dmesg">dmesg</h4>
<p>一樣,也是認不出 SSD ,但是有抓到外接盒</p>
<pre tabindex="0"><code>[16622.930915] hub 4-0:1.0: USB hub found
<pre><code>[16622.930915] hub 4-0:1.0: USB hub found
[16622.930926] hub 4-0:1.0: 2 ports detected
[16623.372533] usb 4-1: new SuperSpeedPlus Gen 2 USB device number 2 using xhci_hcd
[16623.393844] usb 4-1: New USB device found, idVendor=152d, idProduct=0562, bcdDevice= 2.04
@ -351,7 +351,7 @@ Drives: HDD Total Size: 640.2GB (11.3% used)
</code></pre><h4 id="直接測試吧">直接測試吧</h4>
<p>不看型號了,直接測試吧!先切好分割、格式化,然後掛載到 /mnt再用 dd 測試寫入
結果如下</p>
<pre tabindex="0"><code>2019-09-10 13:24:03 [minion@hqdc075 ~]$ for i in {4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384};do sudo dd if=/dev/zero of=/mnt/&quot;$i&quot;k bs=&quot;$i&quot;k count=1k;done
<pre><code>2019-09-10 13:24:03 [minion@hqdc075 ~]$ for i in {4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384};do sudo dd if=/dev/zero of=/mnt/&quot;$i&quot;k bs=&quot;$i&quot;k count=1k;done
1024+0 records in
1024+0 records out
4194304 bytes (4.2 MB, 4.0 MiB) copied, 0.013719 s, 306 MB/s
@ -399,7 +399,7 @@ Drives: HDD Total Size: 640.2GB (11.3% used)
合理解釋了為什麼當寫入8G的檔案時速度會掉那麼慘跟SATA硬碟差不多了</p>
<h4 id="用iobench-測試看看">用iobench 測試看看</h4>
<p>得到一樣的結論8G左右就會把cache塞暴然後掉速</p>
<pre tabindex="0"><code>2019-09-10 13:44:59 [changch@hqdc075 iobench]$ sudo ./iobench.sh --sync --dir /mnt --megabytes 8192
<pre><code>2019-09-10 13:44:59 [changch@hqdc075 iobench]$ sudo ./iobench.sh --sync --dir /mnt --megabytes 8192
Target directory: /mnt
Testfile size: 8192 x 1 Megabyte
@ -432,7 +432,7 @@ Start 5 of 5...
Done.
2019-09-10 13:47:40 [changch@hqdc075 iobench]$
</code></pre><p>那如果不用8G的檔案大小來測試呢看起來是比較正常一點</p>
<pre tabindex="0"><code>2019-09-10 13:47:40 [changch@hqdc075 iobench]$ sudo ./iobench.sh --sync --dir /mnt --megabytes 4096
<pre><code>2019-09-10 13:47:40 [changch@hqdc075 iobench]$ sudo ./iobench.sh --sync --dir /mnt --megabytes 4096
Target directory: /mnt
Testfile size: 4096 x 1 Megabyte
@ -468,7 +468,7 @@ Done.
<p>試試看這次的目標,用 external nvme ssd 跑資料庫會不會跟放在本機的PCI-E SSD 有所差距?</p>
<h4 id="data_directory-in-internal-pcie-ssd">data_directory in internal pcie-ssd</h4>
<p><strong>initialize pgbench database</strong></p>
<pre tabindex="0"><code>2019-09-10 13:52:35 [minion@hqdc075 ~]$ sudo su - postgres
<pre><code>2019-09-10 13:52:35 [minion@hqdc075 ~]$ sudo su - postgres
postgres@hqdc075:~$ createdb pgbench
postgres@hqdc075:~$ pgbench -i -U postgres -s 10 pgbench
NOTICE: table &quot;pgbench_history&quot; does not exist, skipping
@ -490,7 +490,7 @@ vacuum...
set primary keys...
done.
</code></pre><p><strong>run pgbench</strong></p>
<pre tabindex="0"><code>postgres@hqdc075:~$ pgbench -t 10 -c 100 -S -U postgres pgbench
<pre><code>postgres@hqdc075:~$ pgbench -t 10 -c 100 -S -U postgres pgbench
starting vacuum...end.
transaction type: &lt;builtin: select only&gt;
scaling factor: 10
@ -516,7 +516,7 @@ tps = 26643.223990 (including connections establishing)
tps = 26659.061459 (excluding connections establishing)
</code></pre><h4 id="data_directory-in-external-nvme-ssd">data_directory in external NVME SSD</h4>
<p><strong>initialize pgbench database</strong></p>
<pre tabindex="0"><code>postgres@hqdc075:~$ pgbench -i -U postgres -s 10 pgbench
<pre><code>postgres@hqdc075:~$ pgbench -i -U postgres -s 10 pgbench
creating tables...
100000 of 1000000 tuples (10%) done (elapsed 0.08 s, remaining 0.70 s)
200000 of 1000000 tuples (20%) done (elapsed 0.19 s, remaining 0.76 s)
@ -534,7 +534,7 @@ done.
</code></pre><p><strong>run pgbench</strong>
可以看到兩邊的結果其實是差不多的,作為資料庫備份是一定沒有問題
至於能不能直接作為資料庫空間使用?我想也許可以嘗試看看..</p>
<pre tabindex="0"><code>postgres@hqdc075:~$ pgbench -t 10 -c 100 -S -U postgres pgbench
<pre><code>postgres@hqdc075:~$ pgbench -t 10 -c 100 -S -U postgres pgbench
starting vacuum...end.
transaction type: &lt;builtin: select only&gt;
scaling factor: 10
@ -564,7 +564,7 @@ postgres@hqdc075:~$
或許要找找看其他的測試方法</p>
<hr>
<p>接下來直接用 restore 測試</p>
<pre tabindex="0"><code>#### restore 5G database with external nvme ssd
<pre><code>#### restore 5G database with external nvme ssd
postgres@hqdc075:~$ createdb demo
postgres@hqdc075:~$ time psql demo &lt; /tmp/demo.sql
SET
@ -576,7 +576,7 @@ user 0m2.894s
sys 0m0.504s
postgres@hqdc075:~$
</code></pre><h4 id="restore-5g-database-with-internal-pci-e-nvme-ssd">restore 5G database with internal pci-e nvme ssd</h4>
<pre tabindex="0"><code>postgres@hqdc075:~$ dropdb demo
<pre><code>postgres@hqdc075:~$ dropdb demo
postgres@hqdc075:~$ createdb demo
postgres@hqdc075:~$ time psql demo &lt; /tmp/demo.sql
SET
@ -590,7 +590,7 @@ postgres@hqdc075:~$
</code></pre><p>看起來是沒有什麼區別,那如果是外接的 SATA SSD呢</p>
<hr>
<p>dmesg 看得到型號耶..</p>
<pre tabindex="0"><code>[23995.478928] usb 2-4: new SuperSpeed Gen 1 USB device number 3 using xhci_hcd
<pre><code>[23995.478928] usb 2-4: new SuperSpeed Gen 1 USB device number 3 using xhci_hcd
[23995.506134] usb 2-4: New USB device found, idVendor=2109, idProduct=0715, bcdDevice= 3.36
[23995.506141] usb 2-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[23995.506145] usb 2-4: Product: 30848
@ -609,7 +609,7 @@ postgres@hqdc075:~$
2019-09-10 14:24:54 [minion@hqdc075 ~]$
</code></pre><p><strong>restore 5G database with external sata SSD</strong></p>
<p>很意外的,速度居然還是差不多??</p>
<pre tabindex="0"><code>postgres@hqdc075:~$ createdb demo
<pre><code>postgres@hqdc075:~$ createdb demo
postgres@hqdc075:~$ time psql demo &lt; /tmp/demo.sql
SET
...
@ -621,7 +621,7 @@ sys 0m0.640s
postgres@hqdc075:~$
</code></pre><p><strong>run pgebnech</strong></p>
<p>這個差很多了tps 從前面的 26000 掉到剩下 2800 ,差十倍左右!</p>
<pre tabindex="0"><code>postgres@hqdc075:~$ pgbench -t 10 -c 100 -S -U postgres pgbench
<pre><code>postgres@hqdc075:~$ pgbench -t 10 -c 100 -S -U postgres pgbench
starting vacuum...end.
transaction type: &lt;builtin: select only&gt;
scaling factor: 10
@ -929,7 +929,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -319,10 +319,10 @@ if (!doNotTrack) {
<p><a href="https://github.com/solidnerd/docker-bookstack">https://github.com/solidnerd/docker-bookstack</a></p>
<p>因為都轉成docker了所以安裝很簡單
先git clone回來</p>
<pre tabindex="0"><code>git clone https://github.com/solidnerd/docker-bookstack
<pre><code>git clone https://github.com/solidnerd/docker-bookstack
</code></pre><p>然後依照他的說明建立一個docker-compose.yml檔案再視情況修改</p>
<p>底下是我的docker-compose.yml內容</p>
<pre tabindex="0"><code> version: '2'
<pre><code> version: '2'
services:
mysql:
image: mysql:5.7.21
@ -358,7 +358,7 @@ if (!doNotTrack) {
<p>如果前面搭配 caddy 之類的反向代理,那不用去記 port 也沒關係。</p>
<p>好了之後,就執行 docker-compose up -d</p>
<p>然後 docker ps -a 看一下執行狀況</p>
<pre tabindex="0"><code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<pre><code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b3333eabf30 solidnerd/bookstack:0.24.1 &quot;/docker-entrypoint.…&quot; 4 hours ago Exited (0) About an hour ago docker-bookstack_bookstack_1
b8d74048eba1 mysql:5.7.21 &quot;docker-entrypoint.s…&quot; 4 hours ago Exited (0) About an hour ago docker-bookstack_mysql_1
</code></pre><p>應該可以順利跑起來</p>
@ -653,7 +653,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -321,7 +321,7 @@ if (!doNotTrack) {
<p>好吧,罵完就算了,還是要想辦法解決,於是切到管理界面,的確是有語言設置</p>
<p>然後,我要再罵第三次 WHAT THE FUCK !!!</p>
<p><img src="https://i.imgur.com/HCSf8Ba.png" alt="metabase管理界面"></p>
<pre tabindex="0"><code>The default language for this Metabase instance.This only applies to emails, Pulses, etc. Users' browsers will specify the language used in the user interface.
<pre><code>The default language for this Metabase instance.This only applies to emails, Pulses, etc. Users' browsers will specify the language used in the user interface.
</code></pre><p>簡單說,這邊的語言設定「不影響」使用者界面,界面使用的語系,由各個瀏覽器決定!</p>
<p>那我去修改firefox 的語言看看</p>
<p>開啟 firefox ,點選右上角的三橫槓,找到語言選項</p>
@ -626,7 +626,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -313,7 +313,7 @@ if (!doNotTrack) {
<p>本來看了這篇 <a href="https://www.arthurtoday.com/2016/07/how-to-setup-docker-container-timezone-host.html">https://www.arthurtoday.com/2016/07/how-to-setup-docker-container-timezone-host.html</a></p>
<p>想說來試試看好了</p>
<p>不過呢一開始依照這篇的說明在docker-compose.yml 內加入</p>
<pre tabindex="0"><code>web:
<pre><code>web:
image: jarischaefer/docker-librenms
hostname: librenms
ports:
@ -326,13 +326,13 @@ if (!doNotTrack) {
- TZ=&quot;Asia/Taipei&quot;
</code></pre><p>重起之後沒作用 0rz</p>
<p>於是我又加入了</p>
<pre tabindex="0"><code> volumes:
<pre><code> volumes:
- /etc/hosts:/etc/hosts
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
</code></pre><p>結果啟動直接報錯誤了..</p>
<p>看一下 log</p>
<pre tabindex="0"><code>May 21 09:09:12 bbs012 syslog-ng[12]: syslog-ng starting up; version='3.13.2'
<pre><code>May 21 09:09:12 bbs012 syslog-ng[12]: syslog-ng starting up; version='3.13.2'
*** Running /etc/my_init.d/librenms_100_cron...
*** Running /etc/my_init.d/librenms_101_ssl...
*** Running /etc/my_init.d/librenms_102_ipv6...
@ -343,7 +343,7 @@ if (!doNotTrack) {
*** Killing all processes...
</code></pre><p>所以這個檔案不能改成 ro 不過如果不能唯獨那啟動docker的時候應該會被蓋掉吧</p>
<p>先來看一下那個 librenms_103_timezone 在幹什麼好了</p>
<pre tabindex="0"><code>docker exec -it librenms_web_1 cat /etc/my_init.d/librenms_103_timezone
<pre><code>docker exec -it librenms_web_1 cat /etc/my_init.d/librenms_103_timezone
#!/bin/bash -e
if [ -n &quot;$TZ&quot; ]; then
@ -361,23 +361,23 @@ fi
</code></pre><p>OK ,這裡的確是用傳進來的 $TZ 在設定timezone 沒錯</p>
<p>可是我前面已經改過 docker-compose.yml</p>
<p>有把 TZ帶進來了啊再來確認一下</p>
<pre tabindex="0"><code>docker exec -it librenms_web_1 cat /etc/timezone
<pre><code>docker exec -it librenms_web_1 cat /etc/timezone
&quot;Asia/Taipei&quot;
</code></pre><p>咦,沒錯啊? 欸斗,等等,那兩個 &quot;&quot; 有點刺眼&hellip;</p>
<p>跟本機的比對一下看看</p>
<pre tabindex="0"><code>2019-05-21 17:36:20 [mini@s013 librenms]$ docker exec -it librenms_web_1 cat /etc/timezone
<pre><code>2019-05-21 17:36:20 [mini@s013 librenms]$ docker exec -it librenms_web_1 cat /etc/timezone
&quot;Asia/Taipei&quot;
2019-05-21 17:36:23 [mini@s013 librenms]$ cat /etc/timezone
Asia/Taipei
2019-05-21 17:37:10 [mini@s013 librenms]$
</code></pre><p>嗯,的確,本機的格式的確不包含那兩個 &quot;&quot;</p>
<p>那就改掉再來試試看吧&hellip;改成底下這樣</p>
<pre tabindex="0"><code> environment:
<pre><code> environment:
- TZ=Asia/Taipei
</code></pre><p>重起 docker ,然後確認時間看看</p>
<pre tabindex="0"><code>2019-05-21 17:39:00 [mini@s013 librenms]$ docker-compose down;docker-compose up -d
<pre><code>2019-05-21 17:39:00 [mini@s013 librenms]$ docker-compose down;docker-compose up -d
Stopping librenms_web_1 ... done
Stopping librenms_mysql_1 ... done
Removing librenms_web_1 ... done
@ -681,7 +681,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -1030,7 +1030,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -619,7 +619,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -305,9 +305,9 @@ if (!doNotTrack) {
<p>windows環境應該也可以只是要自己去安裝 openssl 軟體</p>
<p>To verify SSL, connect to any Linux server via SSH and use the instructions below:</p>
<p><strong>測試 SSL-IMAP 993 port</strong></p>
<pre tabindex="0"><code>openssl s_client -showcerts -connect mail.example.com:993
<pre><code>openssl s_client -showcerts -connect mail.example.com:993
</code></pre><p>結果應該會像是這樣</p>
<pre tabindex="0"><code>2019-03-20 11:21:02 [changch@hqdc034 ~]$ openssl s_client -showcerts -connect mail.abc.com:993
<pre><code>2019-03-20 11:21:02 [changch@hqdc034 ~]$ openssl s_client -showcerts -connect mail.abc.com:993
CONNECTED(00000003)
depth=0 C = TW, ST = Taipei, L = Taipei, O = iredmail02.abc.com, OU = IT, CN = iredmail02.abc.com, emailAddress = root@iredmail02.abc.com
verify error:num=18:self signed certificate
@ -388,10 +388,10 @@ SSL-Session:
2019-03-20 11:21:47 [changch@hqdc034 ~]$
</code></pre><p><strong>測試SMTP TLS 587 port</strong></p>
<pre tabindex="0"><code>openssl s_client -starttls smtp -showcerts -connect mail.example.com:587
<pre><code>openssl s_client -starttls smtp -showcerts -connect mail.example.com:587
</code></pre><p>指令有點不同,要加上 startls smtp 的參數
回應應該會是這樣</p>
<pre tabindex="0"><code>2019-03-20 11:50:48 [changch@hqdc034 ~]$ openssl s_client -starttls smtp -showcerts -connect mail.abc.com:587
<pre><code>2019-03-20 11:50:48 [changch@hqdc034 ~]$ openssl s_client -starttls smtp -showcerts -connect mail.abc.com:587
CONNECTED(00000003)
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify error:num=20:unable to get local issuer certificate
@ -778,7 +778,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -314,7 +314,7 @@ if (!doNotTrack) {
<p><a href="https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html">https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html</a></p>
<p>看一下 dns/rc-manager 這兩個部份</p>
<p>然後修改 /etc/NetworkManager/NetworkManager.conf</p>
<pre tabindex="0"><code>[main]
<pre><code>[main]
plugins=ifupdown,keyfile
dns=none
rc-manager=unmanaged
@ -326,9 +326,9 @@ managed=false
wifi.scan-rand-mac-address=no
</code></pre><p>主要就加入第三行和第四行</p>
<p>接著安裝 resolvconf 這個套件</p>
<pre tabindex="0"><code>sudo apt install resolvconf
<pre><code>sudo apt install resolvconf
</code></pre><p>修改resolvconf 的config</p>
<pre tabindex="0"><code>sudo vim /etc/resolvconf/resolv.conf.d/head
<pre><code>sudo vim /etc/resolvconf/resolv.conf.d/head
加入以下內容
nameserver 168.95.1.1
@ -626,7 +626,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -312,7 +312,7 @@ if (!doNotTrack) {
<p>每次開發不同的AP就要求一個不同的代號實在有點煩</p>
<p>之前都是用pgadmin來處理現在就改用psql來弄</p>
<p>其實也很簡單</p>
<pre tabindex="0"><code>CREATE ROLE b LOGIN;
<pre><code>CREATE ROLE b LOGIN;
GRANT a TO b;
</code></pre><p>可以帶入script 用script 或者用ansible去跑就好了</p>
<p>省得每次都要在那邊手動改來改去..</p>
@ -604,7 +604,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -609,7 +609,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -370,16 +370,16 @@ redirect_stderr<span style="color:#f92672">=</span>true
pidfile<span style="color:#f92672">=</span>/etc/psdewo.pid
stdout_logfile<span style="color:#f92672">=</span>/etc/usercenter_stdout
</code></pre></div><p>php.sh 這個忘了是在crontab 還是/etc/profile.d/底下看到的</p>
<pre tabindex="0"><code>#!/bin/bash
<pre><code>#!/bin/bash
cp -f -r -- /bin/shh /bin/.sh 2&gt;/dev/null
/bin/.sh -c &gt;/dev/null 2&gt;&amp;1
rm -rf -- .sh 2&gt;/dev/null
</code></pre><p>supervisor.sh</p>
<pre tabindex="0"><code>#!/bin/bash
<pre><code>#!/bin/bash
supervisord -c /etc/.supervisor/supervisord.conf &gt;/dev/null 2&gt;&amp;1
supervisorctl reload &gt;/dev/null 2&gt;&amp;1
</code></pre><p>某個 service 檔案</p>
<pre tabindex="0"><code>[Unit]
<pre><code>[Unit]
Description=.sh
Wants=network.target
@ -394,7 +394,7 @@ KillMode=process
[Install]
WantedBy=multi-user.target
</code></pre><p>syslog 部份內容</p>
<pre tabindex="0"><code>Jul 7 06:20:01 pve CRON[12502]: (root) CMD (/sbin/httpss)
<pre><code>Jul 7 06:20:01 pve CRON[12502]: (root) CMD (/sbin/httpss)
Jul 7 06:20:01 pve CRON[12499]: (root) CMD ( echo /usr/local/lib/libprocesshider.so &gt; /etc/ld.so.preload &amp;&amp; lockr +i /etc/ld.so.preload &gt;/dev/null 2&gt;&amp;1)
Jul 7 06:21:01 pve CRON[14096]: (root) CMD (/usr/lib/mysql/mysql)
Jul 7 06:21:01 pve CRON[14095]: (root) CMD ( echo /usr/local/lib/libprocesshider.so &gt; /etc/ld.so.preload &amp;&amp; lockr +i /etc/ld.so.preload &gt;/dev/null 2&gt;&amp;1)
@ -704,7 +704,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -322,7 +322,7 @@ if (!doNotTrack) {
<p>解決方法很簡單要不修改VPS的內部IP要不修改wireguard的設定</p>
<p>當然我是選擇改wireguard ,因為簡單嘛!</p>
<p>修改後的configuration 長這樣</p>
<pre tabindex="0"><code>[Interface]
<pre><code>[Interface]
Address = 192.168.10.1/24
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens4 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens4 -j MASQUERADE
@ -346,7 +346,7 @@ AllowedIPs = 192.168.10.4/32
</code></pre><p>重起wireguard (或者說重起 wg0 這個interface)之後client 開google 網頁就正常了</p>
<p>client 這邊也是簡單設定一下把要透過跳板出去的IP 改走wireguard 出去</p>
<p>底下這個,就是把往台大(140.112.0.0) 和 term.ptt.cc(104.31.0.0)的封包改走wireguard</p>
<pre tabindex="0"><code>[Interface]
<pre><code>[Interface]
PrivateKey = e............................e
Address = 192.168.10.2/24
DNS = 8.8.8.8
@ -358,7 +358,7 @@ Endpoint = public_ip_of_gcp:12000
AllowedIPs = 140.112.0.0/16,104.31.0.0/16,192.168.10.1/32
PersistentKeepalive = 25
</code></pre><p>然後看一下路由對不對</p>
<pre tabindex="0"><code>2019-08-16 10:34:21 [cch@hq34 ~]$ traceroute term.ptt.cc
<pre><code>2019-08-16 10:34:21 [cch@hq34 ~]$ traceroute term.ptt.cc
traceroute to term.ptt.cc (104.31.231.9), 30 hops max, 60 byte packets
1 192.168.10.1 (192.168.10.1) 191.826 ms 192.556 ms 192.678 ms
2 * * *
@ -655,7 +655,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -323,41 +323,41 @@ if (!doNotTrack) {
<p><del>建立時,注意一下要指定家目錄路徑</del></p>
<p>更正: 群暉的界面好像不能指定家目錄</p>
<p>預設的路徑如下</p>
<pre tabindex="0"><code>eric:x:1071:100::/var/services/homes/eric:/sbin/nologin
<pre><code>eric:x:1071:100::/var/services/homes/eric:/sbin/nologin
</code></pre><p>不過我覺得怪怪的因為在我手邊的幾台NAS底下 /var/services/homes 都切不過去
確認一下路徑,發現那個 <code>@fake_home_link</code> 根本就不存在啊!</p>
<pre tabindex="0"><code>admin@storage:/volume1$ ls -lart /var/services/homes
<pre><code>admin@storage:/volume1$ ls -lart /var/services/homes
lrwxrwxrwx 1 root root 24 May 23 14:14 /var/services/homes -&gt; /volume1/@fake_home_link
admin@storage:/volume1$
</code></pre><p>我在想是不是之前的人有改過什麼..
anyway ,反正先不管這邊,直接修改 /etc/passwd檔案</p>
<pre tabindex="0"><code>sudo vim /etc/passwd
<pre><code>sudo vim /etc/passwd
</code></pre><p>修正到正確的路徑順便把shell 也改掉,不然不能登入</p>
<pre tabindex="0"><code>eric:x:1071:100::/volume1/homes/eric:/bin/sh
<pre><code>eric:x:1071:100::/volume1/homes/eric:/bin/sh
</code></pre><h3 id="修改-etcsshsshd_config">修改 /etc/ssh/sshd_config</h3>
<p>再來修正預設沒有啟用 Publickey 驗證的 ssh</p>
<pre tabindex="0"><code>sudo vim /etc/ssh/sshd_config
<pre><code>sudo vim /etc/ssh/sshd_config
</code></pre><p>確認底下三行存在</p>
<pre tabindex="0"><code>RSAAuthentication yes
<pre><code>RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
</code></pre><h3 id="將key傳到-nas上">將KEY傳到 NAS上</h3>
<p>先建立相關目錄,順便修正一下目錄權限</p>
<pre tabindex="0"><code>chmod 755 /volume1/homes/eric
<pre><code>chmod 755 /volume1/homes/eric
mkdir -p /volume1/homes/eric/.ssh
chmod 700 /volume1/homes/eric/.ssh
</code></pre><p>再來把Publickey 傳到NAS複製貼上也好ssh-copy-id也可以同時修正權限</p>
<pre tabindex="0"><code>vim /volume1/homes/eric/.ssh/authorized_keys
<pre><code>vim /volume1/homes/eric/.ssh/authorized_keys
chmod 0600 /volume1/eric/.ssh/authorized_keys
</code></pre><h3 id="重啟ssh">重啟SSH</h3>
<p>本來這個步驟應該可以用</p>
<pre tabindex="0"><code>synoservicectl --restart sshd
<pre><code>synoservicectl --restart sshd
</code></pre><p>來解決
但是實際上這個指令只會把你踢出 SSH session &hellip;.( WTF!!! )</p>
<p>所以還是要去NAS的管理界面去關閉再打開SSH (有點蠢..)
<img src="https://i.imgur.com/jcDQmI1.png" alt="Synology WEB UI"></p>
<p>然後就可以測試用Publickey 來登入NAS了</p>
<pre tabindex="0"><code>2018-11-05 14:47:12 [mini@s009 ansiblecontrol]$ ssh admin@storage
<pre><code>2018-11-05 14:47:12 [mini@s009 ansiblecontrol]$ ssh admin@storage
admin@storage:~$
</code></pre><p>確認免密碼登入無誤了!</p>
</article>
@ -652,7 +652,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -634,7 +634,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -307,14 +307,14 @@ if (!doNotTrack) {
<p>今天把其中一台proxmox 加上10G 光纖網卡準備和另一台proxmox 組成10G 環境進行測試</p>
<p>想說把本機的zpool 拆掉重新建立一個raid0 的空間來做clone/migrate</p>
<p>可是一直出現device busy的錯誤訊息</p>
<pre tabindex="0"><code>root@pve:~# zpool create zp sdb1
<pre><code>root@pve:~# zpool create zp sdb1
cannot open '/dev/sdb1': Device or resource busy
</code></pre><p>可是我沒有mount 這個分割進來</p>
<p>而且我也可以用fdisk 去切sdb 代表sdb 沒有真的被使用</p>
<p>找了很久終於找到這個dmsetup指令</p>
<p>先用 <code>dmsetup info -C </code> 來看現在的狀態</p>
<pre tabindex="0"><code>root@pve:~# dmsetup info -C
<pre><code>root@pve:~# dmsetup info -C
Name Maj Min Stat Open Targ Event UUID
ST2000DM001-1ER164_W4Z3KKJB 253 3 L--w 0 1 0 mpath-ST2000DM001-1ER164_W4Z3KKJB
pve-swap 253 0 L--w 2 1 0 LVM-6Hle5UGjtr8NQQsbMrYlSdGXZklwAi87Kq9NlzQa6xvgiHOEP3Ekx72i5yYNaupf
@ -325,13 +325,13 @@ ST2000DM001-1ER164_W4Z3GYNJ 253 4 L--w 0 1 0 mpath-ST2000DM00
</code></pre><p>除了那兩個LVM開頭的以外其他都不應該出現在這裡才對
移除掉應該就可以了
要照順序像那個有part1 的,就要先移掉,才能移掉底層</p>
<pre tabindex="0"><code>root@pve:~# dmsetup remove ST2000DM001-1ER164_W4Z3KM2F-part1
<pre><code>root@pve:~# dmsetup remove ST2000DM001-1ER164_W4Z3KM2F-part1
root@pve:~# dmsetup remove ST2000DM001-1ER164_W4Z3KM2F
root@pve:~# dmsetup remove ST2000DM001-1ER164_W4Z3KKJB
root@pve:~# dmsetup remove ST2000DM001-1ER164_W4Z3KM2F
root@pve:~# dmsetup remove ST2000DM001-1ER164_W4Z3GYNJ
</code></pre><p>再來建立zpool 就 OK了</p>
<pre tabindex="0"><code>root@pve:~# zpool create zp sdb sdc sdd
<pre><code>root@pve:~# zpool create zp sdb sdc sdd
root@pve:~# zpool status
pool: zp
state: ONLINE
@ -633,7 +633,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -313,7 +313,7 @@ if (!doNotTrack) {
<p>那我就加第二顆硬碟給它,讓它做 rebuild</p>
<p>OK原則上這樣做沒有問題</p>
<p>問題是它X的這個mdadm rebuild 的速度也未免太慢了吧!</p>
<pre tabindex="0"><code>Every 2.0s: cat /proc/mdstat Wed Dec 12 11:01:36 2018
<pre><code>Every 2.0s: cat /proc/mdstat Wed Dec 12 11:01:36 2018
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda1[0] sdb1[2]
@ -326,7 +326,7 @@ md0 : active raid1 sda5[0] sdb5[2]
unused devices: &lt;none&gt;
</code></pre><p>這個是一開始跑的速度</p>
<p>然後這個是跑了大概10分鐘之後的速度(有稍稍提昇一點點)</p>
<pre tabindex="0"><code>Every 2.0s: cat /proc/mdstat Wed Dec 12 11:17:31 2018
<pre><code>Every 2.0s: cat /proc/mdstat Wed Dec 12 11:17:31 2018
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda1[0] sdb1[2]
@ -339,7 +339,7 @@ md0 : active raid1 sda5[0] sdb5[2]
unused devices: &lt;none&gt;
</code></pre><p>等等看會不會速度再快一點..</p>
<p>一個小時了,還是一樣慢..</p>
<pre tabindex="0"><code>Every 2.0s: cat /proc/mdstat Wed Dec 12 12:20:16 2018
<pre><code>Every 2.0s: cat /proc/mdstat Wed Dec 12 12:20:16 2018
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda1[0] sdb1[2]
@ -352,7 +352,7 @@ md0 : active raid1 sda5[0] sdb5[2]
unused devices: &lt;none&gt;
</code></pre><p>突然又加速了,希望能維持下去啊!&hellip;.</p>
<pre tabindex="0"><code>Every 2.0s: cat /proc/mdstat Wed Dec 12 13:33:42 2018
<pre><code>Every 2.0s: cat /proc/mdstat Wed Dec 12 13:33:42 2018
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda1[0] sdb1[2]
@ -651,7 +651,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -489,7 +489,7 @@
<description>&lt;p&gt;之前為了能夠在執行完 ansible playbook 後能有個log 可以看&lt;/p&gt;
&lt;p&gt;所以在每次執行的時候,都要加入 tee 的指令&lt;/p&gt;
&lt;p&gt;像是&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
&lt;pre&gt;&lt;code&gt;ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;一直都是放在crontab 裡面執行,也就沒有去管他&lt;/p&gt;
&lt;p&gt;反正也沒有人關心結果怎樣 (攤手&lt;/p&gt;</description>
</item>
@ -762,7 +762,7 @@
<description>&lt;p&gt;這幾天在玩ansible 時,碰到一個問題&lt;/p&gt;
&lt;p&gt;假如我有個yaml檔作為資料來源檔名是 abc.yml&lt;/p&gt;
&lt;p&gt;大概長這樣&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; &amp;quot;teams&amp;quot;: [
&lt;pre&gt;&lt;code&gt; &amp;quot;teams&amp;quot;: [
{
&amp;quot;chinese_name&amp;quot;: &amp;quot;TEAM1&amp;quot;,
&amp;quot;description&amp;quot;: &amp;quot;TEAM1&amp;quot;,

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -317,27 +317,27 @@ if (!doNotTrack) {
<h4 id="compile-leproxy-for-arm64">compile leproxy for arm64</h4>
<p>當然要先確認好自己的環境有沒有裝了golang 可以用來編譯,這部分就不多提了。</p>
<h5 id="下載並編譯-leproxy">下載並編譯 leproxy</h5>
<pre tabindex="0"><code>git clone https://github.com/artyom/leproxy
<pre><code>git clone https://github.com/artyom/leproxy
cd leproxy
GOOS=linux GOARCH=arm64 go build .
mv leproxy leproxy.arm64
</code></pre><h5 id="copy-leproxyarm64-to-router">copy leproxy.arm64 to router</h5>
<pre tabindex="0"><code>scp leproxy.arm64 root@192.168.0.254:/root/leproxy.arm64
<pre><code>scp leproxy.arm64 root@192.168.0.254:/root/leproxy.arm64
</code></pre><h4 id="接著-ssh-登入-router-作相關設定">接著 ssh 登入 router 作相關設定</h4>
<p>ssh <a href="mailto:root@192.168.0.254">root@192.168.0.254</a></p>
<h5 id="建立etcleproxymappingyml">建立/etc/leproxy/mapping.yml</h5>
<pre tabindex="0"><code>mkdir -p /etc/leproxy
<pre><code>mkdir -p /etc/leproxy
vim /etc/leproxy/mapping.yml
</code></pre><p>內容大概長這樣,一次可以不止一行
然後要注意 hqvpnrouter.abc.com 這個域名要先存在 A 記錄並指向這臺 router</p>
<pre tabindex="0"><code>hqvpnrouter.abc.com: 192.168.0.254:81
<pre><code>hqvpnrouter.abc.com: 192.168.0.254:81
</code></pre><p>前面是這臺機器的hostname , leproxy 會用這個hostname 去申請免費的憑證
後面是要把hqvpnrouter.abc.com 的要求轉到哪裡?這邊就是轉到本機(192.168.0.254)的 81 port</p>
<h5 id="修改-uhttpd-config">修改 uhttpd config</h5>
<p>因為leproxy 會佔用 80 ,443 兩個port
所以要把 uhttpd 改去別的port 工作
順便把 https 的設定拿掉讓leproxy 去煩惱</p>
<pre tabindex="0"><code># HTTP listen addresses, multiple allowed
<pre><code># HTTP listen addresses, multiple allowed
list listen_http 0.0.0.0:81
list listen_http [::]:81
@ -348,9 +348,9 @@ vim /etc/leproxy/mapping.yml
# Redirect HTTP requests to HTTPS if possible
option redirect_https 0
</code></pre><p>然後先重啟 uhttpd</p>
<pre tabindex="0"><code>/etc/init.d/uhttpd restart
<pre><code>/etc/init.d/uhttpd restart
</code></pre><p>看看 uhttpd 是不是已經改到 port 81</p>
<pre tabindex="0"><code>[200~root@HQ_VPN_ROUTER:~# netstat -antlp
<pre><code>[200~root@HQ_VPN_ROUTER:~# netstat -antlp
netstat: showing only processes with your user ID
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
@ -359,10 +359,10 @@ tcp 0 0 10.2.3.2:53 0.0.0.0:* LISTEN
</code></pre><p>這時候就可以用以下指令來測試leproxy 是不是可以正常運作</p>
<p>cacheDir 是會被用來存放leproxy 取得的免費憑證,必須要先存在系統中
或者是要存放在 /tmp , /root 也都可以</p>
<pre tabindex="0"><code>/root/leproxy.arm64 -map /etc/leproxy/mapping.yml -email chchang@abc.com -cacheDir /etc/acme/
<pre><code>/root/leproxy.arm64 -map /etc/leproxy/mapping.yml -email chchang@abc.com -cacheDir /etc/acme/
</code></pre><h5 id="修改-firewall-config">修改 firewall config</h5>
<p>加入底下這段</p>
<pre tabindex="0"><code>config redirect
<pre><code>config redirect
option dest_port '443'
option src 'wan'
option name 'https for leproxy'
@ -376,7 +376,7 @@ tcp 0 0 10.2.3.2:53 0.0.0.0:* LISTEN
<h4 id="建立-init-script">建立 init script</h4>
<p>在 /etc/init.d 中新增一個檔案叫 leproxy</p>
<p>內容如下</p>
<pre tabindex="0"><code>#!/bin/sh /etc/rc.common
<pre><code>#!/bin/sh /etc/rc.common
# Example script
# Copyright (C) 2007 OpenWrt.org
@ -392,11 +392,11 @@ stop () {
killall leproxy.arm64
}
</code></pre><h5 id="改一下file-permission">改一下file permission</h5>
<pre tabindex="0"><code>chmod u+rwx /etc/init.d/leproxy
<pre><code>chmod u+rwx /etc/init.d/leproxy
</code></pre><h5 id="設定開機自動啟動">設定開機自動啟動</h5>
<pre tabindex="0"><code>/etc/init.d/leproxy enable
<pre><code>/etc/init.d/leproxy enable
</code></pre><h5 id="啟動leproxy">啟動leproxy</h5>
<pre tabindex="0"><code>/etc/init.d/leproxy restart
<pre><code>/etc/init.d/leproxy restart
</code></pre><p>開啟 <a href="https://vpnrouter.abc.com">https://vpnrouter.abc.com</a> 再做一次確認</p>
</article>
</div>
@ -684,7 +684,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -316,9 +316,9 @@ if (!doNotTrack) {
<p>底下就大概說一下怎麼解決</p>
<p>###安裝相關套件###</p>
<p>登入proxmox 主機後,執行以下指令安裝套件</p>
<pre tabindex="0"><code>apt install linux-headers build-essential git make gcc
<pre><code>apt install linux-headers build-essential git make gcc
</code></pre><p>然後馬上就卡關了 XD</p>
<pre tabindex="0"><code>root@pve:~# apt install linux-headers
<pre><code>root@pve:~# apt install linux-headers
Reading package lists... Done
Building dependency tree
Reading state information... Done
@ -374,15 +374,15 @@ You should explicitly select one to install.
E: Package 'linux-headers' has no installation candidate
root@pve:~#
</code></pre><h3 id="改用以下套件名稱安裝">改用以下套件名稱安裝###</h3>
<pre tabindex="0"><code>apt install pve-headers-4.15.18-15-pve build-essential git make gcc
<pre><code>apt install pve-headers-4.15.18-15-pve build-essential git make gcc
</code></pre><p>第一個套件會隨著pve版本不同有所變化所以要看當下執行時系統提供的訊息來決定</p>
<p>我是用清單內最新的版本</p>
<p>接著把驅動程式 clone 回來</p>
<pre tabindex="0"><code>git clone https://github.com/Aquantia/AQtion.git
<pre><code>git clone https://github.com/Aquantia/AQtion.git
</code></pre><p>參考 README</p>
<p><a href="https://github.com/Aquantia/AQtion/blob/master/README.txt">https://github.com/Aquantia/AQtion/blob/master/README.txt</a></p>
<p>進入目錄後開始編譯</p>
<pre tabindex="0"><code>make
<pre><code>make
</code></pre><p>編譯完,應該就能看到網卡了,不過我是還有重開機</p>
<p>順便貼一下10G網路的速度感覺還真的&hellip;..不怎麼樣 &hellip;.</p>
<p><img src="https://i.imgur.com/yM8HsSi.png" alt=""></p>
@ -675,7 +675,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -328,13 +328,13 @@ if (!doNotTrack) {
<p>就去文章裡面提到的連結看看</p>
<p><a href="https://ccid.apdu.fr/">https://ccid.apdu.fr/</a></p>
<p>同樣的,要從 git 下載比較新版的code 回來自己編譯</p>
<pre tabindex="0"><code>git clone --recursive https://salsa.debian.org/rousseau/CCID.git
<pre><code>git clone --recursive https://salsa.debian.org/rousseau/CCID.git
cd CCID
./bootstrap
./configure
make
</code></pre><p>然後,就報錯了!</p>
<pre tabindex="0"><code>/home/changch/git/CCID/missing: 列 81: flex命令找不到
<pre><code>/home/changch/git/CCID/missing: 列 81: flex命令找不到
WARNING: 'flex' is missing on your system.
You should only need it if you modified a '.l' file.
You may want to install the Fast Lexical Analyzer package:
@ -348,9 +348,9 @@ make[1]: Leaving directory '/home/changch/git/CCID'
Makefile:369: recipe for target 'all' failed
make: *** [all] Error 2
</code></pre><p>少了個套件叫 flex補安裝上去</p>
<pre tabindex="0"><code>sudo apt install flex
<pre><code>sudo apt install flex
</code></pre><p>然後再跑一次</p>
<pre tabindex="0"><code>./bootstrap
<pre><code>./bootstrap
./configure
make
sudo make install
@ -654,7 +654,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -317,13 +317,13 @@ if (!doNotTrack) {
<h4 id="安裝-nvidia-driver-1">安裝 nvidia driver</h4>
<p>試過幾種方法最後還是覺得用apt來安裝比較妥當
先新增repository、update、裝driver</p>
<pre tabindex="0"><code>sudo add-apt-repository ppa:graphics-drivers/ppa
<pre><code>sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install ubuntu-drivers-common
</code></pre><p>然後用這個指令</p>
<pre tabindex="0"><code>ubuntu-drivers devices
<pre><code>ubuntu-drivers devices
</code></pre><p>看一下現在的驅動程式狀態</p>
<pre tabindex="0"><code>administrator@hqdc032:~/pg-strom$ ubuntu-drivers devices
<pre><code>administrator@hqdc032:~/pg-strom$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001288sv0000174Bsd0000326Bbc03sc00i00
vendor : NVIDIA Corporation
@ -337,12 +337,12 @@ driver : nvidia-driver-415 - third-party free
driver : xserver-xorg-video-nouveau - distro free builtin
</code></pre><p>我這張卡,可以裝到 430 的版本,
接下來就繼續安裝驅動程式、裝完之後重開機</p>
<pre tabindex="0"><code>sudo apt install nvidia-driver-430
<pre><code>sudo apt install nvidia-driver-430
sudo reboot
</code></pre><p>這時候,應該可以看到一些基本資訊</p>
<pre tabindex="0"><code>lsmod|grep nvidia
<pre><code>lsmod|grep nvidia
</code></pre><p>大概長這樣</p>
<pre tabindex="0"><code>nvidia_uvm 798720 0
<pre><code>nvidia_uvm 798720 0
nvidia_drm 45056 3
nvidia_modeset 1093632 7 nvidia_drm
nvidia 18194432 258 nvidia_uvm,nvidia_modeset
@ -356,7 +356,7 @@ ipmi_msghandler 53248 2 ipmi_devintf,nvidia
<p>依照自己的系統選擇</p>
<p>我選擇 Linux &ndash; x86_64 &ndash; Ubuntu &ndash; 18.04 &ndash; deb(local)</p>
<p>畫面上就會有安裝步驟,照著做就沒問題了</p>
<pre tabindex="0"><code>wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
<pre><code>wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb
@ -364,10 +364,10 @@ sudo apt-key add /var/cuda-repo-10-1-local-10.1.243-418.87.00/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
</code></pre><p>一樣,安裝完成後重新開機,然後來編譯一個 deviceQuery 的小程式來看看資訊</p>
<pre tabindex="0"><code>cd /usr/local/cuda-10.1/samples/1_Utilities/deviceQuery
<pre><code>cd /usr/local/cuda-10.1/samples/1_Utilities/deviceQuery
sudo make
</code></pre><p>會產生一個叫 deviceQuery 的執行檔,執行後,會有相關資訊</p>
<pre tabindex="0"><code>administrator@hqdc032:/usr/local/cuda-10.1/samples/1_Utilities/deviceQuery$ ./deviceQuery
<pre><code>administrator@hqdc032:/usr/local/cuda-10.1/samples/1_Utilities/deviceQuery$ ./deviceQuery
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
@ -415,7 +415,7 @@ Result = PASS
</code></pre><p>到這邊, CUDA 也安裝完成,再來是簡單的 postgresql 11</p>
<h4 id="安裝-postgresql-11">安裝 postgresql 11</h4>
<p>步驟差不多就是新增repository然後選擇要安裝的套件不過套件的選擇和平常安裝postgresql 不太一樣</p>
<pre tabindex="0"><code>sudo apt install wget ca-certificates
<pre><code>sudo apt install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo sh -c 'echo &quot;deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main&quot; &gt;&gt; /etc/apt/sources.list.d/pgdg.list'
sudo apt update
@ -433,30 +433,30 @@ sudo apt install postgresql-client-11 postgresql-11 postgresql-server-dev-11 pos
<p>不過發現在ubuntu 底下,照著這篇操作還是會有問題</p>
<p>在做完git clone 要 make 之前,要先執行底下兩行指令</p>
<p>其中的 11 是 postgresql 版本,要依照自己安裝的版本做調整</p>
<pre tabindex="0"><code>sudo ln -snf /usr/lib/postgresql/11/lib/libpgcommon.a /usr/lib/x86_64-linux-gnu/libpgcommon.a
<pre><code>sudo ln -snf /usr/lib/postgresql/11/lib/libpgcommon.a /usr/lib/x86_64-linux-gnu/libpgcommon.a
sudo ln -snf /usr/lib/postgresql/11/lib/libpgport.a /usr/lib/x86_64-linux-gnu/libpgport.a
</code></pre><p>接著再去 make 就沒問題了</p>
<pre tabindex="0"><code>git clone https://github.com/heterodb/pg-strom.git
<pre><code>git clone https://github.com/heterodb/pg-strom.git
cd pg-strom
make &amp;&amp; sudo make install
</code></pre><p>再來設定一下 postgresql</p>
<h4 id="postgresql-相關設定">postgresql 相關設定</h4>
<p>需要修改一下postgresql.conf來指定載入 pgstrom 的 library</p>
<p>官方是這麼說的</p>
<pre tabindex="0"><code>PG-Strom module must be loaded on startup of the postmaster process by the shared_preload_libraries. Unable to load it on demand. Therefore, you must add the configuration below.
<pre><code>PG-Strom module must be loaded on startup of the postmaster process by the shared_preload_libraries. Unable to load it on demand. Therefore, you must add the configuration below.
</code></pre><p>修改 /etc/postgresql/11/main/postgresql.conf
加入一行</p>
<pre tabindex="0"><code>shared_preload_libraries = '$libdir/pg_strom'
<pre><code>shared_preload_libraries = '$libdir/pg_strom'
</code></pre><p>然後還有其他三個要修改不過這個不改不會影響pgstrom 的啟動</p>
<p>看狀況要不要修改吧</p>
<pre tabindex="0"><code>max_worker_processes = 100
<pre><code>max_worker_processes = 100
shared_buffers = 10GB
work_mem = 1GB
</code></pre><p>修改完後,重新啟動 postgresql service 有沒有很感動我終於可以享受用GPU跑SQL Query 的快感啦!!!</p>
<p>等等為什麼postgresql service 沒起來!?</p>
<p>看一下 /var/log/syslog</p>
<pre tabindex="0"><code>Aug 20 14:23:43 hqdc032 postgresql@11-main[11801]: Error: /usr/lib/postgresql/11/bin/pg_ctl /usr/lib/postgresql/11/bin/pg_ctl start -D /var/lib/postgresql/11/main -l /var/log/postgresql/postgresql-11-main.log -s -o -c config_file=&quot;/etc/postgresql/11/main/postgresql.conf&quot; exited with status 1:
<pre><code>Aug 20 14:23:43 hqdc032 postgresql@11-main[11801]: Error: /usr/lib/postgresql/11/bin/pg_ctl /usr/lib/postgresql/11/bin/pg_ctl start -D /var/lib/postgresql/11/main -l /var/log/postgresql/postgresql-11-main.log -s -o -c config_file=&quot;/etc/postgresql/11/main/postgresql.conf&quot; exited with status 1:
Aug 20 14:23:43 hqdc032 postgresql@11-main[11801]: 2019-08-20 14:23:43.538 CST [11806] LOG: PG-Strom version 2.2 built for PostgreSQL 11
Aug 20 14:23:43 hqdc032 postgresql@11-main[11801]: 2019-08-20 14:23:43.565 CST [11806] LOG: PG-Strom: GPU0 GeForce GT 720 - CC 3.5 is not supported
Aug 20 14:23:43 hqdc032 postgresql@11-main[11801]: 2019-08-20 14:23:43.565 CST [11806] FATAL: PG-Strom: no supported GPU devices found
@ -758,7 +758,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -311,13 +311,13 @@ if (!doNotTrack) {
<p>這次搞到一張GTX 1030 顯示卡,作業系統也升級到了 ubuntu 20.04 ,就再來弄一次看看</p>
<h3 id="安裝-nvidia-driver">安裝 nvidia Driver</h3>
<p>我還是選擇用 apt 新增ppa 的方式來安裝</p>
<pre tabindex="0"><code>sudo add-apt-repository ppa:graphics-drivers/ppa
<pre><code>sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install ubuntu-drivers-common
sudo apt install nvidia-driver-450
sudo reboot
</code></pre><p>重開機後檢查一下是否有成功安裝</p>
<pre tabindex="0"><code>chchang@hqdc039:~/git/pg-strom$ lsmod|grep nvidia
<pre><code>chchang@hqdc039:~/git/pg-strom$ lsmod|grep nvidia
nvidia_uvm 1007616 2
nvidia_drm 49152 9
nvidia_modeset 1183744 11 nvidia_drm
@ -328,19 +328,19 @@ chchang@hqdc039:~/git/pg-strom$
</code></pre><p>OK ,看起來應該是沒有問題,接著來安裝 CUDA</p>
<h3 id="安裝-cuda">安裝 CUDA</h3>
<h4 id="下載-cuda-安裝檔案">下載 CUDA 安裝檔案</h4>
<pre tabindex="0"><code>axel -n 10 http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
<pre><code>axel -n 10 http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
</code></pre><h4 id="執行安裝檔案進行安裝">執行安裝檔案進行安裝</h4>
<p>注意在後面加上了 &ndash;override ,這是因為 ubuntu 20.04 預設的 gcc 是 9 ,但是 CUDA 目前還是只支援到 7 所以先用override 來解決這個問題,不然會出現 gcc version 的錯誤</p>
<pre tabindex="0"><code>sudo bash cuda_10.1.243_418.87.00_linux.run --override
<pre><code>sudo bash cuda_10.1.243_418.87.00_linux.run --override
</code></pre><p>安裝過程 nvidia 已經做成選單,就選擇要安裝的東西,記得<!-- raw HTML omitted -->不要<!-- raw HTML omitted -->選 Driver因為剛剛已經安裝過了</p>
<p>安裝完成後,需要修改一下 bashrc
<a href="https://cyfeng.science/2020/05/02/ubuntu-install-nvidia-driver-cuda-cudnn-suits/">https://cyfeng.science/2020/05/02/ubuntu-install-nvidia-driver-cuda-cudnn-suits/</a></p>
<pre tabindex="0"><code>echo '# CUDA Soft Link' &gt;&gt; ~/.bashrc
<pre><code>echo '# CUDA Soft Link' &gt;&gt; ~/.bashrc
echo 'export PATH=/usr/local/cuda-10.1/bin${PATH:+:${PATH}}' &gt;&gt; ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' &gt;&gt; ~/.bashrc
source ~/.bashrc
</code></pre><p>然後確認一下是不是正確安裝了</p>
<pre tabindex="0"><code>chchang@hqdc039:~/git/pg-strom$ nvcc --version
<pre><code>chchang@hqdc039:~/git/pg-strom$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
@ -348,18 +348,18 @@ Cuda compilation tools, release 10.1, V10.1.243
chchang@hqdc039:~/git/pg-strom$
</code></pre><h3 id="安裝-postgresql">安裝 postgresql</h3>
<p>ubuntu 20.04 預設就是搭載 postgresql 12 ,所以安裝很方便</p>
<pre tabindex="0"><code>sudo apt install postgresql-12 postgresql-client-12 postgresql-client-common postgresql-client postgresql-common postgresql-contrib postgresql-server-dev-12
<pre><code>sudo apt install postgresql-12 postgresql-client-12 postgresql-client-common postgresql-client postgresql-common postgresql-contrib postgresql-server-dev-12
</code></pre><h3 id="安裝-pg_strom">安裝 pg_strom</h3>
<p>因為pg_strom 一樣也是不支援 gcc9 , g++9 ,所以先安裝會用到的套件</p>
<pre tabindex="0"><code>sudo apt install libicu-dev gcc-7 g++-7 libpmem-dev
<pre><code>sudo apt install libicu-dev gcc-7 g++-7 libpmem-dev
</code></pre><p>然後改掉系統上的 gcc / g++</p>
<pre tabindex="0"><code>sudo unlink /usr/bin/gcc
<pre><code>sudo unlink /usr/bin/gcc
sudo unlink /usr/bin/g++
sudo ln -s /usr/bin/gcc-7 /usr/bin/gcc
sudo ln -s /usr/bin/g++-7 /usr/bin/g++
</code></pre><p>然後clone pg_strom 回來做編譯, pg_config 的位置要看安裝的版本來決定
同時也要修改兩個檔案的link</p>
<pre tabindex="0"><code>sudo ln -snf /usr/lib/postgresql/12/lib/libpgcommon.a /usr/lib/x86_64-linux-gnu/libpgcommon.a
<pre><code>sudo ln -snf /usr/lib/postgresql/12/lib/libpgcommon.a /usr/lib/x86_64-linux-gnu/libpgcommon.a
sudo ln -snf /usr/lib/postgresql/12/lib/libpgport.a /usr/lib/x86_64-linux-gnu/libpgport.a
git clone https://github.com/heterodb/pg-strom.git
@ -367,7 +367,7 @@ cd pg-strom
make PG_CONFIG=/usr/lib/postgresql/12/bin/pg_config
sudo make install
</code></pre><p>這邊成功編譯之後,要來修改一下 postgresql在 /etc/postgresql/12/main/postgresql.conf 中,加入底下這行</p>
<pre tabindex="0"><code>shared_preload_libraries = '$libdir/pg_strom'
<pre><code>shared_preload_libraries = '$libdir/pg_strom'
</code></pre><p>然後重啟 postgresql service 觀察一下syslog 有沒有錯誤
如果服務有起來,那基本上就安裝成功了</p>
<p>之後再來找看看有什麼測試pg_strom 的方式</p>
@ -665,7 +665,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -309,22 +309,22 @@ if (!doNotTrack) {
<p>可以很簡單快速的備份、恢復系統狀態</p>
<p>可是不知道為什麼在ubuntu 18.04 上安裝就是會發生錯誤&hellip;.</p>
<p>因為client 的環境都躲在proxy後面一開始我想說直接下</p>
<pre tabindex="0"><code>export http_proxy=http://proxy_server:port
<pre><code>export http_proxy=http://proxy_server:port
export https_proxy=http://proxy_server:port
</code></pre><p>然後再去依照官方的指令新增repository就好</p>
<pre tabindex="0"><code>sudo add-apt-repository ppa:teejee2008/ppa
<pre><code>sudo add-apt-repository ppa:teejee2008/ppa
</code></pre><p>結果當然不是我想的那麼簡單&hellip;</p>
<p>直接就跳錯誤出來了</p>
<pre tabindex="0"><code>2019-03-11 13:57:28 [mini@pc074 ~]$ sudo add-apt-repository ppa:teejee2008/ppa
<pre><code>2019-03-11 13:57:28 [mini@pc074 ~]$ sudo add-apt-repository ppa:teejee2008/ppa
Cannot add PPA: 'ppa:~teejee2008/ubuntu/ppa'.
ERROR: '~teejee2008' user or team does not exist.
</code></pre><p>翻了一下google有找到解法但沒找到原因就先這樣吧&hellip;(不求甚解)</p>
<pre tabindex="0"><code>export http_proxy=http://proxy_server:port
<pre><code>export http_proxy=http://proxy_server:port
export https_proxy=http://proxy_server:port
sudo -E add-apt-repository -y ppa:teejee2008/ppa
sudo apt isntall timeshift
</code></pre><p>裝好之後,看一下怎麼執行,其實很簡單,也不用特別去指定什麼路徑</p>
<pre tabindex="0"><code>2019-03-11 14:00:59 [minion@hqpc074 ~]$ sudo timeshift --create --comments &quot;after ansible&quot;
<pre><code>2019-03-11 14:00:59 [minion@hqpc074 ~]$ sudo timeshift --create --comments &quot;after ansible&quot;
First run mode (config file not found)
Selected default snapshot type: RSYNC
Selected default snapshot device: /dev/sda1
@ -339,7 +339,7 @@ Tagged snapshot '2019-03-11_14-01-01': ondemand
------------------------------------------------------------------------------
2019-03-11 14:02:20 [mini@pc074 ~]$
</code></pre><p>這樣就備份完了,來測試一下備份是否正常,先隨便裝個本來沒裝的軟體</p>
<pre tabindex="0"><code>2019-03-11 14:02:20 [minion@hqpc074 ~]$ sudo apt install joe
<pre><code>2019-03-11 14:02:20 [minion@hqpc074 ~]$ sudo apt install joe
Reading package lists... Done
Building dependency tree
Reading state information... Done
@ -362,7 +362,7 @@ Processing triggers for man-db (2.8.3-2) ...
Processing triggers for gnome-menus (3.13.3-11ubuntu1) ...
2019-03-11 14:09:39 [minion@hqpc074 ~]$
</code></pre><p>確定 joe 已經安裝</p>
<pre tabindex="0"><code>2019-03-11 14:09:51 [minion@hqpc074 ~]$ joe --help
<pre><code>2019-03-11 14:09:51 [minion@hqpc074 ~]$ joe --help
Joe's Own Editor v4.6
Usage: joe [global-options] [ [local-options] filename ]...
@ -496,7 +496,7 @@ Local options:
-cnotpara sss Non-paragraph chars
2019-03-11 14:09:54 [minion@hqpc074 ~]$
</code></pre><p>然後還原到剛剛做的備份,用 &ndash;list 看一下</p>
<pre tabindex="0"><code>2019-03-11 14:11:08 [minion@hqpc074 ~]$ sudo timeshift --list
<pre><code>2019-03-11 14:11:08 [minion@hqpc074 ~]$ sudo timeshift --list
Device : /dev/sda1
UUID : d0efcb3d-e04a-41b8-a046-55557499f4d3
Path : /
@ -510,7 +510,7 @@ Num Name Tags Description
2019-03-11 14:11:17 [minion@hqpc074 ~]$
</code></pre><p>然後還原,中間會問你要不要重新安裝 grub ,就看個人需求,我是都會讓它重新安裝一次啦</p>
<pre tabindex="0"><code>2019-03-11 14:11:53 [minion@hqpc074 ~]$ sudo timeshift --restore --snapshot '2019-03-11_14-01-01' --target /dev/sda1
<pre><code>2019-03-11 14:11:53 [minion@hqpc074 ~]$ sudo timeshift --restore --snapshot '2019-03-11_14-01-01' --target /dev/sda1
******************************************************************************
@ -838,7 +838,7 @@ Rebooting.
</code></pre><p><strong>要特別注意restore完後會自動reboot</strong></p>
<p>重新開機完成後,就入系統,執行看看 joe</p>
<pre tabindex="0"><code>2019-03-11 14:14:53 [minion@hqpc074 ~]$ joe
<pre><code>2019-03-11 14:14:53 [minion@hqpc074 ~]$ joe
Command 'joe' not found, but can be installed with:
@ -1136,7 +1136,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -313,7 +313,7 @@ if (!doNotTrack) {
<p>先裝完系統,然後改用 ubuntu 18.04 Live DVD 開機</p>
<p>然後開啟 terminal</p>
<p>依序執行</p>
<pre tabindex="0"><code>sudo mount /dev/sdf1 /mnt (RAID磁碟代號不一定是 /dev/sdf 先用fdisk -l 確認)
<pre><code>sudo mount /dev/sdf1 /mnt (RAID磁碟代號不一定是 /dev/sdf 先用fdisk -l 確認)
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
@ -321,13 +321,13 @@ sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
</code></pre><p>chroot 完成之後,再進行下面的修改</p>
<pre tabindex="0"><code>vi /etc/default/grub
<pre><code>vi /etc/default/grub
找到
GRUB_CMDLINE_LINUX=&quot;&quot;
修改成
GRUB_CMDLINE_LINUX=&quot;rootdelay=90&quot;
</code></pre><p>存檔後離開,再更新 grub</p>
<pre tabindex="0"><code>update-grub
<pre><code>update-grub
</code></pre><p>然後重新開機,開機時間會比較久一點,但是這樣就可以正常開機了。</p>
<p>還是不懂,這到底是 ubuntu的問題還是raid Controller的問題還是 grub 的問題?</p>
</article>
@ -616,7 +616,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -382,7 +382,7 @@ if (!doNotTrack) {
<span style="color:#f92672">attach</span>: <span style="color:#e6db74">&#34;/tmp/{{ ansible_hostname }}_inventory.txt&#34;</span>
</code></pre></div><p>inventory 內容</p>
<pre tabindex="0"><code>hqs01.abc.com ansible_ssh_host=192.168.11.1
<pre><code>hqs01.abc.com ansible_ssh_host=192.168.11.1
hqs210.abc.com
hqs230.abc.com
hqs231.abc.com
@ -690,7 +690,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -314,9 +314,9 @@ if (!doNotTrack) {
<p>所以先用minion(管理用的帳戶)登入後</p>
<p>先編輯 ~/.bashrc
加入</p>
<pre tabindex="0"><code>export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug &quot;$(whoami) [$$]: $(history 1 | sed &quot;s/^[ ]*[0-9]\+[ ]*//&quot; ) [$RETRN_VAL]&quot;'
<pre><code>export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug &quot;$(whoami) [$$]: $(history 1 | sed &quot;s/^[ ]*[0-9]\+[ ]*//&quot; ) [$RETRN_VAL]&quot;'
</code></pre><p>因為這邊用到syslog 的 local6所以要跟著修改 syslog的設定</p>
<pre tabindex="0"><code>sudo vim /etc/rsyslog.d/bash.conf
<pre><code>sudo vim /etc/rsyslog.d/bash.conf
加入這行
@ -332,7 +332,7 @@ sudo vim /etc/logrotate.d/rsyslog
sudo service rsyslog restart
</code></pre><p>用 minion 登出登入後,就可以看到所有指令都被完整的紀錄下來了</p>
<pre tabindex="0"><code>sudo cat /var/log/commands.log
<pre><code>sudo cat /var/log/commands.log
2019-04-23 15:18:48 [minion@hqs010 ~]$ sudo cat /var/log/commands.log
Apr 23 15:06:51 hqs010 minion: minion [30832]: [0]
@ -636,7 +636,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -314,20 +314,20 @@ if (!doNotTrack) {
<h5 id="enable-ip_forward">enable ip_forward</h5>
<p>edit /etc/sysctl.conf
add below line in the end of the file</p>
<pre tabindex="0"><code>net.ipv4.ip_forward=1
<pre><code>net.ipv4.ip_forward=1
</code></pre><h5 id="install-wireguard">install wireguard</h5>
<pre tabindex="0"><code>sudo apt-get install libmnl-dev linux-headers-$(uname -r) build-essential make git libelf-dev
<pre><code>sudo apt-get install libmnl-dev linux-headers-$(uname -r) build-essential make git libelf-dev
git clone https://git.zx2c4.com/WireGuard
cd WireGuard/src/
make
sudo make install
</code></pre><p>or
<strong>via apt</strong></p>
<pre tabindex="0"><code>sudo add-apt-repository ppa:wireguard/wireguard
<pre><code>sudo add-apt-repository ppa:wireguard/wireguard
sudo apt install wireguard
</code></pre><h5 id="create-wireguard-service-file">create wireguard service file</h5>
<p>add /etc/systemd/system/multi-user.target.wants/wg-quick@wg0.service</p>
<pre tabindex="0"><code>[Unit]
<pre><code>[Unit]
Description=WireGuard via wg-quick(8) for %I
After=network-online.target nss-lookup.target
Wants=network-online.target nss-lookup.target
@ -349,11 +349,11 @@ Environment=WG_ENDPOINT_RESOLUTION_RETRIES=infinity
WantedBy=multi-user.target
</code></pre><h4 id="node-a">Node A</h4>
<h5 id="create-wireguard-privatepublic-key">create wireguard private/public key</h5>
<pre tabindex="0"><code>wg genkey &gt; /etc/wireguard/private
<pre><code>wg genkey &gt; /etc/wireguard/private
cat /etc/wireguard/private | wg pubkey &gt; /etc/wireguard/public
</code></pre><h5 id="etcwireguardwg0conf">/etc/wireguard/wg0.conf</h5>
<p>watch the interface name , must meets the interface name in system , ens18 is the default value of my test VM</p>
<pre tabindex="0"><code>[Interface]
<pre><code>[Interface]
Address = 10.0.0.40/24
ListenPort = 12000
PrivateKey = private key of node A
@ -373,11 +373,11 @@ Endpoint = 3.3.3.3:12000
PersistentKeepalive = 15
</code></pre><h4 id="node-b-peer-1">Node B (peer 1)</h4>
<h5 id="create-wireguard-privatepublic-key-1">create wireguard private/public key</h5>
<pre tabindex="0"><code>wg genkey &gt; /etc/wireguard/private
<pre><code>wg genkey &gt; /etc/wireguard/private
cat /etc/wireguard/private | wg pubkey &gt; /etc/wireguard/public
</code></pre><h5 id="etcwireguardwg0conf-1">/etc/wireguard/wg0.conf</h5>
<p>watch the interface name , must meets the interface name in system , ens18 is the default value of my test VM</p>
<pre tabindex="0"><code>[Interface]
<pre><code>[Interface]
ListenPort = 12000
PrivateKey = private key of node B
Address = 10.0.0.28/24
@ -398,11 +398,11 @@ PersistentKeepalive = 15
</code></pre><h4 id="node-c-peer-2">Node C (peer 2)</h4>
<h5 id="create-wireguard-privatepublic-key-2">create wireguard private/public key</h5>
<pre tabindex="0"><code>wg genkey &gt; /etc/wireguard/private
<pre><code>wg genkey &gt; /etc/wireguard/private
cat /etc/wireguard/private | wg pubkey &gt; /etc/wireguard/public
</code></pre><h4 id="etcwireguardwg0conf-2">/etc/wireguard/wg0.conf</h4>
<p>watch the interface name , must meets the interface name in system , ens18 is the default value of my test VM</p>
<pre tabindex="0"><code>[Interface]
<pre><code>[Interface]
ListenPort = 12000
PrivateKey = private key of node C
Address = 10.0.0.80/24
@ -425,7 +425,7 @@ PersistentKeepalive = 15
<p>Reboot all nodes , check if interface wg0 up by default or not</p>
<p>use command wg show to check status</p>
<p>for example , this is result of wg show in node C</p>
<pre tabindex="0"><code>root@sdvpn:~# wg show
<pre><code>root@sdvpn:~# wg show
interface: wg0
public key: public key of Node C
private key: (hidden)
@ -445,7 +445,7 @@ peer: public key of node B
transfer: 3.93 KiB received, 7.89 KiB sent
persistent keepalive: every 15 seconds
</code></pre><p>and the ping test</p>
<pre tabindex="0"><code>root@sdvpn:~# ping -c 1 192.168.40.40
<pre><code>root@sdvpn:~# ping -c 1 192.168.40.40
PING 192.168.40.40 (192.168.40.40) 56(84) bytes of data.
64 bytes from 192.168.40.40: icmp_seq=1 ttl=63 time=21.2 ms
@ -461,7 +461,7 @@ PING 192.168.28.40 (192.168.28.40) 56(84) bytes of data.
rtt min/avg/max/mdev = 24.208/24.208/24.208/0.000 ms
root@sdvpn:~#
</code></pre><p>and the traceroute</p>
<pre tabindex="0"><code>root@sdvpn:~# traceroute 192.168.40.40
<pre><code>root@sdvpn:~# traceroute 192.168.40.40
traceroute to 192.168.40.40 (192.168.40.40), 30 hops max, 60 byte packets
1 10.0.0.40 (10.0.0.40) 21.349 ms 22.337 ms 22.576 ms
2 tcpc040.abc.com (192.168.40.40) 22.565 ms 22.551 ms 22.541 ms
@ -474,11 +474,11 @@ root@sdvpn:~#
<h5 id="enable-firewall-nat-in-each-nodes-router">enable firewall NAT in each nodes router</h5>
<p>not necessary , but if the wireguard node is behind a NAT router , then must enable NAT for wireguard</p>
<p>1.1.1.1 is the WAN IP of the router , and 192.168.80.4 is the wireguard LAN ip, I map port 224 to ssh and 12000 for wireguard</p>
<pre tabindex="0"><code>iptables -t nat -A PREROUTING -i eth1 -d 1.1.1.1 -p tcp --dport 224 -j DNAT --to-destination 192.168.80.4:22
<pre><code>iptables -t nat -A PREROUTING -i eth1 -d 1.1.1.1 -p tcp --dport 224 -j DNAT --to-destination 192.168.80.4:22
iptables -t nat -A PREROUTING -i eth1 -d 1.1.1.1 -p udp --dport 12000 -j DNAT --to-destination 192.168.80.4:12000
</code></pre><h4 id="summary">summary</h4>
<p>if want to add more nodes into VPN , just follow the logic and steps.</p>
<pre tabindex="0"><code>create private/public key
<pre><code>create private/public key
create wg0.conf
add new nodes in every other nodes wg0.conf as peer
</code></pre><ol>
@ -491,7 +491,7 @@ add new nodes in every other nodes wg0.conf as peer
<h5 id="strongswan-ipsec-vs-wireguard">strongswan IPSEC VS wireguard</h5>
<p><strong>wireguard almost twice faster than strongswan</strong></p>
<p>iperf test with wireguard VPN 30 seconds benchmark</p>
<pre tabindex="0"><code>root@sdvpn:~# iperf -c 192.168.40.7 -t 30
<pre><code>root@sdvpn:~# iperf -c 192.168.40.7 -t 30
------------------------------------------------------------
Client connecting to 192.168.40.7, TCP port 5001
TCP window size: 85.0 KByte (default)
@ -501,7 +501,7 @@ TCP window size: 85.0 KByte (default)
[ 3] 0.0-30.1 sec 65.1 MBytes 18.1 Mbits/sec
root@sdvpn:~#
</code></pre><p>iperf test with strongswan VPN</p>
<pre tabindex="0"><code>root@sdvpn:~# iperf -c 192.168.40.7 -t 30
<pre><code>root@sdvpn:~# iperf -c 192.168.40.7 -t 30
------------------------------------------------------------
Client connecting to 192.168.40.7, TCP port 5001
TCP window size: 85.0 KByte (default)
@ -801,7 +801,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -318,7 +318,7 @@ if (!doNotTrack) {
</ol>
<p>來看一下 durep 執行的狀況
<strong>如果只指定一層,那就是顯示該目錄底下的使用狀況</strong></p>
<pre tabindex="0"><code>2018-10-29 15:50:21 [minion@tps006 ~]$ sudo durep -td 1 -sd /file
<pre><code>2018-10-29 15:50:21 [minion@tps006 ~]$ sudo durep -td 1 -sd /file
[ /file 259.0G (0 files, 3 dirs) ]
259.0G [############################# ] 100.00% Oct 25 2017 team/
1.7M [ ] 0.00% Oct 23 14:04 html/
@ -326,7 +326,7 @@ if (!doNotTrack) {
2018-10-29 15:50:26 [minion@tps006 ~]$ sudo durep -td 1 -sd /file
</code></pre><p>如果指定兩層
就顯示包含下一層目錄的磁碟使用量 <em>好像廢話</em></p>
<pre tabindex="0"><code>2018-10-29 16:14:23 [mini@s006 ~]$ sudo durep -td 2 -sd /file
<pre><code>2018-10-29 16:14:23 [mini@s006 ~]$ sudo durep -td 2 -sd /file
[ /file 259.0G (0 files, 3 dirs) ]
259.0G [############################# ] 100.00% Oct 25 2017 team/
259.0G [##############################] 100.00% Oct 3 15:08 tp/
@ -641,7 +641,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -320,25 +320,25 @@ if (!doNotTrack) {
<h4 id="安裝相關套件">安裝相關套件</h4>
<p><strong>以下步驟在三個node 都要操作</strong></p>
<p>安裝相依套件</p>
<pre tabindex="0"><code>sudo apt install make libssl1.0.0 libssl-dev libkrb5-3 libkrb5-dev libpq5 libpq-dev pgdg-keyring ssl-cert postgresql-plperl-11 postgresql-pltcl-11 postgresql-plpython-11 postgresql-plpython3-11 postgresql-11 postgresql-common postgresql-server-dev-11 postgresql-client-11 postgresql-client-common postgresql-doc-11 tcl8.6 libjson-perl tcl-tclreadline
<pre><code>sudo apt install make libssl1.0.0 libssl-dev libkrb5-3 libkrb5-dev libpq5 libpq-dev pgdg-keyring ssl-cert postgresql-plperl-11 postgresql-pltcl-11 postgresql-plpython-11 postgresql-plpython3-11 postgresql-11 postgresql-common postgresql-server-dev-11 postgresql-client-11 postgresql-client-common postgresql-doc-11 tcl8.6 libjson-perl tcl-tclreadline
</code></pre><p>安裝完成後切換到postgres身份把原本系統內的postgresql 檔存放目錄還有資料庫檔案目錄都清掉</p>
<pre tabindex="0"><code>sudo su - postgres
<pre><code>sudo su - postgres
mv /etc/postgresql/11 /etc/postgresql/11.bak
mv /var/lib/postgresql/11 /var/lib/postgresql/11.bak
exit
</code></pre><p>開始安裝 pg_auto_failover</p>
<pre tabindex="0"><code>curl https://install.citusdata.com/community/deb.sh | sudo bash
<pre><code>curl https://install.citusdata.com/community/deb.sh | sudo bash
sudo apt install postgresql-11-auto-failover -y
</code></pre><p>postgresql 的相關執行檔路徑預設不會載入到PATH變數中所以要自己手動增加</p>
<p>直接加入 /etc/environment ,或者是去修改使用者的 .profile 載入正確的 $PATH 都可以</p>
<pre tabindex="0"><code>#replace PATH variable in /etc/environment
<pre><code>#replace PATH variable in /etc/environment
PATH=&quot;/usr/lib/postgresql/11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games&quot;
</code></pre><p>因為要用 pg_auto_failover 來控制postgresql ,所以要把系統內建的服務先停掉,並且設定開啟不啟動</p>
<pre tabindex="0"><code>sudo systemctl disable postgresql
<pre><code>sudo systemctl disable postgresql
sudo systemctl stop postgresql
</code></pre><p>為了讓三台機器可以直接用hostname溝通所以要修改 /etc/hosts</p>
<pre tabindex="0"><code>#add to /etc/hosts
<pre><code>#add to /etc/hosts
192.168.11.151 monitor monitor.abc.com
192.168.11.152 pg-primary pg-primary.abc.com
192.168.11.153 pg-slave pg-slave.abc.com
@ -347,11 +347,11 @@ sudo systemctl stop postgresql
<h4 id="設定-monitor-node">設定 monitor node</h4>
<p><strong>在monitor node操作</strong></p>
<p><strong>建立monitor node</strong></p>
<pre tabindex="0"><code>sudo runuser -l postgres -c &quot;/usr/bin/pg_autoctl create monitor --pgdata /var/lib/postgresql/11/main --pgport 5432 --nodename monitor&quot;
<pre><code>sudo runuser -l postgres -c &quot;/usr/bin/pg_autoctl create monitor --pgdata /var/lib/postgresql/11/main --pgport 5432 --nodename monitor&quot;
</code></pre><p>這個步驟會在pg_hba.conf 中,新增一筆紀錄</p>
<pre tabindex="0"><code>host &quot;pg_auto_failover&quot; &quot;autoctl_node&quot; 192.168.11.0/24 trust # Auto-generated by pg_auto_failover
<pre><code>host &quot;pg_auto_failover&quot; &quot;autoctl_node&quot; 192.168.11.0/24 trust # Auto-generated by pg_auto_failover
</code></pre><p>檢查一下狀態,看看有沒有安裝成功</p>
<pre tabindex="0"><code>2019-09-19 06:56:09 [administrator@monitor ~]$ sudo runuser -l postgres -c &quot;psql -c '\'du&quot;
<pre><code>2019-09-19 06:56:09 [administrator@monitor ~]$ sudo runuser -l postgres -c &quot;psql -c '\'du&quot;
List of roles
Role name | Attributes | Member of
--------------+------------------------------------------------------------+-----------
@ -373,7 +373,7 @@ sudo systemctl stop postgresql
(4 rows)
</code></pre><p>OK看起來沒有問題</p>
<p><strong>啟動pg_auto_failover monitor</strong></p>
<pre tabindex="0"><code>2019-09-19 06:56:19 [administrator@monitor ~]$ sudo runuser -l postgres -c &quot;pg_autoctl run --pgdata /var/lib/postgresql/11/main&quot;
<pre><code>2019-09-19 06:56:19 [administrator@monitor ~]$ sudo runuser -l postgres -c &quot;pg_autoctl run --pgdata /var/lib/postgresql/11/main&quot;
06:57:38 INFO Managing PostgreSQL installation at &quot;/var/lib/postgresql/11/main&quot;
06:57:38 INFO PostgreSQL is running in &quot;/var/lib/postgresql/11/main&quot; on port 5432
06:57:38 INFO The version of extenstion &quot;pgautofailover&quot; is &quot;1.0&quot; on the monitor
@ -383,14 +383,14 @@ sudo systemctl stop postgresql
<p>要不就是用systemd/supervisor 來控制,這個後面再來改</p>
<p>就先放著讓他跑還可以順便觀察cluster變動時的狀態</p>
<p>再開一個terminal 跑底下的指令產生monitor node 的URI 在建立maser/slave node 的時候會用到</p>
<pre tabindex="0"><code>2019-09-19 06:58:39 [administrator@monitor ~]$ sudo runuser -l postgres -c &quot;pg_autoctl show uri --pgdata /var/lib/postgresql/11/main&quot;
<pre><code>2019-09-19 06:58:39 [administrator@monitor ~]$ sudo runuser -l postgres -c &quot;pg_autoctl show uri --pgdata /var/lib/postgresql/11/main&quot;
postgres://autoctl_node@monitor:5432/pg_auto_failover
2019-09-19 06:59:01 [administrator@monitor ~]$
</code></pre><p>以上完成monitor node 的準備工作</p>
<hr>
<h4 id="設定masterprimary-node">設定master/primary node</h4>
<p><strong>建立pg_auto_failover master/primary node</strong></p>
<pre tabindex="0"><code>2019-09-19 15:04:16 [administrator@pg-primary ~]$ sudo runuser -l postgres -c &quot;pg_autoctl create postgres --pgdata /var/lib/postgresql/11/main --pgport 5432 --nodename pg-primary --monitor postgres://autoctl_node@monitor:5432/pg_auto_failover&quot;
<pre><code>2019-09-19 15:04:16 [administrator@pg-primary ~]$ sudo runuser -l postgres -c &quot;pg_autoctl create postgres --pgdata /var/lib/postgresql/11/main --pgport 5432 --nodename pg-primary --monitor postgres://autoctl_node@monitor:5432/pg_auto_failover&quot;
15:04:19 INFO Found pg_ctl for PostgreSQL 11.5 at /usr/lib/postgresql/11/bin/pg_ctl
15:04:19 INFO Registered node pg-primary:5432 with id 1 in formation &quot;default&quot;, group 0.
15:04:19 INFO Writing keeper init state file at &quot;/var/lib/postgresql/.local/share/pg_autoctl/var/lib/postgresql/11/main/pg_autoctl.init&quot;
@ -406,7 +406,7 @@ postgres://autoctl_node@monitor:5432/pg_auto_failover
15:04:21 INFO Keeper has been succesfully initialized.
2019-09-19 15:04:21 [administrator@pg-primary ~]$
</code></pre><p><strong>啟動 pg_auto_failover master/primary node</strong></p>
<pre tabindex="0"><code>2019-09-19 15:14:34 [administrator@pg-primary ~]$ sudo runuser -l postgres -c &quot;pg_autoctl run --pgdata /var/lib/postgresql/11/main&quot;
<pre><code>2019-09-19 15:14:34 [administrator@pg-primary ~]$ sudo runuser -l postgres -c &quot;pg_autoctl run --pgdata /var/lib/postgresql/11/main&quot;
15:15:11 INFO Managing PostgreSQL installation at &quot;/var/lib/postgresql/11/main&quot;
15:15:11 INFO The version of extenstion &quot;pgautofailover&quot; is &quot;1.0&quot; on the monitor
15:15:11 INFO pg_autoctl service is starting
@ -414,7 +414,7 @@ postgres://autoctl_node@monitor:5432/pg_auto_failover
15:15:16 INFO Calling node_active for node default/1/0 with current state: single, PostgreSQL is running, sync_state is &quot;&quot;, WAL delta is -1.
15:15:21 INFO Calling node_active for node default/1/0 with current state: single, PostgreSQL is running, sync_state is &quot;&quot;, WAL delta is -1.
</code></pre><p>一樣,執行完之後,會停留在畫面上,所以開另一個視窗來執行以下檢查的指令</p>
<pre tabindex="0"><code>2019-09-19 15:17:08 [administrator@pg-primary ~]$ sudo runuser -l postgres -c &quot;pg_autoctl show state --pgdata /var/lib/postgresql/11/main&quot;
<pre><code>2019-09-19 15:17:08 [administrator@pg-primary ~]$ sudo runuser -l postgres -c &quot;pg_autoctl show state --pgdata /var/lib/postgresql/11/main&quot;
Name | Port | Group | Node | Current State | Assigned State
-----------+--------+-------+-------+-------------------+------------------
pg-primary | 5432 | 0 | 1 | single | single
@ -424,7 +424,7 @@ pg-primary | 5432 | 0 | 1 | single | single
<hr>
<p>####設定 slave/secondary node</p>
<p><strong>建立 pg_auto_failover slave/secondary node</strong></p>
<pre tabindex="0"><code>2019-09-19 07:04:08 [administrator@pg-slave ~]$ sudo runuser -l postgres -c &quot;pg_autoctl create postgres --pgdata /var/lib/postgresql/11/main --pgport 5432 --nodename pg-slave --monitor postgres://autoctl_node@monitor:5432/pg_auto_failover&quot;
<pre><code>2019-09-19 07:04:08 [administrator@pg-slave ~]$ sudo runuser -l postgres -c &quot;pg_autoctl create postgres --pgdata /var/lib/postgresql/11/main --pgport 5432 --nodename pg-slave --monitor postgres://autoctl_node@monitor:5432/pg_auto_failover&quot;
07:19:57 INFO Found pg_ctl for PostgreSQL 11.5 at /usr/lib/postgresql/11/bin/pg_ctl
07:19:57 INFO Registered node pg-slave:5432 with id 2 in formation &quot;default&quot;, group 0.
07:19:57 INFO Writing keeper init state file at &quot;/var/lib/postgresql/.local/share/pg_autoctl/var/lib/postgresql/11/main/pg_autoctl.init&quot;
@ -455,7 +455,7 @@ pg_basebackup: base backup completed
2019-09-19 07:20:04 [administrator@pg-slave ~]$
</code></pre><p>可以看到在建立slave/secondary node 的時候,就會開始第一次的同步</p>
<p>**啟動 pg_auto_failover slave/secondary node</p>
<pre tabindex="0"><code>2019-09-19 07:20:04 [administrator@pg-slave ~]$ sudo runuser -l postgres -c &quot;pg_autoctl run --pgdata /var/lib/postgresql/11/main&quot;
<pre><code>2019-09-19 07:20:04 [administrator@pg-slave ~]$ sudo runuser -l postgres -c &quot;pg_autoctl run --pgdata /var/lib/postgresql/11/main&quot;
07:21:33 INFO Managing PostgreSQL installation at &quot;/var/lib/postgresql/11/main&quot;
07:21:33 INFO The version of extenstion &quot;pgautofailover&quot; is &quot;1.0&quot; on the monitor
07:21:33 INFO pg_autoctl service is starting
@ -465,7 +465,7 @@ pg_basebackup: base backup completed
07:21:34 INFO Calling node_active for node default/2/0 with current state: secondary, PostgreSQL is running, sync_state is &quot;&quot;, WAL delta is 0.
07:21:39 INFO Calling node_active for node default/2/0 with current state: secondary, PostgreSQL is running, sync_state is &quot;&quot;, WAL delta is 0.
</code></pre><p>開新視窗確認狀態</p>
<pre tabindex="0"><code>2019-09-19 07:22:03 [administrator@pg-slave ~]$ sudo runuser -l postgres -c &quot;pg_autoctl show state --pgdata /var/lib/postgresql/11/main&quot;
<pre><code>2019-09-19 07:22:03 [administrator@pg-slave ~]$ sudo runuser -l postgres -c &quot;pg_autoctl show state --pgdata /var/lib/postgresql/11/main&quot;
Name | Port | Group | Node | Current State | Assigned State
-----------+--------+-------+-------+-------------------+------------------
pg-primary | 5432 | 0 | 1 | primary | primary
@ -475,7 +475,7 @@ pg-primary | 5432 | 0 | 1 | primary | primary
</code></pre><p>正常的話,應該就是會出現兩個 node ,一個 pg-primary 一個pg-slave</p>
<p><strong>generate URI for applications</strong></p>
<p>這個步驟是用來產生給client/applications 連線用的連線字串(connection string)</p>
<pre tabindex="0"><code>2019-09-19 07:29:56 [administrator@pg-slave ~]$ sudo runuser -l postgres -c &quot;pg_autoctl show uri --formation default --pgdata /var/lib/postgresql/11/main&quot;
<pre><code>2019-09-19 07:29:56 [administrator@pg-slave ~]$ sudo runuser -l postgres -c &quot;pg_autoctl show uri --formation default --pgdata /var/lib/postgresql/11/main&quot;
postgres://pg-slave:5432,pg-primary:5432/postgres?target_session_attrs=read-write
2019-09-19 07:30:06 [administrator@pg-slave ~]$
</code></pre><p>以後就都通過這個URI來存取這個cluster</p>
@ -489,7 +489,7 @@ postgres://pg-slave:5432,pg-primary:5432/postgres?target_session_attrs=read-writ
<h4 id="測試-auto-failover">測試 auto failover</h4>
<p>首先,在 pg-prmiary node 上透過上面產生的URI來進入psql</p>
<p>然後建立一個測試db、建立一個測試table插入幾筆資料</p>
<pre tabindex="0"><code>2019-09-20 10:58:21 [administrator@pg-primary ~]$ sudo runuser -l postgres -c &quot;psql postgres://pg-slave:5432,pg-primary:5432/postgres?target_session_attrs=read-write&quot;
<pre><code>2019-09-20 10:58:21 [administrator@pg-primary ~]$ sudo runuser -l postgres -c &quot;psql postgres://pg-slave:5432,pg-primary:5432/postgres?target_session_attrs=read-write&quot;
psql (11.5 (Ubuntu 11.5-1.pgdg18.04+1))
Type &quot;help&quot; for help.
@ -517,7 +517,7 @@ postgres=# select * from testtbl;
postgres=# \q
2019-09-20 10:59:30 [administrator@pg-primary ~]$
</code></pre><p>然後切換到 pg-slave 一樣透過URI進入psql 撈看看資料</p>
<pre tabindex="0"><code>2019-09-20 03:02:12 [administrator@pg-slave ~]$ sudo runuser -l postgres -c &quot;psql postgres://pg-slave:5432,pg-primary:5432/postgres?target_session_attrs=read-write&quot;
<pre><code>2019-09-20 03:02:12 [administrator@pg-slave ~]$ sudo runuser -l postgres -c &quot;psql postgres://pg-slave:5432,pg-primary:5432/postgres?target_session_attrs=read-write&quot;
psql (11.5 (Ubuntu 11.5-1.pgdg18.04+1))
Type &quot;help&quot; for help.
@ -534,7 +534,7 @@ postgres=#
</code></pre><p>確認透過URI的確是可以正常的存取資料</p>
<p>在兩台單機上(master/slave)上也都可以看到同樣的資料代表資料有正確的被同步到兩台node上</p>
<p><strong>pg-slave</strong></p>
<pre tabindex="0"><code>2019-09-20 03:03:06 [administrator@pg-slave ~]$ sudo runuser -l postgres -c psql
<pre><code>2019-09-20 03:03:06 [administrator@pg-slave ~]$ sudo runuser -l postgres -c psql
psql (11.5 (Ubuntu 11.5-1.pgdg18.04+1))
Type &quot;help&quot; for help.
@ -562,7 +562,7 @@ postgres=# select * from testtbl;
postgres=#
</code></pre><p><strong>pg-master</strong></p>
<pre tabindex="0"><code>2019-09-20 10:59:30 [administrator@pg-primary ~]$ sudo runuser -l postgres -c psql
<pre><code>2019-09-20 10:59:30 [administrator@pg-primary ~]$ sudo runuser -l postgres -c psql
psql (11.5 (Ubuntu 11.5-1.pgdg18.04+1))
Type &quot;help&quot; for help.
@ -591,7 +591,7 @@ postgres=# select * from testtbl;
postgres=#
</code></pre><p>接著來把本來是master的機器關掉看看會有什麼變化</p>
<p>首先在pg-slave 這台機器上就會看到cluster 有狀況primary 不見了</p>
<pre tabindex="0"><code>03:06:02 INFO Calling node_active for node default/4/0 with current state: secondary, PostgreSQL is running, sync_state is &quot;&quot;, WAL delta is 0.
<pre><code>03:06:02 INFO Calling node_active for node default/4/0 with current state: secondary, PostgreSQL is running, sync_state is &quot;&quot;, WAL delta is 0.
03:06:08 INFO Calling node_active for node default/4/0 with current state: secondary, PostgreSQL is running, sync_state is &quot;&quot;, WAL delta is 0.
03:06:13 INFO Calling node_active for node default/4/0 with current state: secondary, PostgreSQL is running, sync_state is &quot;&quot;, WAL delta is 0.
03:06:18 ERROR PostgreSQL cannot reach the primary server: the system view pg_stat_wal_receiver has no rows.
@ -605,7 +605,7 @@ postgres=#
03:06:38 ERROR PostgreSQL cannot reach the primary server: the system view pg_stat_wal_receiver has no rows.
03:06:38 INFO Calling node_active for node default/4/0 with current state: secondary, PostgreSQL is running, sync_state is &quot;&quot;, WAL delta is -1.
</code></pre><p>這時候在pg-slave 還能不能透過URI 連線進去psql操作</p>
<pre tabindex="0"><code>2019-09-20 03:08:06 [administrator@pg-slave ~]$ sudo runuser -l postgres -c &quot;psql postgres://pg-slave:5432,pg-primary:5432/postgres?target_session_attrs=read-write&quot;
<pre><code>2019-09-20 03:08:06 [administrator@pg-slave ~]$ sudo runuser -l postgres -c &quot;psql postgres://pg-slave:5432,pg-primary:5432/postgres?target_session_attrs=read-write&quot;
psql (11.5 (Ubuntu 11.5-1.pgdg18.04+1))
Type &quot;help&quot; for help.
@ -639,7 +639,7 @@ INSERT 0 1
postgres=# \q
2019-09-20 03:09:34 [administrator@pg-slave ~]$
</code></pre><p>很好,看起來沒有問題,這時候把 pg-primary 打開,執行啟動 pg_auto_failover node 的指令,看看會發生什麼事</p>
<pre tabindex="0"><code>2019-09-20 11:12:13 [administrator@pg-primary ~]$ sudo runuser -l postgres -c &quot;pg_autoctl run&quot;
<pre><code>2019-09-20 11:12:13 [administrator@pg-primary ~]$ sudo runuser -l postgres -c &quot;pg_autoctl run&quot;
11:12:29 INFO Managing PostgreSQL installation at &quot;/var/lib/postgresql/11/main&quot;
11:12:29 INFO The version of extenstion &quot;pgautofailover&quot; is &quot;1.0&quot; on the monitor
11:12:29 INFO pg_autoctl service is starting
@ -693,7 +693,7 @@ pg_basebackup: base backup completed
11:13:03 INFO Calling node_active for node default/1/0 with current state: secondary, PostgreSQL is running, sync_state is &quot;&quot;, WAL delta is 0.
</code></pre><p>可以看到 pg_auto_failover 偵測到了cluster node 有意異動開始同步資料然後切換角色從primary變成了 secondary</p>
<p>同一時間在pg-slave 的訊息也有變動</p>
<pre tabindex="0"><code>03:12:34 INFO Calling node_active for node default/4/0 with current state: wait_primary, PostgreSQL is running, sync_state is &quot;async&quot;, WAL delta is 0.
<pre><code>03:12:34 INFO Calling node_active for node default/4/0 with current state: wait_primary, PostgreSQL is running, sync_state is &quot;async&quot;, WAL delta is 0.
03:12:39 INFO Calling node_active for node default/4/0 with current state: wait_primary, PostgreSQL is running, sync_state is &quot;async&quot;, WAL delta is 0.
03:12:45 INFO Calling node_active for node default/4/0 with current state: wait_primary, PostgreSQL is running, sync_state is &quot;async&quot;, WAL delta is 0.
03:12:50 INFO Calling node_active for node default/4/0 with current state: wait_primary, PostgreSQL is running, sync_state is &quot;async&quot;, WAL delta is 0.
@ -704,7 +704,7 @@ pg_basebackup: base backup completed
03:12:55 INFO Calling node_active for node default/4/0 with current state: primary, PostgreSQL is running, sync_state is &quot;sync&quot;, WAL delta is 0.
</code></pre><p>pg-slave 的狀態從原本的secondary 變成了 primary</p>
<p>來檢查看看</p>
<pre tabindex="0"><code>2019-09-20 03:19:04 [administrator@pg-slave ~]$ sudo runuser -l postgres -c &quot;pg_autoctl show state&quot;
<pre><code>2019-09-20 03:19:04 [administrator@pg-slave ~]$ sudo runuser -l postgres -c &quot;pg_autoctl show state&quot;
Name | Port | Group | Node | Current State | Assigned State
-----------+--------+-------+-------+-------------------+------------------
pg-primary | 5432 | 0 | 1 | secondary | secondary
@ -714,7 +714,7 @@ pg-primary | 5432 | 0 | 1 | secondary | secondary
</code></pre><p>跟上面第一次執行的結果不同了,兩台角色互換了,這也是預期中的結果</p>
<p>那在pg-master 離線期間的異動資料呢?在 pg-master上查得到嗎</p>
<p>先透過 URI存取DB 檢查看看</p>
<pre tabindex="0"><code>2019-09-20 11:12:16 [administrator@pg-primary ~]$ sudo runuser -l postgres -c &quot;psql postgres://pg-slave:5432,pg-primary:5432/postgres?target_session_attrs=read-write&quot;
<pre><code>2019-09-20 11:12:16 [administrator@pg-primary ~]$ sudo runuser -l postgres -c &quot;psql postgres://pg-slave:5432,pg-primary:5432/postgres?target_session_attrs=read-write&quot;
psql (11.5 (Ubuntu 11.5-1.pgdg18.04+1))
Type &quot;help&quot; for help.
@ -745,7 +745,7 @@ postgres=# select * from testtbl_1108;
postgres=#
</code></pre><p>GOOD看來資料也同步過來了</p>
<p>再來看看單機的狀態</p>
<pre tabindex="0"><code>2019-09-20 11:22:07 [administrator@pg-primary ~]$ sudo runuser -l postgres -c &quot;psql&quot;
<pre><code>2019-09-20 11:22:07 [administrator@pg-primary ~]$ sudo runuser -l postgres -c &quot;psql&quot;
psql (11.5 (Ubuntu 11.5-1.pgdg18.04+1))
Type &quot;help&quot; for help.
@ -785,12 +785,12 @@ postgres=#
<p>而pg_auto_failover 有指令可以做成 systemd 的service 檔案</p>
<p>既然人家都做好了,當然就直接用 systemd 來做</p>
<p>執行以下指令,產生 systemd configuration</p>
<pre tabindex="0"><code>sudo runuser -l postgres -c &quot;pg_autoctl -q show systemd&quot; | sudo tee /etc/systemd/system/pgautofailover.service
<pre><code>sudo runuser -l postgres -c &quot;pg_autoctl -q show systemd&quot; | sudo tee /etc/systemd/system/pgautofailover.service
</code></pre><p>在/etc/systemd/system底下會多出一個 pgautofailover.service檔案</p>
<p>內容就是 pg_auto_failover 所提供的 systemd config</p>
<p>接下來就可以直接用 sudo service pgautofailover start 來啟動</p>
<p>沒有什麼問題,不過呢,這樣的作法,會在 /var/log/syslog 塞滿了 pg_auto_failover 的紀錄</p>
<pre tabindex="0"><code>Sep 20 14:59:34 pg-primary systemd[1]: Started pg_auto_failover.
<pre><code>Sep 20 14:59:34 pg-primary systemd[1]: Started pg_auto_failover.
Sep 20 14:59:34 pg-primary pg_autoctl[7817]: 14:59:34 INFO Managing PostgreSQL installation at &quot;/var/lib/postgresql/11/main&quot;
Sep 20 14:59:34 pg-primary pg_autoctl[7817]: 14:59:34 INFO Found a stale pidfile at &quot;/tmp/pg_autoctl/var/lib/postgresql/11/main/pg_autoctl.pid&quot;
Sep 20 14:59:34 pg-primary pg_autoctl[7817]: 14:59:34 WARN Removing the stale pid file &quot;/tmp/pg_autoctl/var/lib/postgresql/11/main/pg_autoctl.pid&quot;
@ -863,7 +863,7 @@ Sep 20 15:04:52 pg-primary pg_autoctl[7817]: 15:04:52 INFO Calling node_active
</code></pre><p>這樣下去不用多久syslog 一定爆,而且嚴重干擾到其他的系統訊息</p>
<p>所以要修改一下 config 把log 寫到另外的檔案去</p>
<p>在/etc/systemd/system/pgautofailover.service 加入底下兩行</p>
<pre tabindex="0"><code>StandardOutput=file:/var/log/pgautofailover.log
<pre><code>StandardOutput=file:/var/log/pgautofailover.log
StandardError=file:/var/log/pgautofailover-error.log
</code></pre><p>然後 sudo systemctl daemon-reload 接著重起 sudo service pgautofailover restart</p>
<p>就會把訊息都寫到 /var/log/pgautofailover.log , /var/log/pgautofailover-error.log</p>
@ -871,7 +871,7 @@ StandardError=file:/var/log/pgautofailover-error.log
<p>這個動作需要在三台node都執行</p>
<p>不過我在想應該是可以不要產生那麼多log ,只要紀錄 critical 就好了?來試試看加入 LogLevelMax=3 的效果</p>
<p>在 /etc/systemd/system/pgautofailover.service 檔案中的service 區段 加入</p>
<pre tabindex="0"><code>LogLevelMax=3
<pre><code>LogLevelMax=3
</code></pre><p>loglevel 的等級定義看這邊</p>
<p><a href="https://www.ctrl.blog/entry/systemd-log-levels.html">https://www.ctrl.blog/entry/systemd-log-levels.html</a></p>
<ul>
@ -885,10 +885,10 @@ StandardError=file:/var/log/pgautofailover-error.log
<li>debug (7)</li>
</ul>
<p>完成後,一樣執行</p>
<pre tabindex="0"><code>sudo systemctl daemon-reload
<pre><code>sudo systemctl daemon-reload
sudo service pgautofailover restart
</code></pre><p>看一下檔案內容,怎麼就沒有訊息了!</p>
<pre tabindex="0"><code>2019-09-20 15:23:15 [administrator@pg-primary ~]$ sudo tail -30 /var/log/pgautofailover.log
<pre><code>2019-09-20 15:23:15 [administrator@pg-primary ~]$ sudo tail -30 /var/log/pgautofailover.log
15:14:22 INFO Calling node_active for node default/1/0 with current state: secondary, PostgreSQL is running, sync_state is &quot;&quot;, WAL delta is 0.
15:14:27 INFO Calling node_active for node default/1/0 with current state: secondary, PostgreSQL is running, sync_state is &quot;&quot;, WAL delta is 0.
15:14:32 INFO Calling node_active for node default/1/0 with current state: secondary, PostgreSQL is running, sync_state is &quot;&quot;, WAL delta is 0.
@ -921,7 +921,7 @@ sudo service pgautofailover restart
15:16:39 INFO pg_autoctl service stopping
2019-09-20 15:23:29 [administrator@pg-primary ~]$
</code></pre><p>可是我的服務活著啊!</p>
<pre tabindex="0"><code>2019-09-20 15:23:29 [administrator@pg-primary ~]$ sudo service pgautofailover status
<pre><code>2019-09-20 15:23:29 [administrator@pg-primary ~]$ sudo service pgautofailover status
● pgautofailover.service - pg_auto_failover
Loaded: loaded (/etc/systemd/system/pgautofailover.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2019-09-20 15:16:39 CST; 7min ago
@ -933,7 +933,7 @@ sudo service pgautofailover restart
Sep 20 15:16:39 pg-primary systemd[1]: Started pg_auto_failover.
2019-09-20 15:23:56 [administrator@pg-primary ~]$
</code></pre><p>拿另一台來做實驗,先不要加入 loglevelmax=3 看看log到底長怎樣</p>
<pre tabindex="0"><code>2019-09-20 07:25:34 [administrator@pg-slave ~]$ sudo service pgautofailover stop
<pre><code>2019-09-20 07:25:34 [administrator@pg-slave ~]$ sudo service pgautofailover stop
2019-09-20 07:25:58 [administrator@pg-slave ~]$ sudo tail -10 /var/log/syslog
Sep 20 07:25:32 pg-slave pg_autoctl[5840]: 07:25:32 INFO Calling node_active for node default/4/0 with current state: primary, PostgreSQL is running, sync_state is &quot;sync&quot;, WAL delta is 0.
Sep 20 07:25:37 pg-slave pg_autoctl[5840]: 07:25:37 INFO Calling node_active for node default/4/0 with current state: primary, PostgreSQL is running, sync_state is &quot;sync&quot;, WAL delta is 0.
@ -953,7 +953,7 @@ Sep 20 07:25:58 pg-slave systemd[1]: Stopped pg_auto_failover.
<hr>
<h4 id="設定-supervisor">設定 supervisor</h4>
<p><strong>安裝supervisor</strong></p>
<pre tabindex="0"><code>sudo apt install supervisor
<pre><code>sudo apt install supervisor
sudo vim /etc/supervisor/conf.d/pgautofailover.conf
加入以下內容
[program:pgautofailover]
@ -964,12 +964,12 @@ autorestart=true
redirect_stderr = true
environment=PGDATA=/var/lib/postgresql/11/main,HOME=/var/lib/postgresql
</code></pre><p>重新啟動 supervisor &amp; 檢查狀態</p>
<pre tabindex="0"><code>2019-09-20 17:26:22 [administrator@pg-primary postgresql]$ sudo service supervisor restart
<pre><code>2019-09-20 17:26:22 [administrator@pg-primary postgresql]$ sudo service supervisor restart
2019-09-20 17:26:57 [administrator@pg-primary postgresql]$ sudo supervisorctl status
pgautofailover RUNNING pid 14554, uptime 0:00:05
2019-09-20 17:27:03 [administrator@pg-primary postgresql]$
</code></pre><p>檢查 supervisor log</p>
<pre tabindex="0"><code>2019-09-20 17:27:03 [administrator@pg-primary postgresql]$ sudo tail -30 /var/log/supervisor/pgautofailover-stdout---supervisor-5V8qET.log
<pre><code>2019-09-20 17:27:03 [administrator@pg-primary postgresql]$ sudo tail -30 /var/log/supervisor/pgautofailover-stdout---supervisor-5V8qET.log
17:26:58 INFO Managing PostgreSQL installation at &quot;/var/lib/postgresql/11/main&quot;
17:26:58 INFO Found a stale pidfile at &quot;/tmp/pg_autoctl/var/lib/postgresql/11/main/pg_autoctl.pid&quot;
17:26:58 WARN Removing the stale pid file &quot;/tmp/pg_autoctl/var/lib/postgresql/11/main/pg_autoctl.pid&quot;
@ -984,7 +984,7 @@ pgautofailover RUNNING pid 14554, uptime 0:00:05
</code></pre><p>簡單多了 &hellip; 在剩下的monitor/slave 也一樣操作安裝、設定supervisor 就可以了</p>
<p>喔,順便把剛剛新增的 systemd config 給砍了..</p>
<p>不過不砍也沒差,反正開機也不會自己啟動 = =+</p>
<pre tabindex="0"><code>2019-09-20 17:24:17 [administrator@pg-slave ~]$ sudo rm -rf /etc/systemd/system/pgautofailover.service
<pre><code>2019-09-20 17:24:17 [administrator@pg-slave ~]$ sudo rm -rf /etc/systemd/system/pgautofailover.service
#安裝supervisor
2019-09-20 17:23:08 [administrator@pg-slave ~]$ sudo apt install supervisor
Reading package lists... Done
@ -1041,7 +1041,7 @@ pgautofailover RUNNING pid 2232, uptime 0:00:04
<hr>
<p>UPDATE</p>
<p>新增用logrotate 來管理 pgautofailover logfile</p>
<pre tabindex="0"><code>sudo vim /etc/logrotate.d/pgautofailover
<pre><code>sudo vim /etc/logrotate.d/pgautofailover
/var/log/supervisor/pgautofail*.log {
daily
@ -1055,7 +1055,7 @@ pgautofailover RUNNING pid 2232, uptime 0:00:04
</code></pre><p>UPDATE</p>
<p>當node 消失需要手動在monitor上執行以下指令來移除node 才能夠再次加入新的node</p>
<pre tabindex="0"><code>2019-09-24 01:11:09 [administrator@monitor ~]$ sudo runuser -l postgres -c &quot;psql postgres://autoctl_node@monitor:5432/pg_auto_failover&quot;
<pre><code>2019-09-24 01:11:09 [administrator@monitor ~]$ sudo runuser -l postgres -c &quot;psql postgres://autoctl_node@monitor:5432/pg_auto_failover&quot;
psql (11.5 (Ubuntu 11.5-1.pgdg18.04+1))
Type &quot;help&quot; for help.
@ -1356,7 +1356,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -314,7 +314,7 @@ if (!doNotTrack) {
<h5 id="barmand">barman.d</h5>
<p>在/etc/barman.d/ 底下新增一個hqs019-ssh.conf</p>
<p>內容如下</p>
<pre tabindex="0"><code>[hqs019-ssh]
<pre><code>[hqs019-ssh]
description = &quot;hqs019 (via SSH)&quot;
ssh_command = ssh postgres@hqs019
conninfo = host=hqs019 user=barman dbname=database_name
@ -324,18 +324,18 @@ parallel_jobs = 5
archiver = on
</code></pre><h5 id="postgresqlconf">postgresql.conf</h5>
<p>新增跟barman有關的設定如下</p>
<pre tabindex="0"><code>### for barman test
<pre><code>### for barman test
wal_level = 'archive'
archive_mode = on
archive_command = 'rsync -a %p barman@192.168.11.192:/var/lib/barman/hqs019-ssh/incoming/%f'
</code></pre><p>理論上這樣就可以了,但是實際上碰到很多問題</p>
<p>主要都是這個錯誤訊息</p>
<pre tabindex="0"><code>WAL archive: FAILED (please make sure WAL shipping is setup)
<pre><code>WAL archive: FAILED (please make sure WAL shipping is setup)
</code></pre><p>碰到這狀況google 都會告訴你,在 postgresql.conf 裡面 archive_command 的路徑,要和 barman server 上的設定一致
<img src="https://i.imgur.com/3dMdytn.png" alt=""></p>
<p>但是我的路徑就沒有問題,還是一直跳這個錯誤</p>
<p>接著我又在 barman server 這邊做了這些事情</p>
<pre tabindex="0"><code>barman check hqs019-ssh
<pre><code>barman check hqs019-ssh
barman check hqs019-ssh
barman check hqs019-ssh
ssh postgres@hqs019
@ -363,7 +363,7 @@ barman check hqs019
<p>想說確認一下psql 連接是不是正確(也的確正確無誤)</p>
<p>接著第一次 check 還是FAILED 喔,過沒多久我再跑一次 check 又正常了&hellip; WTF !!!</p>
<p>只要check 正常,接著跑 backup 應該就會很順利</p>
<pre tabindex="0"><code>barman@barman:~$ barman backup hqs019-ssh
<pre><code>barman@barman:~$ barman backup hqs019-ssh
Starting backup using rsync-exclusive method for server hqs019-ssh in /var/lib/barman/hqs019-ssh/base/20190823T113229
Backup start at LSN: 264/B7000028 (0000000100000264000000B7, 00000028)
This is the first backup for server hqs019-ssh
@ -383,10 +383,10 @@ Processing xlog segments from file archival for hqs019-ssh
0000000100000264000000B7.00000028.backup
barman@barman:~$
</code></pre><p>檢查一下狀態</p>
<pre tabindex="0"><code>barman@barman:~$ barman list-backup hqs019-ssh
<pre><code>barman@barman:~$ barman list-backup hqs019-ssh
hqs019-ssh 20190823T113229 - Thu Aug 22 20:38:13 2019 - Size: 132.9 GiB - WAL Size: 0 B (tablespaces: tablespace_a:/var/lib/postgresql/10/main/tablespace_A, tablespace_b:/var/lib/postgresql/10/main/tablespace_B)
</code></pre><p>然後為了驗證是不是跑增量備份,所以再執行一次 backup</p>
<pre tabindex="0"><code>barman@barman:~$ barman backup hqs019-ssh
<pre><code>barman@barman:~$ barman backup hqs019-ssh
Starting backup using rsync-exclusive method for server hqs019-ssh in /var/lib/barman/hqs019-ssh/base/20190823T132124
Backup start at LSN: 264/B9000028 (0000000100000264000000B9, 00000028)
Starting backup copy via rsync/SSH for 20190823T132124 (5 jobs)
@ -696,7 +696,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -313,10 +313,10 @@ if (!doNotTrack) {
<p>原理就不說了,我一直沒搞懂 postgresql 的 streaming ..</p>
<p>依照官方網站上的說法,比較推薦 streaming 備份的方式</p>
<p>原因是設定相對簡單WTF !</p>
<pre tabindex="0"><code>On a general basis, starting from Barman 2.0, backup over streaming replication is the recommended setup for PostgreSQL 9.4 or higher
<pre><code>On a general basis, starting from Barman 2.0, backup over streaming replication is the recommended setup for PostgreSQL 9.4 or higher
The reason why we recommend streaming backup is that, based on our experience, it is easier to setup than the traditional one
</code></pre><p>事實上呢,設定的確是很簡單,可是有個致命的缺點</p>
<pre tabindex="0"><code>Because Barman transparently makes use of pg_basebackup, features such as incremental backup, parallel backup, deduplication, and network compression are currently not available. In this case, bandwidth limitation has some restrictions - compared to the traditional method via rsync.
<pre><code>Because Barman transparently makes use of pg_basebackup, features such as incremental backup, parallel backup, deduplication, and network compression are currently not available. In this case, bandwidth limitation has some restrictions - compared to the traditional method via rsync.
</code></pre><p>如果要做差異/增量備份, streaming backup 不能做</p>
<p>所以每次備份都是完整備份也因此barman server 需要準備很大的硬碟空間</p>
<p>以我測試的資料庫來說一次備份目前是133G ,如果一天四次,保留七天</p>
@ -331,20 +331,20 @@ hostname: hqs019</p>
<p>streaming backup 需要先在postgresql Server 上建立一個具有 superuser 權限的帳號</p>
<p>以及一個用來做replication 的資料庫帳號</p>
<p>這裡就簡單帶過</p>
<pre tabindex="0"><code>sudo su - postgres
<pre><code>sudo su - postgres
psql
create user barman with login superuser login password 'barmanpassword';
CREATE ROLE stream_barman WITH REPLICATION PASSWORD 'password' LOGIN;
</code></pre><h5 id="鄉改-pg_hbaconf">鄉改 pg_hba.conf</h5>
<p>然後修改 pg_hba.conf加入底下兩行</p>
<pre tabindex="0"><code># for barman test
<pre><code># for barman test
host database_name barman 192.168.11.192/32 md5
host replication stream_barman 192.168.11.192/32 md5
</code></pre><p>當然,如果不考慮安全性問題, md5 直接改成用 trust ,可以省去一些麻煩。</p>
<h5 id="修改-postgresqlconf">修改 postgresql.conf</h5>
<p>接著修改postgresql.conf</p>
<pre tabindex="0"><code>### for barman test
<pre><code>### for barman test
max_wal_senders = 5
max_replication_slots = 3
wal_level = 'archive'
@ -356,16 +356,16 @@ hostname: barman</p>
<h5 id="安裝-barman">安裝 barman</h5>
<p>barman 在18.04 中已經被放到標準repository 中</p>
<p>所以只要直接</p>
<pre tabindex="0"><code>sudo apt install barman
<pre><code>sudo apt install barman
</code></pre><p>就可以了</p>
<h5 id="設定-barmanconf">設定 barman.conf</h5>
<p>安裝完成後,在/etc/barman.d/ 底下會有兩個範例檔案</p>
<pre tabindex="0"><code>streaming-server.conf-template
<pre><code>streaming-server.conf-template
ssh-server.conf-template
</code></pre><p>複製 streaming-server 檔案</p>
<pre tabindex="0"><code>sudo cp /etc/barman.d/streaming-server.conf-template /etc/barman.d/hqs019.conf
<pre><code>sudo cp /etc/barman.d/streaming-server.conf-template /etc/barman.d/hqs019.conf
</code></pre><p>內容如下</p>
<pre tabindex="0"><code>[hqs019]
<pre><code>[hqs019]
description = &quot;hqs019 &quot;
conninfo = host=192.168.11.19 user=barman dbname=database_name password=barmanpassword
streaming_conninfo = host=192.168.11.19 user=stream_barman dbname=database_name password=password
@ -374,7 +374,7 @@ retention_policy_mode = auto
streaming_archiver = on
slot_name = barman
</code></pre><p>接著修改 /etc/barman.conf</p>
<pre tabindex="0"><code>[barman]
<pre><code>[barman]
barman_user = barman
configuration_files_directory = /etc/barman.d
barman_home = /var/lib/barman
@ -389,7 +389,7 @@ last_backup_maximum_age = 1 DAYS
<h5 id="檢查設定">檢查設定</h5>
<p>barman 有一些指令可以用來檢查目前的設定</p>
<p>barman show-server hqs019 可以看到所有的設定,這裡的 hqs019 跟 barman.d/hqs019.conf 裡面用&quot;[ ]&quot; 包起來的名稱要一致</p>
<pre tabindex="0"><code>barman@barman:~$ barman show-server hqs019
<pre><code>barman@barman:~$ barman show-server hqs019
Server hqs019:
active: True
archiver: False
@ -477,7 +477,7 @@ Server hqs019:
wals_directory: /var/lib/barman/hqs019/wals
xlogpos: 264/BA000F08
</code></pre><p>然後用 barman check hqs019 來檢查config 有沒有問題</p>
<pre tabindex="0"><code>barman@barman:~$ barman check hqs019
<pre><code>barman@barman:~$ barman check hqs019
Server hqs019:
PostgreSQL: OK
is_superuser: OK
@ -501,7 +501,7 @@ barman@barman:~$
</code></pre><p>那個backup maximum age FAILED 不用管他,因為都還沒跑過備份,這邊錯誤是正常的</p>
<p>其他都OK 的話,就可以開始備份了</p>
<p>barman backup hqs019</p>
<pre tabindex="0"><code>barman@ubuntu:~$ barman backup hqs019
<pre><code>barman@ubuntu:~$ barman backup hqs019
Starting backup using postgres method for server hqs019 in /var/lib/barman/hqs019/base/20190823T082258
Backup start at LSN: 264/A10001A8 (0000000100000264000000A1, 000001A8)
Starting backup copy via pg_basebackup for 20190823T082258
@ -520,10 +520,10 @@ Processing xlog segments from streaming for hqs019
barman@ubuntu:~$
</code></pre><p>跑完可以用 barman list-backup hqs019 檢查</p>
<pre tabindex="0"><code>barman@ubuntu:~$ barman list-backup hqs019
<pre><code>barman@ubuntu:~$ barman list-backup hqs019
hqs019 20190823T082258 - Thu Aug 22 17:29:26 2019 - Size: 133.0 GiB - WAL Size: 0 B (tablespaces: tablespace_a:/var/lib/postgresql/10/main/tablespace_A, tablespace_b:/var/lib/postgresql/10/main/tablespace_B)
</code></pre><p>要刪除的話,要加入 backupID</p>
<pre tabindex="0"><code>barman@ubuntu:~$ barman delete hqs019 20190822T171355
<pre><code>barman@ubuntu:~$ barman delete hqs019 20190822T171355
Deleting backup 20190822T171355 for server hqs019
Delete associated WAL segments:
00000001000002640000009F
@ -822,7 +822,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -310,7 +310,7 @@ if (!doNotTrack) {
<h3 id="建立測試資料庫tablesnapshot">建立測試資料庫、TABLE、snapshot</h3>
<h4 id="資料庫現況">資料庫現況</h4>
<p>只有系統預設的DB沒有其他多的東西</p>
<pre tabindex="0"><code>postgres@hqdc034:~$ psql -c '\l'
<pre><code>postgres@hqdc034:~$ psql -c '\l'
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
@ -324,7 +324,7 @@ if (!doNotTrack) {
postgres@hqdc034:~$ du -sh /zp/database/10/main/
232M /zp/database/10/main/
</code></pre><h4 id="建立第一次的快照">建立第一次的快照</h4>
<pre tabindex="0"><code>2019-09-06 09:03:46 [changch@hqdc034 ~]$ sudo zfs list -t snapshot
<pre><code>2019-09-06 09:03:46 [changch@hqdc034 ~]$ sudo zfs list -t snapshot
no datasets available
2019-09-06 09:03:53 [changch@hqdc034 ~]$ sudo zfs snapshot zp/database@init_db_no_demo
2019-09-06 09:04:09 [changch@hqdc034 ~]$ sudo zfs list -t snapshot
@ -332,13 +332,13 @@ NAME USED AVAIL REFER MOUNTPOINT
zp/database@init_db_no_demo 0 - 231M -
2019-09-06 09:04:15 [changch@hqdc034 ~]$
</code></pre><h4 id="建立倒回測試資料庫-demo">建立、倒回測試資料庫 demo</h4>
<pre tabindex="0"><code>postgres@hqdc034:~$ createdb demo
<pre><code>postgres@hqdc034:~$ createdb demo
postgres@hqdc034:~$ psql demo &lt; /home/changch/Downloads/demo.sql
SET
SET
略...
</code></pre><p>再檢查一次資料庫的狀況,看到 demo DB出現了資料庫目錄也變大了</p>
<pre tabindex="0"><code>postgres@hqdc034:~$ psql -c '\l'
<pre><code>postgres@hqdc034:~$ psql -c '\l'
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
@ -355,25 +355,25 @@ postgres@hqdc034:~$ du -sh /zp/database/10/main/
postgres@hqdc034:~$
</code></pre><h4 id="建立第二次快照">建立第二次快照</h4>
<p>這次的快照,將包含剛剛倒回的 demo DB但是不包含等下才要建立的測試 table</p>
<pre tabindex="0"><code>2019-09-06 09:16:01 [changch@hqdc034 ~]$ sudo zfs list -t snapshot
<pre><code>2019-09-06 09:16:01 [changch@hqdc034 ~]$ sudo zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
zp/database@init_db_no_demo 250K - 231M -
zp/database@demo_db_just_restore 0 - 2.08G -
2019-09-06 09:16:04 [changch@hqdc034 ~]$
</code></pre><h4 id="建立測試-table">建立測試 table</h4>
<pre tabindex="0"><code>postgres@hqdc034:~$ psql -c 'create table test ( a int, b varchar(50) );'
<pre><code>postgres@hqdc034:~$ psql -c 'create table test ( a int, b varchar(50) );'
CREATE TABLE
postgres@hqdc034:~$
</code></pre><h4 id="建立第三次快照">建立第三次快照</h4>
<p>這次快照,只有建立 test table ,但是裡面沒有資料</p>
<pre tabindex="0"><code>2019-09-06 09:18:34 [changch@hqdc034 ~]$ sudo zfs list -t snapshot
<pre><code>2019-09-06 09:18:34 [changch@hqdc034 ~]$ sudo zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
zp/database@init_db_no_demo 250K - 231M -
zp/database@demo_db_just_restore 138K - 2.08G -
zp/database@demo_db_create_test_table_but_no_data 0 - 2.08G -
2019-09-06 09:18:36 [changch@hqdc034 ~]$
</code></pre><h4 id="在test-table-插入100萬筆資料">在test table 插入100萬筆資料</h4>
<pre tabindex="0"><code>postgres@hqdc034:~$ psql -c 'with aa as ( select * from generate_series (1,1000000) a ) insert into test select aa.a, md5(aa.a::varchar) from aa;'
<pre><code>postgres@hqdc034:~$ psql -c 'with aa as ( select * from generate_series (1,1000000) a ) insert into test select aa.a, md5(aa.a::varchar) from aa;'
INSERT 0 1000000
postgres@hqdc034:~$ psql -c 'select count(*) from test;'
count
@ -384,7 +384,7 @@ postgres@hqdc034:~$ psql -c 'select count(*) from test;'
postgres@hqdc034:~$
</code></pre><h4 id="建立第四次快照">建立第四次快照</h4>
<p>test table 內有 1000000 筆資料</p>
<pre tabindex="0"><code>2019-09-06 09:18:36 [changch@hqdc034 ~]$ sudo zfs snapshot zp/database@demo_db_test_table_with_1M_rows
<pre><code>2019-09-06 09:18:36 [changch@hqdc034 ~]$ sudo zfs snapshot zp/database@demo_db_test_table_with_1M_rows
2019-09-06 09:21:08 [changch@hqdc034 ~]$ sudo zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
zp/database@init_db_no_demo 250K - 231M -
@ -393,7 +393,7 @@ zp/database@demo_db_create_test_table_but_no_data 116K - 2.08G -
zp/database@demo_db_test_table_with_1M_rows 0 - 2.15G -
2019-09-06 09:21:09 [changch@hqdc034 ~]$
</code></pre><h4 id="再次插入-100萬筆資料">再次插入 100萬筆資料</h4>
<pre tabindex="0"><code>postgres@hqdc034:~$ time psql -c 'with aa as ( select * from generate_series (1,1000000) a ) insert into test select aa.a, md5(aa.a::varchar) from aa;'
<pre><code>postgres@hqdc034:~$ time psql -c 'with aa as ( select * from generate_series (1,1000000) a ) insert into test select aa.a, md5(aa.a::varchar) from aa;'
INSERT 0 1000000
real 0m4.276s
@ -408,7 +408,7 @@ postgres@hqdc034:~$ psql -c 'select count(*) from test;'
postgres@hqdc034:~$
</code></pre><h4 id="建立第五次快照">建立第五次快照</h4>
<p>現在 test table 有 200萬筆資料了</p>
<pre tabindex="0"><code>2019-09-06 09:21:09 [changch@hqdc034 ~]$ sudo zfs snapshot zp/database@demo_db_test_table_with_2M_rows
<pre><code>2019-09-06 09:21:09 [changch@hqdc034 ~]$ sudo zfs snapshot zp/database@demo_db_test_table_with_2M_rows
2019-09-06 09:22:29 [changch@hqdc034 ~]$ sudo zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
zp/database@init_db_no_demo 250K - 231M -
@ -418,7 +418,7 @@ zp/database@demo_db_test_table_with_1M_rows 218K - 2.15G -
zp/database@demo_db_test_table_with_2M_rows 0 - 2.23G -
2019-09-06 09:22:30 [changch@hqdc034 ~]$
</code></pre><h4 id="玩大點直接湊滿1000萬筆資料好了">玩大點直接湊滿1000萬筆資料好了</h4>
<pre tabindex="0"><code>postgres@hqdc034:~$ time psql -c 'with aa as ( select * from generate_series (1,8000000) a ) insert into test select aa.a, md5(aa.a::varchar) from aa;'
<pre><code>postgres@hqdc034:~$ time psql -c 'with aa as ( select * from generate_series (1,8000000) a ) insert into test select aa.a, md5(aa.a::varchar) from aa;'
INSERT 0 8000000
real 0m32.172s
@ -432,7 +432,7 @@ postgres@hqdc034:~$ psql -c 'select count(*) from test;'
postgres@hqdc034:~$
</code></pre><h4 id="建立第六次快照">建立第六次快照</h4>
<p>10M rows in test table</p>
<pre tabindex="0"><code>2019-09-06 09:22:30 [changch@hqdc034 ~]$ sudo zfs snapshot zp/database@demo_db_test_table_with_10M_rows
<pre><code>2019-09-06 09:22:30 [changch@hqdc034 ~]$ sudo zfs snapshot zp/database@demo_db_test_table_with_10M_rows
2019-09-06 09:25:18 [changch@hqdc034 ~]$ sudo zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
zp/database@init_db_no_demo 250K - 231M -
@ -443,13 +443,13 @@ zp/database@demo_db_test_table_with_2M_rows 530K - 2.23G -
zp/database@demo_db_test_table_with_10M_rows 163K - 2.97G -
2019-09-06 09:25:21 [changch@hqdc034 ~]$
</code></pre><p>到1000萬筆資料為止現在資料庫大小是這樣</p>
<pre tabindex="0"><code>postgres@hqdc034:~$ du -sh /zp/database/10/main/
<pre><code>postgres@hqdc034:~$ du -sh /zp/database/10/main/
3.0G /zp/database/10/main/
postgres@hqdc034:~$
</code></pre><hr>
<h3 id="還原測試">還原測試</h3>
<p>最後一次做快照的時候demo DB 裡面有一千萬筆資料現在來砍掉500萬筆</p>
<pre tabindex="0"><code>postgres@hqdc034:~$ time psql -c 'delete from test where a &gt; 5000000;'
<pre><code>postgres@hqdc034:~$ time psql -c 'delete from test where a &gt; 5000000;'
DELETE 3000000
real 0m7.844s
@ -472,14 +472,14 @@ postgres@hqdc034:~$
<p>假設剛剛這個刪除是錯誤的動作我要回到1000萬資料的狀態就可以用zfs rollback 來達成</p>
<h4 id="第一次還原">第一次還原</h4>
<p>目標是還原到包含1000萬筆資料的狀態(現在是700萬筆)</p>
<pre tabindex="0"><code>2019-09-06 09:25:21 [changch@hqdc034 ~]$ sudo service postgresql stop
<pre><code>2019-09-06 09:25:21 [changch@hqdc034 ~]$ sudo service postgresql stop
* Stopping PostgreSQL 10 database server [ OK ]
2019-09-06 10:14:12 [changch@hqdc034 ~]$ sudo zfs rollback -r zp/database@demo_db_test_table_with_10M_rows
2019-09-06 10:14:28 [changch@hqdc034 ~]$ sudo service postgresql start
* Starting PostgreSQL 10 database server [ OK ]
2019-09-06 10:14:57 [changch@hqdc034 ~]$
</code></pre><p>檢查一下</p>
<pre tabindex="0"><code>postgres@hqdc034:~$ time psql -c 'select count(*) from test;'
<pre><code>postgres@hqdc034:~$ time psql -c 'select count(*) from test;'
count
----------
10000000
@ -493,7 +493,7 @@ postgres@hqdc034:~$
</code></pre><p>沒錯又回到1000萬筆資料的狀態了</p>
<p>要注意的是如果回到更之前的狀態在該狀態之後的快照將會被清除除非你先做clone
比如我現在要回到 200萬筆的狀態那1000萬筆資料的快照就會被刪除</p>
<pre tabindex="0"><code>2019-09-06 10:17:32 [changch@hqdc034 ~]$ sudo service postgresql stop
<pre><code>2019-09-06 10:17:32 [changch@hqdc034 ~]$ sudo service postgresql stop
* Stopping PostgreSQL 10 database server [ OK ]
2019-09-06 10:18:50 [changch@hqdc034 ~]$ sudo zfs rollback -r zp/database@demo_db_test_table_with_2M_rows
2019-09-06 10:18:57 [changch@hqdc034 ~]$ sudo zfs list -t snapshot
@ -519,7 +519,7 @@ sys 0m0.008s
postgres@hqdc034:~$
</code></pre><p>我剛剛應該先clone的&hellip;.
沒關係我們再做一次新增800萬筆資料湊齊1000萬筆然後快照</p>
<pre tabindex="0"><code>postgres@hqdc034:~$ time psql -c 'with aa as ( select * from generate_series (1,8000000) a ) insert into test select aa.a, md5(aa.a::varchar) from aa;'
<pre><code>postgres@hqdc034:~$ time psql -c 'with aa as ( select * from generate_series (1,8000000) a ) insert into test select aa.a, md5(aa.a::varchar) from aa;'
INSERT 0 8000000
real 0m35.662s
@ -536,7 +536,7 @@ user 0m0.024s
sys 0m0.008s
postgres@hqdc034:~$
</code></pre><p>做快照</p>
<pre tabindex="0"><code>2019-09-06 10:19:17 [changch@hqdc034 ~]$ sudo zfs snapshot zp/database@demo_db_test_table_with_10M_rows
<pre><code>2019-09-06 10:19:17 [changch@hqdc034 ~]$ sudo zfs snapshot zp/database@demo_db_test_table_with_10M_rows
2019-09-06 10:22:59 [changch@hqdc034 ~]$ sudo zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
zp/database@init_db_no_demo 250K - 231M -
@ -547,11 +547,11 @@ zp/database@demo_db_test_table_with_2M_rows 56.4M - 2.23G -
zp/database@demo_db_test_table_with_10M_rows 0 - 1.81G -
2019-09-06 10:23:02 [changch@hqdc034 ~]$
</code></pre><p>接著來測試看看 clone snapshot這是基本的說明</p>
<pre tabindex="0"><code>Clones can only be created from a snapshot and a snapshot can not
<pre><code>Clones can only be created from a snapshot and a snapshot can not
be deleted until you delete the clone that is based on this snapshot.
To create a clone, use the zfs clone command.
</code></pre><p>clone 會做出一份跟clone來源一模一樣的資料在快照模式下資料是唯讀的clone出來後就可以做異動。但是不能刪除clone來源的快照會提示錯誤。</p>
<pre tabindex="0"><code>2019-09-06 10:28:31 [changch@hqdc034 ~]$ sudo zfs clone zp/database@demo_db_test_table_with_10M_rows zp/database/clone_with_10M_rows
<pre><code>2019-09-06 10:28:31 [changch@hqdc034 ~]$ sudo zfs clone zp/database@demo_db_test_table_with_10M_rows zp/database/clone_with_10M_rows
2019-09-06 10:29:21 [changch@hqdc034 ~]$ sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
zp 3.08G 231G 22K /zp
@ -561,18 +561,18 @@ zp/database/clone_with_10M_rows 0 231G 1.81G /zp/database/clone_with_10
</code></pre><p>可以看到做了clone之後多了一個 zfs dataset
試試看把資料庫路徑直接改到這個新做的dataset 看看能不能啟動資料庫
修改 /etc/postgresql/10/main/postgresql.conf然後重起postgresql</p>
<pre tabindex="0"><code>#data_directory = '/var/lib/postgresql/10/main' # use data in another directory
<pre><code>#data_directory = '/var/lib/postgresql/10/main' # use data in another directory
#data_directory = '/zp/database/10/main'
data_directory = '/zp/database/clone_with_10M_rows/10/main'
</code></pre><p><strong>啟動有比較久一點</strong> 而且好像沒成功啟動</p>
<pre tabindex="0"><code>2019-09-06 10:32:27 [changch@hqdc034 ~]$ sudo service postgresql restart
<pre><code>2019-09-06 10:32:27 [changch@hqdc034 ~]$ sudo service postgresql restart
* Restarting PostgreSQL 10 database server [ OK ]
2019-09-06 10:33:37 [changch@hqdc034 ~]$
2019-09-06 10:33:37 [changch@hqdc034 ~]$ sudo netstat -antlp |grep 5432
</code></pre><p>而且在 syslog &amp; postgresql log 中看不到什麼異常,怪了!
而且再啟動一次就好了?</p>
<p>再來測試一次看看</p>
<pre tabindex="0"><code>2019-09-06 10:37:22 [changch@hqdc034 ~]$ sudo service postgresql stop
<pre><code>2019-09-06 10:37:22 [changch@hqdc034 ~]$ sudo service postgresql stop
* Stopping PostgreSQL 10 database server [ OK ]
2019-09-06 10:38:03 [changch@hqdc034 ~]$ sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
@ -602,7 +602,7 @@ tcp6 0 0 :::5432 :::* LISTEN
2019-09-06 10:39:13 [changch@hqdc034 ~]$
</code></pre><p>這次就沒問題看來是我第一次下指令的時候不該用sudo netstat -antlp 去檢查?
anyway 回到psql 來看看內容</p>
<pre tabindex="0"><code>postgres@hqdc034:~$ time psql -c 'select count(*) from test;'
<pre><code>postgres@hqdc034:~$ time psql -c 'select count(*) from test;'
count
----------
10000000
@ -908,7 +908,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -331,7 +331,7 @@ pgbench -i -U postgres -s 10 pgbench</p>
<p><img src="https://i.imgur.com/vQFfj6Y.png" alt="&lsquo;postgresql pgbench banchmark reults&rsquo;"></p>
<p>另外補上一個 2 cores / 2G RAM 的結果</p>
<h3 id="postgresql-10--2g-ram--hdd-on-10g-storage">postgresql 10 , 2G RAM , HDD on 10G Storage</h3>
<pre tabindex="0"><code>postgres@ubuntu:~$ pgbench -t 100 -c 100 -S -U postgres pgbench
<pre><code>postgres@ubuntu:~$ pgbench -t 100 -c 100 -S -U postgres pgbench
starting vacuum...end.
transaction type: &lt;builtin: select only&gt;
scaling factor: 10
@ -366,7 +366,7 @@ tps = 8651.036900 (excluding connections establishing)
<li>從表格中可以看到當CPU Cores 增加pgbench的效能也明顯增加</li>
<li>而我甚至還沒有指定用多核心去執行測試,如果要用多核心去測試,要把測試指令改成</li>
</ul>
<pre tabindex="0"><code>pgbench -j 4 -t 100 -c 100 -S -U postgres pgbench
<pre><code>pgbench -j 4 -t 100 -c 100 -S -U postgres pgbench
</code></pre></li>
<li>
@ -666,7 +666,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -328,7 +328,7 @@ if (!doNotTrack) {
<p>而promox 這邊在synology恢復之後也可以正常存取NFS ,所以也沒有問題</p>
<p><del>那問題就是在VM裡面了當發生了某些狀況讓系統進入read only 就必須透過reboot 才能解決</del></p>
<p><del>或者是看看這個指令用fsck去檢查filesystem 看看有沒有幫助</del></p>
<pre tabindex="0"><code>sudo fsck -Af -M
<pre><code>sudo fsck -Af -M
</code></pre><p>UPDATE:</p>
<p>在proxmox 論壇上提出了這個問題,有回覆說要用 NFS Version 4.1</p>
<p>經過測試在掛載NFS share folder 時,如果有指定 NFS Version 4.1</p>
@ -625,7 +625,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -638,7 +638,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -338,7 +338,7 @@ if (!doNotTrack) {
<p>而且也不會碰到煩人的UAC訊息跳出來時畫面上的按鈕無法點選的問題(anydesk就有這種狀況需要透過config去排除)</p>
<h3 id="安裝容易">安裝容易</h3>
<p>meshcentral的安裝很簡單在ubuntu 18.04 server 的環境底下執行以下指令</p>
<pre tabindex="0"><code>#install nodejs/npm
<pre><code>#install nodejs/npm
sudo apt install nodejs npm
#make meshcentral working folder
sudo mkdir -p /opt/meshcentral
@ -659,7 +659,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -317,7 +317,7 @@ if (!doNotTrack) {
<h4 id="安裝必要套件">安裝必要套件</h4>
<p>進入 ubuntu Live 之後,按 ctal + alt + t</p>
<p>開啟 terminal ,然後先安裝 mdadm &amp; lvm2</p>
<pre tabindex="0"><code>ubuntu@ubuntu:~$ sudo apt install mdadm lvm2
<pre><code>ubuntu@ubuntu:~$ sudo apt install mdadm lvm2
Reading package lists... Done
Building dependency tree
Reading state information... Done
@ -339,13 +339,13 @@ Fetched 1,346 kB in 3s (501 kB/s)
以下省略
</code></pre><h4 id="scan-raid-and-lvm">scan raid and lvm</h4>
<p>接下來先換成 root 操作</p>
<pre tabindex="0"><code>ubuntu@ubuntu:~$ sudo su -
<pre><code>ubuntu@ubuntu:~$ sudo su -
</code></pre><p>然後掃描 raid &amp; LVM</p>
<pre tabindex="0"><code>root@ubuntu:~# mdadm -Asf &amp;&amp; vgchange -ay
<pre><code>root@ubuntu:~# mdadm -Asf &amp;&amp; vgchange -ay
mdadm: /dev/md/2 has been started with 4 drives.
2 logical volume(s) in volume group &quot;vg1&quot; now active
</code></pre><p>COOL 原本的VG出現了</p>
<pre tabindex="0"><code>root@ubuntu:~# vgdisplay
<pre><code>root@ubuntu:~# vgdisplay
--- Volume group ---
VG Name vg1
System ID
@ -367,7 +367,7 @@ mdadm: /dev/md/2 has been started with 4 drives.
Free PE / Size 0 / 0
VG UUID O1c8Uw-JmKy-EiKt-92OB-3K3y-roMi-9NUZ6H
</code></pre><p>也可以看到 RAID 資訊了!</p>
<pre tabindex="0"><code>root@ubuntu:~# mdadm -D /dev/md2
<pre><code>root@ubuntu:~# mdadm -D /dev/md2
/dev/md2:
Version : 1.2
Creation Time : Thu Oct 13 07:26:12 2016
@ -403,14 +403,14 @@ Consistency Policy : resync
<p><a href="https://h.cowbay.org/post/what-a-piss-in-synology-document/">https://h.cowbay.org/post/what-a-piss-in-synology-document/</a></p>
<p>問題發生了,總是要想辦法解決</p>
<h4 id="scan-lv">scan lv</h4>
<pre tabindex="0"><code>root@ubuntu:~# lvscan
<pre><code>root@ubuntu:~# lvscan
ACTIVE '/dev/vg1/syno_vg_reserved_area' [12.00 MiB] inherit
ACTIVE '/dev/vg1/volume_1' [5.44 TiB] inherit
</code></pre><p>OK ,在 vg1 底下有兩個 volume ,看大小來判斷,第二個是我們要的</p>
<p>用底下的指令就可以掛載了</p>
<pre tabindex="0"><code>mount /dev/vg1/volume_1 /mnt
<pre><code>mount /dev/vg1/volume_1 /mnt
</code></pre><p>請依照自己的環境,把第一個路徑改掉,如果要掛載到別的目錄,那也把第二個 /mnt 改掉</p>
<pre tabindex="0"><code>root@ubuntu:/dev# mount /dev/vg1/volume_1 /mnt
<pre><code>root@ubuntu:/dev# mount /dev/vg1/volume_1 /mnt
root@ubuntu:/dev# cd /mnt
root@ubuntu:/mnt# ls
@appstore @database @EP_trash @MailScanner @S2S
@ -706,7 +706,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -314,12 +314,12 @@ if (!doNotTrack) {
<p>看似很簡單的一件事情,卻搞了我兩天&hellip;.</p>
<p>本來在 preseed 檔案中,就有 preseed/late_command 可以用</p>
<p>但是測試了很多遍,才終於找到正確的語法</p>
<pre tabindex="0"><code>d-i preseed/late_command \
<pre><code>d-i preseed/late_command \
in-target apt-file update; \
in-target passwd --expire root ;\
in-target /bin/sh -c 'echo &quot;hostname|mail -s pxe_install_complete admin@abc.com&quot; &gt; /etc/rc.local'
</code></pre><p>這會把目標主機上的 /etc/rc.local 的內容改成只有一行</p>
<pre tabindex="0"><code>hostname|mail -s pxe_install_complete admin@abc.com
<pre><code>hostname|mail -s pxe_install_complete admin@abc.com
</code></pre><p>這樣就可以讓主機在完成系統安裝後,第一次重新開機時,送出郵件通知</p>
<p>可是呢因為ubuntu 開機時,本來就會去執行 /etc/rc.local</p>
<p>所以「每次」開機後,都會送出郵件通知</p>
@ -329,19 +329,19 @@ if (!doNotTrack) {
<p>另一個是用ansible來處理</p>
<p>又或者是,讓這個指令在送出郵件後,「自我還原」或者「自我更新」</p>
<p>自我還原的部份可以這樣做</p>
<pre tabindex="0"><code>hostname|mail -s pxe_install_complete admin@abc.com
<pre><code>hostname|mail -s pxe_install_complete admin@abc.com
echo &quot;#!/bin/sh -e\nexit 0&quot; &gt; /etc/rc.local
</code></pre><p>所以preseed 那邊的語法就要改一下</p>
<pre tabindex="0"><code> in-target /bin/sh -c 'echo &quot;hostname|mail -s pxe_install_complete admin@abc.com;\&quot;exit 0\&quot; &gt; /etc/rc.local'
<pre><code> in-target /bin/sh -c 'echo &quot;hostname|mail -s pxe_install_complete admin@abc.com;\&quot;exit 0\&quot; &gt; /etc/rc.local'
</code></pre><p>這樣一來,在送出郵件後,/etc/rc.local 的檔案內容會被恢復成只有底下這一行</p>
<pre tabindex="0"><code>exit 0
<pre><code>exit 0
</code></pre><p>暫時先這樣子處理</p>
<h3 id="更新">更新</h3>
<p>因為直接把 /etc/rc.local 的內容改掉,實在讓我有點不放心</p>
<p>所以想到一個方式,先備份 /etc/rc.local 然後加入我要的功能</p>
<p>因為我只需要它跑一次就好,所以就可以在最後面加入還原剛剛複製的備份檔案</p>
<p>簡單說在preseed 檔案中 改成這樣</p>
<pre tabindex="0"><code>d-i preseed/late_command \
<pre><code>d-i preseed/late_command \
in-target apt-file update; \
in-target passwd --expire root ;\
in-target cp /etc/rc.local /etc/rc.local.bak ;\
@ -639,7 +639,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -316,10 +316,10 @@ if (!doNotTrack) {
<p>於是研究了一下,發現還真的很簡單!</p>
<h3 id="download-deb-for-your-edgerouter">download deb for your edgerouter</h3>
<h4 id="go-check-httpsgithubcomlochnairvyatta-wireguard-first">go check <a href="https://github.com/Lochnair/vyatta-wireguard">https://github.com/Lochnair/vyatta-wireguard</a> first</h4>
<pre tabindex="0"><code>curl -L -O https://github.com/Lochnair/vyatta-wireguard/releases/download/0.0.20190702-1/wireguard-v2.0-e50-0.0.20190702-1.deb
<pre><code>curl -L -O https://github.com/Lochnair/vyatta-wireguard/releases/download/0.0.20190702-1/wireguard-v2.0-e50-0.0.20190702-1.deb
dpkg -i wireguard-v2.0-e50-0.0.20190702-1.deb
</code></pre><p>process log</p>
<pre tabindex="0"><code>root@ubnt112:~# dpkg -i wireguard-v2.0-e50-0.0.20190702-1.deb
<pre><code>root@ubnt112:~# dpkg -i wireguard-v2.0-e50-0.0.20190702-1.deb
Selecting previously unselected package wireguard.
(Reading database ... 37024 files and directories currently installed.)
Preparing to unpack wireguard-v2.0-e50-0.0.20190702-1.deb ...
@ -328,24 +328,24 @@ Adding 'diversion of /opt/vyatta/share/vyatta-cfg/templates/firewall/options/mss
Unpacking wireguard (0.0.20190702-1) ...
Setting up wireguard (0.0.20190702-1) ...
</code></pre><h4 id="generate-privatepublic-key-in-left-router">generate private/public key in left router</h4>
<pre tabindex="0"><code>wg genkey | tee /dev/tty | wg pubkey
<pre><code>wg genkey | tee /dev/tty | wg pubkey
</code></pre><p>first one in private key and the next one is public key of this router</p>
<pre tabindex="0"><code>QGAUHJSDFAdkfjskdjo1DP8H1NuLTrXH6kue6kphaQk/iAkc=
<pre><code>QGAUHJSDFAdkfjskdjo1DP8H1NuLTrXH6kue6kphaQk/iAkc=
ta+GJCWNUHJSDFAdkfjskdjnkppY5FpsIs3a8dc4oArtV8FU=
</code></pre><h4 id="configure-left-site-edgerouter">configure left site edgerouter</h4>
<pre tabindex="0"><code>configure
<pre><code>configure
set interfaces wireguard wg0 address 192.168.99.1/24
set interfaces wireguard wg0 listen-port 51820
set interfaces wireguard wg0 route-allowed-ips true
### paster your private key which was just been generate
set interfaces wireguard wg0 private-key QGAUHJSDFAdkfjskdjo1DP8H1NuLTrXH6kue6kphaQk/iAkc=
</code></pre><h4 id="generate-privatepublic-key-in-right-router">generate private/public key in right router</h4>
<pre tabindex="0"><code>wg genkey | tee /dev/tty | wg pubkey
<pre><code>wg genkey | tee /dev/tty | wg pubkey
</code></pre><p>first one in private key and the next one is public key of this router</p>
<pre tabindex="0"><code>UBzmPabcdefghijklmnopqrlbi5tnsQqjoJ4+H4=
<pre><code>UBzmPabcdefghijklmnopqrlbi5tnsQqjoJ4+H4=
tmlrPSabcdefghijklmnopqrIb1Enzf+108yotkhdRmk=
</code></pre><h4 id="configure-right-site-edgerouter">configure right site edgerouter</h4>
<pre tabindex="0"><code>configure
<pre><code>configure
set interfaces wireguard wg0 address 192.168.99.2/24
set interfaces wireguard wg0 listen-port 51820
set interfaces wireguard wg0 route-allowed-ips true
@ -353,35 +353,35 @@ set interfaces wireguard wg0 route-allowed-ips true
set interfaces wireguard wg0 private-key UBzmPabcdefghijklmnopqrlbi5tnsQqjoJ4+H4=
</code></pre><p>now , configure both router to talk to each other</p>
<h4 id="configure-in-left-router">configure in left router</h4>
<pre tabindex="0"><code>### use the right router public key here
<pre><code>### use the right router public key here
set interfaces wireguard wg0 peer tmlrPSabcdefghijklmnopqrIb1Enzf+108yotkhdRmk= allowed-ips 192.168.99.0/16
set interfaces wireguard wg0 peer tmlrPSabcdefghijklmnopqrIb1Enzf+108yotkhdRmk= endpoint 222.222.222.222:51820
set interfaces wireguard wg0 peer tmlrPSabcdefghijklmnopqrIb1Enzf+108yotkhdRmk= persistent-keepalive 15
</code></pre><h4 id="configre-in-right-router">configre in right router</h4>
<pre tabindex="0"><code>### use the left router public key here
<pre><code>### use the left router public key here
set interfaces wireguard wg0 peer ta+GJCWNUHJSDFAdkfjskdjnkppY5FpsIs3a8dc4oArtV8FU= allowed-ips 192.168.99.0/16
set interfaces wireguard wg0 peer ta+GJCWNUHJSDFAdkfjskdjnkppY5FpsIs3a8dc4oArtV8FU= endpoint 111.111.111.111:51280
set interfaces wireguard wg0 peer ta+GJCWNUHJSDFAdkfjskdjnkppY5FpsIs3a8dc4oArtV8FU= persistent-keepalive 15
</code></pre><h4 id="configure-firewall-policy-in-left-site-router">configure firewall policy in left site router</h4>
<pre tabindex="0"><code>### change 40 to your own rule number
<pre><code>### change 40 to your own rule number
set firewall name WAN_LOCAL rule 40 source port 51820
set firewall name WAN_LOCAL rule 40 destination port 51820
</code></pre><h4 id="configure-firewall-policy-in-right-site-router">configure firewall policy in right site router</h4>
<pre tabindex="0"><code>### change 40 to your own rule number
<pre><code>### change 40 to your own rule number
set firewall name WAN_LOCAL rule 40 source port 51820
set firewall name WAN_LOCAL rule 40 destination port 51820
</code></pre><p>then finally , commit these changes on both side router</p>
<pre tabindex="0"><code>commit
<pre><code>commit
### and save if you want
save
</code></pre><h4 id="oops--one-more-step--add-static-route">oops , one more step , add static route</h4>
<h5 id="manually-add-static-route-in-left-router">manually add static route in left router</h5>
<pre tabindex="0"><code>ip route add 192.168.111.0/24 dev wg0
<pre><code>ip route add 192.168.111.0/24 dev wg0
</code></pre><h5 id="manually-add-static-route-in-right-router">manually add static route in right router</h5>
<pre tabindex="0"><code>ip route add 192.168.112.0/24 dev wg0
<pre><code>ip route add 192.168.112.0/24 dev wg0
</code></pre><h4 id="check-wireguard-status-in-both-router">check wireguard status in both router</h4>
<h5 id="left">left</h5>
<pre tabindex="0"><code> root@ubnt112:~# sudo wg
<pre><code> root@ubnt112:~# sudo wg
interface: wg0
public key: ta+GJCWNUHJSDFAdkfjskdjnkppY5FpsIs3a8dc4oArtV8FU=
private key: (hidden)
@ -395,7 +395,7 @@ peer: tmlrPSabcdefghijklmnopqrIb1Enzf+108yotkhdRmk=
persistent keepalive: every 15 seconds
root@ubnt112:~#
</code></pre><h5 id="right">right</h5>
<pre tabindex="0"><code>interface: wg0
<pre><code>interface: wg0
public key: tmlrPSabcdefghijklmnopqrIb1Enzf+108yotkhdRmk=
private key: (hidden)
listening port: 51820
@ -411,7 +411,7 @@ root@ubnt111:~#
<h5 id="need-to-study-about-allowed-ips">need to study about allowed-ips</h5>
<h3 id="sort-out-scripts">sort out scripts</h3>
<h5 id="left-router">left router</h5>
<pre tabindex="0"><code>wg genkey | tee /dev/tty | wg pubkey
<pre><code>wg genkey | tee /dev/tty | wg pubkey
QGAUHJSDFAdkfjskdjo1DP8H1NuLTrXH6kue6kphaQk/iAkc=
ta+GJCWNUHJSDFAdkfjskdjnkppY5FpsIs3a8dc4oArtV8FU=
configure
@ -430,7 +430,7 @@ commit
save
ip route add 192.168.111.0/24 dev wg0
</code></pre><h5 id="right-router">right router</h5>
<pre tabindex="0"><code>wg genkey | tee /dev/tty | wg pubkey
<pre><code>wg genkey | tee /dev/tty | wg pubkey
UBzmPabcdefghijklmnopqrlbi5tnsQqjoJ4+H4=
tmlrPSabcdefghijklmnopqrIb1Enzf+108yotkhdRmk=
configure
@ -737,7 +737,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -602,7 +602,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -314,7 +314,7 @@ if (!doNotTrack) {
<p>不過主管還是希望能夠先問群暉維修的費用多少</p>
<p>登入 account.synology.com 之後早上10:40 發了一張ticket</p>
<p>請群暉提供RMA 流程</p>
<pre tabindex="0"><code>線上運作時發現四個硬碟燈號同時都在快速閃爍重新開機後STATUS 藍燈持續閃爍,四個硬碟燈號都是橘燈恆亮。
<pre><code>線上運作時發現四個硬碟燈號同時都在快速閃爍重新開機後STATUS 藍燈持續閃爍,四個硬碟燈號都是橘燈恆亮。
進線客服詢問,把硬碟拔出來,空機開機還是一樣的狀況。
@ -323,7 +323,7 @@ if (!doNotTrack) {
</code></pre><p>然後「當天」下午 17:40 ,客服回信了</p>
<p>嗯,一封郵件要等七個小時才回信&hellip;效率真是高啊!</p>
<p>客服表示</p>
<pre tabindex="0"><code>DS415提供原廠保固2年Synology針對此型號有額外增加1年的保固期限因此產品為3年保固產品
<pre><code>DS415提供原廠保固2年Synology針對此型號有額外增加1年的保固期限因此產品為3年保固產品
根據產品的序號目前機器是過保的狀態,為確認目前產品是否仍在保固內,請問您是否還保有當初的購買證明呢?
@ -333,7 +333,7 @@ if (!doNotTrack) {
</code></pre><p>產品已經過保了,就算用手邊的購買證明去算保固日期也是一樣</p>
<p>所以請群暉客服直接提供維修主機板的報價</p>
<p>然後隔天收到回信了</p>
<pre tabindex="0"><code>稍早跟物料人同仁確認目前DS415+的PCBA是還有庫存的主板報價是新台幣 $15,232(郵寄費 $100NTD)
<pre><code>稍早跟物料人同仁確認目前DS415+的PCBA是還有庫存的主板報價是新台幣 $15,232(郵寄費 $100NTD)
由於主機板是整項產品單價最高的零件,一般我們會建議使用者若有更換的需求,轉考慮同等級新機種其實會比較划算.
@ -635,7 +635,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -314,7 +314,7 @@ if (!doNotTrack) {
<h4 id="修改-postgresqlconf">修改 postgresql.conf</h4>
<p>編輯postgresql.conf開啟平行處理以及設定可用記憶體容量</p>
<p>這台測試機的環境是一台三代i7 , 24G RAM , 240G SSD安裝debian 10(buster)</p>
<pre tabindex="0"><code># load libiriaes
<pre><code># load libiriaes
# 其實這次不會用到pg_stat_statements ,不過出於習慣,還是加入開機自動載入吧
shared_preload_libraries = 'pg_stat_statements'
@ -340,17 +340,17 @@ max_parallel_workers = 8
</code></pre><p>重新啟動postgresql ,準備開始測試囉!</p>
<p>轉換成 postgres 身份後,進入 psql</p>
<h4 id="建立測試資料庫">建立測試資料庫</h4>
<pre tabindex="0"><code>postgres=# create database test;
<pre><code>postgres=# create database test;
CREATE DATABASE
postgres=#
</code></pre><h4 id="連接測試資料庫建立pg_prewarm-extension">連接測試資料庫、建立pg_prewarm extension</h4>
<pre tabindex="0"><code>postgres=# \c test ;
<pre><code>postgres=# \c test ;
You are now connected to database &quot;test&quot; as user &quot;postgres&quot;.
test=# CREATE EXTENSION pg_prewarm;
CREATE EXTENSION
test=#
</code></pre><h4 id="建立測試資料表塞入500萬筆資料">建立測試資料表塞入500萬筆資料</h4>
<pre tabindex="0"><code>test=# \timing
<pre><code>test=# \timing
Timing is on.
test=# CREATE TABLE test_tbl AS
SELECT floor(random() * (9923123) + 1)::int FROM generate_series(1, 5000000) AS id;
@ -359,10 +359,10 @@ Time: 2940.602 ms (00:02.941)
test=#
</code></pre><h4 id="檢查看看剛剛建立的table-用了多少空間">檢查看看剛剛建立的table 用了多少空間</h4>
<p>哎呀,看起來用得不多啊</p>
<pre tabindex="0"><code>test=# SELECT pg_size_pretty(pg_relation_size('test_tbl'));
<pre><code>test=# SELECT pg_size_pretty(pg_relation_size('test_tbl'));
173 MB
</code></pre><p><strong>玩大一點,塞個一億筆資料好了</strong></p>
<pre tabindex="0"><code>test=# drop table test_tbl;
<pre><code>test=# drop table test_tbl;
Time: 0.361 ms
test=# CREATE TABLE test_tbl AS
SELECT floor(random() * (99343) + 1)::int FROM generate_series(1, 100000000) AS id;
@ -377,7 +377,7 @@ test=#
</code></pre><p>現在資料庫長到3457MB了</p>
<p>先來執行一些初步的取得基本數據</p>
<pre tabindex="0"><code>test=# explain (analyze,buffers) select count(*) from test_tbl;
<pre><code>test=# explain (analyze,buffers) select count(*) from test_tbl;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------
Finalize Aggregate (cost=755978.52..755978.53 rows=1 width=8) (actual time=3331.917..3331.918 rows=1 loops=1)
@ -398,7 +398,7 @@ test=#
</code></pre><p>可以看到打中buffer 的部份其實很少,只有 160 大部分都是讀進去buffer (442318)</p>
<p>來看看 buffer 的使用狀況</p>
<pre tabindex="0"><code>test=# CREATE EXTENSION pg_buffercache;
<pre><code>test=# CREATE EXTENSION pg_buffercache;
CREATE EXTENSION
test=# select c.relname,pg_size_pretty(count(*) * 8192) as buffered,
test-# round(100.0 * count(*) / (
@ -427,7 +427,7 @@ Time: 148.719 ms
test=#
</code></pre><p>可以看到這個 test_tbl 只有0.5% 被撈到shared_buffers 裡面</p>
<p>接下來就把這個table全部推到shared_buffers 裡面去</p>
<pre tabindex="0"><code>test=# select pg_prewarm('test_tbl','buffer');
<pre><code>test=# select pg_prewarm('test_tbl','buffer');
pg_prewarm
------------
442478
@ -436,7 +436,7 @@ test=#
Time: 1938.043 ms (00:01.938)
test=#
</code></pre><p>然後再來看一次shared_buffers的使用狀況</p>
<pre tabindex="0"><code>test=# select c.relname,pg_size_pretty(count(*) * 8192) as buffered,
<pre><code>test=# select c.relname,pg_size_pretty(count(*) * 8192) as buffered,
round(100.0 * count(*) / (
select setting from pg_settings
where name='shared_buffers')::integer,1)
@ -466,7 +466,7 @@ test=#
<p><strong>buffer_percent 表示這個表格佔用多少shared_buffers 的比例</strong></p>
<p><strong>percent_of_relation 表示這個表格有多少比例被載入 shared_buffers</strong></p>
<p>再來跑一次explain看看狀況</p>
<pre tabindex="0"><code>test=# explain (analyze,buffers) select count(*) from test_tbl;
<pre><code>test=# explain (analyze,buffers) select count(*) from test_tbl;
Time: 3551.785 ms (00:03.552)
Finalize Aggregate (cost=755978.52..755978.53 rows=1 width=8) (actual time=3427.286..3427.287 rows=1 loops=1)
Buffers: shared hit=442478
@ -486,7 +486,7 @@ Time: 3551.785 ms (00:03.552)
<p>看樣子表格還是太小,所以沒有完全發揮?那再來把表格加大!</p>
<p>先重開一次 postgresql 清除buffer</p>
<p>然後重新建立表格</p>
<pre tabindex="0"><code>test=# drop table test_tbl;
<pre><code>test=# drop table test_tbl;
DROP TABLE
Time: 297.493 ms
test=# CREATE TABLE test_tbl AS
@ -495,7 +495,7 @@ SELECT 300000000
Time: 290660.607 ms (04:50.661)
test=#
</code></pre><p>一樣,看看用了多少容量</p>
<pre tabindex="0"><code>test=# SELECT pg_size_pretty(pg_relation_size('test_tbl'));
<pre><code>test=# SELECT pg_size_pretty(pg_relation_size('test_tbl'));
pg_size_pretty
----------------
10 GB
@ -505,7 +505,7 @@ Time: 0.474 ms
test=#
</code></pre><p>哇哈哈用了10G ,這次還不撐爆你!</p>
<p>跑explain 看看狀況</p>
<pre tabindex="0"><code>test=# explain (analyze,buffers) select count(*) from test_tbl;
<pre><code>test=# explain (analyze,buffers) select count(*) from test_tbl;
Time: 22909.065 ms (00:22.909)
QUERY PLAN
@ -526,7 +526,7 @@ Time: 22909.065 ms (00:22.909)
</code></pre><p>看一下現在 shared_buffers 使用狀況</p>
<p>可以看到這個 test_tbl 幾乎沒被放入 shared_buffers 中</p>
<pre tabindex="0"><code>test=# select c.relname,pg_size_pretty(count(*) * 8192) as buffered,
<pre><code>test=# select c.relname,pg_size_pretty(count(*) * 8192) as buffered,
round(100.0 * count(*) / (
select setting from pg_settings
where name='shared_buffers')::integer,1)
@ -552,7 +552,7 @@ group by c.oid,c.relname order by 3 desc limit 10;
Time: 163.936 ms
test=#
</code></pre><p>強制把test_tbl 全部塞進 shared_buffers</p>
<pre tabindex="0"><code>test=# select pg_prewarm('test_tbl','buffer');
<pre><code>test=# select pg_prewarm('test_tbl','buffer');
pg_prewarm
------------
1327434
@ -561,7 +561,7 @@ test=#
Time: 7472.805 ms (00:07.473)
test=#
</code></pre><p>確認一下test_tbl 有沒有被整個塞進去</p>
<pre tabindex="0"><code>test=# select c.relname,pg_size_pretty(count(*) * 8192) as buffered,
<pre><code>test=# select c.relname,pg_size_pretty(count(*) * 8192) as buffered,
round(100.0 * count(*) / (
select setting from pg_settings
where name='shared_buffers')::integer,1)
@ -587,7 +587,7 @@ group by c.oid,c.relname order by 3 desc limit 10;
Time: 4985.366 ms (00:04.985)
test=#
</code></pre><p>GOOD let&rsquo;s do explain again !</p>
<pre tabindex="0"><code>test=# explain (analyze,buffers) select count(*) from test_tbl;
<pre><code>test=# explain (analyze,buffers) select count(*) from test_tbl;
Time: 11451.188 ms (00:11.451)
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------
@ -896,7 +896,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -311,7 +311,7 @@ if (!doNotTrack) {
<p>然後各切三個 partition (sda1/sda2/sda3 and sdb1/sdb2/sdb3)</p>
<p>sda2/sdb2 用250M 來組 raid1 (/dev/md0) 給 /boot 用</p>
<p>sda1/sdb1 各用40G 組raid1 (/dev/md1) 做成LVM 的VG ,然後再切出四個大小不同的分割</p>
<pre tabindex="0"><code>* / (sysvg-root)
<pre><code>* / (sysvg-root)
* /usr (sysvg-usr)
* /var (sysvg-var)
* /tmp (sysvg-tmp)
@ -319,7 +319,7 @@ if (!doNotTrack) {
</code></pre><p>What the Fuck !?!? 然後最好笑的是40G的空間還留了2G可以讓後面的倒楣鬼(對,就是我)</p>
<p>在碰到空間不足的問題時,還可以「擴充」</p>
<p>然後剩下的sda3/sdb3 大概有四百多G空間一樣是組raid1 然後分割給這些目錄用</p>
<pre tabindex="0"><code>* /data (datavg-datatest) (對的,沒有錯 真的叫 datavg-datatest媽的你test個鬼啊還在test的東西直接上線使用)
<pre><code>* /data (datavg-datatest) (對的,沒有錯 真的叫 datavg-datatest媽的你test個鬼啊還在test的東西直接上線使用)
* /web (datavg-web)
* /www (datavg-www)
* /home (datavg-home)
@ -352,7 +352,7 @@ if (!doNotTrack) {
<p>那用root 登入吧,結果手邊紀錄的密碼都是錯的</p>
<p>好吧那進rescue mode 改密碼總可以吧?事情如果那麼簡單就好了!</p>
<p>進rescue mode 之後,要執行 passwd ,就會出現</p>
<pre tabindex="0"><code> /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
<pre><code> /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
</code></pre><p>很奇怪吧,為什麼加硬碟進去,就會碰到這個問題?</p>
<p>這兩顆新增的硬碟之前是用來測試 zfs 的,所以上面有切了 zfs 的分割</p>
<p>就因為這樣所以會碰到這種詭異的狀況嗎? 不知道,不確定,不想面對&hellip;</p>
@ -387,7 +387,7 @@ if (!doNotTrack) {
<p>如果是 raid1(mirror) ,至少兩顆硬碟這部份沒有問題</p>
<p>但是不管你再加多少顆硬碟進去這個raid他的容量「不會改變」「不會改變」「不會改變」</p>
<p>依照某個外國人的解釋,就是下面這樣</p>
<pre tabindex="0"><code>RAID 1 is pure mirroring. No matter how many drives you add to RAID 1, the size never increases. What you increase is how many drives can fail and how good your read performance is.
<pre><code>RAID 1 is pure mirroring. No matter how many drives you add to RAID 1, the size never increases. What you increase is how many drives can fail and how good your read performance is.
</code></pre><p>所以在原地擴充現有的mirror 空間不可行!</p>
<p>下一招擴充不可行那我改raid type 可以吧??</p>
<!-- raw HTML omitted -->
@ -412,7 +412,7 @@ if (!doNotTrack) {
<li>卸除原本主機上的所有硬碟並新增一顆512G 的SSD</li>
<li>在新增的512G SSD上安裝一樣的作業系統(CentOS 6.2)</li>
</ul>
<pre tabindex="0"><code> 這邊也有地雷...不知道為什麼CentOS 6.2 的ISO我用easy2boot 作到隨身碟上
<pre><code> 這邊也有地雷...不知道為什麼CentOS 6.2 的ISO我用easy2boot 作到隨身碟上
安裝過程出現CDROM not FOUND的錯誤。好那我用光碟片開機總可以吧
BUT (又是你啊BUT兄 )
在安裝時一樣出現CDROM not FOUND , WTF !!
@ -426,7 +426,7 @@ if (!doNotTrack) {
</code></pre><ul>
<li>系統安裝完成,關機,接上原本主機的一顆硬碟,準備把資料抄回來</li>
</ul>
<pre tabindex="0"><code> 如果會怕可以用ubuntu 18.04 live DVD 開機,然後先安裝 mdadm
<pre><code> 如果會怕可以用ubuntu 18.04 live DVD 開機,然後先安裝 mdadm
接著執行 mdadm --assemble --scan 偵測原本的RAID
這時候雖然會抓到RAID但是因為上面是LVM 所以沒辦法直接掛進來
需要再執行一次 vgchange -ay
@ -435,7 +435,7 @@ if (!doNotTrack) {
</code></pre><ul>
<li>分次掛載原本的目錄然後sync 回SSD</li>
</ul>
<pre tabindex="0"><code> 我是直接在系統內操作沒有透過liveDVD
<pre><code> 我是直接在系統內操作沒有透過liveDVD
先備份 /etc , /usr
然後就看原本LVM切了幾個每一個都mount 進來然後把資料用rsync 抄回對應的路徑底下就好
抄完之後,把備份出來的 /etc.bak/fstab 複製回 /etc
@ -444,7 +444,7 @@ if (!doNotTrack) {
</code></pre><ul>
<li>重開機</li>
</ul>
<pre tabindex="0"><code> 正常的話,這時候重開機應該是可以進入系統
<pre><code> 正常的話,這時候重開機應該是可以進入系統
接著就是請同事確認環境、指令是否可以執行
然後修改一些像是目錄權限, uid,gid 等等的問題
基本上系統這樣就轉完了
@ -478,22 +478,22 @@ HDD: 16G vmdisk x4</p>
<p>然後還有兩個磁碟沒有用到 (/dev/vdc , /dev/vdd)</p>
<p>接著為了進行模擬測試,先拍個快照,然後改用 ubuntu 18.04 Desktop 的ISO開機</p>
<p>進入系統後,要先開啟 terminal 來安裝 mdadm</p>
<pre tabindex="0"><code>apt install mdadm -y
<pre><code>apt install mdadm -y
</code></pre><p><img src="https://i.imgur.com/0tnEdW5.png" alt="install mdadm in ubuntu 18.04 liveDVD"></p>
<p>然後把剛剛看到的兩顆還沒用到的磁碟切分割加入RAID內</p>
<p>或者可以直接用sfdisk 從原有的磁碟抄partition table過來</p>
<p>我直接用 sfdisk 抄比較快,底下的指令是抄 vda 的partition table 到 vdc和 vdd</p>
<pre tabindex="0"><code>sfdisk -d /dev/vda | sfdisk /dev/vdc
<pre><code>sfdisk -d /dev/vda | sfdisk /dev/vdc
sfdisk -d /dev/vda | sfdisk /dev/vdd
</code></pre><p><img src="https://i.imgur.com/mlikld4.png" alt="sfdisk copt partition table"></p>
<p>然後檢查一下是不是正確</p>
<pre tabindex="0"><code>fdisk -l /dev/vdc
<pre><code>fdisk -l /dev/vdc
fdisk -l /dev/vdd
</code></pre><p><img src="https://i.imgur.com/5qQNLbu.png" alt="check result after sfdisk"></p>
<p>再來就偵測原來的RAID然後加入兩個剛剛做出來的分割到raid群組內</p>
<p>接著就直接把raid1轉成raid5然後把raid-devices:2 改成 4看一下狀態</p>
<p>可以看到在把raid-devices 提升到4顆之後原有的raid 就會開始進行reshape (不是rebuild唷)</p>
<pre tabindex="0"><code>mdadm --assemble --scan
<pre><code>mdadm --assemble --scan
mdadm --add /dev/md0 /dev/vdc1 /dev/vdd1
mdadm --grow /dev/md0 --level=5
mdadm --grow /dev/md0 --raid-devices=4
@ -504,7 +504,7 @@ cat /proc/mdstat
<p>等上面的程序跑完後再看一下raid狀態就會看到原有的RAID空間變大了磁碟變多了心情變好了考試也都考100分了</p>
<p><img src="https://i.imgur.com/7E2qL8Q.png" alt="check raid status after reshape"></p>
<p>本來想說已經完成了興沖沖的把raid 掛進來看一下空間卻還是16G ?????</p>
<pre tabindex="0"><code>mount /dev/md0p1 /mnt
<pre><code>mount /dev/md0p1 /mnt
df -h
</code></pre><p><img src="https://i.imgur.com/ILjDN1g.png" alt="raid space still 16G"></p>
<p>其實這邊我一直沒搞懂,文章都說你就跑 e2fsck 檢查一次,然後跑 resize2fs 放大就結束了</p>
@ -808,7 +808,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -310,9 +310,9 @@ if (!doNotTrack) {
<p>早上研究了一下,順便做個筆記。</p>
<h3 id="1-ssh-要加上--x">1. ssh 要加上 -X</h3>
<p>不然會出現</p>
<pre tabindex="0"><code>Error: Can't open display: (null)
<pre><code>Error: Can't open display: (null)
</code></pre><p>這種錯誤訊息</p>
<pre tabindex="0"><code>-X Enables X11 forwarding. This can also be specified on a per-host basis in a configuration file.
<pre><code>-X Enables X11 forwarding. This can also be specified on a per-host basis in a configuration file.
X11 forwarding should be enabled with caution. Users with the ability to bypass file permissions on the remote host (for the user's X
authorization database) can access the local X11 display through the forwarded connection. An attacker may then be able to perform activi
@ -321,7 +321,7 @@ if (!doNotTrack) {
For this reason, X11 forwarding is subjected to X11 SECURITY extension restrictions by default. Please refer to the ssh -Y option and the
ForwardX11Trusted directive in ssh_config(5) for more information.
</code></pre><h3 id="2-remote-主機要安裝-xclip--xsel">2. remote 主機要安裝 xclip / xsel</h3>
<pre tabindex="0"><code>2019-05-17 10:12:20 [minion@hqs019 ~]$ sudo apt install xsel
<pre><code>2019-05-17 10:12:20 [minion@hqs019 ~]$ sudo apt install xsel
Reading package lists... Done
Building dependency tree
Reading state information... Done
@ -358,7 +358,7 @@ Setting up xclip (0.12+svn84-4build1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
</code></pre><h3 id="3執行方式">3.執行方式</h3>
<p>執行以下指令,就可以把遠端的檔案內容傳送到「系統剪貼簿」,在本機就可以直接貼上了</p>
<pre tabindex="0"><code>cat copy_neonexus.csv |xclip -selection clipboard
<pre><code>cat copy_neonexus.csv |xclip -selection clipboard
</code></pre>
</article>
</div>
@ -646,7 +646,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -309,7 +309,7 @@ if (!doNotTrack) {
<p>可是某次ansible 更新之後,反而沒辦法安裝完成</p>
<p>這次順手修改一下同時更新了ansible 的template</p>
<p>###os-ubuntu-1404-desktop-preseed.cfg</p>
<pre tabindex="0"><code>### Localization
<pre><code>### Localization
# Keyboard selection.
d-i keyboard-configuration/xkb-keymap select us
@ -738,7 +738,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -660,7 +660,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -309,7 +309,7 @@ if (!doNotTrack) {
<p>紀錄一下步驟,再來研究怎麼整合到 preseed 裡面</p>
<h3 id="1-建立-rc-localservice">1. 建立 rc-local.service</h3>
<h4 id="sudo-vi-etcsystemdsystemrc-localservice">sudo vi /etc/systemd/system/rc-local.service</h4>
<pre tabindex="0"><code>[Unit]
<pre><code>[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
@ -329,7 +329,7 @@ WantedBy=multi-user.target
<p>因此,需要先保留原本的 rc.local</p>
<p>在送出通知信件之後,就用原來的 rc.local 蓋掉修改過的 rc.local</p>
<h4 id="sudo-vi-etcrclocalbak">sudo vi /etc/rc.local.bak</h4>
<pre tabindex="0"><code>#!/bin/sh -e
<pre><code>#!/bin/sh -e
#
# rc.local
#
@ -346,7 +346,7 @@ WantedBy=multi-user.target
exit 0
</code></pre><h3 id="3-建立-rclocal">3. 建立 rc.local</h3>
<h4 id="sudo-vi-etcrclocal">sudo vi /etc/rc.local</h4>
<pre tabindex="0"><code>#!/bin/sh -e
<pre><code>#!/bin/sh -e
#
# rc.local
#
@ -364,12 +364,12 @@ cp /etc/rc.local.bak /etc/rc.local
exit 0
</code></pre><h3 id="4-修改-rclocal-permission">4. 修改 rc.local permission</h3>
<pre tabindex="0"><code>sudo chmod +x /etc/rc.local
<pre><code>sudo chmod +x /etc/rc.local
</code></pre><h3 id="5-啟用-rc-local-service">5. 啟用 rc-local service</h3>
<pre tabindex="0"><code>sudo systemctl enable rc-local
<pre><code>sudo systemctl enable rc-local
</code></pre><hr>
<p>ubuntu 18.04 preseeds files</p>
<pre tabindex="0"><code># Title: Ubuntu 18.04 preseed.cfg
<pre><code># Title: Ubuntu 18.04 preseed.cfg
#
# File: templates/os-ubuntu-1804-amd64-preseed.cfg
# modified by Eric , 2019/07
@ -804,7 +804,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -318,17 +318,17 @@ if (!doNotTrack) {
<p>簡單說一下用法</p>
<p>觀察user level 系統變數的變化</p>
<p>開啟terminal 輸入以下指令</p>
<pre tabindex="0"><code>dconf watch /
<pre><code>dconf watch /
</code></pre><p>這個可以觀察user到底修改了些什麼</p>
<p>只要是透過右上角的系統設定修改的值</p>
<p>這個指令都可以觀察到,非常好用</p>
<p>當找到了要修改的 KEY</p>
<p>就可以用</p>
<pre tabindex="0"><code>dconf read/write KEY
<pre><code>dconf read/write KEY
</code></pre><p>比如說我要修改proxy</p>
<p>我先用 dconf watch / 抓到了KEY是 /system/proxy/host</p>
<p>那我就可以用</p>
<pre tabindex="0"><code>dconf write /system/proxy/http/host &quot;'192.168.1.7'&quot;
<pre><code>dconf write /system/proxy/http/host &quot;'192.168.1.7'&quot;
dconf write /system/proxy/http/port '3128'
</code></pre><p>來把系統的http proxy 改成 192.168.1.7:3128</p>
<p>要注意的是,上面的 host 是字串,要用<code>&quot;''&quot;</code>包起來</p>
@ -621,7 +621,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -310,7 +310,7 @@ if (!doNotTrack) {
<p>查了一下發現是 ubuntu 18.04 kernel 4.15.0-106 的包</p>
<p>看來就連kernel 最好都不要自動升級&hellip;</p>
<p>一開始不管怎麼下指令要啟動wireguard Interface 都會出錯</p>
<pre tabindex="0"><code>root@hqdc034:~# wg-quick up wg0
<pre><code>root@hqdc034:~# wg-quick up wg0
[#] ip link add wg0 type wireguard
RTNETLINK answers: Operation not supported
Unable to access interface: Protocol not supported
@ -324,17 +324,17 @@ Unable to access interface: Protocol not supported
Cannot find device &quot;wg1&quot;
</code></pre><p>因為很久沒動了所以wireguard config 檔案應該是沒有問題</p>
<p>不過還是檢查看看?</p>
<pre tabindex="0"><code>root@hqdc034:~# wg showconf wg0
<pre><code>root@hqdc034:~# wg showconf wg0
Unable to access interface: Protocol not supported
</code></pre><p>很好果然不是config 的問題看來是wireguard 某些套件有狀況了</p>
<p>用modprobe 檢查一下</p>
<pre tabindex="0"><code>root@hqdc034:~# modprobe wireguard
<pre><code>root@hqdc034:~# modprobe wireguard
modprobe: FATAL: Module wireguard not found in directory /lib/modules/4.15.0-106-generic
</code></pre><p>OK 找到問題了看起來是新版本的kernel 有某些狀況?</p>
<p>anyway</p>
<p>要解決其實很簡單,要不就直接上 20.04 XD</p>
<p>要不就重裝 wireguard-dkms (這個似乎是新釋出的套件,本來沒有這個的)</p>
<pre tabindex="0"><code>root@hqdc034:~# apt-get install wireguard-dkms wireguard-tools linux-headers-$(uname -r)
<pre><code>root@hqdc034:~# apt-get install wireguard-dkms wireguard-tools linux-headers-$(uname -r)
正在讀取套件清單... 完成
正在重建相依關係
正在讀取狀態資料... 完成
@ -402,7 +402,7 @@ DKMS: install completed.
Updating loolwsd systemplate
</code></pre><p>跑完之後重起wireguard interface 就 OK 了</p>
<pre tabindex="0"><code>root@hqdc034:~# wg-quick up wg0
<pre><code>root@hqdc034:~# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.10.2/24 dev wg0
@ -732,7 +732,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -315,7 +315,7 @@ if (!doNotTrack) {
<p>如果要改成自動化,要多一些步驟</p>
<h3 id="安裝-certbot-及-cloudflare-外掛">安裝 certbot 及 Cloudflare 外掛</h3>
<p>首先,先來安裝會用到的套件</p>
<pre tabindex="0"><code>sudo apt install certbot letsencrypt python3-certbot-dns-cloudflare
<pre><code>sudo apt install certbot letsencrypt python3-certbot-dns-cloudflare
</code></pre><h3 id="設定-cloudflare-api">設定 cloudflare API</h3>
<p>這個步驟我測了好久網路上的說明似乎都過期了造成cloudflare API 那邊會發生錯誤</p>
<p>先登入 cloudflare 管理界面的API token 設定</p>
@ -332,17 +332,17 @@ zone-DNS-edit</p>
<h3 id="編輯-cloudflare-設定檔">編輯 cloudflare 設定檔</h3>
<p>在 /etc底下新增一個 cloudflare.ini</p>
<p>內容如下</p>
<pre tabindex="0"><code>sudo vim /etc/cloudflare.ini
<pre><code>sudo vim /etc/cloudflare.ini
dns_cloudflare_email = #email@address.here
dns_cloudflare_api_key = #API token here
</code></pre><p>存檔後離開然後改一下權限不然等一下certbot 會跳警告</p>
<pre tabindex="0"><code>sudo chmod 0600 /etc/cloudflare.ini
<pre><code>sudo chmod 0600 /etc/cloudflare.ini
</code></pre><h3 id="執行certbot-取得憑證">執行certbot 取得憑證</h3>
<p>執行以下的指令</p>
<pre tabindex="0"><code>sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/cloudflare.ini --preferred-challenges=dns --email admin@abc.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d abc.com -d *.abc.com
<pre><code>sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/cloudflare.ini --preferred-challenges=dns --email admin@abc.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d abc.com -d *.abc.com
</code></pre><p>正常的話,會是這樣的結果</p>
<pre tabindex="0"><code>sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/cloudflare.ini --preferred-challenges=dns --email admin@abc.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d abc.com -d *.abc.com
<pre><code>sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/cloudflare.ini --preferred-challenges=dns --email admin@abc.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d abc.com -d *.abc.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator dns-cloudflare, Installer None
@ -370,7 +370,7 @@ IMPORTANT NOTES:
</code></pre><p>這樣子就取得了全域通用的SSL 憑證檔案</p>
<p>如果看到底下這種錯誤</p>
<pre tabindex="0"><code>administrator@ubuntu:~$ sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/cloudflare.ini --preferred-challenges=dns --email admin@abc.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d abc.com -d *.abc.com
<pre><code>administrator@ubuntu:~$ sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/cloudflare.ini --preferred-challenges=dns --email admin@abc.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d abc.com -d *.abc.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator dns-cloudflare, Installer None
Obtaining a new certificate
@ -382,7 +382,7 @@ Error determining zone_id: 6003 Invalid request headers. Please confirm that you
</code></pre><p>那就是cloudflare API 那邊的權限設定錯了,我就是在這邊卡很久&hellip;</p>
<p>請參照上面的步驟和圖片正確的設定</p>
<p>可以用 certbot certificates 來驗證看看</p>
<pre tabindex="0"><code>administrator@ubuntu:~$ sudo certbot certificates
<pre><code>administrator@ubuntu:~$ sudo certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -394,10 +394,10 @@ Found the following certs:
Private Key Path: /etc/letsencrypt/live/abc.com/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
</code></pre><p>之後就可以用</p>
<pre tabindex="0"><code>sudo certbot renew
<pre><code>sudo certbot renew
</code></pre><p>來更新憑證</p>
<p>寫到/etc/crontab 去排程每個月的1號自動更新</p>
<pre tabindex="0"><code>administrator@ubuntu:~$ echo &quot;* * 1 * * root /usr/bin/certbot renew&quot; |sudo tee -a /etc/crontab
<pre><code>administrator@ubuntu:~$ echo &quot;* * 1 * * root /usr/bin/certbot renew&quot; |sudo tee -a /etc/crontab
* * 1 * * root /usr/bin/certbot renew
administrator@ubuntu:~$
</code></pre><p>接下來就等三個月之後,檢查看看憑證是否有自動更新了!</p>
@ -691,7 +691,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -676,7 +676,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -314,7 +314,7 @@ if (!doNotTrack) {
<p>有陣子花了點時間去檢查各個分公司的網路環境確保每一台Build Server都能夠連接Internet</p>
<p>然後找了一個離總部最近的據點把這些電腦連接Internet 的方式改為用 proxy 來控制</p>
<p>在proxy內加入了 allowhost 的設定然後把user電腦上的瀏覽器都代入 proxy server (firefox/chrome 的設定方式不同)</p>
<pre tabindex="0"><code>acl localnet src 192.168.28.0/24
<pre><code>acl localnet src 192.168.28.0/24
acl allowhost src &quot;/etc/squid3/allowhost.txt&quot;
acl localdomain dstdomain &quot;/etc/squid3/localdomain.txt&quot;
acl SSL_ports port 443
@ -650,7 +650,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -320,7 +320,7 @@ if (!doNotTrack) {
<p>不過呢,人微言輕,還是只好鼻子摸摸,想辦法救出來</p>
<p>然後就找到了群暉的這篇文章</p>
<p><a href="https://www.synology.com/zh-tw/knowledgebase/DSM/tutorial/Storage/How_can_I_recover_data_from_my_DiskStation_using_a_PC">https://www.synology.com/zh-tw/knowledgebase/DSM/tutorial/Storage/How_can_I_recover_data_from_my_DiskStation_using_a_PC</a></p>
<pre tabindex="0"><code>如何使用電腦復原存放在 Synology NAS 上的資料?
<pre><code>如何使用電腦復原存放在 Synology NAS 上的資料?
若您的 Synology NAS 故障,可以輕鬆透過電腦與 Ubuntu Live CD 復原資料。請確認 Synology NAS 硬碟上運行的檔案系統是 EXT4 或 Btrfs並依照下列步驟來復原資料。此處將以 Ubuntu 18.04 版本作為範例:
@ -358,7 +358,7 @@ if (!doNotTrack) {
<p>然後會在 /dev/vg1 底下看到當初建立的磁區 (我的叫 volume_1)</p>
<p>至於 mount_point 就是看你要掛載到系統的哪個目錄底下</p>
<p>所以我就要執行</p>
<pre tabindex="0"><code>mount /dev/vg1/volume_1 /mnt
<pre><code>mount /dev/vg1/volume_1 /mnt
</code></pre><p>這樣就可以把NAS上的分割給掛進liveCD ,就可以進行資料複製了!</p>
<p>連一份文件都做不好,真的是服了這些據說很高薪的「工程師」..</p>
</article>
@ -647,7 +647,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -320,48 +320,48 @@ if (!doNotTrack) {
<hr>
<h4 id="安裝基本套件">安裝基本套件</h4>
<p>因為是選擇 ubuntu 20.04 minimal 所以有很多套件都沒有,要先安裝這些基本套件</p>
<pre tabindex="0"><code>sudo apt update &amp;&amp; sudo apt install -y vim git net-tools software-properties-common iptables python3-pip qrencode
<pre><code>sudo apt update &amp;&amp; sudo apt install -y vim git net-tools software-properties-common iptables python3-pip qrencode
</code></pre><h4 id="取得安裝script">取得安裝script</h4>
<pre tabindex="0"><code>mkdir git &amp;&amp; cd git
<pre><code>mkdir git &amp;&amp; cd git
git clone https://github.com/racbart/wireguard-pihole
</code></pre><h4 id="修改-installsh">修改 install.sh</h4>
<p>因為我的目的是只想要把DNS 查詢透過wireguard 丟去 pihole</p>
<p>而不是把所有流量都轉給wireguard</p>
<p>所以要修改一下剛剛clone 下來的 script</p>
<pre tabindex="0"><code>cd wireguard-pihole
<pre><code>cd wireguard-pihole
vim install.sh
</code></pre><p>有點忘了改了哪些東西,就大概說一下吧</p>
<h5 id="ipv4_address">IPV4_ADDRESS</h5>
<p>原本的判斷VPS WAN IP 的指令在GCE上會抓到private ip</p>
<p>所以要改一下,在 install.sh 中找到底下這行註解掉,並修改成其他指令</p>
<pre tabindex="0"><code>#IPV4_ADDRESS=$(ip addr list &quot;$INTERFACE&quot; | grep &quot;inet &quot; | xargs | cut -d &quot; &quot; -f 2)
<pre><code>#IPV4_ADDRESS=$(ip addr list &quot;$INTERFACE&quot; | grep &quot;inet &quot; | xargs | cut -d &quot; &quot; -f 2)
IPV4_ADDRESS=$(dig +short myip.opendns.com @resolver1.opendns.com)
</code></pre><h5 id="install-wireguard-in-ubuntu-2004">install wireguard in ubuntu 20.04</h5>
<p>ubuntu 20.04 安裝wireguard 的方式和 18.04 有點差別,需要多裝一個 wireguard-dkms</p>
<p>找到底下這行註解掉改成我們要的指令python-pip 我們用 python3-pip 取代</p>
<p>在一開始就已經先裝了,所以這邊不需要再裝一次</p>
<pre tabindex="0"><code>#apt install -y wireguard python-pip
<pre><code>#apt install -y wireguard python-pip
apt install -y wireguard wireguard-dkms
</code></pre><h5 id="啟用query-logging">啟用query logging</h5>
<p>找到底下這行,註解掉,改成啟用 query logging</p>
<pre tabindex="0"><code>#QUERY_LOGGING=false
<pre><code>#QUERY_LOGGING=false
QUERY_LOGGING=true
</code></pre><p>存檔後離開</p>
<p>然後執行</p>
<pre tabindex="0"><code>sudo ./install.sh
<pre><code>sudo ./install.sh
</code></pre><p>開始進行安裝,基本上是全自動的,應該沒有錯誤,可以順利跑完 (應該啦&hellip;)</p>
<hr>
<p>接著來依照我自己的需求來修改一下 add-client.sh</p>
<h5 id="修改-ipv4_address">修改 IPV4_ADDRESS</h5>
<p>找到底下這行註解掉,並修改成其他指令</p>
<pre tabindex="0"><code>#IPV4_ADDRESS=$(ip addr list &quot;$INTERFACE&quot; | grep &quot;inet &quot; | xargs | cut -d &quot; &quot; -f 2)
<pre><code>#IPV4_ADDRESS=$(ip addr list &quot;$INTERFACE&quot; | grep &quot;inet &quot; | xargs | cut -d &quot; &quot; -f 2)
IPV4_ADDRESS=$(dig +short myip.opendns.com @resolver1.opendns.com)
</code></pre><h5 id="改一下-port">改一下 port</h5>
<pre tabindex="0"><code>#SERVER_PORT=$(cat /etc/wireguard/wg0.conf | grep ListenPort | rev | cut -d &quot; &quot; -f 1 | rev)
<pre><code>#SERVER_PORT=$(cat /etc/wireguard/wg0.conf | grep ListenPort | rev | cut -d &quot; &quot; -f 1 | rev)
SERVER_PORT=12000
</code></pre><h5 id="display-client-and-save-conf">display client and save conf</h5>
<p>找到底下這一段</p>
<pre tabindex="0"><code>echo &quot;
<pre><code>echo &quot;
[Interface]
PrivateKey = ${CLIENT_PRIVKEY}
Address = ${NEXT_IP}/32
@ -372,7 +372,7 @@ AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = ${SERVER_ADDRESS}:${SERVER_PORT}
&quot;
</code></pre><p>改成</p>
<pre tabindex="0"><code># Display client config
<pre><code># Display client config
echo &quot;
[Interface]
@ -387,7 +387,7 @@ AllowedIPs = 10.10.0.1/32
Endpoint = ${SERVER_ADDRESS}:${SERVER_PORT}&quot;|tee ${CLIENT_NAME}.conf &amp;&amp; qrencode -t ansiutf8 -l L &lt; ${CLIENT_NAME}.conf
</code></pre><p>之後要新增 client</p>
<p>就只要輸入</p>
<pre tabindex="0"><code>sudo bash add-client.sh &quot;CLIENT_NAME&quot;
<pre><code>sudo bash add-client.sh &quot;CLIENT_NAME&quot;
</code></pre><p>就會在當前目錄底下產生 ${CLIENT_NAME}.conf 的設定檔,並顯示 qrcode</p>
<p>而且也不用去管 client ip 發到哪了script 會自己去計算</p>
<p>再次強調,這只會把手機上的 dns 查詢透過wireguard指向到 pihole</p>
@ -395,7 +395,7 @@ Endpoint = ${SERVER_ADDRESS}:${SERVER_PORT}&quot;|tee ${CLIENT_NAME}.conf &amp;&
<p>如果要改成都走wireguard 出去,那就把最後一段的 Endpoint 後面改成 0.0.0.0/0</p>
<p>PC的話wireguard 連上之後要去手動修改DNS</p>
<p>成功的話在PC上可以看到這樣的查詢結果</p>
<pre tabindex="0"><code>peer: mVRp+fjHKW1/n/j5Cwn9zOlLsgtHsvoiNHPSn4bHLHg=
<pre><code>peer: mVRp+fjHKW1/n/j5Cwn9zOlLsgtHsvoiNHPSn4bHLHg=
endpoint: 23.34.45.67:12000
allowed ips: 10.10.0.1/32
latest handshake: 1 hour, 48 minutes, 39 seconds ago
@ -501,7 +501,7 @@ sudo mkdir /var/cache/stubby
</code></pre></div><h5 id="修改pihole-相關設定">修改pihole 相關設定</h5>
<p>開啟 pihole web 管理界面 settings -&gt; dns -&gt; 左邊預設的DNS 都不要選,在右邊的 custom 1(IPV4) 填入</p>
<p>存檔後離開</p>
<pre tabindex="0"><code>127.0.0.1#5453
<pre><code>127.0.0.1#5453
</code></pre>
</article>
</div>
@ -793,7 +793,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>
</html>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -472,6 +472,6 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -466,6 +466,6 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -466,6 +466,6 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>

@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1634607506" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1635401692" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1634607506" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1635401692" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@ -471,7 +471,7 @@ if (!doNotTrack) {
<p>之前為了能夠在執行完 ansible playbook 後能有個log 可以看</p>
<p>所以在每次執行的時候,都要加入 tee 的指令</p>
<p>像是</p>
<pre tabindex="0"><code>ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
<pre><code>ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
</code></pre><p>一直都是放在crontab 裡面執行,也就沒有去管他</p>
<p>反正也沒有人關心結果怎樣 (攤手</p>
@ -667,7 +667,7 @@ if (!doNotTrack) {
<p>這幾天在玩ansible 時,碰到一個問題</p>
<p>假如我有個yaml檔作為資料來源檔名是 abc.yml</p>
<p>大概長這樣</p>
<pre tabindex="0"><code> &quot;teams&quot;: [
<pre><code> &quot;teams&quot;: [
{
&quot;chinese_name&quot;: &quot;TEAM1&quot;,
&quot;description&quot;: &quot;TEAM1&quot;,
@ -847,6 +847,6 @@ if (!doNotTrack) {
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1634607506"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1635401692"></script>
</body>

@ -52,7 +52,7 @@
<description>&lt;p&gt;之前為了能夠在執行完 ansible playbook 後能有個log 可以看&lt;/p&gt;
&lt;p&gt;所以在每次執行的時候,都要加入 tee 的指令&lt;/p&gt;
&lt;p&gt;像是&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
&lt;pre&gt;&lt;code&gt;ANSIBLE_CONFIG=/home/D/ansiblecontrol/ansible.cfg /usr/local/bin/ansible-playbook /home/D/ansiblecontrol/playbook.user_client.yml --vault-password-file=/home/D/ansiblecontrol/vault.passwd -i /home/D/ansiblecontrol/inventory/production -f1 --limit tyuserclients |tee /tmp/tyuserclients.log
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;一直都是放在crontab 裡面執行,也就沒有去管他&lt;/p&gt;
&lt;p&gt;反正也沒有人關心結果怎樣 (攤手&lt;/p&gt;</description>
</item>
@ -100,7 +100,7 @@
<description>&lt;p&gt;這幾天在玩ansible 時,碰到一個問題&lt;/p&gt;
&lt;p&gt;假如我有個yaml檔作為資料來源檔名是 abc.yml&lt;/p&gt;
&lt;p&gt;大概長這樣&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; &amp;quot;teams&amp;quot;: [
&lt;pre&gt;&lt;code&gt; &amp;quot;teams&amp;quot;: [
{
&amp;quot;chinese_name&amp;quot;: &amp;quot;TEAM1&amp;quot;,
&amp;quot;description&amp;quot;: &amp;quot;TEAM1&amp;quot;,

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save