1 คะแนน โดย GN⁺ 7 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • การใช้ [Open OSCAR Server] ช่วยให้สร้าง เซิร์ฟเวอร์ AIM/ICQ บนเซิร์ฟเวอร์ Debian และเชื่อมต่อไคลเอนต์หลายตัวในสภาพแวดล้อมเก่า ๆ รวมถึง Windows 98 ได้อีกครั้ง
  • สำหรับการใช้งานขนาดเล็ก VPS สเปกต่ำก็เพียงพอ แต่หากต้องการใช้กับเพื่อนภายนอก จำเป็นต้องมี พอร์ตเริ่มต้น 5190 พร้อม IP คงที่หรือ dynamic DNS และตั้งค่าไฟร์วอลล์ให้เหมาะกับการเปิดใช้งานบนอินเทอร์เน็ต
  • ตั้งค่า OSCAR_LISTENERS และ OSCAR_ADVERTISED_LISTENERS_PLAIN ใน settings.env ให้ตรงกับ โหมด LAN หรือ WAN และเปลี่ยนให้ไคลเอนต์ AIM เชื่อมต่อกับเซิร์ฟเวอร์ของตัวเองแทนเซิร์ฟเวอร์ AOL ที่ปิดไปแล้ว
  • โดยค่าเริ่มต้นสามารถเข้าสู่ระบบด้วย screen name และรหัสผ่านใด ๆ ได้ จึงควรเปิดใช้ การยืนยันตัวตนด้วยรหัสผ่าน ด้วย DISABLE_AUTH=false และจัดการบัญชีผ่าน API
  • เนื่องจากสถานะของเซิร์ฟเวอร์ถูกเก็บไว้ในฐานข้อมูล SQLite และไฟล์ตั้งค่า จึงสามารถรักษา สภาพแวดล้อม AIM ที่กู้คืนได้ ด้วยการสำรองข้อมูลทั้งระบบทุกคืน หรือหยุดเซิร์ฟเวอร์แล้วคัดลอกด้วย rsync

เหตุผลที่กลับมาเปิด AIM แทน Discord

  • ก่อนที่โทรศัพท์มือถือและ SMS จะแพร่หลาย กิจกรรมจำนวนมากตั้งแต่โปรเจกต์โรงเรียนไปจนถึงความสัมพันธ์ส่วนตัวเกิดขึ้นใน หน้าต่าง AIM และประสบการณ์เหล่านี้กลายเป็นความรู้สึกคิดถึง AIM
  • เนื่องจากช่วงหลังประสบการณ์ใช้งาน Discord ไม่ดีนัก จึงทดลองใช้ Open OSCAR Server และสามารถเชื่อมต่อไคลเอนต์รุ่นเก่าหลายตัวเข้ากับเซิร์ฟเวอร์ AIM/ICQ ของตัวเองได้
  • ขั้นตอนการติดตั้งถูกพูดถึงใน วิดีโอ YouTube และ วิดีโอ PeerTube ด้วย ส่วน วิดีโออีกชุด ของ Macintosh Librarian แนะนำตัว AIM เองอย่างละเอียดกว่า

