GNU socialのインストール

分散SNSの実装として約10年以上もの歴史のあるGNU socialをソースコードからインストールする。

GNU socialを使うことで,レンタルサーバーで手安く自分のSNSを運営できる。

インストール手順

インストール情報
項目 説明
配布元 GNU social · GNU Network Services
リポジトリー gnu.io / gnu-social · GitLab
手順
依存情報
依存先 (必須)
依存先 (任意) PHP extension: opcache, mailparse, sphinx, gettext, exif
依存元
インストールコマンド
sh -eux <<-"EOT"
LOCAL=~/.local
PKG=gnusocial VER=1.2.x
mkdir -p "$LOCAL/var/www/html"
cd "$LOCAL/var/www/html"

if command -v git >/dev/null; then
  [ -e $PKG ] || git clone --depth 1 https://git.gnu.io/gnu/gnu-social $PKG
  cd $PKG
  git fetch --depth 1 origin $VER:$VER
  git checkout -f $VER
else
  [ -e $PKG-$VER ] || wget -O $PKG-$VER.tar.bz2 https://git.gnu.io/gnu/gnu-social/-/archive/$VER/gnu-social-$VER.tar.bz2
  tar -xf $PKG-$VER.*
mv $PKG-$VER $PKG
cd $PKG fi EOT
インストール例
日付 バージョン OS 依存関係
2019-05-18 1.2.x (1.2.0-beta4) Ubuntu 18.04 MariaDB 10.2.23, Apache HTTP Server 2.4.39, PHP 7.3.4, OpenSSL 1.1.1a, cURL 7.64.0, GD 2.2.5, GMP 6.1.2, ICU 50.2

マニュアルには記載がないが,lib/installer.phpに記載がある通り,xmlwriter, mbstring, xml, dom, ximplexmlのphpの拡張機能も必須だ。

DB設定

ファイルのインストールが完了したので,データベースを作成する。

データベース名: gnusocial, URL: localhost, ユーザー名: user, パスワード: passwordのデータベースを以下のコマンドで作成する。

mysqld_safe &
mysqladmin -u root create gnusocial
mysql -u root -e "GRANT ALL on gnusocial.* TO user@localhost IDENTIFIED BY 'password';"

万が一,DBの設定を間違えてやり直す場合は,以下のコマンドでDBを削除する。

mysql -u root -e "drop database gnusocial;"

Fancy URL

Fancy URLの設定を行う。デフォルトだと,URLがhttp://domain/gnusocial/index.php/user/のように間にindex.phpが入ってしまう。これを取り除き,http://domain/gnusocial/user/のURLでアクセスできるようにする。

後からでも変更可能ではあるが,URLが公開されるとどこで誰が参照するかわからないので,インストール時に設定したほうがいいだろう。

gnusocial/htaccess.sample
をコピーして,.htaccessファイルを作成し,サブディレクトリーのgnusocialにリダイレクトするように設定する。具体的には以下のように修正する。

--- htaccess.sample     2019-05-18 00:36:12.212973164 +0900
+++ .htaccess   2019-05-18 13:47:58.963552763 +0900
@@ -28,7 +31,7 @@
   #   https://example.com/social/ => /social/
   #
   RewriteBase /
-  #RewriteBase /mublog/
+  RewriteBase /gnusocial/

   ## Uncomment these if having trouble with API authentication
   ## when PHP is running in CGI or FastCGI mode.

サブディレクトリーではなく,トップレベルドメインで運営する場合,ファイルコピーだけで済み,修正は不要だ。

PHP 7の警告メッセージ対応

PHP 7でGNU social 1.2.xを運用する場合,互換性などから警告などが大量に出る。

警告だけであれば,ひとまず対応しなくても問題ないように思っていたが,この警告が出るために,正常に動作しないことがわかった。

例えば,ホーム画面のhttp://localhost:8080/gnusocial/にアクセスする場合,以下のエラーメッセージが表示される。

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/senooken/.local/var/www/html/gnusocial/extlib/DB/DataObject.php on line 4244

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/senooken/.local/var/www/html/gnusocial/extlib/DB/DataObject.php on line 4247

Warning: count(): Parameter must be an array or an object that implements Countable in /home/senooken/.local/var/www/html/gnusocial/extlib/DB.php on line 775

Warning: Cannot modify header information - headers already sent by (output started at /home/senooken/.local/var/www/html/gnusocial/extlib/DB/DataObject.php:4244) in /home/senooken/.local/var/www/html/gnusocial/lib/action.php on line 1279

Warning: Cannot modify header information - headers already sent by (output started at /home/senooken/.local/var/www/html/gnusocial/extlib/DB/DataObject.php:4244) in /home/senooken/.local/var/www/html/gnusocial/lib/util.php on line 1622

Warning: Cannot modify header information - headers already sent by (output started at /home/senooken/.local/var/www/html/gnusocial/extlib/DB/DataObject.php:4244) in /home/senooken/.local/var/www/html/gnusocial/lib/util.php on line 1623

