投稿者: manualmaton Page 14 of 247

Nextcloudのメンテナンス時に出てきたエラーに対処。

環境

  • Ubuntu 24.04
  • Nextcloud 29.8
  • PHP 8.3
  • MySQL 8.0.39
  • Apache 2.4

警告内容

Nextcloudのメンテナンスのため、以下のコマンドを実行。

sudo -u www-data php occ maintenance:repair

この警告が出たので対処をしていきます。

WARNING: Failed to create filecache trigger (compatibility mode will be used): Anng a query: SQLSTATE[HY000]: General error: 1419 You do not have the SUPER privilege andmight* want to use the less safe log_bin_trust_function_creators variable)
WARNING: ffmpeg binary could not be configured

DBのトリガー修正

mysqlの設定ファイルのバックアップ

サーバの要となるサービスです。バックアップは確実に行ってください。

  • ファイルバックアップ
sudo cp -pi /etc/mysql/mysql.conf.d/mysqld.cnf /path/to/backup/directory/mysqld.conf.$(date +%Y%m%d)

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

  • ファイルのバックアップ確認
diff -u /path/to/backup/directory/mysqld.conf.$(date +%Y%m%d) /etc/mysql/mysql.conf.d/mysqld.cnf

エラーがなければバックアップは成功です。

設定ファイル書き換え

  • sedによるファイル書き換え
sudo sed -i '/\[mysqld\]/a log_bin_trust_function_creators = 1' /etc/mysql/mysql.conf.d/mysqld.cnf
  • 書き換え後の差分確認
diff -u /path/to/backup/directory/mysqld.conf.$(date +%Y%m%d) /etc/mysql/mysql.conf.d/mysqld.cnf
  • 差分
 [mysqld]
+log_bin_trust_function_creators = 1

設定反映

  • 反映前のサービス確認
systemctl status mysql.service

active(running)を格納します。

  • サービス再起動
sudo systemctl restart mysql.service
  • 反映後のサービス確認
systemctl status mysql.service

active(running)を格納します。

ffmgetのインストール

そもそもこのパッケージがインストールされていなかったので、

sudo aptitude install ffmpeg

として、パッケージをインストールします。

設定反映確認

  • Nextcloudのルートディレクトリに移動
cd /nextcloud/root/directory

自分の環境(/var/www/html/nextcloudなど)を指定します。

  • 設定確認
sudo -u www-data php occ maintenance:repair

冒頭のエラーがなければOKです。

証明書-中間証明書の整合性を確かめるワンライナー。

SSLサーバ証明書の発行/更新時のチェック方法のメモです。

今まではissuerとsubjectのハッシュ値が同じことを確認していましたが、より確実な方法を調べました。

前提

Let's Encryptのように、証明書と中間証明書が結合されている状態の証明書です。

コマンド

openssl crl2pkcs7 -nocrl -certfile /etc/certs/hoge.example.com.crt | openssl pkcs7 -print_certs -outform PEM | awk 'BEGIN {c=0;} /BEGIN CERTIFICATE/ {c++} { print > "cert" c ".pem"}' && openssl verify -CAfile cert2.pem cert1.pem

/etc/certs/hoge.example.com.crtは、サーバにある証明書をフルパスで指定します。

  1. 証明書をCRL(証明書失効リスト)を含めずにPKCS#7形式に変換。
  2. PKCS#7形式からPEM形式で出力。
  3. awkによって証明書と中間証明書に分解。
  4. サーバ証明書と中間証明書を分割。

を含めています。

実行結果

openssl verify -CAfile cert2.pem cert1.pem
cert1.pem: OK

と出れば、cert1.pem(サーバ証明書)がcert2.pem(中間証明書)によって正しく署名されていることを示しています。

主なエラーの意味と対策

unable to get local issuer certificate
  • 意味:中間証明書またはルート証明書が見つからないか、信頼されていない。
  • 対策:CAファイルに必要な中間証明書とルート証明書が含まれていることを確認します。
certificate signature failure
  • 意味:証明書の署名が無効であるか、改ざんされている可能性がある。
  • 対策:証明書が正しく署名されていることを確認し、証明書ファイルが改ざんされていないかチェックします。
unable to verify the first certificate
  • 意味:証明書チェーンの最初の証明書(通常はサーバ証明書)が検証できない。
  • 対策:CAファイルに正しい中間証明書とルート証明書が含まれていることを確認します。
self signed certificate in certificate chain
  • 意味:自己署名証明書が証明書チェーンに含まれている。
  • 対策:自己署名証明書が適切に信頼されているか確認します。

『ライザのアトリエ2』エボルブリンク解放時でのアクセサリ作成。(DLCアイテム:ユニヴァース)

これを更に推し進めます。

調合タイミング

  • ミラージュラント攻略開始時
  • エボルブリンク解放時
  • 品質999解放時

で作れることをやっていきます。

調合例:ユニヴァース(DLCアイテム)

ステータス

名前ユニヴァース
Lv.75
装備可能者全員
属性/属性値火・雷/6
HP115
攻撃力240
防御力192
素早さ401
品質999

