Nothing but Nix
เปลี่ยน GitHub Actions runner ของคุณให้กลายเป็นศูนย์พลังงาน Nix ❄️ ด้วยการกำจัดซอฟต์แวร์ที่ติดตั้งมาเกินความจำเป็นอย่างเด็ดขาด
GitHub Actions runner มีพื้นที่ดิสก์สำหรับ Nix เพียงเล็กน้อย ประมาณ ~20GB เท่านั้น Nothing but Nix กำจัดซอฟต์แวร์ที่ไม่จำเป็นอย่างโหดเหี้ยม ให้คุณมีพื้นที่สำหรับ Nix store 65GB ถึง 130GB! 💪
วิธีใช้งาน 🔧
เพิ่มการดำเนินการนี้ ก่อน ติดตั้ง Nix ในขั้นตอนการทำงานของคุณ:
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v4
- uses: wimpysworld/nothing-but-nix@main
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@main
- name: Run Nix
run: |
nix --version
# Your Nix-powered steps here...ข้อกำหนด ️✔️
- รองรับเฉพาะ Ubuntu GitHub Actions runners อย่างเป็นทางการเท่านั้น
- ต้องทำงาน ก่อน การติดตั้ง Nix
- macOS/Darwin runners: แอ็กชันนี้จะข้ามอย่างสุภาพพร้อมแจ้งเตือนหากทำงานบน macOS เนื่องจาก macOS runner มีพื้นที่เพียงพอสำหรับ Nix อยู่แล้วและไม่จำเป็นต้องใช้แอ็กชันนี้
- Windows runners: แอ็กชันนี้จะข้ามอย่างสุภาพพร้อมแจ้งเตือนหากทำงานบน Windows เนื่องจาก Windows runner มีรูปแบบไฟล์ระบบและข้อจำกัดที่แตกต่างกัน
ปัญหา: การจัดพื้นที่ให้ Nix เติบโต 🌱
GitHub Actions runners มาตรฐานเต็มไปด้วย "bloatware" ที่คุณจะไม่ได้ใช้ในการทำงานกับ Nix:
- 🌍 เว็บเบราว์เซอร์จำนวนมาก ต้องมีให้ครบ!
- 🐳 Docker images ที่ใช้พื้นที่ดิสก์เป็นกิกะไบต์
- 💻 รันไทม์ภาษาไม่จำเป็น (.NET, Ruby, PHP, Java...)
- 📦 ตัวจัดการแพ็กเกจที่เก็บฝุ่นดิจิทัล
- 📚 เอกสารที่ไม่มีใครอ่าน
ทางออก: มีแค่ Nix เท่านั้น ️❄️
Nothing but Nix ใช้วิธี "เผาไร่" กับ GitHub Actions runners และทวงคืนพื้นที่ดิสก์อย่างโหดเหี้ยมด้วยการโจมตีสองระยะ:
- ฟันรอบแรก: สร้าง volume
/nixขนาดใหญ่ (~65GB) ทันทีโดยใช้พื้นที่ว่างจาก/mnt - ระยะหลัง: ในขณะที่ workflow ของคุณดำเนินต่อ เราจะกำจัดซอฟต์แวร์ที่ไม่จำเป็นอย่างโหดเหี้ยมเพื่อขยาย volume
/nixให้ถึง ~130GB - เว็บเบราว์เซอร์? ไม่ต้อง ⛔
- Docker images? ลบออก 🗑️
- รันไทม์ภาษา? ขจัด 💥
- ตัวจัดการแพ็กเกจ? ทำลาย 💣
- เอกสาร? ระเหย ️👻
rmz (จากโครงการ Fast Unix Commands (FUC)) - ทางเลือกที่มีประสิทธิภาพสูงแทน rm ที่ทำให้การทวงคืนพื้นที่เร็วสุดๆ! ⚡
- เร็วกว่ามาตรฐาน
rmหลายเท่า - ลบไฟล์แบบขนานเพื่อประสิทธิภาพสูงสุด
- ทวงคืนพื้นที่ดิสก์ในวินาทีแทนนาที! ️⏱️
การเติบโตของ volume แบบไดนามิก
แตกต่างจากโซลูชันอื่น ๆ Nothing but Nix จะขยายปริมาณ /nix ของคุณแบบไดนามิก:
- การสร้างปริมาณเริ่มต้น (1-10 วินาที): (ขึ้นอยู่กับ Hatchet Protocol)
- สร้างอุปกรณ์ loop จากพื้นที่ว่างบน
/mnt - ตั้งค่าไฟล์ระบบ BTRFS ในการกำหนดค่า RAID0
- เมานต์พร้อมการบีบอัดและปรับแต่งประสิทธิภาพ
- ให้พื้นที่
/nixขนาด 65GB ทันที แม้ก่อนจะเริ่มกระบวนการ purge - การขยายแบบเบื้องหลัง (30-180 วินาที): (ขึ้นอยู่กับ Hatchet Protocol)
- ดำเนินการ purge
- เฝ้าดูพื้นที่ที่ถูกปลดปล่อยใหม่เมื่อบวมถูกกำจัด
- เพิ่มดิสก์ขยายไปยังปริมาณ
/nixแบบไดนามิก - ปรับสมดุลไฟล์ระบบเพื่อรวมพื้นที่ใหม่
/nix จะ ขยายโดยอัตโนมัติขณะทำงาน 🎩🪄เลือกอาวุธของคุณ: Hatchet Protocol 🪓
ควบคุมระดับการทำลายล้าง 💥 ด้วย input hatchet-protocol:
- uses: wimpysworld/nothing-but-nix@main
with:
hatchet-protocol: 'cleave' # Options: holster, carve, cleave (default), rampage#### เปรียบเทียบโปรโตคอล ⚖️
| โปรโตคอล | /nix | คำอธิบาย | ลบ apt | ลบ docker | ลบ snap | ระบบไฟล์ที่ถูกลบ |
|----------|--------|--------------------------------------------------|---------|-----------|---------|--------------------------|
| Holster | ~65GB | เก็บขวานไว้ในฝัก ใช้พื้นที่จาก /mnt | ไม่ | ไม่ | ไม่ | ไม่มี |
| Carve | ~85GB | ผสมผสานและนำพื้นที่ว่างจาก / และ /mnt มาใช้ | ไม่ | ไม่ | ไม่ | ไม่มี |
| Cleave | ~115GB | ตัดสินใจเฉียบขาด ลบแพ็กเกจขนาดใหญ่ | น้อยมาก | ใช่ | ใช่ | /opt และ /usr/local |
| Rampage | ~130GB | กำจัดขยะทุกอย่างอย่างโหดเหี้ยม | รุนแรง | ใช่ | ใช่ | มูอาฮาฮาฮา! 🔥🌎 |
เลือกให้ดี:
- Holster เมื่อคุณต้องการให้เครื่องมือ runner ใช้งานได้ครบถ้วน
- Carve เพื่อรักษาเครื่องมือ runner แต่ยึดพื้นที่ว่างทั้งหมดให้ Nix
- Cleave (ค่าเริ่มต้น) เพื่อสมดุลพื้นที่กับความสามารถในการทำงาน
- Rampage เมื่อต้องการพื้นที่ Nix สูงสุดและไม่แคร์ว่าอะไรจะพัง
#nix-is-life
เห็นกับตา เลือดสาด 🩸
โดยปกติ กระบวนการ purge จะทำงานเงียบ ๆ เบื้องหลังขณะ workflow ของคุณดำเนินต่อ แต่ถ้าคุณอยากดูการล้างบางแบบ real-time:
- uses: wimpysworld/nothing-but-nix@main
with:
️hatchet-protocol: 'cleave'
witness-carnage: true # Default: falseปรับแต่ง Safe Havens 🛡️
ควบคุมพื้นที่ที่ต้องกันไว้จากการจับจองของ Nix store ด้วยขนาด Safe Haven ที่กำหนดเอง:
- uses: wimpysworld/nothing-but-nix@main
with:
️hatchet-protocol: 'cleave'
root-safe-haven: '3072' # Reserve 3GB on the / filesystem
mnt-safe-haven: '2048' # Reserve 2GB on the /mnt filesystemพื้นที่ปลอดภัยเหล่านี้กำหนดว่าพื้นที่ (เป็น MB) จะถูกละเว้นไม่ถูกนำไปใช้คืนพื้นที่ได้มากเพียงใด:
- ค่าเริ่มต้นของ
root-safe-havenคือ 2048MB (2GB) - ค่าเริ่มต้นของ
mnt-safe-havenคือ 1024MB (1GB)
ให้สิทธิ์ผู้ใช้เป็นเจ้าของ /nix (กฎอนุญาตสิทธิ์ Nix) 🧑⚖️
บางโปรแกรมติดตั้งหรือการตั้งค่า Nix คาดหวังว่าไดเรกทอรี /nix จะสามารถเขียนโดยผู้ใช้ปัจจุบันได้ โดยค่าเริ่มต้น /nix จะเป็นของ root หากคุณต้องการให้ผู้ใช้เป็นเจ้าของ (เช่น สำหรับบางสคริปต์ติดตั้ง Nix ที่ไม่ได้ใช้ sudo กับทุกการดำเนินการใน /nix) คุณสามารถเปิดใช้ nix-permission-edict ได้:
- uses: wimpysworld/nothing-but-nix@main
with:
nix-permission-edict: true # Default: false
เมื่อ nix-permission-edict ถูกตั้งค่าเป็น true การดำเนินการจะรันคำสั่ง sudo chown -R "$(id --user)":"$(id --group)" /nix หลังจากเมานต์ /nixกำหนดค่า Nix ให้ใช้ /nix/build
การดำเนินการนี้จะสร้าง /nix/build สำหรับการสร้าง Nix derivation เพื่อใช้พื้นที่ที่ถูกเรียกคืน เพิ่ม build-dir ลงในการกำหนดค่า Nix ของคุณ:
- uses: cachix/install-nix-action@v31
with:
extra_nix_config: |
build-dir = /nix/build
หรือกับ DeterminateSystems:- uses: DeterminateSystems/nix-installer-action@main
with:
extra-conf: |
build-dir = /nix/build
นี่จะสั่งให้ Nix ทำการ build บน volume BTRFS ขนาดใหญ่แทนที่จะเป็นไดเรกทอรีชั่วคราวเริ่มต้นของระบบการแก้ไขปัญหา 🔍
"ไม่มีพื้นที่ว่างบนอุปกรณ์" ระหว่างการ build ขนาดใหญ่
หากการ build ของคุณพื้นที่เต็มทั้งที่ใช้แต่ Nix น่าจะเป็นเพราะการลบข้อมูลเบื้องหลังยังไม่เสร็จสิ้นก่อนที่ build ของคุณจะใช้พื้นที่ว่างหมด ปัญหานี้มักเกิดกับ:
- การทดสอบ VM ของ NixOS ที่ประกอบ image ดิสก์ขนาดใหญ่
- Build ที่มี dependencies จำนวนมากซึ่งไม่ได้ cache ไว้
- Rust toolchains และการ compile ขนาดใหญ่อื่นๆ
witness-carnage: true เพื่อบังคับให้มีการลบข้อมูลแบบ synchronous วิธีนี้จะรับประกันว่าพื้นที่ทั้งหมดจะถูกเคลียร์ ก่อน ที่ build ของคุณจะเริ่ม:- uses: wimpysworld/nothing-but-nix@main
with:
hatchet-protocol: 'rampage'
witness-carnage: trueสิ่งนี้จะเพิ่มเวลา 30-180 วินาทีในการตั้งค่าการทำงานของคุณ แต่รับประกันว่าพื้นที่สูงสุดจะพร้อมใช้งานเมื่อการสร้างของคุณเริ่มต้น
ตอนนี้ไปสร้างสิ่งที่ยอดเยี่ยมด้วยพื้นที่ Nix store อันรุ่งเรืองทั้งหมดนั้น! ❄️ --- Tranlated By Open Ai Tx | Last indexed: 2026-03-18 ---