
خادم ويب لاستغلال PS5 على Raspberry Pi يعمل بالطاقة من منفذ USB الخاص بـ PS5
استخدم Raspberry Pi OS Lite 64-bit، Bookworm أو أحدث مع NetworkManager. بطاقة SD بسعة 64 GB بها مساحة كافية. هذا يشغّل مضيف Python الحالي؛ لا تقم بكتابة ملف ESP32 الثنائي على الـ Pi أو بطاقة SD الخاصة به.
يقوم الـ Pi بإنشاء شبكة Wi-Fi للـ PS5. يقوم خادم DHCP الخاص به بتعيين عنوان IP
لوحدة التحكم ويخبرها باستخدام الـ Pi لخدمة DNS. يقوم DNS بترجمة
manuals.playstation.net إلى 192.168.4.1، حيث تقدم خوادم Python هذا
المشروع عبر HTTP و HTTPS. يؤدي فتح دليل مستخدم PS5 إلى تحميل الصفحة المحلية.
يقوم المثبّت بنسخ الموقع إلى /home/ps5، وتثبيت تبعياته،
وإنشاء شهادة TLS محلية موقّعة ذاتيًا، وإنشاء خدمات systemd.
يبدأ المضيف عند انتهاء التثبيت ويمكّنه عند كل إقلاع؛
لا تحتاج إلى إبقاء نافذة طرفية أو جلسة SSH مفتوحة.
تحتاج إلى Raspberry Pi مزوّد بـ Wi-Fi قادر على نقطة الاتصال، وبطاقة SD بها Raspberry Pi OS، ومصدر طاقة مناسب، واتصال بالإنترنت أثناء التثبيت. استخدم Ethernet للإعداد لأن Wi-Fi المدمج في الـ Pi يصبح نقطة الاتصال. اضبط بلد Wi-Fi على US إذا كنت تستخدم الـ Pi في الولايات المتحدة.
استنسخ هذا المستودع على الـ Pi، ثم شغّل المثبّت عبر SSH على Ethernet أو وحدة تحكم محلية:
sudo apt-get update
sudo apt-get install -y git
git clone https://github.com/flex36ty/ps5-pihost.git ~/ps5-selfhost
cd ~/ps5-selfhost
sudo bash setup-pi5.sh
على الرغم من اسم الملف، يتحقق المثبّت من قدرات Wi-Fi بدلاً من اشتراط Pi 5. لم يتم التحقق من الطُرز الأخرى على العتاد. يحتوي هذا المستودع على تثبيت السكربت فقط.
تنطبق تعليمات الأرشيف أدناه إذا استلمت ملف tar.gz المُحزَّم بشكل منفصل. بدلاً من ذلك، نزّل ملف ZIP الخاص بالمستودع، واستخرجه، وارفع محتوياته إلى الـ Pi.
استخدم Raspberry Pi Imager لتثبيت Raspberry Pi OS. قم بإعداد اسم مستخدم،
وكلمة مرور و SSH، واضبط بلد Wi-Fi الفعلي (أو استخدم sudo raspi-config
بعد الإقلاع). اتصل بـ Ethernet للتثبيت والوصول عن بُعد إن أمكن.
مكّن SSH في Imager، أو شغّل هذا من طرفية على الـ Pi:
sudo systemctl enable --now ssh
hostname -I
من Windows PowerShell، اتصل باستخدام اسم المستخدم وعنوان IP الخاص بـ Ethernet
للـ Pi، على سبيل المثال ssh [email protected].
استخدم نفس بيانات الاعتماد لـ SFTP على المنفذ 22؛ تسجيل دخول root غير مطلوب.
ارفع ps5-pi5-selfhost.tar.gz من مجلد releases الخاص بالمشروع إلى
المجلد الرئيسي لمستخدم الـ Pi باستخدام SFTP. استخرجه وثبّته:
mkdir -p ~/ps5-selfhost
tar -xzf ~/ps5-pi5-selfhost.tar.gz -C ~/ps5-selfhost --strip-components=1
cd ~/ps5-selfhost
sudo bash setup-pi5.sh
يحتوي الأرشيف على مجلد في المستوى الأعلى، لذا يضع --strip-components=1
المثبّت مباشرة في ~/ps5-selfhost. إذا رفعت المشروع بالكامل
بدلاً من ذلك، شغّل المثبّت من المجلد الذي يحتوي على setup-pi5.sh.
اختياريًا اختر اسمًا/كلمة مرور مختلفة:
sudo bash setup-pi5.sh --ssid PS5-Host --password 'YourChosenPassword'
يبدأ الإعداد جميع الخدمات فورًا ويمكّنها عند كل إقلاع. شغّل الإعداد عبر SSH على Ethernet أو لوحة مفاتيح/شاشة محلية: التنشيط يحوّل Wi-Fi المدمج إلى نقطة اتصال ويقطع جلسة SSH التي تستخدم ذلك Wi-Fi. الإنترنت مطلوب لتثبيت الحزم، وليس للاستضافة العادية. تعيد تنشيطات الإقلاع المحاولة أثناء تهيئة محول Wi-Fi. يتحقق الإعداد من جميع الخدمات ويطبع التشخيصات إذا فشل بدء التشغيل.
بالنسبة لتثبيت موجود، أوقفه قبل إعادة تشغيل الإعداد:
sudo systemctl stop ps5-host.target
cd ~/ps5-selfhost
sudo bash setup-pi5.sh
يجمع ps5-host.target أربع خدمات. إنه هدف systemd، وليس جلسة
طرفية. يمكّنه الإعداد تحت multi-user.target ويبدأه فورًا.
| الوحدة | الغرض |
|---|---|
ps5-hotspot.service | ينشّط نقطة وصول Wi-Fi في NetworkManager؛ يعيد المحاولة أثناء تهيئة المحول |
ps5-dns.service | يوفر DNS على المنفذ 53 و DHCP على منفذ UDP 67 |
ps5-http.service | يشغّل /home/ps5/serve.py على منفذ TCP 80 |
ps5-https.service | يشغّل /home/ps5/serve_https.py على منفذ TCP 443 |
يعمل كلا خادمي Python في نفس الوقت. ينتظر DNS بدء نقطة الاتصال. تُعاد تشغيل عمليات الويب و DNS عند الفشل. إيقاف الهدف يوقف الخدمات الأربع؛ وإعادة تشغيله تعيد تشغيلها معًا.
تحقق من تمكين الإقلاع وصحة الخدمة:
systemctl is-enabled ps5-host.target
systemctl status ps5-host.target ps5-hotspot ps5-dns ps5-http ps5-https --no-pager
يجب أن يكون الهدف enabled، ونقطة الاتصال active (exited)، وخدمات DNS
والويب active (running). تستخدم نقطة الاتصال أمر تنشيط لمرة واحدة،
لذا فإن active (exited) أمر طبيعي. أعد الإقلاع وكرر هذه الفحوصات لتأكيد بدء
التشغيل عند الإقلاع على الـ Pi الخاص بك.
| الإعداد | القيمة |
|---|---|
| شبكة Wi-Fi | PS5-Host |
| كلمة المرور | ps5offline (ما لم يتم تغييرها أثناء الإعداد) |
| عنوان IP | تلقائي |
| DNS | تلقائي |
| اسم مضيف DHCP | لا تحدد |
| MTU / Proxy | تلقائي / لا تستخدم |
| IP نقطة اتصال الـ Pi | 192.168.4.1 |
| مجموعة DHCP | 192.168.4.100–192.168.4.150، إيجار لمدة 12 ساعة |
افتح دليل المستخدم وتجاوز مطالبة الشهادة المحلية إذا ظهرت. يوجّه DNS اسم manuals.playstation.net إلى الـ Pi؛ ويتولى HTTPS طلب الدليل. يرسل R2 ملف nanoDNS، ثم ShadowMount Plus، ثم kstuff. لا تحتوي نقطة الاتصال على مشاركة إنترنت مُهيأة، لذا قد يفشل اختبار اتصال الإنترنت/PSN بينما تعمل الصفحة المحلية. يبقى Ethernet متاحًا لإدارة الـ Pi.
بعد وصول الاستغلال إلى محمّل ELF، يرسل R2 هذه الملفات بالترتيب:
payloads/nanodns.elfpayloads/shadowmountplus.elfpayloads/kstuff.elfحافظ على أسماء الملفات وحالة الأحرف هذه بالضبط. الترتيب مُعرَّف في
src/kexp.js؛ إضافة ملف ELF آخر إلى المجلد لا تضيفه تلقائيًا
إلى تسلسل R2. etaHEN.elf ليس جزءًا من هذا التسلسل.
sudo systemctl start ps5-host.target
sudo systemctl stop ps5-host.target
sudo systemctl restart ps5-host.target
sudo systemctl status ps5-hotspot ps5-dns ps5-http ps5-https
sudo journalctl -u ps5-hotspot -u ps5-dns -u ps5-https -f
من جهاز كمبيوتر منضم إلى نقطة الاتصال:
nslookup manuals.playstation.net 192.168.4.1
curl -k https://192.168.4.1/
استخدم /home/ps5 لملفات الويب والحمولات. أعد تشغيل خدمات الويب بعد تغيير
ملفات Python؛ أغلق/أعد فتح دليل PS5 بعد تغيير JavaScript. لإعادة التثبيت،
أوقف الهدف وأعد تشغيل هذا المثبّت. لا تشغّل setup-ps5.sh العام الخاص بالحاوية
على تثبيت نقطة الاتصال هذا: فهو يهيئ خدمة DNS مختلفة.
ينشئ المثبّت ملف تعريف NetworkManager مخصصًا وخدمة
ps5-dns مخصصة. لا يغيّر ملفات تعريف Ethernet، ولا يثبّت NetworkManager
فوق حزمة شبكة أخرى، ولا يستبدل خدمات DNS الموجودة، ولا يضيف قواعد
NAT/جدار حماية. إذا كانت خدمة DNS/DHCP أخرى تشغل المنافذ المطلوبة، فحل هذا
التعارض أولاً. عند تمكين جدار حماية، اسمح بـ UDP 67 و TCP/UDP 53 و TCP
80/443 على واجهة نقطة الاتصال فقط. أبقِ المضيف على شبكتك المحلية.
اجمع هذه السجلات قبل بدء المضيف يدويًا، حتى يكون فشل الإقلاع مرئيًا:
sudo journalctl -b -u ps5-hotspot.service -u NetworkManager.service --no-pager -n 100
nmcli device status
rfkill list
اضبط بلد Wi-Fi عبر sudo raspi-config إذا لم يكن مُهيأً.
الواجهة الافتراضية هي wlan0؛ استخدم --interface NAME مع المثبّت إذا
كان محول Wi-Fi الخاص بك يستخدم اسمًا آخر. بعد حل الخطأ المُبلَّغ عنه:
sudo systemctl restart ps5-host.target
تحقق من التمكين وافحص سجلات الإقلاع:
systemctl is-enabled ps5-host.target
sudo journalctl -b -u ps5-hotspot -u ps5-dns -u ps5-http -u ps5-https --no-pager -n 100
إذا كان معطلاً، شغّل sudo systemctl enable --now ps5-host.target. إذا كان
ممكّنًا بالفعل، تحدد السجلات فشل بدء التشغيل؛ والتمكين مرة أخرى لن يصلح
ذلك الخطأ الأساسي. يتضمن المثبّت المحدّث إعادات محاولة تنشيط Wi-Fi.
أبقِ إعدادات IP و DNS الخاصة بـ PS5 تلقائية. من جهاز كمبيوتر متصل بـ
PS5-Host، اختبر:
nslookup manuals.playstation.net 192.168.4.1
curl -k https://192.168.4.1/