2017年3月12日 星期日

Ubuntu 16.04 建立 Swap file & 調校 swap

由於看到 vultr 的 $2.5/month 方案就給他刷了下去,準備把 blog 轉過去,雖然記憶體只有 512MB 但是卻是 SSD 硬碟阿 !! 用來當 swap file 根本綽綽有餘

 

在這篇就記錄怎麼在 Ubuntu 16.04 實作 swap file

SSH locale 語系的問題解決

最近幾個月換筆電,然後開始在陸陸續續在 Server 上出現一些語系錯誤的訊息,然後不以為意了好一陣子,今天突然覺得很礙眼,準備解決這個問題

 

研究一下發現問題是如果 sshd_config 有開啟 SendEnv 的話就會將 Local 的 env 發送到 Remote Server,如果 Remote Server 沒有語系就會出現以下錯誤訊息
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "en_US:",
LC_ALL = (unset),
LC_CTYPE = "zh_TW.UTF-8",
LANG = "en_US"
are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US").

或是
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

Google 雲端推出終身免費專案 , Vultr 推出 $2.5/mon 超優惠方案

這週根本就是雲端方案的廠商大競價,各家雲端價格殺的一塌糊塗,剛好把 blog 丟上雲端。

 

GoogleGoogle Cloud Next '17 推出了 終身免費方案 Always Free Usage Limits,其中最備受關注的就是 f1-micro 的 instance 也是其中之一 (僅美國地區)、30GB 硬碟、5GB 快照、對外流量 1GB (不包含中國和澳洲)

規格

  • CPU:0.2 vCore

  • RAM:0.6GB

  • Storage:30GB

  • Bandwidth:1GB (excluding Australia and China)


 

Vultr 也在 2017/3/1 宣布推出了 The Vultr Cloud Is More Powerful Than Ever! 超殺的最低方案 $2.5/month:

規格

  • CPU: 1 vCore

  • RAM:512 MB

  • Storage:20 GB SSD

  • Bandwidth:500 GB


然後 $5/month 升級到 1GB,把超便宜的 Linode 給比了下去

 

最近各家雲端廠商動作頻頻,在雲端這塊大餅市場越來越大的時代自建 IDC 似乎也快變成高成本,就剩下 AWS 這個領頭羊是否會加入這場血戰了。

 

Orignal From: Google 雲端推出終身免費專案 , Vultr 推出 $2.5/mon 超優惠方案

2017年3月9日 星期四

一條龍佈署 CI/CD 從 Travis 到 CodeDeploy 的 On-Premises (地端)

之前寫過 CodeDeploy 在 EC2 的應用,然後終於可以來寫 CodeDeploy 在 On-Premises 也就是在 非EC2 的主機佈署,

 

On-Premises 與 EC2 不同的地方在於 AWS 不認得你的 On-Premises Server,AWS 不可能知道你家的 Server 在哪裡吧 !!,基於 AWS 雲的概念是 IP 不是一個可以作為依據的資訊,所以也不會用 IP 來鎖 (用企業的方式思考,一家公司只有一個 Public IP 怎麼佈署萬台 Server ?)

 

由於之前沒有涉獵 AWS 太深,這次重新深入了解 AWS 後踩了非常多的坑 ..   但也了解 AWS 的強大

2017年3月7日 星期二

從 Bash 中刪除最後 N 個字元

最近在寫 script 遇到一個情境,就是要刪除最後幾個字元,然後因為最後的字元多重複,且沒有規則,所以看起來不適用 awk

 

最後用 sed 來做
# Remove the last 5 characters 
$ echo "somefont-12345" | sed "s/.....$//g"
$ somefont-

# Remove the last 3 characters
$ echo "somefont-12345" | sed "s/...$//g"
$ somefont-12

 

這個用法還蠻簡潔易用的。

 

Orignal From: 從 Bash 中刪除最後 N 個字元

2017年3月1日 星期三

AWS S3 掛了 (2017/3/1)

剛剛在 build Travis CI 的時候,遲遲無法 deploy 到 AWS S3,然後 Travis CI 就出現了一則訊息

Identified - AWS has confirmed that S3 is experiencing issues. We've taken some actions to maintain current container-based capacity and are monitoring the S3 status and overall healthy of our infrastructure closely.
Feb 28, 18:10 UTC

Investigating - We are investigating issues related to the S3 outage in AWS. Currently build logs older than a few hours will fail to load. Build caches for container-based builds are unavailable. Builds that depend on resources like Docker Hub, Quay.io, or other S3 dependent third party services will fail with errors related to being unable to access the resources.



 然後到 AWS 去看,果然所有 bucket 都消失了 ........



