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 (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
バージョンアップで少しずつパワーアップしている気がする。
df -h
ifconfig
で 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
※これをやらなくても tsukuba.wide.ad.jp につながった。 謎の力で近くのミラーが使われるようになったのかもしれない。
/etc/apt/sources.list
に書かれているサーバは遠くて遅いので
以下のうちどれかに差し替える。
http://raspbian.org/RaspbianMirrors
sudo apt update
sudo apt upgrade
sudo apt remove --purge <PKGNAME>
or sudo apt purge <PKGNAME>
dpkg --purge `dpkg --get-selections | grep deinstall | cut -f1`
主にgit や cmake が古い場合。 最新を追いかけるなら公式のリポジトリを 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 apt install unattended-upgrades
sudo 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 nano /etc/inputrc
# uncomment
set bell-style none
sudo apt install screen
sudo vi /etc/ssh/sshd_config
sshd_config.d/
以下にファイルを置いて include する方式に変わった気もする。
ClientAliveInterval 60
ClientAliveCountMax 3
Port 22
<- 変えるPermitRootLogin no
PasswordAuthentication no
sshd -t
service ssh restart
https://www.raspberrypi.com/documentation/computers/remote-access.html#virtual-network-computing-vnc
raspistill -t 1 -o pic.jpg
sudo raspi-config
ls /sys/bus/i2c/devices
sudo apt install i2c-tools
i2cdetect -l
i2cdetect -F <X>
i2cdetect [-y] <X>
sudo apt install lighttpd
sudo apt install php-cgi
/etc/lighttpd
lighttpd-enable-mod
, lighttpd-disable-mod
service lighttpd force-reload
server.breakagelog = "/var/log/lighttpd/breakagelog.log"
/etc/php/.../php.ini
sudo apt install certbot
sudo certbot
Certbot doesn't know how to automatically configure the web server on this system. However, it can still get a certificate for you. Please run "certbot certonly" to do so. You'll need to manually configure your web server to use the resulting certificate.
sudo certbot certonly
How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1: Place files in webroot directory (webroot)
2: Spin up a temporary webserver (standalone)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): (メール)
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel): (ドメイン名)
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for (ドメイン名)
Select the webroot for (ドメイン名):
-------------------------------------------------------------------------------
1: Enter a new webroot
-------------------------------------------------------------------------------
Press 1 [enter] to confirm the selection (press 'c' to cancel): 1
Input the webroot for yappy.mydns.jp: (Enter 'c' to cancel):/var/www/html/
(lighttpd のデフォルトドキュメントルートの場合)
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0000_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0000_csr-certbot.pem
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/(ドメイン名)/fullchain.pem. Your cert will
expire on 2019-01-01. To obtain a new or tweaked version of this
certificate in the future, simply run certbot again. To
non-interactively renew *all* of your certificates, run "certbot
renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
/etc/cron.d/certbot
に cronjob が登録されている。
12 時間ごとに自動で renew してくれるらしい?
sudo lighttpd-enable-mod (xx- と .conf を除いた名前)
sudo service lighttpd force-reload
ssl.pemfile = "/etc/letsencrypt/live/yappy.mydns.jp/fullchain.pem"
ssl.privkey = "/etc/letsencrypt/live/yappy.mydns.jp/privkey.pem"
セキュリティや設定の確認は Qualys SSL LABS で診断してもらうのがおすすめらしい。 ドメインを入れるだけで色々とチェックしてくれる。
sudo apt install mariadb-server mariadb-client
sudo 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:
スマホも含めて各 OS のクライアントがダウンロード可能だが、 Linux - CLI のコマンドライン版を求めると github へ案内され CMake, C++, boost を使った高難度ステージへ案内される。
https://github.com/pcloudcom/console-client
ビルドの難度がやたら高い上に、何だか不安定な気がする以上に rclone がよく出来すぎているため、rclone があれば不要と思われる。
必要なもの
git status
で確認する。git reset --hard
で変更されたファイルを git 管理の状態に戻せる。git clean -fxd
で git 管理外のファイルを削除し初期状態に戻せる。make
は遅いので make -j4
等でコア数くらいに並列化する。make -j4 fs
-mtune=core2
がないと言われて死ぬ。
これは最適化(チューニング)オプションで特定のアーキテクチャ向けに最適化するが、
-mtune=native
で自身の環境に合わせられるのでそうすればいいと思う。
てかなんで core2 ?
いつの時代に作られたんだ…?
PC ならビルドは通るが本当は -mtune=native
にした方がよいと思う。
今 core2 じゃないし。。cmake .
make -j4
cmake .
make -j4
sudo make install
でアンインストール不能の破壊的インストールが嫌なら
代わりに README.md の下の方にある debuild -i -us -uc -b
を行う。
Debian package (*.deb) 形式となり、apt で install/uninstall できる。debian/
ディレクトリのある pCloudCC/ の下。
最後の cmake
と同じ。sudo apt install devscripts
。cmake . && make
成功後だと失敗する。
make clean
しても直らないので git reset --hard && git clean -fxd
する。debuild
だとライブラリ不足でエラーが起きた場合に非常にわかりづらい。
cmake . && make
が成功することを確認してからリセットして debuild
する。
なんやねん。./
始点の
相対パスを指定し apt でインストールできる。
apt install ./pcloudcc_<version>_<arch>.deb
sudo apt remove pcloudcc
pcloudcc
。使い方は README.md または –help オプション。