Category Archives: IT: 文章、筆記與紙屑

Gitlab 整合 Active Directory 認證

Snip20140111_1

越來越多軟體開發人員使用 Git 作為版本控制器,可以像 Github 一樣開發協作的整合式版本控制平台的確迎合了許多企業的需求,因此有越來越多企業在內部架設 Gitlab 作為企業內的協作平台。企業內的應用整合 Active Directory 尤為重要,在人員離職的時帳號即被註銷,因此有較大的安全性。並且透過 LDAP 的機制,新進人員不用申請帳號即可設定使用 Guest 權限,讓每個企業員工都可以在 Gitlab 上報 Issue 並對 Issue 進行追蹤,加強了內部使用者與開發人員的溝通管道。

我的 Gitlab 版本選擇為 6.4-Stable,若是其他版本可能需要有其他額外或省略部分設定。
系統首選 Ubuntu 12.04 Server,這應該是大多數人的選擇。

Gitlab 的安裝可以參考官方文件:

https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md

另外有一份 Tsung 的中文版本可以參考:

http://blog.longwin.com.tw/2013/11/gitlab-ubuntu-linux-precise-2013/

整個安裝步驟看起來很複雜,其實在 Ubuntu 12.04 下照著說明一步步進行安裝,完全不會碰到什麼難解的特殊情況,我認為 Linux 新手也很容易能夠照說明安裝好一套 Gitlab。我第一次安裝因為網路慢的原因大概花了兩個多小時,後來安裝正式環境的時候大概因為比較熟練,一個多小時就完成安裝了。

針對安裝部分補充說明一下,「第一次啟動網頁要跑比較久」這個問題其實是可以透過 Precompile 解決的,網路上也有人說改 Timeout 值,但是有些比較慢的機器 Timeout 值改很大也沒什麼作用,這還是得從根本用 Precompile 解,直接用下列指令在第一次啟動後做 Precompile:

cd /home/git/gitlab; 
sudo bundle exec rake assets:precompile RAILS_ENV=production

好了,接下來回到正題。
整合 Active Directory 主要是參考網路上的這一篇:

https://raymii.org/s/tutorials/Gitlab_and_Active_Directory_LDAP_Authentication.html

一般來說如果你的 AD 環境不複雜直接照著做就可以成功了,但是我還是碰到了坑,主要是栽在這一段

bind_dn: 'CN=Gitlab LDAP,CN=Users,DC=Domain,DC=tld'

原作者的 AD 環境可能比較簡單,建立的帳號直接在 CN=Users 下就可以找到,我設定的服務帳號卻一直都不成功,提示 “Invalid credentials“,網路上查詢到的都是要 Patch omniauth-ldap
的方法,不過那是在 Gitlab 5.4 的 Workaround 了,現在都過了大半年了以 Gitlab 的開發速度應該早就 Patch 掉了,因此不做考慮。接下來發現一個日本的網頁在說明 Gitlab AD 整合,其作者在 bind_dn 這段沒有用 CN=Users,而是使用了:

OU=DEPT,CN=Users,DC=Domain,DC=tld

這樣的語法,原來在 bind_dn 中需要指定完整的 LDAP 路徑 (Full LDAP path)

於是找到以前寫的程式查詢我所用的服務帳號到底是建在哪裡:

public string UserBelongOU (string s)
{
    Impersonator im = new Impersonator();
    im.Impersonate();
    try
    {
        DirectoryEntry entry = new DirectoryEntry("LDAP://DC=fetag,DC=net", Account, Password);
        DirectorySearcher mySearcher = new DirectorySearcher(entry);
        mySearcher.Filter = "(samAccountName=" + s + ")";
        SearchResultCollection result = mySearcher.FindAll();
        foreach(System.DirectoryServices.SearchResult resent in result)
        {
            string Return = "";
            Return = resEnt.Path;
            Return = "LDAP://" + Return.Substring(Return.IndexOf ("OU="));
            return Return;
        }
    } 
    catch {}
    im.Undo();
    return "";
}

結果是在

OU=NewTech,OU=IT,OU=Site,DC=fetag,DC=net

這麼一串下,然後修改 bind_dn:

bind_dn: 'CN=Gitlab Service,OU=NewTech,OU=IT,OU=Site,DC=fetag,DC=net'

