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

『ライザのアトリエ2』コアドライブ「四星の極光」最大ダメージ検証。Part3(2年後の検証)

こちらも、記事を掲載してから2年近く。難易度LEGENDで、安定してダメージを与えることに成功しました。

前提

メンバーやステータス、使用するコアアイテムは以下URLの通りです。

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

また、プレイヤー操作キャラクターをタオに変更しておきます。

検証結果

戦闘開始

まずは杖でスウィングしてタクティクス2でスタートします。

タオのデバフ

時空の天文時計と闇夜の宝箱をかけます。それぞれ永久機関&エコノミーコアの重ねがけのために開幕から2つのアイテムを使用できます。

その後、操作キャラクターをライザに切り替えます。

ライザのCCチャージ

適当にスキルを重ねていき、CCを8~11まで増やします。3回程度の攻撃で増えます。

「四星の極光」発動

タクティクスレベル5、ライザのCC8以上を確認したら、いよいよ発動です。

  1. エルシオンハープ
  2. ローゼフラム1つめ (予言の烙印)
  3. ローゼフラム2つめ (予言の烙印)
  4. N/A(達人の烙印)

ダメージ結果

ダメージ21,514からスタート。

N/A発動では880,224まで上昇。

コアドライブ「四星の極光」発動。

1,506,647到達。

と、大台の100万オーバーに達成。また、CCチャージ量やLEGEND特有の味方へのデバフなどを考慮すれば200万オーバーも不可能な数字ではありません。

まとめ

見直しによりまだまだやり込めるというのに改めて驚きです。

今回は「四星の極光」にこだわり、また、戦闘手順を簡略化するためにCC消費量をなるべく減らすような運用にしましたが、まだ見つけてない手段などは沢山あるわけで。

自作「3」でも、こういった検証ができることに期待です。

『ライザのアトリエ2』超高難易度DLC「陽炎の島」クリア時のキャラクターステータス(追記あり)

2年ぶりの更新です。

『ライザのアトリエ3』発売が近いということで、おさらいを兼ねて

  • 引き継ぎボーナスなし
  • 難易度LEGEND

で、超高難易度DLC『陽炎の島』をクリアしました。整理を兼ねてここにご紹介です。

超高難易度DLC『陽炎の島』を最高難易度LEGENDでクリアするための装備品やコアアイテムを選びました。

メンバー

前衛

  1. ライザ
  2. タオ
  3. パトリツィア

後衛

  1. クラウディア

何故このメンバーか?

ライザ

コアアイテム要員です。道中はコアドライブ「四星の極光」による短期決戦を目指していきます。
また、ボス戦でもアイテム連打の固定砲台として機能します。そのために武器の付与効果もコアアイテム特化型にしています。

タオ

デバフ要員です。ライザのコアドライブに先駆けてデバフをかけます。

パトリツィア

前衛配置時のスキル「クリティカル時のダメージ上昇」が非常に優秀。ライザの攻撃アイテムはクリティカル率を100%にしているので、確実なダメージ上昇が見込めます。

クラウディア

対ボスにおける「場持ち」をよくします。DLC『陽炎の島』のボス戦では一発や二発程度のコアドライブ/フェイタルドライブは露払いにもなりません。

それぞれ各戦闘に1回だけ使えないというゲームの仕様上、継続してダメージを与えるためにはスキルによるチェインでのラッシュがメインプランとなります。

各メンバーの詳細

装備品に関してはDLC『戦いの極み』の最上位武器/防具を利用しています。

また、アクセサリへのEV効果付与もDLCでの解禁です。

ライザ

ステータス

ステータス数値
Lv.100
HP1555
攻撃力2983
防御力2313
素早さ2313
装備品質200
器用さ99

装備品

/ノクターナルレリックアダンマントスケイルエリキシルリングユニヴァース
種別武器防具アクセサリアクセサリ
HP323397330232
攻撃力852741629453
防御力3261005396295
素早さ695700864780
効果1天の隕石・超ドラゴンブレス・超一子相伝の知識四霊を操る
効果2超感覚強化竜鱗の要塞常勝不敗の戦術満ちる霊力
効果3四色の羽根・超防御力+20素早さ+20迅雷の霊力
効果4立派な切れ味ダメージ軽減+7%ブレイク強化+7%轟風の霊力
特性1攻速強化++ 99スーパーボディ 99ドッジムーブ 99ドッジムーブ 99
特性2全能力強化 ++ 99全能力強化 ++ 99全能力強化 ++ 99全能力強化 ++ 99
特性3スペシャルアーツ 99ハイパーボディ 99フラッシュムーブフラッシュムーブ
EV効果--叡智の印章達人の印章

武器の効果はそれぞれ以下のとおりです。

  • 天の隕石・超
    • 魔法ダメージを与えるアイテムを使用する時、消費するCCが1減少する。与えるダメージが増加する
  • 超感覚強化
    • アイテムによって与えるダメージが増加する
  • 四色の羽根・超
    • 火属性、氷属性、雷属性、風属性のダメージが増加する
  • 立派な切れ味
    • クリティカル時に与えるダメージが増加する

コアアイテム(コアドライブ:四星の極光)

※本項で示すコアアイテムは特別な事情がない限り、DLC「調合の極み」の極星のエッセンスを用いて全てのマテリアル環の効果テーブル最大値を1ずつ増やしています。

/エルシオンハープ (DLCアイテム)
種別魔法の道具
Lv7
消費cc2
対象全体(味方)
属性雷、風
効果1魂が落ち着く
効果1説明アイテムのダメージとCCの回復量を上昇する
効果2ブレイク値回復・超
効果2説明ブレイク値を回復する
効果3AP回復・大
効果3説明APを大きく回復する
効果4素早さアップ・超
効果4説明素早さを上昇する
特性1永久機関
特性2エコノミーコア
特性3回復力上昇 ++50
EV効果逆刻の祝福

下記ローゼフラム/四星の極光のダメージアップを図るアイテム。CC回復量が上昇する副次効果も見逃せません。

EV効果は「時空の逆さ時計」で付与。効果は時空を切り詰めるを対象に付与します。

/ローゼフラム (同一を2つ装備)
種別爆弾
Lv99
消費cc2
対象全体(敵)
属性
効果1肉体疲労の大爆発
効果1説明無属性の小ダメージを与え、物理耐性を低下させる
効果2獄炎の薔薇
効果2説明火属性の特大ダメージを与える。威力はタクティクスレベルが高いほど大きく増加する。
効果3焼き尽くす炎・超
効果3説明非常に高い温度が対象を包む。対象を確立で火傷状態にする。
効果4紅蓮の花冠
効果4説明炎の花びらが燃え上がる。対象の範囲を広げ、火属性ダメージを与える。対象のHPが少ないほど威力が増加する
特性1破壊力上昇++ 50
特性2心の破壊力 99
特性3会心の破壊力 99
EV効果予言の烙印

どういうわけか最上位のグランフラムよりも効果が高いローゼフラム。高難易度においてもメインウェポンとして大活躍。

