Saturday, February 19, 2011

Xuất dữ liệu từ Foxpro sang Excel và chuyển mã Unicode

Bài viết sau đây chúng tôi xin chia sẻ với bạn đọc các bước xuất dữ liệu từ Foxpro sang Excel và chuyển mã Unicode mời bạn đọc tham khảo
1. Copy các record dữ liệu từ file *.dbf sang 1 worksheet Excel. File *.dbf là 1 bảng (table) dữ liệu, worksheet Excel cũng là 1 bảng dữ liệu. Do đó việc chuyển thông tin từ file *.dbf sang worksheet Excel là hoạt động copy dữ liệu từ table này sang table khác. Bạn có thể lập trình dùng các đối tượng ADO để thực hiện hoạt động này. Cách đơn giản nhất là dùng trực tiếp Excel như sau: chạy Excel, chọn menu File.Open để mở file *.dbf và hiển thị lên 1 worksheet Excel. Sau đó, chọn menu File.Save As để lưu lại theo định dạng *.xls.

2. Chuyển mã các chuỗi văn bản trong bảng dữ liệu từ bảng mã này sang bảng mã khác (cụ thể là từ VNI 1 byte sang Unicode). Bạn có thể dùng các ứng dụng chuyển mã tiếng Việt sẵn có trên thị trường để chuyển mã tiếng Việt trực tiếp trong worksheet Excel.

Lưu ý, do bảng mã tiếng Việt VNI-DOS (và một số bảng mã tiếng Việt cũ khác) có dùng một số mã ký tự điều khiển làm ký tự tiếng Việt nên một số ứng dụng bị xử lý sai. Do đó để giải quyết tổng quát và triệt để vấn đề chuyển mã tiếng Việt, chúng tôi có viết 1 đối tượng COM cung cấp các hàm chức năng để chuyển mã tiếng Việt từ bất kỳ bảng mã nào sang một bảng mã khác. Bạn có thể liên hệ với tòa soạn để copy đối tượng này (file bktrans.dll) về cài vào máy và sử dụng. Qui trình cài đặt đối tượng COM vào máy như sau:

- Copy file bktrans.dll vào thư mục thích hợp (thí dụ c:MyCOM).

- Tạo icon shortcut trên màn hình desktop của trình đăng ký components bằng cách ấn phải chuột trên màn hình desktop, chọn option New.Shortcut, duyệt và chọn file c:windowssystem32regsvr32.exe để tạo icon shortcut cho nó.

- Chạy tiện ích duyệt hệ thống file, tìm và hiển thị nội dung thư mục c:MyCOM, thay đổi kích thước/dời vị trí cửa sổ hiển thị thư mục sao cho thấy được icon shortcut của trình đăng ký component, chọn file bktrans.dll, drag nó vào icon shortcut của trình đăng ký để đăng ký nó vào Windows.

- Sau khi đã đăng ký thành công, bạn có thể dùng bất kỳ môi trường lập trình nào (VB, VC++,...) để lập trình ứng dụng và dùng đối tượng Bktrans vừa đăng ký y như dùng các đối tượng COM khác.

Sau đây chúng tôi xin trình bày qui trình điển hình để xây dựng 1 ứng dụng bằng VB 6.0 đọc bảng dữ liệu từ file *.dbf, chuyển mã tiếng Việt từ mã VNI-DOS sang mã Unicode cho bất kỳ field chuỗi nào rồi ghi kết quả lên 1 worksheet Excel:

1. Chạy VB 6.0, tạo Project mới thuộc loại "Standard EXE" (loại Project mặc định có 1 Form giao diện rỗng ban đầu).

2. Chọn menu Project.References để hiển thị cửa sổ References. Duyệt tìm và chọn mục BkTrans 1.0 Type Library để "add" thành phần COM phục vụ chuyển mã tiếng Việt vào Project. Tương tự, duyệt tìm và chọn mục Microsoft ActiveX Data Objects 2.x Library để "add" thành phần COM phục vụ truy xuất database vào Project.

3. Chọn menu Project.Components để hiển thị cửa sổ Components. Duyệt tìm và chọn mục Microsoft Common Dialog Control 6.0 để "add" điều khiển phục vụ duyệt hệ thống file vào Project.

4. Thiết kế Form ứng dụng theo hình sau, gồm có 5 label, 3 textbox, 2 combobox, 3 button và 1 CommonDialog:

Đặt tên cho 3 textbox là txtDBFFile, txtExcelFile, txtWorksheet, tên cho 3 button là btnDBFFile, btnExcelFile, btnStart, tên cho 2 combobox là cbSourceCode, cbDestCode, tên cho CommonDialog là FileDialog.

5. Ấn kép chuột vào button btnDBFFile để tạo thủ tục xử lý sự kiện Click chuột trên nó, tương tự tạo thủ tục xử lý Click chuột cho 2 button còn lại và cho 2 Combobox rồi viết code VB 6.0 sau đây:

