檢查在 Debian / Ubuntu 環境中虛擬化功能的支援 (kvm, LXC)

使用 KVM (Kernel-based Virtual Machine)、Xen、LXC(Linux Containers) 等虛擬化技術時經常需要 linux kernel 或是 CPU 上的硬體支援,像 KVM 這種高度依賴硬體協助虛擬化 (Hardware-assisted virtualization) 例如 AMD-V 或是 Intel VT-x 的技術,最好是在使用前就先確認是否在系統上有被支援,才不會使用起來才發現效能慢得很痛苦,硬體協助虛擬化除了本身硬體支援、也需要相關的設定需要在主機板 BIOS 上啟用及在軟體上的支援,這邊筆記一下在 Ubuntu 上怎麼樣快速的確認是否自己的環境有虛擬化時會用到的功能支援,軟體虛擬化技術的部份會以 KVM / LXC 為主。

1. 檢查 CPU 是否支援硬體虛擬化技術,透過 cpuinfo 裡面的 flag 來確認:

  • AMD 有支援 AMD-V 技術的處理器應該會看到一個 svm 的 flag
  • Intel 的 VT-x 技術對應的 flag 則是 vmx
  • 其他例如 ARM, PowerPC 架構的處理器可以參考這邊的資訊:

2. 檢查 kvm kernel module 是否已經載入,以 intel 處理器為例:

(如果是 AMD 的處理器要看到的應該會有 kvm_amd 而不是 kvm_intel)

另外我們也可以藉由 kvm-ok 這個工具來看看 kvm 環境的支援情形,要使用 kvm-ok 請先使用 apt 安裝 cpu-checker 這個套件 (Ubuntu 有包,但 Debian 沒有)。

以下分別是有有/無支援的輸出結果:

如果處理器本身有支援對應的虛擬化技術,但顯示為沒有支援,或是 kvm 模組沒有被正常載入,可以試試看手動載入相關的模組 (注意有 intel, amd 字樣的模組請對應自己的處理器品牌):

3. 同時檢查包含 QEMU / LXC 虛擬化技術相關的支援及細節

這邊使用的工具是 virt-host-validate ,現在不管是在 Ubuntu 或是 Debian 上都有打包好的套件可以直接安裝使用,透過這個工具可以看到更多虛擬化技術的支援細節,要使用 virt-host-validate 這個工具請用 apt 安裝 libvirt-bin 這個套件。virt-host-validate 使用基本上不需要特別帶參數,除非你只想針對特定一種虛擬化技術做確認,執行結果範例及說明在下方:

沒有支援硬體虛擬化的結果 (libvirt-bin v1.2.x in Ubuntu 14.04.5 / Debian 8.6):

有支援硬體虛擬化的結果 (libvirt-bin v1.2.x / Ubuntu 14.04.5 / Debian 8.6):

另外也有可能出現需要另外載入 kernel module 的提示訊息,例如 vhost_net ,不過我是因為忘了用 root 權限才看到這個訊息的,有些檢查需要使用到比較高的權限才能確認 (libvirt-bin v1.2.x / Ubuntu 14.04.5 / Debian 8.6):

到了 Ubuntu 16.04 , libvirt-bin v1.3.1,結果變得更加的詳細,大致如下,就不分別貼多個版本了:

這些資訊其實透過 sysctl , dmesg 等工具裡面也都可以看到一些蛛絲馬跡,在 unix 的環境裡面往往一件事可能有不只一種作法,只是 dmesg 訊息有時會被 “洗板" ,訊息太多就被蓋掉了,sysctl 的話則是要多背一些位置 … kvm-ok 或是 cpuinfo 我還是覺得簡單一些,透過上面這些訊息,我們基本上就可以了解到所使用的環境是否有適合來拿做虛擬化的應用了,即便是身處在一個已經經過虛擬化的環境裡,例如使用 AWS c或是 DigitalOcean 的 VPS,只要所在環境軟硬體有適當的巢狀虛擬化支援,再多開一層的虛擬機都還是能有不錯的效能,反之,若是沒有適當的軟硬體虛擬化技術支援,即便是運算能力很強的伺服器處理器,只有一層的虛擬機在跑都還是可以處理器使用率不斷滿載、整體速度慢到讓人無法接受,這也就是為什麼要先確認我們需要用到的虛擬化技術支援情形的原因。