EV効果は「アポカリプス」で付与。効果は「一ツ環の真実(火属性と風属性のダメージを与える。現在のCCが多いほど威力が増加する)」と「分ツ環の真実(氷属性と雷属性のダメージを与える。現在のCCが多いほど威力が増加する)」

これを2つ。

/N/A
種別爆弾
Lv99
消費cc3
対象全体(敵)
属性火、雷
効果1トゲの大爆発
効果1説明無属性の小ダメージを与え、ブレイク値を増加させる
効果2無限大の大爆発
効果2説明無属性の絶大ダメージを与え、防御力を低下させる
効果3力を失う・超
効果3説明脱力感を与えるトゲが刺さり、攻撃力を低下させる
効果4体制を崩す衝撃・超
効果4説明体制を崩すほどの大きな衝撃を与える。追加でブレイク値を増加させる
特性1エコノミーコア
特性2心の破壊力 99
特性3会心の破壊力 99
EV効果達人の烙印

このアイテムは「四星の極光」に繋ぐためのアイテムです。有り体に言うと、ブレイクさせた状態で四星の極光をぶち当てるために用います。

また、ここはエコノミーコアを利用。これによって戦闘開始と同時にコアドライブが発動できます。

EV効果は「マスタースピリット」で付与。効果は

  • 全能力ダウン・中
  • 呪いを与える・中
  • 火傷を与える・強

です。

タオ

ステータス

ステータス数値
Lv.100
HP1533
攻撃力2970
防御力2309
素早さ3340
装備品質200
器用さ65

装備品

/サイレントリンクスアダンマントスケイルエリキシルリングユニヴァース
種別武器防具アクセサリアクセサリ
HP338397330232
攻撃力843741629453
防御力3161005396295
素早さ692700864780
効果1双剣の極意・超ドラゴンブレス・超一子相伝の知識四霊を操る
効果2立派な切れ味竜鱗の要塞常勝不敗の戦術満ちる霊力
効果3王者の髭防御力+20素早さ+20迅雷の霊力
効果4逆さ時計の発条ダメージ軽減+7%ブレイク強化+7%轟風の霊力
特性1攻速強化++ 99スーパーボディ 99ドッジムーブ 99ドッジムーブ 99
特性2全能力強化 ++ 99全能力強化 ++ 99全能力強化 ++ 99全能力強化 ++ 99
特性3スペシャルアーツ 99ハイパーボディ 99フラッシュムーブフラッシュムーブ
EV効果--叡智の印章達人の印章

武器の効果はそれぞれ以下のとおりです。

  • 双剣の極意・超
    • 状態異常を与える確率が上昇し、攻撃時、低確率で状態異常を低下させる。
  • 立派な切れ味
    • クリティカル時に与えるダメージが増加する
  • 王者の髭
    • 攻撃時、低確率で相手の強化を解除し、マイナス効果の効果時間を延長する
  • 逆さ時計の発条
    • スキルのWTが減少する

コアアイテム(コアドライブ:ホロターゲティング)

/時空の天文時計
種別魔法の道具
Lv1
消費cc2
対象全体(味方)
属性氷、雷
効果1時空を歪める
効果1説明行動順を手前に大きく寄せ、良性状態の効果時間を延長する
効果2未来に干渉する
効果2説明タクティクスレベルが3上昇する。最大を超えて上昇しない
効果3全能力アップ・超
効果3説明攻撃力、防御力、素早さを上昇する
効果4回避率アップ・超
効果4説明回避率を上昇する
特性1永久機関
特性2エコノミーコア
特性3空間を繋ぐ
EV効果逆刻の祝福

前作『ライザのアトリエ』における最強のバフアイテムがもっと強力になって帰ってきました。「タクティクスレベル3上昇」は明らかに常軌を逸しています。そして、高難易度はアイテムの回転率が命なので永久機関とエコノミーコアの2つを重ねて低消費にしました。

EV効果は「時空の逆さ時計」で付与。効果は時空を切り詰めるを対象に付与します。

/エリキシル剤
種別薬品
Lv1
消費cc1
対象全体(味方)
属性氷、風
効果1HP回復・極
効果1説明HPを極めて大きく回復する
効果2復調の薬効
効果2説明HP継続回復状態を付与し、ブレイク値を回復する
効果3平癒の薬効
効果3説明全ての状態異常を治療し、全ての悪性異常を消し去る
効果4起死回生の薬効
効果4説明戦闘不能状態を解除し、HPを大きく回復する
特性1エコノミーコア
特性2空間を繋ぐ
特性3回復力上昇++ 50
EV効果福旨の祝福

EV効果は「クーアミルク」で付与。全てのブレイク値を回復します。数発食らっただけでブレイク状態になる難易度においては、この「屋上屋を架す」処置が必要でした。

/マスタースピリット
種別魔法の道具
Lv40
消費cc1
対象全体(敵)
属性火、氷
効果1研ぎ澄まされた精神
効果1説明対象の攻撃力とクリティカル率を低下させる
効果2全能力ダウン・超
効果2説明攻撃力、防御力、素早さを低下させる
効果3呪いを与える・超
効果3説明確率で呪い状態にする
効果4束縛を与える・強
効果4説明確率で束縛状態にする
特性1クリティカル++ 99
特性2エコノミーコア
特性3永久機関
EV効果達人の烙印

前作最強のデバフアイテム「ヒロイックガイスト」の上位互換。これもエコノミーコアと永久機関の2つで消費CCを1にしています。

EV効果は「マスタースピリット」で付与。効果は

  • 全能力ダウン・中
  • 呪いを与える・中
  • 火傷を与える・強
/闇夜の宝箱 (DLCアイテム)
種別魔法の道具
Lv17
消費cc1
対象全体(敵)
属性氷、風
効果1冥闇の抱擁
効果1説明無属性の大ダメージを与え、高確率で対象を即死させる。
効果2影を縫いとめる・超
効果2説明影が対象にまとわりつく。対象にノックバックを与え、高確率で束縛状態にする
効果3魂を蝕む・超
効果3説明相手の心を直接傷つける。対象の攻撃力を低下させ、高確率で呪い状態にする
効果4浸食する煙
効果4説明煙がさらに広がるようになる。対象の範囲を広げ、追加で防御力を低下させる。
特性1永久機関
特性2エコノミーコア
特性3心の破壊力++ 99
EV効果黒闇の烙印

DLC「戦いの極み」のアイテム。この作品には珍しい即死付与があります。尤も、高難易度では効かないのですが、デバフは折り紙付き。

EV効果は「闇夜の宝箱」そのもので付与。効果は

  • 全能力ダウン・中
  • 呪いを与える・中
  • 束縛を与える・強

となっています。これらは後続の四星の極光で撃ち漏らしたとしても敵の大幅な弱体化が期待されます。

パトリツィア

  • ステータス
ステータス数値
Lv.100
HP1677
攻撃力3223
防御力2282
素早さ3247
装備品質200
器用さ45
  • 装備品