เตรียมเซิร์ฟเวอร์ Debian Trixie

  • เป้าหมายการติดตั้งคือ Debian Trixie และจะไม่ครอบคลุมขั้นตอนติดตั้งระบบปฏิบัติการเอง
  • หากไม่ได้วางแผนจะคุยกับคนหลายร้อยคน ก็สามารถใช้งานบน VPS สเปกต่ำได้
    • ตอนแรกโฮสต์ไว้ที่บ้าน แต่เมื่อเริ่มแชร์ให้เพื่อน ๆ ใช้จึงย้ายไปยัง VPS แพ็กเกจต่ำสุด
    • มีความเป็นไปได้ว่าจะทำงานบน Raspberry Pi ได้ แต่ยังไม่ได้ทดลองเอง
  • หากใช้งานจากบ้านหรือหลังไฟร์วอลล์ ต้องเปิด พอร์ตเริ่มต้น 5190 เพื่อให้ไคลเอนต์ AIM เชื่อมต่อได้
    • ไคลเอนต์บางตัวเปลี่ยนพอร์ตได้ไม่ง่ายนัก ดังนั้นการคงพอร์ตเริ่มต้นไว้จะดีกว่า
  • ในสภาพแวดล้อมตามบ้านที่ไม่มี IP คงที่ จำเป็นต้องใช้ dynamic DNS
    • บริการที่ใช้เองคือ No-IP และพอใจกับผลลัพธ์
    • หากไม่คุ้นเคยกับ dynamic DNS สามารถใช้ IP คงที่และการตั้งค่าที่ง่ายกว่าบนคลาวด์เซิร์ฟเวอร์ราคาเดือนละ 5~10 ดอลลาร์ ได้
    • ไม่ว่าจะเลือกวิธีใด เซิร์ฟเวอร์ต้องเข้าถึงได้ผ่าน IP คงที่หรือโดเมน และต้องเปิดพอร์ต 5190 ไว้
  • ค่าเริ่มต้นของ Open OSCAR Server สะดวกสำหรับทดลองในเครือข่ายบ้าน แต่ไม่เหมาะกับการเปิดสู่สาธารณะบนอินเทอร์เน็ต
    • ก่อนล็อกการตั้งค่า แนะนำให้ อนุญาตเฉพาะทราฟฟิกของตัวเอง และปฏิเสธการเชื่อมต่อจากต้นทางอื่นด้วยไฟร์วอลล์

ติดตั้ง Open OSCAR Server

wget [RELEASE URL]
  • ต้องแทนที่ [RELEASE URL] ด้วยที่อยู่ไฟล์รีลีสจริง
  • แตกไฟล์บีบอัดที่ดาวน์โหลดมาด้วย tar
tar -zxvf open_oscar_server.X.XX.X.linux.x86_64.tar.gz
  • แทนที่ X.XX.X ด้วย หมายเลขเวอร์ชันจริง ที่ดาวน์โหลดมา

ตั้งค่าโหมดรับการเชื่อมต่อและที่อยู่เซิร์ฟเวอร์

  • หากรันบนเครื่องโลคัลเท่านั้น สามารถเข้าไปยังไดเรกทอรีย่อยที่แตกไฟล์แล้วรันได้ทันที
  • หากต้องการเชื่อมต่อไคลเอนต์จากเครื่องอื่น ต้องแก้ไข settings.env
  • Open OSCAR Server รองรับ โหมดรับการเชื่อมต่อไคลเอนต์ 3 แบบ
    • LOCAL: ค่าเริ่มต้น ใช้เมื่อไคลเอนต์ AIM และเซิร์ฟเวอร์อยู่บนเครื่องเดียวกัน
    • LAN: ใช้เมื่อเซิร์ฟเวอร์และไคลเอนต์ AIM อยู่ในเครือข่ายภายในเดียวกันและไม่ผ่านอินเทอร์เน็ต
    • WAN: ใช้เมื่อเชื่อมต่อไคลเอนต์ AIM ของเพื่อนภายนอกผ่านอินเทอร์เน็ต
  • ใน settings.env ให้ตั้งค่าตัวแปรสองตัวร่วมกัน
    • OSCAR_LISTENERS: ระบุวิธีที่ Open OSCAR Server รับการเชื่อมต่อ
    • OSCAR_ADVERTISED_LISTENERS_PLAIN: ระบุที่อยู่เซิร์ฟเวอร์ที่จะแจ้งให้ไคลเอนต์อย่าง AIM ทราบ
  • หากเป็น VPS สาธารณะที่มีโดเมน example.domain สามารถตั้งค่าได้ดังนี้
