2017年1月30日 星期一

Puppet 4 自動化部署 – 利用 module 更簡化 manifest 的設定檔

之前介紹用 manifests 佈署,但是只是要安裝一個 nginx 就要寫那麼多行,如果是更複雜的設定那這個 node 的設定檔就會寫得很長,如此可見有 n 台 node 的時候這個 manifests 將會非常可觀,不過小弟說過 Puppet 幾乎無所不能的彈性,所以 ...

 

Puppet 是一個有模組概念的工具,利用已經編寫好的 module 在 manifests 就不需要在打上落落長的設定檔,底下我會示範如何安裝 module、編寫模組 module,然後利用 module 來寫 manifests 看出差異

用 apt-get 刪不乾淨的 remove 參數

今天在安裝一台 Apache 2.4 的時候頻頻無法啟動 service 出現以下錯誤訊息

 
$ sudo /etc/init.d/apache2 restart 
/etc/init.d/apache2: 46: .: Can't open /etc/apache2/envvars
[....] Restarting apache2 (via systemctl): apache2.serviceJob for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" and "journalctl -xe" for details.
failed!

2017年1月20日 星期五

Ubuntu 16.04 建立 APT Mirror site

最近因為配合工作所以建立了一個 APT Mirror site,順手記錄一下安裝步驟

 

由於是 Mirror site,所以要準備一個硬碟至少 300GB 的空間,因為光是 Ubuntu 官方源 amd64、i386、src .. 加一加就 200 多 GB 了

 

環境:

  • Ubuntu 16.04 xenial

  • 預備存放 packages 的空間:/deb


2017年1月17日 星期二

Git 在 Windows Cygwin clone 換行符號的問題

這幾天在開發工具的時候在測試 Windows Cygwin 相容性的時候一直出現錯誤訊息:
/test.conf: 列 5: $'\r' : 命令找不到

 

我在之前有寫過一篇關於使用 git add 時出現轉換 CRLF to LF 格式的文章,在這邊出現的問題在於 Windows clone or pull 下來 source code 出現的問題

2017年1月13日 星期五

Yahoo! 開源的 DevOps 專案 - Screwdriver

Yahoo! 在 1/12 號 release 了一個 DevOps 的專案 Screwdriver,這是 Yahoo! 在內部執行多年的 DevOps 專案,終於在最近 release open source 了,Screwdriver 是基於 python 2.7  開發的,並且使用 docker, docker-compose Container。

 



2017年1月10日 星期二

【DevOps】Puppet 自動化部署 – 設定第一個自動佈署工作(manifests)

在 Puppet 中必須撰寫 manifests 去佈署你的 Agent 伺服器,顧名思義 manifests 是每一個 node 的佈署清單,要做什麼事情都在 manifests 這邊撰寫,可以參考下圖架構關係

 

 



 

Master 和 Agent 之間取得佈署清單流程:

  1. Agent 傳送 catalog 內容包含 nodename (節點名稱) 和 facts (由 facter 所獲取的系統參數)

  2. Master 從 catalog 提供的資訊將 manifests 編譯重新打包 catalog

  3. Agent 收到 catalog 後執行佈署工作,並且回應 Report 給 Master 執行結果。


2017年1月8日 星期日

了解為何 OpenStack 為何沒有 disk by-id

此篇是前篇在查虛擬機真實性的延伸閱讀;

 

在一般的 Virtual Machine 都會在 /dev/disk/by-id 替 disk 產生一個 UUID link 到實際硬碟位置 (sda、sda1、sdb ... etc)
$ ls -l /dev/disk/by-id/ 
total 0
lrwxrwxrwx 1 root root 9 Jan 2 00:33 ata-u02-Ubuntu-0_SSD_H27AXNE0H76MV18T13AG -> ../../sda
lrwxrwxrwx 1 root root 10 Jan 2 00:33 ata-u02-Ubuntu-0_SSD_H27AXNE0H76MV18T13AG-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jan 2 00:33 ata-u02-Ubuntu-0_SSD_H27AXNE0H76MV18T13AG-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jan 2 00:33 ata-u02-Ubuntu-0_SSD_H27AXNE0H76MV18T13AG-part5 -> ../../sda5
..
..
etc

2017年1月6日 星期五

用 virt-what 判斷是否為虛擬機、了解為何 OpenStack / VMWare 為何沒有 disk by-id