Can I use (瀏覽器功能支援速查網站) … 終於加入 SSL / TLS 的支援資訊

caniuse 是一個整理了各個瀏覽器針對不同功能的支援性做整理的專案,網頁前後端的開發者需要速查某一個 feature 有沒有被特定的 browser 支援、或是被各個瀏覽器支援的情形的時候,caniuse 算是一個方便好用的服務, 網站本身丟在 http://caniuse.com/ (很可惜沒走 https),專案則是 open source 丟在 GitHub 上: https://github.com/Fyrd/caniuse

CanIuse.com

直接在網站首頁的 Can I use ______ ? 的搜尋框輸入相關的關鍵字,下面會列出相關的結果,首頁本身也有列出一些 features 可以給大家參考,如果想對搜尋的結果做進一步的設定,Settings 裏面也可以控制譬如像是針對哪些功能分類、不同的瀏覽器做搜尋、只顯示市佔率超過多少百分比的瀏覽器、排序等等的資訊,不過很可惜的是一直沒有 https / SSL /TLS 支援性的相關資訊,剛剛在 Fyrd/caniuse#1144 這個 GitHub 上的討論串可以看到在今天稍早作者已經表示加入對應的支援了 (在 Fyrd/caniuse@960f5419a ),雖然拖了很久,不過總算是開始把這部份補起來了。

SSL 和 TLS 1.0 的部份分別是現在瀏覽器全面棄用/支援的兩個協定,不過在 caniuse 上沒有獨立的頁面,只會在搜尋結果呈獻說明:

而 TLS 1.1 和 TLS 1.2 則有獨立的頁面顯示目前瀏覽器的支援情況:

TLS 1.1: http://caniuse.com/#feat=tls1-1
CanIuse_TLS-1.1

繼續閱讀

除了 Let’s Encrypt 以外的免費 SSL 憑證

使用 SSL 憑證一直以來的一個門檻是費用問題,在沒有閒錢 (對於小朋友來說還有付款方式的問題) 的情況下想要練習架設有 https 保護的網站而且要能正常運作就有其一定的難度,自簽憑證雖然也可以達到類似的效果,不過整個流程以及最終驗證的方式都還是跟實際上有出入,即便這幾年已經有了很多便宜的 SSL,這個門檻一直都還存在,這也是為什麼會蹦出一個 Let’s Encrypt 要來推免費的 SSL 憑證的主因,目的就是降低甚至消除門檻、普及網路連線的加密, Let’s Encrypt 同時也推自動化工具來簡化整個流程,Let’s Encrypt 推出至今已經簽出超過五百萬張憑證了 ,既然不用錢、也有自動化工具,那為什麼還會用到別家的憑證?

我要找 Let’s Encrypt 以外的免費 SSL 憑證主要有兩個原因:

  1.  Let’s Encrypt 的整個簽證流程不同於以往 (產生 private key, CSR 再送給廠商,完成驗證後簽發),要讓沒經驗的人來學怎麼做這件事情我還是偏好走傳統的方式整個帶過一遍,而不是只透過自動化工具進行部署,這樣觀念上還是會比較好一點,另外就是現在的自動化工具只適用於 domain validation (dv) 的驗證,如果要有 OV (Organization Validated) 或 EV (Extended Validated) 的話還是需要走傳統的作法。
  2. Let’s Encrypt 憑證有效期較短 ,雖然這個問題可透過工具自動 renew 來補足,但仍有其限制,使用憑證的主機如果沒辦法定期或常態對外連網就不見得適用,例如我想要在內部網路環境架設受簽證保護的內部服務,又不想要平常就把對外網路打開、或是自簽憑證再把憑證塞到使用者裝置上等情況。