Option Explicit
'khai báo các biến cần dùng
Private srcid As Integer
Private dstid As Integer
Private VietLibCOM As New BKTRANSLib.BKTRANSLib
'thủ tục Click button chọn file DBF
Private Sub btnDBFFile_Click()
FileDialog.ShowOpen
txtDBFFile.Text = FileDialog.FileName
End Sub
'thủ tục Click button chọn file Excel
Private Sub btnExcelFile_Click()
FileDialog.ShowOpen
txtExcelFile.Text = FileDialog.FileName
End Sub
'thủ tục Click button bắt đầu chuyển mã & chuyển định dạng
Private Sub btnStart_Click()
'khai báo các biến cần dùng
Dim Connection1 As ADODB.Connection
Dim RecordSet1 As ADODB.Recordset
Dim Connection2 As ADODB.Connection
Dim RecordSet2 As ADODB.Recordset
Dim Command2 As ADODB.Command
Dim path As String, TableName As String
Dim strSQL As String, strbuf As String
Dim sfldbuf As String, dfldbuf As String
Dim i As Integer, j As Integer
Dim fStart As Integer, kq As Long
Dim fld As Variant
'xác định đường dẫn và file DBF
i = 1
Do
j = InStr(i, txtDBFFile.Text, "", vbBinaryCompare)
If (j <> 0) Then
i = j + 1
End If
Loop While j <> 0
'xác định đường dẫn
path = Mid(txtDBFFile.Text, 1, i - 1)
'xác định tên file DBF
TableName = Mid(txtDBFFile.Text, i)
'Tạo connection tới database nguồn
Set Connection1 = New ADODB.Connection
Connection1.Open "Provider=MSDASQL;DRIVER=Microsoft FoxPro VFP Driver (*.dbf);SourceType=DBF;SourceDB=" & path & ";"
'Tạo recordset chứa các record của table nguồn
Set RecordSet1 = New ADODB.Recordset
RecordSet1.Open TableName, Connection1, adOpenStatic, adLockReadOnly, adCmdTable
'Tạo connection tới database đích
Set Connection2 = New ADODB.Connection
Connection2.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & txtExcelFile.Text & ";Extended Properties=Excel 8.0;"
'Tạo command làm việc với database đích
Set Command2 = New ADODB.Command
Command2.ActiveConnection = Connection2
'xây dựng lệnh SQL tạo Table đích
strSQL = "CREATE TABLE " & txtWorksheet.Text & " ("
'duyệt tìm từng field của table nguồn
fStart = 1
For Each fld In RecordSet1.Fields
'tìm tên và kiểu của field
Select Case fld.Type
Case 2
strbuf = "Integer"
Case 3
strbuf = "Long"
Case 5
strbuf = "Currency"
Case 6
strbuf = "Double"
Case 11
strbuf = "Logical"
Case 202
strbuf = "Text"
Case 203
strbuf = "Text"
Case 7
strbuf = "Date"
Case 135
strbuf = "Date"
Case 129
strbuf = "Text"
Case 131
strbuf = "Integer"
Case 133
strbuf = "Date"
Case Else
MsgBox "Type với mã " & fld.Type & " chưa được xử lý!!!"
End Select
If fStart Then
strSQL = strSQL & fld.Name & " " & strbuf
fStart = 0
Else
strSQL = strSQL & ", " & fld.Name & " " & strbuf
End If
Next fld
strSQL = strSQL & ")"
'Xóa table trên database đích nếu có rồi
'Command2.CommandText = "DROP TABLE " & txtWorksheet.Text
'Command2.Execute
'Tạo mới table trên database đích
Command2.CommandText = strSQL
Command2.Execute
'Tạo recordset chứa các record của table đích
Set RecordSet2 = New ADODB.Recordset
RecordSet2.Open txtWorksheet.Text, Connection2, adOpenKeyset, adLockOptimistic, adCmdTable
'duyệt chuyển mã và copy từng record
While Not RecordSet1.EOF
'tạo mới record
RecordSet2.AddNew
For i = 0 To RecordSet1.Fields.Count - 1
'nếu field i là chuỗi thì chuyển mã
If (RecordSet1.Fields(i).Type = 129) Or (RecordSet1.Fields(i).Type = 202) Or (RecordSet1.Fields(i).Type = 203) Then
On Error GoTo AssignIt
sfldbuf = RecordSet1.Fields(i).Value
If Len(sfldbuf) <> 0 Then
kq = VietLibCOM.TransStr(srcid, dstid, sfldbuf, dfldbuf)
RecordSet2.Fields(i).Value = dfldbuf
Else: GoTo AssignIt
End If
Else
'nếu không thì chỉ copy dữ liệu
AssignIt:
RecordSet2.Fields(i).Value = RecordSet1.Fields(i).Value
End If
Next i
'lưu lại record lên table đích
RecordSet2.Update
'di chuyển đến record kế tiếp
RecordSet1.MoveNext
Wend
'đóng các đối tượng sử dụng lại
RecordSet1.Close
Connection1.Close
Connection2.Close
End Sub
'thủ tục Click chọn mã tiếng Việt đích
Private Sub cbDestCode_Click()
dstid = cbDestCode.ListIndex
End Sub
'thủ tục Click chọn mã tiếng Việt gốc
Private Sub cbSourceCode_Click()
srcid = cbSourceCode.ListIndex
End Sub
'thủ tục khởi tạo ban đầu cho ứng dụng
Private Sub Form_Load()
Dim i As Integer
Dim s As String
Dim ret As Integer
Dim cnt As Integer
'xóa trắng nội dung các đối tượng hiển thị
txtDBFFile.Text = ""
txtExcelFile.Text = ""
txtWorksheet.Text = ""
cbSourceCode.Clear
cbDestCode.Clear
'khởi động đối tượng chuyển mã
ret = VietLibCOM.Init()
'tìm số bảng mã được phép xử lý
cnt = VietLibCOM.GetCodeCount()
'hiển thị chúng vào 2 combox để user chọn lựa
For i = 0 To cnt - 1
VietLibCOM.GetCodeName i, s
cbSourceCode.AddItem s
cbDestCode.AddItem s
Next i
End Sub

