🙄

Setup Arch Linux on MacStudio M1 Ultra 128MB

2023/04/30に公開

この記事は、 Install Arch Linux on MacStudio M1 Ultra 128MB のミドルウェア編です。
https://zenn.dev/tomoakinagahara/articles/1db3276b4f9d06

お品書き

この記事のお品書きは以下の通り。

  • vi? nano? いいえ、vscodeです!
  • 共有ディレクトリー
  • systemctlの使い方
  • Apache2.4
    • localhost
    • 仮想ドメイン
  • Nginx
  • php
    • php-apache
    • PHP-FPM
    • バージョンの異なるPHPをインストール
  • MySQL
  • postfix

Visual Studio Codeは神

/etc/以下のconfファイルの設定で、vi(vim)やnanoを使うのは、正直いってしんどいし、非効率だ。
そこで、VSCodeのSSHリモート接続を使って、ローカルからVSCodeを使って編集する。rootログインがベストだ!そのためには、PermitRootLoginnoからyesに変更する。(自己責任で!)[1]

/etc/ssh/sshd_config
PermitRootLogin yes

万が一のために、作成者は信頼しないようにしよう!

共有ディレクトリー

共有ディレクトリーは、/mnt/shareにマウントされる。
/etc/fstabには既に設定が書いてある。

共有ディレクトリーはめちゃくちゃ遅い!

systemctl の使い方

めちゃくちゃ使いにくい。init.dの方が使いやすい。控えめに言って糞。

起動

末尾の.serviceはなくても動く。

systemctl start サービス名.service

有効化(自動的に起動させる)

systemctl enable サービス名

有効化されているか確認する

systemctl is-enabled サービス名

unitファイルの一覧を表示する

systemctl list-units-files
systemctl list-units-files | grep httpd

サブコマンド一覧

  • start:サービスの起動
  • stop:サービスの終了
  • restart:サービスを再起動
  • reload:サービスの設定をもう一度読み込む
  • status:サービスの状況を表示する
  • enable:サービスが自動的に起動するようにする
  • disable:サービスが自動的に起動しないようにする
  • list-unit-files:すべてのUnitを表示する

Apache2.4

Apacheのインストール

sudo pacman -Syy
sudo pacman apache
sudo apachectl start

http://192.168.64.2/にアクセスして、表示されるか確認する。

Apacheを自動的に起動させる

サービス名がapacheではなく、httpdなことに注意する。[2]

sudo systemctl enable httpd

Virtual Domain - 仮想ドメイン

Virtual Domain(仮想ドメイン)とは、一つのWebサーバー上に、複数のサイト(異なるドメイン)を公開する方法。
Apache 2.2からできるはずだが、2.2ではSSLは一つのサイト(ドメイン)しか公開できなかった。(URLも暗号化されるため)
Apache 2.4からは、SSLのサイトも仮想ドメインとして公開できるようになった!やった!!

設定ファイルの賢いロード方法

Includeで、confファイルをロードする指定は、ワイルドカード(*)が使える。
仮想ホスト用のディレクトリーを作成し、そこに保存したconfファイルは全てロードするように設定する。
読み込ませたくないconfファイルは、拡張子を.con_などと変更するだけでよい。賢い![3]

sudo mkdir /etc/httpd/conf/vhost
sudo vi /etc/httpd/httpd.conf
/etc/httpd/httpd.conf
Include conf/vhost/*.conf

任意のディレクトリーをドキュメント・ルートにして公開する方法

自分の好きな場所(私の場合は/www/)にサイトを作って公開したい場合は、設定を追加する必要がある。

sudo mkdir -p /www/localhost/
sudo vi /etc/httpd/conf/vhost/www.conf
/etc/httpd/conf/vhost/www.conf
ServerName   alarm.localhost
ServerAdmin  alarm@localhost
<Directory /www/>
    Options Indexes FollowSymLinks
    AllowOverride all
    Require all granted
</Directory>

仮想ドメインの設定は、必ず2つ以上のドメインを設定する必要がある。一つだとエラーになる。
この設定のポイントは、グローバルIPアドレスからのアクセスの場合は、デフォルトの空のディレクトリーを表示し、プライベートIPアドレスの場合には、プライベートなサイトを公開するところ。

/etc/httpd/conf/vhost/localhost.conf
<VirtualHost *:80>
    ServerName       93.184.216.34
    DocumentRoot    "/srv/http/"
    ErrorLog        "/var/log/httpd/errors.log"
    CustomLog       "/var/log/httpd/access.log" common
</VirtualHost>
<VirtualHost *:80>
    ServerAlias      192.168.0.2
    ServerName       localhost
    DocumentRoot    "/www/localhost/"
    ErrorLog        "/var/log/httpd/localhost-errors.log"
    CustomLog       "/var/log/httpd/localhost-access.log" common
</VirtualHost>

configtestは、設定にミスがないか確認をしてくれる。
設定ミスがなければ、gracefulで安全に再起動する。

sudo apachectl configtest
sudo apachectl graceful

PHP

インストール

sudo pacman -Syy
sudo pacman -Ss php-apache

php-apache-legacy-apacheがある。最新と一つ前の古いバージョン。最新を入れる。
php-fpmも、php-legacy-fpmがある。面倒なトラブルはごめんなので、常に最新を選択しておくこと。

extra/php-apache 8.2.5-1
    Apache SAPI for PHP
extra/php-legacy-apache 8.1.18-1
    Apache SAPI for PHP

設定

/etc/httpd/httpd.confを変更する。

mpm_event_moduleを無効にして、mpm_prefork_moduleを有効にする

公式サイトの記述を確認する。

php-apache に含まれている libphp7.so は mod_mpm_event で機能せず、mod_mpm_prefork でしか動作しないために上記の設定が必要になっています。設定しないと以下のエラーが表示されます。

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.
AH00013: Pre-configuration failed
httpd.service: control process exited, code=exited status=1

https://wiki.archlinux.jp/index.php/Apache_HTTP_Server

PHPのライブラリーを読み込む順番は決まっている

LoadModule dir_module modules/mod_dir.soの次の行に以下の行を追加する。

LoadModule php_module modules/libphp.so
AddHandler php-script php

httpd.confの最後に以下を追加する。

Include conf/extra/php_module.conf

sudo apachectl restartで再起動すると有効になっている。

Nginx

sudo pacman -Syy
sudo pacman -S nginx
sudo apachectl stop
sudo systemctl enable nginx
sudo systemctl start nginx

PHP-FPM

sudo pacman -Syy
sudo pacman -S php-fpm
sudo systemctl enable php-fpm
sudo systemctl start php-fpm
脚注
  1. 公開鍵認証onlyで、鍵にパスワードをかけておけば大丈夫だろう。心配であれば、踏み台サーバーからしかログインできなくしておこう。 ↩︎

  2. この仕様はクソなのでとっとと変えるべき。FreeBSDやMacPortsはapacheだぞ? ↩︎

  3. これが生産性の高い賢いエンジニアのハック術。debianってクソを押し付けてくるよね。 ↩︎

Discussion