OSCAR_LISTENERS=WAN://0.0.0.0:5190
OSCAR_ADVERTISED_LISTENERS_PLAIN=WAN://example.domain:5190
  • ในเครือข่ายภายใน ให้เปลี่ยน WAN เป็น LAN และใช้ IP address ที่กำหนดให้เซิร์ฟเวอร์แทนโดเมน
  • โหมดของตัวแปรทั้งสองต้องตรงกันเสมอ เช่น LAN กับ LAN หรือ WAN กับ WAN
    • สามารถตั้งค่าที่ระบุทั้งสองโหมดไว้ในตัวแปรทั้งสองฝั่งได้เช่นกัน
  • เมื่อตั้งค่าเสร็จแล้ว ให้ทดลองรันเซิร์ฟเวอร์ด้วยคำสั่งต่อไปนี้
./open_oscar_server

เชื่อมต่อไคลเอนต์ AIM

  • ใน AIM หลายเวอร์ชัน สามารถเปลี่ยนเซิร์ฟเวอร์ล็อกอินเริ่มต้น login.oscar.aol.com ที่ปิดไปแล้วให้เป็นที่อยู่อื่นได้
  • ใน AIM 5.1 ให้เปลี่ยนที่อยู่เซิร์ฟเวอร์ผ่านปุ่ม Configuration ขนาดใหญ่ ใน Setup
  • เพียงแทนที่ที่อยู่เซิร์ฟเวอร์ล็อกอินเริ่มต้นด้วยที่อยู่ที่ระบุไว้ใน OSCAR_ADVERTISED_LISTENERS_PLAIN
  • ก่อนเพิ่มความเข้มงวดของการยืนยันตัวตน สามารถป้อน screen name และรหัสผ่านใด ๆ เพื่อเข้าสู่ระบบได้
  • เงื่อนไขการเชื่อมต่อของผู้ใช้อื่นขึ้นอยู่กับโหมดของเซิร์ฟเวอร์
    • ในโหมด LAN ต้องอยู่ในเครือข่ายเดียวกับเซิร์ฟเวอร์
    • ในโหมด WAN ต้องให้สิทธิ์การเข้าถึงเพื่อให้ผู้ใช้ภายนอกผ่านไฟร์วอลล์ได้

รันเซิร์ฟเวอร์ถาวรด้วย systemd

  • Open OSCAR Server มาพร้อม บริการ systemd ที่ทำให้เซิร์ฟเวอร์ทำงานต่อไปได้แม้การเชื่อมต่อ SSH จะหลุด
  • การติดตั้งและตั้งค่าบริการให้ทำตาม เอกสาร SYSTEMD ของโปรเจกต์

เปิดใช้การยืนยันตัวตนด้วยรหัสผ่าน

  • โดยค่าเริ่มต้นจะไม่ได้ตรวจสอบรหัสผ่านจริง จึงต้องเปลี่ยน DISABLE_AUTH ในไฟล์บริการ systemd
  • แก้ไขไฟล์บริการทั้งไฟล์ด้วยเอดิเตอร์เริ่มต้นโดยใช้คำสั่งต่อไปนี้
sudo systemctl edit --full ras.service
  • ตั้งค่าตัวแปรสภาพแวดล้อมใต้ [Service] ดังนี้
Environment="DISABLE_AUTH=false"
  • เนื่องจากชื่อตัวแปรเป็นการปฏิเสธซ้อน หากต้องการบังคับใช้การยืนยันตัวตน ค่าต้องเป็น false
  • หลังบันทึกไฟล์บริการแล้ว โหลดการตั้งค่า daemon ของ systemd ใหม่
sudo systemctl daemon-reload
  • ทดลองเข้าสู่ระบบอีกครั้งด้วย screen name และรหัสผ่านเดิม และหากล้มเหลว สามารถสร้างผู้ใช้ใหม่ผ่าน API ได้

