ductn là private package của DiepXuan, phát hành qua DiepXuan PPA Package Repository. Dự án ban đầu dùng nhiều Bash script trong src/var/lib/; hiện đang được migrate dần sang Python CLI trong src/ductn.py và các module src/utils/.
- Package source:
diepxuan - Package chính:
ductn - Package phụ:
lar,m2,ductn-ll - Version hiện tại: xem
src/debian/changelog - CLI mới: Python, entrypoint
src/ductn.py - Legacy CLI: Bash scripts trong
src/var/lib/ - Migration tracking:
TASKS.md
Dự án chưa migrate xong. Một số chức năng Python đã dùng được, nhiều chức năng Bash cũ vẫn còn nằm trong src/var/lib/ và chưa có bản Python tương đương.
Package này gom các công cụ vận hành hệ thống nội bộ DiepXuan:
- Quản lý thông tin hệ thống, network, route, DNS, service.
- Hỗ trợ thao tác APT và sửa lỗi repository phổ biến.
- Hỗ trợ môi trường Laravel/Magento thông qua package
larvàm2. - Cài đặt service, cron, MOTD, bash completion và tiện ích CLI dùng hằng ngày.
- Chuẩn hóa một số workflow vận hành trên Linux/macOS.
Cài từ DiepXuan PPA:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys CF8545DBEDD9351A
curl -s https://ppa.diepxuan.com/install.sh | sudo bash
sudo apt install ductnKiểm tra version:
ductn -vChạy trực tiếp từ source:
PYTHONPATH=src python3 src/ductn.py --help
PYTHONPATH=src python3 src/ductn.py d_commandsCài dependencies Python nếu môi trường chưa có:
python3 -m pip install -r src/requirements.txtLưu ý: khi chạy bằng quyền root, module Python cấu hình log tại /var/log/ductnd/ductnd.log. Môi trường sandbox/read-only có thể không ghi được path này.
.
├── README.md # Tài liệu tổng quan dự án
├── TASKS.md # Kế hoạch migrate Bash sang Python
├── bash/ # Bash aliases dùng cho shell
├── ci/ # Script publish/build package
├── deprecated/ # Mã/config cũ đã tách khỏi path chính
├── src/
│ ├── ductn.py # Python CLI entrypoint
│ ├── ductn.sh # Wrapper shell cho CLI
│ ├── requirements.txt # Python dependencies
│ ├── debian/ # Debian packaging metadata
│ ├── utils/ # Python command modules
│ └── var/lib/ # Legacy Bash command library
└── task/ # PowerShell scripts cho Windows
src/ductn.py tạo CLI bằng argparse. Các command được đăng ký tự động qua decorator @register_command trong src/utils/registry.py.
Quy ước hiện tại:
- Function Python dạng
d_dns_cleanđược expose thành commanddns:clean. - Function Python dạng
d_ip_localđược expose thành commandip:local. - Command list được gom trong
COMMANDSvà in ra bằngd_commands. - Module Python mới nên đặt trong
src/utils/và import tạisrc/utils/__init__.py.
| Nhóm | Command/function chính | Mục đích |
|---|---|---|
| About | d_help, d_version, d_version_newrelease |
Help/version |
| Command | d_commands |
Liệt kê command đã đăng ký |
| Network/IP | d_ip_local, d_ip_locals, d_ip_wan |
IP local/WAN |
| Interface | d_interface_default, d_interface_service |
Interface/service active |
| Route | d_route_default, d_route_monitor |
Route mặc định, monitor route |
| DNS | d_dns_clean, d_dns_reset, d_dns_disable, d_dns_resolved, d_dns_watch |
Quản lý DNS Linux/macOS |
| APT | d_apt_fix, d_apt_check, d_apt_install, d_apt_remove, d_apt_uninstall |
Quản lý package APT |
| Host | d_host_name, d_host_domain, d_host_fullname |
Hostname/domain/FQDN |
| OS | d_os_codename, d_os_release, d_os_distro, d_os_architecture, d_os_type |
Thông tin OS |
| System | d_sys_update, d_update, d_sys_info |
Update và system info |
| Service | d_service, d_service_install, d_service_start, d_service_stop, d_service_restart, d_service_status, d_service_watch |
Service daemon |
| File | d_file_cleanpath |
Chuẩn hóa tên/path file |
| VM | d_vm_info, d_vm_sync |
Thông tin/sync VM |
| WireGuard | d_wg_stop |
Dừng WireGuard |
| Environment | d_env_detect |
Detect VM/container/environment |
| Alias | d_alias_ll |
Alias ll |
Các Bash script cũ nằm ở src/var/lib/. Đây là nguồn chức năng ban đầu của dự án và vẫn còn nhiều phần chưa migrate.
Một số nhóm Bash legacy còn tồn tại:
alias.sh,completion.sh,functions.sh,main.shapt.shđã migrate và đưa vào deprecated theoTASKS.mddns.shđã migrate và đưa vào deprecated theoTASKS.mdcronjob.sh,csf.sh,curl.sh,ddns.sh,dhcpd.shdisk.sh,env.sh,environment*.sh,file.sh,git.sh,gpg.shhost.sh,httpd.sh,ip.sh,log.sh,os.sh,port.sh,route.shserver.sh,service.sh,ssh.sh,ssl.sh,swap.sh,sys.shufw.sh,user.sh,vm.sh,vpn.sh,wg.sh- macOS-specific scripts trong
src/var/lib/macos/
Khi migrate, không xóa Bash cũ ngay nếu chưa chắc command Python tương đương đã đủ hành vi. Nên chuyển sang deprecated/ sau khi đã test và cập nhật TASKS.md.
Mục tiêu migration:
- Chuyển từng nhóm Bash command thành module Python trong
src/utils/. - Giữ tương thích tên command CLI hiện có nếu có người dùng đang phụ thuộc.
- Hỗ trợ Linux và macOS rõ ràng trong từng module.
- Ghi rõ command nào đã migrate, command nào pending trong
TASKS.md. - Chỉ deprecate Bash script sau khi bản Python đã chạy ổn.
Quy trình đề xuất cho mỗi nhóm command:
- Đọc Bash script trong
src/var/lib/<name>.sh. - Liệt kê command/function public cần giữ.
- Tạo hoặc cập nhật
src/utils/<name>.py. - Đăng ký command bằng
@register_command. - Cập nhật import trong
src/utils/__init__.py. - Test command trên môi trường phù hợp.
- Cập nhật
TASKS.mdvà README nếu command mới quan trọng. - Chuyển Bash script sang
deprecated/khi đủ điều kiện.
Metadata Debian nằm trong src/debian/:
src/debian/control: danh sách package và dependencies.src/debian/changelog: version/release history.src/debian/*.install: mapping file vào từng binary package.src/debian/rules: rule build package.
Script build chính:
cd src
./build.shKhông tự ý sửa các file packaging nhạy cảm nếu không có yêu cầu rõ ràng:
src/debian/controlsrc/debian/changelog.github/workflows/build.yml
Python dependencies nằm trong src/requirements.txt:
distrorequestsrichargcompletepsutilnetifacesipaddress- Pin riêng cho macOS cũ:
urllib3<2,requests<2.28
System dependencies chính được khai báo trong src/debian/control, gồm net-tools, jq, curl, bash-completion, openssl, unzip, apt-transport-https, sudo, dnsutils, lsof và Python build dependencies.
- Không làm trực tiếp trên
mainkhi có code change lớn. - Mỗi task nên có branch riêng.
- Không push/PR/merge khi chưa được phép.
- Không commit secrets,
.env, token hoặc API key. - Không sửa production config nếu không có yêu cầu rõ.
- Mọi module mới hoặc thay đổi hành vi quan trọng cần cập nhật tài liệu.
Môi trường dev có thể thiếu ripgrep. Dùng tạm:
find . -type fhoặc cài ripgrep trong môi trường dev nếu được phép.
Khi chạy bằng root trong môi trường read-only/sandbox, import src/utils/__init__.py có thể lỗi vì không ghi được /var/log/ductnd/ductnd.log.
Cách xử lý:
- Chạy trong môi trường có quyền ghi
/var/log/ductnd. - Hoặc chỉnh logging để fallback stdout khi không ghi được log file trong task riêng.
Kiểm tra TASKS.md và Bash script tương ứng trong src/var/lib/. Nếu chưa migrate, chưa nên xóa Bash script.
TASKS.md: backlog migration Bash sang Python.AGENTS.md: quy trình vận hành agent trong workspace.SOUL.md,USER.md,IDENTITY.md: context vận hành nội bộ.deprecated/README.md: ghi chú khu vực deprecated.