/ユーフォグレイブアダンマントスケイルエリキシルリンググローリーベルト
種別武器防具アクセサリアクセサリ
HP372397330299
攻撃力880741629639
防御力3181005396291
素早さ702700864687
効果1美しい軌跡・超ドラゴンブレス・超一子相伝の知識栄光のロード・超
効果2立派な切れ味竜鱗の要塞常勝不敗の戦術勝者の勝鬨
効果3地脈の恵み・超防御力+20素早さ+20ダメージ軽減+7%
効果4逆さ時計の発条ダメージ軽減+7%ブレイク強化+7%行動時HP回復・大
特性1攻速強化++ 99スーパーボディ 99ドッジムーブ 99ドッジムーブ 99
特性2全能力強化 ++ 99全能力強化 ++ 99全能力強化 ++ 99全能力強化 ++ 99
特性3スペシャルアーツ 99ハイパーボディ 99フラッシュムーブフラッシュムーブ
EV効果--叡智の印章達人の印章

武器の効果はそれぞれ以下のとおりです。

  • 美しい軌跡・超
    • HPが最大の時、攻撃によって与えるダメージが増加する。ブレイク値が最大の時、クリティカル発生時のダメージが増加する
  • 立派な切れ味
    • クリティカル時に与えるダメージが増加する
  • 逆さ時計の発条
    • スキルのWTが減少する
  • 地脈の恵み・超
    • 行動するごとに確率でAPを回復する

コアアイテム(コアドライブ:ホロターゲティング)

/時空の天文時計
種別魔法の道具
Lv1
消費cc2
対象全体(味方)
属性氷、雷
効果1時空を歪める
効果1説明行動順を手前に大きく寄せ、良性状態の効果時間を延長する
効果2未来に干渉する
効果2説明タクティクスレベルが3上昇する。最大を超えて上昇しない
効果3全能力アップ・超
効果3説明攻撃力、防御力、素早さを上昇する
効果4回避率アップ・超
効果4説明回避率を上昇する
特性1永久機関
特性2エコノミーコア
特性3空間を繋ぐ
EV効果逆刻の祝福

タオ/クラウディアと同じものです。

/エリキシル剤
種別薬品
Lv1
消費cc1
対象全体(味方)
属性氷、風
効果1HP回復・極
効果1説明HPを極めて大きく回復する
効果2復調の薬効
効果2説明HP継続回復状態を付与し、ブレイク値を回復する
効果3平癒の薬効
効果3説明全ての状態異常を治療し、全ての悪性異常を消し去る
効果4起死回生の薬効
効果4説明戦闘不能状態を解除し、HPを大きく回復する
特性1エコノミーコア
特性2空間を繋ぐ
特性3回復力上昇++ 50
EV効果福旨の祝福

タオ/クラウディアと同じものです。

/マスタースピリット
種別魔法の道具
Lv40
消費cc1
対象全体(敵)
属性火、氷
効果1研ぎ澄まされた精神
効果1説明対象の攻撃力とクリティカル率を低下させる
効果2全能力ダウン・超
効果2説明攻撃力、防御力、素早さを低下させる
効果3呪いを与える・超
効果3説明確率で呪い状態にする
効果4束縛を与える・強
効果4説明確率で束縛状態にする
特性1クリティカル++ 99
特性2エコノミーコア
特性3永久機関
EV効果達人の烙印

タオと同じものです。

/時空の逆さ時計
種別魔法の道具
Lv42
消費cc3
対象全体(味方)
属性氷、雷
効果1時空の調整
効果1説明タクティクスレベルを1まで低下する。低下した量に応じて、攻撃力、防御力、素早さを上昇する
効果2過去に干渉する
効果2説明APとCCの回復量を上昇する
効果3全能力アップ・超
効果3説明攻撃力、防御力、素早さを上昇する
効果4回避率アップ・超
効果4説明回避率を上昇する
特性1永久機関
特性2エコノミーコア
特性3叡智の結晶
EV効果逆刻の祝福

タクティクスレベルをリセットする代わりに、大きなバフをかけるアイテム。ぶっちゃけ、高難易度/やりこみ向けのアイテムです。

コアドライブを使い切ったとしても、これと時空の天文時計によるバフでスキルチェインを重ねていくのが基本的な戦術となります。

クラウディア

ステータス

ステータス数値
Lv.100
HP1575
攻撃力2899
防御力2324
素早さ3448
装備品質200
器用さ70

装備品

/ハーモニクスノーツアダンマントスケイルエリキシルリングユニヴァース
種別武器防具アクセサリアクセサリ
HP349397330232
攻撃力807741629453
防御力3541005396295
素早さ787700864780
効果1光矢の五線譜・超ドラゴンブレス・超一子相伝の知識四霊を操る
効果2コアバースト竜鱗の要塞常勝不敗の戦術満ちる霊力
効果3地脈の恵み・超防御力+20素早さ+20迅雷の霊力
効果4逆さ時計の発条ダメージ軽減+7%ブレイク強化+7%轟風の霊力
特性1攻速強化++ 99スーパーボディ 99ドッジムーブ 99ドッジムーブ 99
特性2全能力強化 ++ 99全能力強化 ++ 99全能力強化 ++ 99全能力強化 ++ 99
特性3スペシャルアーツ 99ハイパーボディ 99フラッシュムーブフラッシュムーブ
EV効果--叡智の印章達人の印章

武器の効果はそれぞれ以下のとおりです。

  • 光矢の五線譜・超
    • 行動時、APを1回復する。攻撃時、確率で追加魔法ダメージを与える
  • コアバースト
    • 攻撃時、追加で魔法ダメージを与える。所持しているコアチャージの量が多いほど、与えるダメージが増加する
  • 地脈の恵み・超
    • 行動するごとに確率でAPを回復する
  • 逆さ時計の発条
    • スキルのWTが減少する

コアアイテム(コアドライブ:オーロラウェーブ)

/時空の天文時計
種別魔法の道具
Lv1
消費cc2
対象全体(味方)
属性氷、雷
効果1時空を歪める
効果1説明行動順を手前に大きく寄せ、良性状態の効果時間を延長する
効果2未来に干渉する
効果2説明タクティクスレベルが3上昇する。最大を超えて上昇しない
効果3全能力アップ・超
効果3説明攻撃力、防御力、素早さを上昇する
効果4回避率アップ・超
効果4説明回避率を上昇する
特性1永久機関
特性2エコノミーコア
特性3空間を繋ぐ
EV効果逆刻の祝福

タオ/パトリツィアと同じものです。

/エリキシル剤
種別薬品
Lv1
消費cc1
対象全体(味方)
属性氷、風
効果1HP回復・極
効果1説明HPを極めて大きく回復する
効果2復調の薬効
効果2説明HP継続回復状態を付与し、ブレイク値を回復する
効果3平癒の薬効
効果3説明全ての状態異常を治療し、全ての悪性異常を消し去る
効果4起死回生の薬効
効果4説明戦闘不能状態を解除し、HPを大きく回復する
特性1エコノミーコア
特性2空間を繋ぐ
特性3回復力上昇++ 50
EV効果福旨の祝福

タオ/パトリツィアと同じものです。

