カテゴリー: ガジェット Page 20 of 85

2023年の主な出来事-サーバ編-

概要

2023年もじきに終わるということで、今年のまとめ。趣味のサーバ運用という点では大きなものがいくつかありました。

新たにインターネット上に構築したサイト

公開用Redmine作成

これが一番大きいです。

推しの名前でドメインが取得できたことにより、「これでWebを公開しよう」と思い立ち、正月休みから行動スタート。

ゲーム『ライザのアトリエ3』リリースに間に合わせ、様々な攻略情報を載せることができました。

Redmine自身の各種情報も掲載できたのも満足です。

アクセス解析システム:matomo作成

  • 非公開

公開用サイトのアクセス状況を知りたくて、このシステムをインストール。

Redmineとの連携はView_Customize_Pluginでなんとかなりましたし、その際、本邦のRedmineメンテナ様自身直々のアドバイスをいただけたことが印象に残っています。

フォトアルバムサイト:piwigo作成

フォトアルバムもついでに作成。

写真の拡充を図っていくのが来年度の目標になりそうです。

ドキュメント保存システム:BookStack作成

Redmineのプラグイン「knowlegebase」に代わるシステムを探していたら見つけました。

  • 本棚や本という概念
  • Markdownフレンドリー
  • 見出しに合わせたスクロール

など、おおよその欲しかった機能が備わっていて、今後のメインウェポンとなる予感です。

ローカルに構築したサイト

Nextcloud

2022年から継続利用。

Growi

2022年から利用しているマークダウンエディタ、growi。

2023年はmermaid.jsにようやく対応したので、デジタルでのメモ残しに大きく貢献しました。

firefly-iii

つい先日ではありますが、この財務管理システムを知ったおかげで「お金関係のロギング」を始められるようになりました。

来年度の目標

Ubuntu 20.04リプレース。

LTSのEOL2025年に備えます。そのためのボトルネックとなっている

  • Redmineのメジャーバージョンアップ
  • およびknoledgebaseの代替システム(現状候補はBookStack)

と検証を進めます。

サーバのスペックアップ

これに関しては予算と相談しながら。

ChatGPTによるシェルスクリプト(SSL証明書の更新)

Let's Encryptで更新しているワイルドカード証明書。

他のサーバにも適用するのを更に簡便にするため、自動化するスクリプトを出力しました。

動作を確認した環境

  • Ubuntu 20.o4
  • Apache2.4

要件

1. 証明書と鍵ペアがあるディレクトリを引数にしてコマンドを実行
 → ファイルがなければエラーを返す
 → ファイルが次の形式でなくてもエラーを返す
 ・hoge.example.com.crt.$(date +%Y%m) ← hoge.example.com.crtの部分を変数化
 ・hoge.example.com.key.$(date +%Y%m) ← hoge.example.com.keyの部分を変数化
2. 引数内のディレクトリのcrt.$(date +%Y%m)を対象に、以下のコマンドを実行する
  2.1 次のハッシュ値をそれぞれ参照し合っていれば後続
  openssl x509 -pubkey -in hoge.example.com.crt.$(date +%Y%m) -noout | openssl md5
  openssl pkey -pubout -in hoge.example.com.key.$(date +%Y%m)  | openssl md5
  2.2 次のハッシュ値をそれぞれ参照し合っていれば後続
  openssl x509 -issuer_hash -noout -in hoge.example.com.crt.$(date +%Y%m)
  sed -n -e'1d' -e'/BEGIN/,$p' hoge.example.com.crt.$(date +%Y%m) | openssl x509 -subject_hash -noout
3. openssl x509 -noout -dates -subject -in hoge.example.com.crt.$(date +%Y%m)
 のnotAfterを参照し、
 「ドメイン『hoge.example.com』有効期限:notAfterで出力した値 で更新します。よろしいですか?」
 を出力。y/nで後続判断
4. 整合性を確認したファイルを以下のディレクトリにコピー
 ・hoge.example.com.crt.$(date +%Y%m) → /etc/certs
 ・hoge.example.com.key.$(date +%Y%m) → /etc/private
 コピー完了の出力をする
