Distro WSL yang kupakai sehari-hari masih Ubuntu 22.04, dan isinya sudah menumpuk: puluhan proyek, kunci, token, konfigurasi Claude Code, sampai repo yang tidak punya remote sama sekali. Mau pindah ke 24.04 tanpa kehilangan apa pun, dan sekalian merapikan siapa boleh berbuat apa. Catatan singkat ini soal keputusan-keputusan di balik prosesnya, dikerjakan bareng Claude Code.
Bergantian, Bukan Berdampingan
Awalnya terpikir enak juga kalau 22.04 dan 24.04 hidup bersamaan selama masa transisi. Ternyata itu ide buruk: dua distro WSL2 berbagi satu VM, satu IP, dan satu network namespace. Loopback, port, dan iptables-nya sama. Kalau keduanya memegang koneksi SSH ke server, tunnel, mount, atau dockerd, mereka saling merusak.
Jadi aturannya: hanya satu distro Running pada satu waktu. 22.04 jadi cadangan dingin (dihentikan, tidak dihapus) sampai 24.04 terbukti. Sebelum memulai, aku ukur dulu apakah ada layanan produksi yang jalan di WSL. Tidak ada: produksi ada di server, WSL hanya untuk kerja dev. Menghentikan 22.04 tidak mematikan apa pun yang dipakai orang lain.
Dua larangan yang berlaku di setiap langkah: jangan wsl --shutdown (mematikan semua distro), dan jangan wsl --unregister tanpa persetujuan eksplisit di saat itu.
Dua User, Satu Distro
Di 24.04 aku bikin dua user:
sindhu: admin, punya sudo, menjalankan skrip sistem.claudeai: menjalankan Claude Code. Tanpa sudo, hanya memegang kunci SSH miliknya sendiri, dan interop Windows serta akses/mnt/cdikunci lewatwsl.conf.
Idenya sederhana: agen yang bekerja di mesin ini cukup punya akses yang dibutuhkan proyek, bukan akses penuh ke semuanya. Satu catatan jujur: claudeai kumasukkan ke grup docker karena memang perlu, dan itu setara akses root di distro ini. Jadi ini pengurangan risiko, bukan batas keamanan mutlak.
Skrip Bertahap dengan Penjaga
Migrasinya bukan satu skrip raksasa, tapi rangkaian skrip kecil bernomor, dan tiap skrip menolak jalan di distro atau user yang salah:
| Tahap | Di | Fungsi |
|---|---|---|
preflight, verify-export |
22.04 | baca-saja; pemeriksa sebelum jendela, dan GO/NO-GO sebelum 22.04 dihentikan |
export-* |
22.04 | ekspor identitas, proyek, dan item home yang sengaja dibawa |
01–03 |
24.04 | paket, user, Docker, impor identitas, wsl.conf |
04–07 |
24.04 | Node dan uv, Claude Code, konfigurasi, MCP |
import-projects, audit-paths |
24.04 | pasang proyek, lalu cari path yang tertanam dan sekarang salah |
Urutan cutover-nya ditulis di satu runbook, tiap langkah punya pembuktian (“lanjut hanya kalau ✔ ini lulus”), dan langkah yang tidak bisa dibatalkan ditandai ⚠ supaya minta persetujuan dulu. Intinya:
- Hentikan yang hidup (sesi lain, layanan, mount) dengan rapi.
- Ekspor, lalu
verify-exportharus GO. NO-GO berarti berhenti dan perbaiki. - Beku: sesudah verifikasi tidak ada lagi perubahan di 22.04.
wsl --terminate, laluwsl --exportuntuk backup, lalu pasang 24.04.- Jalankan skrip 24.04 satu per satu, baca keluarannya, uji per proyek.
Hal-hal yang Tidak Kusangka Perlu Diurus
- Repo tanpa remote. Beberapa repo hanya ada di disk ini. Ekspornya pakai
git bundleditambah perubahan yang belum di-commit, lalu setelah impor dibandingkanHEAD-nya dengan catatan ekspor. - Path yang tertanam. Workspace berpindah dari
/home/sindhu/...ke/home/claudeai/workspace. Hasil audit: hanya dua skrip yang benar-benar rusak (satucddi skrip deploy, satu path di skrip sinkronisasi), tapi puluhan dokumen masih menyebut path lama dan menyesatkan. - Memory Claude Code terkunci ke path. Memory yang lama tidak otomatis terbaca di path baru. Daripada memuat semuanya mentah-mentah, catatan lamanya kubawa ke satu folder untuk disortir: dibuang, digabung ke memory proyek yang benar, atau dinaikkan jadi aturan di
CLAUDE.md. - Konfigurasi sistem tidak ikut
$HOME. Drop-in sudoers lama sengaja tidak disalin. Itu rancangan lama dengan jalur eskalasi yang sudah kucabut di tempat lain;claudeaimulai tanpa sudo, dan kalau kelak perlu satu perintah root, dibuatkan aturan sempit untuk perintah itu saja. - Folder transfer berisi rahasia. Staging di sisi Windows memuat kunci dan token, jadi masuk daftar yang harus dihapus setelah semuanya terbukti, dan backup tidak boleh ditaruh di folder yang disinkronkan.
Status dan Yang Belum Teruji
Per tulisan ini aku sudah bekerja di 24.04 sebagai claudeai, dan 22.04 masih disimpan dalam keadaan Stopped sebagai cadangan 1–2 minggu sebelum dipertimbangkan untuk dihapus. Tapi daftar centang belum bersih semua: serah-terima beberapa layanan dan triase memory lama masih terbuka.
Dan sebagian skrip dulunya hanya diuji di 22.04 dengan HOME palsu: ekspor, impor proyek, verifikasi, dan pemasangan konfigurasi. Yang butuh instalasi dan jaringan sungguhan (paket, Docker, wsl.conf) baru benar-benar teruji saat dijalankan di 24.04, jadi perlakuannya tetap sama: jalankan satu per satu, baca keluarannya.
Pelajaran
- Dua distro WSL2 bukan dua mesin. Kalau berbagi IP dan network namespace, “jalan berdampingan” itu mitos.
- Skrip yang menolak jalan di tempat salah lebih murah daripada pemulihan setelah salah jalan.
- Backup 22.04 sebagai cadangan dingin membuat keputusan lain jadi tenang: rollback cuma
terminatesatu distro dan nyalakan yang lain. - Ukur dulu sebelum memutuskan. Cek “apa yang benar-benar hidup di sini?” mengubah migrasi dari operasi berisiko jadi pindahan biasa.