2012年11月20日 星期二

Linux KVM基本操作


虛擬化技術
半虛擬化
XEN,改Kernel,直接改硬體,作業系統為Unix系列,Critix買走了XEN,台灣的代理商為精誠資訊,最大的使用者為Amazon
完全虛擬化
VirtualboxVMWare Worksation,直接使用VTx硬體功能


CPU內建虛擬化技術
Intel
 VT/EPT
AMD
AMD -V/RVI


Bare Metal裸機架構
作業系統(Unix)裝完,就支援虛擬技術
KVMVMWare ESXi (i即免費版),微軟的Hiper-V技術
使用VMFS檔案系統
台灣代理商:群環、零壹


Nested KVM (VMWorksation內建虛擬技術)
要支援此一系統,需要幾個條件
1. VMWare Worksation 8.0版本以後
2. 主要作業系統64位元
3. VMWorksation裡面啟動的系統也要64位元


VMWorksation 9中建立及操作Nested KVM (VMWorksation 9Ubuntu中啟用Tiny Server Core),使用環境如下
主要作業系統
Windows 2008 R2
VM工具
VMWorksation 9
VM中啟動的系統
Ubuntu 12.04 (LTS)UB641(陳松林老師提供)
VM中啟動的系統再下一層的系統
Tiny Server Core


安裝及測試KVM (12.04 LTS)
sudo apt-get install cpu
sudo kvm-ok
Your CPU supports KVM extensions (VT-x) -->亦即支援Nested VM


探索核心模組
modprobe -l | grep kvm
探索核心模組,列印出來,grep 提取KVM
kernel/arch/x86/kvm/kvm.ko 
kernel/arch/x86/kvm/kvm-intel.ko
kernel/arch/x86/kvm/kvm-amd.ko
作業系統安裝完就有的程式,確定可以再啟用一層虛擬技術


安裝QEMU  (12.04 LTS)
KVM不足,系統安裝完,KVM就裝好了
sudo apt-get install qemu-kvm
qemu專案,負責周邊裝置,Hard diskNetwork
kvm專案,負責cpumemory

 
掛載及啟動KVM
kvm -m 128 -cdrom ISO/tsc32.iso -boot d
啟動ko檔及qemu-m 設定memory128M,光碟的iso檔,d (cdrom開機)
kvm -m 128 -cdrom ISO/tsc32.iso -boot d &
掛載及啟動KVM,在背景執行


顯示開發虛擬應用平台QEMU
uname -r
3.0.21-tinycore (改裝Tiny Server Core)

 
幾個重要網路指令及網路測試
ifconfig -a | grep -A5 eth0
得知eth0網路卡資訊
A5 (After 5,後面五行我都要看)
route -n
查看default gateway,及routing table 
cat /etc/resolv.conf
查看DNS
sudo udhcpc -i eth0
udhcpc為最小的client程式,查看dhcp配置狀況
nslookup www.hinet.net
telnet 202.39.224.7 80


完整建置一個Tiny Server Core系統
建立一個VM檔案
mkdir vmdisk
建立裝載VM檔案的目錄
kvm-img create -f raw vmdisk/tsc32.img 20m
kvm-img負責做硬碟虛擬檔,如VMWorksationvmdk檔,-f raw設定為一次到位(allocate all disk space now),而非隨需擴增。
kvm-img create -f vmdk vmdisk/tsc32.vmdk 20m
產生vmdk虛擬硬碟檔,但它是隨需擴增
fdisk,也包含Hiper-V的硬碟檔
掛載及啟動KVM
kvm -m 128 -cdrom ISO/tsc32.iso -hda vmdisk/tsc32.img -boot d &
tce-load -wi sudo.tcz
安裝sudo套件
分割及格式化虛擬硬碟檔 
sudo fdisk -l /dev/sda
查看磁碟分割的狀況
sudo fdisk /dev/sda
分割虛擬硬碟檔
n –-> 新的分割表
p –-> (primary)
1 –-> 第一個磁區
1 –-> 磁柱
1 –-> 磁頭
w –-> write,分割資料寫入硬碟裡
sudo mkfs.ext4 /dev/sda1
格式化檔案
mkfs → make file system
ext4 → Linux檔案格式
/dev/sda1 → 第一顆硬碟的第一個分割區(Partition)
sudo reboot
格式化檔案後,重新開機
sudo fdisk -l /dev/sda
查看磁碟分割的狀況
ll /mnt/sda1
檢視第一顆硬碟的第一個分割區
修改系統設定 - 固定 IP 設定 
sudo ifconfig eth0 10.0.2.15 netmask 255.255.255.0 up
設定 eth0 網卡 IP 位址
sudo route add default gw 10.0.2.2
設定 Default Gateway
sudo vi /etc/resolv.conf
增加內容如下:
nameserver 168.95.1.1
設定 DNS Server 
tce-load -wi nano.tcz
安裝nano套件以修改resolv.conf
sudo reboot
安裝完畢重新開機