Warning: Cannot modify header information - headers already sent by (output started at /home/senooken/.local/var/www/html/gnusocial/extlib/DB/DataObject.php:4244) in /home/senooken/.local/var/www/html/gnusocial/lib/util.php on line 1624
http://localhost:8080/gnusocial/main/public

そして,ログイン時には以下のメッセージが表示されてログインできない。

Bad Request
There was a problem with your session token.

そこで,.htaccessにPHPのエラーの内,E_WARNINGを追加で表示しないようにerror_reportingを設定する。

--- htaccess.sample     2019-05-18 00:36:12.212973164 +0900
+++ .htaccess   2019-05-18 13:47:58.963552763 +0900
@@ -17,6 +17,9 @@ # Also, check that mod_rewrite is installed and enabled: # https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html +## Suppressing E_WARNING and E_DEPRECATED report for avoiding process stop. +## E_ALL & ~E_WARNING & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED +php_value error_reporting 2147473397 <IfModule mod_rewrite.c> RewriteEngine On

デフォルトだと,E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATEDになっているので,これに~E_WARNINGのマスクを追加する形となる。

.htaccessではPHPの定数は使えないので,シェル上で以下のようにマスク値を計算して得られた値を指定した。

echo $((2147483647^2^8^2048^8192))

Eventクラスの競合対応

http://localhost:8080/gnucosial/へのアクセス時は,初回インストール時の [SUBMIT] 押下後に以下のエラーが出てしまうことがある。

Fatal error: Cannot declare class Event, because the name is already in use in /home/senooken/.local/var/www/html/gnusocial/lib/event.php on line 48

これは,PHP拡張機能のEventとGNU socialのEventクラスの名前空間の競合により発生している。

レンタルサーバーなどのPHPでEvent拡張機能が組み込みで有効になっている場合,ユーザー側で無効化できない。そのため,Evnetクラス (Event::) を使用しているGNU socialのPHPのソースコードに名前空間StatusNetを追加することで競合を回避する。

具体的には,以下のコマンドにより一括して処理する。

cd ~/.local/var/www/html/gnusocial
find . -name "*.php" | while read -r file; do
(! grep -q Event:: "$file" || grep -q 'use StatusNet\\Event as Event;' "$file") && continue
sed -i '0,/<?php/{s/<?php/&\nuse StatusNet\\Event as Event;/}' $file
done
sed -i '/use StatusNet;/d' lib/event.php
grep -q "namespace StatusNet;" lib/event.php || sed -i 's/<?php/&\nnamespace StatusNet;/' lib/event.php

適用済みかどうかの判定を入れているので,何回適用しても問題ない。

インストール設定

動作に必要な設定が完了したので,インストール時の初回設定を行う。

まず,Apache HTTP Serverを以下のコマンドで起動する。

apachectl

http://localhost:8080/gnusocial/install.phpにWebブラウザーでアクセスする。

以下の通り, [Install GNU social] 画面が表示される。

[Install GNU social] 画面

サイトやDBの設定を以下のように入力する。

入力内容
セクション 項目
Site settings Site name gnusocial
Site settings Fancy URLs enable
Site settings Server SSL disable
Database settings Hostname 127.0.0.1:3406
Database settings Type MariaDB
Database settings Name gnusocial
Database settings DB username user
Database settings DB password password
Administrator settings Administrator nickname admin
Administrator settings Administrator password admin
Administrator settings Confirm password admin
Administrator settings Administrator e-mail
Site profile Type of site Community

なお,ここでの入力内容は,基本的に管理画面からも変更可能だが,[Administrator settings]>[Administrator nickname] のみ変更できないので,管理者のユーザー名 (初期ユーザー名) は慎重に入力する。お一人さまサーバーにする場合,このユーザー名はadminではなく,通常使用のアカウント名を入力したほうがいい。

[Database settings]>[Hostname] にlocalhostを指定しても接続できないことに注意する。また,MariaDBの待機ポート番号がデフォルトの3306でない場合は,明示的な指定 (例: :3406) が必要なので注意する。

その他,[Site profile]>[Type of site] でサイトの種類を選択できる。お一人さまサーバーにする場合は,ここで [Single User] を選択する。

実用上は,[Administrator settings]>[Administrator e-mail] は入力したほうがいいだろう。

入力が完了したら,[SUBMIT] を選択する。サービスの初期化が始まる。

インストール画面

PHP 7を使っている場合,警告が大量に表示される。しかし,実用上は問題ないので,ひとまず無視する。

メッセージの最後で,「DONE! You can visit your new GNU social site (log in as “admin”). 」と表示されるので,「new GNU social site」を選択して,http://localhost:8080/gnusocialにアクセスする。

ホーム画面

問題なければ,GNU socialのホーム画面が表示される。

[Login] を選択して,ユーザー名とパスワード (admin/admin) を入力して,[LOGIN] を選択する。

ログイン画面

問題なければ,ログインでき [Public timeline] 画面が表示される。

ログイン後 [Public timeline]

これでGNU socialのインストールが完了となる。

インストール後に,パスワードを変更したり,アバター画像を設定したり望ましい設定がいくつかある。必要に応じて,それは別の記事で記載したい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です