damn small linux in VMware player

0

更新記錄

  1. 2006-0905 因為 SLAX 採用 tgz 方式非常容易改裝新的軟體,延展性比較大,當然代價就是體積大了一點,不過還不超過 150 M,比起其他 500-600 M 的巨大光碟版 Linux 來說,也比較方便,所以將暫時不再使用 Damn Small Linux。
  2. 如需參考 SLAX Popcorn 在 vmplayer 上面運作的資訊,請參閱 SLAX Popcorn 5.1.8 RC in vmplayer

緣起

建立一個容易使用與開啟的 linux 測試環境,所以用 VMware player on Windows 方式測試看看。

damn small ?

也許會同時跑幾個 VM,所以 guest os 必須不會太大,很好傳送或是帶著跑,所以選之前用過的 damn small linux 來跑。

下載 dsl-3.0.1-vmx.zip 來跑 VMware player 。解開與執行後,除非執行 VMware player poweroff,不然整個記憶體會轉存成下列檔案,這個記憶檔 dsl.vmem 大小是可以設定的,不過一旦將狀態保持下來後,大於300MB size 對有些小隨身碟可能撐不住。

2006/06/20  下午 04:53        51,806,208 dsl-3.0.1.iso
2006/09/01  下午 08:57               847 dsl.vmx
2006/09/01  下午 09:00             8,664 nvram
2006/09/01  下午 09:00            14,019 vmware.log
2006/09/01  下午 09:00        18,123,037 dsl.vmss
2006/09/01  下午 09:00       239,075,328 dsl.vmem

一開始使用沒問題,只是預設的 bridged 連線無法上網,連 gateway 也無法 ping 到,只有 ping host os 可以,出不去這台實體機器。

Broswer Appliance is in the know on the player

於是又去 vm 的目錄拉個 dsl-n 下來試,一樣是無法連到 gateway 機器,只到 host 為止。

VMware player 設定網路說明或是範例並不好找,一定是誤解設定,所以直接找 VMware 官方的 Browser Appliance 來試看看並觀摩其中網路設定,結果上網一切正常。原來是必須用 NAT 模式來共用 host os 的網卡,等於當 host os 是分享器。

回改 dsl-3.0.1-vmx 為 nat 模式,但是誰知道 nat 規則 ?這時候必須找到安裝的 vmnetcfg.exe 來看,預設是 192.168.213.2 為 gateway,很高興的改了 192.168.213.5 卻跑不動,只好仿 Broswser Appliance 的 192.168.213.128 才跑起來。

後來又改為 192.168.213.12 也可以,猜測是之前改完沒有重新啟動的關係 ? 另外 dsl 常常會有些桌面程式開不起來,變成要重新開 VM 才回復正常。

Update: 預設不一定是 192.168.213 區,後來換到 NB 去裝,變成 88 區,這時你必須手動改回 213 區,不然別的機器可以連線的 VM 檔,直接移過來會連不上去。

java vm in vm player ?

dsl 可以直接下載 jre_1_5_0,安裝完可以查看版本,放置於 /opt 下。不過如果關掉 vm 整個 jre 都會消失,因為裝在 ramdisk 之中。

Update: 後來下載只剩下 plugin 與 lib 目錄,不見 bin 目錄,應該是版權問題,請看 這裡

BIG jre-1_5_0_08-linux-i586.bin

目前要使用 java 必須到 java.sun.com 下載 jre-1_5_0_08-linux-i586.bin 來裝,注意不要上傳到 dsl os 的根目錄,因為那個目錄只有 3M 可用,要不爆請下到 /tmp 目錄,另外 VM player 預設的 128 M 記憶體會不夠用,因為 dsl os 會分 32M當執行記憶體,其他剩下當 ramdisk。

記憶體設太小會導致安裝有問題發生,因為很多安裝檔在解開時會產生暫存檔,這會讓 ramdisk 爆掉,例如 java 就會裝不進去,所以必須改為 172 M 左右,可以用的 ramdisk 約 128 M,但是裝完並刪掉 bin 檔也只剩約 40M 可用,裝了約 80M 真腫。

