1年に1回は出るFedoraのインストールの話です。いろいろな都合でこの時期に書いています。名目上は「ソフトウェア等の開発やテストサーバ」として使うためのものなのですが、今現在は単に外部回線から内部データにアクセスするため+VPNなどを使うことでアクセス元を変更するために使っている状態になっています。
今回は「インストールメモ」ということで、来年にも同じことをやるのであれば何をしたのかを残しておくことを主目的に、一部発生した問題についての解説をしながらやっていきたいと思います。
そもそもサーバとして何で使っているのか?
今現在は開発系の要件がないので使っているサービスはかなり少ないです。とりあえずは
- ファイルサーバ(Samba)
- Webサーバ(http+phpなど)
- サーバ操作(SSHなど)
- 動画変換(ffmpeg+QSV)
- DDNS管理
が使えればそれほど問題はないんですよね…。実はというと動画配信サーバ的な使い方(Webミーティング)もテストしてみたいな~とかは考えているのですが、とりあえず「いざとなったら外部からサービスを追加して動かせる状態にしておく」ことができれば対応は可能なので…。そういうことにしておいてください。
インストール前のデータ待避
今回もそうですがサーバのアップグレードではなく新規インストールをして環境を構築します。そのため、元のサーバのデータはできる限り待避しておく必要があります。また、何かの都合で前のサーバの設定ファイルを見る可能性がかなりあると思います。ということで、
- /etc/以下の領域
- /usr/local/以下の領域(何かをインストールしたとき)
- /var/以下にあるデータ
- /home/以下にあるユーザデータ
はしっかり待避しておきましょう。
Fedora36のインストール
インストールメディアを作るのが面倒なのでUSBメモリでのインストールです。今の時代光学ドライブをつけていないことも普通にありますからね…。Rufusを使えば作れますのでISOのデータを書き写してブートしましょう。
ちょっと気になったのはrootの扱いです。Fedora34のインストールの時にはなかったような気がするのですが、rootの設定で「rootパスワードを無効にする」という状態が追加されていました。これにより無理にrootにパスワードを設定する必要はなくなっています。もちろんrootアカウントが利用できないわけではなく、sudoを使って昇格すればいいだけですが、これのおかげでrootが乗っ取られる心配が多少下がります。基本的にはrootパスワードは無効にしてsudoにより処理するのが前提になるようですね。
また、WakeOnLanを使う場合にはネットワークインタフェースにしっかりとその設定(MagicPacketによるWakeOnLanを有効にする)をしておきましょう。そうするとインストール後にWakeOnLanの設定をnmcilで…などと考える必要はなくなります。
各種サービスの設定
というわけでサービスを設定しておきます。今回はインストール方法もメモとして残しておきます。ちなみにsudoは省略してroot権限でインストールしている扱いにしています。
Telnet
SSHを使えばよいはずなのでいまさら使わなくてもよいとは思いますがなんとなく入れてしまうtelnetです。ちなみに外部からtelnetでアクセスできるなんてセキュリティ的にダメダメな設定にはしませんよ。もちろん内部でのやりとりだけです。
# dnf install telnet telnet-server # systemctl enable telnet.socket # firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=[ローカルアドレスIPアドレス/マスク] port port=23 protocol=tcp accept"
ファイアウォールにしっかりと「ローカルIPしか受け付けない」としておかないと大変なことになります。また、今回はIPv4のみ受け付ける設定にしています。
Samba
ネットワーク内のファイル共有(特にWindows)だとこれを入れないと始まりません。あと、このサーバから別のサーバに接続することも考えてクライアントも入れていますので注意してください。
# dnf install samba samba-client # pdbedit -a [ユーザ名] # vi /etc/samba/smb.conf # setsebool -P samba_domain_controller=on # setsebool -P samba_enable_home_dirs=on # setsebool -P samba_export_all_ro=on # setsebool -P samba_export_all_rw=on # setsebool -P smbd_anon_write=on # firewall-cmd --permanent --add-service=samba # systemctl enable smb # systemctl start smb # systemctl enable nmb # systemctl start nmb
SELinuxも入れて設定しているのでこんな感じになっています。ちゃんとSambaで接続するためのユーザを追加するpdbeditもはいっています。
sslh
実は今回一番苦労したのがこれです。sslhとは何かというと「特定のポート(主に443)」に接続したとき、その接続方法によりWebサービスやSSH、OpenVPNなどの適切なサービスに接続するマルチプレクサ」で、sshのポートを特別に開く必要がなくなり、いくつかのネットワーク環境で接続時にはねられる可能性が少なくなるという利点があるので使っています。それはいいのですが…。
今回苦労した点が「Fedora35およびFedora36に初期から入っているsslhは1.21系統で、これにはバグがあり、特定の条件でSegmentFaultを出して停止するため、1.22系統を使う必要があるが、今現在のFedora36には1.22系統のパッケージがない」という点です。つまり、ソースコードをダウンロードして作り直さないとまともに使えない、ということになります。今回はそのビルドの手順になっています。次回のアップデートでは別のものに変えるか、このバグがなくなればよいな~と思っています。
# dnf install pcre2-devel pcre2-static systemd-devel libconfig-devel libev-devel # wget "https://github.com/yrutschle/sslh/archive/refs/heads/master.zip" # cd /usr/local/src # unzip master.zip # cd sslh-master # make install
ということでビルドに必要な一部develパッケージのインストール、ソースコードの取得およびビルドを行っています。ちなみにこれより前にFedora36についているsslhもインストールしているのでそちらに入っているデータが使われている可能性はありますが…。
httpd,php
これも今回迷いました。どうせならHTTP3を使ったテストができるようにNginxを入れようか、とも思ったのですが、結局Apacheにすることにしてphpも標準のものを使うことにしました。設定がかなり面倒ですからね…。ちなみにSSLについては自己署名で作っています。Let’s Encryptあたりから署名をとってくればすむような気はするのですが、今回はしていません。あと、暗号形式は楕円曲線暗号を利用しています。
# dnf install httpd mod_ssl php # vi /etc/httpd/conf/httpd.conf # vi /etc/httpd/conf.d/ssl.conf # vi /etc/httpd/conf.d/php.conf # cd /etc/pki/tls/ # openssl ecparam -name [楕円曲線種別] -genkey -out server.key # openssl req -new -key server.key -out server.crt -subj "/C=JP/ST=[都道府県名]/L=[都市名]/O=[組織名]/OU=[部門名]/CN=[証明書を使うサーバのDNS]" # openssl x509 -req -in server.csr -out server.crt -signkey server.key -days [日数] -sha384 # systemctl start httpd # systemctl enable httpd # firewall-cmd --permanent --add-service=http --add-service=https
ちょっと注意なのが証明書に入れるハッシュ形式です。OpenSSL側はSHA3に対応しているようなのですが、Apache側がSHA3に対応していないらしく、証明書を発行するときにSHA3を使った形式にするとサーバが起動できないという事態になります。また、HTTPSを利用するときにはsslhを利用する関係でApache側のリッスンをlocalhostだけにしておかないとこちらもサーバが起動できなくなる原因になります。
ffmpeg+QSV
最後に動画変換用のffmpegとハードウェアエンコード(QSV)を行うための設定です。
# dnf install "https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm" # dnf install ffmpeg # dnf install libva libva-utils libva-intel-driver libva-intel-hybrid-driver
ちょっと問題になるのはRPMFusionを入れる必要があったことです。ffmpegだけならばRPMFusionを入れなくてもFedora36側にffmpeg-freeというパッケージがあるのでそれを使えばよいのですが、QSVを使うためにlibvaを使おうとするとinte-hybrid-driverのインストールだけではQSVをうまく使うことができない様子だったのでRPMFusionをインストールしてそちらからffmpegやlibva-intel-driverを持ってきています。ちょっとした手順の差があるようです。
ということで設定完了
実は細かい点(DDNSのアップデート処理)を書いていなかったりするのですが、メモ代わりなので書きません。記事を見に来てくれた人向けにある程度有用な情報をメモ代わりに書いておいて共有しておきたいと思います。