/時空の逆さ時計
種別魔法の道具
Lv42
消費cc3
対象全体(味方)
属性氷、雷
効果1時空の調整
効果1説明タクティクスレベルを1まで低下する。低下した量に応じて、攻撃力、防御力、素早さを上昇する
効果2過去に干渉する
効果2説明APとCCの回復量を上昇する
効果3全能力アップ・超
効果3説明攻撃力、防御力、素早さを上昇する
効果4回避率アップ・超
効果4説明回避率を上昇する
特性1永久機関
特性2エコノミーコア
特性3叡智の結晶
EV効果逆刻の祝福

パトリツィアと同じものです。

/エルシオンハープ (DLCアイテム)
種別魔法の道具
Lv7
消費cc2
対象全体(味方)
属性雷、風
効果1魂が落ち着く
効果1説明アイテムのダメージとCCの回復量を上昇する
効果2ブレイク値回復・超
効果2説明ブレイク値を回復する
効果3AP回復・大
効果3説明APを大きく回復する
効果4素早さアップ・超
効果4説明素早さを上昇する
特性1永久機関
特性2エコノミーコア
特性3回復力上昇 ++50
EV効果逆刻の祝福

ライザと同じものです。

2024/10/14追記

コアアイテムの一部はヴィアヴェールルフトに差し替えました。

その作り方はこちらです。

Redmineサーバのウイルススキャン。(ClamAVとinotifyによる添付ファイルの自動スキャン)

概要

Redmineの稼働サーバにウィルス対策ソフトClam-AVをインストールし、不審なファイルのアップロードを防ぎます。

動作要件

  • スキャン対象はRedmineの添付ファイル格納ディレクトリです。
    • それ以外にも転用できるようにスクリプトを変数で定義しています。
  • inotifyサービスを利用して、スキャン対象を絞ります。
  • スキャンするタイミングは上記格納ディレクトリにファイルがアップロードされたときです。これによってCPU消費を節約します。
  • ClamAVによって不審なファイルと判断された場合、そのファイルを削除します。その後、詳細はログに出力されます。

動作確認環境

  • Ubuntu 20.04
  • ClamAV 0.103.8

手順

  • サーバのターミナルからコマンドラインで設定を行います。
  • パッケージ管理はaptitudeを利用しています。好みに合わせてaptに置き換えてください。

さっくりとした手順

  1. ClamAVをインストールします。
  2. 最新のウィルス定義ファイルがダウンロードできることを確認します。
  3. ClamAVの動作を確認します。
  4. inotifyサービスをインストールします。
  5. チェックスクリプトを作成します。
  6. スクリプトをサービス化します。
  7. サービスの動作を確認します。

ClamAVの設定と確認

ClamAVのインストール

sudo aptitude update

sudo aptitude install clamav clamav-daemon

ウィルス定義ファイルの更新

sudo freshclam

で定義ファイルを更新しようとしたところ、以下のエラーが出ました。

sudo freshclam

ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).
ERROR: initialize: libfreshclam init failed.
ERROR: Initialization error!

対処を行います。

sudo lsof /var/log/clamav/freshclam.log

COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
freshclam 7001 clamav    3wW  REG  202,1     2161 2319263 /var/log/clamav/freshclam.log
# この時に出てきたPIDを控えておきます。

このプロセスを停止します。

sudo kill -9 7001
# 出てきたPIDを指定します

ログファイルのパーミッション変更

sudo chmod -R 777 /var/log/clamav/

上記を実施後、

sudo freshclam

定義ファイルが更新されることを確認しました。

ウイルス定義ファイル自動更新

sudo systemctl start clamav-freshclam.service

sudo systemctl enable clamav-freshclam.service

systemctl status clamav-freshclam.service
# active (running)を確認します

ClamAVの動作確認

  • バージョン確認
clamscan --version
ClamAV 0.103.8/26829/Thu Mar  2 20:16:49 2023
# 2023/03/03、aptでインストールした際のバージョン
  • eicarテストファイルによる確認
cd ~

wget http://www.eicar.org/download/eicar.com

clamscan eicar.com
  • テスト結果
Win.Test.EICAR_HDB-1 FOUND

----------- SCAN SUMMARY -----------
Known viruses: 8654357
Engine version: 0.103.8
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)

が表示されたので、機能していることを確認です。

rm eicar.com

でテストファイルを削除します。(スキャンしただけなのでファイルの自動削除は行われません)

スクリプト作成

inotifyのインストール

sudo aptitude install inotify-tools

スクリプト生成

  • 以下のスクリプトを教義・信仰に沿ったエディタで作成します。
  • スクリプト名:clamav-inotify.sh
#!/bin/bash

## 変数ここから
# 監視対象のディレクトリを指定してください。
WATCH_DIR="/var/lib/redmine/files"

# スキャン対象の最大サイズを指定してください。
# Redmineのようにアップロード上限をWeb画面から設定できる場合、そのサイズに合わせます。
MAX_FILE_SIZE="10240M"

# スキャンログのパスを定義します。
SCAN_LOG="/var/log/redmine/redmine-scan.log"
## 変数ここまで


# 監視対象のディレクトリ (およびサブディレクトリ) に新しいファイルが作成されたときに、そのファイルをスキャンする処理を行います
inotifywait -m -r -e create --format '%f' "$WATCH_DIR" |
while read FILE
do
    # 新しいファイルがディレクトリでなく、かつ隠しファイルでないことを確認します。
    if [ ! -d "$FILE" ] && [ "$(echo "$FILE" | cut -c1)" != "." ]; then
        # ClamAVを使用して新しいファイルをスキャンします。
        RESULT=$(clamscan --recursive --max-filesize="$MAX_FILE_SIZE" "$WATCH_DIR/$FILE")
        if echo "$RESULT" | grep -q " FOUND"; then
            echo "ウイルスが検出されました: $FILE" >> "$SCAN_LOG"
            rm "$WATCH_DIR/$FILE"
        else
            echo "スキャンが完了しました: $FILE" >> "$SCAN_LOG"
        fi
    fi
done
  • 実行権付与
sudo chmod +x clamav-inotify.sh

スクリプトのサービス化

  • 以下のスクリプトを教義・信仰に沿ったエディタで作成します。
  • 配置ディレクトリ:/etc/systemd/system/
  • サービス名:clamav-inotify.service
  • ファイル内容
[Unit]
Description=ClamAV Inotify Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/bash /home/hoge/clamav-inotify.sh
# 上記のスクリプトをフルパスで指定します
Restart=always
User=root

[Install]
WantedBy=multi-user.target
  • サービスの有効化
sudo systemctl enable clamav-inotify.service

sudo systemctl start clamav-inotify.service

systemctl status clamav-inotify.service
# active (runnning)を確認します

動作確認

テストウィルスを配置→削除確認

cd /var/lib/redmine/files
# スクリプトで指定したスキャン対象ディレクトリに移動します。

sudo wget http://www.eicar.org/download/eicar.com
# eicarテストウィルスをダウンロードします。

ls -l eicar.com
# ファイルがある状態から削除されていることを確認します。

ログ確認

cat /var/log/redmine/redmine-scan.log
# スクリプトで指定したログ