目前看到的兩家免費憑證,一家是老牌的 StartSSL 、 另一家是對岸的 WoSign,兩者我都有用過,前者曾經被爆出一些潛在的安全性問題,但是問題持續的時間看起來不長,那後者本身是對岸的公司,所以可想而知對一些人來說是有潛在的安全疑慮的,不過不考慮這些為安全考量以及政治因素,丟給新手拿來當練習我覺得是很好的選擇,不知道還有沒有其他可以推薦的?

WoSign 的免費憑證申請在這邊:https://buy.wosign.com/free/?lan=en,一個憑證可以簽 5 個 domain,有效期限可選則一年或兩年,要額外數量的網域認證或是更長的年限就必須另外付錢,不考慮是對岸公司疑慮的情況下,WoSign 本身因為是對岸公司,有提供簡體中文的說明文件、且產生的憑證會按照不同的 httpd 如 IIS、nginx、apache 不同的需求分開提供,不用煩惱Intermediate的問題,我覺得對新手來說是很好的入門。

WoSignFreeSSL

WoSign 申請 Certificate 的畫面

繼續閱讀

Let’s Encrypt 已經簽出超過五百萬張憑證了 …

Progress Towards 100% HTTPS, June 2016 這邊看到的資訊,Let’s Encrypt 從去年 (2015) 年底 public beta 到現在已經簽署超過 500 萬張的憑證,扣掉被撤回以及已經過期的,大概有 380 萬張憑證還是有效的,而這些有效的憑證總共涵蓋了超過 700 萬個獨立的網域 (一張憑證可以簽給多個 domain),因為 Let’s Encrypt 憑證有效期只有 90 天,所以可以想像最近這三個月簽出的憑證數量佔的比例非常的高,官方也用時間/憑證數量的關係畫了一張圖出來給大家參考:

le-certs-issued-june-22-2016

其中有一些成長比較快的時間點是其他網站服務、虛擬主機、CDN 等廠商把 Let’s Encrypt 整合進自家服務的結果,例如文中提到的 OVHWordPress.comAkamaiShopifyDreamhostBitly,另外像是 KeyCDNCDN77 等 CDN 廠商也都陸續把 Let’s Encrypt 憑證簽署自動拉近自家的服務中,使用者因此在價錢以及部署的流程上受惠,同時對 Let’s Encrypt 的推廣及使用量產生相當程度的助長。

文章最後提到 Let’s Encrypt 在去年底剛公開測試的時候,整個 www 大概只有 40% 的網站有使用 https,現在已經長到 45% 了,可以預期今年 (2016) 這個數字可以長到 50% 以上,怎麼看都覺得很驚人!

Sourceforge 推出的 Internet Speed Test 網路速度測試服務

前鎮子跑出一個 Netflix 推出的網路速度測試服務 Fast.com,前兩個禮拜又看到 SourceForge 這個老牌的開源專案協作平台推出自己的測速服務 – SourceForge Internet Speed Test ,網址就是在原本的 sourceforge.net 後面再加上 speedtest 的字樣 https://sourceforge.net/speedtest/,從 SourceForge blog 放出來的這篇 Introducing the SourceForge Internet Speed Test 消息放得很短,只有簡單介紹幾句跟放個截圖就草草結束,實在不像是推出一個全新服務的新聞稿?

網站點進去長這樣,畫面上的文字以及排半略嫌複雜,可能是因為會上 SourgeForge 的使用者比較多組成同時也是開發者所以就比較沒關係?

sourceforge-speedtest

主要特色是使用了 HTML5 而不是 Flash ,除了常見的上下載速率以外,更加入了 jitter (抖動) 以及 package loss (封包遺失) 的資訊,對於這些資訊對於實際使用上帶來的影響底下也有說明(缺點就是字太多了XD):

