EC2上的Ubuntu裝ec2-api-tools出現錯誤

因為從2010年11月開始一年,有一台micro主機免費所以開始使用EC2。不過卻發現之前用的alestic提供的Ububtu 10.10的image的EBS空間是切15GB,而免費的quota是10GB所以多出來的5GB變成額外要charge,而我架這個blog也才使用1GB左右的空間而已,所以決定著手調整EBS的size。可是卻發現Ubuntu上沒有預載ec2的api tools,但是嚇了sudo apt-get install ec2-api-tools ec2-ami-tools卻出現下面這種錯誤。

$ sudo apt-get install ec2-ami-tools
Reading package lists… Done
Building dependency tree
Reading state information… Done
Package ec2-ami-tools is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package ‘ec2-ami-tools’ has no installation candidate

經過google後參考這篇mail ,所以下下面的指令…。不過指令有用sed去改/etc/apt/sources.list的檔案,所以執行前最好先備份一下喔。

$ sudo sed -i.dist ‘s,universe$,universe multiverse,’ /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get install ec2-api-tools ec2-ami-tools

結果就成功安裝嚕,可以參考一下嚕。

[memo] Ubuntu 安裝Oracle JDK (12.04 / 12.10)

在Ubuntu以往的版本中可以直接透過apt-get install sun-java-jdk來安裝官方版本的JDK,可是Ubuntu 10.04之後將Sun的JDK移到partner的repositoty中(詳情),也因此無法直接下apt-get install sun-java-jdk來安裝JDK。所以必須要把相關資訊加入apt的repository中才能安裝。

Ubuntu 12.04 & 12.10

這個團隊提供。

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer

 

Ubuntu 11.04 & 11.10 (已失效)

Ubuntu 11.04之後的版本,apt repository的位置與10.x版本不同。

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ferramroberto/java
sudo apt-get update
sudo apt-get install sun-java6-jdk sun-java6-plugin

 

Ubuntu 10.04 & 10.10

sudo apt-get install python-software-properties
sudo add-apt-repository “deb http://archive.canonical.com/ lucid partner”
sudo apt-get update
sudo apt-get install sun-java6-jdk sun-java6-plugin

需要的話可以用下面的指令把原本系統的open JDK換掉

sudo update-java-alternatives -s java-6-sun

sudo add-apt-repository “deb http://archive.canonical.com/ lucid partner”
sudo apt-get update
sudo apt-get install sun-java6-jdk sun-java6-plugin
sudo update-java-alternatives -s java-6-sun

參考網頁:

http://www.ubuntugeek.com/how-install-sun-java-runtime-environment-jre-in-ubuntu-10-04-lucid-lynx.html
http://blog.cheyingwu.tw/index.php/2010/05/02/ubuntu-10-04-switch-to-sun-jdk/
http://tekibrain.blogspot.tw/2011/05/ubuntu-1104-sun-java-6-jdk.html

AP遠端連接MySQL Connection暴增最後造成ERROR 1040 (HY000): Too many connections

PHP連接遠端mysql server最終造成ERROR 1040 (HY000): Too many connections

最近遇到一個很詭異的問題,原本的PHP系統要擴增AP Server並把MySQL移到一台獨立的Server上運作,原本認為這個task幾乎是沒有風險的,沒想到一接上線,大量的Client端的請求不僅無法消化,MySQL這邊的Connection數目竟然會很快地暴增,進而讓MySQL不斷吐Too many connections的錯誤的訊息。

Continue reading “AP遠端連接MySQL Connection暴增最後造成ERROR 1040 (HY000): Too many connections”

利用SSH Tunnel連線至內部網路

以往要連線回公司的內部網路,或是連線到某些限制只有公司IP可以使用的服務的時候通常是透過VPN來完成。但VPN有些麻煩的是它會利用VPN遠端的閘道取代原本的閘道,這樣一來原本閘道的路由就會斷線,其實有點麻煩,例如:我連到公司的VPN,但公司的網路會擋MSN Messenger的連線,所以連VPN的過程中MSN就會斷線了。(註:當然可以透過VPN會指定通過遠端閘道的路由規則)

所以如果在要連線的地方有一台開放SSH連線的Server的話,其實可以透過SSH Tunnel達到類似VPN的效果,透過SSH Tunnel可以連到遠端主機可以連到的任何主機,其實SSH Tunnel的運作簡單說就是透過SSH作為通道然後利用遠端主機作為跳板來連線。不過缺點是每個要連線的位置都需要設定,所以如果需要連10種服務就必須設定相對多次,數量一多設定起來其實也相當麻煩!

Continue reading “利用SSH Tunnel連線至內部網路”

[memo] Ubuntu Linux 10.04透過apt-get安裝JDownloader