6. Chọn menu Run.Start để chạy thử ứng dụng, chọn file DBF gốc, chọn file Excel chứa kết quả, chọn mã tiếng Việt gốc, chọn mã tiếng Việt đích, nhập tên worksheet chứa kết quả, chọn button "Bắt đầu copy và chuyển mã file DBF". Sau đó chạy Excel và mở xem thử nội dung file Excel kết quả.

Lưu ý chương trình trên có thể truy xuất bảng dữ liệu của bất kỳ database server nào (FoxPro, Access, Excel, MySQL, SQL, Oracle,...). Bạn chỉ cần hiệu chỉnh chuỗi ConnectionString miêu tả database cần truy xuất cho phù hợp với định dạng database cần truy xuất.

Bạn có thể liên hệ với tòa soạn để copy Project VB 6.0 của ứng dụng chuyển mã (có tên là VBTransDataTable) và file bktrans.dll chứa đối tượng COM phục vụ chuyển mã tiếng Việt.

Theo thanglong-aptech.com

Chọn máy chủ và phần mềm dùng cho ảo hóa

Ảo hóa giúp việc quản trị đơn giản cũng như giảm chi phí. Bằng cách dùng một máy chủ vật lý để chạy nhiều máy chủ ảo hóa, bạn có thể giảm nhiều chi phí hoạt động cũng như chi phí đầu tư.

servers Chọn máy chủ và phần mềm dùng cho ảo hóa

Hiện nay, gần như không thể mua máy chủ mà không phải là loại đa nhân nhưng nhiều doanh nghiệp nhỏ (dưới 100 nhân viên) lại yêu cầu máy chủ không cần quá mạnh như vậy. Tuy nhiên, nếu tuân theo yêu cầu trên thì khả năng là doanh nghiệp nhỏ sẽ trang bị máy chủ vật lý vừa đắt tiền, ít hiệu quả vừa tiêu tốn nhiều năng lượng, tỏa nhiều nhiệt. Đó là lý do vì sao nên mua máy chủ đa nhân - có 4, 6 hay thậm chí 12 nhân trên một bộ xử lý - để lưu trữ máy chủ ảo hóa, phù hợp cho mọi quy mô hoạt động của doanh nghiệp.

Chọn máy chủ lưu trữ

