トップ «前の日記(2020年02月22日) 最新 次の日記(2020年04月24日)» 編集

xiphioの備忘録


2020年04月20日

_ [misc] サーバー変更

四月末で長らく使用してきた、現行サーバーから新しいサーバーに移る事になりました。これを機に、更新の無い個人のページは終了、この個人日記のブログのみとなる予定です。ですから、URLも変わります。

サーバーのOSが大昔のFedraCoreから、最新のCentOS8に変わります。仕事の方のHPは専門の方にお願いするとして(でも結構高いね)、このtDiaryによるブログの移動は自分で考えなければ行けません。当初、良くある定番のブログソフトならインストールも何も簡単なんでしょうが(と言うかはじめから入っている)、ここは見栄をはってrubyのプログラムにしたのですが、昔にインストールした手順からして全く憶えていませんから、まぁ、ちょっと大変です。

新しいセキュリティに結構苦労しましたが、なんかゴソゴソやっていると何とか出来る物です。ローカルな環境でのテストを重ね、同じ様にtDiaryによるブログで、更にデータ移行の目処もやっとたちました。共に、5月に入ってから構築予定です。

_ [computer] tDiary、CentOS8の新サーバーへの移行手順

5月から新サーバーでの運用となりますが、それに先立ち、手元の使っていないパソコンで同じ新サーバーと同じCentOS8を入れて、新しいtdiaryをインストールしてみました。以前のFedoraCoreと同じredhat系だし、それ程面倒では無のでは、と思っていたら、、なんたる事、めっちゃ大変でした!

何がいけないかって言うと、SELinuxです。単に無効にすればとても簡単なんですが、何か悔しいので、SELinux有効で何とか動作するようにしました。なんやかんやで、結構時間かかりました。以下、作業の備忘録です。

_ (1) CentOS8をインストール

インストール時は、rootのパスワードとユーザー(xiphio)を作っておく。この時、「このユーザーを管理者に・・」のチェックを入れる。入れないと、sudoerに入れてもらえない。
インストール後、IPアドレスを設定してリスタート。その後、ttermにて、sshにて接続出来る事を確認。

まずは、yumにてパッケージのアップデートしておく。(本当は、dnfを使うべきか)

# yum check-update
# yum update

_ (2) 必要ソフトのインストール、環境設定

(2-1) vsftpdをインストールして、使える様にする

# dnf -y install vsftpd

設定ファイルを修正
# vi /etc/vsftpd/vsftpd.conf

# 83,84行目:コメント解除 ( アスキーモードでの転送を許可 )
ascii_upload_enable=YES
ascii_download_enable=YES

# 101,102行目:コメント解除 ( chroot 有効 )
chroot_local_user=YES
chroot_list_enable=YES

# 104行目:コメント解除 ( chroot リストファイル指定 )
chroot_list_file=/etc/vsftpd/chroot_list

# 110行目:コメント解除 ( ディレクトリごと一括での転送有効 )
ls_recurse_enable=YES

# 115行目:変更 ( IPv4 のみをリスンする場合 )
# IPv4 と IPv6 の両方をリスンする場合は NO で OK
listen=YES

# 124行目:変更 ( もし不要なら IPv6 はリスンしない )
# IPv4 と IPv6 の両方をリスンする場合は YES
listen_ipv6=NO

# chroot を適用しない (上層への cd を許可する) ユーザーを追加する為に、chroot_listを作成し、ユーザー名を記載する
# vi /etc/vsftpd/chroot_list
xiphio

vsftpd起動
# systemctl enable --now vsftpd

firewallを設定し、通して貰う。
# firewall-cmd --add-service=ftp --permanent
success
# firewall-cmd --reload
success

SELinuxに邪魔をされない様に、教えてもらった、ftpdのブール値をonにする。
# setsebool -P ftpd_full_access on

FFFTPにて接続&転送確認

_ (2-2) sudoを使える様にする。

ここで何故かsudoが効かない事が判明。visudoコマンドで、usdoersに追加する。インストール時に、管理者にする旨のチェックをいれておくと、こんなことは必要なかった。

# visudo

ここで、rootの定義の下に同じ様に追加する。