จัดการผู้ใช้และรหัสผ่านด้วย API

  • หลังเปิดใช้การยืนยันตัวตนแล้ว ให้จัดการผู้ใช้และรหัสผ่านด้วย API ของ Open OSCAR Server และ curl
  • เพิ่มผู้ใช้

    curl -d'{"screen_name":"NEWUSERNAME", "password":"NEWPASSWORD"}' http://localhost:8080/user
    
    • ส่ง ข้อมูล POST ด้วยตัวเลือก -d ของ curl
    • ใน JSON body ให้ใส่คีย์ screen_name และ password
    • ปลายทางคำขอคือ endpoint http://localhost:8080/user ของเซิร์ฟเวอร์โลคัล
  • เปลี่ยนรหัสผ่านผู้ใช้ที่มีอยู่

    curl -X PUT -d'{"screen_name":"NEWUSERNAME", "password":"NEWPASSWORD"}' http://localhost:8080/user/password
    
    • สำหรับการอัปเดตผู้ใช้ที่มีอยู่ ให้ใช้ -X PUT แทน POST
    • ใน screen_name ต้องระบุ screen name ที่มีอยู่แล้ว
    • endpoint สำหรับเปลี่ยนรหัสผ่านคือ http://localhost:8080/user/password
    • API ยังรองรับการลบผู้ใช้และเพิ่มห้องแชตด้วย ฟังก์ชันอื่น ๆ ดูได้จาก เอกสารโปรเจกต์

การสำรองข้อมูลและกู้คืน

  • สถานะหลักของ Open OSCAR Server ประกอบด้วย ฐานข้อมูล SQLite และไฟล์ตั้งค่า ทำให้สำรองข้อมูลง่าย
  • มีการสำรองข้อมูลทั้งระบบของ VPS ทุกคืน และจากการทดสอบกู้คืนก็ทำงานได้ตามคาด
  • ก่อนการเปลี่ยนแปลงใหญ่ จะหยุดเซิร์ฟเวอร์แล้วคัดลอกไดเรกทอรีทำงานทั้งหมดไปยังเครื่องสำรองข้อมูลด้วย rsync
  • การใช้ Borgmatic ช่วยทำให้กระบวนการสำรองข้อมูลง่ายขึ้น และมีแผนจะอธิบายรายละเอียดในบทความถัดไป