5. 証明書のシンボリックリンクを貼り替える
  5.1 cd /etc/certs
  5.2 sudo ln -sf hoge.sample.com.crt.$(date +%Y%m) hoge.sample.com.crt
  5.3 1のコピーとリンクしたファイルのハッシュ値が同じであることを確認
6. 秘密鍵のシンボリックリンクを貼り替える
  6.1 cd /etc/private
  6.2 sudo ln -sf hoge.sample.com.key.$(date +%Y%m) hoge.sample.com.key
  6.3 1のコピーとリンクしたファイルのハッシュ値が同じであることを確認
7. 「Webサービスを再起動しますか?」y/n
 → yの場合は systemctl restart apache2.serviceして後続
 → nの場合はスクリプトを抜ける
8. 「証明書更新が完了しました」のメッセージを出してスクリプト終了

結果

出て来たのはこちら。

ssl_update.sh

#!/bin/bash

# 変更するドメイン
domain="hoge.example.com"

# OpenSSLのパス
openssl_path="/usr/local/ssl/bin/openssl"

# 証明書ファイルの格納位置
cert_dir="/etc/certs"

# 秘密鍵ファイルの格納位置
private_dir="/etc/private"

# 引数の数を確認
if [ "$#" -ne 1 ]; then
  echo "Usage: $0 <directory>"
  exit 1
fi

# ディレクトリが存在するか確認
directory="$1"
if [ ! -d "$directory" ]; then
  echo "Error: Directory not found"
  exit 1
fi

# 証明書と鍵のファイルパスを設定
cert_file="$directory/$domain.crt.$(date +%Y%m)"
key_file="$directory/$domain.key.$(date +%Y%m)"

# ファイルの存在を確認
if [ ! -e "$cert_file" ] || [ ! -e "$key_file" ]; then
  echo "Error: Certificate or key file not found"
  exit 1
fi

# ハッシュの確認
cert_hash=$("$openssl_path" x509 -pubkey -in "$cert_file" -noout | "$openssl_path" md5)
key_hash=$("$openssl_path" pkey -pubout -in "$key_file" | "$openssl_path" md5)

if [ "$cert_hash" != "$key_hash" ]; then
  echo "Error: Certificate and key do not match"
  exit 1
fi

issuer_hash=$("$openssl_path" x509 -issuer_hash -noout -in "$cert_file")
subject_hash=$(sed -n -e '1d' -e '/BEGIN/,$p' "$cert_file" | "$openssl_path" x509 -subject_hash -noout)

if [ "$issuer_hash" != "$subject_hash" ]; then
  echo "Error: Issuer hash and subject hash do not match"
  exit 1
fi

# 有効期限の確認
expiration_date=$("$openssl_path" x509 -noout -dates -subject -in "$cert_file" | grep "notAfter" | cut -d "=" -f 2)

echo "ドメイン『$domain』有効期限:$expiration_date で更新します。よろしいですか? (y/n)"
read response

if [ "$response" != "y" ]; then
  echo "証明書更新がキャンセルされました"
  exit 1
fi

# ファイルをコピー
sudo cp "$cert_file" "$cert_dir"
sudo cp "$key_file" "$private_dir"

# シンボリックリンクを貼り替え
cd "$cert_dir"
sudo ln -sf "$(basename $cert_file)" "$domain.crt"
cd "$private_dir"
sudo ln -sf "$(basename $key_file)" "$domain.key"

# リンクとコピーのハッシュが一致しているか確認
if [ "$("$openssl_path" x509 -pubkey -in "$cert_dir/$domain.crt" -noout | "$openssl_path" md5)" != "$cert_hash" ]; then
  echo "Error: Certificate hash mismatch after linking"
  exit 1
fi

if [ "$("$openssl_path" pkey -pubout -in "$private_dir/$domain.key" | "$openssl_path" md5)" != "$key_hash" ]; then
  echo "Error: Key hash mismatch after linking"
  exit 1
fi

echo "Webサービスを再起動しますか? (y/n)"
read restart_response

if [ "$restart_response" == "y" ]; then
  sudo systemctl restart apache2.service
  echo "Webサービスが再起動しました"
fi

echo "証明書更新が完了しました"
exit 0

作成後、

sudo chmod 744 ssl_update.sh