Quyết định sự thành công máy chủ ảo hóa trong môi trường có quy mô nhỏ hơn bắt đầu bằng máy chủ lưu trữ vật lý (host). Mặc dù nó sẽ chịu trách nhiệm cho việc lưu trữ hàng tá máy chủ ảo, nhưng lại yêu cầu tài nguyên trên bộ xử lý (CPU) ít hơn bạn nghĩ.
Tùy theo phần mềm ảo hóa (chẳng hạn hypervisor), bạn sẽ có thể chạy máy chủ ảo hóa trên CPU 4 hoặc 6 nhân. Lý do là hầu hết máy chủ ảo hóa được vận hành gần như ở trạng thái duy trì (idle) trong phần lớn thời gian. Khi máy chủ ảo hóa bắt đầu chạy, tài nguyên của chúng có khuynh hướng chia ra cho CPU, RAM, đĩa cứng và truy xuất mạng vào/ra, trong đó chỉ một số máy chủ ảo yêu cầu tài nguyên CPU đáng kể. Bằng cách tận dụng ưu điểm này, bạn có thể phối hợp chặt chẽ nhiều máy chủ vật lý trên cùng một máy chủ lưu trữ duy nhất.
Tuy nhiên, đối với các máy chủ cơ sở dữ liệu, tải dữ liệu nhiều không thích hợp cài đặt trên máy chủ ảo hóa. Tất cả tùy thuộc vào tài nguyên phần cứng trên máy chủ lưu trữ, tính năng phần mềm ảo hóa, và cũng tùy thuộc vào những quy định của máy chủ ảo hóa. Việc thiết lập và kiểm tra các yêu cầu này trước khi thực hiện là điều không quá khó.
Chọn phần cứng, một nguyên tắc cần nhớ là chọn CPU đa nhân và có tốc độ xung nhịp lớn dành cho máy chủ lưu trữ; nếu bạn chọn giữa CPU 4 nhân tốc độ 2,93GHz và CPU 6 hoặc 12 nhân tốc độ 2,4GHz, bạn nên chọn CPU 6 hoặc 12 nhân. Bởi vì khả năng chia tải máy chủ ảo trên CPU đa nhân nhanh hơn, hiệu suất hoạt động đồng bộ hơn trên tất cả máy chủ ảo.

RAM và đĩa cứng

Máy chủ lưu trữ ảo hóa có thể luôn dùng nhiều bộ nhớ hệ thống (RAM), vì vậy hãy trang bị càng nhiều RAM càng tốt, và lựa chọn loại RAM nhanh nhất có thể. Mặt khác, việc phân bổ RAM cũng bị khống chế khắt khe hơn nhiều so với CPU. Càng nhiều RAM, bạn càng có thể có nhiều máy chủ ảo hóa.
Trong môi trường nhỏ hơn, bạn có thể không cần mạng lưu trữ hay thiết bị lưu trữ qua mạng để lưu ảnh máy chủ ảo hóa, vì máy chủ lưu trữ sẽ chịu trách nhiệm cho công việc này. Trong trường hợp đó, càng nhiều đĩa cứng càng tốt. Yêu cầu chung, ổ đĩa SATA chạy RAID 5 hay RAID 6 thì đủ đáp ứng, mặc dù ổ đĩa cứng SAS (Serial Attached SCSI) cung cấp hiệu suất hoạt động hiệu quả hơn.

Phần mềm ảo hóa

Bạn có nhiều lựa chọn phần mềm miễn phí. VMware Server miễn phí chạy trên Windows hay Linux. Phần mềm ảo hóa cần hệ điều hành để cung cấp các yêu cầu chính cho hoạt động và chúng dễ cài đặt và sử dụng. Nếu bạn muốn miễn phí hoàn toàn, hãy cài đặt Linux trên máy chủ và chạy bản VMware Server trên Linux. Nếu không, hãy cài đặt bản Windows Server 2003 hay 2008 và chạy bản VMware Server trên Windows.
VMware có bản miễn phí là VMware ESXi. Phiên bản này được xây dựng trên cơ sở của bản VMware trả phí, ổn định, nhưng VMware ESXi có một số vấn đề tương thích phần cứng, kiểm tra tương thích phần cứng tại find.pcworld.com/70448.
Hyper-V của Microsoft có lẽ tốt cho hệ thống mạng chạy Windows. Về mặt kỹ thuật, Hyper-V không miễn phí, vì nó yêu cầu mua Windows Server 2008 R2, tuy nhiên Hyper-V có giao diện đơn giản và tích hợp tốt vào hệ điều hành. Nếu máy chủ ảo hóa chạy trên máy chủ lưu trữ Windows Server 2008, bạn có thể nghĩ đến việc mua bản quyền. Mua Windows Server 2008 R2 cho phép chạy 4 máy chủ Windows Server 2008 ảo, chỉ với 1 bản quyền.
Bạn cũng có thể chọn lựa tùy chọn khác, chẳng hạn như XenServer của Citrix. Phiên bản miễn phí này có tính năng có thể không bằng bản miễn phí của VMware, chẳng hạn quản lý nhiều máy chủ. XenServer không theo trào lưu như các phần mềm khác, nhưng nó có thể tải về và cài đặt miễn phí, và không cần dựa vào hệ điều hành hay bản quyền hệ điều hành nào.

Card mạng

Trong nhiều trường hợp, máy chủ vật lý chỉ dùng 1 hay 2 card mạng để hỗ trợ toàn bộ môi trường ảo hóa, nhưng nếu bộ chuyển mạch mạng (switch) cho phép bạn gộp đường kết nối để tăng băng thông cho máy chủ ảo thì rất tốt. Việc gộp 2 hay nhiều card mạng tốc độ gigabit, giúp bạn tạo một card mạng ảo lớn hơn, hỗ trợ nhiều băng thông hơn cho người dùng và cho các máy chủ vật lý khác trên mạng. Nhiều bộ chuyển mạch tầm trung hỗ trợ tính năng này.
Nếu bộ chuyển mạch mạng thiếu tính năng gộp đường kết nối, bạn có thể dành một card mạng cho một máy chủ có tải nhiều nhất. Card mạng gigabit giờ cũng khá rẻ, vì vậy hãy trang bị ít nhất 4 card mạng gigabit cho máy chủ vật lý.

