2013年7月31日 星期三

[Linux] 建立Soft Link

建立soft lint
$ ln -s [實際檔案的檔名] [連結的檔名]

[Linux] 架設Gerrit + LDAP auth

建立放置Gerrit的帳戶
1). sudo useradd -m -s /bin/bash gerrit
2). sudo passwd gerrit

安裝MySQL
1). 下載
sudo apt-get install mysql-server libapache2-mod-php5 libapache2-mod-auth-mysql php5-mysql
設定新建帳戶mysql密碼
※ MySQL-server: MySQL Server
※ libapache2-mod-php5: 把 Apache2 跟 PHP5 連接起來用的 Module
※ libapache2-mod-auth-mysql: MySQL for Apache HTTP Server
※ php5-mysql: MySQL for Apache HTTP Server
2). 建立初始值
 a). 以root登入
  mysql –u root -p
 b). 建立gerrit這個使用者帳號,且密碼為0000
  CREATE USER 'gerrit'@'localhost' IDENTIFIED BY '0000';
 c). 建立reviewdb這個資料庫
  CREATE DATABASE reviewdb;
 d). 設定資料庫的編碼方式為latin1
  ALTER DATABASE reviewdb charset=latin1;
 e). 將 reviewdb 資料庫權限,開給 gerrit@localhost
  GRANT ALL ON reviewdb.* TO 'gerrit'@'localhost';
 f). 載用新設好的權限
  FLUSH PRIVILEGES;

安裝Apache
1). 下載
sudo apt-get install apache2
2). 重開
sudo service apache2 restart

安裝PHP
1). 下載
sudo apt-get install php5
2). 測試方法: 在/var/www/中將以下程式碼新增成一隻檔案(.php),測試apache2能不能解讀php
<?php phpinfo(); ?>

安裝PHPmyAdmin (可有UI方式管理MySQL,網址是http://ip.ip.ip.ip/phpmyadmin)
1). 下載
sudo apt-get install phpmyadmin
2). 因為phpmyadmin並不是放在apache2預設目錄,需將phpmyadmin inclue到apache2,將以下程式碼加在apache2.config檔之後
sudo vi /etc/apache2/apache2.conf
Include /etc/phpmyadmin/apache.conf
3). 重開apache2
sudo service apache2 restart

安裝postfix mail system (與下面Exim4擇一,此在設定比較單純)
1). 下載
sudo apt-get install postfix

安裝Exim4 mail system (輕量級mail system)
1). 下載
sudo apt-get install exim4
2). 依照公司rule修改/etc/exim4/update-exim4.conf.conf
dc_eximconfig_configtype='smarthost'
dc_relay_domains='example.com'
dc_relay_nets='ip.ip.ip.ip'
dc_smarthost='example.com'

安裝Gerrit
1). 到官網下載,放在使用者gerrit家目錄
2). 切換到使用者gerrit
sudo su - gerrit
3). 安裝
java -jar gerrit-full-2.5.war init -d review_site
4). review_site/etc/gerrit.conf範本參考,修改完後須重新安裝,並打上LDAP AD帳號密碼及MySQL密碼
[gerrit]
  basePath = git
  canonicalWebUrl = http://ip.ip.ip.ip:8080/
[database]
  type = MYSQL
  hostname = localhost
  database = reviewdb
  username = gerrit
[auth]
  type = LDAP
  emailFormat = {0}@example.com
[ldap]
  server = ldap://ip.ip.ip.ip
  username = 公司網域\\公司AD帳號
  accountBase = OU=xxx,OU=xxx,DC=example,DC=com
  accountPattern = (&(objectClass=person)(sAMAccountName=${username}))
  accountFullName = displayName
  accountEmailAddress = ${mail.toLowerCase}
  accountMemberField = memberOf
  referral = follow
  groupBase = OU=xxx,OU=xxx,DC=example,DC=com
  groupPattern = (&(objectClass=group)(cn=${groupname}))
[sendemail]
  smtpServer = localhost
[container]
  user = gerrit_test
  javaHome = /usr/lib/jvm/java-6-sun-1.6.0.26/jre
[sshd]
  listenAddress = *:29418
[httpd]
  listenUrl = http://*:8080/
[cache]
  directory = cache