使う前の準備

  1. 変数を適度に修正します。
  2. 任意のディレクトリにドメインの条件に沿った証明書を格納します。

使い方

sudo bash ssl_update.sh [証明書を格納したディレクトリへのパス]

この後、各種を確認して

証明書更新が完了しました

まで出してくれます。

サーバ:OSの入れ替えに向けて。

昨日のfirefly-iiiのインストール失敗を受けて、

計画の見直しを迫られました。

根本的原因

OSとミドルウェア(PHP)のミスマッチ。というよりも、Ubuntu 20.04 系の限界が見えてきます。

LTSバージョンのEOLが2025年4月。

猶予が1年ほどあるものの、見直しが必要なものが沢山です。

ミドルウェアがパッケージされなくなったのも問題です。

等の延命策を採ってきましたが、限界が来るのは否めません。

まずは

Ubuntuのバージョンアップ検証

が必要になってきます。現状のメインツールである

  • Redmine
  • Nextcloud

をはじめとして、スムーズに移行できるかが問われます。

取り急ぎ:

  1. 空いているデスクトップPCにUbuntu 22(23)を入れてみる
  2. そこに、現在稼働しているデータを移行する。
  3. それと同時に検証を行う。
  4. 問題が無かったら自宅内の運用環境に改めて移行する

という順番です。

検証:firefly-iii v6.1.0をUbuntu 20.04にインストール(失敗)

概要

PHPもDBも入っていない検証機があったので、Firefly iii 6系を入れようとしましたが、失敗しました。

以下は失敗の記録です。

環境

  • Ubuntu 20.04
  • Nginx

結論

php8.3-bcmatchがインストールできないことによるComposerエラーです。

やってみた手順

1.Postgresqlのインストール
1.PostgresのDB作成
1.PHPのインストール
1.composerのインストール
1.firefly iiiの配置
1.Composerによるインストール

PostgreSQLのインストール

  • パッケージアップデート
sudo aptitude update
  • PostgreSQLインストール
sudo aptitude install postgresql postgresql-contrib
  • PostgreSQLの軌道確認
 systemctl status postgresql.service 

Active: active (exited) を確認します

PostgreSQLのDB作成

  • コンソールログイン
sudo -u postgres psql
  • DBとユーザ作成
CREATE DATABASE firefly;
CREATE USER firefly_user WITH PASSWORD 'your_password';
ALTER ROLE firefly_user SET client_encoding TO 'utf8';
ALTER ROLE firefly_user SET timezone TO 'Asia/Tokyo';
GRANT ALL PRIVILEGES ON DATABASE firefly TO firefly_user;
quit

パスワードはポリシーに沿って適切なものを指定します

PHP8.3インストール

  • リポジトリ追加
sudo aptitude install software-properties-common

sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg

sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
  • パッケージアップデート
sudo aptitude update
  • PHP8.3インストール
sudo aptitude install php8.3 php8.3-cli php8.3-fpm php8.3-pgsql php8.3-xml php8.3-mbstring php8.3-gd 
  • バージョン確認
php -v

8.3系であることを確認します。

Composerインストール

cd /hoge
# 任意の作業ディレクトリに移動します
sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
sudo php composer-setup.php
sudo mv composer.phar /usr/bin/composer
  • パス確認
which composer

/usr/bin/composerにあることを確認します

  • バージョン確認
composer --version

2023/12/23現在、2.6.6でした

プログラム配置

  • ディレクトリ移動
cd /var/www/html/ && pwd

任意の公開用ディレクトリを指定します

  • gitでファイル取得
sudo -u www-data git clone https://github.com/firefly-iii/firefly-iii.git
  • ディレクトリ移動
cd firefly-iii && pwd

※失敗:Composerでインストール※

sudo -u www-data composer install --no-dev --prefer-dist

以下のエラーが出て来ました。

Installing dependencies from lock file
Verifying lock file contents can be installed on current platform.
Your lock file does not contain a compatible set of packages. Please run composer update.

  Problem 1
    - Root composer.json requires PHP extension ext-bcmath * but it is missing from your system. Install or enable PHP's bcmath extension.
sudo apittude install php8.3-bcmatch

としてもプログラムは見つからず。

まずは記録として遺しておきます。

今後の展望

Ubuntuそのもののバージョンアップを見据えて動きます。