所有 S3 都無法訪問 .. orz




Orignal From: AWS S3 掛了 (2017/3/1)

2017年2月24日 星期五

AWS 開放對 On-Premises AD 對 AWS service 的 Multi-Factor

AWS 在部落格發了一篇可以對 AWS service 進行 MFA 驗證,而且還能夠透過 AWS AD 和 On-Premises AD 進行 trust 讓內部的 RADIUS Server 來驗證,這對於許多因為安全性 and 稽核因素而無法上雲端的企業更增添了上雲端的理由,由這幾年 AWS 的演進其實大大的加強了在安全方面。
How to Enable Multi-Factor Authentication for AWS Services by Using AWS Microsoft AD and On-Premises Credentials

 

AWS 什麼沒有就是文件很多,所以文中也寫了如何用 AD trust 來跑 WorkSpeaces 的 MFA 驗證



 

AWS 除了在雲上做的好,連混合雲幾乎都快無縫接軌了。

 

Orignal From: AWS 開放對 On-Premises AD 對 AWS service 的 Multi-Factor

2017年2月22日 星期三

AWS CLI 新舊版本的差異

為什麼會寫這一篇?是因為小弟最近在 AWS CLI 踩了很大一個坑,所以怒寫一篇文章 ...

 

AWS 的服務其實隨時隨地都在版本更新,你可能用到一半發現和你隔壁的不太一樣,很有可能就是 AWS 在版更

或是 AWS CLI 和文件寫的不一樣 ... 這就是我在 AWS CLI 踩的坑 !!

 

事情的緣由是小弟在跑 AWS CodeDeploy for On-Premises 的過程中,有一個動作是要產生 sts session
For example:

aws deploy register-on-premises-instance --instance-name name-of-instance --iam-session-arn arn:aws:sts::account-id:assumed-role/role-to-assume/session-name

2017年2月16日 星期四

在 Ubuntu 16.04 中 chkconfig 的替代品 (非sysv-rc-conf)

今天有人問到在 CentOS 中常用的 chkconfig 在 Ubuntu 的話換成什麼了?!

 

網路上有蠻多都推薦用 sysv-rc-conf 這個工具來用,但是對於管理來說非標準的東西如果要自動化就會多一份工,然後到了新公司被灌輸了一個概念就是,有標準的東西就用標準的,盡量避免使用非標準的工具。

 

回歸正提,在 Ubuntu 都是使用 systemctl 去管理 service,其實 systemctl 也可以有 chkconfig 功能的參數
$ systemctl list-units

 

用 systemctl 列出的資料更多了,但比較不好查看,如果能利用 grep 就不會有這些問題了。

 

 

Orignal From: 在 Ubuntu 16.04 中 chkconfig 的替代品 (非sysv-rc-conf)

2017年2月13日 星期一

AWS 用 CLI 動態修改 EC2 的 Role

AWS 在 2/9 的時候在 Blog 發表在 EC2 上終於可以動態修改 IAM Role 了!! 相信有在使用 AWS 的人一定都遇過在開啟 EC2 後忘記加 Role 之後又重開 EC2 的窘境 (根本常常上演
New! Attach an AWS IAM Role to an Existing Amazon EC2 Instance by Using the AWS CLI

雖然這次僅有開放 CLI 使用,但這已經夠好用了,不用再浪費過多的時間在重啟 EC2 上,AWS 在文中提到這次更新可以在 EC2 原本沒有 Role 的情況下加入 Role,還能夠改變 EC2 的 Role 角色

用 AWS CLI 建立 IAM Role

在 AWS Web console 可以很方便的替你完成許多事情,但是如果今天你需要自動化 or 系統化的管理就需要用到 AWS CLI,更何況有些功能是在 Web console 裡面所找不到的。

 

用 AWS CLI 建立 IAM Role

首先先建立一個 EC2 type 的 Role,定義名稱為 Role-ec2-test。

Role Json:
$ vim Role-ec2-testsite 

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}

 

建立 "Role-ec2-testsite" Role。
$ aws iam create-role --role-name Role-ec2-testsite --assume-role–policy-document file://Role-ec2-sitetest.json

 

Attach Policy 權限為 S3 Read Only
$ aws iam attach-role-policy --role-name Role-ec2-testsite --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

 

再建立 Role instance profile
$ aws iam create-instance-profile --instance-profile-name Role-ec2-testsite

 