後重新啟動 Gitlab 就可以了。

加碼:如果有「LDAP 認證時使用 Filter」需求請參考底下這一篇:

http://blog.dimaj.net/content/howto-enable-ldap-filters-gitlab

原則上是需要 Patch omniauth-ldap,然後加上 filter 屬性,這樣可以在驗證時不是所有 Domain User 都能登入,而是在某個 Group 下的使用者才能夠登入使用 Gitlab。這一個做法只要是 LDAP 都可以,Active Directory 非必要。

[補充]
Gitlab 的備份與恢復可以參考:
https://github.com/gitlabhq/gitlabhq/blob/master/doc/raketasks/backup_restore.md

Keyword: Active Directory, Gitlab, Invalid credentials

只在星期一做備份

Time Machine

資訊人員都應該瞭解到備份的重要,我們經常在網路論壇上看到各種的災情,每每見到其他人的狀況才想到應該要買個大一點的硬碟並養成備份的好習慣。自從開始使用 Mac 之後使用了它內建的 Time Machine 功能,備份變得更簡單了,不過我用的是外接式的硬碟而不是 Apple 的時間膠囊,因此必須接上外接碟時才能備份無法實時進行備份,其實實時地備份不見得完全是好處,再加上價格與易移動的因素而選擇了使用外接碟方案。

我經常看到同事們在不同的時間進行資料的備份,有時候是在專案緊鑼密鼓進行中的時候,這樣容易會拖慢其他做正事的效率。我建議大家可以嘗試只在星期一做資料備份,每個星期一早晨開啓電腦接上外接硬碟後讓 Time Machine 自動運行,一個星期下來通常需要備份幾十 GB 的資料,然後在備份的同時可以做一些星期一早上通常會做的事,如回復信件、當週專案項目的時間規劃,而不要在電腦上做操硬碟、CPU 的工作。至於只在星期一做備份是因為大部份重要的程式碼通常都已經在版本控制系統上了,有良好習慣的團隊應該都會在一個功能完成的時候都已將程式碼簽入,因此我們進行的備份不用太過於頻繁,大資料的備份時間大概需要一個小時左右,在星期一早上處理文書工作的時間差不多就可以完成備份,時間的搭配剛剛好,而不會浪費處理正事的時間。

這是一個個人時間管理的觀念,因此這邊所指的備份也是針對個人資料,對於伺服器上的資料備份還是要以公司及法律面的政策為準。也許你處理文書工作的時間安排不一樣,你可以試著將備份時間與文書工作時間安排在一起,試試看這樣工作起來是不是更有效率。

不只是備份時間應該要依照需求規劃,許多資訊人員經常在做系統升級、硬碟重整、清除快取類不必要資料等等,其實這些都是造成工作時間碎片化的因素,如果可以好好規劃利用這些時間,就可以將能集中注意力的工作時間節省出來。

PS. 平常沒有備份計劃的朋友可以考慮看看這一篇:Frank 刪除備份檔後的憾事,另外,經常把備份用硬碟與工作機放在一起跟沒有備份是一樣的,整包被偷走的話就知道怎麼哭了。

Priority – 專案的優先級

evaluation-triage-framework-9uyih

有這麼多的專案等著進行,感覺上每一個都很急,用什麼量化的方法 (而不是憑感覺) 可以設定專案的優先級,同時又能讓其他部門的同仁理解 IT 部門優先進行專案的邏輯、避免紛爭。

IT 的專案優先順序應該考慮 IT 的部門策略,而這個部門策略則是承自企業的經營策略,看起來會像這個樣子:

企業經營策略 -> 產品/服務策略 -> 部門策略 -> 專案

可以這樣理解:每一年大老闆跟股東們承諾了今年想要達成的目標,下面一層一層的部門就得再承諾自己的目標,用以跟老板的 KPI 結合,一層一層的,當大家都做到自己的承諾,上一層與上上一層的老板也就達到目標了。也就是說我們每時每刻在工作中進行的專案應該要與公司的 策略 綁在一起,在績效評核的時候才會有皆大歡喜的場面出現。

一般我們會用以下這些指標來衡量專案的優先級:

  • 報酬率 (減少支出、增加營收)
  • 開發時間、開發成本、維護成本、困難度/完成風險
  • 法律、規章、安全
  • 公司策略

