跳到主要內容

發表文章

Communicate with RESTful APIs in Python

It's really cool to use requests to communicate with RESTful API in python! Requests is an elegant and simple HTTP library for Python, built for human beings.   It also support Basic/Digest authentication methods, you can simply pass parameters with it. If you are still using  other low level library such as urllib/urllib2/pycurl, etc... to communicate with RESTful API, you should give it a try! A lightning talk in EuroPython 2012: Communicate with RESTful APIs in Python Ref: Communicating with RESTful APIs in PythonWritten by Balthazar

Mutiple listening squid w/wo authentication

squid 要設定 ncsa_auth 認證其實不難, 有趣的是我們也可以利用 myport 來產生一個 acl squid 的 acl 跟 iptalbes 的 rule 很像, first match first apply. 所以我們可以設定從某些 port 來的 request 不需要密碼驗證, 其他的則必須要密碼驗證。另外也可以加入允許連連線的來源網址,只要注意規則的順序就好囉! # vi /etc/squid/squid.conf  http_port = 3128  # listensing port B http_port = 9999  # listensing port B   # Enable ncsa_auth  (htpasswd -c /etc/squid/passwd username ) auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours auth_param basic casesensitive off   # Add filter for ncsa auth acl lab_lan src 172.18.0.0/22 172.18.4.0/22 # multiple CIDR network acl ncsa_users proxy_auth REQUIRED acl no_auth myport 9999 http_access allow no_auth lab_lan http_access allow ncsa_users lab_lan # Deny others ...   http_access deny all

Transform putty ppk key to OpenSSH authorized_keys

在登入EC2的機器時,我們常會將 ssh key pair 轉換成 putty 的 ppk 以方便遠端登入。如果有天需要將這把 ppk 轉換成 OpenSSH 可以使用的 public key 要怎麼辦呢? 使用 puttygen 讀取 ppk,  接著點選 Save public key 將 public key 的內容存成遠端機器上的純文字檔 ssh-keygen -i -f {純文字檔} > OpenSSH_authorized_key cat openssh_authorized_key >> ~/.ssh/authorized_keys 這樣就可以用 ppk 來登入遠端的機器囉!

Tips for bundling EC2 RHEL image with ephemeral storage

如果在 EC2 選了一個 ebs block device 是 6G 的 image, 要怎麼重新 bundle 成自己要的  image 呢? 首先是要下載 ec2-ami-tools, 裝完後, 如果你的系統有被 ruby rvm 搞爛了...導致一執行 ec2-bundle-vol 就出現 require error, 那先暫時把 path 設回系統的預設值吧! export PATH=/usr/bin:$PATH, 這時候下 ec2-bundle-vol -c /mnt/cert-XXXX.pem -k /mnt/pk-XXXX.pem -u {userid} -e /mnt -d /mnt 理論上會因為 /mnt 空間太小或者 loop device 在做轉存 image 的過程中耗光了可用空間,導致 bundle 失敗..其實 EC2 所有的 instance 都有 local 的 ephermal storage, 只是有的 instance 預設不會幫你 mount 起來, 而且 EC2 也不保證放在ephermal storage 上資料的安全性。這時候我們可以去手動把這個空間 mount 來, 做成 bundle image 時的暫存空間。以 RHEL 6.0 來說, ephermal storage 的 device id 可能為 /dev/xvd{X}, 可以先用 fdisk 看一下大小, 然後再用 mkfs /dev/xvd{X} 將其格式化在手動 mount 起來! 假設我將 ephermal storage 掛在 /emp 下,那最後用 ec2-bundle-vol 的指令就會變成 ec2-bundle-vol -c /mnt/cert-XXXX.pem -k /mnt/pk-XXXX.pem -u {userid} -e /mnt,/emp -d /emp 有時候倒霉的話還會遇到說 rsync 版本太舊,建議 upgrade後再重新 bundle 一次....不過應該可以不理它, 因為 bundle 還是會繼續....

Setup Dell Equallogic iSCSI storage for ESX/ESXi Host

Dell Equallogic Multiple Path Extension For ESX 4 setup.pl --install --server={HOST} --bundle=c:\dell-eql-mem-esx4-1.1.0.222691.zip setup.pl --server={HOST} --configure --ips={iSCSI Client IP 1},{iSCSI Client IP 1} --nics={iSCSI Client Nic 1},{iSCSI Client Nic 2} --enableswiscsi --netmask={{iSCSI Client IP Netmask}} --mtu=9000 --enableswiscsi 如果 Client iSCSI vSwitch 已經設定過了, 在安裝 Equallogic MEM 的時候,很可能會出現錯誤說請先移除無效的vmknic。這似乎是 ESX 4/5 的一個 bug, vSwitch在被移除後, vmknic IP會被清空但是卻不會移除乾淨。尤其是當iSCSI device 還連線的話,連進ssh下指令也是無法移除vmknic。 ESX5 我的做法是: 1. 用vSphere Client移除 vSwitch 2. 用SSH登入ESX, 利用esxcli中斷該 vSwitch 的 iSCSI session esxcli iscsi session remove -A {iSCSI software adapter} 3. 移除該 vSiwtch 下,被清空但是未移除的 vmnic esxcli iscsi networkportal remove -A {iSCSI software adapter} -n {vmnicX} ESX 4 的話命令有點不一樣,不過原理都是一樣的。移除 vSwitch和其下的網卡,如果無法移除成功那就是還有 iSCSI session 存在,想辦法把他關掉或者重開機後就可以移除乾淨了。這時候就可以順利安裝 Equallogic 的 Plugin. ESX5 Dell Equallogic Plugin 在ESX5透過 vSphere CLI安裝總是會失敗(ESX 4是正常的),我的做法是: ...