2013年4月16日 星期二

[OSX] 架設 NFS server @ Mac OS X 10.8 Server

架設 NFS 最方便之處莫過對一般人提供多台主機登入後,仍共用同樣的家目錄,所以,這次 NFS service 著重在家目錄的設定。


首先,先介紹一下 OSX Server 的環境,共有兩顆硬碟分別都是 750GB 的容量,目前切割為系統槽、490GB、750GB 共三份,故規劃把家目錄擺在 750GB 中,並備份到 490GB位置上(備份到另一顆硬碟)。另外一提的,要留意 OSX 預設檔案系統是 case insensitive (不分大小寫),若要給 Linux client 等的還是先格式化為 case sensitive 吧


工作方向:



  1. 處理 /User 移位

  2. 啟動 NFS server 設定

  3. 讓其他主機掛載進來

  4. 處理 uid/gid 不對應問題


將 /User 目錄移動到 750GB 中:


原先家目錄是在第一顆硬碟中,為了以後方便備份,所以嘗試用 rsync 搬移它到另一顆硬碟


$ sudo ln -s /Volumes/750GB /data
$ sudo mkdir /data/SYSTEM
$ sudo rsync -a /Users/ /data/SYSTEM/Users
$ sudo mv /Users /Users-Bak
$ sudo ln -s /data/SYSTEM/Users /Users
$ sudo chown root:admin /Volumes/750GB/SYSTEM/


設定 NFS Server:


$ sudo vim /etc/exports
/Volumes/750GB/SYSTEM -maproot=root:wheel -network 192.168.168.168 -mask 255.255.255.0
/Volumes/490GB -maproot=root:wheel 192.168.168.168


代表存其他 NFS client 存取 /data/SYSTEM/Users 僅限 192.168.168.* 機器位置,而 /Volumes/490GB 僅限 192.168.168.168 這台機器。存檔後,nfsd 也會自動啟動了,可以用以下指令強制啟動、更新等:


$ sudo nfsd disable
$ sudo nfsd enable
$ sudo nfsd udpate
(更新 /etc/exports 後,可以用 $ sudo nfsd update 來更新)


$ showmount -e
Exports list on localhost:
/Volumes/490GB 192.168.168.168
/Volumes/750GB/SYSTEM/Users 192.168.168.168


如果看不到清單,有可能是 /etc/exports 有寫錯,或是 export 的目錄權限有誤,例如 $ sudo chown root:admin /Volumes/750GB/SYSTEM,不然無法正常顯示


在 Linux client 中啟用:


$ sudo apt-get install nfs-common
$ showmount -e NFS_Server_IP
Export list for NFS_Server_IP:
/Volumes/750GB/SYSTEM/Users NFS_Server_IP
$ sudo mkdir -p /mnt/NFSHome


手動掛載:


$ sudo mount -t nfs NFS_Server_IP:/Volumes/750GB/SYSTEM/Users /mnt/NFSHome


自動掛載:


$ sudo vim /etc/fstab
NFS_Server_IP:/Volumes/750GB/SYSTEM/Users /mnt/NFSHome nfs defaults 0 0


處理 uids/gids 不對應問題:


處理這類問題的最佳解是用 NIS 服務,有空在來嘗試 map_static 用法。


2013年4月13日 星期六

[Linux] Nginx、ARM 與 CMake @ Ubuntu 12.04

   +   


Nginx 是這幾年開始火紅的 Web server,而 ARM Device 則有過之而無不及!這兩個合在一起,就可以創作出許多 web app on ARM device 的熱情。最近抽空用 CMake 整了一下安裝流程,當然是偽 CMake 用法 XD 把 CMake 當做 script 的用法 :P 整合過程中,就依樣畫葫順便做了 libssl-cmake 和 libz-cmake,測試環境:



  • 在 Ubuntu 12.04 64Bit 環境,編譯給自身用的服務

  • 在 Ubuntu 12.04 64Bit 環境,透過 cross complier 編譯給 ARM Device (ARM6)

  • 在 Mac OSX 12.08 Server 版,編譯給自身用的服務


如此一來,終於可以接近 "一鍵" 完成 cross compile 給 ARM Device 跑的服務啦 :P


