nonlaOS là dự án Linux desktop tiếng Việt dựa trên Debian stable/trixie, dùng KDE Plasma, hướng tới người chuyển từ Windows sang Linux.
Repo này chứa nền móng packaging, APT repository, live-build ISO và release pipeline. Mọi thay đổi hệ thống phải đi qua Debian package, không sửa ISO thủ công.
- Debian stable/trixie làm base.
- KDE Plasma làm desktop mặc định.
- Hỗ trợ tiếng Việt, font và bộ gõ phù hợp.
- Có nhận diện nonlaOS đầu tiên qua logo, wallpaper, KDE color scheme, SDDM và Plymouth.
- Build package, APT repo và ISO bằng script/CI có thể lặp lại.
- Release artifact có chữ ký APT repo và checksum ISO.
- Không phần mềm lậu, crack, keygen hoặc asset không rõ license.
- Không sửa ISO thủ công.
- Package hóa mọi thay đổi hệ thống.
- Private key không bao giờ được commit.
- Không hardcode domain public của nonlaOS trong source.
packages/ Debian package source
iso/ live-build config
tools/ build, repo, signing, release scripts
docs/ roadmap, testing, packaging notes
img/ asset nội bộ của nonlaOS
artwork/ artwork source sau này
nonla-desktop: metapackage kéo KDE desktop stack, app cơ bản và các package nhận diện/cấu hình của nonlaOS.nonla-branding: logo, icon và metadata nhận diện riêng của nonlaOS, chưa thay thế/etc/os-release. Package cũng ship ASCII/ANSI logo màu sinh từimg/boot_logo.pngbằngtools/generate-ascii-logo.py.nonla-look: wallpaper, KDE color schemeNonla, look-and-feel skeleton, SDDM theme, Plymouth theme.nonla-default-settings: seed cấu hình user mới qua/etc/skel, bật FCITX5 qua/etc/environment.d, cấu hình fastfetch/neofetch, không ghi đè user hiện có.nonla-calamares-config: cấu hình Calamares ban đầu, branding installer nonlaOS và launcherInstall nonlaOScho live session.nonla-repo-keyring: public archive key để verify APT repo nonlaOS.
sudo apt-get update
sudo apt-get install -y build-essential devscripts dpkg-dev debhelper lintian
./tools/build-packages.shOutput:
dist/packages/
Lint:
lintian dist/packages/*.debsudo apt install dpkg-dev apt-utils gzip
./tools/build-packages.sh
./tools/make-repo.shOutput:
dist/repo/
Test local repo chưa ký bằng file://:
REPO_PATH="$(pwd)/dist/repo"
echo "deb [trusted=yes] file:${REPO_PATH} stable main" | \
sudo tee /etc/apt/sources.list.d/nonla-local.list
sudo apt update
apt-cache policy nonla-desktopVí dụ public repo khi deploy:
deb [signed-by=/usr/share/keyrings/nonla-archive-keyring.gpg] https://YOUR_EXISTING_REPO_DOMAIN/path/to/repo stable main
Domain thật được cấu hình ở hạ tầng deploy. Domain riêng cho nonlaOS xử lý sau.
Archive key hiện tại:
uid: nonlaOS Archive Signing Key
fingerprint: 6A41 9F7B EF2D D819 B80F 3ECF 9E06 44E3 BBCF FFC3
Public key được commit trong:
packages/nonla-repo-keyring/src/nonla-archive-key.asc
packages/nonla-repo-keyring/src/nonla-archive-keyring.gpg
Private key local nằm trong dist/keys/private/ và bị .gitignore bỏ qua.
Tạo key mới khi rotate:
GNUPGHOME="$(mktemp -d)"
chmod 700 "$GNUPGHOME"
export GNUPGHOME
gpg --batch --pinentry-mode loopback --passphrase "" \
--quick-generate-key "nonlaOS Archive Signing Key" rsa4096 sign 3y
KEY_FPR="$(gpg --batch --with-colons --list-secret-keys \
"nonlaOS Archive Signing Key" | awk -F: '/^fpr:/ {print $10; exit}')"
gpg --armor --export "$KEY_FPR" > packages/nonla-repo-keyring/src/nonla-archive-key.asc
gpg --export "$KEY_FPR" > packages/nonla-repo-keyring/src/nonla-archive-keyring.gpg
gpg --armor --export-secret-keys "$KEY_FPR" > dist/keys/private/nonla-archive-private-key.ascKý repo:
./tools/build-packages.sh
./tools/make-repo.sh
NONLA_ARCHIVE_PRIVATE_KEY_FILE=dist/keys/private/nonla-archive-private-key.asc \
./tools/sign-repo.shVerify repo:
gpgv --keyring packages/nonla-repo-keyring/src/nonla-archive-keyring.gpg \
dist/repo/dists/stable/InRelease
gpgv --keyring packages/nonla-repo-keyring/src/nonla-archive-keyring.gpg \
dist/repo/dists/stable/Release.gpg \
dist/repo/dists/stable/ReleaseSet GPG private key:
gh secret set NONLA_ARCHIVE_PRIVATE_KEY < dist/keys/private/nonla-archive-private-key.ascNếu key có passphrase:
gh secret set NONLA_ARCHIVE_KEY_PASSPHRASESet SourceForge secrets:
gh secret set SOURCEFORGE_USER
gh secret set SOURCEFORGE_PROJECT
gh secret set SOURCEFORGE_SSH_PRIVATE_KEY < path/to/sourceforge_deploy_keyCustom release path nếu cần:
gh secret set SOURCEFORGE_RELEASE_PATHMặc định:
/home/frs/project/${SOURCEFORGE_PROJECT}/
SourceForge FRS dùng restricted shell, nên script không tự tạo thư mục release
bằng SSH. Nếu muốn upload vào subfolder như nonlaOS/0.1-alpha/, hãy tạo folder
đó trước trong SourceForge UI rồi set SOURCEFORGE_RELEASE_PATH.
ISO chính thức build bằng GitHub Actions workflow:
.github/workflows/build-iso.yml
Workflow chỉ chạy thủ công qua workflow_dispatch:
- Vào tab Actions.
- Chọn ISO build.
- Chọn Run workflow trên branch
main. - Tải artifact
nonlaos-isosau khi run xong.
Artifact ISO gồm:
nonlaOS-0.1-alpha-amd64.iso
SHA256SUMS
SHA256SUMS.gpg
Workflow kiểm tra boot metadata và BIOS boot smoke test trước khi upload:
file dist/iso/nonlaOS-0.1-alpha-amd64.iso
isoinfo -d -i dist/iso/nonlaOS-0.1-alpha-amd64.iso
xorriso -indev dist/iso/nonlaOS-0.1-alpha-amd64.iso -report_el_torito plain
./tools/verify-iso-boot.shtools/build-iso.sh ưu tiên tạo ISO hybrid có BIOS + UEFI bootloader bằng
syslinux,grub-efi. Nếu live-build trên runner không hỗ trợ nhiều bootloader,
script fallback về BIOS syslinux để VirtualBox/QEMU vẫn boot được.
Live ISO branding được apply bằng live-build hooks trong iso/config/hooks/:
- seed config KDE từ
/etc/skelsang live user nếu home đã tồn tại trong chroot - chạy live-config component
9998-nonla-default-settingslúc boot để seed wallpaper/theme/launcher cho live user sau khi/home/userđã được tạo - đặt
/usr/lib/os-release,/etc/os-releasevà/etc/lsb-releasecủa live ISO thành nonlaOS để fetch tools hiển thị đúng distro - đặt Plymouth theme
nonlanếu Plymouth khả dụng - đổi GRUB/live boot menu sang nonlaOS best-effort
- giữ launcher
Install nonlaOStrên desktop và trong menu app
Nếu SourceForge secrets có đủ, workflow upload các file trên lên SourceForge. Nếu thiếu SourceForge secrets, workflow vẫn build và upload GitHub Actions artifacts, chỉ bỏ qua public upload.
Tải từ SourceForge sau khi upload:
https://sourceforge.net/projects/YOUR_SOURCEFORGE_PROJECT/files/
Verify checksum ISO:
gpgv --keyring packages/nonla-repo-keyring/src/nonla-archive-keyring.gpg \
SHA256SUMS.gpg \
SHA256SUMS
sha256sum -c SHA256SUMSLocal vẫn có thể chạy ./tools/build-iso.sh nếu môi trường đủ mạnh và có
live-build, nhưng CI là môi trường build ISO chính thức.
ASCII/ANSI logo cho fastfetch/neofetch được generate từ asset thật:
sudo apt-get install -y python3-pil
python3 tools/generate-ascii-logo.pyGenerator dùng img/launcher_icon.png, lấy màu từ pixel PNG thật và render
bằng ký tự ASCII thường, không dùng block glyph.
Output nằm tại:
packages/nonla-branding/payload/usr/share/nonlaos/ascii/nonlaos.ansi
