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 |
依存元 |
日付 | バージョン | 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] 画面が表示される。
サイトや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を指定しても接続できないことに注意する。localhostを指定すると以下のエラーが出てしまうので,IPアドレス (127.0.0.1など) を指定する。
Database error: Cannot connect to database: DB Error: connect failed
また,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] 画面が表示される。
これでGNU socialのインストールが完了となる。
インストール後に,パスワードを変更したり,アバター画像を設定したり望ましい設定がいくつかある。必要に応じて,それは別の記事で記載したい。