quản lý nội dung trên sakai server, thực hiện biên dịch và kiểm thử trên test server khác bằng hạ tầng ssh
Trang 1MỤC LỤC
Trang 2CHƯƠNG I GIỚI THIỆU ĐỀ TÀI I.1 Mô tả yêu cầu
a Hiện nay, Khoa Khoa Học và Kỹ Thuật Máy Tính có thực hiện các bài lab và assigment cho sinh viên dưới hình thức cho sinh viên hiện thực các hàm chức năng chính của chương trình vào các file yêu cầu rồi gửi lên Khoa Giáo viên sẽ lấy code của sinh viên, thực hiện quá trình biên dịch, kiểm thử, so sánh kết quả và chấm điểm Công việc biên dịch, kiểm thử được các thực hiện trên hệ thống máy ảo của bộ môn.
b Giới hạn của quá trình trên là sự khác biệt về môi trường lập trình của sinh viên và giáo viên khiến kết quả từ chương trình của sinh viên không như mong muốn, sinh viên không thấy được kết quả trực tiếp mà phải chờ sau khi bài lab hết hạn và có kết quả tạo ra từ giáo viên.
c Mục tiêu của đề tài là tận dụng khả năng của SAKAI framework, xây dựng một công cụ giúp giáo viên tổ chức và quản lý các bài lab, đồng thời hỗ trợ thực hiện khả năng biên dịch, kiểm thử khi sinh viên nộp bài.
I.2 Các Business Rules
a Sự an toàn cho SAKAI Server
Trang 3 Vì một số lý do, các chương trình của sinh viên có thể làm thay đổi, dẫn đến làm hệ thống trục trặc khi thực hiện việc biên dịch, kiểm thử Do đó, việc biên dịch và kiểm thự không nên đặt trên máy chủ SAKAI mà nên để trên một hệ thống Test Server, có thể là các máy ảo, để tiện cho việc sao lưu, phục hồi hệ thống cũng như không ảnh hưởng đến hệ thống Website của Khoa.
b Tận dụng nguồn tài nguyên sẵn có
Hiện nay, Khoa đã có sẵn hệ thống thực hiện việc biên dịch và kiểm thử các chương trình của sinh viên Hệ thống trên được thiết lập đã đáp ứng được các nhu cầu về khả năng bảo mật, tính an toàn cho hệ thống, sự tương thích của các phần mềm được cài đặt …
Việc xây dựng lại hệ thống trên với các thay đồi phức tạp nhằm đáp ứng yêu cầu của chương trình là rất khó và hoàn toàn không khả thi Vì thế mà giải pháp đưa ra phải có khả năng cho giá viên sử dụng lại các hệ thống Test Server sẵn có
c Khả năng độc lập giữa SAKAI và Test Server cao
Do tính đa dạng của các môn học trong chương trình, hệ thống Test Server
có thể được triển khai trên nhiều flatform khác nhau Các flatform này đôi khi khác nhau rất nhiều về mặt kiến trúc, dẫn đến kết quả là các chương trình được viết trên flatform này có khi không thể thực thi được trong các flatform khác
Ngoài ra, giáo viên chỉ quan tâm đến hệ thống Test Server của mình mà không phải qi cũng quan tâm và hiểu rõ cấu trúc của SAKAI framework Do đó, việc yêu cầu giáo viên khi tạo một bài lab mà phải trải qua nhiều bước cấu hình phức tạp trên SAKAI cũng như trên Test Server là một việc khó khăn
Vì những lý do đó, giải pháp đưa ra phải có tính chung nhất (thực thi được trên mọi platform) và có tính độc lập cao giữa SAKAI và Test Server (giới hạn việc thiết lập cho giáo viên trên Test Server với các bước đơn giản, không cần quan tâm đến tình trạng của SAKAI cũng như tính tương thích giữa SAKAI
Server và Test Server)
d Khả năng đáp ứng của chương trình
Các sinh viên thương tập trung làm bài vào các ngày cuối của bài lab hay assignment Điều đó đồng nghĩa với hệ thống gần như phải đáp ứng được nhu cầu của hơn 300 sinh viên một lúc
Vì thế, chương trình cần đảm bào với số lượng sinh viên như thế, chương trình vẫn đáp ứng được yêu cầu của sinh viên trong 1 thời gian nhất định mà vẫn hạn chế tải trọng lên SAKAI Server hay Test Server, vốn thường quá tải trong thời gian này
Trang 4 Phải đảm bảo tính bảo mật cho các hệ thống SAKAI, Test Server cũng như quyền hạn của user Khi các sinh viên thực thi bài làm cùng một lúc, phải đảm bảo rằng sinh viên này không thể ảnh hưởng đến kết quả của sinh viên khác
I.3 Các phương hướng thực hiện
a Thực hiện biên dịch ngay tại SAKAI Server, chạy thử chương trình trên môi trường ảo ngay trên SAKAI Server
• Ảnh hưởng đến SAKAI Server trong quá trình cài đặt thư viện để compile
• Khó tùy biến cho các giáo viên không tham gia quản trị SAKAI Server
• Khó tách biệt môi trường dịch cho các user trong quá trình dịch tại SAKAI Server
b Thực hiện biên dịch ngay tại SAKAI Server, chạy thử chương trình trên một máy Test Server khác bằng một phần mềm Client – Server tự hiện thực
• Tách quá trình thực thi chương trình khỏi SAKAI Server
• Tính sẵn sàng cao cho chức năng compile
• Ảnh hưởng đến SAKAI Server trong quá trình cài đặt thư viện để compile
• Yêu cầu cài đặt thêm 1 phần chương trình (Server part) trên Test Server
• Khó khăn trong việc quản lý user, tách biệt các môi trường cho các user trong quá trình chạy thử
• Khó tách biệt môi trường dịch cho các user trong quá trình dịch tại SAKAI Server
c Quản lý nội dung trên SAKAI Server, thực hiện biên dịch và kiểm thử trên Test Server khác bằng một phần mềm Client – Server tự hiện thực
Trang 5• Tách toàn bộ quá trình biện dịch và thực thi chương trình khỏi SAKAI
Server
• Môi trường đa dạng, tính tùy biến cao
• Yêu cầu cài đặt thêm 1 phần chương trình (Server part) trên Test Server
• Khó khăn trong việc quản lý user, tách biệt các môi trường cho các user
d Quản lý nội dung trên SAKAI Server, thực hiện biên dịch và kiểm thử trên Test Server khác bằng hạ tầng SSH
• Tách toàn bộ quá trình biện dịch và thực thi chương trình khỏi SAKAI
Server
• Môi trường đa dạng, tính tùy biến cao
I.4 Tính khả thi của phương hướng được lựa chọn
a Qua quá trình phân tích, xem xét khả năng hiện thực, chúng em quyết định chọn
phương án cuối cùng: Quản lý nội dung trên SAKAI Server, thực hiện biên dịch
và kiểm thử trên Test Server khác bằng hạ tầng SSH Đó cũng là nội dung đề tài
và phương hướng trong quá trình phát triển công cụ CSLab trên SAKAI của chúng
em
b Ưu điểm
SSH Server có thể cài đặt trên nhiều môi trường khác nhau và SSH chạy trên nền giao thức TCP/IP Điều đó làm cho danh mục các platform có thể cài đặt trên Test Server là rất lớn SAKAI Server không cần biết Test Server là máy thật hay máy ảo, chạy môi trường gì, đã cài đặt gì trên đó mà chỉ cần Test Server có cài đặt SSH Server và chạy trên nền TCP/IP và có thể hoạt động với công cụ CSLab Từ
đó, giảng viên có thể tùy biến nội dung bài lab tùy ý mà không cần lo lắng về khả năng bị giới hạn cho không cài đặt được môi trường phù hợp
Với dịch vụ SSH, ta có thể đăng nhập vào Test Server bằng nhiều account
Trang 6bởi các môi trường cá nhân của user với các cơ chế bảo mật sẵn có mà ta không cần hiện thực nhiều.
Với hệ thống sẵn có của Khoa, việc cài thêm một dịch vụ SSH Server là không đáng kể Từ đó, ta vẫn có thể dùng lại hệ thống cũ với công cụ CSLab mà không có nhiều thay đổi
Test Server và SAKAI Server là hoàn toàn tách biệt nhau, chúng chỉ tương tác với nhau qua các thông số cấu hình Test Server được cung cấp trong quá trình tạo bài lab Từ đó, Test Server có thể dùng lại nhiều lần với nhiều bài lab khác nhau hay tắt đi khi không còn bài lab nào mà vẫn không ảnh hưởng đến SAKAI Server Ngoài ra, Người quản trị của SAKAI Server và giảng viên không cần biết đến hệ thống của người kia mà chỉ cần quản lý hệ thống của chính mình là được
Test Server có thể là một máy thật hay là một máy ảo Với các máy ảo, giảng viên có thể tận dụng khả năng tái sử dụng, sao lưu và phục hồi bằng chức năng Take Snapshot của trình quản lý máy ảo
CHƯƠNG II PHÂN TÍCH - THIẾT KẾ CÔNG CỤ CSLAB II.1 Các chức năng chính
Trang 7a Tổng quát
Lưu trữ và quản lý nội dung bài làm của sinh viên và kết quả trả về từ Test Server
b Về phía giảng viên
Xem thông tin bài lab, tình trạng bài lab, thống kê
c Về phía sinh viên
Xem danh sách và tình trạng các bài lab đang kích hoạt
Biên dịch, kiểm thử bài làm và lưu trữ kết quả
II.2 Cấu trúc công cụ CSLab
a Công cụ CSLab được thiết kế hoàn toàn nằm trên SAKAI Server mà không cần cài đặt bất cứ phần nào trên Test Server Tuy nhiên, do sử dụng cơ chế SSH để truyền nội dung qua Test Server nên Test Server yêu cầu phải được cài đặt sẵn dịch
vụ SSH
2.2-Tool Structure
b Về phía SAKAI Server: công cụ CSLab gồm 3 thành phần chính
CSLab Front-End: thực hiện các chức năng quản lý, cung cấp giao diện, …
Trang 8 Storage Component: thực hiện các chức năng ghi, chép, quản lý file … trong chương trình
Server, thực hiện các tác vụ truyền nhận file, thực thi câu lệnh trên Test Server, …
c Về phía Test Server: hoàn toàn được xem như một đối tác thứ ba Mọi cấu hình trên Test Server đều phải được cấu hình bởi giảng viên (người tạo bài lab) và sau đó cung cấp các cấu hình đó cho công cụ CSLab trong quá trình tạo bài lab Các thông tin cấu hình cần thiết bao gồm
Địa chỉ IP / hostname của Test Server
để các file bài làm khi công cụ CSLab upload lên
Vị trí chính xác file kết quả sau khi chương trình thực thi
Số lượng connection tối đa cho một bài lab khi kết nối đến Test Server
Thời gian tối đa chờ 1 câu lệnh hoàn thành
Tài khoản cho sinh viên đăng nhập vào Test Server Tài khoản này khác với tài khoản của sinh viên trên SAKAI và không công bố cho sinh viên biết tài khoản này mà chỉ được chương trình sử dụng ngầm bên dưới
II.3 Hoạt động của công cụ CSLab
a Hoạt động của chương trình được bắt đầu khi giảng viên thực hiện quá trình tạo nội dung bài lab cho đến khi giáo viên quyết định xóa bài lab đã tạo
Trang 92.3-Sequence Diagram
b Công cụ CSLab lưu trữ nội dung bài lab và các thông tin khác dưới hình thức các file object của các đối tượng Serializable Các đối tượng đó bao gồm:
LabInfo: lưu trữ các thông tin cơ bản của bài lab
DependencyInfo: lưu trữ nội dung các file source code chỉ mang tính chất tham khảo, không thể thay đổi bởi sinh viên
SubmissionInfo: lưu trữ nội dung các file source code mà sinh viên cần hoàn thiện, đây cũng là nơi lưu trữ nội dung làm bài của sinh viên
ConfigInfo: lưu trữ các thông tin cơ bản về Test Server trong suốt quá trình thực hiện SSH session Nội dung thông tin này được upload lên SAKAI dưới dạng 1 file config
ShellInfo: lưu trữ một tập các câu lệnh đơn để thực thi sau khi kết nối vào Test
Trang 10Server Trong một bài lab có thể có nhiều tập câu lệnh, xem như có nhiều kịch bản khác nhau cho quá trình biên dịch, kiểm thử Nội dung thông tin này được upload lên SAKAI dưới dạng 1 file shell script
UserInfo: lưu trữ tài khoản dùng để đăng nhập vào Test Server cho từng tài khoản SAKAI của sinh viên Nội dung thông tin này được upload lên SAKAI dưới dạng 1 file mapping
SSHPermission: dùng để quản lý số lượng connection tối đa cho từng bài lab Mỗi đối tượng là duy nhất cho mỗi bài lab và hoàn toàn độc lập với nhau Đối tượng này không được lưu xuống thành 1 file mà tồn tại suốt quá trình bài lab còn hiệu lực
và bị xóa sau ngày deadline của bài lab
Trang 112.3-Object Lifecycle
Trang 12c Các file object được lưu lại thành 1 cây thư mục Gốc của cây thự mục được admin của SAKAI Server xác định trong quá trình cài đặt tool
2.3 -Repository Directory
Trang 13 Thư mục Dependencies của Lab
Trang 14e Hoạt động của chương trình dựa trên sự tương tác của sinh viên
2.3-Student Activities
Quá trình Test bài lab sử dụng Test Server
Trang 15II.4 Thiết kế giao diện và hoạt động của các trang trong công cụ CSLab
a Giao diện các trang và hoạt động của các thành phần
2.4 -Instructor Home Page
• Bảng chứa danh sách các bài lab
Cho phép user chọn từng hàng cụ thể Hàng được chọn được đổi sang màu khác
Khi Instructor load trang chủ của công, instructor được chuyển đến trang này Trên thanh chức năng chỉ có tùy chọn Add được enable, các chức năng còn lại bị
Trang 16disable Khi user chọn một hàng, các tùy chọn Edit, Delete, View Summary, View Statistic trên thanh chức năng được enable.
2.4 -Student Home Page
• Bảng chứa danh sách các bài lab đang kích hoạt
Thể hiện tình trạng của rừng bài lab
Trang 17Đã làm
Mới và chưa làm (chưa quá nửa thời gian)
Gần hết hạn và chưa làm (quá nửa thời gian)
Khi click vào tên lab, trang Take Lab sẽ hiện ra cho sinh viên làm bài
2.4- Create Lab Info (1) – General Information
Trang 182.4-Create Lab Info(2) – Dependencies
2.4- Create Lab Info(3) – Base Submissions
Trang 192.4-Create Lab Info(4) – Configure Server
2.4- Create Lab Info(5) – Mapping User
Trang 202.4- Create Lab Info(6) – Set Command
2.4- File Upload – Mutiple Mode
Trang 212.4- File Upload – Single Mode
Bread Crumb Trail chỉ hiển thị khi user đã từng xuất hiện tại bước tạo lab tương ứng User có thể quay lại các trang trước bằng cách chọn tên bước tương ứng và Bread Crumb Trail sẽ không thay đổi cho đến khi user bước sang 1 một bước mới
Trang 22• Date Picker
User không thể nhập dữ liệu vào khung text của Date Picker mà chỉ có thể lựa chọn này bằng cách click vào biểu tượng calendar bên cạnh
• Khung hiển thị danh sách các file đã import
User không thể edit hay tác động lên khung này User chỉ có thể thay đổi danh sách các file đã import bằng cách click vào link “Click to Import File” bên dưới
để vào trang Upload File – Muitiple Mode
Trang 23• Khung hiển thị nội dung config
Khi chưa import file, các giá trị trên khung được để trống và chỉ xuất hiện khi user đã import file bằng cách click vào link “Click to Import File” bên dưới để vào trang Upload File – Single Mode User cũng có thể dùng cách đó để sửa đổi thông tin đã có User cũng không thể edit hay tương tác lên khung này
• Khung hiển thị nội dung mapping user
Chỉ hiển thị nội dung khi user đã import file bằng cách click vào link “Click to Import File” bên dưới để vào trang Upload File – Single Mode User cũng có thể
Trang 24dùng cách đó để sửa đổi thông tin đã có User cũng không thể edit hay tương tác lên khung này.
Chỉ enable khi instructor đã nhập thông tin vào trang hiện tại
Thoát và không lưu bất cứ gì
Trở lại trang trước, luôn xuất hiện trừ trang đầu tiên
Chỉ xuất hiện ở trang cuối và chỉ enable khi instructor đã nhập thông tin vào trang
• Khung hiển thị danh sách các file đã upload
Chỉ hiển thi các file đã được upload sau khi user chọn nút upload User có thể xóa file đã upload bằng cách click vào biểu tượng thùng rác bên cạnh tên file
Trang 25 Trang xem thông tin tổng quan bài lab
Trang 262.4 -Lab Summary
Trang 27Cho phép giảng viên thực hiện các thao tác lên bài lab hiện tại: sửa, xóa, xem tình trạng, trở về trang chính
Trang 28Bài làm đã test sẽ hiện link Result Click vào link sẽ hiển thị kết quả bài làm
2.4 -Take Lab
Trang 29Lưu nội dung các file submission của sinh viên
Thoát khỏi trang Take Lab, trở về trang Home View – Student mà không save lại bất kỳ dữ liệu nào
Liệt kê danh sách các file dependencies và submissions, khi click vào tên file, tên file và nội dung file sẽ hiện ra ở File Name và Content
Trang 30CHƯƠNG III CÁC KIẾN THỨC LIÊN QUAN III.1 SSH trong JAVA
a Giao thức SSH: SSH hay Secure Shell là giao thức mạng dùng để trao đổi thông tin giữa hai thiết bị dưới một kên truyền bảo mật, thường được sử dụng trong các hệ thống Linux hay hệ thống Unix-based để đăng nhập tài khoản từ xa
• xác định server thông qua việc trao đổi khóa
• xác lập một session làm việc bảo mật được mã hóa từ khóa đồng bộ được trao đổi ở bước trên
SSH được thiết kế để thay thế cho giao thức Telnet hay các giao thức đăng nhập tài khoản từ xa không bảo mật khác, khi mà password của user và data được gửi đi dưới dạng plain-text và có thể bị bắt được bởi các chương trình bắt gói thông tin trên mạng
Trang 31 Version mới nhật của SSH hiện nay là version 2 nâng cao tính bảo mật (ví dụ: sử dụng cơ chế trao đổi khóa Diffie – Hellman, message authentication code
để kiểm tra tính toàn vẹn ) hay thêm một số chức năng (chạy nhiều shell trong một kết nối SSH …)
b JSCH: thư viện SSH trong Java
JSch là thư viện Java hiện thực việc kết nối đến SHH Server sử dụng giao thức SSH-2, được phát hành với dưới BSD-type license
Hỗ trợ giao thức SSH-2 với khả năng đăng nhập shell hay thực thi câu lệnh
từ xa
Hỗ trợ việc chứng thực user bằng phương pháp Authentication hay key
Public- Hỗ trợ các tính năng gửi / nhận file qua giao thức SCP
Phụ thuộc vào gói Java Cryptography Extension (JCE) – gói thư viện mã hóa chuẩn của Java
III.2 Lập trình công cụ trong SAKAI Framework
dependencies cũng như các file binary của project đã được dịch là cần thiết Maven được
sử dụng trong việc quản lí các thông tin này
Có phần tương tự như Ant hay Makefile, nhưng Maven đơn giản hóa việc quản lí project
và dependencies trong các kho(Repository) Trong Repository không chỉ chứa các
dependency mà còn kèm theo metadata của nó dưới dạng file pom.xml Mỗi khi cần sử dụng một dependency bạn cần cung cấp các thong số để xác định dependency đó bao gồm ít nhất 3 thông số groupId, artifactId, version Bộ thông số này gọi là Maven
Coordinate
Một trong những tiện ích mà maven đem lại là cơ chế transitive dependency Khi bạn chỉ định một dependency cho project của mình, Maven sẽ tự đông tìm và add các
Trang 32tiết kiệm rất nhiều thời gian và đảm bảo các gói thư viện có version tương thích với nhau Bản thân bạn cũng có thể nhóm các dependency mà mình thường sử dụng thành 1 artifact
để tiện cho việc sử dụng nhiều lần trong các project Một thí dụ cụ thể về transitive
dependencies mà bạn phải chỉ ra, nếu các dependency này đòi hỏi các thư viện khác Maven sẽ tự động đính kèm vào project cho bạn
Sau đây là một số ảnh minh họa về cơ chế nói trên, trong hình này eclipse được cài đặt m2eclipse plugin và project có file pom khai báo như trên: