[華語, cmn-Hant-TW] FreeBSD ports 的 emulators/linux_base-c6 (CentOS 6.x) 已經出現很久了,但是有很長一段時間都是只有 base 沒有相關套件可用,要跑那些有的沒的 linux 軟體還是得靠 linux_base-f10 (Fedora 10),然而 Fedora 10 是一個很久之前就已經 EOL 的版本,裡面的一堆函式庫都太舊了,一些新的玩具像是 Sublime Text 根本就沒辦法跑。 之前就看到有在推要把 FreeBSD 預設的 linux_base 改成 c6 的計畫,以這個應用來講 CentOS 絕對比 Fedora 來得好,畢竟 Fedora 版號跳很快,舊版本 EOL 的也很快,要跟上很辛苦,CentOS 則是對應企業版的 RHEL,以…
跑 php 頁面讓 httpd 當掉
[華語, cmn-Hant-TW] 這問題卡了一段時間,但是因為也沒太緊急所以就有空的時候才來看一下問題在哪。 總之就是有一台 FreeBSD 11-CURRENT 在某次更新一堆套件之後 laravel 的特定操作就開始會讓 httpd 吃 segmentation fault 了。因為有用到不少套件所以一層一層的追下去發現是 finfo_open() 造成的,會用到這個函式只是要找檔案的 mime-type 而已所以也沒做太奇怪的事情,接著用 laravel 直接跑內建的伺服器模式做一樣的操作,發現也會吃 segmentation fault,那差不多就確定是 php 的問題了,自己寫了一個小程式只呼叫這個函式,用 cli 模式跑一樣炸掉,當下立刻把所有名字含 php55 的套件全部更新,因為 php 跑其他東西都沒當,所以想說應該是某個 php 套件爛掉,因為當掉跟圖形操作有關,一度還以為是 gd 造成的。 結果全部用 ports 重編之後… 照當,那問題就怪了,這時候就把另一台更閒的 FreeBSD 11-CURRENT 更新到最新同時跑 php… 居然沒有當?!對照一下兩邊函式庫安裝的目錄才發現有問題那台的目錄裡面有…
Write failed: Cannot allocate memory
[華語, cmn-Hant-TW] 在一台機器要 rsync 東西的時候,遇到這個訊息 Write failed: Cannot allocate memory 發現是傳大檔出問題,首先懷疑 zfs 造成的,但是記憶體還剩很多,而且 rsync 到同一台機器沒問題,丟到別台不管是哪台都會出問題,那大概就不是檔案系統的事了。找看看有沒有跟網路傳大檔有關的討論,結果在這篇裡面描述的情況跟遇到的狀況很類似,這台機器剛好就是有裝 VirtualBox 而且還有 VM 正在跑,接著在這篇裡面有提到解法: 在 /boot/loader.conf 裡面加上 net.graph.maxdata=65535 設好重開機之後,果然問題就解決了。 另外似乎 VirtualBox 用的網卡跟連外的網卡不同張的話就不會遇到這個問題,有人整理了一下放在這裡,有空的話再來試試這種設定。
OpenLDAP 搭配 mdb backend
[華語, cmn-Hant-TW] 在設定 openldap 的時候,通常會用 bdb 這個 backend,不過既然官方都說這個要退休了那當然得改用別的方案,雖然說是建議用 mdb,不過因為偷懶就用 ldif 試看看,一開始用覺得還 OK,結果發現權限上面居然有神奇的狀況,大部份的權限都沒問題,但是 add 跟 delete 似乎只要 auth 過就能執行,完全無視權限設定,查了一堆資料試了半天改了一堆設定都還是能執行,唯一擋得住的方式就是讓人不能登入,啊不能登入就跟不能用是一樣的意思了,所以這條路卡關,就改來試 mdb 看情況如何。 結果還不錯,其實直接跳 mdb 還算蠻無痛的,資料庫檔案也只剩 data.mdb 跟 lock.mdb 兩個,看起來很清爽,至於效能部份因為這台的資料量還沒多到需要擔心的程度,就沒特別去比較了。 mdb 沒遇到 add 跟 delete 權限問題,但是遇到一個奇怪的狀況,在 LDAP Admin 這套軟體下會看到不斷跳針的無窮迴圈項目,而且一按刪除,程式就當掉,不過在 LAM 下倒是沒啥問題,找了一下 LDAP Admin…
Samba 3, LDAP, PDC, member 速記
[華語, cmn-Hant-TW] 剛好有兩到三台 samba 3 分享的需求,所以研究了一下怎麼把這堆機器串到 ldap 上。 看了一下 standalone 的架構不好管理,所以就用 domain controller (pdc) 加 members 的形式,也就是只有 pdc 串到 ldap 上,其他的 member 只跟 pdc 問權限而已,不會直接串 ldap。當然,不管是間接或是直接,整個網域使用者帳號跟機器都會由 ldap 管控。 因為還蠻複雜的,這邊就大概列了一下卡關的地方,跟要注意的點而已 首先要把一台設成 pdc,照這篇跟官網這篇來設定應該沒啥太大問題,雖然說那篇的目的是要弄 windows 7 登入網域就是。ldap 存取權限要設好,有用 SSL 的話,CA 也要設好,這樣 domain 應該就會自動在…
FreeBSD ports 的穩定分支
[華語, cmn-Hant-TW] 上個月 FreeBSD 的 ports 正式有了 stable 的分支,細節可以看這篇公告。簡單的說就是多了 2014Q1, 2014Q2… 這樣的分支,每三個月從 head 長一個出來,然後只針做安全性相關的更新。官方的 pkg 也有了,只要把 /etc/pkg/FreeBSD.conf 裡面的 /latest 改成 /quarterly 就會抓到從最新一季的 ports 做出來的套件,設定上還算方便。 這東西對喜歡用 ports 安裝東西,但是又不想一直踩地雷的人應該會很有幫助,因為 FreeBSD 的 ports 基本上就是 rolling 的形式,一直都只有 head,或者說 trunk,每次有軟體大改版的時候就很容易出些有的沒有的問題,而每個軟體大更新的時間當然不相同,進 ports 的時間更不用講,所以只能勤快的盯 UPDATING 看有沒有什麼大變動得注意的,現在這樣的話只要每一季做一次就好了。 把幾台辦正事的機器切到 2014Q2 試用了一個月覺得還不賴,大致上可以很無腦的用…
OpenSSL 版本差異造成 HTTPS 出問題
[華語, cmn-Hant-TW] 新灌好的 FreeBSD 10 機器上設定好 apache,要用 https 提供 svn 服務,結果在某些機器上吃到這樣的問題 svn: E120171: Error running context: An error occurred during SSL communication 原因不明,有趣的是有問題的那幾台機器用 svn 1.7 + neon 的話似乎是可用的,但是 svn 1.8 + serf 就炸掉了。 再測試一下發現也不是每個軟體都會有問題,curl 活得好好的,w3m (文字模式的網頁瀏覽器) 連線就炸掉了,吃到的錯誤訊息長這樣: SSL error: error:14077458:SSL…
把 Mantis 的資料倒進 Redmine
[華語, cmn-Hant-TW] 想要把 mantis 1.2.x 的資料倒進 redmine 2.4.x 的時候出了點問題,內建的 ./lib/tasks/migrate_from_mantis.rake 怎麼試都失敗,後來發現有人用 perl 寫了一套轉換系統 mantis2redmine 給 mysql 用,只要把資料庫設定一下,然後輸入想要轉換對應,category, workflow, user 等,然後等他跑完就倒進去了。 唯一要注意的是語系問題,如果 utf8 的字轉過去變亂碼,除了兩邊資料庫的設定要對外,在 mantis2redmine 裡面呼叫 DBD-mysql 的地方 mysql_enable_utf8 也要給他設一下,到這裡資料庫應該就算是倒好了。 跑一下 project 列表有出來,但是只要一開 issues 頁面就狂吃 500 錯誤,主要的錯誤訊息是這個: Error viewing some issues:…
找出不是透過 pkg 安裝的檔案
[華語, cmn-Hant-TW] 在 /usr/local 裡面除了 pkg 安裝的檔案外,往往還會夾雜一些有的沒的東西,如果是自己放進去不礙事的還好,那些用 ports 安裝到一半壞掉或是刪除時沒清乾淨的檔案就麻煩了,散落各地不說,有時候甚至會造成編 ports 或是執行不正常,剛好這次把一台老機器從 FreeBSD-8 升到 FreeBSD-10,然後重編套件一直吃奇怪的錯誤訊息,又不想把 /usr/local 砍掉重練,就來研究一下怎麼找出這些 pkg 管不到的檔案,試了一下這樣就可以了: (以 pkgng 為例) # find /usr/local -type f \! -path "/usr/local/etc/*" \! -path "/usr/local/www/*" -exec pkg which {} \; | grep "was…
FreeBSD 10 的 growfs
[華語, cmn-Hant-TW] FreeBSD 10 的 growfs 可以直接把使用中的磁碟區變大,這讓不少事情變得簡單許多 例如要在 VMWare 裡面把一顆虛擬磁碟 (da1) 變大,只要把那顆磁碟調大一點,然後在正常開機下,從 FreeBSD 裡面下這些指令 gpart recover da1 gpart resize -i 1 da1 growfs da1p1gpart recover da1 gpart resize -i 1 da1 growfs da1p1 最後按 yes 就可以把 da1 的第一個分割區 da1p1 變成新的大小一樣大了