27 tháng 10, 2008

Phân giải màn hình trong Debian Lenny

Sau khi upgrade từ Etch lên Lenny, không nhận ra màn hình 1280x1024. Đã chỉnh như sau:

$ su -
# dpkg-reconfigure xserver-xorg

Như vậy là reset cấu hình /etc/X11/xorg.conf

Tiếp đó dùng xandr để thử các mode. Ví dụ:

$ su -
# hwinfo -vbe
# exit
$ xrandr
$ xrandr --newmode 1280x1024 \
108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync
$ xrandr --addmode VGA 1280x1024
$ xrandr
$ xrandr --output VGA --mode 1280x1024; sleep 10; \
xrandr --output VGA --mode 1024x768

Cần sleep 10 sau đó quay về mode đang chạy (để nếu có lỗi thì vẫn không bị mất màn hình). Sau khi khẳng định được mode mới là OK thì sửa lại /etc/X11/xorg.conf:

Section "Monitor"
  Identifier "Configured Monitor"
  Modeline "1280x1024" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync
  Option "PreferredMode" "1280x1024"
EndSection
Section "Screen"
  Identifier "Default Screen"
  Monitor "Configured Monitor"
  Defaultdepth 24
EndSection

Tham chiếu:

22 tháng 10, 2008

Pháp Luân Công qua hình ảnh

Pháp Luân Đại Pháp (còn gọi là Pháp Luân Công) là môn khí công tu tâm dưỡng tính rất phổ biến hiện nay trên thế giới với hàng trăm triệu học viên.

Tham chiếu:

Email: triplc [at] gmail [dot] com; Yahoo Nick: tri_nt.

20 tháng 10, 2008

Cài đặt XVNKB

Mặc dù bộ gõ scim (chương trình gõ đa ngữ đi kèm theo hầu hết các Linux distro hiện nay) đã có hỗ trợ tiếng Việt trong phần bộ gõ m17n của scim, nhưng cách gõ tiếng Việt của chương trình xvnkb cổ điển vẫn có nhiều chỗ tốt hơn. Nhất là cách bỏ dấu , uỳ đúng theo phong cách tiếng Việt chuẩn hoá, cách xử lý gõ kiểu telex cũng tốt hơn.

Sau đây là cách dịch (compile) và sử dụng xvnkb mà vẫn duy trì scim, tức là không xung đột với scim vốn có cài scim sẵn trong Linux.

Download mã nguồn (source code)

Giải nén và dịch chương trình

tar -jxvf xvnkb-0.2.9a.tar.bz2
cd xvnkb-0.2.9a
./configure --use-extstroke --use-abcstroke --no-spellcheck --no-xft
make core CFLAGS="-DVK_CORE_METHOD=2"

Diễn giải

  • Lệnh ./configure --use-extstroke --use-abcstroke là chọn lối đánh bàn phím theo sở thích của mình; lệnh make core CFLAGS="-DVK_CORE_METHOD=2" là chọn lối gõ kiểu telex (chuyển đổi bàn phím bằng tổ hợp Alt-LeftShift). Hãy đọc file INSTALL và README trong bộ mã nguồn để có thông tin chi tiết.
  • Lệnh make có thể có thông báo lỗi ở file config.h (do không tương thích, file này do ta chạy ./configure mà được tạo ra). Khi đó có thể phải vào đó để xoá/sửa dòng gây lỗi đi.
  • Lệnh make core là chỉ dịch (compile) ra file để link (LD_PRELOAD), chứ không dịch đủ cả bộ xvnkb.

Sử dụng

  • Giả sử muốn chạy xvnkb với gedit, gõ lệnh:
    XMODIFIERS="@im=xvnkb" LANG=en_US.UTF-8 LD_PRELOAD=./xvnkb.so.0.2.9a gedit
  • Để đỡ phải gõ nhiều phím, có thể tạo chương trình shell script với nội dung:
    XMODIFIERS="@im=xvnkb" LANG=en_US.UTF-8 LD_PRELOAD=~/lib/xvnkb.so.0.2.9a exec $@