root@0[lib]# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/ram0                 2.9M    625.0k      2.3M  21% /
/dev/scd0                49.4M     49.4M         0 100% /cdrom
/dev/cloop              118.1M    118.1M         0 100% /KNOPPIX
/ramdisk                126.6M     86.8M     39.8M  69% /ramdisk

root@0[opt]# /opt/jre1.5.0_08/bin/java -version
java version "1.5.0_08" 
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_08-b03)
Java HotSpot(TM) Client VM (build 1.5.0_08-b03, mixed mode, sharing)

Is your file mine?

如何交換 host-guest 檔案最方便方式是用網路進出,下用 sshd 方式,可以用 sftp/scp 上下東西。必須先設定密碼後啟動 ssh 服務。

sudo su
passwd 
/etc/init.d/ssh start

want to keep it

下載完或是做完設定後,執行 backup 工作,這樣會產出一個 backup.tar.gz,下次開機用指名方式例如 restore=hda1 存回來。不過這是用磁區方式,所以沒有目錄可以選,必須放在某個磁區的根目錄下,這點比較麻煩。

Update: 後來版本可以指定目錄

How do I save my settings?

make a vmdk

每次指定起動備份檔很麻煩的話,可以直接燒到 iso 檔去。參考 mkmydsl 。使用 mkmydsl 需要一個磁區可以 mount,這時候就需要 QEMU on Windows 的幫助,來讀取 vmdk 檔,用來放建立出來的 iso 檔。

C:\Downloads\qemu-0.8.2-windows>qemu-img.exe create -f vmdk dslhd.vmdk 512M
Formating 'dslhd.vmdk', fmt=vmdk, size=524288 kB

這時候這個檔只有 128 K 而已,複製到 dsl-3.0.1-vmx 目錄下,修改 dsl.vmx 檔。

  # hd info
  ide0:0.present = "TRUE" 
  ide0:0.fileName = "dslhd.vmdk" 

啟動後可以檢視是否正確找到,可以發現還沒有格式化來用。

root@0[root]# dmesg | grep hd
    ide0: BM-DMA at 0x1410-0x1417, BIOS settings: hda:DMA, hdb:pio
    ide1: BM-DMA at 0x1418-0x141f, BIOS settings: hdc:DMA, hdd:pio
hda: VMware Virtual IDE Hard Drive, ATA DISK drive
hdc: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive
hda: attached ide-disk driver.
hda: 1048576 sectors (537 MB) w/32KiB Cache, CHS=520/32/63
 hda: unknown partition table
hdc: attached ide-scsi driver.

fdisk /dev/hda 建立一個 ext2 磁區 /dev/hda1,然後 mke2fs /dev/hda1 後就可以 mount /dev/hda1 /mnt/hd 來用。

這時候就可以上傳資料到 /mnt/hd 也不怕停 VM 後又要下載一次。

Update: 後來重新開啟 VM 卻一直開不起來,後來才發現 VM player bios 的啟動順序是 HD 先,然後才找 CD,不知道為何只找 HD 就掛住,只要進 VM player bios 改一下順序就可以用了。

create a dsl iso with java

  1. normal dsl boot
  2. mount /dev/hda1 /mnt/hd
  3. mkdir /mnt/hd/master
  4. mkdir /mnt/hd/iso
  5. chmod +x /mnt/hd/jre_xxx.bin
  6. cd /opt
  7. sh /mnt/hd/jre_xxx.bin
  8. click /opt/jre_xxx add2filetool in emelfm on desktop
  9. cat /home/dsl/.filetool.lst
  10. backup hda1 on control panel
  11. mv /mnt/hd/backup.tar.gz /mnt/hd/master
  12. reboot at dsl 2 toram
  13. mount /dev/hda1 /mnt/hd
  14. mkmydsl
  15. answer /mnt/hd/master
  16. answer /mnt/hd/iso
  17. OK
  18. passwd
  19. /etc/init.d/ssh start
  20. scp /mnt/hd/iso/mydsl.iso file
  21. replace dsl-3.0.1.iso by this iso file.
  22. modify dsl.vmx for this new iso file.
  23. boot this vmx by player and test /opt/java_xxx/bin/java -version

