1 ポイント 投稿者 GN⁺ 7 시간 전 | 1件のコメント | WhatsAppで共有
  • [Open OSCAR Server]を使うと、Debianサーバー上にAIM/ICQサーバーを構築し、Windows 98をはじめとする旧式環境のさまざまなクライアントを再び接続できる
  • 小規模な運用なら低スペックのVPSでも十分だが、外部の友人と利用するにはデフォルトポート5190と固定IPまたはダイナミックDNS、インターネット公開に合わせたファイアウォール設定が必要
  • settings.envOSCAR_LISTENERSOSCAR_ADVERTISED_LISTENERS_PLAINLANまたはWANモードに合わせて設定し、AIMクライアントが閉鎖済みのAOLサーバーではなく自前のサーバーへ接続するよう変更する
  • 初期状態では任意のスクリーンネームとパスワードでログインできるため、DISABLE_AUTH=falseパスワード認証を有効化し、APIでアカウントを管理する必要がある
  • サーバー状態はSQLiteデータベースと設定ファイルに保存されるため、夜間のフルバックアップやサーバー停止後のrsyncコピーによって復旧可能なAIM環境を維持できる

Discordの代わりにAIMを再運用した理由

  • 携帯電話とSMSが普及する前は、学校のプロジェクトから人間関係まで多くの活動がAIMウィンドウで行われており、そうした体験がAIMへのノスタルジーにつながっている
  • 最近のDiscord利用体験があまり良くなかったため、Open OSCAR Serverを試したところ、自前のAIM/ICQサーバーに複数の旧式クライアントを接続できた
  • 構築手順はYouTube動画PeerTube動画でも扱っており、Macintosh Librarianの別動画ではAIMそのものをより詳しく紹介している

Debian Trixieサーバーの準備

  • インストール対象はDebian Trixieであり、OS自体の導入手順は扱わない
  • 数百人と会話する予定でなければ、低スペックのVPSでも運用可能
    • 当初は自宅でホスティングしていたが、友人と共有し始めてから最安クラスのVPSへ移行した
    • Raspberry Piでも動く可能性はあるが、実際には試していない
  • 自宅やファイアウォールの背後で運用する場合、AIMクライアントが接続するデフォルトポート5190を開放する必要がある
    • 一部のクライアントはポート変更が簡単ではないため、デフォルトポートの維持が望ましい
  • 固定IPのない家庭向け環境では、ダイナミックDNSが必要
    • 実際に使ったサービスはNo-IPで、結果には満足している
    • ダイナミックDNSに不慣れなら、月5〜10ドルのクラウドサーバーで固定IPとより簡単な構成を利用できる
    • どちらの方法でも、サーバーは固定IPまたはドメインでアクセス可能で、5190番ポートが開いている必要がある
  • Open OSCAR Serverのデフォルト設定はホームネットワーク内でのテストには便利だが、インターネット公開には向いていない
    • 設定を固めるまでは、自分のトラフィックのみ許可し、ファイアウォールで他の送信元からの接続を拒否する運用が推奨される

Open OSCAR Serverのインストール

wget [RELEASE URL]
  • [RELEASE URL]は実際のリリースファイル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では2つの変数をセットで設定する
    • OSCAR_LISTENERS: Open OSCAR Serverが接続を待ち受ける方法を指定する
    • OSCAR_ADVERTISED_LISTENERS_PLAIN: AIMのようなクライアントに通知するサーバーアドレスを指定する
  • ドメインがexample.domainの公開VPSなら、次のように構成できる
OSCAR_LISTENERS=WAN://0.0.0.0:5190
OSCAR_ADVERTISED_LISTENERS_PLAIN=WAN://example.domain:5190
  • 内部ネットワークではWANLANに変更し、ドメインの代わりにサーバーへ割り当てたIPアドレスを使う
  • 2つの変数のモードは必ず**LANLAN、またはWANWAN**のように一致していなければならない
    • 両方の変数に両モードを指定する構成も可能
  • 設定が終わったら、次のコマンドでサーバーを試験起動する
./open_oscar_server

AIMクライアントの接続

  • 複数のAIMバージョンでは、現在は閉鎖されているデフォルトのログインサーバーlogin.oscar.aol.comを別のアドレスに置き換えられる
  • AIM 5.1では、Setupの大きな**Configurationボタン**からサーバーアドレスを変更する
  • デフォルトのログインサーバーアドレスをOSCAR_ADVERTISED_LISTENERS_PLAINで指定したアドレスに置き換えればよい
  • 認証を強化する前は、任意のスクリーンネームとパスワードを入力してログインできる
  • 他の利用者が接続できる条件はサーバーモードによって異なる
    • LANモードでは、サーバーと同じネットワーク上にいる必要がある
    • WANモードでは、外部利用者がファイアウォールを通過できるようアクセス権を与える必要がある

systemdでサーバーを常時実行する

  • Open OSCAR Serverには、SSH接続が切れた後もサーバーを動かし続けられるsystemdサービスが付属している
  • サービスのインストールと設定は、プロジェクトのSYSTEMDドキュメントに従えばよい