効果・特性

  • 効果1: 四霊を操る
    • 魔法属性のスキルのAP消費量を減少する
  • 効果2: 満ちる霊力
    • 現在のタクティクスレベルによって、コアチャージの回復量が上昇する。スキル使用時のWTが減少する
  • 効果3:迅雷の霊力
    • 雷属性のダメージが増加する。雷属性のアイテムを使用するのに必要なCCが減少する
  • 効果4:轟風の霊力
    • 風属性のダメージが増加する。風属性のアイテムを使用するのに必要なCCが減少する
  • EV効果:賢知の印章
    • 【以下の効果を対象に付与】
      • アイテム強化+5%
      • アイテム短縮+5%
  • 特性1: 防速強化 40
    • 防御力と素早さが増加する
  • 特性2: 攻速強化 40
    • 攻撃力と素早さが上昇する
  • 全能力強化 30
    • 全ての能力値増加する

DLCアイテムだけのことはあり、諸々の効果が強烈です。

例によってストーリーの都合上、強力な特性は望めないもののそれなりの準備はしています。

調合前の必須素材

グランツオルゲン

ロミィのショップ開発でセプトリエンを売ることによりデニスの工房に追加されます。

また、インゴットを大量に売ることで品質、効果を高めています。

後はこれを複製。(ショップ開発で購入したアイテムをリビルドすることはできませんが複製は可能です)

エリキシル剤

エボルブリンクのリンク素材として「エリキシルリング」が必要です。

