BSD を試してみよう、第 3 部/全 7 回: FreeBSD、奉仕の力

BSD を試してみよう、第 3 部/全 7 回: FreeBSD、奉仕の力

フリーBSDこれは、BSD シリーズのオペレーティング システムに関する 7 部構成のシリーズの第 3 部です。

パート3:BSDを試してみよう、パート3/7:FreeBSD、奉仕の力

FreeBSDは最も広く使われているBSDオペレーティングシステムです。amd64、64ビットARM(aarch64)、i386、32ビットARM(armv6、armv7)、RISC-V、PowerPCで動作します。以前、私はこれら3つのBSD(DragonFlyはまだ存在していませんでした)について、「NetBSD = どんなOSでも動く、OpenBSD = 高いセキュリティ、FreeBSD = amd64で最高」と考えていました。

FreeBSD 14.0 をインストールします。

DVDから起動しました。起動にかなり時間がかかりました。2分近くかかりました。そしてインストーラーが起動しました。

FreeBSD QEMU タブレット

なぜ VPS に USB タブレットが接続されているのですか?

FreeBSD スタート

グラフィカル インストーラーはありませんが、これはすべての BSD に当てはまると思います。

ここからは、あまり面白くない画面 (キーマップの選択、タイムゾーンの設定など) をスキップし、FreeBSD のインストール プロセスを独特なものにしている点に焦点を当てます。

FreeBSD ホスト名

システムに freebsd という名前を付け、DHCP を使用してネットワークをセットアップしました。

FreeBSD ソース

ちょっと調べてみたくてportsを追加しました。FreeBSDにはpackagesportsがあります。packagesはコンパイルされたバイナリで、Linuxでaptやyumを使う場合と同じです。通常はpackagesがバイナリや設定ファイルのインストールなどを行うので、これが望ましいでしょう。しかし、portsを通してソフトウェアを入手することもできます。portsはソースコードなので、コンパイルしてインストールします。一部のソフトウェアがportsとしてのみ提供される理由は様々ですが、ソフトウェアがpackageとportsの両方を備えている理由も数多くあります(主に、コンパイルフラグを変更したい場合など)。OpenBSDにも同様の仕組みがあるのは知っています。

ここでは、パッケージのみを使用します。

FreeBSD ZFSなし

このVPSのRAMは2GBしかなく、「低メモリシステム」でのZFSについて調べることを推奨されていたので、ZFSは使わないことにしました。そんな面倒な作業は不要でした。UFSで十分でしょう。ZFSは、専用サーバーでも仮想ボリュームでも、複数のドライブを搭載したシステムでより便利だと思います。ただし、後者はすでに冗長性を備えています。

FreeBSD のパーティション分割

FreeBSD GUID

デフォルトはMBRです。MBRは随分前に使われなくなったんじゃないでしょうか?

FreeBSD のパーティション分割

良さそうですね。どの程度のシステム管理者になりたいかによります。理論的には、実行ファイルを許可するファイルシステムを分離したり、ログを追記型に設定したり、/usr/binが破損した場合に備えて静的バイナリをすべて1つのパーティションにまとめたり、誰かがドライブをいっぱいにできないように/varと/homeを分離したりといったことが考えられます。しかし、趣味でVPSを使う場合は、容量節約の方が重要で、ユーザーが私だけなので、このように「オールインワンパーティション」で運用するのが一般的です。

この後、確認/コミットし、パーティションが書き込まれ、上で選択したファイルセットが抽出されました。

FreeBSDインストールFreeBSD 抽出

現在、システム構成オプションがいくつかあります。

FreeBSDの選択肢

ntpdとntpd_sync_on_startをオンにしました。今思えば、mousedをオフにすべきでした。

FreeBSDの選択肢

マルチユーザー共有ホスティングでは、これらの設定をもっと有効にしておくと良いでしょう。/tmp をクリアし、PID をランダム化し、コンソールでパスワードを要求するのは良いアイデアだと思います(後者は完璧な保護策ではありませんが、ホスティングプロバイダーの退屈な若手システム管理者に対して何もしないよりはましです)。好きな時に dmesg を実行できないのは面倒なので、このシングルユーザーシステムでは、uid や gid などを確認するための他のオプションと同様に、これらを有効にしたままにしています。

