Optional でないものは必須です。
本体
その他
Raspberry Pi Documentation: https://www.raspberrypi.org/documentation/
Getting Started https://www.raspberrypi.com/documentation/computers/getting-started.html
Headless Setup (GUI なしセットアップ) https://www.raspberrypi.com/documentation/computers/configuration.html#set-up-a-headless-raspberry-pi
ドキュメントが一新され、Raspberry Pi Imager を使ったセットアップ方法となった。 SD card に焼くイメージのセレクタ/ダウンローダとイメージライタが一緒になって いい感じになったセットアップ用ソフト。
Raspberry Pi OS Lite (64-bit) 2025-12-04 (Trixie)
Raspberry Pi OS Lite (32-bit) 2021-05-07 (Buster)
https://www.raspberrypi.com/documentation/computers/getting-started.html
Ctrl + Shift + X で Advanced Options を開く。ssh <user>@<IP addr> から設定したパスワードで入れたら当たり。$sudo raspi-config
バージョンアップで少しずつパワーアップしている気がする。 Raspberry Pi Imager の時点で設定可能なものも増えてきている気がする。
df -hifconfig で wlan の MAC addr を見てルータに DHCP 固定割り当てを設定する。
(そのような機能がある場合)
または普通の Linux のやり方で固定アドレスを設定する。
Windows で ipconfig.exe /all を実行した結果を参考にするとよい。
# /etc/dhcpcd.conf
interface <eth0|wlan0>
static ip_address=192.168.XXX.YYY/NN
static routers=192.168.0.1
static domain_name_servers=XXX.YYY.ZZZ.WWW
最近はブートイメージの作成時点で設定可能な項目が増えたが、これはどうやら
cloud-init というソフトを使っているらしい。
元々は AWS EC2 のインスタンスを簡単に初期設定するために開発されたらしい。
クラウドなんて使ってないのに、と混乱するが、確かに RasPi の初期設定にも便利である。
設定ファイルは /boot/firmware/user-data にある。
/etc/cloud/ にあるのはニセモノなので注意!
ブートパーティションにテキストの設定ファイルとして置かれている。
幸い root なら書き換え可能。
ブートイメージ作成時に間違えた or 後から変えたくなった場合、このファイルを編集する。
さもないと再起動時に毎回このファイルの内容が適用され、
他の手段による設定変更が上書きされてしまう。
例えば、ホストネームを修正したい場合は raspi-config でも hostnamectl でもダメで、
このファイルを編集しなければならない(一敗)。
※これをやらなくても tsukuba.wide.ad.jp につながった。 謎の力で近くのミラーが使われるようになったのかもしれない。
/etc/apt/sources.list に書かれているサーバは遠くて遅いので
以下のうちどれかに差し替える。
http://raspbian.org/RaspbianMirrors
sudo apt updatesudo apt upgradesudo apt remove --purge <PKGNAME> or sudo apt purge <PKGNAME>
dpkg --purge `dpkg --get-selections | grep deinstall | cut -f1`
主にgit や cmake が古い場合。気にならないならスキップで OK。 最新を追いかけるなら公式のリポジトリを sources.list に登録するのが確実だが、 こちらで十分なら設定は一回で済む。
以下を /etc/apt/sources.list に追加。
deb http://ftp.jp.debian.org/debian buster-backports main contrib non-free
その後 sudo apt update。
おそらく鍵エラーが出るので、NO_PUBKEY と言われた鍵(16進)を控えて、
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <PUBKEY>
...
apt show で backports に別バージョンがあるなら
-a ですべて表示できると注意が出る。
backports は -t で明示的に指定しなければ使われることはない。
apt show -a <pkg>
apt install -t <version>-backports <pkg>
$ sudo nano /etc/inputrc
# uncomment
set bell-style none
デフォルトで入ってるのか入ってないのかはっきりしない。
apt install bash-completion
一般ユーザの .bashrc では以下のコードで有効化されていて、
全員共通の /etc/bashrc ではコメントアウトされている???
よくわかんないけど共通設定ファイルをコメントアウト解除するか
/root/.bashrc の最後にコピペする。
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
家の DNS の様子が怪しい場合。
/etc/resolv.conf は NetworkManager によって管理されており、
書き換えても再起動時に上書きされてしまう。
NetworkManager の管理ツールで設定を追加する必要がある。
# 名前を取得
nmcli device
nmcli connection modify [CONN] +ipv4.dns 8.8.8.8
systemctl restart NetworkManager
cat /etc/resolv.conf
sudo apt install unattended-upgradessudo dpkg-reconfigure -plow unattended-upgrades/etc/apt/apt.conf.d/50unattended-upgrades を編集初期設定は以下のようになっているが、Raspberry Pi では origin が “Raspbian” や “Raspberry Pi Foundation” になっているのでこのままではマッチせず 何もアップデートされない。
"origin=Debian,codename=${distro_codename},label=Debian";
"origin=Debian,codename=${distro_codename},label=Debian-Security";
origin, label, suite 等の情報は /var/lib/apt/lists/ 以下にあるファイルに
書かれているが、いつも apt update apt upgrade だけしているなら
以下のようにすればとりあえず全部アップデートできる。
"o=*";
このあたりを運用に合わせて設定する。
// Do automatic removal of new unused dependencies after the upgrade
// (equivalent to apt-get autoremove)
Unattended-Upgrade::Remove-Unused-Dependencies "true";
// Automatically reboot *WITHOUT CONFIRMATION* if
// the file /var/run/reboot-required is found after the upgrade
Unattended-Upgrade::Automatic-Reboot "true";
以下で空実行できる。
sudo unattended-upgrade --debug --dry-run
sudo apt install screen
sudo vi /etc/ssh/sshd_configsshd_config.d/ 以下にファイルを置いて include する方式に変わった気もする。
ClientAliveInterval 60ClientAliveCountMax 3Port 22 <- 変えるPermitRootLogin noPasswordAuthentication nosshd -tservice ssh restartRPi5 からケーブルが細くなった。 しかし、AI Camera には細いケーブルも同梱されているので ケーブルを別に買う必要はない(一敗)。
ケーブルのソケットの仕様が分かりにくいが、プラスチックのパーツを差し込み方向と平行に 引くことができる。その状態だと緩んでいるのでケーブルを差し込み、再度パーツを押せば ロックされる。
旧情報
raspistill -t 1 -o pic.jpgsudo raspi-configls /sys/bus/i2c/devicessudo apt install i2c-toolsi2cdetect -l
i2cdetect -F <X>
i2cdetect [-y] <X>
sudo apt install lighttpd
https://docs.docker.com/engine/install/debian/
なんかデフォルトの apt にあるやつは unofficial 呼ばわりされている。
この辺は全部消さないと競合して壊れるらしい。
apt show で Maintainer や APT-Sources を見て Debian のものは無視して
Docker 公式のもののみを入れるよう気を付ける。
非互換な変更入れすぎでは。
信用する keyrings に公式の鍵を追加して、apt source を追加する。
apt install docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
systemctl status docker
systemctl start docker
docker というグループができるので、それに追加したユーザが使えるようになるらしい。
docker run hello-world
docker-compose はプラグイン化して docker のサブコマンドになったらしい?
docker compose version
本体からのヘルプは dockerd --help。
設定ファイルの場所は /etc/docker/daemon.json。
Docker の保存する色々なデータは /var/lib/docker に置かれる。
これは data-root オプションで変更可能。
Docker Engine 29.0 以降をクリーンインストールした場合はイメージや
コンテナスナップショットは /var/lib/containerd に置かれる。
ボリュームや設定等の他のデータは /var/lib/docker のまま。
overlay2 のような昔のストレージドライバ (アップグレードインストールのデフォルト)
の場合はすべて /var/lib/docker に置かれる。
unionfs により du すると本来より大幅に大量のディスクを食っているように見えるが
そんなことはない。
しかしユーザランドにそのように見せているということは rsync 等のバックアップコピーが
いい感じに動くとは到底言い難い。
というか Dockerfile や compose.yml から作り直せるデータであり、
バックアップの必要はない。
バックアップ対象の /var ではない場所に設定を変えるのが無難と思われる。
Volume は別途バックアップが必要。
// /etc/docker/daemon.json
{
"data-root": "/mnt/docker/data"
}
# /etc/containerd/config.toml
# 以下をコメント解除して書き換え
# root = "/var/lib/containerd"
root = "/mnt/docker/containerd"
service containerd restart
service docker restart
TODO
sudo apt install mariadb-server mariadb-clientsudo apt install php-mysqlnd
以下 10.11.4-MariaDB の情報。
sudo mariadb-secure-installation (mysql_secure_installation)
推奨やデフォルトが変わってトラブルを起こしている気がする。。
# root ログイン確認
sudo mysql
sudo mysql [-u USER] [-p]
-u は省略すると '現在のログインユーザ'@'localhost' が使われる。
パスワードを入力したい場合は -p を指定するが、管理が大変なのであまり使いたくないことも
多いかもしれない。
Prerequirements
apt に wordpress というのがあるが、apache に依存があり、インストールすると そちらも同時にインストールされてしまう(一敗)。 それとちょっと古い。
以下から最新版をダウンロードする。
https://ja.wordpress.org/support/article/how-to-install-wordpress/
これでとりあえずボタンを押すとデータベース接続エラーになるので、 必要なユーザや権限をエラーが出なくなるまで作っていく。
まずログインエラーを直せるか確認しつつ行う。
-- パスワードなしで誰でも入れる。危険。
CREATE USER 'www-data'@'localhost';
-- パスワードを指定して作成。コマンドログに残るし色々と何とも言えないところがある。
CREATE USER 'www-data'@'localhost' IDENTIFIED BY 'password';
-- unix_socket による認証。www-data ユーザならパスワードなしでログインできる。
CREATE USER 'www-data'@'localhost' IDENTIFIED VIA unix_socket;
# sudo は実は root で実行する、ではなく switch user して実行する、なので
# www-data ユーザとして実行できる
# 'www-data'@'localhost' としてログイン確認
sudo -u www-data mysql
ここまで確認できたら WordPress からユーザ名: www-data, パスワード: 空で データベースログインまで通ることを確認する。
SHOW VARIABLES LIKE 'char%';
SHOW VARIABLES LIKE "col%";
/etc/mysql/my.cnf がルート設定ファイルだが、ディレクトリの中身を全部
インクルードしているだけなので、/conf.d/mysql.cnf を編集する。
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
[client]
default-character-set=utf8mb4
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
+----------------------------------+--------------------+
| Variable_name | Value |
+----------------------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8mb4_general_ci |
| collation_server | utf8mb4_general_ci |
| column_compression_threshold | 100 |
| column_compression_zlib_level | 6 |
| column_compression_zlib_strategy | DEFAULT_STRATEGY |
| column_compression_zlib_wrap | OFF |
+----------------------------------+--------------------+
character_set_system は utf8(mb3) のままで OK。
なぜか collation-server のデフォルト設定が効かない気がする。
とはいえデフォルト設定に頼るのは移行時の事故の元なので、
CREATE DATABASE 時に明示的に設定するようにする。
-- データベース設定情報の取得
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA;
*************************** 5. row ***************************
CATALOG_NAME: def
SCHEMA_NAME: wordpress
DEFAULT_CHARACTER_SET_NAME: utf8mb4
DEFAULT_COLLATION_NAME: utf8mb4_bin
SQL_PATH: NULL
SCHEMA_COMMENT:
WordPress 運用ではそこまで要らないかもしれないけど、一応。
[mariadb]
slow_query_log
long_query_time=1.0
# default=/var/lib/mysql/{host}-slow.log
slow_query_log_file=slow.log
データベースだけでなく、WordPress のインストール先自体を書き換えることがある。 とりあえず読み取りさえできれば動きはするが、FTP の設定を求められたりする。
本体の自動更新をするには PHP プログラム (= web サーバ = www-data ユーザ) から 自分自身を書き換えられるようにする必要がある。
理想
しかし、更新作業が面倒とか、忘れているとかでセキュリティパッチの適用なしで インターネット上に放置されるのはあまりにも危険。
現実的には
こんなところかもしれない。 自分自身を任意のプログラムに置き換えられる可能性は頭にちらつくが、 セキュリティアップデートなしで放置するよりはマシな気がする。 (S)FTP or SSH を設定するというのも、もっと権限の高い権限へのログイン情報を WordPress に持たせる感があって何とも言えない。
chown -R www-data:www-data .
find . -type f | xargs chmod 644
find . -type d | xargs chmod 755
chmod 400 wp-config.php
初期設定ではなかなか激しいことになっている。。(ver 6.4.3)
このサイトは WordPress の新しいバージョンごとに自動的に最新の状態に保たれます。
メンテナンスリリースとセキュリティリリースのみの自動更新に切り替えます。
プラグインを入れたりしていると、普通に破壊されると思われる。 そういうまともな使い方を始めるまでは常時最新アップデート設定で、 というメッセージなのかもしれないけど。。
下のリンクをクリックするとマイナー/セキュリティリリースのみの自動更新になる。
このサイトは WordPress のメンテナンスリリースとセキュリティリリースのみで自動的に最新の状態に保たれます。
ただ、固定したバージョンも永久に使い続けられる訳ではないので、 データベースも含めたバックアップ/リストア手順と共に、 メジャーバージョンアップの手順確立と習慣化も考えるべきだと思われる。 また、PHP や MySQL (MariaDB) も数年でサポートが切れる。
一応 10 年前までのリリースにもセキュリティパッチは出ているようだけど、 10 年分の全部のリリースブランチにパッチを当ててリリース作業を行う担当者の 悲痛な叫び声が聞こえる。。
https://ja.wordpress.org/download/releases/
積極的に保守されている6.4系統の最新版以外の以下のバージョンは、安全に使用することはできません。
警告 オプションのモジュール curl がインストールされていないか、無効化されています。
警告 オプションのモジュール dom がインストールされていないか、無効化されています。
警告 オプションのモジュール imagick がインストールされていないか、無効化されています。
警告 オプションのモジュール zip がインストールされていないか、無効化されています。
エラー 必須モジュール gd がインストールされていないか、無効化されています。
警告 オプションのモジュール intl がインストールされていないか、無効化されています。
apt install php-gd
apt install php-curl php-dom php-imagick php-zip php-intl
service lighttpd restart
REST API で予期しない結果が発生しました
パーマリンク設定のところが %postname% を含むもの (デフォルトもそう) になっていると REST API が 404 になるらしい。
サイトのパーマリンク構造を選択してください。%postname% タグを含めるとリンクが理解しやすくなり、投稿が検索エンジンで上位に表示されるのに役立つ可能性があります。
バグのような気もするし、そのうち直るのかもしれない…。
買い切りのクラウドストレージ。 生涯 (会社が潰れるまで) 使い続けられるらしい。
クラウドストレージ全般に対応したコマンドラインツール。 Go 製。 暗号化した状態で保存もできるらしい。
https://rclone.org/downloads/
https://rclone.org/install/
sudo -v ; curl https://rclone.org/install.sh | sudo bash
例によってシェルスクリプトの実行がどうかと思う場合はマニュアル操作で行う。
CPU に合わせて AMD64 (PC) or ARM64 (RasPi) を選択。
Debian/Raspbian なら *.deb パッケージを選ぶと管理が楽。
sudo apt install ./xxx.deb のように ./ で始まるパスを書けば
apt からインストールできる。
rclone config
http://127.0.0.1:53682/... へアクセスしろと
言われるので、ブラウザで開く。~/.config/rclone/rclone.conf の
内容を認証できているマシンからコピーしてくる。OAuth とかの認証のため、ウェブブラウザがないとしんどい。
GUI のある PC にも rclone をインストールし、ウェブブラウザから認証して
アクセストークンを入手する。
設定ファイル ~/.config/rclone/rclone.conf にアクセストークンが書かれているので、
CUI 環境での設定ファイルにコピーするのが多分楽。
リモートのパスは <remote>:<path/to/file_or_dir> のように、
設定でつけた名前をコロンの前に指定する。
パスは / で始めないことを推奨。
ルートを指定したい場合は空文字列で OK。
ごく一部のサービス相手では最初を / で始めるか始めないかで、
ルートからのパスかホームディレクトリからのパスかを使い分けられる。
# ls (--max-depth 1 をつけないと再帰的に全エントリを列挙する)
rclone ls remote:
# ls -l っぽいもの (同上)
rclone lsl remote:
# ディレクトリのみ列挙する (-R で再帰的に列挙)
rclone lsd remote:
# ファイルのみ列挙する (同上)
rclone lsf remote:
# JSON フォーマットで出力する (同上)
rclone lsjson remote: