tutorial - Cách imodule bài lab đã tạo để publish
Các gói cần thiết (cập nhật updatedesigner.sh là có rồi)
Cần kiểm tra xem có file này không create-imodules.sh
.
Thường thì nó sẽ nằm ở đường dẫn sau của labtainer: ~/labtainer/trunk/scripts/designer/bin/create-imodules.sh
Nếu có file này thì mới thực hiện được bước tiếp theo, nhưng nếu không có thì có thể lên github của Labtainer để tải nó về: Labtainers/scripts/designer/bin at master · mfthomps/Labtainers (tốt nhất là clone cả folder về)
Các bước thực hiện để imodule
Tóm tắt
Trang 51 của tài liệu hướng dẫn
vào labedit > Edit > tìm phần config(registry)
> thêm tên người dùng dockerhub của mình vd: tutran21195
> sau đó build & run lại để nó cập nhật cấu hình mới.
git add my-new-lab
git commit my-new-lab-m "Adding an IModule"
cd $LABTAINER_DIR/distrib
./publish.py -d -l my-new-lab
lúc này phải chờ khá lâu, đồng thời khi xong thì nó sẽ yêu cầu nhập mật khẩu của dockerhub của mình (vd:
tutran21195
<matkhau>
)
sau đó thì mình imodule. Nhưng nên nhớ khi dùngcreate-imodules.sh
thì nó sẽ đóng hết tất cả các lab đã được commit trên repo local. Vì thế cần tạo nhánh cho repo để lưu mỗi bài lab riêng, hoặc có thể xóa commit cũ đi để trên nhánh main luôn chỉ có 1 bài lab
Cách create-imodules.sh
hoạt động:
Script này chỉ đóng gói những file được track bởi Git (nó dùng git ls-files
), nên:
🔥 Nếu thư mục
~/labtainer/trunk/labs/steg-fhss-embed<folder lab>
của bạn không nằm trong repo Git, hoặc chưa đượcgit add
, thì script sẽ bỏ qua lab đó.
Từng bước publish
image lên docker hub và create-imodules.sh
Bước 0: Thêm registry để publish docker image lên dockerhub
vào labedit > tìm trên tool bar phần Edit > config(registry)
> thêm tên người dùng dockerhub của mình tutran21195
sau đó build & run lại để nó cập nhật cấu hình mới.
Sau chi test cho bài lab hoạt động như ý xong thì có thể chạy lệnh trong thư mục của bài lab:
python3 /home/student/labtainer/trunk/scripts/designer/bin/cleanlab4svn.py
điều này sẽ dọn dẹp các fille không cần thiết đi
Bước 1: Tạo một repo Git local ở thư mục labs/
cd ~/labtainer/trunk/labs
git init
Việc này chỉ tạo repo cục bộ thôi. nó sẽ tạo một local repo .git ở trong folder
labs
. Nhưng đếu đã có thư mục .git tại thư mụclabs
rồi thì thôi không cần tạo nữa
Bước 2: Add riêng lab steg-fhss-embed
vào repo
git add <tên_bài_lab>
git commit <tên_bài_lab> -m "add tên_bài_lab"
sử dụng lệnh git log
để kiểm tra xem đã commit thành công chưa
Bước 3: publish
image của bài lab lên trên docker hub
cd $LABTAINER_DIR/distrib
./publish.py -d -l my-new-lab
Lúc này có thể sẽ hơi lâu một chút.
Bước 4: Chạy create-imodules.sh
Giả sử script nằm ở ~/labtainer/trunk/scripts/designer/bin/create-imodules.sh
, bạn chạy:
~/labtainer/trunk/scripts/designer/bin/create-imodules.sh
Bước 5: Lấy file imodule.tar
đưa lên github
Sau khi chạy xong, bạn sẽ thấy:
~/labtainer/trunk/imodule.tar
Đây là file bạn cần gửi đi. Nó sẽ chứa duy nhất bài lab steg-fhss-embed
, đóng gói chuẩn. (tốt nhất là di chuyển nó đi chỗ khác vào nơi nào đó dễ quản lý hơn không sau này tạo các bài lab tiếp theo nó sẽ ghi đè vào cái file .tar này)
Up file này lên github, khi click vào file thì nó sẽ dẫn mình đến links .../blob/...
thì mình nên phải chuột vào nút raw và copy nó, lúc này thì đường link để tải trực tiếp file đó sẽ được copy.
Sinh viên muốn tài bài lab của mình thì chỉ cần:
imodule <link_đến_file_raw_trên_github>
Ghi chú:
- Nếu bạn muốn kiểm tra bên trong file
imodule.tar
, bạn có thể chạy:
tar -tf ~/labtainer/imodule.tar
- Nếu có lỗi trong
fix-git-dates.py
, hãy kiểm tra fileconfig
,instr_config
,docs/Makefile
trongsteg-fhss-embed
— vì script này xử lý đúng chuẩn định dạng yêu cầu của Labtainer.
🧠 Câu hỏi:
Sau này tôi muốn đóng gói 1 bài lab mới (VD:
lab-B
) mà không muốn đóng gói lại cả bàisteg-fhss-embed
(lab-A) đã có trong repo local, thì tôi phải làm sao để chỉimodule
đúng 1 lab?
✅ CÁCH GIẢI QUYẾT: TẠO GIT BRANCH RIÊNG CHO TỪNG LAB
Bạn có thể dùng Git branch để tách riêng mỗi lab. Khi đó, mỗi branch sẽ chỉ chứa 1 thư mục lab duy nhất. Khi chạy create-imodules.sh
, nó sẽ chỉ pack những gì có trong branch hiện tại.
Ngoài ra thì việc dùng nhiều nhánh sẽ không cần phải xóa file lab cũ đã imodule đi, dẫn đến việc sau này nếu bài lab cũ đó có update gì thì chỉ cần git add
và git commit
sau đó chay lại ~/labtainer/trunk/scripts/designer/bin/create-imodules.sh
mới là nó sẽ cập nhật file imodule.tar mới.
🚀 QUY TRÌNH CHUẨN CHO MỖI LAB:
🔹 Bước 1: Đảm bảo đang ở thư mục labs
cd ~/labtainer/trunk/labs
Kiểm tra nhánh hiện tại
git branch -a
🔹 Bước 2: Tạo nhánh mới cho lab mới
Giả sử bạn đang chuẩn bị đóng gói lab mới tên là covert-ping
.
# tạo và chuyển sang nhánh mới
git checkout --orphan my-new-lab-branch
# Xoá toàn bộ file được kế thừa của nhánh trước (nhưng không ảnh hưởng thư mục làm việc, cũng không ảnh hưởng đến nhánh trước đó)
git rm -rf .
Vào thư mục lab mới đó của mình
cd my-new-lab
python3 /home/student/labtainer/trunk/scripts/designer/bin/cleanlab4svn.py
cd ..
🔹 Bước 3: Thêm thư mục lab mới vào nhánh
Đảm bảo rằng mình đang ở thư mục trunk/labs.
git add <ten thu muc lab>
git commit <ten thu muc lab vua nhap ơ tren> -m "Add covert-ping lab only"
Giờ branch covert-ping-branch
chỉ có duy nhất thư mục covert-ping
.
Publish image của mình lên dockerhub:
cd $LABTAINER_DIR/distrib
./publish.py -d -l my-new-lab
🔹 Bước 4: Chạy lệnh tạo imodule như bình thường
Rồi chạy:
/home/student/labtainer/trunk/scripts/designer/bin/create-imodules.sh
→ File imodule.tar
lúc này sẽ chỉ chứa lab covert-ping
thôi.
file kết quả được tạo ra nằm ở:
~/labtainer/trunk/imodule.tar
🎯 ƯU ĐIỂM:
-
Mỗi lab nằm trên 1 branch → dễ quản lý
-
create-imodules.sh
chỉ pack đúng nội dung branch hiện tại -
Bạn không cần tạo repo Git mới mỗi lần, chỉ tạo branch mới là đủ
💡 GỢI Ý:
Nếu sau này bạn có 20 lab khác nhau, bạn có thể tạo 20 branch:
lab1-branch
lab2-branch
...
Mỗi lần chuyển branch, bạn chỉ cần:
git checkout lab5-branch
./distrib/create-imodules.sh