以下のようにログに出れば成功です。

/mnt/wasabi/redmine/files/eicar.com: Win.Test.EICAR_HDB-1 FOUND

----------- SCAN SUMMARY -----------
Known viruses: 8654357
Engine version: 0.103.8
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 34.852 sec (0 m 34 s)
Start Date: 2023:19:03 11:50:39
End Date:   2023:19:03 11:51:14
ウイルスが検出されました: eicar.com

動作確認日

2023/03/03

連携:RedmineのディレクトリとWasabiバケット。

概要

クラウドストレージで作成したバケットは無事にマウントできるようになったので、Redmineの添付ファイルの保存先を切り替えます。

確認環境

  • Ubuntu 20.04
  • s3fsによりWasabiクラウドストレージのバケットがマウントされていること

サックリとした手順

  1. 保存先のディレクトリを作ります。
  2. Remineの添付ファイル一式をバケットにコピーします。
  3. 添付ファイルの保存先をシンボリックリンクに切り替えます。

詳細手順

マウントしたバケットにディレクトリを作成します。

sudo mkdir -p /mnt/wasabi/redmine
# 自分がマウントした環境に合わせます。

sudo chown www-data:www-data /mnt/wasabi/redmine

ls -ld /mnt/wasabi/redmine
# ファイルがあることと所有者がwww-dataであることを確認します。

Remineの添付ファイル一式をコピーします。

sudo -u www-data cp -pir /var/lib/redmine/files /mnt/wasabi/redmine
# Redmineのパスは自分の環境に合わせます。

シンボリックリンクを貼り替えます。

cd /var/lib/redmine
# 自分の環境に合わせます。

sudo mv files files.org
# 一時的に退避します。

sudo ln -s /mnt/wasabi/redmine/files files
# 自分がマウントした環境に合わせます。

sudo chown -h www-data:www-data files

ls -ld /var/lib/redmine/files
# filesの向き先がリンクを張った場所にあることとリンクの所有者がwww-dataであることを確認します

動作を確認します。

  1. Redmineの任意のチケットでファイルを添付します。
  2. 添付後、上記、マウントしたバケットの内容を確認してファイルがあることを確認します。

これで、AWSのRedmineでもファイルを大量に添付できるようになります。

fail2banの再設定。

概要

不正アクセスからサーバを保護するfail2ban。様々なルールが存在するため、チューニングの失敗によっては機能不全に陥ります。

そんなこんなで、ちょっとハマった出来事を記します。

確認実施環境

Ubuntu 20.04

fail2banはアンインストールできない場合があります。

apt-get --purge autoremove fail2ban

をやってもアンインストールできませんでした。

対処: dpkgのinfoファイル削除

sudo su -
# この作業は全て管理者権限で行った方がいいです

cd /var/lib/dpkg/info/

ls -l fail*
rm fail*
# fail2banのみのパッケージがあることを確認して消去します

apt-get --purge autoremove fail2ban
# この段階でようやくアンインストールできました

cd /etc/

rm -rf fail2ban
# fail2banの設定を変更します

と、dpkgのinfoファイルを削除して

ufwとうまく連携できません。

「なぜチューニングに失敗したのか」の理由です。ネットにあるfail2banの記事は大概がiptablesとの連携を前提としているため、Ubuntu系での標準ファイアウォールであるufwとうまく連携できませんでした。

なので、

  • 記事を鵜呑みにして設定するとエラーが発生してfail2banの起動に失敗する。
  • 再設定のためにアンインストールしようとすると上記問題が発生する

という経緯があります。

対処:ufwに即した設定変更

参考記事:
https://blog.fernvenue.com/archives/ufw-with-fail2ban/

前提:

まっさらな状態で(上記手段でアンインストールした上で)

sudo aptitude install fail2ban

を実行した状態とします。

jail.localを編集します。

協議・信仰に沿ったエディタで以下のファイルを編集(作成)します。

  • ファイル名 /etc/fail2ban/jail.local

○内容

[ufw]
enabled=true
filter=ufw.aggressive
action=iptables-allports
logpath=/var/log/ufw.log
maxretry=1
bantime=-1
ignoreip = 127.0.0.0/8 ::1
# ignoreipは任意の(自分のアクセス元)を指定ください

[sshd]
enabled=true
filter=sshd
mode=normal
port=22
protocol=tcp
logpath=/var/log/auth.log
maxretry=3
bantime=-1
ignoreip = 127.0.0.0/8 ::1
# ignoreipは任意の(自分のアクセス元)を指定ください
  • ファイル名 /etc/fail2ban/filter.d/ufw.aggressive.conf

○内容

[Definition]
failregex = [UFW BLOCK].+SRC=<HOST> DST
ignoreregex =

設定反映

systemctl enable fail2ban
systemctl start fail2ban
systemctl statsu fail2ban

これで、不審なアクセスは次回以降は有無を言わせずブロックする設定となります。

検証:AWS LightsailのUbuntuにWasabiクラウドストレージをマウント。

概要

(ほぼ)固定費でそれなりのスペックのサーバを運用できるAWS Lightsail。ストレージを増やすには

  • スペックの増強を図る
  • AWS S3などのクラウドストレージを増強する

といった策が必要です。ですが、もっと低価格で利用できるサービスはないものかと探していたところにみつけました。

クラウドストレージ:Wasabi

https://wasabi.com/ja

なかなか挑戦的な言葉が書かれています。

  1. 1TBでも6$程度
  2. データ転送料無料

は魅力的。(逆に言えば、たとえ1バイトのファイルしか保存しなくても最低1TB分は請求されます)

そして、S3と同じプロトコルが使えるとのこと。

無料トライアルもあるので、Linuxサーバにマウントできるかを検証してみます。

試した手順

環境

AWS上で動かしているUbuntu 20.04で利用しています。

さっくりとした流れ

  1. Wasabiのアカウントを作成します
  2. バケットを作成します
  3. アクセスキーを作成します
  4. Linuxサーバで必要なパッケージをインストールします
  5. アクセスキーを保存します
  6. マウントを確認します
  7. fstabを修正します

詳細の手順

Wasabiアカウント作成

上記URLから自身のアカウントを作成。確認メールからパスワードを設定します。

バケット作成

ログイン後、「バケット」をクリック。

任意のバケット名を入力し、地域を選択します。(ここでは大阪を選択)

バージョン管理などは全て無効の状態で「次」をクリック。

確認画面後に「バケットを作成」で作成できました。

アクセスキーの生成

アクセスキーをクリックし「新しいアクセスキーを作成する」からアカウントキーと秘密鍵を控えます。(この情報は全てのストレージへのアクセスに必要となるため、取り扱いは厳重にしてください)

Linuxサーバ上での動作

スナップショット取得

念のため、作業直前にAWSコンソールからスナップショットを作成します。

必要パッケージインストールします

sudo aptitude update
sudo aptitude install s3fs

パスワードファイルの作成

信仰・協議に従ってエディタを起動します。次のファイルを作成します。

.passwd-s3fs
# アクセスキー:秘密鍵 の順番で貼り付け