並對這些指標設定不同的權重來對手上的每個專案進行評分,然後依照分數高低設定出專案的優先級。因此在專案開始的時候請提出需求的使用單位給出相關的效益 (Benefit) 就是為了計算報酬率。有的專案雖然很急,但是報酬率並不高,這種專案很容易就被其他專案刷下去了。每次有新專案進來,給新專案打分後與正在排隊的專案進行比較,決定要把哪個專案拉前或是往後移動。

將上面的方法跟其他部門同事進行溝通,他們就可以體諒及理解為什麼總有別的專案可以插在他們的專案前面運用部門的資源了。

網路上專案管理的文章很多,你也可以建議這篇應該要整理哪些參考連結:

Basic Portfolio Management or “Doing the right projects.”

Prioritization Matrix


由於要寫一些在專案上的想法,但是會引用到一些專案相關的知識,因此乾脆就把自己的理解寫出來歸檔方便日後引用。

不錯的 Sublime Text 2 教學

一個好的編輯器不容易找,學好了編輯器可以跨 Windows/Mac/Linux 平台就更不簡單了,Sublime Text 2 是跨平台程式設計師不可多得的編輯器,基於 Python 並且可以使用 Python 開發各種不同的編輯器外掛,其各種功能可以在純文字編輯或程式開發的情境下,使用更少的按鍵對文件進行編輯,目前支援超過 44 種語言,由於其目標使用者大多為程式設計師,因此支援語言仍在持續增加中。它也被許多人稱為「新一代的文字編輯器」。

下面的連結我覺得是目前網路上最棒的教學視頻。

http://www.youtube.com/watch?v=TZ-bgcJ6fQo

看完之後會發現使用 Sublime Text 2 如果可以學好 Sublime 的操作並活用的話,簡直像 DOS 時代改 漢書 HE5 的 Macro 那種感覺又回來了,而且因為 GUI OS 具有副檔名連結的關係,更好用了!

不是免費軟體?在 Windows 下大家愛用的 UltraEdit 也不是免費的,Sublime Text 2 並沒有在他的未註冊版本加上過多的擾人機制強迫購買,最多就是顯示個未註冊的訊息,也沒有過期後開啟程式時倒數 xx 秒才能開始使用,可以算是提供給所有使用者免費、無限制、無限期的試用。你基本上可以無視這個未註冊訊息,不過個人建議各位,碰到好的軟體不容易,如果你真的喜歡並且它對你的工作有幫助,應該要用實際的金錢來鼓勵軟體開發者的辛苦,金錢可以用來保障開發者個生活品質,讓他更願意將程式修改得更好,它現在的價格是 USD$70 (以前的 USD$59 算是早鳥價)。

Note: 台灣也有愛用者網友在協助推廣,建議手冊部分可以參考中文的 Sublime Text 手冊

SQL Server Login ID Backup/Restore

因為要作 SQL Server 的 Downgrade, 所以有了這個需求,原先建立的一些帳號都已經不記得了,但是使用這些 Login 帳號的程式還是繼續在使用中,在 Downgrade 之後也必需要保留這些帳號才行。

微軟的 KB 裡面有這麼一篇: http://support.microsoft.com/kb/918992/ 剛好可以用到,不過後來實作的時候發現我的是 SQL 2000 而不是 2005 or 2008 的版本,所以這篇的 Procedure 還要稍微改一下,搭配上這一篇: http://blog.sqlauthority.com/2007/02/15/sql-server-fix-error-15023-user-already-exists-in-current-database/ 就能夠在 SQL 2000 上面使用了,一樣是跑這個 Stored Procedure, 然後會給出建立 Login 的 Script, 不過不會包含 sa 帳號就是了,所以一定要有 sa 的密碼才行,不然就得改使用了 sa 帳號的所有程式了。另外,記得不要先建立其他的帳號,先跑完 Script 建立,否則 SID 可能會一樣,那就會導致建立不成功了。

Backup DB, Deattach DB, Uninstall Enterprise edition, Install Standard edition, Attach DB, Create Login Account 這樣下來也花了不少的時間,所以停機時間不會太短,下次有類似需求要注意評估機器下線的時間。