この材料となるドンケルハイトはロミィのショップ開発で「賢者の石」を売ることで登録されます。(また、ミラージュラントまで行けるのであれば

ガラスの花の木の根元から採取可能です。

極星のエッセンス

この装備品に限り、マテリアル感の効果テーブルを上げる極星のエッセンスにします。

デニスのキャラクターストーリーを進める

装備品強化のためには、デニスのキャラクターストーリーを終わらせておきます。

これにより、装備強化で投入できるアイテムが3枠に増えます。

調合

※用いる素材を太字にします※

ベース素材:四精霊のアミュレット

調合メニューから「ミックスオイル」を選択して自然油を入れます。

魚介類のマテリアル環に影響拡大+1が付与されている魚介類を入れます。(全ての効果テーブルを最大にした水の種から収穫可能です)

パルマの実を入れます。

属性値3以上の闇水晶の欠片を入れてレシピ変化します。

アルケミーペイントに変化します。炎属性を持たせ、影響拡大+4の賢者の石を中和剤のマテリアル環に入れます。

他の材料を入れるところが全てすっ飛ぶので、ラピス・パピヨンを入れてレシピ変化します。

精霊の小瓶にレシピ変化します。影響拡大を持つ1が付与された花を入れます。

セプトリエンを入れてレシピ変化をします。

クリスタルエレメントにレシピ変化します。竜素材の所に影響拡大+5を発現させ、火属性を持たせた竜の涙を入れます。

右上に風属性を持たせた竜の涙を入れます。

グランツオルゲンを入れます。

四精霊のアミュレットにレシピ変化します。極星のエッセンスを入れます。

次に、インゴットのマテリアル環にありったけのグランツオルゲンを投入してパラメータ(ステータス)を上昇させます。

リビルドで特性を発現させるので、この段階でアミュレットを作ります。

リンク素材:エリキシルリング

  1. 研磨剤(大貝の白玉)
  2. パールクリスタル(琥珀水晶)
  3. アンバーライト(魔喰いの枝)
  4. スピリナイト(聖樹結晶)
  5. セイントダイヤ(七煌原石)
  6. アルクァンシェル(エリキシル剤)

とレシピ変化を重ね、

エリキシルリングを調合。これも非常に強力な装飾品なので、一から作っておきます。(今回はエボルブリンクが目的なので、グランツオルゲンによるステータス上昇のみにしておきます)

エボルブリンク

最初に四精霊のアミュレット

次にエリキシルリングを入れてエボルブリンクを行います。

アイテムが変化すると共にマテリアル環が出てきます。

ユニヴァースへと変化しました。

アイテムリビルド

この方法で行うと、アイテムレベルが10でスタートするため、リビルドの猶予がかなり楽になります。

  • 影響拡大を持つ素材(特にクリスタルエレメント)
  • 持たせたい特性を持つ素材

などで全ての効果を発現させていきます。

特性を確認してリビルドまで完了。

更にエボルブリンク

レシピ変化のためのエボルブリンクではなく、装飾品にEV効果を持たせます。

全ての効果を発現させたエリキシルリングを入れて「賢知の印章」を付与します。

装備強化

デニスの工房で装備強化を行います。

効果テーブルは埋まっているので、素早さが上がる素材を適当に選びました。

ここまで来てようやくの完成。

特性や効果などに甘さがありますが、それでも引き継ぎボーナス無しでの高難易度の本編クリアができるまでのステータスにはなっています。

『ライザのアトリエ2』エボルブリンクによるコアアイテム生成。(要DLC)

こちらの記事の補足です。

2024年9月のシリーズ5周年記念アップデートにより、難易度 Very Easyが設定された反面、最高難易度LEGENDの難易度が更に上がりました。

そのため、LEGEND攻略中にもたつく事態が発生したので、コアアイテムの見直しを図ります。

調合のタイミング

  • 全員がプレイアブルになった時(古代マナ工房攻略後)
    • ミラージュラント攻略開始時
  • エボルブリンク解放
  • 品質上限999解放
  • リビルドレベル99解放

調合したアイテム:ヴィアヴェールルフト

  • Lv.99
  • 消費CC:4
    • 装備品効果により実際の消費CCは1
  • 効果1: 吹き飛ぶ魔力
    • 【魔法】無属性の極小ダメージを与え、行動順を後ろに戻す
  • 効果2:ブレイブテンペスト
    • 【魔法】風属性の大ダメージを与え、行動順を大きく後ろに戻す
  • 効果3:吹き飛ばし:超
    • 強風により対象を吹き飛ばす。行動順を後ろに戻す
  • 効果4:最大風力
    • 風力を最大まで強化し、対象の範囲を広げる
  • EV効果:風説の烙印
    • 【以下の効果を対象に付与】
      • 風ダメージ・大
      • 束縛を与える・中
      • 吹き飛ばし・中
  • 特性1:クリティカル+ 60
    • アイテムの使用時にクリティカルに成る確率が最大で60%増加する
  • 特性2;破壊力上昇+ 30
    • アイテムの威力が最大で30%増加する
  • 特性3;強力な破壊力
    • アイテムの威力が20%増加する

より上位の特性はもっとストーリーが進んだ状態で入手可能なので、この時点でのベストを選んでいます。

何故このアイテムか?

「攻略を楽にするため」です。ダメージはローゼフラムにも大きく劣るものの

相手の行動順を大きくずらし、

  • 劣勢を立て直す
  • スペシャルアタックの前にブレイクさせるチャンスを増やす
  • 追い討ちをかける

などの余地を与える強力なアイテムの一つ。

これに気づいたことにより『陽炎の島』の攻略が一段と楽になったという背景があります。

なので、1つ装備させておくことをオススメします。

調合前に必須素材

極星のエッセンス

全てのマテリアル環の効果テーブル最大値が1段階上昇するDLCに追加されたエッセンス。

コアアイテムや種といった、全ての効果テーブルをより上に高めたいときに役立つエッセンスとなります。

夢見の霧花

ミラージュラント攻略時に得られる素材。これは、ヴィアヴェールルフトの消費CCを減らすときに用いる素材です。(かつ、影響拡大で発現不可

調合

ベース素材:ルフト

EV調合は最初に入れた調合アイテムをそのまま引き継ぎます。そのため、ベースのルフトをしっかりと調合します。

調合メニューから「ルフト」を選択して、ヴィント鉱を入れます。

きのこを入れます。

気体のマテリアル環に、エッセンスで「気体」に変化させたクリスタルエレメントを投入します。特性はここで決めておきます。

極星のエッセンスを投入。

後は、影響拡大を持つを持つ素材などで全ての効果を発現させます。

ルフト完成。

EV素材:レーツェルフト

これはルフトからのレシピ変化。必須素材のミストリキッドは、ゼッテル→ 旅人の水珠からのレシピ変化で手に入れます。

EV素材は全てを発現させる必要ありません。投入していないマテリアル環があってもOKです。

エボルブリンクとアイテムリビルド

エボルブリンクの最初にルフトを入れます。

EV素材としてレーツェルフトを投入。

ヴィアヴェールルフトへと変化させます。

リビルド

エボルブリンクで追加されたマテリアル環は未解放のため、リビルドさせる必要があります。

アイテムレベルは99にします。なぜなら、コアドライブ「四星の極光」は、使用するコアアイテムのレベルに応じてダメージが上昇するからです。

後は特性を決めます。

追加のエボルブリンク

ヴィアヴェールルフトに、ヴィアヴェールルフトそのものをエボルブリンク。

更に行動順を後ろに戻す効果を付与します。

まとめ

『ライザのアトリエ2』の肝いりの調合ではありますが、

  1. ベースのアイテムを完全に発現させる
  2. レシピ変化のアイテムを調合する
  3. エボルブリンクで素材を変えた後
  4. リビルドさせる

とかなりの手順を要するシステム。続編の3でオミットされた理由がなんとなく察せられます。

AWS Lightsail → WebARENAへの移行完了。

はじめに

個人的に用いているVPSのコンテンツを、AWS LightsailからWebARENAへと移行完了。

今までUbuntu 20.04で動いていたサーバがUbuntu 24.04へと変わったことにより、Ubuntu 20.04のEOL対応を済ませたという形。

それぞれが、URLもそのままに、バージョンが上がった状態で表示されているという形です。

移行のきっかけ

Ubuntu 20.04のEOLが近づいてきた

これが一番の理由。Lightsailを最初に使い始めた頃は2022年5月だったので、まだ余裕があったのですが、そこから2年も経つとさすがに対応するしかないという形。

Lightsailにそのままインスタンスを移行させても良かったのですが

円安によるLightsail利用料高騰

という立ちはだかる壁があり、

  • 4GB Memory
  • 80 GB SSD

をもう一つ作り維持して行くには結構辛いものがありました。その上、

IPv4アドレスに追加料金

という更に手痛い値上げも発表されます。

迫るEOLに維持費の高騰、それをどうにかするために選んだのがWebARENAです。

WebARENAに切り替えた理由

利用費の安さ

https://web.arena.ne.jp/indigo

2024/10/12現在、

  • 4vCPU
  • 4GB Memory
  • 80GB SSD

で月額1630円。(筆者がサインアップしたときは1年間有効のクーポン付きでした)

Lightsailの24USD/月より安価なのは魅力的でした。

キャリア運営による回線の安定。

今回はNextcloudを使うと決めているだけに、回線が安定しているキャリア(docomo)のvpsを利用しました。

移行が思ったよりスムーズだった理由

元からデータをクラウドストレージに保存していた

これが一番大きかったです。クラウドストレージWasabiをs3でマウントしていたために、他のサーバに画像を転送する必要すらありませんでした。

また、mysqldumpの転送も、同じようにs3経由で引っ張るだけです。

サービス構築のメモを最初に残していた

冒頭の外部サイトやこのブログに

  • うまくいった手順
  • ハマったこと
  • 失敗した理由

など書いていたのが助かりました。手順を基本的にコピペで済むように済ませていたのも自賛する点です。

事前検証

この検証のように、別サーバに移行することをやっていたのもまた助かりました。

今後

最小限構成でのLightsailの転用

とはいえ、「LightsailのDNS機能」が有用であるため、一番安いインスタンスを残しつつ他の用途に使っていきます。

Redmine5.1のコードブロックにコピーボタンを実装。

概要

性質上、RedmineのチケットやWikiにコードを貼り付ける機会は多々あると思います。

と、コードで囲まれている部分の脇にコピーボタンをつけて、コピペの手間を軽減します。

確認した環境

Redmine 5.1

さっくりとした手順

  1. 設定ファイル(4個分)のバックアップを取ります。
  2. パッチファイル(4個分)を作成します。
  3. 4つのファイルに対してパッチを適用します。
  4. Webサービスを再起動します。

ファイルのバックアップ

  • app/views/journals/new.js.erb
sudo cp -pi /redmine/root/directory/app/views/journals/new.js.erb /path/to/backup/directory/new.js.erb.$(date +%Y%m%d)
  • app/views/journals/update.js.erb
sudo cp -pi /redmine/root/directory/app/views/journals/update.js.erb /path/to/backup/directory/update.js.erb.$(date +%Y%m%d)
  • public/javascripts/application.js
sudo cp -pi /redmine/root/directory/public/javascripts/application.js /path/to/backup/directory/application.js.erb.$(date +%Y%m%d)
  • public/stylesheets/application.css
sudo cp -pi /redmine/root/directory/public/stylesheets/application.css /path/to/backup/directory/application.css.erb.$(date +%Y%m%d)

/redmine/root/directoryは、自分の環境に合わせます。(var/lib/redmineなど)

また、/path/to/backup/directtoryは任意のバックアップディレクトリを指定します。

ファイルのバックアップ確認

  • app/views/journals/new.js.erb
diff -u /path/to/backup/directory/new.js.erb.$(date +%Y%m%d) /redmine/root/directory/app/views/journals/new.js.erb
  • app/views/journals/update.js.erb
diff -u /path/to/backup/directory/update.js.erb.$(date +%Y%m%d) /redmine/root/directory/app/views/journals/update.js.erb
  • public/javascripts/application.js
diff -u /path/to/backup/directory/application.js.erb.$(date +%Y%m%d) /redmine/root/directory/public/javascripts/application.js
  • public/stylesheets/application.css
diff -u /path/to/backup/directory/application.css.erb.$(date +%Y%m%d) /redmine/root/directory/public/stylesheets/application.css

それぞれ、バックアップしたファイル → バックアップ元ファイルで差分(diff)を取り、エラーがないこと(差分が無いこと)でバックアップを確認します。

パッチファイル作成

cd /hoge && pwd

任意の作業ディレクトリに移動します。

  • new.js.erb.patch
tee new.js.erb.patch > /dev/null << 'EOF'
--- new.js.erb
+++ new.js.erb.patch
@@ -11,3 +11,4 @@
 $('#issue_private_notes').prop('checked', true);
 <% end %>

+addCopyButtonToPreTag();
EOF
  • update.js.erb.patch
tee update.js.erb.patch > /dev/null << 'EOF'
--- update.js.erb
+++ update.js.erb.patch
@@ -7,6 +7,7 @@
   $("#journal-<%= @journal.id %>-notes").replaceWith('<%= escape_javascript(render_notes(@journal.issue, @journal, :reply_links => authorize_for('issues', 'edit'))) %>');
   $("#journal-<%= @journal.id %>-notes").show();
   $("#journal-<%= @journal.id %>-form").remove();
+  addCopyButtonToPreTag();
   var journal_header = $("#change-<%= @journal.id %>>div.note>h4.note-header");
   var journal_updated_info = journal_header.find("span.update-info");
   if (journal_updated_info.length > 0) {
EOF
  • application.js.patch
tee application.js.patch > /dev/null << 'EOF'
--- application.js
+++ application.js.patch
@@ -1123,6 +1123,49 @@
   });
 });

