カテゴリー: ガジェット Page 45 of 99

ChatGPTによるシェルスクリプト(パッケージの自動更新)の問題点と修正。

この記事の更に続きとなります。

以前作成したスクリプトに問題点があったので修正します。

問題点詳細

アップデートするパッケージによってはコンフィグを残すか否かをアップデート中に聞いてきます。

このプロンプトが表示されるとスクリプトは停止。処理を手動で中断して実行する羽目になります。

これを回避するため、以下のように修正いたしました。

修正差分

-    aptitude -y full-upgrade | tee $upgraded_packages >/dev/null
+    DEBIAN_FRONTEND=noninteractive aptitude -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" full-upgrade | tee $upgraded_packages >/dev/null

修正した処理の詳細

※chatGPTの回答なので信頼性は各自ご判断ください。

  1. DEBIAN_FRONTEND=noninteractive : DEBIAN_FRONTEND 環境変数に noninteractive を設定し、aptitude コマンドを非対話モードで実行します。これにより、パッケージの更新時に表示される確認メッセージを自動的に承認することができます。
  2. aptitude -y : aptitude コマンドに -y オプションを指定して、すべての質問に対して自動的に yes を返答するようにします。
  3. -o Dpkg::Options::="--force-confdef" : dpkg コマンドに --force-confdef オプションを指定して、パッケージがインストールされる際に必要なデフォルトの設定値を使用するように指定します。
  4. -o Dpkg::Options::="--force-confold" : dpkg コマンドに --force-confold オプションを指定して、既存のコンフィグファイルを保持するように指定します。
  5. full-upgrade : aptitude コマンドの full-upgrade オプションを指定して、すべてのパッケージを最新バージョンに更新します。
  6. | tee $upgraded_packages >/dev/null : 更新されたパッケージのリストを一時ファイルに保存します。パイプライン演算子 | を使用して、aptitude コマンドの出力を tee コマンドに送信し、同時に一時ファイルに書き込むように指定します。>/dev/null を追加することで、標準出力を無効化し、結果を表示しないようにします。

修正後のスクリプト全文

#!/bin/bash

# インストールされているパッケージの一覧を取得して別ファイルに出力します。
now1=$(date +%Y%m%d)
dpkg-query -W > installed_packages_$now1.txt

# aptitude updateを行います。
aptitude update

# updateの結果:
if aptitude search '~U' | grep -q '^i'; then
    # 対象パッケージ,変更前バージョン,変更後のバージョン を記入した日付付きのファイルを作成。
    now1=$(date +%Y%m%d)
    upgraded_packages=$(mktemp)

    # パッケージのキャッシュをクリアした上でパッケージアップグレードを実施。
    aptitude clean
    DEBIAN_FRONTEND=noninteractive aptitude -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" full-upgrade | tee $upgraded_packages >/dev/null

    # パッケージ一覧からの差分を別ファイルで作成。(実行日の日付を付与)
    new_packages=$(mktemp)
    dpkg-query -W > $new_packages
    diff -u installed_packages_$now1.txt $new_packages > package_diff_$now1.txt

   # 新しいパッケージ名を取得
   DIFF_FILE="package_diff_$now1.txt"
   NEW_PACKAGES=$(grep -E "^\+[^+]" $DIFF_FILE | awk '{print $1}' | cut -c 2-)

   # 変更されたパッケージの数と、新しいバージョンのパッケージ名のリストを表示
   UPDATED_PACKAGES=$(echo "$NEW_PACKAGES" | wc -l)
   echo "$UPDATED_PACKAGES 件のパッケージに変更がありました。以下のパッケージが更新されました:"
   echo "$NEW_PACKAGES"

    # checkrestartを実行して結果を取得
    now=$(date +%Y%m%d)
    checkrestart_output=$(checkrestart)

    # サービスを再起動する必要のあるプロセスを抽出してファイルに出力
    restart_services=$(echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | awk '{print $NF}' | sort -u)

    if [[ -n "$restart_services" ]]; then
        # ファイル名に日付を追加
        now2=$(date +%Y%m%d)
        filename="restart_services_$now2.txt"

        echo "以下のサービスを再起動してください:" >> "$filename"
        echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | grep -v "restart$" >> "$filename"
        echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | grep "restart$" >> "$filename"

        echo "以下のサービスを再起動してください:"
        echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | grep -v "restart$"
        echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | grep "restart$"


    else
        echo "再起動するサービスはありません"
    fi