這一次的教訓是:

  • 安裝最小的適用版本,不要什麼 OS 都是 Enterprise Edition, 什麼 Service 都要最高版本,一些功能用不到的,就直接用標準版就好了,否則要符合 License Audit, 還是有一堆的工作要作。
  • 如果可以用 Linux + mySQL 就不要 Windows 2003 + SQL Server, 因為價格真的差很多的,這一次做了幾台 Downgrade, 大概省下 NTD$ 五百多萬的 License Fee。
  • 不要使用 sa 或 root 帳號作為系統軟體連接資料庫 設定,務必另外開帳號使用。

停電導致 Virtual Disk 故障

因為停電卅分鐘,接著發現 Server 連不上了,重新開機之後發現 Production Server VM 開不起來,Ubuntu 9.10 出現錯誤訊息,沒有辦法修復,只好安裝了 Ubuntu 10.04 Server 版本,然後把舊的 LVM 分區 mount 進來,把設定檔直接對拷,再一個一個的啟動。

DNS 服務已經恢復,綁在 Apache + PHP 的服務也可以使用了,目前還有問題的部份是 Apache + Mono,安裝後還有一些問題待解決,所以 lab.fetag.net 中用 .NET 開發的功能現在暫時無法使用了。

現在還不知道為什麼 UPS 沒有撐過 30 分鐘 (1KV x 2), 停電為什麼造成 Virtual Disk 掛掉 (剛剛有看到 Disk Cache 的設定,不曉得關掉它下次會不會就不掛 Virtual Disk 了),有空再慢慢來修吧,反正現在也沒有什麼重要的東西在上頭了。

如果 lab.fetag.net 有你喜歡使用的服務,請耐心等我修好吧。

[補充]
lab.fetag.net has been fixed. Now you could visit it as normal.

取消 Linode,將服務轉回 Home Server

幾經考慮之後,終於決定取消 Linode 的使用,原因是每個月已經花了 NTD$990 左右的費用在家裡的 12M/2M 的光纖網路費用,還要加上 NTD$750 的行動電話 3G 網路費用 (後來也改用 NTD$299 的 mCool 方案),如果再加上近 NTD$600 Linode 的費用,這樣每個月光花在網路使用上的費用就達到 NTD$2,340 了,依照現在的工作模式 (人不是在公司,就是在家裡,要不然就是在路上) 及網路的使用量,實在不是一個很好的投資。所以最終還是把所有的服務轉回到自家 Home Server,取消了 Linode 的使用,先前的轉移工作實在是白作了一趟工,下次要改網路使用方案的時候要好好的考慮清楚,然後才能夠執行了。

Implementing Reverse Proxy Using Squid

Reverse Proxy 可以用來降低網路伺服器的 Loading, 也可以用來作 Load balance, 另外想到的是,只有一個外部 IP 的朋友,如果在內部架了兩台 Server (如:一台 Windows 跑 IIS, 另一台 Linux 跑 Apache), 也可以利用 Reverse Proxy 來對同一個 IP 跑多種不同的服務器。

下面這篇文章詳細的說明了如何設定,有空再來玩玩看。
http://www.visolve.com/squid/whitepapers/reverseproxy.php

Netmeeting for Windows 7

可以在 Windows 7 上執行的 NetMeeting!!

I knew you are looking for this!

I just try this yesterday. This file is from my co-worker and it works for my Windows 7 Ultimate. Just extract files and run the installation file then patch two DLL file to replace old files stored at the NetMeeting install folder. It really works! (Share desktop function works well as usual)

BTW, If you have dual screen. It may cause all screen blank. Please un-plug the second screen (Extented) before you start the program.

Enjoy~!

Note: No warranty from anyone for this patch program.

[DOWNLOAD]

安裝 Zend Optimizer 到 Ubuntu 9.10

到官方網站下載 ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz

tar zxvf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
cd ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp
mkdir /usr/local/zend
cp ZendOptimizer.so /usr/local/zend

修改 /etc/php5/apache2/php.ini 在最下方加上

[Zend Optimizer]
zend_optimizer.optimization_level=1
zend_extension=”/usr/local/zend/ZendOptimizer.so”

重新啟動 apache2 使之生效

/etc/init.d/apache2 restart

Copyright © 2017. Powered by WordPress & Romangie Theme.