chmod 600 .passwd-s3fs

ls - ${HOME}/.passwd-s3fs
# ファイルがあることを確認します

マウントポイントの指定

sudo mkdir /mnt/wasabi
# /mntファイルに任意の名前を作成ください

udo s3fs 【wasabiで作成したバケット名】 /mnt/wasabi -o passwd_file/【上記作成したパスワードファイルのパス】/.passwd-s3fs -o url=https://【バケットのリージョン名】.wasabisys.com -o use_path_request_style -o endpoint=【バケットのリージョン名】 -o allow_other

これでマウントしたことを確認しました。

WasabiのWebインタフェースから任意のファイルをアップロード。

cd /mnt/wasabi 
# 作成したマウントポイントに移動します

ここから、アップロードしたファイルが確認できれば設定完了です。

fstabの設定

システムを再起動してもマウントできるようにfstabの設定を追記します。

sudo cp -pi /etc/fstab /path/to/directory/fstab.date +%Y%m%d
diff -u /etc/fstab /path/to/directory/fstab.date +%Y%m%d
# 差分がないことでバックアップを確認します

バックアップ後、協議・信仰に従ったエディタで末尾に追記します。

s3fs#【wasabiバケット名】 /mnt/wasabi fuse _netdev,allow_other,passwd_file=/【パスワードファイルのパス】/.passwd-s3fs,url=https://s3.バケットのリージョン名wasabisys.com,use_path_request_style,endpoint=バケットのリージョン名 0 0

マウント確認

sudo mount -a
# エラーが出ないことを確認します

df -h
# マウントしたバケットが見えているかを確認します

今後の検証

トライアルの間、

  • マウントしたディレクトリに保存されたファイルをWebに公開できるか
  • 遜色なく利用できるか
  • 転送速度などに問題ないか

を確認後、本格的に使っていこうと思います。

スクリプト:連携。(パスワード生成を呼び出したSQLバックアップ)

概要

ChatGPTに助けられて作成した

  • SQLのバックアップを行うシェルスクリプト
  • より安全なパスワード生成を行えるRubyスクリプト

この2つを連携させてみました。

スクリプトのフロー図

以下のようにして動きます。

sequenceDiagram participant b as バックアップ participant p as パスワード生成 note over b: 処理実行 note over b: 作業ディレクトリ<br>作成 note over b: MySQL dump b->>p: スクリプト呼び出し note over p: 処理実行 note over p: PW発行 note over p: PWファイル作成 p-->>b: スクリプト実行完了 note over b,p: PWファイルを元に暗号化 note over b: 作業ディレクトリ<br>削除 note over b: 古いバックアップ削除 note over b,p: 古いPWファイルを削除 note over b: 処理完了

スクリプト内容

スクリプト1: DBバックアップ

  • スクリプトタイプ:シェルスクリプト
#!/bin/bash

## 変数ここから ##
# SQLをバックアップするディレクトリ(保管先)を指定します。
backup_dir="/home/backup/mysql"
# 保持するバックアップの世代を日数で指定します。
keep_days=7
# ファイルに付与する日付/作業ディレクトリ名/バックアップファイル名を指定します。
current_date=$(date +%Y%m%d)
backup_name="redmine_mysql_${current_date}"
zip_file="redmine_mysql.${current_date}.zip"
# アカウントファイルを指定します。
credentials_file="$HOME/mysql/account.txt"
# パスワードを生成するスクリプトの格納場所を指定します。
password_generate="$HOME/scripts/ruby/password_generate_for_redmine.rb"
# 上記スクリプトによって生成されたパスワードファイルの格納場所を指定します。
password_file="$HOME/restore_password/mysql-restore.${current_date}.txt"
# バックアップ時に指定するオプションを指定します。
options="--defaults-extra-file=$credentials_file --no-tablespaces --single-transaction"
## 変数ここまで ##

## 処理ここから ##

# 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 redmine > "${backup_dir}/${backup_name}/${backup_name}.sql"

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

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

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

# 7. 保持期間より古いバックアップファイルを削除します。
find "$backup_dir" -name "redmine_mysql.*.zip" ! -type f -newermt "${keep_days} days ago" -delete
find "$password_file" -name "*.txt" -type f -mtime +$keep_days -delete

スクリプト2:パスワード生成

  • スクリプトタイプ: Ruby
#このRubyスクリプトは、SecureRandomモジュールを使用してランダムなパスワードを生成するためのスクリプトです。
#パスワードの生成に関する様々な設定を変数で行うことができます。
#例えば、パスワードの長さ、数字やアルファベット、大文字や記号を使用するかどうかなどを指定することができます。
#スクリプトは、出力先がファイルか標準出力かを選択できます。
#ファイルに出力する場合は出力先のディレクトリやファイル名を指定することができます。

# モジュールを呼び出します 
require 'securerandom'
require 'fileutils'
require 'date'

### 変数はここからです
## 出力するパスワードの数(行数)を数字で指定します
num_passwords = 1
## 出力先を選択します
# ファイルに出力する場合は 1、標準出力に出力する場合は 0 に設定します
output_to_file = 1
# 出力先のディレクトリを指定します
output_directory = '/home/hoge/restore_password' 
# 出力ファイル名を名前+yyyymmdd形式.txtで指定します
# 最初の''部分の名前を任意の名前に入力ください
output_filename =  'mysql-restore.' + Time.now.strftime("%Y%m%d") + '.txt'
## パスワードの強度を指定します
# パスワード桁数を数字で指定します
password_length = 12
# 数字を用いる場合は1を、用いない場合は0を指定します
use_numbers = 1
# アルファベット小文字を用いる場合は1を、用いない場合は0を指定します
use_alphabet = 1
# アルファベット大文字を用いる場合は1を、用いない場合は0を指定します
use_uppercase = 1
# 記号を用いる場合は1を、用いない場合は0を指定します
use_symbols = 1
## パスワード生成用の文字種を定義します
# 必要に応じて使わない文字を削除することが可能です(lと|, 0とOなど)
characters = ''
characters += '0123456789' if use_numbers == 1
characters += 'abcdefghijklmnopqrstuvwxyz' if use_alphabet == 1
characters += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' if use_uppercase == 1
characters += '!#$%&()*+,-./:;<=>?@[]^_`{|}~' if use_symbols == 1
### 変数はここまでです

# パスワード生成関数を定義します
def generate_password(length, characters)
  SecureRandom.random_bytes(length).unpack('C*').map do |byte|
    characters[byte % characters.length]
  end.join
end

## パスワードファイルを出力する場合(変数 output_to_fileを1にしたとき)の処理です
#出力先のパスを作成します
if output_to_file == 1
  output_path = File.join(output_directory, output_filename)
# 出力先のディレクトリが存在しない場合は作成します
  FileUtils.mkdir_p(output_directory)
# パスワードを出力します
  File.open(output_path, 'w') do |file|
    num_passwords.times do
      password = generate_password(password_length, characters)
      file.puts password
    end
  end
else

