2015年4月7日 星期二

Blog have moved to http://cateyes.logdown.com/

將文章搬到 Logdown 繼續寫囉,因為在 google blogger 上面寫 code 真是太痛苦了。
新網址:http://cateyes.logdown.com/

Install ElasticSearch 1.5.0 on Ubuntu 14.04 LTS

安裝 script:https://gist.github.com/ricardo-rossi/8265589463915837429d

有人已經寫好 script 可以直接裝。
如果要用 Oracle JDK 可以改裡面的設定,預設使用 Ubuntu 提供的 OpenJDK。

執行完後如果沒正確結果。
可以再執行一次 curl http://localhost:9200 看看。

正確結果是最後要出現類似以下:
{
  "status" : 200,
  "name" : "Fearmaster",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.5.0",
    "build_hash" : "544816042d40151d3ce4ba4f95399d7860dc2e92",
    "build_timestamp" : "2015-03-23T14:30:58Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}



測試了一下重開機不會自動啟動,補下一個指令就好了
sudo update-rc.d elasticsearch defaults 95 10
參考:http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-service.html

2015年3月31日 星期二

Rails Hangs When Generating Migration

有時候 Rails 在執行 rails g migration some_migration 會停在那邊。

只要執行下面指令就可以了:
$ spring stop 

2015年3月2日 星期一

Install Ruby 2.2 + Rails 4.2 + Passenger + Nginx On Ubuntu 14.04 LTS In AWS EC2

使用 AWS EC2 環境
AMI:Ubuntu Server 14.04 LTS (HVM), SSD Volume Type - ami-9a562df2

開始建置環境

建立一台新的 Instance 後,連進去開始。
1. 更新一下 package 資訊。
sudo apt-get update



2. 安裝 RVM + Ruby + Rails,參考:RVM 官網
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

\curl -sSL https://get.rvm.io | bash -s stable --rails



3. 讓你可以直接下指令使用 rvm、ruby、rails,執行下面兩行指令
source ~/.rvm/scripts/rvm
echo "source ~/.rvm/scripts/rvm" >> ~/.bashrc

4. 安裝一些 Rails 常用到的程式
sudo apt-get install nodejs
sudo apt-get install mysql-server mysql-common mysql-client libmysqlclient-dev

5.  安裝 Passenger 作為 App Server,參考:Passenger 官網
準備安裝 Passenger 的前置動作

加上官方的 APT Repos
加入 PGP key 
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7

加上 apt 對 https 支援
sudo apt-get install apt-transport-https ca-certificates

建立一個檔案在 /etc/apt/sources.list.d/passenger.list
因為我們使用 Ubuntu 14.04 LTS 版本,所以只要在這檔案裡面加上
# Ubuntu 14.04
deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main

保護好這個檔案
sudo chown root: /etc/apt/sources.list.d/passenger.list
sudo chmod 600 /etc/apt/sources.list.d/passenger.list

完成後更新一下
sudo apt-get update

安裝 Passenger
sudo apt-get install nginx-extras passenger

安裝完後,這個動作會讓我們的 ruby 回去使用到舊版的。執行:
/usr/bin/ruby -v
會看到變成 1.9.3,因此我們要修正回我們要的新版。
sudo rm /usr/bin/ruby
sudo ln -s /home/ubuntu/.rvm/rubies/default/bin/ruby ruby

編輯 Nginx 的設定,啟用 Passenger 相關設定。
位置:/etc/nginx/nginx.conf
將 passenger_root 和 passenger_ruby 拿掉前面 # 號取消註解。
重新啟動 Nginx 去讓剛剛修改的設定生效
sudo service nginx restart
安裝完後,用瀏覽器連上自己機器看看。
如果連不上,請記得檢查一下 EC2 的 Security 有沒有開啟 port 80 和 443。
6. 安裝 Git 和 GitFlow(非必要)
sudo apt-get install git git-flow
7. 開始建立第一個 Rails App 或是 deploy 你的 Project
cd 回到自己 home 目錄,建立一個新專案,執行
rails new my-first-project
cd 到 my-first-project 內的 public 資料夾執行 pwd 看一下路徑後面要用
修改 /etc/nginx/site-available/default
將 listen 80 default_server; 這行加上 # 註解起來
在 /etc/nginx/site-available 下新增一個檔案取為 my-first-project 內容如下:
自行將 YOUR_HOST 和 PATH_TO_YOUR_PROJECT_PUBLIC_DIR  改為你的網址和剛剛 public 資料夾的路徑
server {
  listen 80 default_server;
  server_name YOUR_HOST;
  passenger_enabled on;
  passenger_app_env development;
  root PATH_TO_YOUR_PROJECT_PUBLIC_DIR;
}

2014年9月25日 星期四

Fix bash Vulnerability CVE-2014-6271

測試方式:
env x='() { :;}; echo vulnerable' bash -c 'echo hello'

如果出現以下,代表你是安全的
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello

如果出現以下,代表會被這漏洞攻擊
vulnerable
hello


修正方式:
sudo apt-get update && sudo apt-get install bash


參考:http://askubuntu.com/questions/528101/what-is-the-cve-2014-6271-bash-vulnerability-and-how-do-i-fix-it


但是很不幸的 Ubuntu 沒修正完全。
後續還有 CVE-2014-7169 要修XD


Update:
https://twitter.com/ErrataRob/status/514831122400686080/photo/1
csh、tcsh、ksh、sh、zsh 全部中囉~可喜可賀!

SOP For Create User in Ubuntu

以下範例使用者名稱皆用 testuser

建立使用者和設定密碼
sudo useradd -d /home/testuser -m testuser
sudo passwd testuser

指定使用者 shell 用 bash(如果是的話)
sudo chsh -s /bin/bash testuser

讓使用者可以 sudo(如果需要)
sudo adduser testuser sudo

讓使用者可以透過 public key 登入
sudo mkdir /home/testuser/.ssh
sudo chown testuser:testuser /home/testuser/.ssh
sudo chmod 700 /home/testuser/.ssh

sudo mv testuser-id_rsa.pub /home/testuser/.ssh/authorized_keys
sudo chown testuser:testuser /home/testuser/.ssh/authorized_keys
sudo chmod 600 /home/testuser/.ssh/authorized_keys

2014年9月4日 星期四

Import Data To MySQL Efficiently

使用以下指令產生一百萬筆 user 的假資料

for i in `seq 1 1000000`; do echo "test$i,pass$i,,2014-09-05 03:43:27" >> users.csv; done

使用 mysqlimport 匯入資料
MySQL Host:mysql-demo
Database 名稱:my_database
Table 名稱:users
csv 檔名務必和 Table 名稱一樣。

mysqlimport --fields-terminated-by=, --columns='username,password,pass_details,created_at' --local -h mysql-demo.cxu7skntlvtx.us-east-1.rds.amazonaws.com -u admin -p my_database users.csv

使用這種方式匯入資料比使用一個 Transaction 包一堆 Insert SQL 快上百倍。
但需注意此方式如果匯入錯誤,後果自行承擔!

參考:http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/

2014年8月27日 星期三

AWS EC2 AES-NI Testing

參考:https://forums.aws.amazon.com/thread.jspa?threadID=122148

AES-NI 是用來加速加解密過程的 CPU 功能,在目前的全部 ec2 instance type 都有支援。

不使用高階函式 -evp(同時也不會使用到 AES-NI)
$ openssl speed -elapsed aes-128-cbc

The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128 cbc     112765.34k   122879.02k   125167.36k   126346.92k   126593.71k


強制不使用 AES-NI
$ OPENSSL_ia32cap="~0x200000200000000" openssl speed -elapsed -evp aes-128-cbc

The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128-cbc     277520.21k   305234.35k   311621.46k   314812.76k   315200.85k



使用 AES-NI
$ openssl speed -elapsed -evp aes-128-cbc

The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128-cbc     561544.04k   598301.61k   607955.80k   610393.43k   611164.16k



由以上數據可以很明顯看出

  1. 有用高階函式庫很明顯
  2. 有 AES-NI 的 CPU 在做 AES 加密時速度快 2 倍。


2014年8月8日 星期五

Database GUI Tools

Sequel Pro:http://www.sequelpro.com/
免費,但只能連 MySQL

Navicat:
http://www.navicat.com/
要錢,但不錯用

MySQL Workbench
http://www.mysql.com/products/workbench/

2014年5月23日 星期五

Install Tsung From Source Code On AWS Ubuntu 14.04 LTS (PV) Instance

官方參考:http://tsung.erlang-projects.org/user_manual/installation.html#dependencies

前置準備,安裝需要用到的程式。執行以下命令
  1. apt-get update
  2. apt-get install make
  3. apt-get install erlang-base
  4. apt-get install erlang-ssl
  5. apt-get install erlang-dev
  6. apt-get install erlang-snmp
  7. apt-get install erlang-eunit
  8. apt-get install erlang-xmerl
  9. apt-get install erlang-inets
  10. apt-get install erlang-os-mon
  11. apt-get install gnuplot
  12. apt-get install python-matplotlib
  13. apt-get install libtemplate-perl


下載 Tsung

  1. wget http://tsung.erlang-projects.org/dist/tsung-1.5.1.tar.gz
  2. tar -zxvf tsung-1.5.1.tar.gz


進入剛剛下載的 tsung1.5.1 內,準備開始安裝前的設定,執行
  1. ./configure
看是否一切正常,或有沒有少裝什麼套件,接著開始安裝,執行
  1. make
  2. make install

完成