xiphio ALL=(ALL) ALL

これでsudoが使える

_ (2-3) Apacheのインストール

普通にパッケージをインストール。
# yum install httpd

httpとhttpsに通す。
# firewall-cmd --add-service=http
success
# firewall-cmd --add-service=https
success
# firewall-cmd --runtime-to-permanent
success
一時設定をパーマネントにしておく。

httpdの設定ファイル修正しServerNameを設定しておく。
# vi /etc/httpd/conf/httpd.conf

その後、サービスをスタートさせる。
# systemctl start httpd.service

とりあえず、状況を表示。
# systemctl is-active httpd.service
active

起動時に立ち上がる様に登録
# systemctl enable httpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.

テストページが出る事を確認。

_ (2-4) gccなどの開発環境インスト-ル

何とgccやmakeがインストールされていないので、それらをインストール。

# yum -y install gcc
# yum -y install gcc-c++
# yum -y install make

_ (2-5) rubyのインストール

当初rbenvを使ってインストールしたが、インストール場所が気に入らないので却下。それで、次はソースからコンパイルしようとしたが、、

# tar zxvf ruby-2.7.1.tar.gz
# cd ruby-2.7.1
# ./configure
# make
# make install

ここでOpenSSLがインストール出来ないとエラーがでる!、試したがやはりtDiaryが動かない。ちなみに、rubyのインストール先は/usr/local/bin/ruby。それで仕方ないので、普通にyumでインストール

# yum install ruby

こちらのインストール先は/usr/bin/ruby

_ (2-6) userdirを使える様にする

とりあえず、SELinuxを無効にする
# setenforce 0

/etc/httpd/conf.d/userdir.confを修正

UserDir disabled をコメントアウト
UserDir public_html のコメントを取りを有効に

<Directory "/home/*/public_html">内のAllowOverride に Options を追加する

$ sudo systemctl restart httpd でリスタートする

/home/xiphio/public_html作成とパーミッション設定。それから、ホームディレクトリのパーミッションも変更

$ mkdir /home/xiphio/public_html
$ chmod 755 /home/xiphio/public_html
$ chmod 755 /home/xiphio

これで"/(IP-address)/~xiphio/"でテストページが出る事を確認。

ただし、SELinuxを有効にするとブロックされる

_ (2-7) SELinuixの元でも作動するようにする。

SELinuxのラベルの付与をする。

まずどういうラベルが付いているか、調べる。
$ ls -ldZ /var/www/html
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 6 12月 24 05:47 /var/www/html

この"system_u:object_r:httpd_sys_content_t:s0"っていうラベルを付与する。

$ sudo chcon -R system_u:object_r:httpd_sys_content_t:s0 /home/xiphio/public_html

# setenforce 1
でSELinuxを有効にしても
/(IP-address)/~xiphio/でテストページが出る事を確認

_ (3) tDiaryのインストールと動作するまでの設定

(3-1) tdiaryのインストール

再びとりあえず、SELinuxを無効にする。
# setenforce 0

/home/xiphio/public_htmlにて、tdiaryのアーカイブを展開し、そのディレクトリ名をdiaryに変更する。
$ cp dot.htaccess .htaccess
$ cp tdiary.conf.beginner tdiary.conf

二つのファイルをコピーしてから、まずはtdiary.confを修正、.htaccessの認証の部分は、後で修正する。

tdiary.confでデータパスを/home/xiphio/diary_dataに設定。
それと、初期の書法がWikiスタイルになっているので、tDiaryスタイルに戻す。

# 下の@data_pathだけは必ず指定してください!!
#-------------------------------------------
@data_path = '/home/xiphio/diary_data'
~~~~~
@style = 'tDiary'

データのディレクトリを作成
$ mkdir /home/xiphio/diary_data

SElinuxを切ってあっても、diaryは775(グループが書き込める)では駄目で、パーミッション755でないと動かないので変更。

PATHが通らないので、"*.rb"のファイルの最初の行を実際のrubyがインストールされている場所に書き換える。
#!/usr/bin/ruby とする

/(IP-address)/~xiphio/diary で動作確認

# setenforce 1
と、SELinuxを有効にするとエラーとなる。