Fonts

  • Ngoài các fonts xuất xứ của giới mã nguồn mở, thì các fonts xuất xứ từ Microsoft Windows và Apple Mac cũng rất đẹp cho hiển thị tiếng Việt (Arial, Times New Roman, Lucida Grande,…) Có thể copy trực tiếp những fonts này vào thư mục ~/.fonts từ máy Windows hoặc Mac. Ngoài cách copy trực tiếp đó, có thể lấy các fonts đó miễn phí trên Internet như sau.
  • Trong Ubuntu hoặc Debian, bộ fonts miễn phí của Microsoft có thể được cài bằng lệnh:
    sudo apt-get install msttcorefonts
  • Những fonts miễn phí của Mac có thể được lấy từ trên mạng lưới Internet:
    wget http://ubuntu-debs.googlecode.com/files/macfonts.tar.gz
    tar -zxvf macfonts.tar.gz
    sudo mv macfonts /usr/share/fonts/

Tham khảo

4 tháng 10, 2008

Xen trên CentOS 5

Cấu hình

     ,------------------+
     |                  |
     |                  |
     |   CentOS Linux   |
     |                  |
     |                  |
     +------+----+------'
            |    |
            |    |
            |    |
     ,------+----+------+
     |       Cisco      |
     |      Switch      |
     +------------------'

CẤU HÌNH:

  • Máy cái (host computer) chạy Centos 5, cấu hình từ đầu (fresh install), trong đó cài các máy ảo (guest computers).
  • Máy cái (host computer) chạy vlan + bonding nối với switch Cisco qua đường trunk + port_channel.
  • Tạo các bridge trong máy cái ứng với các VLAN
  • Kết nối máy ảo (guest computers) với các bridge đã tạo ra
  • Màn hình điều khiển (console) của máy ảo được truy cập qua đường VNC.
  • Thí nghiệm cụ thể: máy chủ IBM x3650, CentOS 5.1 x86_64, Cisco Switch Catalyst 2960

ĐẶC ĐIỂM:

  • Máy cái cài tối thiểu, không cài đồ hoạ, chỉ có VNC
  • Máy cái dùng CPU Intel-VT, cho phép chạy full-virtualization

Cài CentOS Linux

Cài CentOS Linux với cấu hình hoàn toàn tối thiểu với các phần sau:

  • Virtualization
  • Text editor
  • VNC (nếu cần truy cập màn hình đồ hoạ console của máy ảo qua VNC)

Không cấu hình tự động tường lửa (firewall) vì cái này cần đặt cấu hình về sau, nếu cần. Cấu hình tường lửa tự động khó phù hợp.

Cách tạo bridge của Xen, thích hợp cho trường hợp mạng chưa có bond + vlan

Xen có hai dịch vụ (sevice, daemon) thể hiên trong CentOS là xendxendomains. Khi chạy sẽ tạo ra một số bridge, NAT, v.v nội tại bên trong máy cái.

Cấu hình chính: /etc/xen/xend-config.sxp. Trong đó có định ra: (network-script network-bridge). Đó là gọi đến file network-bridge trong thư mục /etc/xen/scripts. Lệnh etc/xen/scripts/network-bridge start khởi tạo mạng (giả lập bridge) phù hợp theo nhu cầu, còn lệnh /etc/xen/scripts/network-bridge stop thì nó sẽ bỏ bridge xenbr0 đi,… khôi phục lại trạng thái từ trước của hệ thống.

Nếu giả sử, máy cái có thêm vỉ mạng eth1, và ta muốn rằng sẽ có thêm một bridge nữa mang tên xenbr1 với tác dụng tương tự xenbr0 thì có thể chỉnh như sau.

  • Trong /etc/xen/xend-config.sxp sửa dòng (network-script network-bridge) thành (network-script my-network-bridge).
  • Tạo ra file mới /etc/xen/scripts/my-network-bridge: với nội dung như sau:
#!/bin/sh

XEN_SCRIP_DIR=$(dirname $0)

$XEN_SCRIP_DIR/network-bridge "$@" netdev=eth0 bridge=xenbr0 vifnum=0
$XEN_SCRIP_DIR/network-bridge "$@" netdev=eth1 bridge=xenbr1 vifnum=1

Tất nhiên, cần đảm bảo rằng /etc/xen/scripts/my-network-bridge là chương trình loại “chạy được” (executable), ví dụ dùng lệnh: chmod +x /etc/xen/scripts/my-network-bridge. Như vậy ta có được tình huống như sau.