最後將 Role instance profile 和 Role 關聯起來
$ aws iam add-role-to-instance-profile --role-name Role-ec2-testsite --instance-profile-name Role-ec2-testsite

 

這樣就完成 Role 的建立,可以到 Web console 去驗證一下是否成功。

Orignal From: 用 AWS CLI 建立 IAM Role

2017年2月11日 星期六

一條龍佈署 CI/CD 從 Github 跑 Travis 到 AWS CodeDeploy - Travis 到 CodeDeploy

延續前篇串好 Github 到 Travis 後,在這篇要開始寫 Travis -> CodeDeploy

 

CodeDeploy 簡介

CodeDeploy 本身是一個 Server/Client 的架構,由 AWS 提供的 CodeDeploy (Server) 服務,在 EC2 上安裝 CodeDeploy agent (Client) 去 S3 抓 Travis CI 放的 latest.zip 檔案。

 

由 CodeDeploy 的運作方式,AWS 文件開好以下權限:

  • IAM user for Travis:

    • 從 Travis 上傳到 S3 的權限 (AmazonEC2RoleforAWSCodeDeploy)。

    • 讓 Travis 可以呼叫 CodeDeploy 的權限 (AWSCodeDeployDeployerAccess)



  • Role for EC2:機器要可以存取 S3 (AmazonS3FullAccess)。

  • Role for CodeDeploy:給 AWS CodeDeploy 的服務本身用 (AWSCodeDeployRole)。


2017年2月9日 星期四

Ubuntu 16.04 在 Apache2.4 跑 PHP7.0

最近剛好在跑 Apache 2.4 + PHP7.0 順手記錄一下整個流程。

 

Apache 2.4 改進了很多設定方式 (i.e. a2ensite, a2dissite),和 Nginx 貼近不少更直覺了,效能也不錯。

PHP7.0 就不用說了,大幅改進效能問題。

 

然後因為工作環境的關係,之後開始會多用 Apache2.4。

2017年2月8日 星期三

一條龍佈署 CI 從 Github 跑 Travis 到 AWS CodeDeploy - 介紹及授權 Travis 到 Github

最近把 Puppet 放到 AWS 上面跑 EC2,然後預計要讓 Puppet 在 Github 上面管理,中間透過 Travis Pro 和 AWS CodeDeploy 進行測試 and 更新 Puppet。

 

在這一整個系列 CI 中示範的會是以 Private repository 為主,之後再寫 Public repository 怎麼做。

 

環境準備:

  • 必須要先有至少 1 個 Github Private repository,US $7/month。

  • 建議有 Travis Pro with Bootstrap 版本,US $69/month ( Private 試用只有 100 次 build)。

  • 至少 1 台要佈署的 EC2


2017年2月5日 星期日

Ubuntu 16.04 安裝 Docker engine

最近會記錄一連串的 CI/CD 工作,Docker 是在 DevOps 中的一把利器,在這邊會記錄如何在 Ubuntu 16.04 安裝 Docker

 

Ubuntu 16.04 安裝 Docker

Step.1 先 update 你的 package
$ sudo apt-get update

 

Step.2 加入 Docker 的官方 repository 金鑰
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

2017年2月4日 星期六

AWS 帳號開啟 MFA 兩段式驗證 - Google Auth(TOTP)

根據安全 AWS 提到在帳號的安全性可以開啟 MFA 驗證:
AWS Multi-Factor Authentication (MFA) 會在使用者名稱和密碼之外再增加一層保護,是一個簡易的最佳實務。啟用 MFA 之後,當使用者登入 AWS 網站時,系統將提示他們輸入使用者名稱和密碼 (第一重關卡 – 他們知道的資訊),以及來自其 AWS MFA 裝置的身份驗證代碼 (第二重關卡 – 他們擁有的資訊)。這多個要素共同為您的 AWS 帳戶設定和資源提供更高的安全保護。

在這邊我以 IAM 使用者的角度去建立 MFA

hdparm 測試硬碟讀寫速度

這陣子覺得當 Blog 的硬碟抄寫太慢,其中有一顆是拿來備份的,由於要備份的越來越肥,結果備份舊越來越久 ...

 

決定測試一下硬碟的速度,hdparm 是一個在 Linux 上用來測試硬碟讀寫速度的工具,這篇就拿這個工具來當主軸啦!

 

測試讀取速度
$ hdparm -t /dev/sda 

/dev/sda:
Timing buffered disk reads: 274 MB in 3.01 seconds = 90.65 MB/sec

只有 90MB,囧。

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 認證進行認證