気になっていた商品が届きました。


「空論」アクスタです。
机の上に置くことで、気軽に「机上の空論」が楽しめる(?)逸品。

うっすらと「ムリ」と小さく書かれているところもポイント。


サイズ感も手頃なので、常に自分への戒めとしておいておきます。
気になっていた商品が届きました。
「空論」アクスタです。
机の上に置くことで、気軽に「机上の空論」が楽しめる(?)逸品。
うっすらと「ムリ」と小さく書かれているところもポイント。
サイズ感も手頃なので、常に自分への戒めとしておいておきます。
1ヶ月以上にわたり、作業をサボっていた万年筆のインク補充。
ようやく終わりと思ったら、補充しようとしていた万年筆のインク切れ。インクそのものも終売となっていたので
万年筆を洗浄して乾燥。コンバータは捨てます。
そうして、インクも換装。
こうして、コンバータ経由でインクの交換を手早く行えるのが利点です。
Ubuntu24.04環境でBookStackをアップグレードしたときの手順メモです。
https://manualmaton.com/2023/12/15
以前に実施した、こちらの記事の通りに行いました。
万一に備え、システム全体のバックアップを取ることを推奨します。AWSや仮想サーバ等の場合は、インスタンスをまるごとバックアップしておくと良いでしょう。
cd /hoge
任意のバックアップディレクトリを指定します。
mysqldump -h localhost -u bookstack -p --no-tablespaces --single-transaction bookstack > bookstack_backup.$(date +%Y%m%d).sql
DB名やDBユーザは自分の環境に合わせます。
less bookstack_backup.$(date +%Y%m%d).sql
平文で読めることを確認します。
cd /var/lib/BookStack/ && pwd
インストールされているディレクトリを指定します
sudo -u www-data git pull origin release
実行例(一部抜粋)
remote: Enumerating objects: 6028, done.
remote: Counting objects: 100% (1295/1295), done.
remote: Compressing objects: 100% (47/47), done.
remote: Total 6028 (delta 1263), reused 1248 (delta 1248), pack-reused 4733 (from 3)
Receiving objects: 100% (6028/6028), 5.75 MiB | 18.75 MiB/s, done.
Resolving deltas: 100% (3708/3708), completed with 405 local objects.
From https://github.com/BookStackApp/BookStack
* branch release -> FETCH_HEAD
b0dda6e6a..268e35343 release -> origin/release
Updating b0dda6e6a..268e35343
Fast-forward
.env.example.complete | 5 +
.github/translators.txt | 40 +-
.github/workflows/analyse-php.yml | 4 +-
.github/workflows/lint-js.yml | 4 +-
.github/workflows/lint-php.yml | 6 +-
.github/workflows/test-js.yml | 29 +
.github/workflows/test-migrations.yml | 6 +-
.github/workflows/test-php.yml | 6 +-
.gitignore | 1 +
LICENSE | 2 +-
app/Access/ExternalBaseUserProvider.php | 49 +-
app/Access/Ldap.php | 8 +-
sudo -u www-data composer install --no-dev
> @php -r "!file_exists('bootstrap/cache/services.php') || @unlink('bootstrap/cache/services.php');"
Installing dependencies from lock file
Verifying lock file contents can be installed on current platform.
Package operations: 5 installs, 70 updates, 8 removals
- Downloading bacon/bacon-qr-code (v3.0.1)
- Downloading dompdf/php-svg-lib (1.0.0)
- Downloading dompdf/php-font-lib (1.0.1)
- Downloading dompdf/dompdf (v3.1.0)
- Downloading symfony/deprecation-contracts (v3.5.1)
- Downloading symfony/http-foundation (v7.2.3)
- Downloading guzzlehttp/uri-template (v1.0.4)
- Downloading intervention/gif (4.2.1)
- Downloading intervention/image (3.11.1)
- Downloading symfony/process (v7.2.0)
- Downloading knplabs/knp-snappy (v1.5.1)
- Downloading symfony/string (v7.2.0)
- Downloading symfony/service-contracts (v3.5.1)
- Downloading symfony/console (v7.2.1)
- Downloading laravel/prompts (v0.3.5)
- Downloading laravel/serializable-closure (v2.0.3)
- Downloading paragonie/constant_time_encoding (v3.0.0)
- Downloading phpseclib/phpseclib (3.0.43)
- Downloading league/oauth1-client (v1.11.0)
- Downloading voku/portable-ascii (2.0.3)
- Downloading symfony/css-selector (v7.2.0)
- Downloading tijsverkoyen/css-to-inline-styles (v2.3.0)
- Downloading symfony/var-dumper (v7.2.3)
- Downloading symfony/uid (v7.2.0)
- Downloading symfony/routing (v7.2.3)
- Downloading symfony/mime (v7.2.3)
- Downloading symfony/event-dispatcher-contracts (v3.5.1)
- Downloading symfony/event-dispatcher (v7.2.0)
sudo -u www-data php artisan migrate
※この時、Are you sure you want to run this command?
というプロンプトには「Yes」が見えるようにカーソルを移動してEnterします。そのままEnterするとキャンセルされ、全体のアップグレードが行われません。
sudo -u www-data php artisan cache:clear
sudo -u www-data php artisan config:clear
sudo -u www-data php artisan view:clear
上記、それぞれ、successfully.
で終わることを確認します。
systemctl status apache2.service
active(running)を確認します
sudo systemctl restart apache2.service && echo $?
0
を確認します。
systemctl status apache2.service
active(runnning)を確認します
※SQLファイルが平文で読めるのは非常に危険な状態なので、作業を確認次第、早急に実施します※
cd /hoge
DBバックアップを行ったディレクトリに移動します。
shred -u bookstack_backup.$(date +%Y%m%d).sql
ls -l bookstack_backup.$(date +%Y%m%d).sql
ファイルがないことを確認します。
Jetpackの代わりとして運用しているWeb解析、Matomo。更新もあまり手間を必要とせず利用可能でした。
このように「新しいアップデート」ボタンが出てきますので
これを押した後に「自動アップデート」をクリック。
この成功の画面が出て、「Matomoを続ける」をクリック。
バージョンによってはDBのアップブレードを示唆されますので、
Matomoのアップグレードをクリック。
このDBのアップグレードも終われば完了。
Growi v7.1.xをインストールしているのであれば、v7.2.0へのアップグレードはv7.1.xと同じ手順でアップグレードできました。
以下をバックアップします。
cat /etc/mongod.conf |grep dbPath
として、ここのディレクトリ一式を控えます。(筆者環境 /home/mongodb
)
このディレクトリを任意の方法でバックアップします。
/growi/root/directory/apps/app/public
(筆者環境 /home/www-data/growi/apps/app/public
)ここも念のためバックアップします。
※ 添付ファイルのアップロード先をAWSやAzureなどにしている場合は不要です
スナップショット機能などでシステム全体をバックアップした方が確実で安心です。
systemctl status growi.service
※ サービススクリプト名は自分の環境に合わせます。
※ active(running)を確認します
sudo systemctl stop growi.service
systemctl status growi.service
inactive (dead)を確認します
cd /opt/growi
自分の環境に合わせます。(筆者環境/home/www-data/growi
)
sudo git fetch --tags
sudo git tag -l
スペースで確認していき、上記リリースサイトと同じバージョンがあることを確認します。
sudo git stash
sudo git checkout 【バージョン】
sudo pnpm i
sudo npm run app:build
systemctl status growi.service
inactive (dead)を確認します
sudo systemctl start growi.service
※ 完全に起動していないと、アクセスしても503エラーが発生します。
systemctl status growi.service
→ サービススクリプトを[growi]
にしている場合
active (running)を確認します
必要に応じてバックアップしたファイル一式やスナップショットを削除します。
企業内やコミュニティでNextcloudを運用する際のアカウント作成は割と簡単ですが、
{{thumbnail(clipboard-202503081731-br3pd.png, size=640)}}
このようにデフォルトのファイルがアカウントを作成するたびに増えていきます。
1アカウントにつき33MB程ではありますが、不要なファイルではあるので
ように修正します。
以下の環境で動作を確認。
cd /path/to/nextcloud/root/directory/core/skeleton && pwd
筆者環境/home/www-data/nextcloud/core/skeleton
ここに、アカウント作成時に自動的に追加されるファイルが含まれています。
等を消していきます。
例)
sudo rm 'Reasons to use Nextcloud.pdf'
任意の方法でファイル(マニュアルなど)をこのディレクトリに入れることで、アカウント作成時にそのファイルが追加されます。その場合は
sudo chown www-data hoge
として、ファイルの所有者をapache(nextcloud)の実行者に変えます。
sudo systemctl restart apache2.service && echo $?
0
を確認します。
systemctl status apache2.service
active(running)
を確認します。
Redmineサーバからリマインダーのメールが送信されない事象を解決したときのメモ書きです。
サーバにはメール送信の機能を有しておらず、gmailのアプリ連携でメールを飛ばしています。
cd /path/to/redmine/root/directory && pwd
筆者環境/home/www-data/redmine
sudo -u www-data bundle exec rake redmine:send_reminders days=7 RAILS_ENV=production
リマインダメール送信されず。
そこで、production.log
を確認したところ、メール送信時に以下のエラーログが出力されました:
ERROR -- : [ActiveJob] [ActionMailer::MailDeliveryJob] Email delivery error: SSL_connect returned=1 errno=0 peeraddr=xxx.xxx.xxx.xxx:587 state=error: certificate verify failed (unable to get local issuer certificate)
どうやら、証明書回りのエラーのようです。
まず、メール設定を再確認しました。RedmineでのSMTP設定は特に変更していないため、問題は設定に起因するものではないと判断しました。
そこで思い当たる節。
パッケージ管理システムからではなく、手動で OpenSSL を更新した影響で、証明書ストアのパスが /usr/bin/openssl
から /usr/local/ssl
に変更されていたことが原因だと分かりました。
/usr/local/ssl/bin/openssl version -d
→ OPENSSLDIR: "/usr/local/ssl"
を確認。
新しい証明書ストア /usr/local/ssl
にシステムの CA 証明書をコピーしました:
sudo cp /etc/ssl/certs/ca-certificates.crt /usr/local/ssl/cert.pem
また、証明書ディレクトリを作成し、必要な証明書を全てコピーしました:
sudo mkdir -p /usr/local/ssl/certs
sudo cp -r /etc/ssl/certs/* /usr/local/ssl/certs/
sudo /usr/local/ssl/bin/c_rehash /usr/local/ssl/certs/
/etc/environment
に以下の内容を追記しました。
SSL_CERT_FILE=/usr/local/ssl/cert.pem
SSL_CERT_DIR=/usr/local/ssl/certs
sudo source /etc/environment
sudo systemctl restart apache2.service ; echo $?
0
を確認
systemctl status apache2.service
active(running)
を確認
cd /path/to/redmine/root/directory && pwd
筆者環境/home/www-data/redmine
sudo -u www-data bundle exec rake redmine:send_reminders days=7 RAILS_ENV=production
今度は正常に送信されることを確認しました。
Redmineからメールが送信できなかった問題は、手動で更新したOpenSSLの証明書ストアのパス設定が原因でした。
証明書ストアが適切に設定されていないと、SMTP 送信時に certificate verify failed エラーが発生。
証明書関連の問題が発生した場合、OPENSSLDIR を確認し、適切な CA 証明書が配置されているかチェックすることが重要。
また、証明書周りはシステム全体に影響を及ぼすため、確認が甘かったということも事実。これは、手動でOpenSSLをアップグレードする際にも、改めて手順を確認します。
薬を長期にわたって服用することになったので、何かいい持ち運びのグッズはないものかと100均にて発見。
と、JRとの全面コラボ品です。
山手線のポーチは視認性も収納性もバッチリ。
このマスキングテープにしても使い勝手は高め。
メモにも使える形なので楽しみが増えました。
外部に公開しているRedmineサイト。
https://plan.io/redmine-security-scanner
で確認したところ、評価はA。
X-Content-Type-Options header not set Content sniffing may enable cross-site scripting attacks. Since your Redmine server is not properly sending the X-Content-Type-Options header, your users are vulnerable to this attack vector.
の診断が出てA+に至りませんでした。
そこで、設定を修正し、脆弱性評価をA+に引き上げます。
で以下の箇所を確認。
Header always set Strict-Transport-Security "max-age=63072000"
Header set X-Content-Type-Options "nosniff"
Header always append X-Frame-Options "SAMEORIGIN"
Header set X-XSS-Protection "1; mode=block"
セキュリティヘッダーの適用方法を見直し、適切に設定されるよう修正します。
sudo cp -pi /etc/apache2/sites-available/redmine.conf /path/to/backup/directory/redmine.conf.$(date +%Y%m%d)
※自分のRedmineサイトの設定ファイルを指定します。
任意のバックアップディレクトリを指定します。(筆者環境 /etc/apache2/old/redmine.conf.$(date +%Y%m%d)
diff -u /path/to/backup/directory/redmine.conf.$(date +%Y%m%d) /etc/apache2/sites-available/redmine.conf
差分がなければ(エラーがなければ)バックアップ成功です。
上記のredmine.conf
を、以下の差分になるように修正します。(管理者権限が必要)
- Header set X-Content-Type-Options "nosniff"
- Header always append X-Frame-Options "SAMEORIGIN"
- Header set X-XSS-Protection "1; mode=block"
+ Header always set X-Content-Type-Options "nosniff"
+ Header always set X-Frame-Options "SAMEORIGIN"
+ Header always set X-XSS-Protection "1; mode=block"
diff -u /path/to/backup/directory/redmine.conf.$(date +%Y%m%d) /etc/apache2/sites-available/redmine.conf
上記の差分が出てくればOKです。
sudo apache2ctl configtest
→ Syntax OK
を確認します。
systemctl status apache2.service
→ active (running)
を確認します。
sudo systemctl restart apache2.service && echo $?
→ 成功時は 0 が出力されます。
systemctl status apache2.service
→ active (running)
を確認します。
curl -I https://redmineサイト
以下のような表示を確認します。
X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 1; mode=block
X-Request-Id: ***********
X-Download-Options: noopen
X-Frame-Options: SAMEORIGIN
X-Runtime: 0.615862
X-Content-Type-Options: nosniff
https://plan.io/redmine-security-scanner
でURLを入力します。
過去の診断結果が表示されるため、『Re-Scan』をクリックして最新の診断結果を取得します。
「A+」の評価と、以下のような表示が出れば修正できています。
It looks like you are running Redmine 5.1.4. That's a version without any known security issues. Your Redmine is protected by properly configured TLS/SSL. All security relevant headers are configured properly. It appears that you have 3 or more Redmine plugins installed.
firefly-iiiのアップグレードを試みたところ、失敗。その記録と原因についてメモを残します。
cd /hoge && pwd
任意の作業ディレクトリに移動します。
mysqldump --no-tablespaces --single-transaction -u username -h localhost -p database_name > DB_Backup.$(date +%Y%m%d).sql
usename
、database_name
、及びDB_Backup
は自分の環境に合わせます。
head -100 DB_Backup.$(date +%Y%m%d).sql
バックアップができていること、平文でSQLが読めることを確認します。
cd /hoge && pwd
任意の作業ディレクトリに移動します。
wget https://github.com/firefly-iii/firefly-iii/releases/download/v6.2.5/FireflyIII-v6.2.5.zip
sudo chown www-data:www-data FireflyIII-v6.2.5.zip
ls -l FireflyIII-v6.2.5.zip
ファイルがあること、所有者がWebアプリ実行ユーザ(www-data)であることを確認します。
sudo mv /home/www-data/firefly-iii /home/www-data/firefly-iii.$(date +%Y%m%d)
自分の環境に合わせます。firefly-iiiがインストールされているディレクトリをまるごと移動します。
ls -ld /home/www-data/firefly-iii
→ ディレクトリが無いこと
ls -ld /home/www-data/firefly-iii.$(date +%Y%m%d)
→ ディレクトリがあること
sudo -u www-data unzip -o /hoge/FireflyIII-v6.2.5.zip -x "storage/*" -d /home/www-data/firefly-iii
/hoge
は先ほど取得したパッケージがある場所です。アップデート前と同じ位置、名前に解凍します。
ls -l /home/www-data/firefly-iii
ファイル一式があり、www-dataが所有者になっていること
cd /home/www-data/firefly-iii.$(date +%Y%m%d) && pwd
自分の環境に合わせます。
.env
ファイルをコピーsudo -u www-data cp -pi .env /home/www-data/firefly-iii/.env
コピー先のディレクトリは自分の環境に合わせます。
.env
ファイルコピー確認ls -l /home/www-data/firefly-iii/.env
ファイルがあることを確認します。
sudo -u www-data cp -pir storage /home/www-data/firefly-iii/
ls -l /home/www-data/firefly-iii/storage
ファイルやディレクトリがあることを確認します。
cd /home/www-data/firefly-iii && pwd
先ほど展開したディレクトリに移動します。
sudo -u www-data php artisan migrate --seed
ここで失敗。以下のエラーが出ました。
Composer detected issues in your platform:
Your Composer dependencies require a PHP version ">= 8.4.0". You are running 8.3.16.
PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.4.0". You are running 8.3.16. in /home/www-data/firefly-iii/vendor/composer/platform_check.php on line 22
そのため、切り戻しを行います。
cd /home/www-data && pwd
自分の環境に合わせます。
sudo rm -rf /home/www-data/firefly-iii
sudo mv /home/www-data/firefly-iii.$(date +%Y%m%d) /home/www-data/firefly-iii
ls -l /home/www-data/firefly-iii
ファイル一式があり、www-dataが所有者になっていること
sudo systemctl restart apache2.service
systemctl status apache2.service
これは明白にして単純です。
リリースノートを確認していなかった
に尽きます。LAMP環境で動くからこそ、ミドルウェアのバージョン(この場合はPHP)の必要とするバージョンを確認していなかった自分の落ち度です。
v6.2.0のリリースノートに
Firefly III requires PHP 8.4.
と書かれていることを見落としていました。
「切り戻しを前提としていた手順」に助けられました。
させる二段構えにより、迅速な切り戻しが可能になりました。
結局のところ、
「自分の確認不足」から来るミスを「自分の確認不足を想定した手順」でカバーした形です。
Powered by WordPress & Theme by Anders Norén