Firefly III とGmail連携

概要

インストールが完了したFirefly iiiと、Gmailを連携させていきます。

基本的にRedmineのGmail連携と同じ手順でした。

前提

https://atelier.reisalin.com/projects/zettel/knowledgebase/articles/22

に従って、アプリパスワードを設定していることが条件です。

※Googleアカウントにフルアクセス可能なパスワードのため、取り扱いは注意してください。※

手順

ディレクトリ移動

cd /home/www-data/firefly-iii &&pwd

自分がインストールしたディレクトリを指定します。

ファイル編集

  • .env

以下の箇所を変更して保存します。

MAIL_MAILER=smtp
MAIL_HOST=[googleから指定されたメールアドレス]
MAIL_PORT=587
MAIL_FROM=[Gmailアドレス]
MAIL_USERNAME=[Gmailアドレス]
MAIL_PASSWORD=[アプリパスワード]
MAIL_ENCRYPTION=true

設定反映

sudo systemctl restart apache2.service

自分がインストールしているWebサービスを利用します

設定確認

  1. firefly-iiiのサイトにアクセスします。
  2. ログインします。
  3. 管理>メッセージを送信をクリックします。
  4. メールが送信されていれば設定完了です。

Firefly III をローカルサーバにインストール。(PHP8.1対応版)

概要

家計簿的なシステムをオープンソースで作れないものかと思っていたところ、

https://www.firefly-iii.org/

というシステムを発見しました。

無事に動かすことができたので、メモを残します。

インストールの前に

このシステムは、ローカル環境で利用することを強くお勧めします。(金融情報を記録するため)

環境

以下、既に構築済みという状況です。

  • Ubuntu 20.04
  • Apache 2.4
  • MySQL 8.3
  • PHP 8.1
  • Composer 2.6.5

そして、以下を準備済みです。

  • サイトにアクセスするドメインとDNS登録
  • 上記に沿った適切な証明書

さっくりとした手順

  1. プログラムをダウンロードします。
  2. composerでインストールします。
  3. DBを作成します。
  4. .envを設定します。
  5. DBのマイグレーションを行います。
  6. ログファイルの格納ディレクトリを設定します。
  7. ApacheでWebサーバの設定を行います。
  8. アクセスを確認します。

Firefly III のダウンロード

  • ディレクトリ移動
cd /home/www-data

Web公開用のディレクトリを指定します。

  • プログラムのダウンロード
sudo -u www-data git clone https://github.com/firefly-iii/firefly-iii.git -b 5.7.9

※PHP8.1で稼働するバージョンを指定しています。

  • ダウンロード確認
ls -ld firefly-iii

ディレクトリが作成されていること、Web実行ユーザ(www-data)であることを確認します。

Firefly III のインストール

  • ディレクトリ移動
cd firefly-iii && pwd
  • Composerでインストール
sudo -u www-data composer install --no-dev --prefer-dist

エラーがないことを確認します。

DB作成

  • mysqlログイン
mysql -u root -p
  • DB作成
CREATE DATABASE firefly;
CREATE USER 'firefly'@'localhost' IDENTIFIED BY 'パスワード';
GRANT ALL PRIVILEGES ON firefly.* TO 'firefly'@'localhost';
FLUSH PRIVILEGES;
EXIT;

ポリシーに合わせて強固なパスワードを指定します。

.env設定

  • .envのサンプルをコピー
sudo cp -pi .env.example .env
  • ファイル修正
    • .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=firefly
DB_USERNAME=firefly
DB_PASSWORD=your_password

最低限、上記を指定します。パスワードはDB作成時のものです。

DBマイグレーション

sudo -u www-data php artisan firefly-iii:upgrade-database

sudo -u www-data php artisan firefly-iii:correct-database

sudo -u www-data php artisan firefly-iii:report-integrity

sudo -u www-data php artisan passport:install

ログファイルの格納ディレクトリを作成

  • ディレクトリ作成
sudo mkdir /var/log/firefly
  • ディレクトリの所有者変更
sudo chown -R www-data www-data /var/log/firefly
  • ディレクトリ作成確認
ls -ld /var/log/firefly

Apache設定

  • 以下のファイルを作成します。
  • /etc/apache2/sites-available/firefly-iii.conf