fi

これでコンフィグを残すか否かのアップデートでも停止することなく動きましたが、肝心の

  • どのパッケージがコンフィグを残すか否か求められたか
  • その差分は何か

などが不明。なので、改善点はまだまだです。

LAMY洗浄とブロッター買い足し。

この日、丸善で購入したのは万年筆本体だけではありませんでした。

万年筆洗浄

使い切ったり古くなったインクが出てきたので、これらも一新しようとコンバータも合わせて買っていたのです。
  • コンバータをしかるべき手段で処分し
  • ペンを流水で流していき
  • 超音波洗浄器にかける

まで実施。3~4回ほど洗浄器にかけたときは水の色がインクで染まっていましたが、ここまで綺麗になりました。

あとは

  • 乾燥
  • 新たなコンバータに詰め替え
  • インク補充

が待っています。

ブロッター買い足し

こちらのブロッターも自宅用/職場用に分けるため買い足しました

買う前は

  • 流石に大仰
  • ティッシュで十分ではないか

など思ったものの、

  • すぐにインクを吸い取るから乾燥を待たなくていい
  • インクのにじみが減る

と、いいことしかありません。何より、乾燥が甘くてページがくっついてしまう頻度が極度に減りました。

こういう道具は「書き物をする場所」ごとに持っておきたいと改めて。

Redmine Addtional Tagsによる一括タグ付け。

こちらを更に発展させました。

https://atelier.reisalin.com/projects/ryza3/issues

こうして、ゲーム『ライザのアトリエ3』の見聞録などの情報をチケットかできたものの、もっと付与したい情報がありました。

「タグ付け」による分類です。

既にあるプラグイン「Additonal Tags」でどうにかなりました。(というよりも使っている内に気づきました)

こんな形のタグ付けされていないチケット。

全て選択して

右クリックから「tags」を選択。

付与したいタグを入れていき、「追加」をクリック。

追加後、しっかりとチケットにタグが付与されていることを確認。

これで、諸々の整理がもっと楽になります。

『ライザのアトリエ3』三周目の記録と高難易度の挑戦。

一周目と二周目の概要

  1. 1周目は実績全解除を目指しました。(リンク先ネタバレあり)
  2. 2周目は各地に存在する見聞録を集めました。(リンク先ネタバレあり)

三周目の挑戦

そこで、3周目は「各地のランドマーク」をRedmineに重点的に記録していきます。

https://atelier.reisalin.com/issues/162

と、今後の調合の際に「どこに行けどの超素材が手に入るか」を記録しようというわけです。

難易度『LEGEND』追加

そんな中、待望のアップデート実施。

最高難易度「LEGEND」追加。折しも三週目に入ったばかり。引き継ぎ時に作成していたコアアイテムがどこまで通用するかを試す絶好の機会です。

結果は圧勝というか鎧袖一触。

コアアイテムを調整していないのでアイテムが使えるようなCCが溜まる前に殲滅するケースがほとんど。

こちらに関してはストーリー進行に合わせて挑戦しがいが出てくればと思います。

“早矢仕”と“檸檬”。

ちょっと用があったので丸の内に赴きました。

最初の理由はこちら。

久しく食べていなかったハヤシライスをいただくため。(この早矢仕ライスは丸善が開祖の一つだとか)

じっくり煮込まれた肉とトマトの風味がクリームコロッケとマッチ。久しぶりの害ショックということもあって満足です。

そしてもう一つ。

LAMY Al-Starの新色とLAMY Safariの「シャープペンシル」です。