パスワード認証を有効にする

  • 初期状態では実際のパスワード検証を行わないため、systemdサービスファイルでDISABLE_AUTHを変更する必要がある
  • 次のコマンドで、完全なサービスファイルをデフォルトエディタで編集する
sudo systemctl edit --full ras.service
  • [Service]配下の環境変数を次のように設定する
Environment="DISABLE_AUTH=false"
  • 変数名が二重否定の形になっているため、認証を必須にするには値を**false**にする必要がある
  • サービスファイルを保存したら、systemdデーモン設定を再読み込みする
sudo systemctl daemon-reload
  • 既存のスクリーンネームとパスワードで再度ログインを試し、失敗する場合はAPIで新しいユーザーを作成できる

APIでユーザーとパスワードを管理する

  • 認証を有効化した後は、Open OSCAR ServerのAPIとcurlでユーザーおよびパスワードを管理する
  • ユーザー追加

    curl -d'{"screen_name":"NEWUSERNAME", "password":"NEWPASSWORD"}' http://localhost:8080/user
    
    • curl-dオプションでPOSTデータを送信する
    • JSON本文にはscreen_namepasswordキーを含める
    • リクエスト先はローカルサーバーのhttp://localhost:8080/userエンドポイント
  • 既存ユーザーのパスワード変更

    curl -X PUT -d'{"screen_name":"NEWUSERNAME", "password":"NEWPASSWORD"}' http://localhost:8080/user/password
    
    • 既存ユーザーの更新にはPOSTではなく**-X PUT**を使う
    • screen_nameにはすでに存在するスクリーンネームを指定する必要がある
    • パスワード変更用エンドポイントはhttp://localhost:8080/user/password
    • APIはユーザー削除やチャットルーム追加などにも対応しており、そのほかの機能はプロジェクト文書で確認できる

バックアップと復旧

  • Open OSCAR Serverの主要な状態はSQLiteデータベースと設定ファイルで構成されるため、バックアップは簡単
  • VPS全体のシステムを毎晩バックアップしており、復元テストでも期待どおりに動作した
  • 大きな変更の前にはサーバーを停止し、作業ディレクトリ全体をrsyncでバックアップマシンへコピーしている
  • Borgmaticを使えばバックアップ手順をさらに簡単にでき、続編の記事で詳しく扱う予定

1件のコメント

 
GN⁺ 7 시간 전
Lobste.rsのコメント
  • 面白く読んだけれど、昔はメッセンジャーの種類が多くなかったと思うなら、それは誤解。AIMやMSNで長い時間を過ごした人も多かったが、私と学校の友人たちはどちらも使わず、ICQからIRCへ移っていったし、サービスの断片化も今より特にましだったわけではなかった

    • それでも当時は、複数のメッセンジャーを一か所で使える統合クライアントがあった
    • その通り。2005年にGoogle TalkのJabberサーバーに適切なサーバー間フェデレーション計画がないことについて書いたらSlashdotで紹介されたLiveJournalの記事を思い出す
      https://nugget.livejournal.com/97081.html
      1か月後にGoogleからの回答を受けて書いた続編もある
      https://nugget.livejournal.com/103322.html
    • 地域差が大きかったのではないかと思う。米国はAIM、欧州は主にICQを使っていたと記憶している
  • このテーマを扱った動画もある。自分で投稿しようかと思ったが、やや釣り気味の元タイトルを維持するか、DeArrowが提供したタイトルを使うかで迷った

    • 動画タイトルが必ずしも釣りっぽいとは感じなかったが、概して動画よりもブログ記事のほうを好む
  • 面白いが、記事を読みながら期待していた答えは「それで、その次は?」だった。ほかのサーバーとフェデレーションされないなら、会話したい全員が同じサーバーにいなければならないのか、それとも一人で話す用途なのかが気になる

    • 複数のサーバーに参加すると何が問題なのか分からない。実質的にDiscordが掲げている方式もそういう構造だ
  • 記事の冒頭に当然入るべき定番スクリーンショットを外していなかった。当時のソフトウェアの実用性と有用性は本当によく磨き込まれていた

  • AIM自体には関心がないが、人々が昔の技術をもう一度いじってみる様子は楽しい。著者のほかの記事まで見て回っているうちに、またいろいろな探求の沼にはまりそうだが、それも悪くなさそうに見える

  • ICQとAIMの時代そのものはまったく懐かしくないが、その末期には業界の短い黄金期があった。サーバー間フェデレーションが可能なXMPPと、ほかのプロトコルへつなぐゲートウェイのおかげで、自分でサーバーを作ることも、他人のサーバーにアカウントを置くこともでき、誰とでも会話できた
    ゲートウェイで接続したネットワークのアカウントも維持する必要はあったが、たいていはごくたまに手を入れれば十分で、1つのアカウントでGoogle Talk・Facebook Messenger・ICQ・MSNのユーザー全員と会話できた。Skypeだけはひときわ頑なに互換性を拒んでいた
    今では文化が驚くほど変わり、オープンソースのSignalでさえ外部クライアントを締め出しているのに、当然の反感を買うどころか、ある程度合理的な要求として受け入れられている。私たちにはもう享受する資格がなくなったから、黄金期を失ったように思える