剛好翻到一篇以前我想過的一個問題「如何知道你目前所在的設備是不是虛擬機?」,為何會有這個問題?

 

  • 當你身為一個廠商連到客戶端的設備時,是否也有過質疑客戶使用虛擬機造成效能不彰的問題?

  • 抑或是 host 造成的 bugs 影響 guest

  • 或是單純你只想知道目前所使用的 host software 是哪一種


 

記得當時找了蠻久的,都沒有相對應的 solution,結果就在我一個無意間的 Google 逛街下看到「7 Ways to Detect Virtualization from your VM

從文中選了一個號稱能在任何的 Linux 編譯成功,並且在我目前環境中都能判斷成功的 virt-what

用 dmidecode 查看 Linux 硬體資訊

前幾天一位同事問到如何查看目前 Server 上的記憶體插了多少隻記憶體、目前插了多少隻、還有多少隻可以插。

 

在 Linux 上除了可以在 /proc 和 dmesg 看到目前伺服器的資源以外,如果要查看目前硬體的型號還可以用 dmidecode 這個工具查看所有的 DMI (Direct Media Interface)

2017年1月2日 星期一

看看全球的 time server 如何處理 2017 年的閏秒

在今年, 2016 跨 2017 的時候多了一個閏秒,也就是 2016 年多了 1 秒,實際跨年倒數要再多一秒!這個對一般人來說是個不痛不養的 1 秒,但是對於技術人員來說,多這一秒可能會造成天下大亂,因為伺服器通常無法處理有61秒的一分鐘。

 

一般公司的內部 time server 就不說了,多數都是對外校時,但對於全球性的 time server 來說就不是這麼簡單了,從 leap smear 這邊看到在各大 time server 是如何處理 2017 年的閏秒



【DevOps】Puppet 4 自動化部署 - 實作 Policy-based autosigning

前面介紹到了 Policy-based autosigning,在這邊依照官方所述來測試 Policy-based autosigning 的實作環境

 

首先必須先了解一下 Policy-based autosigning 的運作概念是在 csr 證書中加入參數供認證,由於在 Puppet 的認證關係中是由 Agent 發起,所以在 csr 動手腳的動作就落在 Agent 上面,

 

在 Master 中開啟 Policy-based autosigning 支援

可以在 puppet.conf 中加入 autosign 參數來開啟 Policy-based autosigning
To enable policy-based autosigning, set autosign = <policy executable file> in the [master] section of the CA Puppet master's puppet.conf.

在這邊必須注意的是 autosign 參數帶的是一個 script 檔,他將會替你執行這個 script 去驗證 Agent 的 csr 資訊。

用 diff 建立 patch 檔案上補丁

前陣子修了 nginx 的 bugfix 剛好用上 diff 建立 patch 補丁檔,這邊記錄一下如何用 diff 和 patch 這兩個工具。

 

用 diff 產生 patch 補丁

首先你必須先擁有 新/舊檔案 (file.old / file.new),然後用 diff 比較兩隻檔案的差異
$ diff -Naur file.old file.new > file.patch

-a 將所有檔案都視為文字檔
-u 輸出預設三行的相同文字行
-r 遞迴比較所有的子目錄
-N 將缺少的檔案視為空檔案

所產生的 file.patch 就是 patch 補丁檔。

MacOS 把惱人的 Yahoo! 輸入法一點通服務關閉

這兩天安裝了 Yahoo! 輸入法,然後在打 ` 的時候一直出現 "一點通" 服務

我實在不懂為何 Yahoo 要把這麼智障的功能寫在單一按鍵上,雖然他早就停止維護了,但還是要抱怨一下在一開始開發的時候設計出這種快捷鍵,難道 Yahoo 工程師都不用打 ` 嗎?

Debian / Ubuntu 鍵盤設定語系 - 常用 dpkg-reconfigure 工具

這幾天在安裝 Ubuntu,不知道是哪個時候手殘,點錯了鍵盤語系,導致進入 terminal 輸入的東西都和我的鍵盤完全搭不上邊

然後就又開始了我的 troubleshooting 之旅 ...

【DevOps】Puppet 4 自動化部署 - Master 和 Agent 的認證關係

在前篇了解了基本的 Puppet 如何建立 Master / Agent 之後,現在深入了解一下 Master / Agent 之間如何認證彼此的關係。

 

在 Puppet 的世界中,Master 和 Agent 是靠著 SSL 認證進行認證