2013年7月29日 星期一

[JAVA] Thread中run()跟start()的差別

一個簡單的Thread宣告
Thread t1 = new Thread(new Runnable() {
 @Override
 public void run() {
  for (int i = 0; i <= 3; i++) {
   System.out.println("T1: " + i + ", Thread name: "
     + Thread.currentThread().getName());
  }
 }
});

Thread t2 = new Thread(new Runnable() {
 @Override
 public void run() {
  for (int j = 0; j <= 3; j++) {
   System.out.println("T2: " + j + ", Thread name: "
       + Thread.currentThread().getName());
  }
 }
});


要執行這個Thread有幾種方法
本文來比較run()跟start()的差異

//=============================================

1. run()
是由執行中的執行緒負責呼叫,也就是main
用這種方式呼叫,並沒有達到Thread的意義

假設使用run呼叫Thread
t1.run();
t2.run();
出來的結果
T1: 0, Thread name: main
T1: 1, Thread name: main
T1: 2, Thread name: main
T1: 3, Thread name: main
T2: 0, Thread name: main
T2: 1, Thread name: main
T2: 2, Thread name: main
T2: 3, Thread name: main


2. start()
由new Thread所建立的Thread負責執行

假設使用start()呼叫Thread
t1.start();
t2.start();
出來的結果,每條Thread會依據CPU分配的時間而有不同的執行順序
T1: 0, Thread name: Thread-0
T1: 1, Thread name: Thread-0
T2: 0, Thread name: Thread-1
T1: 2, Thread name: Thread-0
T2: 1, Thread name: Thread-1
T2: 2, Thread name: Thread-1
T1: 3, Thread name: Thread-0
T2: 3, Thread name: Thread-1

[Linux] 透過scp上傳下載檔案

若要上傳檔案到另外一台電腦
可透過scp的方式簡單的上傳過去

1. 上傳
$ scp [file_name] [account]@[ip]:[path]
EX: scp test.txt testcount@1.2.3.4:~
~為家目錄
將test.txt上傳到ip:1.2.3.4的家目錄中

2. 下載
$ scp [account]@[ip]:[path] [local_path]
EX: scp testcount@1.2.3.4:test.txt ~/temp
將ip:1.2.3.4家目錄的test.txt下載到自己電腦家目錄temp資料夾底下

2013年7月26日 星期五

[Linux] Ubuntu開機將kernel版本退版

若是當Ubuntu遇到無法開機進入桌面
可藉由在開機選單,選取較舊的kernel版本
使之正常開機

1. 疑似更新的關係,導致開機後變成這個畫面


2. 開機跑完電腦品牌的logo,按shift進入開機選單


3. 點選第三個



4. 選擇較舊的kernel版本


//===========================================

8/1 update

1. 列出現在使用的kernel
$ sudo uname -ra

2. 列出目前系統有的kernel image
$ sudo dpkg --list |grep linux-image

3. 刪除不要的kernel image
$ sudo apt-get purge linux-image-版號

2013年7月18日 星期四

[Linux][Android] 在Ubuntu12.04建置build code環境

OS: Ubuntu_12.04_64bit

1. 安裝build code環境
 $ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
 $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

2. gcc 4.4.X
由於新版的gcc會影響build code error,須降版成4.4.X
(code不夠嚴謹,跟不上gcc4.6)
 1). 安裝
  $ sudo apt-get install gcc-4.4 g++-4.4 gcc-4.4-multilib g++-4.4-multilib
 2). 設定gcc及g++的參數
  $ sudo update-alternatives --install \
    /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 \
    --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
  $ sudo update-alternatives --install \
    /usr/bin/gcc gcc /usr/bin/gcc-4.4 40 \
    --slave /usr/bin/g++ g++ /usr/bin/g++-4.4
 3). 選擇gcc-4.4
  $ sudo update-alternatives --config gcc