JDownloader是一套基於Java的下載軟體,除了可以支持跨平台運作外,最大的特點就是可以自動下載像是Megauploader、Rapidshare、ZShare、訊6、Bandongo(這個好像壞掉很久了)、…等等,免費空間的檔案。在Windows上只要裝好JRE然後下載下zip檔就可以直接打開,

這邊介紹一下如何用Ubuntu Linux直接利用apt-get安裝下載JDownloader,透過apt來下載最大的好處是apt會幫忙handle安裝其他相依套件及更新程式的工作,一般直接利用官方下載執行檔安裝無法達到上述個功能,操作起來也比較麻煩。其實透過apt安裝其實只要下下面的三行指令,就可以把JDownloader的下載放到apt的repository裡面,然後更新apt的內容後就可以直接安裝JDownloader。

sudo add-apt-repository ppa:jd-team/jdownloader
sudo apt-get update
sudo apt-get install jdownloader

還是稍微說明一下上面指令的意義,第一行是把jdownloader加入到apt-get的套件庫(repository)中。另外可能會遇到類似下面這種gpg錯誤

gpg: 正在請求金鑰 6A68F637 自 hkp 伺服器 keyserver.ubuntu.com
gpg: 金鑰伺服器逾時
gpg: 從金鑰伺服器接收失敗: 金鑰伺服器錯誤

這是因為在加入repository的時候會去ubuntu的keyserver取得金鑰來驗證。但是取得金鑰的過程卻發生錯誤。這可能是因為取得金鑰是走 11371 port 而防火牆沒有開啟該port的連線的緣故。如果有遇到無法取得金鑰的問題可以測試看看該port是否可以聯通。

第二行指令是命令apt去更新repository的套件清單,這樣才能讀取到剛剛加入的repository。

第三行是讓apt去安裝jdownloader。

下載安裝完畢後,只要在指令列下jdownloader,程式就會開始運行。

簡單memo一下嚕。

[超易] 兩行指令搞定 Linux SSH登入免密碼

用ssh登入通常需要密碼,有些情況下SSH不想要輸入密碼,(例如:想要寫script進行ssh遠端操作,一來ssh連線輸入密碼的地方又必須是interactive的沒辦法在script裡面寫密碼,二來是密碼用明碼紀錄在script實在是不大安全)。本篇用最快速的方式介紹SSH免登入的設定方式,本次要介紹的方式就是在Client端產生一組金鑰,然後把把公開金鑰複製到Server的信任名單中。

關鍵知識

其實關鍵點只有下面這兩點(注意,這兩點所說的檔案是放在兩台不同的主機喔):

  • 要連接ssh的client端必須產生一組主機使用者的金鑰組。金鑰組可以在~/.ssh中找到,檔名是id_rsa(私鑰)、id_rsa.pub(公鑰)。(ps. rsa是加密演算法的名子,也可能利用其他的演算法對金鑰加密,如dsa等)。如果沒有產生金鑰組則必須產生一組,方法詳見Step1。一般來說,公鑰的檔名會像是這樣:

~/.ssh/id_rsa.pub

  • 把公鑰複製到Server端的信任名單中。一般來說會放在下面檔案中:

~/.ssh/authorized_keys

後面的範例是從金鑰產生到匯入信任清單的示範,如果有需要的話可以參考。

Step 1.  在Client端產生金鑰組

使用下面指令就可以產生金鑰,所有設定都用預設的就可以了,不需要特別設置。特別注意的是”Enter passphrase”的地方請直接壓enter,這樣才能不用輸入密碼。

ssh-keygen -t rsa

金鑰組檔案會預設放在~/.ssh/id_rsa是私鑰(private key)、~/.ssh/id_rsa.pub是公鑰(public key)。金鑰組務必保存好權限不要開太大,否則會造成安全性的問題。

2. 將公鑰的內容放置在Server的信任清單中

只要在client端下下面這個指令,這樣金鑰就會輸入進Server的信任清單中了。實在是很簡單吧。

cat ~/.ssh/id_rsa.pub | ssh server-user@server-host “cat >> ~/.ssh/authorized_keys”

另外特別還是要補充一下,因為金鑰如果可供寫入的話十分危險。所以許多人會將 ~/.ssh裡面的id_rsa.pub id_rsa authorized_keys三個檔案設定成唯獨,所以如果不成功的話,可能是server端的user把authorized_keys設定成唯獨。所以可以用下面這個指令先把authorized_keys檔案的讀寫先打開再下Step2的命令:

ssh server-user@server-host “chmod 600 ~/.ssh/authorized_keys”

設定完畢後記得再把權限改回來

ssh server-user@server-host “chmod 400 ~/.ssh/authorized_keys”

在Linux上移除舊檔案(過期的檔案) – 應用find指令