Nguồn điện

Bạn thường thấy một số máy chủ chỉ có một nguồn cung cấp điện duy nhất, nhưng nếu bạn chạy nhiều máy chủ ảo hóa trên một máy chủ lưu trữ, bạn nên đầu tư thêm bộ nguồn chạy chế độ dự phòng. Tất cả máy chủ ảo hóa của bạn đều phụ thuộc hoàn toàn vào nguồn điện cung cấp của máy chủ vật lý. Việc trang bị nguồn điện dự phòng khá đáng giá nếu bạn dư giả.

Theo PCWorld VN

Nguồn : Chọn máy chủ và phần mềm dùng cho ảo hóa

Adobe vá 42 lỗ hổng nghiêm trọng trong Reader, Flash

Hôm 8/2/2011, Adobe vá 29 lỗ hổng bảo mật trong trình xem PDF Reader và 13 lỗi trong plug-in trình duyệt web Flash.

Đây là lần đầu tiên Adobe vá Reader X (bản nâng cấp có sử dụng công nghệ chống khai thác "sandbox" trong phiên bản Reader X cho Windows), được hãng phát hành hồi tháng 11/2010.
Gần như tất cả lỗi Reader bị đánh giá là "nghiêm trọng", có nghĩa là chúng có thể bị những kẻ tấn công khai thác để "gieo" malware lên hệ thống chưa được vá. 2/29 lỗi có thể dẫn đến tấn công "kịch bản liên trang" (XSS).

Lần cập nhật này đưa Reader lên các phiên bản 8.2.6, 9.4.2, 10.0.1 (cho Windows và Mac OS X). Người dùng Linux phải đợi đến ngày 28/2/2011 (khi Adobe tung ra các bản sửa lỗi cho phiên bản Reader hoạt động trên hệ điều hành này).

Công ty cũng cập nhật Flash lên phiên bản 10.2.152.26 để vá 13 lỗ hổng khác, tất cả đều được gán nhãn "nghiêm trọng" bởi chúng có thể bị khai thác để thực thi mã tấn công. Adobe cho biết, 8/13 lỗ hổng là lỗi làm sai lạc bộ nhớ, số còn lại là những lỗi tải thư viện, tràn số nguyên hoặc lỗi phân tích font.

Adobe còn cung cấp các bản cập nhật bảo mật cho ColdFusion và Shockwave. ColdFusion là phần mềm máy chủ ứng dụng web cấp doanh nghiệp, và Shockwave là trình chơi phổ biến cho các nội dung web động.

Theo pcworld

Nguồn :Adobe vá 42 lỗ hổng nghiêm trọng trong Reader, Flash

Hướng dẫn cài đặt Rsyslog 5.7.x trên nền tảng CentOS 5.x

Theo thông tin từ phía hãng, Rsyslog có khả năng cải thiện khả năng hỗ trợ syslogd, có thể được sử dụng như 1 phương án thay thế hoặc dự phòng.

Bên cạnh đó, những tính năng nâng cao khá phù hợp với các tầng lớp doanh nghiệp, khả năng bảo mật mã hóa cũng khá đơn giản và dễ thiết lập, dù cho đối tượng người sử dụng có ít kinh nghiệm. Cụ thể, chúng ta sẽ cùng nhau kết hợp và cài đặt tất cả các tính năng của Rsyslog 5.7.2 trên nền tảng CentOS 5.5 server.
Để bắt đầu, chúng ta cần cài đặt những gói hỗ trợ sau:

yum install -y pcre pcre-devel mysql-server mysql-devel gnutls gnutls-devel gnutls-utils net-snmp net-snmp-devel net-snmp-libs net-snmp-perl net-snmp-utils libnet libnet-devel

Tiếp theo là gói librelp (Reliable Event Logging Protocol Library) để sử dụng các thư viện dành cho giao thức RELP - có nhiệm vụ cung cấp khả năng ghi lại các sự kiện xảy ra trong hệ thống mạng và đảm bảo rằng không bỏ sót bất kỳ tin nhắn cũng như email nào, cho dù có vấn đề xảy ra với quá trình kết nối hoặc các đầu peer không ổn định.