這個方式有點取巧,其實還是直接轉成 xxx.dsl 再放到目錄來做比較理想。

(謎之音:取個複雜的巧)

links

Damn Small Linux

DSL 中文化

Virtual Appliances Directory

Browser Appliance

VMware tips

How to create a new virtual machine with VMware Player

apache mod proxy balancer

0

http level switch ?

apache 之前即有反向代理 reverse proxy 機制,代理所有的內部服務機的內容,主要安裝在內部服務器的前端,既然流量都由這台機器 reverse proxy 經手,所以也可以在經手前動手腳。

手腳一:分攤負載

將超過一台服務器的負載,轉送到預先設定好並排服務器,分擔負載。

手腳二:服務不中斷

如果其中一台內部服務器壞掉,其他服務器設定正確並正常運作,對外的服務並不會中斷。

如何分配

關於如何分配可以參考下面部份設定,目前支援分配邏輯目前只有兩種,根據需求數 lbmethod=byrequests 或是流量分配 lbmethod=bytraffic。

目前並無根據後端服務器狀態分配的模式,這功能在商業機器常見到,也就是反應比較快的服務器就給比較多負載。

一般商業機器有各種協定測試方法,例如 HTTP 會直接發出一個靜態的 GET 需求,看看是否有回應。

ProxyPass /fooservice balancer://cluster
<Proxy balancer://cluster>
  BalancerMember http://app1.inside.com:8080/fooservice
  BalancerMember http://app2.inside.com:8080/fooservice
</Proxy>

links

mod_proxy_balancer

ApacheCon 2006 mod_proxy_balancer

Mongrel, Apache 2.2, and mod_proxy_balancer

apache mod rewrite

0

HTTP response of 302 (MOVED TEMPORARILY)

外轉 external redirection 常常看到 R(redirect) 與 L (last),預設會送出 302,所以這個方式必須懂 302 客戶端。另外既然外轉,也就不需要再繼續 rewrite 規則判讀,所以要加上個 L 表示結束。

這個模式比較像是彈回去,讓客戶端(通常是瀏覽器)再發球一次。也因為如此,HTTP 中的 BODY 流量不經過這台機器,跟 mod_proxy 來比較,比較不需要大機器。

mod_proxy 的 reverse proxy 模式比較像吞下去,然後再私下轉給內部看不到的機器處理,在取得處理結果後,轉給客戶端。

links

mod_rewrite

Linux Layer 7 Filter

0

the L7-Filter is different from the L7-Switch

過濾器不是交換器?

這個 netfilter 延伸模組可以新增 pattern 根據 URL 來貼標籤。但是貼了之後要做 redirect 不是很容易,主要是來不及改的問題,引述自 Linux Layer 7 FAQ :

L7-filter can't possibly identifiy what protocol a connection is using 
until it sees a packet with data in it. 

要拆來看要爬到第四層以上,redirect 牽涉到第三層的問題,到了第四層要改第三層已經遲了,除非是 UDP 比較適用。

For TCP, this is the third packet, far too late to start redirecting anything. 
For UDP, it could work, providing that l7-filter gets enough data in the 
first packet to make a decision. 

參考 Http Pattern 可以看到語法。

links

l7-filter

Jamyy weblog

LVS-HOWTO

打造 Linux 具有 L7-Filter Function?

【教學】Linux Layer 7 Netfilter QOS 實作成功紀錄

Coyote Linux 頻寬管制 (QoS) 設定教學

探討Qos頻寬管理器-解決塞車,搶頻寬,取代IP分享器

Older posts: 1 2 3 4