※ドメイン名や証明書の格納場所は自分の環境に合わせてください。

<VirtualHost *:80>
    servername bank.example.com
    # ドメイン名を指定します
    RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HTTPアクセスを強制的にHTTPSにリダイレクトします
</VirtualHost>

<VirtualHost *:443>
    ServerName bank.example.com
    # ドメイン名を指定します
    CustomLog /var/log/firefly/firefly_access.log combined
    ErrorLog /var/log/firefly/firefly_error.log
    DocumentRoot /home/www-data/firefly-iii/public
    # 自身の環境に合わせます
    <Directory /home/www-data/firefly-iii/public>
    # 自身の環境に合わせます
        AllowOverride All
        Require all granted
    </Directory>

#SSL設定
  SSLEngine on
    Protocols h2 http/1.1
  # SSLを有効化します

SSLCertificateFile /etc/certs/bank.example.com.crt
# SSL証明書を指定します
SSLCertificateKeyFile /etc/private/bank.example.com.key
# 秘密鍵を指定します

# SSLCACertificateFile /etc/certs/bank.example.com.crt
# 中間証明書が発行元から別ファイルで提供されている場合は、この直上をコメントアウトして中間証明書を指定します

#セキュリティヘッダー付与

    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"

</VirtualHost>

SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off

SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

設定反映

  • 設定反映
sudo a2ensite firefly-iii.conf
  • Webサービス再起動
sudo systemctl restart apache2

インストール確認

設定したURLにアクセスします。(ここではbank.example.com)

  • Email address
  • パスワード(16文字以上)

を設定して、「Register」をクリックします。

続いて初期設定(メインバンクや通貨、言語の指定など)完了後、こちらのダッシュボードが出てくればインストール完了です。

使い勝手やカスタマイズは改めて報告します。

Ubuntu20.04のOpenSSHを8.2p1から9.6.1pにアップデート。(9.8.1pでも同手順は有効)

概要

こちらの記事で、Ubuntu 20.04のOpensslを1.1.1から3.1.1にバージョンアップしました。

しかし、

OpenSSH_8.2p1 Ubuntu-4ubuntu0.9, OpenSSL 1.1.1f  31 Mar 2020

OpenSSHが参照しているSSLが前のままです。また、OpenSSHの脆弱性情報もあるのでセキュリティ上よろしくありません。

そこで、

  • OpenSSHを最新版にする
  • そのとき、参照するOpenSSLも現状に合わせる

作業を行いました。

参考にしたURL:

環境

  • Ubuntu 20.04
  • 上記自サイトに則って、OpenSSLを3.1.1にアップデート済み

さっくりとした手順

  1. コンフィグに必要なディレクトリの作成を行います。
  2. インストールに必要なパッケージをインストールします。
  3. 作業用ディレクトリに移動します。
  4. ソースをダウンロードします。
  5. OpenSSHをソースからビルドします。
  6. バージョンアップを確認します。

最初に

本件はSSHを扱います。念のため、サーバへのターミナルクライアントを別ウィンドウで開いておいてください。

  • 現行のバージョン確認
ssh -V
OpenSSH_8.2p1 Ubuntu-4ubuntu0.9, OpenSSL 1.1.1f  31 Mar 2020

必要なパッケージのインストール

sudo aptitude install build-essential zlib1g-dev libssl-dev libpam0g-dev libselinux1-dev libkrb5-dev

ディレクトリ作成と設定

sudo mkdir /var/lib/sshd && sudo chmod -R 700 /var/lib/sshd/ && sudo chown -R root:sys /var/lib/sshd/

作業用ディレクトリ移動

cd /hoge && pwd

任意のディレクトリを指定します。

ソースのダウンロードと展開

  • ソース取得
wget -c http://mirror.exonetric.net/pub/OpenBSD/OpenSSH/portable/openssh-9.6p1.tar.gz

2023/12/20現在の最新版を指定しています。

2024/07/02追記:CVE-2024-6387に対応する場合はこちらを指定します。
参考: OpenSSHの脆弱性 CVE-2024-6387についてまとめてみた

wget -c http://mirror.exonetric.net/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
  • ソース展開