こちらも「何年ぶりか」というレベルでシャープペンシルを買いました。

  • 手続きや何やらで使う機会がある
  • 書き味が思った以上に悪くない

と気づいたためです。

既に手に入れているライムカラーの万年筆と対になるように購入。(上述したように推し色ですし)

2本揃ったので、併せて撮影です。

Let’s Encryptの証明書整合でハマったこと。(ECDSA方式での整合性確認)

概要

更新サイクルが3ヶ月と短いものの、無料で利用できるということで愛用しているLet's Encrypt。
デフォルトの暗号化形式がRSAからECDSA方式に変わったようで確認方法でハマりました。

なんとか解決したのでメモを残します。

従来の確認方法

RSA方式での証明書は、以下の

openssl x509 -in /etc/certs/hoge.example.com.crt -noout -modulus | md5sum
# SSL証明書ファイル

openssl rsa -in /etc/private/hoge.example.com.key -noout -modulus | md5sum
# 秘密鍵ファイル

を実行し、それぞれのハッシュ値が合致していることで証明書と秘密鍵の整合性の確認を取ることができています。

ECDSA方式に変わったことでの問題

2023年4月時点で、Let's Encryptのデフォルト暗号化形式がRSA→ECDSA方式に変わっていました。

openssl rsa -in /etc/private/hoge.example.com.key -noout -modulus | md5sum
# 秘密鍵ファイル

を実行すると

139945929635648:error:0607907F:digital envelope routines:EVP_PKEY_get0_RSA:expecting an rsa key:crypto/evp/p_lib.c:469:

といったエラーが出ます。

これでは証明書と秘密鍵の整合性が確認できません。

しばらくGoogleと格闘し、なんとか解決策を見つけました。

https://security.stackexchange.com/questions/73127/how-can-you-check-if-a-private-key-and-certificate-match-in-openssl-with-ecdsa

ECDSA方式でも証明書と秘密鍵の整合性が確認できるコマンド

まず、鍵がECDSA方式であることを確認。

  • 確認コマンド
openssl ec -in /etc/private/hoge.example.com.key -text -noout
# 秘密鍵のパスを指定します
  • 確認結果
(略)
ASN1 OID: prime256v1
NIST CURVE: P-256
# 上記が表示されればECDSA方式であると確認できます。

次に、以下のようにして公開鍵を抽出してハッシュ値を割り出します。

openssl x509 -pubkey -in /etc/certs/hoge.example.com.crt -noout | openssl md5
(stdin)= ハッシュ値
# SSL証明書ファイル

openssl pkey -pubout -in /etc/private/hoge.example.com.key | openssl md5
(stdin)= ハッシュ値
# 秘密鍵ファイル

### 2つのハッシュ値が合っていれば証明書と秘密鍵の整合性は取れています

以上、ECDSA方式でも整合性を確認することができました。

余談

この、「鍵を用いて鍵を取り出す」って、『ライザのアトリエ3』で無垢の鍵から秘密の鍵を抽出しているようだなと益体もないことが脳裏をよぎりました。

吸い取り紙の威力。(ブロッター導入)

使われている道具には意味があると実感です。

到着:ブロッター

黒板消しというかバレンというか、そういった体の道具、ブロッター。曰く

「余分なインクを吸い取る」

道具は必要あるのかと最初は侮っていました。(手帳に書くときは間にティッシュ挟んでますし)とはいえ、

  • 常時10本以上の万年筆を持ち歩いている
  • 定期的な補充やメンテナンスを欠かさない

身としては検証して損はないと思って注文し、到着。

驚きの使い勝手

日記を書いているときに早速利用。効果は驚きでした。

「こんなに余分なインクがあったのか」というのにも驚きですし、吸い取った跡を手で撫でてもインクがつかないことに驚愕。

検証の価値は十分にありました。自宅のみならず職場にも置いておきたい一道具です。

Redmineのチケットによるゲーム情報管理と一括登録。(『ライザのアトリエ3』ネタバレ要素あり)

