Twitterが『X』に変わったり、アカウントの急な凍結もありうるので近状報告的なツールが無いかと探してましたらサーバーにインストールする「てがろぐ」がありました。
「てがろぐ」は、手軽にメモやつぶやきを投稿しておく用途をベースにした個人または少人数向けマイクロブログツール(日記型掲示板CGI)です。 「ブログ記事にするほどではないけど、短いメモを自サイト上に残してしておきたい」という場合にも便利です。
てがろぐ
SNS的な、掲示板的なツールでサーバーにインストールしてCGIで動きます。言語はPerl。
昔、レンタルサーバーに置いてCGI動かす掲示板とかがありましたが、あれのSNSやミニブログ的なツールです。
アカウント登録制で複数人で書き込めるツールですが、投稿するアカウントを自分オンリーにして近状報告的な日記やローカルサーバーで完全非公開日記も出来るんじゃないかと。
言語がPerlでRaspberryPIで動きそうなので、ツールの使い勝手を確認するのにローカルサーバーのラズパイに「てがろぐ」をインストールします。
検証環境
- Raspberry PI ZERO WH(Wi-Fi環境)
- Raspberry PI OS バージョン11
- Apache バージョン2.4.56
- Perl バージョン5.32.1
- CGI設置ディレクトリ「/var/www/html/」
Windows PCからターミナルでSSH接続してラズベリーパイを操作しています。テキストエディタはviを使用。ファイル中身を見る時はlessコマンドを使用してます。
ユーザー・グループの関係
- pi : pi www-data smbuser ※ラズパイディフォルトユーザー
- www-data : www-data pi smbuser ※Apacheユーザー
- smbuser : smbuser www-data pi ※ファイルサーバーのアクセスユーザー
ユーザー「pi」はOSインストール時に設定したデフォルトユーザー、「www-data」はApacheのユーザーです。
「smbuser」はファイルサーバーsamba用にアクセスするユーザーで、Windows PCからラズパイのファイルサーバーにデータを保存するとファイル所有者が「smbuser」になります。
当環境ではWindowsPCからラズパイのファイルサーバーにファイルを保存するとユーザー「smbuser」パーミッション「766」となりますが、環境によっては変わります。
perlはRaspberry PI OSインストール時に入ってました。Apacheは後でインストールしましたが、Raspberry PIでApacheの導入方法は検索すれば多く出てくるので割愛。
現在、PHPとデータベース(MySQLかMriaDB)もインストールしていてCMSのWordPressが動く環境になってます。
Raspberry PIのApacheでPerlをCGIで動かすのにこちらのサイトを参考にしました。ほぼ丸コピですが自環境の問題で、パーミッションの影響でCGIを実行できなかったのでApache設定のところで後述します。
perlスクリプトでHello World
Raspberry PIでPerlの動作確認で「Hello World」が表示されるか確認します。
vi test.pl
#! /user/bin/perl
print "Hello World!\n"
実行
perl test.pl
結果>Hello World!
Perlは動作しますね。
ApacheでPerlをCGIで動かす設定
上記で紹介したサイトの丸コピです。ただ、パーミッションと権限の問題でそのままだと動作しなかったのでその部分も説明します。
自分は管理者権限の必要な作業は最初から管理者権限「sudo su」で入って作業しています。
CGIを有効
a2enmod cgid
systemctl restart apache2
CGIを有効にしてApacheを再起動。
apache2.confのオリジナルをコピー
cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.org
元に戻せるようにオリジナルをコピーしておきます
apache2.confを編集
vi /etc/apache2/apache2.conf
AddHandler cgi-script .cgi .pl
<Directory /var/www/html/>
Options Indexes FollowSymLinks ExecCGI
AllowOverride None
Require all granted
</Directory>
文末の行に追記。
CGIを動かすディレクトリを「/var/www/html/」内にしてます。
よく無料のCGI使えるレンタルサーバー(ホームページスペース)だとCGIファイルは指定されたディレクトリに置くようになってたりしてますね。
保存したらApacheを再起動。
systemctl restart apache2
動作確認
/var/www/html/」下にtest.cgiを作成
vi /var/www/html/test.cgi
#! /usr/bin/perl
#
print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n";
print "<title>Hello by Perl</title>\n";
print "</head>\n";
print "<body>\n";
print "Hello<br>\n";
print "こんにちは<br>\n";
print "</body>\n";
print "</html>\n";
表示するかブラウザで確認します。
500 internal server error
500エラーになり表示しません。
今までPHPで作ったページは表示されていたのでApacheの問題ではないはず…ログを確認してみます。
less /var/log/apache2/error.log
[Mon Oct 02 00:59:41.333985 2023] [cgid:error] [pid 21568] (13)Permission denied: AH01241: exec of '/var/www/html/test.cgi' failed
[Mon Oct 02 00:59:41.339599 2023] [cgid:error] [pid 21563] [client 192.168.10.45:59289] End of script output before headers: test.cgi
エラー内容を翻訳通して見るとパーミッションが関係してるようです。
ls laコマンドでファイル権限を確認します。
ls -la /var/www/htnl
-rwxrw-rw- 1 pi pi 390 Oct 2 01:05 test.cgi
権限を見るとパーミッション[766]、ユーザー[pi]になってます。
766は所有者(この場合www-data)以外のアクセス権限が[読込][書込]となっておりプログラムの[実行]が出来ません。
ユーザー「pi」は「www-data」と同じグループに設定してあるので、グループユーザーから実行できるようにパーミッションを変更します。
パーミッションを変更
chmod -R 775 /var/www/html/
パーミッションを775に変更。www-dataと同じグループに入ってない場合は777にします。
chownで「test.cgi」のユーザーグループを「www-data」に変更してもいいです。
再びブラウザで確認。
表示されました。
パーミッション766なので、ファイル所有者[pi]→[www-data]に変えても実行できます。
てがろぐをインストール
公式サイトから「てがろぐ 完全構成版」をダウンロード。
解凍してラズベリーパイの「/var/www/html/」に保存します。
動作確認だけなので、「/var/www/html/」内のユーザーを「www-data」に変更します。
chown -R www-data:www-data /var/www/html/
公式サイトの「てがろぐ」導入にパーミッションについても説明されていますが、ローカルサーバーで動かすので設定通りにはしていません。
ラズパイに保存した「てがろぐ」のファイルのパーミッションは766になってます。ユーザーを「www-data」に変えたので動くはず…
ブラウザでtegalog.cgiにアクセスします。
表示されました。
tegalog.cgiの中身(特にperl実行パスは)変更していません。
ログインして書き込みできるかも試します。
※てがろぐの使い方は公式サイトを見るかネットで調べてください。
問題なく書き込みも出来ますね。
投稿でFumy Versatile Control Set [ERROR]が出たら
「てがろぐ」ファイルの権限が[www-data]と同じグループ内の別ユーザーの場合、投稿時にFumy Versatile Control Set [ERROR]が出る場合があります。
今回意図的に「てがろぐ」のファイル権限のユーザーを[www-data]と同じグループに入ってる[pi]ユーザーに変更してパーミッションも[755]にしてます。
グループの権限は[読込][実行]状態なので、てがろぐが表示できても投稿で書き込もうとすると[書込]権限がないためエラー画面が表維持されます。
赤枠のメッセージ「パスワード・セッションID格納ファイルへの出力に失敗しました。この処理が完了しないと認証情報を更新できません。」が表示されます。
てがろぐのファイル権限を適切なユーザー、パーミッションに変えると動作しますがローカルのみで動かすなら全てのユーザー権限で[読込][書込][実行]が可能な777でもいいかと思います。
余談、さくらインターネットのさくらのレンタルサーバーだと、公式サイトに載っている手順そのままで「てがろぐ」導入出来ました。「てがろぐ」は最初ログインアカウント設定されてなく誰でも書き込める状態なのでネットに公開するならアカウントの設定必要です。
ゲストアカウントのようにパスワード無しユーザーのアカウントも作成できるみたいです。その場合、複数人がゲストアカウント利用できる状態なので、誰が書き込んだか分からなくなると思いますが。