_ (3-2-1) SELinuxの元でも動作する様にする。(1)

CGIには特別なラベルが必要な様なので、チェック。

# ls -lZ /var/www

drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_script_exec_t:s0 6 12月 24 05:47 cgi-bin
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 6 12月 24 05:47 html

本来のcgi-binにはこの様なラベルが付いている様だ。
なので、このラベルをつけてみる

# chcon -R system_u:object_r:httpd_sys_script_exec_t:s0 /home/xiphio/public_html/diary

一応動いたみたいだが、起動途中で以下の様なエラーになる

File exists @ dir_s_mkdir - /tmp/bundler (Errno::EEXIST)

と言うエラーメッセージ

/tmp/bundlerにファイルが作れないみたいだ

どうするんだ?

_ (3-2-2) SELinuxの元でも動作する様にする。(2)

/var/log/messagesを見ると、

Apr 18 03:44:48 localhost platform-python[6287]:

SELinux is preventing index.rb from getattr access on the directory /tmp/bundler.

#012
#012***** Plugin catchall (100. confidence) suggests **************************
#012
#012If you believe that index.rb should be allowed getattr access on the bundler directory by default.
#012Then you should report this as a bug.
#012You can generate a local policy module to allow this access.
#012Do
#012allow this access for now by executing:
#012# ausearch -c 'index.rb' --raw | audit2allow -M my-indexrb
#012# semodule -X 300 -i my-indexrb.pp

とあるので、良くは分からないがとりあえず、メッセージに従う。最初のコマンドを実行すると新たなメッセージが出る。

# ausearch -c 'index.rb' --raw | audit2allow -M my-indexrb
******************** 重要 ***********************
このポリシーパッケージを有効にするには、以下を実行して下さい:
semodule -i my-indexrb.pp

とても親切ですね。ほぼ同じだけど、後で教えて貰った方をそのまま実行。

# semodule -i my-indexrb.pp

これで動いた!

でも、この二つのコマンド、何をやっているのだろうか?

ausearchでログを見てindex.rbの箇所を選んで、そのログから、audit2allowにて解決のモジュールを作成。そして、semoduleで、そのモジュールを登録

、、って所だろうか。

_ (3-3) tdiaryの認証についての設定

index.rbが動いたので、update.rbにかかる。
最初の行のrubyへのパスを、同じように書き換える

#!/usr/bin/ruby

.htaccessの中の、<Files update.rb>の項の認証を設定する

Files update.rb
AuthName tDiary
AuthType Basic
AuthUserFile /home/xiphio/.htpasswd
Require user (user)
/Files

次はパスワードファイル、/home/xiphio/.htpasswdの作成

$ vi /home/xiphio/.htpasswd

で作成するが、暗号化パスワードは作ってもらわなければならない

今回は、ここ=>http://www.nishishi.com/scripts/htpasswd/

で作った。ユーザーと暗号化パスワードをそのままコピーする。
その後サーバーをリスタートさせて

# systemctl restart httpd

これで日記作成が認証される事を確認

_ (4) tdiaryの設定と、データ移行

テーマは、Earth-brown
テーマはまとめてのダウンロードで落として、その中から該当の物を、インストール下のthemeディレクトリにいれればOK。

データ移行は、まず旧tdiaryから、日記データと画像データを取ってくる。
日記データは、データディレクトリの西暦の物、それ以外は不要。
画像データはインストールディレクトリ下の、imagesにある

画像データを同じくimagesに、日記データもデータディレクトリにコピー
ただし、現行日記データは、EUCなのでUTF-8に変換しなければいけない。

漢字変換は定番のnkf。yumでのインストールは出来なかったので、ソースを取ってきて/usr/local/srcで展開

# make
# make install

でnkfが使える様になる。

旧tdiaryのデータディレクトリにある"(西暦)/*.td2"のファイルをコピーしてきてnkfで変換する。

日記データのディレクトリで、

$ find -name '*.td2' | xargs nkf -w --overwrite

にてすべてのtd2ファイルを漢字変換

正常に表示されている事を確かめて、Web画面の「設定」より、

テーマの選択
「カテゴリ」から「カテゴリインデックスの作成」を選んでOKで、設定完了。