## 標準出力に出すだけの場合(変数 output_to_fileを0にしたとき)の処理です
# パスワードを標準出力に出力します
  num_passwords.times do
    password = generate_password(password_length, characters)
    puts password
  end
end

上記、Rubyスクリプトを「変数の定義でファイル出力と標準出力」の2つが選べるようにしたのは幸いでした。(パスワード1つのみを使うので行数も1にしています)

Redmineプラグイン導入時に起因するエラーの発生原因と対処方法について

こちらの記事を更に詳細にまとめたものとなります。

概要

様々なプラグインにより機能を追加できるのがRedmineの魅力。
しかしながら、そのプラグイン導入の過程によって予期せぬエラーが起きます。

本記事では、エラーの内容と対処、並びにこれが起きないための運用について筆者の経験を元に書き起こしています。

想定としている読者

  • LinuxでRedmineを動かしている
  • その管理をしている / 管理を任されている
  • プラグインインストール時にエラーが発生している

エラーが起きた環境

種別環境1環境2環境3
OSUbuntu 20.04CentOS 7Ubuntu 22.04
Redmine4.23.35.0
DBMySQL 8.3.xMariaDB 5.5.xMySQL 8.3.x
Ruby2.72.33.1

具体的に何が起こったか?

Case 1. エラー画面が表示され、どこにもアクセスできない。

We're sorry, buty something went wrong.
We've been notified about this issue and we'll take a look at it shortly.

この画面は「やってしまったか」感がとても強いです。

Case 1.の原因

経験上、以下の理由で発生しました。

原因1-1:DBマイグレーションをしていない

プラグインインストール時、DBのマイグレーションを行っていない手順ミスはありがちです。

原因1-1の対処:DBマイグレーションを行う。

こちらはrailsとapacheの手順です。自身の環境に合わせて実施してください。

cd /home/www-data/redmine && pwd
# Redmineのルートディレクトリに移動します。自分の環境に合わせます。

sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production
# RedmineのルートディレクトリでDBマイグレーションを実施します

sudo systemctrl restart apache2.service
# Webサービスを再起動します。

原因1-2: プラグイン名とレポジトリが異なる。(バージョン名が付与されている)

view_customizeのように、プラグイン名とレポジトリ名が異なるパターンはあります。

例:
https://github.com/onozaty/redmine-view-customize
と、レポジトリ名はredmine-view-customizeですが、実際のプラグイン名は
view_customizeです。

また、zipを直接入手した場合は、解凍したディレクトリにバージョン名が付与されます。

原因1-2の対処: ディレクトリをリネーム

以下は一例です。

cd /home/www-data/redmine/plugins && pwd
# Redmineのルートディレクトリに移動します。
sudo mv redmine-view-customize view_customize

sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production
# RedmineのルートディレクトリでDBマイグレーションを実施します

sudo systemctrl restart apache2.service
# Webサービスを再起動します。

原因1-3: プラグインとRedmineのバージョンが合ってない。

例として:
https://www.redmine.org/plugins/redmine_custom_workflows

  • Compatible with Redmine 5.0.x, 4.2.x, 4.1.x.

と書かれているように、古いRedmineのバージョンに合ってないプラグインをインストールしたときに起こりがちです。

また、逆に、プラグインが新しいRedmineに対応していない時にも発生します。

原因1-4: 導入済みのプラグインとコンフリクトを起こしている。

ある種、オープンソースの宿命と言えます。
有志/企業が機能を追加しているので、他のプラグインと同じライブラリを用いていたりDBのテーブルが重複するなどで発生します。

以下のように、メンテナが相性が悪いプラグインを認識している場合はそれに注意すればいいのですが、多数あるプラグイン同士の相性をチェックするのは極めて難しい問題です。

https://github.com/ncoders/redmine_local_avatars

As reported in issue #12, the plugin "mega_calendar" ist not compatible with this plugin due to an issue with the provided users_controller_path.rb file.

原因1-3 / 原因1-4の対処: プラグインのアンインストール

こちらも、rails / apacheでの実施です。自分の環境に合わせて実施してください。

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

sudo -u www-data bundle exec rake redmine:plugins:migrate NAME=プラグイン名 VERSION=0 RAILS_ENV=production
# プラグイン名は /plugin/配下にあるディレクトリ名です

cd plugins && pwd
# プラグインが配置されているディレクトリに移動します。

sudo rm -rf プラグイン名

ls -ld /home/www-data/redmine/plugins/プラグイン名
# 削除したディレクトリが存在しないことを確認します

sudo systemctl restart apache2.service

上記、プラグインに起因したエラーの大半はDBの再マイグレーションやアンインストールによって解消しますが、これだけで収まらないのがRedmineプラグイン追加/アップデートの恐怖です。

Case 2. 一部の機能が使えない (Internal Error)

Case1.で発生したエラー画面の対処としてDB再マイグレーションやアンインストールを行った後、この事象が起きました。

  1. ログインはできる
  2. あるプラグインにアクセスできる

けれども、

  1. 管理画面に遷移する
  2. チケット一覧を見ようとする
  3. 他のプラグインの画面を見ようとする

等で、

Internal Error
An error occured on the page you were trying to access.
If you continue to experience problems please contact your Redmine administrator for assistance.
If you are the Redmine administrator, check your log files for details about the error.

の無慈悲なメッセージが出てきます。特にRedmineをファイルサーバ化するdmsfプラグイン周りで発生しました。

こうなると、

  • DBの再マイグレーション
  • プラグインアインインストール

でも、今の筆者の知見では修復できませんでした。その場合の対処方法は以下の通りです。

Case 2の対処方法: バックアップしたDBからの切り戻し

この作業は、「エラーを起こす前のDBバックアップデータを持っていないと元に戻すことはできません」

この前提条件がない場合は他の有識者に頼ってください。(少なくとも筆者は持ち合わせていません)

また、以下の環境で復旧を確認しています。

  • MySQL 8.0.3系
  • Redmine 5.0
  • Redmine 4.2

手順

  • プラグインアンインストール(実施済みの方は不要です)
cd /home/www-data/redmine && pwd
# 自分の環境に合わせます。

sudo -u www-data bundle exec rake redmine:plugins:migrate NAME=プラグイン名 VERSION=0 RAILS_ENV=production
# プラグイン名は /plugin/配下にあるディレクトリ名です

cd plugins && pwd
# プラグインが配置されているディレクトリに移動します。

sudo rm -rf プラグイン名

ls -ld /home/www-data/redmine/plugins/プラグイン名
# 削除したディレクトリが存在しないことを確認します

sudo systemctl restart apache2.service
  • バックアップしたDBのレストア
cd /hoge && pwd
# DBデータをバックアップしたディレクトリに移動します。

mysql -h DBホスト -u RedmineのDBユーザ -p RedmineのDB名 < RedmineのDBバックアップ
# 例 mysql -h localhost -u redmine -p redmine < redmine_backup.$(date +%Y%m%d).sql
# この処理で聞かれるパスワードはredmineインストール時に設定したDBユーザのものです

sudo systemctl restart apache2.service

この後、元に戻っていれば作業は完了です。

こうならないために

