यह ब्लॉग Nintendo Wii पर होस्ट किया गया है
(blog.infected.systems)- एक वास्तविक Nintendo Wii, NetBSD 10.1 और
lighttpdके साथ एक static Hugo ब्लॉग सर्व कर रहा है, और जब तक यह प्रयोग जारी है, पाठक वही पेज देख रहे हैं जो सीधे Wii से दिए जा रहे हैं - Wii के लिए NetBSD पोर्ट, पुराने शौकिया पोर्ट्स से अलग, नवीनतम stable release और daily HEAD builds प्रदान करता है, इसलिए इसका मेंटेनेंस इतना अच्छा है कि इस पर वास्तविक production workload चलाकर देखा जा सके
- इंस्टॉलेशन का प्रवाह Wii softmodding से Homebrew Channel चलाने, SD कार्ड पर
wii.img.gzलिखने, फिर SSH, static networking,pkgin, औरlighttpdकॉन्फ़िगर करने का है - Wii का PowerPC 750-परिवार single-core CPU static HTTP संभाल सकता है, लेकिन आधुनिक TLS encryption requests को बड़े पैमाने पर parallel में संभालना कठिन है, इसलिए Caddy सामने TLS termination और ACME certificate management संभालता है
- reboot के बाद Wiimote और sensor bar की ज़रूरत पड़ने जैसी सीमाएँ थीं, लेकिन idle power लगभग 18W और मासिक बिजली उपयोग लगभग 13.2kWh होने से यह खिलौने जैसा प्रयोग भी वास्तविक infrastructure learning environment बन गया
Wii पर वास्तविक ब्लॉग सर्व करने का प्रयोग
- प्रयोग के दौरान एक वास्तविक Nintendo Wii यह ब्लॉग सर्व कर रहा है
- Wii का system load live(-ish) status page पर देखा जा सकता है
- शुरुआत एक सामान्य operating system को ऐसे hardware पर चलाने की दिलचस्पी से हुई जो मूल रूप से general-purpose उपयोग के लिए नहीं था
- पहले भी PS3 पर Yellow Dog Linux, PS2 Linux, Dreamcast Linux, और PSPLinux जैसे उदाहरण रहे हैं
- लेकिन PSP Linux kernel image आख़िरी बार 2008 में build हुई थी, और Dreamcast Linux 2001 में build किए गए 2.4.5 kernel का उपयोग करता था, इसलिए वे long-term production workload के लिए उपयुक्त नहीं थे
NetBSD का Wii पोर्ट इस प्रयोग को संभव बनाता है
- NetBSD वेबसाइट के installation media section में Wii को Raspberry Pi और सामान्य x86 machines जैसे first-class targets के साथ दिखाया गया है
- Wii के लिए NetBSD पोर्ट 2024 दिसंबर की NetBSD 10.1 latest stable release से जुड़ा है
- daily HEAD builds भी Wii के लिए कॉन्फ़िगर की जाती हैं
- क्योंकि इसका मेंटेनेंस सक्रिय था, इसलिए Wii पर वास्तविक production workload deploy करने का यह प्रयोग संभव हुआ, और वही workload यह ब्लॉग है
हार्डवेयर और प्रदर्शन की शर्तें
- प्रयोग में इस्तेमाल किया गया Wii EMF Camp 2024 Swap Shop से लिया गया था
- Wii का single-core Broadway CPU, IBM PowerPC 750 परिवार की आगे की कड़ी है
- इस परिवार का इतिहास 1998 के Apple Bondi Blue iMac तक जाता है
- इसी श्रेणी का commercial chip PowerPC 750CL अधिकतम 9.8W TDP तक जाता है, और इसका clock Wii में लगे संस्करण से लगभग 33% अधिक है
- single-core, 1990s के अंत की architecture, और 10W से कम TDP के कारण इसकी compute performance सीमित है
- PowerPC 750 परिवार का उपयोग space और satellite क्षेत्रों में भी हुआ है, और इसका radiation-hardened संस्करण RAD750 मौजूद है
- NASA के दस्तावेज़ों में PowerPC 750 के उपयोग के उदाहरण मिलते हैं
- Mars Curiosity) और Perseverance) rovers में भी संबंधित chips के उपयोग के उदाहरण हैं
Wii softmodding और NetBSD इंस्टॉलेशन
- Wii पर unsigned code चलाने के लिए Wilbrand exploit का उपयोग किया गया
- Wilbrand, Wii Message Board में SD कार्ड के जरिए messages save/load करने की सुविधा का उपयोग करके unsigned code execution संभव बनाता है
- इस प्रक्रिया से HackMii boot किया गया और Homebrew Channel इंस्टॉल किया गया
- इस काम के लिए console का MAC address और SD कार्ड पर रखी जाने वाली files तैयार करनी पड़ती हैं, जिसे browser-based tool संभालता है
- बड़े SDHC कार्ड पर Wilbrand चलाने में समस्या आई, और 1GB non-SDHC कार्ड पर यह सबसे अच्छा चला
- NetBSD के लिए SD कार्ड NetBSD साइट से
wii.img.gzimage डाउनलोड करके तैयार किया गया- Wii, SDXC या उससे बड़े कार्ड सपोर्ट नहीं करता, इसलिए 32GB तक सीमित है
- NetBSD, Wilbrand की तुलना में बड़े कार्ड्स पर कम संवेदनशील था, इसलिए तेज़ और अच्छी गुणवत्ता वाला 32GB SDHC कार्ड चुना गया
- Raspberry Pi Imager का उपयोग करने पर image decompression, writing, और verification एक साथ हो जाते हैं
- NetBSD Wii image में ऐसी metadata और directory structure है कि इसे Homebrew Channel से एक सामान्य homebrew app की तरह सीधे boot किया जा सकता है
- Wii पोर्ट के मुख्य लेखक प्रतीत होने वाले NetBSD developer Jared McNeill को इसका श्रेय जाता है
प्रारंभिक सिस्टम कॉन्फ़िगरेशन
- NetBSD boot होने के बाद USB keyboard ठीक से काम करता है, लेकिन remote management के लिए SSH सेट किया गया
- SSH daemon डिफ़ॉल्ट रूप से चल रहा होता है, और
rootpassword सेट करने तथाsshd_configमेंPermitRootLogin yesजोड़ने की ज़रूरत होती है - static network configuration
/etc/ifconfig.axe0को संपादित करके की जाती है - network adapter के रूप में आधिकारिक RVL-015 Wii LAN Adapter इस्तेमाल किया गया
dmesgमें यह ASIX Electronics AX88772 USB 2.0 10/100 Ethernet controller के रूप में दिखता है- NetBSD boot होने के बाद NetBSD driver उपलब्ध होता है, इसलिए सैद्धांतिक रूप से सामान्य USB adapters भी काम कर सकते हैं
पैकेज प्रबंधन और वेब सर्वर कॉन्फ़िगरेशन
- NetBSD का
pkginpackage manager, environment variables सेट करने के बादpkg_add pkginसे इंस्टॉल किया गया - package path के रूप में
https://cdn.NetBSD.org/pub/pkgsrc/packages/NetBSD/evbppc/10.1/All/इस्तेमाल किया गया - इंस्टॉल किए गए packages में
bsdfetch,iperf3,lighttpd,nano,rsyncशामिल थे - resource-constrained environment के लिए lighttpd वेब सर्वर चुना गया
lighttpdकी example rc script को/etc/rc.dमें कॉपी किया गया,/etc/rc.confमेंlighttpd=YESजोड़ा गया, और फिर इसे शुरू किया गया- डिफ़ॉल्ट static content path
/srv/www/htdocsहै - ब्लॉग, Hugo से build किए गए static pages का संग्रह था, इसलिए
rsyncसे files कॉपी करने के बाद इसे सीधे standard HTTP पर सर्व किया जा सका
TLS लोड और Caddy reverse proxy
- लंबे समय तक किए गए load tests से पता चला कि PowerPC 750 कई encrypted modern TLS pages को एक साथ सर्व करते समय दबाव महसूस करता है
- resources बचाने के लिए NetBSD में डिफ़ॉल्ट रूप से चलने वाली कुछ services बंद की गईं
devpubd,dhcpcd,inetd,mdnsd,postfixबंद किए गए/etc/mailer.confमेंsendmail,mailq,newaliasesको/bin/trueमें बदला गया ताकि संबंधित processes चलें ही नहीं
ntpdसिस्टम RAM का 15.6% उपयोग कर रहा था, इसलिए उसे बंद किया गया- समय समकालिकता ज़रूरी होने के कारण
ntpdate time.cloudflare.comको हर घंटे:42पर चलाने के लिएcrontabमें जोड़ा गया - अंततः ब्लॉग का TLS termination Wii के सामने रखे Caddy instance ने संभाला
- Caddy reverse proxy की तरह काम करता है और encryption व ACME certificate management संभालता है
- Caddy में caching option चालू नहीं है
- सभी requests सीधे Wii ही संभालता है, और इस लेख की images सहित पूरा page load लगभग ठीक 1MB है
- Caddy layer पर ज्ञात scrapers के User-Agent requests ब्लॉक किए गए ताकि वे Wii तक न पहुँचें
- ब्लॉकिंग के लिए known scraper User Agents का उपयोग किया गया
स्टेटस मॉनिटरिंग कॉन्फ़िगरेशन
- TLS termination को Caddy पर ले जाने से Caddy का Prometheus exporter उपयोग करना संभव हो गया
- इस data को InfluxDB + Grafana stack में लाकर site load मॉनिटर किया गया
- Wii पर स्वयं Prometheus exporter जैसी कोई अतिरिक्त process नहीं चलाई गई
- इसके बजाय एक सरल shell script बनाई गई, जिसे
crontabसे हर 15 मिनट पर चलाकर system status को web root में HTML file के रूप में आउटपुट किया गया - status page पर
uname -a,uptimeजैसी जानकारी दिखाई देती है - पूरा status page blog.infected.systems/status पर देखा जा सकता है
संचालन संबंधी सीमाएँ और बिजली उपयोग
- पूरी setup अपेक्षा से कहीं बेहतर चली और इंस्टॉलेशन भी आसान था
- NetBSD reboot करने पर सिर्फ NetBSD app restart नहीं होती, बल्कि पूरा Wii console reboot होकर Wii Menu पर लौट आता है
- kernel patch या system upgrade के बाद Wiimote और sensor bar संचालन अवसंरचना के अनिवार्य हिस्से बन जाते हैं
- UPS monitoring आधारित test में पाया गया कि idle स्थिति में Wii, पूरे homelab की खपत में लगभग 18W जोड़ता है
- गणना के अनुसार मासिक बिजली उपयोग लगभग 13.2kWh है
- UK की बिजली दरों के अनुसार यह लगभग £3.47 प्रति माह बैठता है, जो कुछ cloud providers के VPS से सस्ता है
- यह लंबे weekend का एक मज़ेदार प्रयोग था, और अगर सब ठीक चलता रहा तो इसे कुछ समय तक बनाए रखने की योजना है
- लेखक को ऐसे प्रयोगों में रुचि है क्योंकि कृत्रिम सीमाओं वाले deployment environments में सीखने का अनुभव अच्छा मिलता है
फरवरी 2026 अपडेट
- लेख प्रकाशित होने के बाद कई लोगों ने बताया कि Wii को सीधे NetBSD में boot कराने का तरीका मौजूद है
- तरीका है Priiloader इंस्टॉल करना, और NetBSD को auto-boot करने वाले Homebrew app के रूप में सेट करना
- इस सेटअप के साथ mission-critical Wiimote के बिना भी पूरी तरह headless operation संभव है
2 टिप्पणियां
मुझे वह समय याद आ रहा है जब मैं इस्तेमाल न होने वाले Android फोन पर Debian डालकर वेब सर्वर चलाया करता था।
शुरू में यह देखकर अजीब लगा कि Caddy और lighttpd दोनों साथ में क्यों इस्तेमाल हो रहे हैं, लेकिन लगता है कि केवल static फ़ाइलें Wii पर serve की जा रही हैं और बाकी सब किसी दूसरी मशीन के Caddy पर हैं।