+function addCopyButtonToPreTag() {
+  $('.wiki .copy-contents').remove();
+  var copyContents =
+    $("<div class='copy-contents'>").append(
+      $("<button class='code-copy-button' title='Copy' onclick='copyText($(this).parent().next(\"pre\"), $(this).parent());'>")
+      .append("<span class='icon-only icon-copy'>")
+    );
+  $('.wiki pre').before(copyContents);
+  $('.code-copy-button[title]').tooltip({
+      show: {
+        delay: 400
+      },
+      position: {
+        my: "center bottom-5",
+        at: "center top"
+      }
+  });
+}
+function copyText(target, copyEl) {
+  // Selecting strings in 2 ways for cross-browser support
+  // 1. Use select();
+  copyEl.append("<textarea class='tmp'>");
+  var tmp = copyEl.find('.tmp');
+  tmp.val(target.text());
+  tmp.select();
+  // 2. Use createRange();
+  var range = document.createRange();
+  range.selectNode(target[0]);
+  window.getSelection().removeAllRanges();
+  window.getSelection().addRange(range);
+  // Copy and Cleanup
+  var copied = document.execCommand('copy');
+  window.getSelection().removeAllRanges();
+  tmp.remove();
+  // Show copied messages
+  if (copied){
+    copyEl.append("<div class='copied-message'>Copied.</div>");
+    var copiedMessage = copyEl.find('.copied-message');
+    copiedMessage.show();
+    copiedMessage.fadeOut('slow', function() { $(this).remove(); });
+  }
+}
+
 function inlineAutoComplete(element) {
     'use strict';

@@ -1241,6 +1284,7 @@
 $(document).ready(setupAttachmentDetail);
 $(document).ready(setupTabs);
 $(document).ready(setupFilePreviewNavigation);
+$(document).ready(addCopyButtonToPreTag);
 $(document).ready(setupWikiTableSortableHeader);
 $(document).on('focus', '[data-auto-complete=true]', function(event) {
   inlineAutoComplete(event.target);
EOF
  • application.css.patch
tee application.css.patch > /dev/null << 'EOF'
--- _old/application.css
+++ application.css.patch
@@ -449,6 +449,30 @@
   height: initial;
 }

+.copy-contents {
+  position: relative;
+}
+.copy-contents .code-copy-button {
+  position: absolute;
+  display: flex;
+  right: -13px;
+  top: 0px;
+  border: none;
+  background-color: transparent;
+}
+.copy-contents .copied-message {
+  position: absolute;
+  display: flex;
+  right: -13px;
+  top: 20px;
+  display: none;
+  color:#505050;
+}
+.copy-contents .tmp {
+  position: fixed;
+  left: 200%;
+}
+
EOF

パッチファイルの所有権変更

  • 変更前確認
ls -l *.patch

上記、作成した4つのパッチがあり、作業アカウントが所有者になっていることを確認

  • 所有者変更
sudo chown www-data:www-data *.patch

→ redmineの実行ユーザを指定します。

  • 変更後確認
ls -l *.patch

4つのパッチの所有者がredminの実行ユーザーになっていることを確認

パッチ適用

  • app/views/journals/new.js.erb にパッチ適用
sudo -u www-data patch /redmine/root/directory/app/views/journals/new.js.erb < /hoge/new.js.erb.patch
  • /app/views/journals/update.js.erb にパッチ適用
sudo -u www-data patch /redmine/root/directory/app/views/journals/update.js.erb < /hoge/update.js.erb.patch
  • public/javascripts/application.js にパッチ適用
sudo -u www-data patch /redmine/root/directory/public/javascripts/application.js < /hoge/application.js.patch
  • public/stylesheets/application.css にパッチ適用
sudo -u www-data patch /redmine/root/directory/public/stylesheets/application.css < /hoge/application.css.patch

それぞれ、ファイルがある箇所を絶対パスで実行してください。特に、application.jsとapplication.cssの取り違えに注意ください。

パッチが上手くいかないときは?

エディタなどを利用して、

https://www.redmine.org/attachments/25075

の内容を、追記してください。

diffによるパッチ適用確認

  • app/views/journals/new.js.erb
diff -u /path/to/backup/directory/new.js.erb.$(date +%Y%m%d) /redmine/root/directory/app/views/journals/new.js.erb
  • app/views/journals/update.js.erb
diff -u /path/to/backup/directory/update.js.erb.$(date +%Y%m%d) /redmine/root/directory/app/views/journals/update.js.erb
  • public/javascripts/application.js
diff -u /path/to/backup/directory/application.js.erb.$(date +%Y%m%d) /redmine/root/directory/public/javascripts/application.js
  • public/stylesheets/application.css
diff -u /path/to/backup/directory/application.css.erb.$(date +%Y%m%d) /redmine/root/directory/public/stylesheets/application.css

として、作成したパッチファイルと同じかを確認します。

設定反映

  • Webサービス再起動
sudo systemctl restart apache2.service
  • Webサービス再起動確認
systemctl status apache2.service

active(running)を確認します。

上記適用後、

  1. コードブロックにコピーボタンがあり、
  2. ボタンクリックで内容がクリップボードに保存される

ことが確認できれば設定完了です。

MySQLのデータベースを暗号化してバックアップするスクリプト。

概要

以前も作成していた、MySQLのデータベースのバックアップを自動的に取得するスクリプトを少々リファインさせました。

変数指定により、複数のDBを任意にバックアップできます。

スクリプトの動き

  • サーバ内にあるDBのバックアップを取得し、暗号化して指定ディレクトリに保存します。
  • 複合化のパスワードはスクリプトが自動生成し、暗号化と同時に別ディレクトリに保存します。
  • cronの自動実行を前提としているため、古い暗号化ファイルと複合化のパスワードは一定期間後に削除を行います。

動作を確認したサーバ

  • Ubuntu 24.04
  • MySQL 8.0.39

前準備

アカウントファイル

任意のディレクトリに、db_account.txtといった、DBにユーザー名とパスワードを記したファイルを作成しておきます。

[client]
user = db_user
password = "password"
  • パーミッションは400にします。(chmod 400 db_account.txt)
  • 取り扱いは慎重に行ってください。

バックアップDBの格納先

  1. 冗長性があり
  2. 機密性が保たれる

場所を指定してください。筆者はクラウドストレージ(wasabi)をマウントしています。

パスワードの格納先

/home/hoge/dbrestore_password のように、複合化のパスワードを格納するディレクトリを作っておきます。
こちらも運用に合わせ、適切に保管ができる場所を指定します。

それぞれ、スクリプト実行アカウントがアクセス/実行できるものにします。

スクリプト

スクリプト内容

  • スクリプトファイル名(例)
    • mysql_db_backup.sh

変数などは間違いの無いように指定ください。

#!/bin/bash

## 変数ここから ##
# $HOMEの変数を指定します。
HOME_DIR="/home/hoge"
# SQLをバックアップするディレクトリ(保管先)を指定します。運用に合わせて指定ください。
backup_dir="/path/to/backup/directory"
# 保持するバックアップの世代を日数で指定します。
keep_days=7
# ファイルに付与する日付/作業ディレクトリ名/バックアップファイル名を指定します。
current_date=$(date +%Y%m%d)
backup_name="backup_mysql_${current_date}"
zip_file="backup_mysql.${current_date}.zip"
# アカウントファイルを指定します。運用に合わせて指定ください。
credentials_file="${HOME_DIR}/script/config/db_account/db_account.txt"
# パスワードを記録するファイル名を指定します。運用に併せてして指定ください。
password_dir="${HOME_DIR}/dbrestore_password"
password_file="${password_dir}/db-restore.${current_date}.txt"
# redmineのデータベース名を指定します。
database_name=database
# バックアップ時に指定するオプションを指定します。
options="--defaults-extra-file=$credentials_file --no-tablespaces --single-transaction"
# バックアップファイルのパターンを指定します。
backup_file_pattern="backup_mysql.*.zip"
# パスワードファイルのパターンを指定します。
password_file_pattern="*restore*.txt"
## 変数ここまで ##

## 処理ここから ##

# 1.アカウントファイルのパーミッションが400かどうかチェックします。
# 400以外は処理そのものを終了します。
permissions=$(stat -c "%a" "$credentials_file")
if [ "$permissions" != "400" ]; then
echo "アカウントファイルのパーミッションは400である必要があります。"
exit 1
fi

# 2.一時的なバックアップディレクトリを作成します。
mkdir "${backup_dir}/${backup_name}"

# 3. mysqldumpを実行してデータベースのバックアップを取ります。
mysqldump $options -h localhost $database_name > "${backup_dir}/${backup_name}/${backup_name}.sql"

# 4. パスワードによる暗号化を実施します。
password=$(openssl rand -base64 12)
cd "${backup_dir}/${backup_name}"
zip -r "${backup_dir}/${zip_file}" -P "$password" .
cd -

# 5. 一時的なバックアップディレクトリを削除します。
rm -rf "${backup_dir}/${backup_name}"

# 6. 解凍パスワードを指定ディレクトリに保存します。
echo $password > $password_file

# 7.パスワードの読み取り権限を600に変更します。
chmod 600 $password_file

# 8. 保持期間より古いバックアップファイルを削除します。
find "$backup_dir" -name "$backup_file_pattern" ! -type f -newermt "${keep_days} days ago" -delete
find "$password_dir" -name "$password_file_pattern" ! -type f -newermt "${keep_days} days ago" -delete

## 処理ここまで ##

作成後、

chmod +x mysql_db_backup.sh

で実行権を付与します。

スクリプトの動かし方

スクリプトの動き

./mysql_db_backup.sh

として実行すると、

  1. 変数で指定したアカウントファイルを読み込み、mysqldumpでバックアップを取ります。
  2. バックアップ作成後、パスワード付きzipファイルに圧縮します。
  3. 圧縮されたバックアップと複合化のためのテキストファイルを変数で指定したディレクトリに格納します。
  4. 変数で指定した期日が過ぎたバックアップファイルと複合化のためのテキストファイルは自動的に削除されます。

バックアップDBの解凍

unzip backup_mysql.yyyymmdd.zip

とすると、パスワードを尋ねられます。

db-restore.yyyymmdd.txtに表示された文字列を入力します。

または、

unzip -P $(cat /path/to/password_file.txt) /path/to/zip_file.zip -d /path/to/output_directory

でファイルを直接引数にして解凍することもできます。

cronの指定

動作を確認したら、

crontab -e -u hoge

でcron編集画面を出し、

0 2 * * * /home/hoge/script/directory/mysql_db_backup.sh

などとして指定すれば、日次のDBバックアップを取得可能です。

Ubuntu 20.04で動いていた Redmine 4.2のデータを Ubuntu 24.04上のRedmine 5.1に移行。

概要

Redmine 4.2 を動かしている Ubuntu 20.04 が2025年4月にEOLを迎えるため、Redmine 5.1 (Ubuntu 24.04)にリプレースをしました。

最初に

  • 「この手順で上手くいった」という筆者のメモ書きです。
  • Rubyのバージョン違いなどで動かないプラグインがいくつかあります。代替手段は別途考慮してください。

動かなかったプラグインとワークアラウンド

redmine_knowledgebase です。

5.xで動くフォークを試したものの、rubyの兼ね合いで動きませんでした。

そのため、記事をこのBookStackに移行させています。

環境

移行前環境

  • Ubuntu 20.04
  • Redmine 4.2
  • Ruby 2.7
  • Apache 2.4
  • MySQL 8.0.39

移行後環境

  • Ubuntu 24.04
  • Redmine 5.1
  • Ruby 3.2
  • Apache 2.4
  • MySQL 8.0.39

さっくりとはならない手順

  1. 【移行先】空のRedmineを構築します。
  2. 【移行元】DBのダンプファイルを作成し、移行先に転送します。
  3. 【移行元】ファイル、メール設定ファイルなどを移行先に転送します。
  4. 【移行先】DBをリストアします。
  5. 【移行先】gemのアップデートを行います。
  6. 【移行先】移行元で稼働していたプラグインを入れていきます。
  7. 【移行先】動作確認を行います。
  8. 【移行元】移行元のredmineを停止します。
  9. 【移行先】必要に応じてDNSの切り替えと移行先のサイト設定を行います。

【移行先】Redmineを構築していきます。

  • こちらのページに従って、移行先のUbuntu 24.04サーバに、Redmineを構築していきます。
  • 構築したてのRedmineのアカウントとパスワードは admin /admin なので、仮パスワードを設定しておきます。

【移行元】DBのダンプファイルを作成して転送します。

  • ディレクトリ移動
cd /hoge && pwd

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

  • ダンプファイル取得
mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql

ユーザー名(-uの後)とDB名(>の前)は自分の環境に合わせます。

  • ダンプファイル内容確認
view redmine_backup.$(date +%Y%m%d).sql

SQL文が平文で読めることを確認します。

作成後、任意の安全な方法で移行先に転送します。

【移行元】各種ファイルを転送します。

以下のディレクトリやを任意の安全な方法で転送します。

/path/to/redmine/root/directory配下(移行前のRedmineルートディレクトリ)の

  • files ディレクトリ(添付ファイル一式)
  • config/configuration.yml ファイル(メール設定がある場合)
  • public/thme/配下のテーマディレクトリ

これらのファイルは転送後、移行後のRedmineに対応するディレクトリ/ファイルに、そのまま上書きます。

【移行先】DBのリストアを行います。

  • ダンプファイル格納ディレクトリに移動
cd /hoge && pwd
  • ダンプファイル確認
ls -l redmine_backup.$(date +%Y%m%d).sql

ファイルがあることを確認します。

  • DBリストア
mysql -h localhost -u redmine -p redmine < redmine_backup.$(date +%Y%m%d).sql

このときのパスワードは、「移行先のRedmineのDBユーザのパスワード」です。

  • Webサービス再起動
sudo systemctl restart apache2.service

Webサービス再起動後に

  1. 移行後のRedmineサイトが移行元と同じ見た目であること
  2. ログインできること
  3. プロジェクト一覧が見られること

までは確認しましたが、チケットを確認しようとすると

500 internal server error

が発生し、閲覧も編集もできない事態が発生しました。

【移行先】gemのアップデートを行います。

こちらの、チケット表示でinternal server errorを解消するため、

Has 500 Internal Server Error when upgrade 4.1.1 to 4.2.7, please help.
https://www.redmine.org/boards/2/topics/67435

この手順を追加します。

  • Redmineのルートディレクトリに移動
cd /path/to/redmine/root/directory && pwd

自分の環境に合わせます。

  • gem update
 sudo gem update

しばらく時間がかかります。

  • Webサービス再起動
sudo systemctl restart apache2.service

gemのアップデート後、今度はエラーが出ないことを確認です。

【移行先】各種プラグインを入れていきます。

移行前に動いていたプラグインを確認しながら、プラグインを入れていきます。

DBマイグレーション中にrake abortedが出た場合は、そのプラグインはRedmine/Rubyのバージョンが合わないので、動かないプラグインです。

【移行先】動作環境を行っていきます。

プラグインを入れながら、既存の機能(別のユーザーがログインできるか、アクセス権は合っているか、チケットの作成や更新ができるか)などを見ていきます。

【移行元】稼働していたRedmineサイトを停止します。

移行元のサーバにSSHログインし、

sudo a2dissite redmine.conf

redmine.confは自分の環境に合わせます。

で設定ファイルを無効化後、

  • Webサービス再起動
sudo systemctl restart apache2.service

として、稼働していた移行元のサイトにアクセスできないことを確認します。

【移行先】必要に応じてDNSの切り替えと移行先のサイト設定を行います。

これは、移行元でも同じURL(ドメイン)を使いたい場合の措置です。

  • DNS向き先変更

DNを利用して、ドメインを移行先のIPアドレスへと付け替えます。

各種DNSサービスによって異なるので、そちらを参照してください。

  • apacheバーチャルサイトの設定変更

/etc/apaches/site-available/redmine.conf (自分の環境に合わせます)

の以下の箇所を編集していきます。

<VirtualHost *:80>
servername hoge.example.com
# 今まで動いていたドメイン名

<VirtualHost *:443>
    ServerName hoge.example.com
# 今まで動いていたドメイン名
  • 構文確認
sudo apache2ctl configtest

Syntax OKを確認します。

  • Webサービス再起動
sudo systemctl restart apache2.service

切り替え後

  1. 前と同じドメインで、新しいRedmineサイトにログインできる
  2. (プラグインが廃止していなければ)同じ機能を使える

ことを確認できれば作業完了です。

移行後の処理

  1. DB移行時に利用したダンプファイルを削除します。
  2. 時期を見て旧サーバのデータの削除を行います。

『ライザのアトリエ3』戦士系最強装飾品「軍師のチョーカー」調合例。

この記事のお題を提示戴いたことで、戦士系のキャラクターでも最高難易度のボスを倒せることが分かったので、その他の装備品を追求することにしました。

今まで本気で作ったことがなかったこちらのアイテムです。

軍師のチョーカー調合例

ステータス

名前軍師のチョーカー
装備可能者全員
属性/属性値風/6
HP197
攻撃力541
防御力284
素早さ627
品質999

効果・特性

  • 効果1:戦闘の魔術師
    • 戦闘開始時、攻撃力が上昇する。タクティクスが上昇時、追加でAPを獲得する
  • 効果2:戦略立案
    • ブレイク中の敵に与えるダメージが増加し、追加でAPを獲得する
  • 効果3:電光石火の策
    • 素早さが上昇し、クリティカル時のダメージが増加する
  • 効果4:激励の指揮
    • 行動時にHPが回復し、受けるダメージが減少する
  • 特性1:防速強化 ++ 99
    • 防御力と素早さが最大で100増加する
  • 特性2:攻速強化++ 99
    • 攻撃力と素早さが最大で100増加する
  • 特性3: 全能力強化++ 99
    • 全ての能力値が最大で50増加する
  • 超特性:英雄の心得
    • アタッカーレベルが上昇

作成

レシピ変化による調合

調合メニューから「ぷにレザー」を選択するところからスタートです。

必須材料を入れたらマテリアル環を左に伸ばしていき、「投入回数増加・強」の秘密の鍵を投入、レシピ変化を行います。

マスターレザーも同じく「投入回数増加・強」の鍵を使います。

古の賢者の石などの影響拡大を持つ素材で一気にレシピ変化のマテリアル環まで持っていきます。

古の闘剣を投入したら、お目当ての「軍師のチョーカー」に行きます。

リビルドは難しい部類に入ります。影響拡大を持つ金属「朽ち果てぬ箱」や

同じく影響拡大を持つ糸素材ヒンメルシュルワーが役立ちます。

なお、秘密の鍵は

  • スーパーレア
  • モチーフ:羽根
  • シンセサイズ効果:攻撃力上昇・超

を用いています。

適度に素材が揃ったら、グランツオルゲンをありったけ投入。

リビルド

リンクコールで潰すには惜しい効果しか無いので、素直にリビルド。発現させるための属性値が多いので、調合の時点である程度解放させておきます。

超特性は「英雄の証」を選択しました。

装備強化

攻撃力と素早さが増加するドレッドレザーを用います。(効果テーブルは既に埋まっています)

効果確認

  • ボオス
  • ディアン
  • レント
    • リラ
    • パトリツィア

の、戦士系キャラクターのみで戦闘。

バフも乗りまくり、敵のHPがゴリゴリと溶けていきます。

Redmineのチケットリマインダースクリプト、改良。

このスクリプトを改良しました。

スクリプト内容

  • redmine_reminder.sh
#!/bin/bash

# Redmineのルートディレクトリを変数化
REDMINE_ROOT="/var/lib/redmine"

# 引数で日数を指定(デフォルトは3日)
DAYS=${1:-3}

# Redmineのルートディレクトリに移動
cd $REDMINE_ROOT

# リマインダーを送信
bundle exec rake redmine:send_reminders days=$DAYS RAILS_ENV=production

改良内容として

ルートディレクトリを変数化することで、サーバを変えても動かしやすくしています。

一番の改良点は引数を指定できること。

redmine_reminder.sh 7

を実行すれば7日以内に到来するチケット、

redmine_reminder.sh 31

で同様に31日前のチケットをメール送信させることができます。

あとはcrontabに

# 8:20に31日前のリマインダーを送信
20 8 * * * /home/hoge/scripts/redmine_reminder.sh 31
# 8:30に1日前のリマインダーを送信
30 8 * * * /home/hoge/scripts/redmine_reminder.sh 1

# 16:30に7日前のリマインダーを送信
30 16 * * * /home/hoge/scripts/redmine_reminder.sh 7
# 16:40に1日前のリマインダーを送信
40 16 * * * /home/hoge/scripts/redmine_reminder.sh 1

# 20:20に3日前のリマインダーを送信
20 20 * * * /home/hoge/scripts/redmine_reminder.sh 3
# 20:30に1日前のリマインダーを送信
30 20 * * * /home/hoge/scripts/redmine_reminder.sh 1

などと実行しておけば、柔軟な設定が可能になります。

Page 14 of 247

Powered by WordPress & Theme by Anders Norén