คู่มือนี้อธิบายขั้นตอนการแปลงโทรศัพท์ Android ที่ไม่ได้ใช้งานให้เป็นโฮมเซิร์ฟเวอร์ขนาดเล็กด้วย postmarketOS โดยอ้างอิงจากกรณีศึกษาที่ใช้ Fairphone 2 ปี 2015 ในการโฮสต์เว็บเพจ เป้าหมายคือการลดขยะอิเล็กทรอนิกส์และส่งเสริมการนำกลับมาใช้ใหม่ ผลลัพธ์คือคุณจะได้โฮมเซิร์ฟเวอร์ขนาดเล็กที่สามารถรันบริการพื้นฐานได้
สิ่งที่ต้องเตรียม
- โทรศัพท์ Android ที่ไม่ได้ใช้งาน
- ที่ชาร์จและแหล่งจ่ายไฟ
- การเชื่อมต่อ WiFi
- คอมพิวเตอร์ที่รัน Linux (แบบเนทีฟหรือใน virtual machine)
ขั้นตอนที่ 1: ติดตั้ง postmarketOS
เริ่มจากติดตั้ง postmarketOS ลงบนโทรศัพท์ ตรวจสอบก่อนว่าอุปกรณ์ของคุณรองรับได้ดีจาก หน้ารายการอุปกรณ์ และเปิดหน้านั้นทิ้งไว้ตลอดการติดตั้ง
หลังจากติดตั้ง pmbootstrap แล้ว ให้สร้างอิมเมจและแฟลชลงอุปกรณ์
การสร้างอิมเมจ:
- อัปเดตพอร์ตและเริ่มต้นข้อมูลอุปกรณ์:
$ pmbootstrap pull $ pmbootstrap init- ให้กรอก device codename ตามที่ระบุไว้ในหน้าอุปกรณ์
- สำหรับ user interface ให้เลือก
console(ตัวเลือกขั้นต่ำ) หรือfbkeyboard(มีคีย์บอร์ดบนหน้าจอ)
- สร้างอิมเมจ:
$ pmbootstrap install
การแฟลชอิมเมจ:
- ตรวจสอบจากหน้าอุปกรณ์ว่าต้องบูตเข้าโหมดแฟลชอย่างไร (โดยทั่วไปคือเปิดเครื่องพร้อมกดปุ่ม "volume down" ค้างไว้)
- เชื่อมต่อโทรศัพท์กับคอมพิวเตอร์แล้วบูตเข้าโหมดแฟลช
- ทำตามคำแนะนำในส่วน 'Installation' ของหน้าอุปกรณ์
- แฟลช root file system:
$ pmbootstrap flasher flash_rootfs - รีบูตอุปกรณ์และตรวจสอบว่า postmarketOS เริ่มทำงานได้ถูกต้อง
ขั้นตอนที่ 2: ตั้งค่าเซิร์ฟเวอร์
ล็อกอินเข้าโทรศัพท์ที่ติดตั้ง postmarketOS แล้ว ชื่อผู้ใช้/รหัสผ่านเริ่มต้นคือ user / 147147
- ล็อกอินผ่าน SSH ขณะเชื่อมต่อโทรศัพท์กับคอมพิวเตอร์อยู่:
$ ssh user@172.16.42.1 - เชื่อมต่อกับเครือข่าย WiFi:
$ nmcli device wifi connect your_wifi_network --ask
ตอนนี้เซิร์ฟเวอร์บนโทรศัพท์ในเครือข่ายภายในก็พร้อมแล้ว คำสั่งสำหรับตรวจสอบ IP ภายในของโทรศัพท์คือ:
$ ip -4 addr show wlan0 | grep inet | awk '{print $2}' | cut -d'/' -f1
(โดยทั่วไปจะอยู่ในรูปแบบ 192.168.1.x) เชื่อมต่อโทรศัพท์ไว้ในที่ปลอดภัยและเข้าถึงผ่าน WiFi:
ssh user@192.168.1.x
ขั้นตอนที่ 3: ให้บริการเว็บเพจ
ตั้งค่าเว็บเซิร์ฟเวอร์เพื่อโฮสต์เว็บเพจอย่างง่าย
- สร้างไดเรกทอรี
/var/www/html/:sudo mkdir -p /var/www/html/ - เขียนไฟล์ HTML แบบ Hello World อย่างง่าย:
$ sudo sh -c 'echo "<h1>hello world</h1>" > /var/www/html/index.html' - เพิ่มกฎ nftables เพื่ออนุญาตแพ็กเก็ตขาเข้าที่พอร์ต 80 (ในไฟล์
/etc/nftables.d/99_http.nft):inet filter input tcp dport 80 ct state new accept - รีสตาร์ต nftables:
$ sudo systemctl restart nftables - รันเว็บเซิร์ฟเวอร์:
$ httpd -h /var/www/html/ - ทดสอบ: ตรวจสอบจากคอมพิวเตอร์ด้วย curl:
(จะได้ข้อความ$ curl 192.168.1.x<h1>hello world</h1>แสดงออกมา) จากนั้นลองพิมพ์ IP ดังกล่าวในเว็บเบราว์เซอร์ของอุปกรณ์ที่เชื่อมต่อกับเครือข่าย WiFi เดียวกันเพื่อตรวจสอบ (เมื่อรีบูตแล้ว HTTP server จะไม่เริ่มทำงานอัตโนมัติ)
เพิ่มเติม: การเข้าถึงจากระยะไกล
เพื่อความปลอดภัย อย่าเปิดพอร์ต SSH 22 ออกสู่อินเทอร์เน็ต แต่ให้ตั้งค่า VPN access บนเราเตอร์แทน (ส่วนใหญ่รองรับผ่านเว็บอินเทอร์เฟซ) หลังเชื่อมต่อ VPN แล้วจึงเข้าถึงด้วย SSH ผ่านเครือข่ายภายใน หากจำเป็นต้องเปิดพอร์ต 22 สู่อินเทอร์เน็ต ให้ปิดการล็อกอินด้วยรหัสผ่านและตั้งค่า SSH keys
เพิ่มเติม: การบำรุงรักษา
อัปเดตแพ็กเกจ:
$ sudo apk update
$ sudo apk upgrade
ขั้นตอนถัดไป
เรียนรู้การตั้งค่าโดเมนและ HTTPS รวมถึงวิธีทำให้ HTTP server รันต่อเนื่องหลังรีบูตได้จากส่วนขั้นสูง (ยังอยู่ระหว่างจัดทำ)
คู่มือนี้จัดทำโดย Louis Merlin ภายใต้สัญญาอนุญาต CC BY-NC-SA 4.0
4 ความคิดเห็น
ผมชอบอะไรแบบนี้นะ
ถ้าจะเริ่มแบบเบา ๆ แค่
termuxก็พอใช้ได้เหมือนกัน เอาไปเปิด Grafana บนแท็บเล็ตที่ไม่ได้ใช้แล้วในระดับนั้นยังใช้งานได้อยู่แต่ Android OS ค่อนข้างเป็นปฏิปักษ์กับการทำงานเป็นเซิร์ฟเวอร์
อิงจาก Note10 ที่รีเซ็ตเป็นค่าโรงงานในปี 24
ถ้ามี child process เกิน 6 ตัวจะโดน kill
ถึงจะอยู่ในสถานะ idle นาน ๆ ก็ยังโดน kill
ปิดการเพิ่มประสิทธิภาพที่เกี่ยวกับแบตเตอรี่ทั้งหมดแล้วก็ยังเป็นเหมือนเดิม
ผมลองปล่อยไว้โดยไม่แตะหน้าจอได้นานสุดแค่ 72 ชั่วโมง หลังจากนั้นก็ยอมแพ้ครับ
เคยลองปิด phantom process killer ไหม?
แบตเตอรี่น่าจะยังไหวอยู่ไหม
คงมีอาการแบตบวมใช่ไหม