3. JDK
Ubuntu12.04預設是open jdk,需指定成sun jdk
可參考:http://qnworknote.blogspot.tw/2012/09/linux-java.html
由於android makefile只支援到1.6.X,建議用1.6.X版本
 1). 到官網下載6u45
  http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u45-oth-JPR
 2). $ chmod u+x jdk-6u45-linux-x64.bin
  $ sudo ./jdk-6u45-linux-x64.bin
  $ sudo mkdir /usr/lib/jvm
  $ sudo cp -rf jdk1.6.0_45 /usr/lib/jvm/
  $ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.6.0_45/bin/java" 1
  $ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.6.0_45/bin/javac" 1
  $ sudo update-alternatives --install "/usr/lib/mozilla/plugins/libjavaplugin.so" "mozilla-javaplugin.so" "/usr/lib/jvm/jdk1.6.0_45/jre/lib/amd64/libnpjp2.so" 1
 3). 檢查各項目的優先順序是否正確

//====================================================

※額外補充:

1. 新增repo的環境變數
 1). 下載repo (也可以直接從網址下載)
  $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > .
 2). repo設為可執行
  $ chmod a+x repo
 3). 設為環境變數
  $ cp repo /usr/bin

2. 新增adb的環境變數
 1). 下載adt bundle,並取得adb
  從Android Developer下載adb bundle:http://developer.android.com/sdk/index.html
  adb位置:adt-bundle-linux-x86_64-20130219/sdk/platform-tools/adb
 2). 設為環境變數
  $ cd [PATH]/adt-bundle-linux-x86_64-20130219/sdk/platform-tools/
  $ cp adb /usr/bin

[Linux][JAVA] 指定JAVA位址

查看JAVA版本
$ java -version

指定JAVA軟體版本
使用update-alternatives來管理
例如有open jdk及sun jdk兩種版本,使用要使用哪種jdk

1). display,顯示此套件總共存有哪些路徑
sudo update-alternatives --display [name]
EX: sudo update-alternatives --display java

2). install,增加一組此套件
sudo update-alternatives --install [link] [name] [path] [priority]
EX: sudo update-alternatives --install /usr/bin/java java /home/qn_lo/WTS/java/jdk/bin/java 1062

3). remove,移除此套件
sudo update-alternatives --remove [name] [path]
EX: sudo update-alternatives --remove java /home/qn_lo/WTS/java/jdk/bin/java

4). config ,修改套件使用的優先權
sudo update-alternatives --config [name]
EX: sudo update-alternatives --config java




測試JAVA是否正常運作
http://www.java.com/zh_TW/download/testjava.jsp









//======================================

7/18補充
在Ubuntu 12.04建置Android build code環境,java部份

由於android makefile只支援到1.6.X,建議用1.6.X版本

1). 到官網下載6u32
http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u32-downloads-1594644.html

2).
$ chmod u+x jdk-6u32-linux-x64.bin
$ sudo ./jdk-6u32-linux-x64.bin
$ sudo mkdir /usr/lib/jvm
$ sudo cp -rf jdk1.6.0_32 /usr/lib/jvm/
$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.6.0_32/bin/java" 1
$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.6.0_32/bin/javac" 1
$ sudo update-alternatives --install "/usr/lib/mozilla/plugins/libjavaplugin.so" "mozilla-javaplugin.so" "/usr/lib/jvm/jdk1.6.0_32/jre/lib/x64/libnpjp2.so" 1

3). 檢查各項目的優先權是否正確
EX: sudo update-alternatives --config [name]

2013年7月17日 星期三

[Linux] 改變Ubuntu桌面資料夾的路徑

Ubuntu在家目錄底下有預設幾個資料夾
可以將這些路徑換成自己想要的
ex: 桌面從中文『桌面』換成英文『desktop』

--

將ubuntu桌面資料夾等中文路徑改成英文路徑

cd ~
rm Desktop
mv 桌面 Desktop
mv 模板 Template
mv 公共 Public
mv 文件 Document
mv 音樂 Music
mv 圖片 Picture
mv 影片 Video
ln -s Desktop 桌面
ln -s Template 模板
ln -s Public 公共
ln -s Document 文件
ln -s Music 音樂
ln -s Picture 圖片
ln -s Video 影片
gedit ~/.config/user-dirs.dirs
將資料更改如下
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Desktop"
XDG_TEMPLATES_DIR="$HOME/Template"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Document"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Picture"
XDG_VIDEOS_DIR="$HOME/Video"
重新啟動Xwindow

sudo /etc/init.d/gdm restart

--

refs: https://wiki.ubuntu.com/TIPs_of_use_ubuntu