,------------------------+     ,-------------------------+
|   Máy ảo 1 (dùng nat)  |     |  Máy ảo 2 (dùng bridge) |
+-----------+------------'     +------------+------------'
            | eth0                          | eth0
            |                               |
            |                               |
,-----------+------------+                  |
|     Bridge : virbr0    |                  |
+-----------+------------'                  |
            |                               |
            |                               |
            | virbr0                        |
,-----------+------------+                  |
|        Máy cái         |                  |
+-----------+------------'                  |
            | eth0 (cổng ảo)                |
            |                               |
            |                               | vif2.0
,-----------+-------------------------------+------------+
|                      Bridge : xenbr0                   |
+-----------------------------+--------------------------'
                              | peth0 (cổng vật lý)
                              |
                              v
                     mạng lưới bên ngoài

Ngoài script mặc định (default) là network-bridge ra, xen còn có một số script khác có thể dùng cho các trường hợp khác: network-nat, network-route.

Xử lý bond + vlan trên Linux và port-channel + trunk trên Cisco switch

Trước hết làm bond + vlan và port-channel + trunk trước. Nhưng trước khi làm như vậy, ta bỏ hoàn toàn cách tạo bridge của xen. Khi có bond + vlan vào thì script của xen chạy không ổn. Vậy ta bỏ nó bằng cách:

  • Trong /etc/xen/xend-config.sxp sửa dòng (network-script network-bridge) thành (network-script my-network-bridge).
  • Tạo ra file mới /etc/xen/scripts/my-network-bridge: với nội dung như sau:
#!/bin/sh
# this empty script does nothing

Chuẩn VLAN là dùng 802.1q, và chuẩn port-channel là 802.3ad

CISCO SWITCH:

Giả sử nhóm gộp 2 cổng g0/1 và g0/2 vào thành một channel mã hiệu 2. Cấu hình như sau

interface GigabitEthernet0/1
    channel-group 2 mode active
interface GigabitEthernet0/2
    channel-group 2 mode active
interface port-channel2
    switchport mode trunk

Lệnh channel-group 2 mode active là để chọn 802.3ad cho đường port-channel. Hầu hết cả Switch hiện nay đều có chuẩn đường vlan trunk chạy 802.1q ở chế độ mặc định (default), nên cũng không cần lệnh gì thêm cho đường trunk.

CENTOS LINUX:

Linux CentOS đặt cấu hình các cổng trong thư mục /etc/sysconfig/network-scriptsetc/rc.local, ví dụ:

ifconfig mybr2 192.168.0.1 netmask 255.255.255.0 up
ifconfig mybr8 up
route del default; route add default gw 192.168.0.254

Như vậy, ta đã chuẩn bị xong phần network, kiểu như sau:

,-----------------+   ,---------------+   ,---------------+
|   Máy ảo 1      |   |    Máy ảo 2   |   |   Máy ảo 3    |
|  (dùng nat)     |   | (dùng bridge) |   | (dùng bridge) |
+-------+---------'   +-------+-------'   +-------+-------'
        | eth0                | eth0              | eth0
        |                     |                   |
        |                     |                   |
,-------+---------+           |                   |
| Bridge : virbr0 |           |                   |
+-------+---------'           |                   |
        |                     |                   |
        |                     |                   |
        | virbr0              |                   |
,-------+---------+           |                   |
|    Máy cái      |           |                   |
+----+-------+----'           |                   |
eth1 |       | eth0           |                   |
(ảo) |       | (cổng ảo)      |                   |
     |       |                | vif2.0            |
     |  ,----+----------------+----------+        |
     |  |      Bridge : xenbr0           |        |
     |  +-------------+------------------'        |
     |                | peth0 (cổng vật lý)       |
     |                |                           |
     |                v                           |
     |       mạng lưới bên ngoài                  |
     |                                            |
     |                                            | vif3.0
,----+--------------------------------------------+------+
|                     Bridge : xenbr1                    |
+----------------------------+---------------------------'
                             | peth1 (cổng vật lý)
                             |
                             v
                    mạng lưới bên ngoài

Tạo máy ảo và chạy máy ảo đó