cd /tmp
wget http://download.rsyslog.com/librelp/librelp-1.0.0.tar.gz
tar -xvf librelp-1.0.0.tar.gz
cd librelp-1.0.0
./configure --prefix=/usr
make
make install
cd /tmp
wget http://sourceforge.net/projects/libestr/files/libestr-0.1.0.tar.gz/download
tar -xvf libestr-0.1.0.tar.gz
cd libestr-0.1.0
./configure --prefix=/usr
make
make install
cd /tmp
wget http://www.libee.org/files/download/libee-0.1.0.tar.gz
tar -xvf libee-0.1.0.tar.gz
cd libee-0.1.0
./configure --prefix=/usr
make
make install
Tại thời điểm bài viết này, chúng tôi sử dụng rsyslog 5.7.2:
cd /tmp
wget http://www.rsyslog.com/files/download/rsyslog/rsyslog-5.7.2.tar.gz
tar -xvf rsyslog-5.7.2.tar.gz
cd rsyslog-5.7.2
Để tìm hiểu thông tin về những tùy chọn có sẵn trong Rsyslog, các bạn có thể sử dụng lệnh
./configure -help.
Câu lệnh sau sẽ kích hoạt hầu hết các tính năng rsyslog như Compression, Multithreading, MySql, SNMP, Mail, RELP... :
 
./configure --enable-regexp --enable-zlib --enable-pthreads --enable-klog --enable-inet --enable-unlimited-select --enable-debug --enable-rtinst --enable-memcheck --enable-diagtools --enable-mysql --enable-snmp --enable-gnutls --enable-rsyslogrt --enable-rsyslogd --enable-extended-tests --enable-mail --enable-imptcp --enable-omruleset --enable-valgrind --enable-imdiag --enable-relp --enable-testbench --enable-imfile --enable-omstdout --enable-omdbalerting --enable-omuxsock --enable-imtemplate --enable-omtemplate --enable-pmlastmsg --enable-omudpspoof --enable-omprog --enable-impstats
make
make install
Cài đặt và khởi tạo cơ sở dữ liệu MySQL:
mysql -u root -p < plugins/ommysql/createDB.sql
mysql -u root -p mysql
 
GRANT ALL ON Syslog.* TO rsyslog@localhost IDENTIFIED BY 'your-mysql-password';
flush privileges;
 
Tiếp theo, chúng ta sẽ cấu hình mã init:
vi /etc/init.d/rsyslog
#!/bin/bash
#
# rsyslog Starts rsyslogd/rklogd.
#
#
# chkconfig: - 12 88
# description: Syslog is the facility by which many daemons use to log
# messages to various system log files. It is a good idea to always
# run rsyslog.
### BEGIN INIT INFO
# Provides: $syslog
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Stop: 0 1 2 3 4 5 6
# Short-Description: Enhanced system logging and kernel message trapping daemons
# Description: Rsyslog is an enhanced multi-threaded syslogd supporting,
# among others, MySQL, syslog/tcp, RFC 3195, permitted
# sender lists, filtering on any message part, and fine
# grain output format control.
### END INIT INFO
# Source function library.
. /etc/init.d/functions
RETVAL=0
start() {
[ -x /usr/local/sbin/rsyslogd ] || exit 5
#[ -x /usr/local/sbin/rklogd ] || exit 5
# Do not start rsyslog when sysklogd is running
if [ -e /var/run/syslogd.pid ] ; then
echo $"Shut down sysklogd before you run rsyslog";
exit 1;
fi
# Source config
if [ -f /etc/sysconfig/rsyslog ] ; then
. /etc/sysconfig/rsyslog
else
#SYSLOGD_OPTIONS="-c3"
SYSLOGD_OPTIONS="-c5"
#KLOGD_OPTIONS="-2"
fi
if [ -z "$SYSLOG_UMASK" ] ; then
SYSLOG_UMASK=077;
fi
umask $SYSLOG_UMASK
echo -n $"Starting system logger: "
daemon /usr/local/sbin/rsyslogd $SYSLOGD_OPTIONS
RETVAL=$?
echo
#echo -n $"Starting kernel logger: "
#daemon rklogd $KLOGD_OPTIONS
#echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/rsyslog
return $RETVAL
}
stop() {
#echo -n $"Shutting down kernel logger: "
#killproc rklogd
#echo
echo -n $"Shutting down system logger: "
killproc rsyslogd
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/rsyslog
return $RETVAL
}
reload() {
RETVAL=1
syslog=`cat /var/run/rsyslogd.pid 2>/dev/null`
echo -n "Reloading system logger..."
if [ -n "${syslog}" ] && [ -e /proc/"${syslog}" ]; then
kill -HUP "$syslog";
RETVAL=$?
fi
if [ $RETVAL -ne 0 ]; then
failure
else
success
fi
echo
RETVAL=1
#echo -n "Reloading kernel logger..."
#klog=`cat /var/run/rklogd.pid 2>/dev/null`
#if [ -n "${klog}" ] && [ -e /proc/"${klog}" ]; then
#kill -USR2 "$klog";
# RETVAL=$?
#fi
#if [ $RETVAL -ne 0 ]; then
#failure
#else
#success
#fi
#echo
return $RETVAL
}
rhstatus() {
status rsyslogd
#status rklogd
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
reload|force-reload)
reload
;;
status)
rhstatus
;;
condrestart)
[ -f /var/lock/subsys/rsyslog ] && restart || :
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|force-reload|condrestart}"
exit 2
esac
exit $?
Hãy lưu ý đến giá trị SYSLOGD_OPTIONS="-c5″ đã được thiết lập. Sau đây, chúng ta sẽ thiết lập Syslog và Rsyslog:
service syslog stop
chkconfig syslog off
chmod 755 /etc/init.d/rsyslog
chkconfig --add rsyslog
chkconfig rsyslog on
 