Redmineのチケット機能、プライベートでも活躍。

こんな感じで一つの事柄に対してコメントを足していくことで、「1つの目的で必要な要素」を網羅しました。

今回は逆に「多数の要素を一つの目的に落とし込む」ための機能を用いました。

攻略時のメモ記載。

『ライザのアトリエ3』での攻略メモ、(2周目に入ってから)見落としがちな見聞録や料理のレシピなどを残しておきました。

https://atelier.reisalin.com/issues/46

これを加工していきます。

インポート用データ作成。

  • チケットのステータス
  • 対象バージョン
  • カスタムフィールド(見聞録入手条件)

等、

スプレッドシートに書いていきます。「説明」欄にマークダウンを記入できるのである程度テンプレ化できるのも強み。

ゲーム中に取得したスクリーンショットはコメントへのリンクを張っていきます。

CSVインポート

こうして作ったデータをCSVインポートでそのまま取り込み。

バージョン管理

ここでは、ゲーム中に訪れる地方を「バージョン」と位置づけました。

なので、インポートされた見聞録のデータはこのように一瞥できるようになります。

https://atelier.reisalin.com/projects/ryza3/issues/gantt

チケットの詳細をクリックするとこんな形になりました。

Redmine4.2にissue_importerをインストール。

概要

基本的に:「Excelが大嫌いなのでRedmineを使っている」というのがスタンスです。
ですが、「大嫌いなExcelシートで加工した方が効率がいい状況」は多々発生します。

そんな加工したデータをチケットとして登録するためのプラグインを導入しました。

RedmineにはCSVインポート機能が備えられているものの、本項で紹介するプラグインはチケットの更新も行えるのが特徴です。

プラグイン名

  • redmine_importer
    • https://github.com/agileware-jp/redmine_importer

動作を確認した環境

  • Ubuntu 20.04
  • Redmine 4.2
  • Apache 2.4
  • Mod_passanger

導入時

Gem追加:不要
DBマイグレーション:要

手順

さっくりとした手順

  1. SSHログイン後、Redmineプラグインに移動
  2. gitでレポジトリをダウンロード
  3. DBマイグレーション
  4. Webサービス再起動

ディレクトリに移動します。

cd /home/www-data/redmine/plugins
# 自分の環境に合わせます。

プラグインを配置します。

sudo -u www-data git clone https://github.com/agileware-jp/redmine_importer

ls -ld redmine_importer
# このディレクトリがあることを確認します

DBのマイグレーションを行います。

cd /home/www-data/redmine
# 自分の環境に合わせます。

sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Webサービスを再起動します。

sudo systemctl restart apache2

設定後の動作

  1. 管理者権限でRedmineにログインします。
  2. プロジェクト > 設定>モジュールに進み「importer」にチェックを入れます。
  3. プロジェクトのタブに「インポート」が表示されれば動作完了です。

こちらではインストールまで実施。具体的な使い方は別途紹介します。

動作確認日

2023/04/13

鍵と装飾。-百均グッズの撮影用小物(その43)

最近、百均で見つけたものです。

椅子型のスマホスタンド

本物そっくりのディティールが特徴的なパイプ椅子。ストッパーが付いていてスマートフォンを載せられる実用性もあります。

1/12 figmaサイズにはやや大きめですが、きちっと座らせられました。

フレークシール

このそっけないカバーを装飾します。

ちょうど魔術というか錬金術っぽいシールがまとめて売られていたので、早速の貼り付け。自分のものだとわかりやすくすると同時に、カバンの中でもどちらがカバー部分化を判別できる利点もあります。

鍵オブジェ

『ライザのアトリエ3』のサブタイトルが「秘密の鍵」ということで、百均で見つけた瞬間に「これは合わせることができる」と狙ってみました。

思ったとおり、figmaライザに抱えさせることで写真のアクセントとすることができました。

Page 45 of 99

Powered by WordPress & Theme by Anders Norén