tar -xzf openssh-9.6p1.tar.gz
# 上記脆弱性に対応したバージョンをダウンロードした場合は
tar -xzf openssh-9.8p1.tar.gz
  • ディレクトリ移動
cd openssh-9.6p1
# 上記脆弱性に対応したバージョンを解凍していた場合は
cd openssh-9.8p1

コンフィグ

  • OpenSSLの位置を確認
which openssl
  • 結果確認
/usr/local/ssl/bin/openssl

筆者の環境です。

  • コンフィグ
./configure --with-kerberos5 --with-md5-passwords --with-pam --with-selinux --with-privsep-path=/var/lib/sshd/ --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/ssl

--with-ssl-dir=/usr/local/sslは、opensslがあるディレクトリのヘッダを指定してます。

  • make
make
  • インストール
sudo make install

バージョンアップ確認

  • バージョン確認
ssh -V
OpenSSH_9.6p1, OpenSSL 3.1.1

バージョンアップされていることを確認します。

# 上記脆弱性に対応したバージョンは
OpenSSH_9.8p1, OpenSSL 3.3.1 4 Jun 2024
  • SSHサービス再起動
sudo systemctl restart ssh.service
  • サービス再起動確認
sudo systemctl status ssh.service

active(running)を確認します

この後、バージョンアップを行ったサーバにSSH接続できれば、作業は完了です。

確認日

2023/12/20

補充と撮影。

情報カードにものを書くようになってから、万年筆のインクの減りが更に加速しました。

そこで、土曜日の朝、上記を対象に補充です。

本体とインクの対応に関しては、この表のお陰ですんなりと判別できました。

  • 補充
  • 拭き取り
  • 試し書き

を一通り行い、

まずは一安心です。

その跡に撮影。先月の終わり頃に組み立てた

『ハリー・ポッター』教科書&教室の「占い学」が背景です。

スクリプト改修。(SSL証明書の有効期限確認スクリプト)

概要

このスクリプトを修正します。

修正後の内容

  • qa_ssl_checker.rb
require 'openssl'
require 'socket'
require 'date'
require 'uri'
require 'timeout'

# ユーザーからURLを対話的に受け取る
def get_user_input
  print "チェックしたいサイトのドメインを入力してください(例: example.com): "
  domain = gets.chomp

  # 入力がhttp://またはhttps://で始まらない場合は、https://を追加
  domain = "https://#{domain}" unless domain.start_with?('http://', 'https://')

  domain
end

# 変数で指定したURLに接続して証明書の有効期限を取得するメソッド
def get_certificate_expiry_date(url)
  uri = URI.parse(url)
  hostname = uri.host
  ssl_socket = nil
  tcp_client = nil

  begin
    # タイムアウトを5秒に設定してSSL接続を確立
    Timeout.timeout(5) do
      tcp_client = TCPSocket.new(hostname, 443)
      ssl_context = OpenSSL::SSL::SSLContext.new
      ssl_socket = OpenSSL::SSL::SSLSocket.new(tcp_client, ssl_context)
      ssl_socket.hostname = hostname
      ssl_socket.connect

      # 証明書の有効期限を取得
      cert = ssl_socket.peer_cert
      expiration_date = DateTime.parse(cert.not_after.to_s)
      days_remaining = (expiration_date - DateTime.now).to_i

      return expiration_date, days_remaining
    end
  rescue Timeout::Error
    return nil, "サーバーへの接続がタイムアウトしました。"
  rescue => e
    return nil, e.to_s
  ensure
    ssl_socket&.close
    tcp_client&.close
  end
end

# メイン処理
def main
  url = get_user_input
  expiration_date, days_remaining = get_certificate_expiry_date(url)

  if expiration_date
    formatted_date = expiration_date.strftime("%Y/%m/%d")
    puts "サイト #{url} の有効期限は #{formatted_date} です。残り #{days_remaining} 日です。"
  else
    puts "証明書の取得に失敗しました: #{days_remaining}"
  end
end

# メイン処理を呼び出し
main
  • 差分
-  print "チェックしたいサイトのURLを入力してください(https://example.comのような形式): "
-  gets.chomp
+  print "チェックしたいサイトのドメインを入力してください(例: example.com): "
+  domain = gets.chomp
+
+  # 入力がhttp://またはhttps://で始まらない場合は、https://を追加
+  domain = "https://#{domain}" unless domain.start_with?('http://', 'https://')
+  
+  domain