需提一下,由於在 nginx configure 的過程中,會去測試裝置所用的 int size、syserr_no 等資訊,作法就是編譯片段程式,丟到裝置上跑完來得知結果,故在 cross compile 的流程中,導入 ssh/scp 的機制,將編譯好的程式丟到裝置上執行,所以裝置必須支援 ssh/scp 以及 key-pair 的登入方式(可參考 dropbear 或 dropbear-cmake )。


如此一來方可完成 cmake .. && make 等輕鬆愉快的體驗 XD 在此感謝同事 YangAcer 以及 Ali's blog: Cross-compile nginx 1.3.6 的分享 :D 


一般使用:


$ git clone --recursive https://github.com/changyy/nginx-cmake.git
$ cd nginx-cmake
$ mkdir build
$ cd build
$ cmake ..
$ make
$ ./nginx-out/sbin/nginx -p ./nginx-out/


裝置編譯(此例裝置 IP 為 192.168.168.168,並且可用 root@192.168.168.168 遠端登入及 scp 檔案):


$ git clone --recursive https://github.com/changyy/nginx-cmake.git
$ cd nginx-cmake
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_TOOLCHAIN_FILE=/path/toolchain-arm6.cmake
...
CMake Error at CMakeLists.txt:14 (message):
Please use -DREMOTE_DEVICE_SSH_LOGIN='account@remote_device_ip' again (need
sshd & scp service)
...
$ cmake .. -DCMAKE_TOOLCHAIN_FILE=/path/toolchain-arm6.cmake -DREMOTE_DEVICE_SSH_LOGIN='root@192.168.168.168'
$ make
$ scp -r ./nginx-out root@192.168.168.168:/tmp
$ ssh root@192.168.168.168 "/tmp/nginx-out/sbin/nginx -p /tmp/nginx-out/"

註:跑 nginx 還須處理 shared library,可以用 objdump 或 readelf -a sbin/nginx | grep Shared 確認


2013年4月8日 星期一

[Windows] 使用 VNC 遠端登入 Mac OS X Server 10.8 @ Windows 7

螢幕共享


剛收到一台 Mac mini server 版,原先很擔心無法多人登入,試了一下還滿 ok 的 :) 簡單的說,只需打開 VNC 設定即可搞定!若沒開 VNC 反而會一直說使用的加密連線不合。


vnc_osx


最後,透過 VNC client 登入時,無論你的 mac account 是否已登入,一律都會顯示這個登入畫面,我覺得這點挺讚的!一律要再登入一次,才能看到 remote desktop。


補充:



  • 第一位登入者,此時 osx console 端則是該會使用者的畫面,無論該此用者 remote 切掉或如何,在 console 端一樣會顯示目前已登入的畫面,故最後我選擇建一個帳號,用來第一次使用後來鎖住營目,如此一來可以避免 console 端的資安問題

  • 拖拉事件無法使用,也就是說,假設你在開發 iOS app 時,如 Storyboard 操作上會常常需要按著 ctrl 後,拖拉到其他 view controller 的行為,會因為拖拉事件無法遠端傳進去而無法使用


2013年4月6日 星期六

房貸試算

principal+ interest


每次跟別人聊天時,都會需要列一張表來勸退這個話題 XD 所以,就乾脆寫一下 script 粗算一下吧 :P





















總貸款額度
(萬)
償還年限
(年)
年利率
(%)
每年償還本金
(萬)
每年償還利息
(萬)
每月還款總額
(元)

註:灰色是可輸入的,輸入完按 tab 或把滑鼠點擊其他空白處則會重新計算





2013年4月4日 星期四

Dropbear SSH - dropbear 與 cmake @ Ubuntu 12.04 64Bit

Dropbear SSH 是一套很常見的嵌入式 SSHD、SSH、SCP 替代方案


然而,最近使用 dropbear 時卻被一開始的編譯變數給影響到:


#define _PATH_SSH_PROGRAM "/usr/bin/dbclient"


所以就把它弄成可以在 compiler time 去定義一下,不然這個資訊會影響到 scp 的操作行為,最後就手動建個偽 cmake 用法 :P


$ git clone https://github.com/changyy/dropbear-cmake.git
$ cd dropbear-cmake
$ mkdir build
$ cd build
$ cmake .. -D_PATH_SSH_PROGRAM=/tmp/your/dbclient
$ make
$ ./bin/scp
Use ssh_program: /tmp/your/dbclient
usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
...