- キット各種完売。
- msBerryDAC改造情報
2023/07/07(金)Debian 12 (bookworm) インストールメモ
2020/01/20(月)Debian10で Apache + php-fpm の正しい設定メモ
Apache + php-fpm 環境で Debian 9(jessie) から 10(buster) にアップデートしたら動かなくなったので、メモ。
概要
Debian付属のmod_phpはスレッドセーフではないため、Apacheを event_mpm や worker_mpm で運用している場合は使用できません(prefork専用)。
そもそも今どきmod_phpで動作させるのはナンセンスなので、FastCGIデーモンによるPHP環境 PHP-FPM を使用します。
Debian10での設定
- Apache 2.4
- PHP 7.3 (php7.3-fpm)
apt-get install php-fpm libapache2-mod-fcgid
php-fpmをインストールすることで自動的に「php-fpm7.3」サービスが起動します。
/etc/apache2/conf-available 以下に php7.3-fpm.conf が作られるので、これを有効にします。
cd /etc/apache2/conf-enabled ln -s ../conf-available/php7.3-fpm.conf
proxy_fcgi_moduleが必要なのでこれも有効にします。
cd /etc/apache2/mods-enabled ln -s ../mods-available/proxy_fcgi.load
この状態で、Apacheを再起動すれば有効になっているはずです。ついでに、OPcacheも最初から有効になっています。
php7.3-fpm.confの中身(特に変更せず)
# Redirect to local php-fpm if mod_php is not available <IfModule !mod_php7.c> <IfModule proxy_fcgi_module> # Enable http authorization headers <IfModule setenvif_module> SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 </IfModule> <FilesMatch ".+\.php$"> SetHandler "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost" </FilesMatch> <FilesMatch ".+\.phps$"> Require all denied </FilesMatch> <FilesMatch "^\.ph(ar|p|ps|tml)$"> Require all denied </FilesMatch> </IfModule> </IfModule>
以前使っていた古い設定
Debian 9(jessie)でも全く同じ設定で動作するのですが、以前は古い設定を使っていました。その設定を書いておきます。
- php-fpm7.0
- libapache2-mod-fastcgi (Debian9までしか提供されず)
Apache2の libapache2-mod-fastcgi(libapache2-mod-fcgidではダメ)を有効化してから、sites-available/000-default.conf 等に以下の設定を行います。
<IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi AddHandler php7.0-fcgi .php Action php7.0-fcgi /usr/sbin/php-fpm7.0 FastCgiExternalServer /usr/sbin/php-fpm7.0 -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization FastCgiConfig -maxClassProcesses 100 <Directory /usr/sbin> <Files php-fpm7.0> Require all granted </Files> </Directory> </IfModule>
何が変更になったのか
外部プログラムを呼び出して、そこから php-fpm サーバに接続するという形式が無効になったようです。上に書いた古い設定は多くの新しいLinuxディストリビューションで無効になっているようです。
この古い設定を行った場合、エラーログ等はなく「404 Not Found」と言われ白紙のページが出るだけなので混乱します。
現在は Apache に直接組み込んだ FastCGIのProxyのモジュール(proxy_fcgi_module)から、直接php-fpmに接続するようになりました。このほうが遥かに効率的です。
メモ
- php-fpmを利用する場合、SuEXECと併用できない。
- SuEXECと同じことをしたければ、php-fpmデーモン(設定ファイル)を権限(ユーザー)ごとに分ける必要がある。
2015/01/30(金)Debian - jessie インストールメモ
記述が散らばってきたのと、さすがに古くなった部分があるのでまとめメモ。
キーボード環境の設定
apt-get install console-setup dpkg-reconfigure locales
コンソールとGRUB画面の設定
高解像度すぎて使いにくいのでほどほどに。
# vi /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT="" GRUB_CMDLINE_LINUX="video=800x600-16" GRUB_GFXMODE=800x600 GRUB_GFXPAYLOAD_LINUX=keep # update-grub
ついでに「mitigations=off」してMeltdown対策などをオフにすると、古いIntel CPUでは(セキュリティを犠牲にして)パフォーマンスが向上するらしい。
# vi /etc/default/grub GRUB_CMDLINE_LINUX="video=800x600-16 mitigations=off"
fbterm
# apt-get install fbterm unifont # usermod -aG video <user id> # vi ~/.fbtermrc font-names=unifont font-size=16
このままだとアンチエイリアスが掛からないので設定する。(設定済の場合は不要)
# vi ~/.font.conf <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="font"> <edit name="antialias" mode="assign"> <bool>true</bool> </edit> </match> </fontconfig>
固定IP
# vi /etc/network/interfaces auto eth0 iface eth0 inet static address 192.168.1.20 netmask 255.255.255.0 gateway 192.168.1.1 # mtu 9000
rpcbindとeximを止める
# apt-get remove --purge rpcbind nfs-common # apt-get remove --purge exim4 exim4-base exim4-config exim4-daemon-light
rootとwheel
# vi /etc/pam.d/su auth required pam_wheel.so group=adm # gpasswd -a USER adm
firewallの導入
# touch /etc/network/if-pre-up.d/iptables # ln -s /etc/network/if-pre-up.d/iptables /etc/ # chmod +x /etc/network/if-pre-up.d/iptables # vi /etc/iptables
設定詳細はこちらの記事。
hosts.allow/deny
ALL : my_hostname ALL : localhost sshd : .jp
sshdのパスワード認証とrootログインを禁止
# vi /etc/ssh/sshd_config PasswordAuthentication no PermitRootLogin no # /etc/rc.d/ssh restart
鍵認証設定後に。
localeの変更
# dpkg-reconfigure locales
tmpfsの設定変更
デフォルトだと実メモリの半分以上をtmpfsに割り当てられてしまいます。実使用分しかメモリを消費しないとはいえ気持ち悪いです。
/etc/default/tmpfsを書き換えればいろいろ設定できるはずと思ったら、Debian jessieは「sysvinit」ではなくなってるらしく/etc/default/tmpfsに設定しても意味がない。
/etc/systemd 以下に書くのが正解なようですが、どう書けばいいかの情報がないのでしばらく保留……。
ntp設定
server ntp.example.jp iburst # IPv6 server -6 ntp.example.jp iburst
状態確認
ntpq -p
PostgreSQLのリポジトリ追加
PostgreSQLの最新版が使えなかったり、アップグレードごとにメジャーバージョンが入れ替わって(古いバージョンのメンテが終わって)毎度DB移行が面倒なので。
# vi /etc/apt/sources.list deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main # apt-get install gnupg # wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
PostgreSQLの設定
いつも /var/lib/postgresql ではなく /home/postgres にDBファイルを置くのだけども、ファイル移動したりシンボリックリンクしたりスマートじゃない方法で解決してました。
postgresql-commonだけ先に入れて、データディレクトリを変更。
# apt-get install postgresql-common # vi /etc/postgresql-common/createcluster.conf data_directory = '/home/postgres/%v/%c'
その後、任意のpostgresqlを導入。
後から変更
デフォルトDBの削除。
# pg_dropcluster --stop 9.4 main # rm -rf /var/lib/postgresql
データディレクトリを変更してDB作成。
# vi /etc/postgresql-common/createcluster.conf
data_directory = '/home/postgres/%v/%c'
# pg_createcluster 9.4 main --options
pg_cluster系コマンドで複数のDBの起動などもできるらしい。
autovacuumの設定
デフォルトではオートvacuumが3worker×1分ごとに動作しようとし(必ず動作するわけではない)、そのたびにHDDにfsyncしてしまいます。ほとんど使用しないDBには無駄なディスク負荷なので、postgresql.conf の設定を変更しました。
autovacuum_max_workers = 1 autovacuum_naptime = 1d
GNU parted
# parted /dev/sdb GNU Parted 3.2 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel gpt (parted) unit gb (parted) print free (parted) mkpart primary ext4 0 100% (parted) print
コンソール日本語入力
# apt-get install uim-fep uim-anthy # vi /usr/share/uim/generic-key-custom.scm (define-custom 'generic-on-key '("zenkaku-hankaku" "<Control> ") (define-custom 'generic-off-key '("zenkaku-hankaku" "<Control> ")
あとは「uim-fep」コマンドで起動。「CTRL+SPACE」でon/off。
その他
- postfixとdovecotの導入
- 細かなセキュリティ設定
- mailコマンド : apt-get install bsd-mailx
- SpeedyCGIのインストール(外部)
雑多メモ
特定のポートを使用中のプロセスを調べる。
# lsof -i:111 # netstat -ap
特定のファイルを含むパッケージを調べる。
$ dpkg -S [filename]
UUIDの確認。
# blkid /dev/sda1 # ls -l /dev/disk/by-uuid/
ia32-libsの代替。
# apt-get install lib32z1
開発環境一式。
# apt-get install build-essential
sshログイン時のメッセージ表示はpam.d/sshdで制御できる。
session optional pam_motd.so motd=/run/motd.dynamic noupdate session optional pam_motd.so
バージョンの確認。
# lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.1 (jessie) Release: 8.1 Codename: jessie
2011/06/24(金)Linuxブートシーケンスまとめ。GRUBと起動トラブルのメモ
mdadmで作ったソフトウェアRAIDに障害があってRAIDを組みなおしてたのですが、まともに起動しないトラブルに見舞われて格闘してました。
その時に調べたGRUB2と起動の仕組みについてのメモ。
環境
- Ubuntu 10.04 / Debian 6
- ブートローダー GRUB2 (Ver1.98)
- 起動ディスク RAID1(ミラー)
- ファイルシステム構成 / から起動(/bootは / ファイルシステム内)*1
ここで説明するGRUBはGRUB2です。GRUB(Ver0.98)とは異なりますのでご注意ください。
2011/02/03(木)Debian 5.0 で Postfix の設定メモ
インストール
# apt-get install postfix dovecot-pop3d
dovecotも使うので入れますが、この記事では解説しません。
設定
Maildir形式に設定
# メールのFQDN myhostname = xxxx.dom # 受信するドメインの一覧 mydestination = example.net, example.dom, localhost relayhost = alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname append_at_myorigin = yes # コメントアウト(ここが有効だとMaildirにならない) #mailbox_command = /usr/bin/procmail -a "$EXTENSION" mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 recipient_delimiter = + inet_interfaces = all # セキュリティ用のVersion等を隠す smtpd_banner = ESMTP unknow # メールdirに home_mailbox = Maildir/ # メールボックスを無制限に message_size_limit = 16777216 mailbox_size_limit = 0
バーチャルドメイン
複数のドメインがあるとき、ドメインごとに受信ユーザーを変更することができます。
main.cfの設定
virtual_alias_maps = hash:/etc/postfix/virtual
/etc/postfix/virtualの作成
foo@example.com bar foo@example.net xxx@other.dom
ここからデータベースを生成します。
# postmap /etc/postfix/virtual
"portmap"ではなく"postmap"であることに注意してください。これは、sendmailにおける以下のコマンドとほぼ同じ意味です。
# cd /etc/postfix # makemap hash virtual<virtual
/etc/postfix/virtual.dbが無事生成されたら再起動してください。/etc/aliasesと同様に、これらのファイル更新時は再起動は必要ありません。*1
virtualの生成コマンドを忘れそうなら、Makefileを置いておくのも手です。
# Makefile virtual.db: virtual postmap virtual