日々のバックアップを取る

これは必須です。最低限、データベースの定期的なバックアップを取り、障害に備えましょう。

参照(『こうなってしまったため』書き起こしました:)

また、作業前に

cd /hoge && pwd
# 任意のバックアップディレクトリに移動します

mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql
# それぞれ -h ホスト名 -u redmine -p ユーザ オプション db名です。
# パスワードはredmineインストール時に設定したDBユーザのものです

等の、DBバックアップも必要です。

システムごとバックアップを取る

仮想サーバで動かしている、AWSのようなクラウドサービスを利用している場合はスナップショットを取得し、OSごとバックアップするのが後腐れありません。

ChatGPTによるRubyスクリプト。(パスワード生成スクリプト)

ChatGPTを利用するようになってから、「こういう処理ができたら仕事の処理が楽になるのに」が現実的になりました。

概要

割と設定する機会があるパスワード。

  • キチッとランダムに
  • 桁数や出力数が指定可能で
  • ファイルに出力する必要があるか
  • または標準出力に表示させればいいのか

を設定するRubyスクリプトはできないものかとChatGPTにお伺い。幾度かの対話を繰り返し、ようやく想定通りの動きをするスクリプトができました。

openssl rand と異なり、

  • 大文字/小文字の利用
  • 数字や記号の混在

を細かく設定できるのがポイントです。

生成・編集したスクリプト

  • スクリプト名:password_generate.rb

前提

以下の環境で動作を確認しました。

  • Ubuntu 20.04 LTS
  • CentOS 7
  • Ruby 2.4 / 2.7.0

スクリプト内容

  • password_generate.rb
#このRubyスクリプトは、SecureRandomモジュールを使用してランダムなパスワードを生成するためのスクリプトです。
#パスワードの生成に関する様々な設定を変数で行うことができます。
#例えば、パスワードの長さ、数字やアルファベット、大文字や記号を使用するかどうかなどを指定することができます。
#スクリプトは、出力先がファイルか標準出力かを選択できます。
#ファイルに出力する場合は出力先のディレクトリやファイル名を指定することができます。

# モジュールを呼び出します 
require 'securerandom'
require 'fileutils'
require 'date'

### 変数はここからです
## 出力するパスワードの数(行数)を数字で指定します
num_passwords = 12
## 出力先を選択します
# ファイルに出力する場合は 1、標準出力に出力する場合は 0 に設定します
output_to_file = 1
# 出力先のディレクトリを指定します
output_directory = '/home/hoge/restore_password' 
# 出力ファイル名を名前+yyyymmdd形式.txtで指定します
# 最初の''部分の名前を任意の名前に入力ください
output_filename =  'mysql-restore.' + Time.now.strftime("%Y%m%d") + '.txt'
## パスワードの強度を指定します
# パスワード桁数を数字で指定します
password_length = 10
# 数字を用いる場合は1を、用いない場合は0を指定します
use_numbers = 1
# アルファベット小文字を用いる場合は1を、用いない場合は0を指定します
use_alphabet = 1
# アルファベット大文字を用いる場合は1を、用いない場合は0を指定します
use_uppercase = 1
# 記号を用いる場合は1を、用いない場合は0を指定します
use_symbols = 1
## パスワード生成用の文字種を定義します
# 必要に応じて使わない文字を削除することが可能です(lと|, 0とOなど)
characters = ''
characters += '0123456789' if use_numbers == 1
characters += 'abcdefghijklmnopqrstuvwxyz' if use_alphabet == 1
characters += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' if use_uppercase == 1
characters += '!#$%&()*+,-./:;<=>?@[]^_`{|}~' if use_symbols == 1
### 変数はここまでです

# パスワード生成関数を定義します
def generate_password(length, characters)
  SecureRandom.random_bytes(length).unpack('C*').map do |byte|
    characters[byte % characters.length]
  end.join
end

## パスワードファイルを出力する場合(変数 output_to_fileを1にしたとき)の処理です
#出力先のパスを作成します
if output_to_file == 1
  output_path = File.join(output_directory, output_filename)
# 出力先のディレクトリが存在しない場合は作成します
  FileUtils.mkdir_p(output_directory)
# パスワードを出力します
  File.open(output_path, 'w') do |file|
    num_passwords.times do
      password = generate_password(password_length, characters)
      file.puts password
    end
  end
else

## 標準出力に出すだけの場合(変数 output_to_fileを0にしたとき)の処理です
# パスワードを標準出力に出力します
  num_passwords.times do
    password = generate_password(password_length, characters)
    puts password
  end
end

使い方

  1. 変数を環境に合わせて定義します。
  2. ruby password_genarate.rbを実行します。
  3. 定義したとおりパスワードファイルが出力されていたり、画面に表示されれば成功です。

今後の展望

  • 他のスクリプトで呼び出す(以前に紹介したMySQLバックアップ時にパスワードをかけるなど
  • 対話式で実行

など、使い勝手に合わせて修正していきたいです。

お茶道具、刷新。(割れないティーポット感想)

従来の環境を変えうる力がありました。

やってみたかったこと

業務中に「ティーポットを使った本格的なお茶」を飲みたいという希望は漠然と抱えていたものの、次の問題点がありました。

やってみたかったことの問題点

「何かがあって壊したくない」に尽きます。

陶器やガラス製ではお茶を入れるときに人や物にぶつかって割れたときの被害が甚大。金属の場合は錆や変形などの恐れがあります。この解決策が最近見つかったという感じです。

問題点に対する解決策

こちらの「割れない」ティーポット。強化プラスチックでできているため、給湯室などで衝撃があっても割れる心配は無用です。また、細かいステンレスメッシュはお茶袋を使うことなくお茶を入れることができるだろうという判断です。

使ってみての感想

家での使い勝手が上々だったので職場でも使いました。

耐衝撃性の安心感

これは予想通りです。紹介動画でもあるように、この「割れない」と謳われているとおりの頑丈さによる安心感。
破片が飛散することによる被害を減らす(というかなくす)ことができました。

保温性とレンジによる再加熱

これは予想外のことでした。思った以上に入れたお茶の温度を保ってくれます。また、作業や打ち合わせで長時間席を離れたとしても、「茶こしを外してティーポットごとレンジにかける」という力業が可能。これによって冷めたお茶の温め直しが気軽にできるのは思わぬ収穫でした。

注意した方がいいこと

細かすぎる茶葉

ステンレスの茶こしは小さめの茶葉でも受け止めてくれましたが、例外がありました。

  • CTCの茶葉
  • ルイボスティー

です。特に後者はたわしで数回こする必要があったので、こればかりはお茶パックに詰める運用が出てきます。

注ぎ口の変色

茶渋が溜まるところの宿命と言えそうです。洗いにくいので漂白剤や重曹による定期クリーニングが必要だと感じました。

総じて

  • 比較的安価であり
  • 大量のお茶を作ることができて
  • 軽く
  • 壊れず
  • 保温性が高い

と、オフィスワークでの喫茶の条件を満たす品でした。

Page 34 of 85

Powered by WordPress & Theme by Anders Norén