Nhìn chung, ở cấu hình tối thiểu khi cài CentOS với Xen, thì OS đã tự động dùng image có tích hơp Xen rồi. Kiểm tra:

# uname -r
2.6.18-53.1.14.el5xen

Và có một số chương trình tiện ích

  • xm: hiển thị các lệnh hay dùng của xm
  • xm list: hiển thị các máy ảo đang chạy
  • xm create WindowsXP: chạy máy ảo mang tên WindowsXP
  • xm destroy WindowsXP: rút cáp nguồn của máy ảo mang tên WindowsXP (cold shutdown)
  • xm shutdown WindowsXP: shutdown máy ảo mang tên WindowsXP (soft shutdown)
  • xm reboot WindowsSP: khởi động lại máy ảo mang tên WindowsSP (soft reboot)
  • virt-install: script đi kèm CentOS dùng để tạo ra file cấu hình máy ảo
  • virt-manager: chương trình đồ hoạ (GTK) đi kèm CentOS để quản lý Xen

Như vậy, để tạo máy ảo, ta có thể dùng virt-install, màn hình text, để tạo máy ảo.

Would you like a fully virtualized guest (yes or no)? This will allow you to run
    unmodified operating systems. yes
What is the name of your virtual machine? WindowsXP
How much RAM should be allocated (in megabytes)? 600
What would you like to use as the disk (path)? /VM/WindowsXP.img
How large would you like the disk (/VM/WindowsXP.img) to be (in gigabytes)? 4
Would you like to enable graphics support? (yes or no) yes
What is the virtual CD image, CD device or install location? /ISO/WindowsXP-SP2.iso
  • fully virtualized: dùng chức năng full-virtualization, cần phải có CPU hỗ trợ chức năng này
  • graphics support: tức là truy cập vào màn hình console của máy ảo được chuyển hướng (redirect) qua đường VNC của máy cái

Chức năng full virtualization đòi hỏi phải có CPU có tính năng này. Kiểm tra bằng lệnh cat /proc/cpuinfo | grep vmx (đối với Intel) hoặc cat /proc/cpuinfo | grep svm (đối với AMD). Nếu có chữ vmx hoặc svm trong danh sách các flag hiện ra bởi cat /proc/cpuinfo thì là được. Một số máy tính đòi hỏi phải vào BIOS setup để enable chức năng này của CPU.

Chương trình virt-install vậy là sẽ tạo file WindowsXP trong thư mục /etc/xen; ngoài ra file /VM/WindowsXP.img cũng được tạo ra để mô phỏng ổ đĩa C, còn có file /ISO/WindowsXP-SP2.iso là đĩa XP2 (hoặc distro khác) dùng để mô phỏng ổ D.

Ngoài cách tạo máy ảo bằng virt-install, thì cũng có thể chạy virt-manager (cần giao diện GUI, gtk) để đạt mục đích ấy.

Một cách khác là ta tự soạn file /etc/xen/WindowsXP. Thông thường, thì ta nhờ virt-install để tạo file này, sau đó soạn lại các thông số bằng cách edit trực tiêp /etc/xen/WindowsXP. Ví dụ như sau:

