Bộ công cụ để thiết lập môi trường sandbox IPFS cục bộ với nhiều node để thử nghiệm phân phối và sao chép nội dung.
Sandbox tạo ra 5 node IPFS trên máy của bạn tạo thành một mạng riêng tư, cho phép bạn thử nghiệm:
- Phân mảnh và phân phối tệp
- Định vị nội dung bằng địa chỉ (Content addressing)
- Ghim và bỏ ghim nội dung (Pinning/unpinning)
- Thu gom rác (Garbage collection)
- Lấy nội dung giữa các node
- MacOS (script được tối ưu cho MacOS, nhưng có thể điều chỉnh cho Linux)
- IPFS Kubo đã cài đặt (
brew install ipfs
hoặc tải từ https://dist.ipfs.tech/) - Shell Bash/ZSH
Dự án này bao gồm 3 script chính:
- setup-ipfs-sandbox.sh: Thiết lập môi trường IPFS ban đầu
- manage-ipfs-sandbox.sh: Quản lý các node IPFS (khởi động, dừng, kiểm tra)
- test-ipfs-distribution.sh: Thử nghiệm phân phối nội dung
chmod +x setup-ipfs-sandbox.sh
./setup-ipfs-sandbox.sh
chmod +x manage-ipfs-sandbox.sh
# Khởi động tất cả các node
./manage-ipfs-sandbox.sh start
# Khởi động một node cụ thể
./manage-ipfs-sandbox.sh start 3 # Khởi động node3
# Kiểm tra trạng thái
./manage-ipfs-sandbox.sh status
# Dừng tất cả các node
./manage-ipfs-sandbox.sh stop
# Dừng một node cụ thể
./manage-ipfs-sandbox.sh stop 2 # Dừng node2
# Khởi động lại tất cả các node
./manage-ipfs-sandbox.sh restart
# Khởi động lại một node cụ thể
./manage-ipfs-sandbox.sh restart 3 # Khởi động lại node3
chmod +x test-ipfs-distribution.sh
# Tạo tệp thử nghiệm 5MB
dd if=/dev/urandom of=test-file-5mb.bin bs=1M count=5
# Chạy thử nghiệm với kích thước phân mảnh mặc định (256KB)
./test-ipfs-distribution.sh test-file-5mb.bin
# Chạy với kích thước phân mảnh tùy chỉnh
./test-ipfs-distribution.sh test-file-5mb.bin 1048576 # 1MB chunks
Script test-ipfs-distribution.sh
thực hiện các thử nghiệm sau:
- Thêm tệp vào node1 với kích thước phân mảnh được chỉ định
- Phân tích cấu trúc DAG của tệp
- Kiểm tra sự phân phối ban đầu
- Test 1: Lấy tệp từ node2
- Test 2: Ghim tệp trên node3
- Test 3: Bỏ ghim tệp khỏi node1 và node2, chạy garbage collection
- Test 4: Lấy tệp từ node4 và node5
- Tóm tắt kết quả
Khi chạy các thử nghiệm này, hãy quan sát:
- Content addressing: Hoạt động thông qua CIDs (Content Identifiers)
- Chunking: Phân chia tệp lớn thành các phần có thể quản lý
- Merkle DAG: Cấu trúc liên kết các phân mảnh
- Content discovery: Diễn ra thông qua DHT
- Content distribution: Xảy ra theo nhu cầu thông qua Bitswap
- Pinning: Ảnh hưởng đến việc lưu trữ dữ liệu
- Garbage collection: Loại bỏ nội dung không được ghim
Để dọn dẹp các block và datastore nhưng giữ cấu hình:
# Dọn dẹp sandbox (xóa dữ liệu nhưng giữ cấu hình)
./manage-ipfs-sandbox.sh clean
Thao tác này sẽ:
- Dừng tất cả các node đang chạy
- Xóa nội dung trong thư mục
blocks
vàdatastore
của mỗi node - Giữ nguyên cấu hình node và swarm key
Nếu bạn muốn xóa hoàn toàn môi trường sandbox:
# Đầu tiên, dừng tất cả các node
./manage-ipfs-sandbox.sh stop
# Sau đó xóa thư mục sandbox
rm -rf ~/ipfs-sandbox
Đôi khi các tiến trình IPFS có thể không dừng lại đúng cách thông qua script quản lý. Dưới đây là các cách để kill các tiến trình IPFS đang chạy:
# Dừng tất cả các node
./manage-ipfs-sandbox.sh stop
# Hoặc dừng một node cụ thể
./manage-ipfs-sandbox.sh stop 2
Nếu script không dừng được tiến trình, bạn có thể tìm và kill thủ công:
# Tìm tất cả các tiến trình IPFS đang chạy
ps aux | grep ipfs
# Kill tiến trình theo PID
kill <PID>
# Kill tiến trình một cách mạnh mẽ nếu không phản hồi
kill -9 <PID>
# Hoặc kill tất cả các tiến trình IPFS cùng lúc
pkill -f ipfs
# Kill mạnh tất cả các tiến trình IPFS
pkill -9 -f ipfs
Sau khi kill tiến trình, kiểm tra xem còn tiến trình nào đang chạy không:
ps aux | grep ipfs
Nếu sau khi kill tiến trình, bạn vẫn gặp vấn đề khi khởi động lại node, hãy xóa file khóa:
# Xóa file khóa của một node cụ thể
rm ~/ipfs-sandbox/node2/repo.lock
# Hoặc xóa tất cả các file khóa
rm ~/ipfs-sandbox/node*/repo.lock
Nếu node không thể khởi động:
- Kiểm tra logs:
cat ~/ipfs-sandbox/logs/nodeX.log
- Xóa tệp khóa:
rm ~/ipfs-sandbox/nodeX/repo.lock
- Khởi động lại node:
./manage-ipfs-sandbox.sh restart X
- Kiểm tra cấu hình bootstrap:
export IPFS_PATH=~/ipfs-sandbox/node1 ipfs bootstrap list
- Xác minh kết nối swarm:
export IPFS_PATH=~/ipfs-sandbox/node1 ipfs swarm peers