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で、設定完了。