在管理主機的時候常常會遇到主機的應用裡面肥大又過時的log檔案,動輒單個檔案就上看GB等級的log檔日積月累下來恐怕沒有幾台主機可以吃得消。如果每次手動清理除了費時外主機一多也很難管理。其實最好的方式是在系統的排程(如cron)內寫進自動刪除的指令,我這邊所提供的解法是用find指令列出舊的檔案,然後把這些檔案刪除。

1. 用find指令在Linux上列出舊的檔案

find /var/log/apache2 -mtime +30

上面這個指令的意思是在/var/log/apache2底下,-mtime是限定修改時間(單位是24小時),後面接著的數字的表示法如下:

  1. +n:表示比n單位以上的檔案 (例如:+30,代表30天之前)
  2. n:表示比n單位之內的檔案 (例如:-30,代表30天之內)
  3. n:不給給正負號代表正好n單位的檔案。

此外還有time跟min也都是代表修改時間,但是後面接的數字的單位變成分鐘。此外其他相關的指令如下:

  1. -mtime、-mmin:檔案內容(data)最後的修改(modify)時間
  2. -atime、-amin:檔案最後被存取(access)的時間
  3. -ctime、-cmin:檔案狀態(status)最後被修改的時間(change)。 (註:檔案狀態是指:修改擁有者或群組(即調用chown、chgrp)、修改檔案存取權限(即調用chmod)

2. find資料後執行刪除指令

find到檔案後可以用-exec指令來進行相應的處理,下面這個指令示範的是直接下rm指令刪除

find /var/log/apache2 -mtime +30 -exec rm -f {} ;

-exec是表示找到檔案後要執行的指令,現在要執行移除檔案的指令rm,但rm指令會與使用者確認是不是要刪除檔案,因為每個檔案都會問所以挺麻煩的所以加入-f (force) 參數讓rm強制移除檔案。然後 {} 則代表指令接檔案名稱的地方,find會將找到檔案的檔名與路徑帶入到{} 這邊。最後加入; 代表指令結束,不可以省略。

希望這樣介紹可以讓大家更了解find這個指令。

Ubuntu Linux 網卡設定範例 Sample

Ubuntu Linux在命令列下改網卡的IP的方式:

#修改時需要root權限
sudo vim /etc/network/interfaces

DHCP的設定

auto eth0
iface eth0 inet dhcp

手動設定static IP的方式

auto eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.255
gateway 192.168.1.254

釋放與清除 Linux記憶體中的Cache Memory

參考網站
http://www.ubuntu-unleashed.com/2008/04/free-up-cache-memory-in-linux.html
http://www.linuxinsight.com/proc_sys_vm_drop_caches.html
http://blog.linux.org.tw/~jserv/archives/002039.html
http://phorum.study-area.org/index.php?topic=39976.0;wap2

在Linux Kernel 2.6.16後對於Linux的VM(Virtual Memory)進行了調整,因此會在top等指令發現雖然process所使用的記憶體不多,但是透過free來觀察卻發現只剩下一點點的剩餘記憶體。

但是關閉一些程式卻發現total的free memory並沒有被釋放,造成系統剩餘記憶體總是不夠的感覺,而全部processes佔用的記憶體好像也沒有實際上看到的那麼多,這其實是cache占用了memory中的空間。而且但是根據小州老師(kenduest,是我的啟蒙恩師呢~泣~)表示,雖然記憶體剩餘空間看起來沒有被釋放,但是process實際需要使用時kernel仍會自動從memory釋放cache給process使用,所以使用者不必擔心。

↓ 使用top指令看到的剩餘記憶體,與free指令看到的容量是差不多的
linux_top

↓ 在執行一些需要大量cache的程式後會發現剩下的記憶體只剩下一點,而實際上處理程序卻沒有用掉那麼多記憶體
linux_top_cache

↓ 而如果是用htop指令來觀察系統狀況的話會發現memory的bar雖然很長,但是實際上卻只吃掉1GB的記憶體,其實bar的黃色部分是cache佔用的,處理程序要使用時kenel還是會自動將cache釋放給處理程序使用。
linux_htop_cache

要強制手動釋放或清除Linux中的Cache Memory可以使用下面的指令

echo 3 > /proc/sys/vm/drop_caches

3 是指釋放pagecache、dentries與inodes,也就是釋放所有的cache,其他也可以下:

#釋放pagecache
echo 1 > /proc/sys/vm/drop_caches

#釋放dentries與inodes
echo 2 > /proc/sys/vm/drop_caches

↓ 下過指令後,就可以在htop中就可以觀察到黃色部分的cache不見了
linux_htop

打完收工,感謝收看嚕~

2010/05/23 部落格搬家~

因為快要搬家了~所以不能再把部落格擺在家裡~弄了好久終於弄好~

放在SUSE總是有問題~結果擺在Ubuntu就稍微弄一下就好了~實在是覺得很奇怪捏~

順便發一下測試文~哈哈

IMG_0311.jpg

http://www.youtube.com/watch?v=Z4DIyn7EdKI