変更された挙動

前は、URLを入力するときに

https://~ を含めたドメインが必要でしたが、今回はドメインのみ(example.com)のみで処理をしてくれるようになります。

地味ですが、大きな改善点です。

BookStackのバージョンアップ手順。(BookStack v23.08.3 → BookStack v23.10.4)

概要

運用しているBookStackのバージョンアップを行います。

環境

  • Ubuntu 20.04
  • Apache 2.4系
  • PHP 8.1
  • MySQL 8系

手順

https://www.bookstackapp.com/docs/admin/updates/

ほぼ、こちらの公式記事の通りに行いました。

BookStackのディレクトリに移動

  • ディレクトリ移動
cd /var/lib/BookStack/ && pwd

インストールされているディレクトリを指定します

アップグレード

  • git pull
sudo -u www-data git pull origin release
  • 実行例(一部抜粋)
 tests/LanguageTest.php                                                              |   19 +-
 tests/Permissions/RolePermissionsTest.php                                           |   16 +-
 tests/PublicActionTest.php                                                          |    4 +-
 tests/PwaManifestTest.php                                                           |   72 ++
 tests/SecurityHeaderTest.php                                                        |   11 +-
 tests/Settings/TestEmailTest.php                                                    |    6 +-
 tests/TestCase.php                                                                  |   38 +-
 tests/ThemeTest.php                                                                 |   44 +-
 tests/Uploads/AvatarTest.php                                                        |   62 +-
 tests/Uploads/ImageTest.php                                                         |   28 +-
 tests/User/UserApiTokenTest.php                                                     |   86 +-
 tests/User/UserManagementTest.php                                                   |    6 +-
 tests/User/UserMyAccountTest.php                                                    |  339 ++++++++
 tests/User/UserPreferencesTest.php                                                  |  164 +---
 tests/User/UserSearchTest.php                                                       |    3 +-
 version                                                                             |    2 +-
 557 files changed, 14110 insertions(+), 5348 deletions(-)
 rename app/{Notifications/ConfirmEmail.php => Access/Notifications/ConfirmEmailNotification.php} (82%)
  • アップグレード
sudo composer install --no-dev
  • 実行例(一部抜粋)
  - Upgrading psy/psysh (v0.11.20 => v0.11.22): Extracting archive
  - Upgrading laravel/tinker (v2.8.1 => v2.8.2): Extracting archive
  - Upgrading mtdowling/jmespath.php (2.6.1 => 2.7.0): Extracting archive
  - Upgrading aws/aws-sdk-php (3.279.2 => 3.283.8): Extracting archive
  - Upgrading league/flysystem-aws-s3-v3 (3.15.0 => 3.16.0): Extracting archive
  - Upgrading phpseclib/phpseclib (3.0.21 => 3.0.23): Extracting archive
  - Upgrading predis/predis (v2.2.1 => v2.2.2): Extracting archive
  - Upgrading socialiteproviders/manager (v4.3.0 => v4.4.0): Extracting archive
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi

   INFO  Discovering packages.  

  barryvdh/laravel-dompdf ................................................................................................... DONE
  barryvdh/laravel-snappy ................................................................................................... DONE
  intervention/image ........................................................................................................ DONE
  laravel/socialite ......................................................................................................... DONE
  laravel/tinker ............................................................................................................ DONE
  nesbot/carbon ............................................................................................................. DONE
  nunomaduro/termwind ....................................................................................................... DONE
  socialiteproviders/manager ................................................................................................ DONE

62 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> @php artisan cache:clear

   INFO  Application cache cleared successfully.  

> @php artisan view:clear

   INFO  Compiled views cleared successfully.  

自分の環境ですとキャッシュのクリアなどは自動的に行うため、上記URLの追加手順は不要でした。

バージョンアップ確認

  1. BookStackがインストールされているURLにアクセスします。
  2. 管理者権限でログインします。
  3. 設定のシステムバージョンが以下、作業時の最新版になっていれば成功です。

Page 20 of 85

Powered by WordPress & Theme by Anders Norén