重建兩個Tiny server core系統
kvm-img create -f raw vmdisk/abc.img 20m
kvm-img create -f raw vmdisk/xyz.img 20m
kvm -m 128 -hda vmdisk/abc.img  -cdrom ISO/tsc32.iso -boot d &
kvm -m 128 -hda vmdisk/xyz.img  -cdrom ISO/tsc32.iso -boot d &
兩個以上系統皆要建立以下步驟
sudo fdisk /dev/sda
sudo mkfs.ext4 /dev/sda1
sudo reboot
sudo ifconfig eth0 10.0.2.15 netmask 255.255.255.0 up
sudo route add default gw 10.0.2.2
sudo vi /etc/resolv.conf
增加nameserver 168.95.1.1


更改bootlocal.sh設定檔,在登入之前就會被執行,且使用root權限去執行,以啟動網路設定
ifconfig eth0 10.0.2.15 netmask 255.255.255.0 up
route add default gw 10.0.2.2
echo “nameserver 168.95.1.1” > /etc/resolv.conf
filetool.sh -b
設定修改時,儲存至硬碟的指令(Backing up files to /mnt/sda1//mydata.tgz Done)


建立一個Shell去建立多個VM環境
nano myring01.sh

[ ! -f vmdisk/myring01.img ]&& cp vmdisk/tc33.img vmdisk/myring01.img
kvm -m 64 -hda vmdisk/myring01.img -cdrom ISO/tsc32.iso -boot d &
[ ! -f vmdisk/myring02.img ]&& cp vmdisk/tc33.img vmdisk/myring02.img
kvm -m 64 -hda vmdisk/myring02.img -cdrom ISO/tsc32.iso -boot d &
[ ! -f vmdisk/myring03.img ]&& cp vmdisk/tc33.img vmdisk/myring03.img
kvm -m 64 -hda vmdisk/myring03.img -cdrom ISO/tsc32.iso -boot d &
[ ! -f vmdisk/myring04.img ]&& cp vmdisk/tc33.img vmdisk/myring04.img
kvm -m 64 -hda vmdisk/myring04.img -cdrom ISO/tsc32.iso -boot d &
[ ! -f vmdisk/myring05.img ]&& cp vmdisk/tc33.img vmdisk/myring05.img
kvm -m 64 -hda vmdisk/myring05.img -cdrom ISO/tsc32.iso -boot d &
filetool.sh -b
設定修改時,儲存至硬碟的指令


更改個人環境變數設定檔
cat /etc/passwd | grep tc
........../home/tc:bin/sh
作業系統開啟後,一開始就會去執行.ashrc
紀錄Linux所有帳號資料,Plipe line導至,提取tc帳號顯示出來
sudo nano .ashrc
Tiny core預設去執行的Shell環境為/bin/sh,其設定檔為.ashrc
重裝Shell環境為/bin/bash,其設定檔為.bashrc
filetool.sh -b




2012年11月15日 星期四

Ubuntu基本設定(三)


變數宣告,指定,清空
abc=$PATH
echo $abc
PATH的內容放到abc變數中,並顯示出來
unset abc
清空變數內容
name=name
pstree
指定name的內容為name,並顯示目前的程序位置
bash
bash
pstree
echo $name
跳至下兩層的子程序,並顯示name變數名稱的內容
exit
exit
跳回原來程序(跳兩層)
export name
宣告name為全域變數
bash
bash
echo $name
exit
exit
跳至下兩層的子程序,並呼叫name變數,結束完回到原來的程序



從鍵盤輸入兩個數字,做加總輸出
read -p “” fn
read -p “” sn
total=$(($fn+$sn))
echo $total


2012年11月14日 星期三

Ubuntu基本設定(二)


BASH Shell操作環境
/etc/issue 登入前訊息
\d 本地端時間日期
\l 顯示第幾個tty (終端機介面)
\m 顯示硬體規格等級
\n 顯示主機網路名稱
\o 顯示domain name
\r 作業系統版本
\t 顯示本地端時間
\s 作業系統名稱
\v 作業系統版本
sudo nano /etc/issue
修改登入前的訊息
/etc/motd
登入後訊息(RedHat , Centos支援 , Ubuntu不支援)
sudo nano /etc/motd
更改登入後訊息
sudo nano /update-motd.d/99-hello


#!/bin/bash
echo '' Hello! My Friends ^^''
增加99-hello(檔案宣告一定是99-開頭) , 以更改Ubuntu支援登入後訊息檔。
#!/bin/bash是宣告/bin/bash來執行以下命令
sudo chmod +x /update-motd.d/99-hello
修改99-hello權限成可執行權限
/etc/profile 環境變數設定檔(系統設定檔)
sudo nano /etc/profile
echo $USER
profile最後加上$USER這個環境變數, 不管誰登入都出現登入的使用者
/.profile Ubuntu個人環境設定檔
echo $BASH_VERSION
傳回BASH的版本
[ -n ''BASH_VERSION'']
echo $?

echo $PS1 顯示題示字元
修改.bashrc
alias ping='ping -c 4' 利用修改別名命令,修正ping次數為4, ccount之意
alias ipconfig='/etc/update-motd.d/50-landscape-sysinfo' 創建一個ipconfig命令去執行50-landscape-sysinfo程式 , 顯示一些網路的資訊
export PS1=”\u@\h:” 將$改成:號 , 原先預設為\u@\h:\w\$


reboot, shutdown, halt
開關機指令
sudo /sbin/shutdown -h 10 'I will shutdown after 10 mins' 10分鐘後關機
sudo /sbin/shutdown -r 1 'I will reboot right now'
1分鐘後重新開機
alias bye='sudo /sbin/shutdown -h 3'
.bashrc建立bye指令,執行3分鐘後關機


檔案目錄管理
mkdir, rmdir
建立目錄, 移除目錄
cd, pwd
切換目錄, 顯示目前目錄
mkdir tmp
建立tmp目錄
cd tmp
切換至tmp目錄
mkdir test
建立test目錄
mkdir -p test1/test2
建立多層目錄,test1/test2
rmdir tmp
移除tmp目錄
rmdir test
移除test目錄
rmdir -p test1/test2
移除多層目錄,test1/test2


範例:建立,壓縮,移除目錄及檔案
$HOME/www
|
|----img
|
|----css
|
|----index.html
建立檔案
sudo nano mydir.sh
#!/bin/bash
mkdir -p www/img
mkdir -p www/css
touch www/index.html
建立一個mydir.shbash file
chmod +x mydir.sh
改變mydir.sh權限為可以執行
. mydir.sh
執行mydir.sh
壓縮檔案
sudo apt-get install zip
安裝zip套件
zip www.zip www/*
壓縮目前底下的www目錄及裡面所有的檔案及目錄
查詢www目錄是否存在,如果存在回傳0,如果不存在回傳1
nano ckdir.sh

#!/bin/bash
[ -d www ] && echo “www directory is exit !!” && exit

./ckdir.sh

移除目錄及檔案
rm -r www
移除www目錄及檔案
$HOME/www
|
|----img
|
|----css
|
|----index.html

將原先在www路徑下的index.html檔案copytmp目錄下

$HOME/tmp
|
|----index.html
cp www/index.html tmp/index.html

$HOME/.bashrc

.bashrc此一檔案copytmp目錄下並更名為bashrc2

$HOME/tmp
|----basrc2
cp .bashrc tmp/bashrc2


$/etc/*
將根目錄下etc目錄下的檔案及目錄拷貝至根目錄下的tmp目錄
$/tmp
sudo cp -r /etc /tmp
將整個/etc目錄下的檔案複製至/tmp目錄下
ll /tmp/etc
查看/etc的所有檔案都copy/tmp路徑下
$/etc/*
將根目錄下etc目錄下的檔案及目錄,拷貝至根目錄下的tmp目錄
$HOME
|----tmp
sudo cp -r /etc tmp
將整個/etc目錄下的檔案複製至tmp目錄下
ll tmp/etc
查看/etc的所有檔案都copytmp路徑下
sudo apt-get install tree
安裝樹狀目錄檔,直接可以執行tree命令,顯示以下的目錄


群組設定,帳號加入群組
sudo useradd -m -s /bin/bash a01
sudo useradd -m -s /bin/bash a02
sudo useradd -m -s /bin/bash b01
sudo useradd -m -s /bin/bash b02
sudo passwd a01
sudo passwd a02
sudo passwd b01
sudo passwd b02
建立四個帳號,分別加入兩個群組aaa, bbb
sudo groupadd aaa
sudo groupadd bbb
建立兩個群組aaa, bbb
sudo nano /etc/group
a01,a02加入-->aaa群組
內容加入
aaa:x:1006:a01,a02
sudo nano /etc/group
b01,b02加入-->bbb群組
內容加入
bbb:x:1006:b01,b02
sudo groupdel bbb
群組刪除


權限設定
sudo cp .bashrc /home/a01
sudo cp .bashrc /home/a02
sudo cp .bashrc /home/b01
sudo cp .bashrc /home/b02
原先就有.bashrc的檔案,複製相同的檔案,權限會繼承原來來源處
mkdir mya01
chmod 777 mya01
給予所有操作權限
rwx rwx rwx
[4+2+1] [4+2+1] [4+2+1]
= 777



分別由兩個使用者(student:su a02)登入,做檔案的設定及權限的修改
student
a02


touch student.txt
mkdir mya02
chmod 777 mya02
student使用者在其家目錄建立一個student.txt
a02的使用者建立一個mya02目錄,並更改目錄的使用權限為777
sudo cp student.txt /home/a02
ll
a02登入的畫面,所觀察的student.txt檔案權限為root
cp student.txt /homea02/mya02
ll mya02
a02登入的畫面,所觀察的student.txt檔案權限為student



更改擁有者
chown a02:aaa mya02
修改mya02目錄的群組為aaa
su a01
touch xyz.txt
切換至a01使用者(su switch user)a02的家目錄中新增xyz.txt, 無法新增;因為a01沒有權限去修改a02的家目錄及其檔案
cd mya02
touch xyz2.txt
進入mya02目錄,因同屬aaa群組所以可以建立xyz2.txt



SBIT權限練習
$Home/mysbit
Student使用者在其家目錄建立mysbit目錄,設定SBIT權限(1777),允許其他人可讀可寫。
另外完成以下事項 :
1. a01進到mysbit建檔Hello.txt,student刪除
2. a01進到mysbit建檔Hello2.txt,a02刪除
3. a01進到mysbit建檔Hello3.txt,a01刪除
Student
mkdir mysbit
chmod 1777 mysbit
student使用者建立mysbit目錄,並更改權限為SBIT(Sticky Bit),對目錄設定權限
a01
touch /home/student/mysbit/Hello.txt
touch /home/student/mysbit/Hello2.txt
touch /home/student/mysbit/Hello3.txt
a01使用者(檔案擁有者)建立三個檔案
student
rm mysbit/Hello.txt
可以刪除Hello3.txt
a02
rm /home/student/mysbit/Hello2.txt
無法刪除Hello2.txt
a01
rm /home/student/mysbit/Hello3.txt
可以刪除Hello3.txt
結論 : 設定SBIT,只有資料的主人,及資料夾的主人,以及root可以做刪除



切換及使用root身分
sudo passwd root
設定root的密碼
su root
切換至root身分
exit
離開root身分
su Δ
切換至root身分
exit
離開root身分



安裝建置啟動Apache Server
sudo apt-get install apache2
安裝Apache Server
/etc/apache2/apache2.conf
Apache的設定檔
/etc/apache2/Site-enabled/
網頁預設安裝目錄在/var/www
sudo /etc/init.d/apache2 stop
Stop Apache Server
sudo /etc/init.d/apache2 start
Start Apache Server
sudo /etc/init.d/apache2 restart
Restart Apache Server
stat /var/www
觀看網頁預設路徑的存取權限
sudo nano /var/www/index.html
可以修改網頁


2012年11月11日 星期日

Ubuntu基本設定(一)


Linux架構
Desktop 版本以下架構皆有
Server版本只有Kernel + Shell + GNU Tools




Linux 桌面環境設定
gnome安裝
sudo apt-get gnome install
gnome安裝
sudo apt-get gnome-tweak-tool install
安裝配置工具
kde安裝
sudo apt-get install Kubuntu-desktop
kde桌面版安裝
sudo apt-get install language-pack-kde-zh-hans
安裝kde語言套件
sudo apt-get install kde-l10n-zhtw
修正套件支援中文


輸入法
sudo apt-get install fcitx
安裝小企鵝輸入法
sudo-apt install gcin
安裝gcin (Edward Liu開發的新一代中文輸入引擎)


新增使用者帳號tony修改密碼
sudo useradd -m -s /bin/bash tony
新增Tony帳號
sudo passwd
修改密碼

鎖定帳號及解除的鎖定帳號
sudo passwd -l tony
鎖定帳號 (-llock)
sudo passwd -u tony
解除的鎖定帳號 (uunlock)


修改使用者帳號(包含系統帳號)
sudo nano /etc/passwd
使用nano編輯器修改passwd
sudo nano /etc/shadow
使用nano編輯器修改shadow


修改更改電腦名稱
sudo nano /etc/hosts
使用nano編輯器修改hosts
sudo nano /etc/hostname
使用nano編輯器修改hostname


其他設定
top
顯示資源
uptime
顯示上線時間


軟體更新及升級
sudo apt-get update
軟體更新
sudo apt-get grade
軟體升級


server版本語系安裝及設定
sudo locale-gen
顯示已安裝語系
sudo locale-gen en_US
安裝缺少的英文語系
sudo locale-gen en_US.UTF-8
安裝缺少的中文語系
Sudo nano .bashrc
編輯語系設定檔,每個使用者都要設定一次
if [ -z "$SSH_TTY" ]; then
export LANG=en_US.UTF-8
export LANGUAGE=en_US
export LC_ALL=en_US.UTF-8
else
export LC_ALL=en_US.UTF-8
fi
.bashrc檔案內,最後面加上語系設定程式
sudo cat .bashrc
查看已經編輯過的語系檔案


更新套件伺服器
sudo nano /etc/apt/source.list
更新套件伺服器的設定


ubuntu作業系統關機及重開機指令
sudo reboot
作業系統重開機
sudo poweroff
作業系統關機


ssh連線實例測試
sudo apt-get install ssh
先在server端安裝ssh套件
client-1(ubuntu desktop)使用ssh連線連接到server(ubuntu server)
client-2(vm hostwindow)使用putty工具程式連接到server(ubuntu server)


工作行程資訊與管理
ps
顯示瞬間執行續的狀態


pstree 將所有工作行程(執行續)以樹狀目錄顯示出來




指令或名詞解釋
sudo
superuser do
su
switch user ,切換使用者
apt
Debian Linux系統套件管理工具 (advanced packaging tool)
nano
GPL授權的文字編輯器,GNU專案
cat
查看檔案內容
ll
查看目錄
exit
離開此一終端機 (TTY)
.
等同source,去執行的意思
stat
告知目錄或檔案詳細權限內容,包含uid,gid,access



Ubuntu密碼及加密金鑰設定


密碼及加密金鑰設定
安裝加解密套件
sudo apt-get install seahorse -nautilus
UI選項 : 系統工具 -> 偏好設定 -> 密碼及加密金鑰
1. 產生自己的公鑰
2. 匯出及寄給對方自己的公鑰
3. 匯入對方給的公鑰,並做簽署的動作
4. 將要加密的檔案,用右鍵加密,勾選對方給的公鑰,並選擇已簽署訊息自己的金鑰
5. 將檔案寄給對方
6. 對方同樣要先做步驟1~3
7. 對方用自己的金鑰解開自己寄過去的檔案