仕事柄、UbuntuよりもRHELを使うことが圧倒的に多いワタクシ。RHEL6系に慣れ親しんできましたが、そろそろRHEL7のお勉強をしないといけません。CentOS7が出るまでのお試しとして、Fedora20を使ってみました。
CentOS6.5で構築していた、blog-java1の環境を再現することを目標とします。
LXDEの32bit版LiveCDから、VMware Playerの仮想マシンにインストールしました。32bit版LXDEを選んだのは、なんとなくです。
特に悩むようなことは無く、さくっと完了。
RHEL7は、デフォルトでifconfigが入っていないそうです。yum install net-toolsでインストール可能ですが、インターネットに出れないとどうしようもないですねw
/etc/sysconfig/network-scripts/ifcfg-xxxは引き続き有効なので、特に困りませんでした。後継はNetworkManager/nmcliとのことですが、未調査です。
/etc/sysconfig/networkから/etc/hostnameに変更になりましたが、127.0.0.1のIPアドレスだと反映されないみたい? hostsに2エントリ書いて対応。詳細未調査。
# /etc/hosts
127.0.0.1 fedora20.local
192.168.0.160 fedora20.local
# /etc/hostname
fedora20.local
IPv6の無効化はカーネルパラメータだけでいけます。カーネルバージョンが上がったおかげ?
# /etc/default/grub
GRUB_CMDLINE_LINUX=" ... -param || :) ipv6.disable=1"
ついでにrhgbも削除して、グラフィカルブート(起動ロゴ)を停止。編集後、grub.cfgの更新が必要です。
grub2-mkconfig -o /boot/grub2/grub.cfg
CUI起動への変更は、inittabの編集ではなく、以下コマンドになります。
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
Xの起動は、引き続きstartx
でいいみたいです。
iptables設定は、Firewalldに移行となります。無停止の設定変更ができるようになったり、ゾーンの概念が追加されたりしています。ゾーンの概念は、Windowsの「ネットワークの場所」に似てますね。
穴開けはポート番号でも指定できますが、デフォルトはサービスという概念になっています。httpやsshといったように表記する、/etc/servicesのアレです。今回はポート番号で指定するようにしました。
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
iptablesツールは引き続き使えるので、統計情報はiptables -L -v
で見れます。長いけど。
ステルススキャンやフラグメントパケット対策は、firewall-cmd --directでやるのがお作法?要調査。
一番大きな変更ですね。initからsystemdに変わることで、起動スクリプトという概念が無くなります。yumでインストールする場合にはあまり困りませんが、make installだとしんどかったです。今回作った.serviceを以下に晒します。未保証。
# /lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# /lib/systemd/system/postgresql.service
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
TimeoutSec=120
User=postgres
Group=postgres
Environment=PGROOT=/usr/local/postgresql/
SyslogIdentifier=postgres
PIDFile=/usr/local/postgresql/data/postmaster.pid
ExecStart=/usr/local/postgresql/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120
ExecReload=/usr/local/postgresql/bin/pg_ctl -s -D ${PGROOT}/data reload
ExecStop=/usr/local/postgresql/bin/pg_ctl -s -D ${PGROOT}/data stop -m fast
OOMScoreAdjust=-200
[Install]
WantedBy=multi-user.target
# /lib/systemd/system/jetty.service
[Unit]
Description=Jetty - Servlet Engine and Http Server
After=network.target
[Service]
Type=idle
TimeoutSec=240
User=jetty
Group=jetty
PIDFile=/usr/local/jetty/jetty.pid
ExecStart=/usr/local/jetty/bin/jetty.sh start
ExecReload=/usr/local/jetty/bin/jetty.sh restart
ExecStop=/usr/local/jetty/bin/jetty.sh stop
[Install]
WantedBy=multi-user.target
Type=idleにすると、バックグラウンド起動的になっていい感じです。
自作のjetty.serviceがおかしいせいだと思いますが、/etc/default/jettyが参照されなくなってしました。~/.jettyrcに移行して対応。
それから、PIDFileの設定をミスっているとsystemctl startが返ってこず、30秒後にタイムアウトエラーになります。ちょいハマりました。
systemctl -t serviceだとなぜかbluetooth.serviceが出なかったりするので、systemctl list-unit-files | grep enabled
で確認しました。今回は以下のサービス等を停止しました。
systemctl disable alsa-state.service
systemctl disable avahi-daemon.service
systemctl disable bluetooth.service
systemctl disable chronyd.service
systemctl disable cups.service
systemctl disable iscsi.service
systemctl disable iscsid.socket
systemctl disable iscsiuio.socket
systemctl disable nfs-lock.service
systemctl disable nfs.target
systemctl disable remote-fs.target
systemctl disable rpcbind.service
systemctl disable rpcbind.socket
systemctl disable ModemManager.service
systemctl disable NetworkManager.service
rpcbind.serviceが停止できずにちょいハマり。原因はnfs.targetが有効になっていたせいでした。
LiveCDからインストールした場合は、initに以下が残っているようなので削除します。
chkconfig livesys-late off
chkconfig livesys off
yumにfastestmirrorが入ってなかったのでインストールしました。
パッケージのapacheは2.2から2.4に変更されていますので、httpd.confの変更が必要でした。
Jetty9.1.4がバグ持ちだったので、9.1.2にダウングレードしました。Fedora20とは無関係。
無事に、blog-java1の環境を再現できました。どんとこいCentOS7!