1 ความคิดเห็น

 
GN⁺ 7 시간 전
ความคิดเห็นจาก Lobste.rs
  • อ่านได้เพลินดี แต่ถ้าคิดว่าเมื่อก่อนมีเมสเซนเจอร์ให้ใช้น้อยกว่านี้ก็ถือว่าเข้าใจผิดเหมือนกัน หลายคนอาจใช้เวลาอยู่กับ AIM หรือ MSN นานมาก แต่ผมกับเพื่อนที่โรงเรียนไม่ได้ใช้ทั้งคู่ และย้ายจาก ICQ ไป IRC กัน อีกทั้งความกระจัดกระจายของบริการก็ไม่ได้ดีกว่าตอนนี้เป็นพิเศษ

    • ถึงอย่างนั้น ตอนนั้นก็มี ไคลเอนต์แบบรวมศูนย์ ที่ใช้เมสเซนเจอร์หลายตัวได้ในที่เดียว
    • เห็นด้วยเลย นึกถึงโพสต์ใน LiveJournal ที่เคยถูก Slashdot หยิบไปพูดถึง ซึ่งเขียนไว้ในปี 2005 ว่า Google Talk บนเซิร์ฟเวอร์ Jabber ไม่มี แผน federation ระหว่างเซิร์ฟเวอร์ ที่เหมาะสม
      https://nugget.livejournal.com/97081.html
      แล้วก็มีโพสต์ติดตามผลที่เขียนหลังจากได้รับคำตอบจาก Google หนึ่งเดือนถัดมา
      https://nugget.livejournal.com/103322.html
    • น่าจะต่างกันมากตามภูมิภาคนะ จำได้ว่า อเมริกาใช้ AIM ส่วนยุโรปใช้ ICQ เป็นหลัก
  • มีวิดีโอเกี่ยวกับประเด็นนี้ด้วย ตอนแรกผมเกือบจะโพสต์วิดีโอนั้น แต่ก็ลังเลว่าจะคงชื่อเดิมที่ค่อนข้างคลิกเบตไว้ หรือจะใช้ชื่อที่ DeArrow เสนอมา

    • ชื่อวิดีโอก็ไม่ได้รู้สึกว่าเป็นคลิกเบตขนาดนั้นนะ แต่โดยรวมแล้วผมชอบ บทความบล็อก มากกว่าวิดีโอ
  • สนุกดี แต่ระหว่างอ่านผมก็รอคำตอบที่คิดไว้ว่าคือ “แล้วหลังจากนั้นล่ะ?” ถ้า ไม่ federation กับเซิร์ฟเวอร์อื่น คนที่จะคุยกันทุกคนต้องอยู่เซิร์ฟเวอร์เดียวกันหมดไหม หรือมันมีไว้คุยคนเดียวเฉย ๆ

    • ไม่ค่อยเข้าใจว่าการสมัครหลายเซิร์ฟเวอร์มีปัญหาตรงไหน เพราะจริง ๆ แล้ว แนวทางที่ Discord อ้างว่าใช้ ก็เป็นโครงสร้างแบบนั้นเหมือนกัน
  • เปิดเรื่องมาแล้วก็ไม่พลาด สกรีนช็อตคลาสสิก ที่ควรมีอยู่ตรงนั้นพอดี ซอฟต์แวร์ในยุคนั้นทั้งใช้งานจริงและมีประโยชน์ได้อย่างขัดเกลามากจริง ๆ

  • ไม่ได้สนใจ AIM เองเท่าไร แต่ชอบที่ได้เห็นคน กลับไปลองเล่นเทคโนโลยีเก่า ๆ พอไล่อ่านบทความอื่นของผู้เขียนต่อก็รู้สึกเหมือนกำลังจะจมลงไปในหลุมกระต่ายแห่งการสำรวจอีกหลายอย่าง ซึ่งก็ดูไม่เลวเลย

  • ไม่ได้คิดถึงยุคของ ICQ กับ AIM เลยแม้แต่น้อย แต่ช่วงปลายยุคนั้นเคยมี ยุคทอง สั้น ๆ ของวงการอยู่ ด้วย XMPP ที่ทำ federation ระหว่างเซิร์ฟเวอร์ได้ และเกตเวย์ที่เชื่อมไปยังโปรโตคอลอื่น คุณจึงตั้งเซิร์ฟเวอร์เองหรือไปมีบัญชีบนเซิร์ฟเวอร์ของคนอื่น แล้วคุยกับใครก็ได้
    ถึงจะต้องคงบัญชีบนเครือข่ายที่เชื่อมผ่านเกตเวย์ไว้ด้วย แต่ส่วนใหญ่แทบไม่ต้องดูแลอะไรมาก และด้วยบัญชีเดียวก็สามารถคุยกับผู้ใช้ Google Talk, Facebook Messenger, ICQ และ MSN ได้ทั้งหมด
    มีแค่ Skype ที่ดื้อดึงปฏิเสธการทำงานร่วมกันอย่างหนักแน่น
    ตอนนี้วัฒนธรรมเปลี่ยนไปอย่างน่าทึ่ง แม้แต่ Signal ที่เป็นโอเพนซอร์สก็ยังบล็อก ไคลเอนต์ภายนอก และไม่เพียงไม่ค่อยมีคนต่อต้าน แต่ยังถูกมองว่าเป็นข้อเรียกร้องที่สมเหตุสมผลได้ด้วยซ้ำ เหมือนเราได้สูญเสียยุคทองนั้นไปเพราะเราไม่คู่ควรจะมีมันอีกต่อไป