sourceforge-speedtest-2

我測出來的結果長這樣(IP就馬賽克掉了),和 Fast.com 同樣看起來頻寬不是那麼夠 (比起到處跟 local ISP 合作放點的 speedtest.net 比較起來),不過在手機、平板上面直接使用起來都很正常,這點我覺得很不錯!

SourceForge Internet Speedtest

大家就參考看看吧~

Git v2.9.0 釋出

台灣時間  6 / 14 號早上8點左右釋出的新版本,官方 Windows 的 binary release 在中午為止看起來都還停留在 v2.8.4,Mac 甚至還停留在 v2.8.1,而 FreeBSD 的 ports 目前也還沒看到更新,但如果是 Ubuntu 或是基於 Ubuntu 的 GNU/Linux 發行版,只要透過官方的 PPA 就可以直接升上去了。(可以參考 Ubuntu 上的 PPA 整理)

除了每次版本更新都必備的修 bug 以外,這次沒看到明顯跟效能提升有關的更新,背後實作的部份太瑣碎就先不琢磨,列舉依些對使用上有直接影響的更新:

  • Shell 的 auto-completion 更新
    (就是你打命令要按 tab 把剩下字補完的功能)

    • 目前看起來還是缺不少指令,不過有更新總比沒有好 …
  • git rebase -x 現在不需要加 -i 參數就可以直接使用了
    • (rebase 的時候針對每個 commit 跑測試的功能)
    • 省下了一些瑣碎的步驟/時間,畢竟不是每個人都需要 interactive 的互動操作
    • 之前的版本不加 -i 就會不讓你跑,然後出現錯誤訊息:
      • The --exec option must be used with the --interactive option
  • 可以自行指定 hooks 的位置
    (將一些事件和行為進行連結達到自動化的功能)

    • 先前都是放在 .git/hooks,可以指定之後應該某些專案就可以共用 hooks 了,或許可能就會有人性質相同專案會用到的 hooks 也可以打包成專案釋出?複雜一點的話就是偵測專案性質用比較 general 的方式跑簡單的檢查,syntax check / lint 之類的
  • git commit 現在會吃 verbose 的設定,就不用在命令後面加參數了
    (顯示更詳細的資訊輸出)

  • git clone 現在可以直接 shallow clone submodule 了
    (clone 的時候不要 clone 整個改版歷史,可以有效減少空間跟頻寬消耗跟提升速度)
  • git diff / log 預設啟用自動偵測檔名變更
    (區別 “檔名變更" 和 “刪除一個舊檔案再寫一個新檔案" 的不同)

    • 可以透過設定來停用
  • 預設禁止沒有共同祖先的分支合併
    • 可以避免一些錯誤的操作
  • git log 的 commit message 縮排預設用 4 個 spaces 來展開 tab
    • 不知道是不是我沒讀懂或哪邊有問題,目前看起來還是8個空白的長度
    • 可以透過參數來取消這功能

繼續閱讀

在 nodejs 手動 garbage collection 的方法

前陣子因為在 Heroku 上面跑的 nodejs 程式開始不斷出現記憶體使用超量的訊息:
R14 - Memory Quota Exceeded ,加錢升 dyno (Heroku 上的 instance) 也不見好轉,只好想看看有沒有什麼方法可以改善,後來作法是手動執行 garbage collection,記憶體使用量就掉下去了 …

cdnjs 的 api / web server 為例,沒做 gc 的話大概要吃 410 MB 的記憶體,一模一樣的程式,有做 gc 的話只要吃 230 MB的記憶體,相差甚大,其中原由大概只能等高手指教或是等很閒的時候才有空追了 …

作法滿簡單的,執行 nodejs 的時候加上 --expose-gc 的參數,並且在你想要執行 garbage collection 的地方加入 global.gc(); 即可。