FreeBSDユーザー

論理的に「はい」か「いいえ」で答えられる質問をするなら、誰かが「はい」と答えても驚くようなことではないはずです。うーん。

そしてcsh。なぜダメなのでしょう?ここはBSDのコアの本拠地ですから。(OpenBSDはkshを使っています。)

FreeBSD 再起動FreeBSD ロゴ画面

素敵なロゴですね!

FreeBSDプロンプト

そして我々は追い出された。
rootの.sshを設定し、sshd_configを変更して公開鍵によるrootログインを許可し、他にもいくつか調整しました。さて…sshを再起動するにはどうすればいいでしょうか?
まあ、これは確かに機能しますが、FreeBSD のシステム管理者はうんざりするでしょう…
 root@freebsd:/etc/rc.d # ./sshd を再起動します
sshd 構成の健全性チェックを実行しています。
sshd を停止しています。
PIDS 82151 を待機しています。
sshd 構成の健全性チェックを実行しています。
sshd を起動しています。
root@freebsd:/etc/rc.d #
正しいやり方は後で学びます。
ps は異なりますが、多くのものが馴染み深いです。
 root@freebsd:~ # ps ax
PID TT STAT TIMEコマンド
0 - DL 0:00.00 [カーネル]
1 - ILs 0:00.00 /sbin/init
2 - WL 0:00.23 [時計]
3 - DL 0:00.00 [暗号]
4 - DL 0:00.01 [カム]
5 - DL 0:00.00 [busdma]
6 - DL 0:00.08 [rand_harvestq]
7 - DL 0:00.04 [ページデーモン]
8 - DL 0:00.00 [vmdaemon]
9 - DL 0:00.01 [bufdaemon]
10 - DL 0:00.00 [監査]
11 - RNL 24:35.05 [アイドル]
12 - WL 0:00.37 [挿入]
13 - DL 0:00.00 [geom]
14 - DL 0:00.00 [シーケンサー 00]
15 - DL 0:00.01 [usb]
16 - DL 0:00.00 [vnlru]
17 - DL 0:00.01 [シンカー]
5766 - 0:00.00 dhclient: system.syslog (dhclient)
6231 - 0:00.00 dhclient: vtnet0 [priv] (dhclient)
16963 - IC 0:00.00 dhclient: vtnet0 (dhclient)
17110 - Ss 0:00.05 /sbin/devd
17263 - 0:00.00 sshd: /usr/sbin/sshd [リスナー] 10-100回の起動のうち0回 (s
17834 - Ss 0:00.55 sshd: root@pts/0 (sshd)
58639 - Ss 0:00.02 /usr/sbin/syslogd -s
71089 - Ss 0:00.06 /usr/sbin/ntpd -p /var/db/ntp/ntpd.pid -c /etc/ntp.conf
75845 - Ss 0:00.00 /usr/sbin/cron -s
18973 0 Ss 0:00.03 -sh (sh)
41237 0 R+ 0:00.00 ps 斧
85009 v0 Is+ 0:00.00 /usr/libexec/getty PC ttyv0
85403 v1 Is+ 0:00.00 /usr/libexec/getty PC ttyv1
85703 v2 Is+ 0:00.00 /usr/libexec/getty PC ttyv2
85838 v3 Is+ 0:00.00 /usr/libexec/getty PC ttyv3
86419 v4 Is+ 0:00.00 /usr/libexec/getty PC ttyv4
86767 v5 Is+ 0:00.00 /usr/libexec/getty PC ttyv5
86776 v6 Is+ 0:00.00 /usr/libexec/getty PC ttyv6
87192 v7 Is+ 0:00.00 /usr/libexec/getty PC ttyv7

パッケージのインストール

では、いくつかパッケージをインストールしましょう。FreeBSDのパッケージマネージャはpkg(8)です。manページには次のように書かれています。

pkg(8) がまだインストールされていない場合は、pkg(8) を取得し、署名を検証した後、インストールを行い、元のコマンドを pkg(8) に転送します。既にインストールされている場合は、要求されたコマンドは実際の pkg(8) に転送されます。

とても助かります!

 root@freebsd:~ # パッケージ
パッケージ管理ツールがシステムにまだインストールされていません。
今すぐ取得してインストールしますか? [y/N]: y
pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/quarterly から pkg をブートストラップしています。お待ちください...
信頼できる証明書 pkg.freebsd.org.2013102301 を使用して署名を検証しています...完了
pkg-1.21.2 をインストールしています...
pkg-1.21.2 を抽出中: 100%
pkg: 引数が足りません
使用法: pkg [-v] [-d] [-l] [-N] [-j |-c |-r ] [-C ] [-R ] [-o var=value] [-4|-6] []

利用可能なコマンドとオプションの詳細については、「pkg help」を参照してください。

root@freebsd:~ # pkg search nginx
pkg: リポジトリ FreeBSD が見つかりません。「pkg update」が必要です

^パッケージ:
信号受信、クリーンアップ中

root@freebsd:~ # パッケージアップデート
FreeBSD リポジトリ カタログを更新しています...
meta.conf を取得中: 100% 178 B 0.2kB/s 00:01
data.pkg を取得中: 100% 7 MiB 7.3MB/秒 00:01
エントリの処理: 100%
FreeBSD リポジトリの更新が完了しました。34072 個のパッケージが処理されました。
すべてのリポジトリは最新です。
ルート@freebsd:~ #

まずはwgetから始めましょう。

 root@freebsd:~ # パッケージ検索 wget
wget-1.24.5 HTTP(S) および FTP 経由でネットからファイルを取得する
wget2-2.1.0_1 ファイルおよび再帰的なウェブサイトダウンローダー
wgetpaste-2.34 bash スクリプト経由で複数の pastebin サービスに貼り付ける
root@freebsd:~ # pkg インストール wget
FreeBSD リポジトリ カタログを更新しています...
FreeBSD リポジトリは最新です。
すべてのリポジトリは最新です。
データベースダイジェスト形式の更新: 100%
次の 5 つのパッケージが影響を受けます (チェックされている 0 個中)。

インストールする新しいパッケージ:
gettext ランタイム: 0.22.5
インデックス情報: 0.3.1
libidn2: 2.3.7
libunistring: 1.2
wget: 1.24.5

インストールするパッケージの数: 5

このプロセスには 8 MiB の追加スペースが必要になります。
2 MiB をダウンロードします。

この操作を続行しますか? [y/N]: y
[1/5] wget-1.24.5.pkg を取得中: 100% 774 KiB 792.9kB/s 00:01
[2/5] indexinfo-0.3.1.pkg を取得中: 100% 6 KiB 6.0kB/s 00:01
[3/5] libidn2-2.3.7.pkg を取得中: 100% 155 KiB 159.1kB/s 00:01
[4/5] libunistring-1.2.pkg の取得: 100% 680 KiB 696.1kB/s 00:01
[5/5] gettext-runtime-0.22.5.pkg を取得中: 100% 231 KiB 236.7kB/s 00:01
整合性をチェックしています...完了 (競合 0 件)
[1/5] indexinfo-0.3.1 をインストールしています...
[1/5] indexinfo-0.3.1 の抽出: 100%
[2/5] libunistring-1.2 をインストールしています...
[2/5] libunistring-1.2 の抽出: 100%
[3/5] libidn2-2.3.7 をインストールしています...
[3/5] libidn2-2.3.7 の抽出: 100%
[4/5] gettext-runtime-0.22.5 をインストールしています...
[4/5] gettext-runtime-0.22.5 の抽出: 100%
[5/5] wget-1.24.5 をインストールしています...
[5/5] wget-1.24.5 の抽出: 100%
ルート@freebsd:~ #

root@freebsd:~ # mkdir /root/swdist
root@freebsd:~ # cd /root/swdist/
root@freebsd:~/swdist # wget https://wordpress.org/latest.zip
--2024-05-25 19:05:14-- https://wordpress.org/latest.zip
wordpress.org (wordpress.org) を解決しています... 198.143.164.252
wordpress.org (wordpress.org)|198.143.164.252|:443 に接続しています...接続されました。
HTTP リクエストが送信され、応答を待っています... 200 OK
長さ: 26193148 (25M) [application/zip]
保存先: 'latest.zip'

latest.zip 100%[====================>] 0.1秒で24.98M --.-KB/秒

2024-05-25 19:05:15 (183 MB/秒) - 'latest.zip' を保存しました [26193148/26193148]

root@freebsd:~/swdist #

root@freebsd:~/swdist # pkg インストール 解凍
FreeBSD リポジトリ カタログを更新しています...
FreeBSD リポジトリは最新です。
すべてのリポジトリは最新です。
次の 1 つのパッケージが影響を受けます (チェックされた 0 個中):

インストールする新しいパッケージ:
解凍: 6.0_8

インストールするパッケージの数: 1

ダウンロードするには 140 KiB が必要です。

この操作を続行しますか? [y/N]: y
[1/1] unzip-6.0_8.pkg を取得中: 100% 140 KiB 143.1kB/s 00:01
整合性をチェックしています...完了 (競合 0 件)
[1/1] unzip-6.0_8 をインストールしています...
[1/1] unzip-6.0_8 を解凍中: 100%

ここで、Nginx、MariaDB、PHP-FPM が必要になります。

 root@freebsd:~/swdist # pkg install nginx mariadb php-fpm
FreeBSD リポジトリ カタログを更新しています...
FreeBSD リポジトリは最新です。
すべてのリポジトリは最新です。
pkg: リポジトリ内に 'mariadb' に一致するインストール可能なパッケージが見つかりません
pkg: リポジトリ内に 'php-fpm' に一致するインストール可能なパッケージが見つかりません
root@freebsd:~/swdist # pkg search mariadb
mariadb-connector-c-3.3.8_1 C用MariaDBデータベースコネクタ
mariadb-connector-odbc-3.1.20 odbc 用の MariaDB データベース コネクタ
mariadb1011-client-10.11.7 マルチスレッド SQL データベース (クライアント)
mariadb1011-server-10.11.7 マルチスレッド SQL データベース (サーバー)
mariadb105-client-10.5.23 マルチスレッド SQL データベース (クライアント)
mariadb105-server-10.5.23 マルチスレッド SQL データベース (サーバー)
mariadb106-client-10.6.17 マルチスレッド SQL データベース (クライアント)
mariadb106-server-10.6.17 マルチスレッド SQL データベース (サーバー)
p5-DBD-MariaDB-1.21 Perl5 データベース インターフェース (DBI) 用の MariaDB ドライバー
rubygem-azure_mgmt_mariadb-0.17.4 Microsoft Azure Microsoft Azure MariaDB Ruby 用ライブラリ Ruby 用クライアント ライブラリ

つまり、仮想パッケージは存在しないということですね。また、php-fpm は独立したパッケージではなく、PHP に含まれていることがわかりました。さて、本題に入りましょう。

 root@freebsd:~/swdist # pkg インストール mariadb106-server mariadb106-client php83
FreeBSD リポジトリ カタログを更新しています...
FreeBSD リポジトリは最新です。
すべてのリポジトリは最新です。
次の 18 個のパッケージが影響を受けます (チェックされた 0 個中)。

インストールする新しいパッケージ:
バッシュ: 5.2.26_1
ブーストライブラリ: 1.84.0
ガレラ26: 2016年4月26日_2
icu: 74.2_1,1
libargon2: 20190702_1
libedit: 3.1.20230828_1,1
libiconv: 1.17_1
liblz4: 1.9.4_1,1
libxml2: 2.11.7
mariadb106-クライアント: 10.6.17
mariadb106-server: 10.6.17
pcre2: 10.43
php83: 8.3.6
リードライン: 8.2.10
rsync: 3.3.0
unixODBC: 2.3.12_1
xxハッシュ: 0.8.2_1
バージョン: 1.5.6

インストールするパッケージの数: 18

このプロセスには 589 MiB の追加スペースが必要になります。
ダウンロードサイズは 87 MiB です。

この操作を続行しますか? [y/N]:

mariadb106-server-10.6.17からのメッセージ:

--
MariaDBはhier(7)を尊重し、/etcと/etc/mysqlをチェックしません。
my.cnf。既存のmy.cnfファイルをこれらのパスから
/usr/local/etc/mysql または /usr/local/etc。サンプル
設定ファイルは/usr/local/etc/mysqlに提供されています。
および /usr/local/etc/mysql/conf.d。
rc(8)スクリプトは設定に/var/db/mysql/my.cnfを使用しなくなりました。
ログと PID ファイルには /var/db/mysql も使用されません。

このポートにはmytop perlスクリプトは含まれていません。これは
MariaDBのtarballですが、最新バージョンは
データベース/mytop ポート

wsrep クラスタリングを使用するには、構成ファイルを追加する必要があります。
/usr/local/etc/mysql/conf.d/wsrep.conf.sampleをコピーして
/usr/local/etc/mysql/conf.d/wsrep.conf にアクセスし、そこで必要なものを変更します。

上記のコマンドに入れるのを忘れていた php83-extensions と nginx もインストールしました。

この「MariaDBからのメッセージ」から多くのことを学びました。hier(7)のマニュアルページを読んで、FreeBSDではローカルにインストールされたソフトウェアは/usr/localに置かれるシステムを採用していることを知りました。/usr/localが何なのかは分かりましたが、Linuxの世界では、ディストリビューションのパッケージマネージャーから何かをインストールすると、/usr/binなどに置かれます。自分でソフトウェアをダウンロード、ビルド、インストールする場合は、通常/usr/localに置かれます。FreeBSDが言っているのは、「作成者が作成したファイルシステムは純粋なままであるべきであり、サイトのカスタマイズ、ソフトウェアのインストール、ソースコードなどはすべて/usr/localに置いて構わない」ということです。

奉仕:奉仕する力

Unix が他の Unix と異なる点の 1 つは、通常、起動/初期化にありますが、FreeBSD も例外ではありません。

サービスを開始、停止、再起動などするには、次のように呼び出します。

 nginxサービスの再起動

しかし、「service nginx enable」という項目がありません。起動時にNginxを起動するには、/etc/rc.confを編集する必要があります。

そのファイルには次のような行があります。

 mysql_enable="はい"
nginx_enable="はい"

どうやら、このファイルを編集するだけで済むようです。しかし、FreeBSD では sysrc コマンドを使って編集します。

 sysrc nginx_enable="はい"

「<サービス名>_enable」という構文は、私には少し扱いに​​くいように思います。シェルスクリプトがこのファイルを読み込んでいるためだとは思いますが、/etc/services_enabled を作成して有効化するサービスをリストアップする方がずっと分かりやすいでしょう。

WordPress の配信準備

一つ一つのコマンドを詳しく説明するのは退屈なのでやめておきます。私が実行したコマンドは以下のとおりです。

mysql_secure_installationを実行しました。

nginx をインストールした後、/usr/local/etc/nginx/nginx.conf を変更して /usr/local/etc/nginx/sites を含めました。これは、Debian の sites-enabled/sites-available セットアップに似ていますが、もう少し手軽です。

これを行うための具体的な指示は次のとおりです。

 /usr/local/etc/nginx/sites/* をインクルードします。

blog.lowend.party nginx 設定を作成しました。

php-fpm のチューニングを何も変更せずに開始しました。

 root@freebsd:/usr/local/etc # サービス php-fpm を開始
php_fpm を 'start' できません。/etc/rc.conf で php_fpm_enable を YES に設定するか、'start' の代わりに 'onestart' を使用してください。

root@freebsd:/usr/local/etc # sysrc php_fpm_enable="YES"
php_fpm_enable: -> はい
root@freebsd:/usr/local/etc #

root@freebsd:/usr/local/etc # サービス php-fpm を開始
php-fpm 構成の健全性チェックを実行します。
[2024年5月26日 09:40:03] 通知: 設定ファイル /usr/local/etc/php-fpm.conf のテストが成功しました
php_fpm を起動しています。

/usr/local/etc/php-fpm.d/www.conf を見ると、php-fpm が 127.0.0.1:9000 を使用していることがわかります。Unix ソケットを使いたいのですが、どこに配置すればいいでしょうか?

 root@freebsd:/usr/local/etc# find / -type s -print
/var/run/devd.pipe
/var/run/devd.seqpacket.pipe
/var/run/log
/var/run/logpriv
/var/run/mysql/mysql.sock

/var/run がその場所のようです。

さて、ディレクトリをいくつか作成してサイトの設定をしましょう。サイト名はblog.lowend.partyです。私はすべてを/web以下に整理するのが好きです。nginxはユーザー「www」、グループ「www」で実行されます。

 root@freebsd:/usr/local/etc/nginx/sites # mkdir /var/log/nginx/blog.lowend.party/
root@freebsd:/usr/local/etc/nginx/sites # cd /var/log/nginx/blog.lowend.party/
root@freebsd:/var/log/nginx/blog.lowend.party # touch アクセス.log エラー.log
root@freebsd:/var/log/nginx/blog.lowend.party # chown www:www *.log
root@freebsd:/var/log/nginx/blog.lowend.party # cd ..
root@freebsd:/var/log/nginx # chgrp www blog.lowend.party/
root@freebsd:/var/log/nginx # chmod 775 blog.lowend.party/
root@freebsd:/var/log/nginx # ls -ld blog.lowend.party/
drwxrwxr-x 2 ルート www 512 5月26日 09:45 blog.lowend.party/
root@freebsd:/var/log/nginx # ls -lR blog.lowend.party/
合計 0
-rw-r--r-- 1 www www 0 5月26日 09:45 アクセス.log
-rw-r--r-- 1 www www 0 5月26日 09:45 error.log

root@freebsd:/var/log/nginx #

ところで、viで何かをコピーするときにハイライトすると、最初に

:mouse-=a

vim と同じように。FreeBSD は BSD 由来の vi を使用しているためです。

 root@freebsd:/usr/local/etc/nginx # mkdir -p /web/blog.lowend.party
root@freebsd:/usr/local/etc/nginx # vi /web/blog.lowend.party/index.html

今のところうまくいっていますか?

FreeBSD 静的成功

では、さらにいくつかのことをやってみましょう。

FreeBSDについてもっと学ぶ

certbot をインストールしました。面白いことに:

 root@freebsd:/usr/local/etc/nginx # pkg install py39-certbot-nginx
FreeBSD リポジトリ カタログを更新しています...
FreeBSD リポジトリは最新です。
すべてのリポジトリは最新です。
新しいバージョンの pkg が検出されました。最初にこれをインストールする必要があります。
次の 1 つのパッケージが影響を受けます (チェックされた 0 個中):

アップグレード対象のインストール済みパッケージ:
パッケージ: 1.21.2 -> 1.21.3

アップグレードするパッケージの数: 1

ダウンロードするには12 MiBが必要です。

この操作を続行しますか? [y/N]: y

それで、仕事の合間にたまたまpkgの新しいアップデートがリリースされたんです。NetcraftによるとBSDは死につつあるらしい…なんてこった。

Certbotパッケージは、証明書を更新するために/etc/periodic.confを修正する必要があると提案しました。しかし、このファイルは存在しませんでした。そこで、論理的に考えてman periodic.confを実行しました。そこで、以下のことを知りました。

これは /etc/defaults ディレクトリに存在し、一部は /etc 内の同じ名前のファイルによって上書きされる可能性があり、そのファイル自体は /etc/periodic.conf.local ファイルによって上書きされる可能性があります。

/etc/defaults/periodic.conf には次のように書かれています:

このファイルを編集しないでください。上書きは
# 代わりに $periodic_conf_files

...

# これらのデフォルトを上書きするファイルはどれですか?
periodic_conf_files="/etc/periodic.conf /etc/periodic.conf.local ${_localbase}/e
tc/periodic.conf"

ここで、DNS が機能しているかどうかを確認したかったので、次の操作を実行しました。

 # nslookup blog.lowend.party
-sh: nslookup: 見つかりません

ほぼすべてのLinuxディストリビューションやOSと同様に、nslookupが含まれているパッケージを見つけるにはGoogleで検索する必要がありました。ところが、Googleは私を惑わせました。最初に見つけたフォーラムのコメントには、nslookupはbindの一部で、unboundに置き換えられたと書かれていました。

しかし、「pkg install unbound」ではインストールされていなかったので、「pkg remove unbound」を実行しました。ちょっと待ってください…「bind tools」タイプのパッケージはあるのでしょうか? 案の定、ありました

pkg インストール bind-tools

この時点で、シェルを酷使していたため、bashシェルが恋しくなっていました。幸いにもインストールされていて、実際には/etc/shellsに既に設定されていました。

 bash -o vi

ああ、爽快ですね。大切な道具が交換されると、反発してしまうのが人間の性でしょうか。

ちなみに、私は root 用にこれを変更しませんでした。FreeBSD に貢献しているさまざまなエンジニアが、root のデフォルト シェルで実行されることを前提としてコードを記述しているからです。

WordPressの最終版

MySQLデータベースやユーザーなどを作成しました。

データベースをWordPressで作成します。
'StrongPassword' で識別されるユーザー 'wordpress'@'localhost' を作成します。
wordpress.* のすべての権限を 'wordpress'@'localhost' に付与します。

権限をフラッシュするのは愚かなので、行いませんでした。

 cd /web/blog.lowend.party/
cp /root/swdist/latest.zip
/root/swdist/latest.zip を解凍します。
rm インデックス.html
mv wordpress/* 。
rmdir ワードプレス

インストールの準備はできたと思います。では見てみましょう:

悪いゲートウェイ

いやああああ…

最初に考えたのは、php-fpm がダウンしている(実際にはダウンしていなかった)か、設定ミスか… もしかしたらそうだったのかもしれない。Unix ソケットを使用するように変更していたので、Nginx のログに権限拒否エラーが表示されていた。/var/run/php-fpm.sock のパーミッションを変更した方がいいのだろうか? うーん、代わりに 127.0.0.1:9000 を使用するように変更し、nginx のサイト設定も更新した。

その後:

FreeBSDの成功

そしてその時点で、私たちは WordPress に夢中になっています。

Phoronixを試してみましょう

pkg インストール phoronix-test-suite-php83-10.8.4_2

これは成功したが、

phoronix-test-suite nginx をインストール

結果:

            インストーラーはゼロ以外の終了ステータスで終了しました。

            エラー: make: 致命的なエラーが発生しました - 続行できません

            ログ: ~/.phoronix-test-suite/installed-tests/pts/nginx-3.0.1/install-failed.log

    [問題] pts/nginx-3.0.1 がインストールされていません。

ログには次のようなエラーが多数あります:

 sed: 1: "nginx_/conf/nginx.conf": n コマンドの末尾に余分な文字があります
sed: 1: "nginx_/conf/nginx.conf": n コマンドの末尾に余分な文字があります
sed: 1: "nginx_/conf/nginx.conf": n コマンドの末尾に余分な文字があります
sed: 1: "nginx_/conf/nginx.conf": n コマンドの末尾に余分な文字があります
sed: 1: "nginx_/conf/nginx.conf": n コマンドの末尾に余分な文字があります
sed: 1: "nginx_/conf/nginx.conf": n コマンドの末尾に余分な文字があります
tar: デフォルトのロケールを設定できませんでした
make: "/root/.phoronix-test-suite/installed-tests/pts/nginx-3.0.1/wrk-4.2.0/Makefile" 6行目: 無効な行タイプです
make: "/root/.phoronix-test-suite/installed-tests/pts/nginx-3.0.1/wrk-4.2.0/Makefile" 9行目: 無効な行タイプです
make: "/root/.phoronix-test-suite/installed-tests/pts/nginx-3.0.1/wrk-4.2.0/Makefile" 10行目: 警告: ターゲット "ifeq" の重複スクリプトは無視されます
make: "Makefile" 行 8: 警告: ここで定義されている "ifeq" の以前のスクリプトを使用しています

問題があるのは私の nginx.conf ではありません:

 # nginx -t
nginx: 設定ファイル /usr/local/etc/nginx/nginx.conf の構文は正常です
nginx: 設定ファイル /usr/local/etc/nginx/nginx.conf のテストが成功しました

GitHubからpkgを削除してインストールしようかと思ったのですが、GitHubにはFreeBSDのpkgと同じバージョンが置いてありました。まあ、私の知識では無理ですね。公平を期すために言うと、PTSはこう言っています。

Phoronix Test Suiteは、Linux、*BSD、Solaris、macOS、Windowsシステムでサポートされています。ただし、テストを実行するための最も機能が豊富でサポートが充実したオペレーティングシステムはLinuxです。

なぜ起動が遅いのか?というか、なぜ起動が遅くなるようにしたのか…

そのため、ISO から起動すると、起動に長い時間がかかりました。これは、何らかのインストール カーネルが大量の追加プローブを実行したり、インストール/検出スクリプトを大量に実行したりしているためだと思いました。

しかし、私はこれまで 3 回再起動し、コンソールで確認しましたが、同じことが見られます。

ロゴが表示され、自動起動のカウントダウンが始まった後、カーネルがロードされます。最初の5~6秒間は、多くのメッセージが流れ、処理が急速に進んでいるように見えます。その後、次の画面が表示されます。

FreeBSDが動かなくなった

この時点で、約1分45秒間画面が静止します。その後、画面が突然このように変化します。「変化する」というのは、スクロールではなく画面全体が更新され、このように表示されるからです。

FreeBSDの解決

最初は、最初の起動/セットアップの完了時にハングアップが発生したのではと考えましたが、3 回の再起動後も問題は変わりません。

2つのことが起こっていると思います。まず、表示のバグかリセットが更新されていないため、1分45秒のハングのうち、どれくらいがハングなのか、どれくらいが上記の2番目の画面のメッセージの表示にかかっているのかわかりません。次に、タイムアウトか起動に時間がかかっているかのどちらかです。FreeBSDがエンタープライズグレードのサーバーで起動に2分もかかるなんてあり得ませんよね?

まあ、FreeBSD の問題なのか、それとも私が何かミスをしたのか、確認してみましょう。Vultr で同じ仕様の freebsd2 VM を作成しました。今回は FreeBSD 14.0 テンプレートを使用しました。

そして、その VM は約 6.5 秒で起動します。

そうですね、次の 2 つのうちのいずれかが考えられます。

  • 私は初心者のFreeBSDシステム管理者として何かを台無しにしました
  • Vultr上のFreeBSDには、Vultrが認識していて私が認識していない最適化が必要です。パラメータの調整、ハードウェアサポートの追加(または削除)、特定のカーネル設定などが必要になる可能性があります。フォーラムでテンプレートとISOインストールを比較する時間があれば、原因を突き止められると思います。

私は Vultr で FreeBSD を実行するつもりだったので、そのテンプレートを使用するつもりでした。

さらなる研究

以下の点についてさらに詳しく知りたいです:

  • jail は、chroot とコンテナーの中間に位置しますが、おそらく両方の要素を少しずつ持っています。
  • FreeBSDの強制アクセス制御、またはBSDのselinux
  • ZFS

最後に

/usr/local の分離は非常に気に入っています。pkg は宣伝通りの動作をしているようです。多くの問題は、Linux ディストリビューション間の移行でも発生するものです(インストーラの動作、nslookup が有効なパッケージなど)。一部の finger マクロは調整が必要でしょう。

もちろん、ブートの問題やその他の問題を解決する必要がありますが、FreeBSDは決して異質なものではなく、日常的に快適に使えると思います。その他の感想は結論まで残しておきます!

次は: NetBSD!

      

おすすめの記事