name = "WindowXP"
uuid = "fb60ddac-f640-8834-b8ca-7e68142e665e"
maxmem = 600
memory = 600
vcpus = 2
builder = "hvm"
kernel = "/usr/lib/xen/boot/hvmloader"
boot = "d"
pae = 1
acpi = 1
apic = 1
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
device_model = "/usr/lib64/xen/bin/qemu-dm"
sdl = 0
vnc = 1
vncunused = 1
dhcp = "off"
disk = [ "file:/VM/WindowsXP.img,hda,w", "file:/ISO/WindowsXP-SP2.iso,hdc:cdrom,r" ]
vif = [ "mac=00:16:3e:39:26:5e,bridge=mybr8,type=ioemu" ]
serial = "pty"
localtime = 1
usb = 1
usbdevice = "tablet"
vncpasswd = "xen"
  • name = "WindowXP": tên của domU máy ảo là “WindowsXP”
  • uuid = "fb60ddac-f640-8834-b8ca-7e68142e665e": UUID của máy ảo, có thể dùng chương trình uuidgen để sinh ra cón số này
  • maxmem = 600, memory = 600: kích thước RAM (MB) cho máy ảo
  • vcpus = 2: số CPU cho máy ảo
  • builder = "hvm", kernel = "/usr/lib/xen/boot/hvmloader": HVM tức là trường hợp full-virtualizaion
  • boot = "d": khởi động từ ổ đĩa D: (trường hợp này là đĩa ảo CDROM). Khi máy ảo đã chạy, có thể bỏ CDROM và khởi động từ ổ C. Dùng virt-manager để “plug in|out” ổ đĩa khi máy ảo đang chạy.
  • disk = [ "file:/VM/WindowsXP.img,hda,w", "file:/ISO/WindowsXP-SP2.iso,hdc:cdrom,r" ]: đĩa hda (đĩa primary IDE kênh 0, tức là ổ C:) là đĩa ảo, chạy trên file /VM/WindowsXP.img. Đĩa hdc (primary IDE 1, tức là ỏ D:) là đĩa ảo từ file ISO của CDROM. Sử dụng file /VM/WindowsXP.img để mô phỏng ổ đĩa thì tiện, nhưng chịu tổn thất khá lớn về tốc độ. Ngoài ra Linux (máy cái) có giới hạn số các thiết bị loopback, do vậy nếu có nhiều máy ảo cùng chạy thì phải tăng số này lên, hoặc không dùng file để mô phỏng ổ đĩa nữa. Nói chung, trong môi trường cần chạy tốt, thì máy cái nên dùng LVM, rồi tạo riêng LV (logical volume) trên mấy cái, và khai báo là máy ảo sẽ dùng volume đó. Khi đó khai báo sẽ kiểu như: disk = [ "phy:/dev/mapper/vg-windowsxp,hda,w" ]. Nếu máy ảo dùng ext3 (hoặc filesystem có khả năng co dãn online như ext3) thì dùng phối hợp giữa LVM ở máy cái và ext3 ở máy ảo rất tiện dụng.
  • vif = [ "mac=00:16:3e:39:26:5e,bridge=mybr8,type=ioemu" ]: vỉ mạng nối vào bridge mybr8. Lưu ý địa chỉ MAC cần nămg trong dải mà Xen được đăng ký với IEEE (OUI, Organization Unit ID).
  • vnc = 1, vncunused = 1: nội dung console của máy ảo được chuyển qua VNC chạy trên máy cái. Vậy để xem nội dung thì cần VNC vào máy cái. vncunused = 1 nghĩa là cổng (port TCP) của VNC này là lấy từ 5900, 5901, 5902… đến chừng cổng nào còn rỗi. Như vậy nếu đây là máy ảo đầu tiên thì có thể chính là cổng 192.168.0.1:5900.
  • localtime = 1: thông thường, Windows hiểu rằng giờ (time) của phần cứng là giờ địa phương (ITC), còn Linux, Unix hiểu rằng giờ phần cứng là giờ quốc tế GMT (UTC). Đó là theo mặc định (default). Để giả lập (virtualization) thì ta nên đặt localtime = 1 nếu máy ảo (guest) là Windows, đặt localtime = 0 với Linux.
  • usb = 1, usbdevice = "tablet": khai báo thiết bị tablet cho máy ảo. Khi dùng VNC để vào cónole, thi nhiều khi chuột của máy bàn (desktop, client) và máy ảo (guest) không đồng bộ. Chọn thêm cái tablet, thì nó sẽ đồng bộ vị trí.

Có thể yêu cầu Xen tự động chạy một số máy ảo domU khi máy cái bật lên. Những cấu hình nào nằm trong thư mục /etc/xen/auto là được xếp vào loại này. Ví dụ, nếu muốn Xen tự động chạy máy ảo WindowsXP khi Xen khởi động, ta có thể làm như sau:

# cd /etc/xen/auto
# ln -s ../WindowsXP .

Ban đầu (default) máy cái chạy VNC server nhưng chỉ “nghe” (listen) ở giao diện lo (127.0.0.1). Để cho phép VNC clients ở máy khác có thể truy cập vào được, thì chỉnh lại (vnc-listen '127.0.0.1') (default, mặc đinh) thành (vnc-listen '0.0.0.0'), trong file cấu hính /etc/xen/xend-config.sxp.