Các đoạn mã init có thể download tại đây (http://honeynet.ir/software/rsyslog/). Một số mẫu tham khảo khác các bạn có thể tìm và tham khảo thêm tại trang chủ (http://www.rsyslog.com/):
vi /etc/rsyslog.conf
# Input Modules -----------------------------------This line is comment
#--------------------------------------------------This line is comment
$ModLoad impstats.so
$PStatsInterval 300
syslog.info /var/log/rsyslog-stats
#--------------------------------------------------This line is comment
$ModLoad immark.so # provides --MARK-- message capability
$ModLoad imuxsock.so # provides support for local system logging (via logger command)
$ModLoad imklog.so # provides kernel logging support (previously done by rklogd)
#--------------------------------------------------This line is comment
$ModLoad imudp.so # provides UDP syslog reception
$UDPServerAddress * # all local interfaces
$UDPServerRun 514 # start UDP server (log server receiver)
#--------------------------------------------------This line is comment
$ModLoad imtcp.so # provides TCP syslog reception and GSS-API (if compiled)
$InputTCPServerRun 514 # start TCP server (log server receiver)
#--------------------------------------------------This line is comment
$ModLoad imrelp.so # RELP input
$InputRELPServerRun 20514 # start RELP Protocol
#--------------------------------------------------This line is comment
$ModLoad imfile.so # Text file input
$InputFileName /var/log/i-am-a-text-file.log
$InputFileTag my-text-file:
$InputFileStateFile stat-file1
$InputFileSeverity error
$InputFileFacility local7
$InputFilePollInterval 10 # check for new lines every 10 seconds
$InputRunFileMonitor
#--------------------------------------------------This line is comment
#$ModLoad imgssapi.so # Plain TCP and GSSAPI
#$ModLoad im1395.so # Messages via RFC1395
# Output Modules ----------------------------------This line is comment
#--------------------------------------------------This line is comment
$ModLoad omsnmp.so # Send SNMP traps
#$actionsnmptransport udp
#$actionsnmptarget 192.168.x.x
#$actionsnmptargetport 162
#$actionsnmpversion 1
#$actionsnmpcommunity public
#*.* "http://npower.vn/wp-includes/images/smilies/icon_surprised.gif" alt="icon surprised Hướng dẫn cài đặt Rsyslog 5.7.x trên nền tảng CentOS 5.x" class="wp-smiley" title="Hướng dẫn cài đặt Rsyslog 5.7.x trên nền tảng CentOS 5.x"> msnmp:
#--------------------------------------------------This line is comment
$ModLoad ommysql.so # Log to MySQL
#$ModLoad ompgsql.so # Log to PostgreSQL
#--------------------------------------------------This line is comment
$ModLoad ommail.so # Send mail
#$ActionMailSMTPServer mail.example.net
#$ActionMailFrom rsyslog@example.net
#$ActionMailTo operator@example.net
#$ActionMailTo admin@example.net
#$template mailSubject,"disk problem on %hostname%"
#$template mailBody,"RSYSLOG Alertrnmsg='%msg%'"
#$ActionMailSubject mailSubject
#$ActionExecOnlyOnceEveryInterval 21600
#if $msg contains 'hard disk fatal failure' then "http://npower.vn/wp-includes/images/smilies/icon_surprised.gif" alt="icon surprised Hướng dẫn cài đặt Rsyslog 5.7.x trên nền tảng CentOS 5.x" class="wp-smiley" title="Hướng dẫn cài đặt Rsyslog 5.7.x trên nền tảng CentOS 5.x"> mmail:;mailBody
#--------------------------------------------------This line is comment
$ModLoad omrelp.so # Send to another host via RELP
#$ModLoad omlibdbi.so # Log via generic DB output
#$ModLoad omgss.so # GSS enabled output
# Globals -----------------------------------------This line is comment
$umask 0000
$DirCreateMode 0640
$FileCreateMode 0640
$RepeatedMsgReduction on
$WorkDirectory /var/log/rsyslog # default location for work (spool) files
$ActionQueueType LinkedList # use asynchronous processing
$ActionQueueFileName queue # set file name, also enables disk mode
$ActionResumeRetryCount -1 # infinite retries on insert failure
$ActionQueueSaveOnShutdown on # save in-memory data if rsyslog shuts down
$MainMsgQueueMaxFileSize 100M
$ActionQueueMaxFileSize 5M
#--------------------------------------------------This line is comment
# Below find some samples of what a template can do. Have a good
# time finding out what they do [or just tun them] "http://npower.vn/wp-includes/images/smilies/icon_wink.gif" alt="icon wink Hướng dẫn cài đặt Rsyslog 5.7.x trên nền tảng CentOS 5.x" class="wp-smiley" title="Hướng dẫn cài đặt Rsyslog 5.7.x trên nền tảng CentOS 5.x">
# A template that resambles traditional syslogd file output:
$template TraditionalFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%n"
# a template useful for debugging format issues
$template DEBUG,"Debug line with all properties:nFROMHOST: '%FROMHOST%', HOSTNAME: '%HOSTNAME%', PRI: %PRI%,nsyslogtag '%syslogtag%', programname: '%programname%', APP-NAME: '%APP-NAME%', PROCID: '%PROCID%', MSGID: '%MSGID%',nTIMESTAMP: '%TIMESTAMP%', STRUCTURED-DATA: '%STRUCTURED-DATA%',nmsg: '%msg%'nescaped msg: '%msg:::drop-cc%'nrawmsg: '%rawmsg%'nn"
# A template that resembles RFC 3164 on-the-wire format:
# (yes, there is NO space betwen syslogtag and msg! that's important!)
$template RFC3164fmt,"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag%%msg%"
# a template resembling traditional wallmessage format:
$template wallmsg,"rn7Message from syslogd@%HOSTNAME% at %timegenerated% ...rn %syslogtag%%msg%nr"
# The template below emulates winsyslog format, but we need to check the time
# stamps used. for now, it is good enough icon wink Hướng dẫn cài đặt Rsyslog 5.7.x trên nền tảng CentOS 5.x This format works best with
# other members of the MonitorWare product family. It is also a good sample
# where you can see the property replacer in action.
$template WinSyslogFmt,"%HOSTNAME%,%timegenerated:1:10:date-rfc3339%,%timegenerated:12:19:date-rfc3339%,%timegenerated:1:10:date-rfc3339%,%timegenerated:12:19:date-rfc3339%,%syslogfacility%,%syslogpriority%,%syslogtag%%msg%n"
# A template used for database writing (notice it *is* an actual
# sql-statement):
$template dbFormat,"insert into SystemEvents (Message, Facility,FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%HOSTNAME%',%syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')",sql
$template FileFormat,"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%n"
$template ForwardFormat,"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"
# Selector lines are somewhat different from stock syslogd. With
# rsyslog, you can add a semicolon ";" after the target and then
# the template name. That will assign this template to the respective
# action. If no template name is given, a hardcoded template is used.
# If a template name is given, but the template was not defined, the
# selector line is DEACTIVATED.
#--------------------------------------------------------------------
#--------------------------------------------------This line is comment
# Forward via TCP with maximum compression:
#$AllowedSender TCP, 127.0.0.1, 192.0.2.0/24, [::1]/128, *.example.net, somehost.example.com
#*.* @@(z9)192.168.x.x:514
# Forward via UDP with maximum compression:
#$AllowedSender UDP, 127.0.0.1, 192.0.2.0/24, [::1]/128, *.example.net, somehost.example.com
#*.* @(z9)192.168.x.x:514
# Forward via RELP Protocol :
#*.* icon surprised Hướng dẫn cài đặt Rsyslog 5.7.x trên nền tảng CentOS  5.x mrelp:192.168.2.4:20514;TraditionalFormat
# Store all log files in MySQL DB :
#*.* icon surprised Hướng dẫn cài đặt Rsyslog 5.7.x trên nền tảng CentOS  5.x mmysql:127.0.0.1,Syslog,rsyslog,your-mysql-password
#--------------------------------------------------This line is comment
#--------------------------------------------------This line is comment
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console;TraditionalFileFormat
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
#--------------------------------------------------This line is comment
$IncludeConfig /etc/rsyslog.d/*.conf
#--------------------------------------------------This line is comment
#if message contains 'network error' then run the restart-network.sh shell script!!!
#:msg, contains, "network error" ^/root/restart-network.sh
 
Sau đó, khởi động Rsyslog:
chmod 640 /etc/rsyslog.conf
service rsyslog start
tail -f /var/log/messages
 
Và kiểm tra quá trình hoạt động của Rsyslog như sau:
 
logger "this is a test message"
logger -p local0.info -t testtag "this is a test message"
 
Khi hệ thống hiển thị thông tin đúng theo mẫu kiểm tra thì có nghĩa là toàn bộ quá trình cài đặt và cấu hình trên đã thành công. Chúc các bạn thành công!
Theo quản trị mạng