月: 2024年5月 Page 3 of 4

サーバにアクセスするIPアドレスの詳細を確認するシェルスクリプト。

Copilotを利用して、以下のスクリプトを抽出です。

  1. netstat -tan |grep ポート番号 を実行
  2. ポート番号は変数で指定可能
  3. IPアドレス一覧と件数を表示
  4. 詳細を表示しますか? → yの場合、IPアドレスが割り当てられている国やホストをIPアドレスごとに表示する
  5. 自分がアクセスしていることを考慮して、表示しないIPアドレスは変数で定義できるものとする
#!/bin/bash

# 定義された除外するIPアドレス(スペースで区切って指定可能)
EXCLUDE_IP="IPアドレスを入力"

# 使用するポート番号(スペースで区切って指定可能)
PORT="80 443"

# netstatを使用して指定されたポートに関連するIPアドレスを抽出
IP_LIST=$(netstat -tan | grep ":$PORT" | awk '{print $5}' | cut -d':' -f1 | grep -vE "($EXCLUDE_IP)" | sort | uniq)

# IPアドレスの件数を表示
echo "IPアドレス一覧:"
echo "$IP_LIST"
echo "件数: $(echo "$IP_LIST" | wc -l)"

# ユーザーに詳細表示を尋ねる
read -p "詳細を表示しますか? (y/n): " DETAIL

if [ "$DETAIL" = "y" ]; then
for IP in $IP_LIST; do
# whoisコマンドを使用してIPアドレスの詳細を取得
echo "IPアドレス: $IP の詳細:"
whois $IP | grep -E 'Country|OrgName' || echo "情報が見つかりませんでした。"
echo "-----"
done
else
echo "詳細表示はスキップされました。"
fi

前提としてwhoisコマンドがインストールされていることが条件。

これによって、

  • どこからアクセスしてくるのか
  • ホストの詳細はあるのか

の確認が可能です。

弁当の振り返り。

この弁当箱に変えてから、
  • 何を詰めたのか
  • 味はどうだったのか
  • 反省の余地はあるか

などをメモするようにしました。

ダイソーで売られていた写真ポケット付きのノートを用いています。

弁当の写真一覧と所感を簡単に書いただけですが、

「この日、何を食べたか」という記録は記憶のトリガーとして非常に有用。

レシピに困ったときにも使えるので、可能な限り続けてみて、フィードバックを取りたいと思います。

growi v7.0.xにアップデート後、画像アイコンが表示されない問題に対処。 

事象について

https://barrel.reisalin.com/books/growi/page/growi

この通りにv6.3.3→v7.0.xにアップグレードしたところ:

このように、画像アイコンが上手く表示されない事象が発生。

このエラーに対処します。

前提

上記の手順通り、growiv7.0.3にアップデートした状況です。

環境

  • Ubuntu 22.04
  • v6.3.3→v7.02.にアップデート
  • Apacheのリバースプロキシ

対処した手順

参考: GROWI 7.0.2 をインターネットに繋がらないオンプレミス環境に構築する際に苦労した件

growiサービスを停止します

  • growiのステータス確認(停止前)
systemctl status growi.service

※ サービススクリプト名は自分の環境に合わせます。
※ active(running)を確認します

  • growiのサービス停止
sudo systemctl stop growi.service
  • growiのステータス確認(停止後)
systemctl status growi.service

inactive (dead)を確認します

追加パッケージをインストールします

sudo aptitude install git-lfs

このパッケージが必要でした。

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

cd /opt/growi && pwd

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

lfsをpullします。

sudo git lfs pull

growiサービスを起動します。

  • 再開前のステータス確認
systemctl status growi.service

inactive (dead)を確認します

  • サービス再起動
sudo systemctl start growi.service
  • 再開後のステータス確認
systemctl status growi.service
サービススクリプトを[growi]にしている場合

active (running)を確認します

事象の解消確認

上記対処を行ったgrowiにブラウザでアクセスし、

アイコンが表示されれば対処完了です。 

2024年ゴールデンウィークのボドゲ会。

今年も恒例のボードゲーム会を行いました。

ドロッピング・ドロップスという新作や

和訳されていない古典的なゲーム

ここぞという時に回す作品などで楽しめました。

この中で特に気に入ったのは『ドラフトサウルス』。親番のみ好きなところに置けて、他はダイス通りというひねりの利いたルールが特徴デキでした。

その他のゲームで遊び、楽しい1日でした。

傘と鞄。

ハリー・ポッタースタジオツアーの興奮冷めやらず。

「余韻」を楽しもうと洋書コーナーに赴き、見つけました。

見た目はリュックであるものの

「SLYTHERIN」の文字。

内部はネクタイをイメージしています。

この、スタジオツアーで購入した傘と組み合わせ、出かける際のテンションが上がりました。

ワンドと文具。

ハリー・ポッター スタジオツアーでの収穫は、山のようでした。

その中でも際立っているのがこちら。

ワンド

一番人気のアイテム、ワンド。

作中のキャラクター、杖職人オリバンダー翁が「杖が人を選ぶ」の言葉の通り、手に取ってしっくりくるものをチョイス。

一番自分の手に馴染んだのはスタジオツアー限定の「スリザリンのロケット」を模したワンドでした。

文具

文具系は、いくらあっても困らないマスキングテープと

スリザリンのボールペン。普段は万年筆を使うとは言え、使う機会はあります。

二度目のスタジオツアー。

再び、『ハリー・ポッター スタジオツアー』へと足を運びました。

ここを訪れてから原作の再履修を行っただけに、「答え合わせ」という気分です。

大講堂をイメージしたレストランや内部のセットは「このシーンに出て来たものか」と脳内での検証を一つ一つ行っていきました。

シリーズ全体で一番刺さったキャラクターであるギルデロイ・ロックハート先生(?)のコーナーが一区画だけだったのは残念。

『不死鳥の騎士団』でアンブリッジが出した教育令など、隅々まで映画の世界でした。

プリベッド通りのダーズリー家は家そのものが建てられているという念の入れようです。

  • 『賢者の石』で入学許可証が大量に送られた
  • 『アズカバンの囚人』でのワンシーン

なども再現。

非常に有意義で楽しい時間でした。

Redmine5.1に全文検索プラグインをインストール

Redmine 4.2では断念しましたが、5.1では有用なプラグインとなるので、こちらの手順化です。

概要

Redmineの検索機能を強化するプラグインを導入し、検索効率を上げます。

プラグイン名

動作を確認した環境

  • Redmine 5.1
  • mysql 8.0.3系
  • Ubuntu 22.04

前提

  • 筆者が用いているRedmineのDBはMySQLを用いているので、その環境での手順です。

導入時

  • パッケージ追加: 要
  • Gem追加:要
  • DBマイグレーション:要
  • 設定後のDBマイグレーション: 要

さっくりとした手順

  1. レポジトリ及び追加パッケージのインストール
  2. gitでレポジトリをダウンロード
  3. 新規ジェムをインストール
  4. DBマイグレーション
  5. Webサービス再起動
  6. Redmine管理画面での設定変更
  7. DB再マイグレーション(記事のインデックス化)
  8. 設定確認

レポジトリをインストールします。

sudo aptitude install-V software-properties-common lsb-release
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu $(lsb_release --short --codename)-security main restricted"
sudo add-apt-repository ppa:groonga/ppa

mroongaパッケージをインストールします。

  • レポジトリ追加後のアップデート
sudo aptitude update
  • パッケージのインストール
sudo aptitude install -V mysql-server-mroonga

MySQLの再起動を行います。

  • MySQL再起動
sudo systemctl restart mysql.service 
  • MySQL再起動確認
sudo systemctl status mysql.service 

全文検索プラグインインストール

  • Redmineのプラグインディレクトリに移動
cd /home/www-data/redmine/plugins && pwd

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

  • プラグインを配置
sudo -u www-data git clone  https://github.com/clear-code/redmine_full_text_search
  • プラグイン配置確認
ls -ld redmine_full_text_search

ディレクトリがあることを確認します。

  • Redmineのルートディレクトリに移動
cd /home/www-data/redmine && pwd

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

  • Bundle
sudo -u www-data bundle install
  • DBのマイグレーション
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production
  • Apache再起動
sudo systemctl restart apache2

Redmine管理画面での設定変更

  1. Redmineに管理者アカウントでログインします。
  2. 管理>プラグインからFull Text Search pluginの設定をクリックします。
  3. スコアを表示と類似チケットを表示にチェックを入れて保存します。

既存文書のインデックス化

プラグインのGithubで以下の通り書かれているので、

You need to create index for existing data. You need to run full_text_search:synchronize task until no more synchronize target data.

これに対応します。

再びサーバでのコマンド操作です。

  • Redmineのルートディレクトリに移動
cd /home/www-data/redmine && pwd

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

  • インデックス化
sudo -u www-data RAILS_ENV=production bin/rails full_text_search:synchronize

容量によっては時間がかかります。

インデックス後、ブラウザでRedmineにアクセスし、検索できることを確認します。

備考

上記インデックス作成は既存データに対して用いるものであり、本プラグイン導入後は自動的に同期してくれるようです。

NextcloudのExternal StorageサービスでのArray to string conversionエラーに対処。

エラー概要

Nextcloud 28.x以降にバージョンアップしてから、ログで以下が大量に出力され続けていました。

Array to string conversion at /var/www/html/nextcloud/lib/private/Files/Cache/Scanner.php#224

こちらの対処を行います。

エラーが出る要件

  1. Nextcloud 28.x以降を利用している。
  2. External Storageプラグインを利用している。
  3. このプラグインで、S3(乃至はS3互換のオンラインストレージ)をマウントしている。
  4. マウントしたストレージにファイルやフォルダを保存した。

詳細:Nextcloud Hub 8, copying files to an External Storage configured as primary storage isn't reliable

環境

  • Ubuntu 20.04
  • Nextcloud 29.0.0
  • PHP 8.1
  • Apache 2.4
  • オンラインストレージサービスとしてwasabiを利用

解決策

上記issueに

Pretty sure this would be fixed by #43794. At least in my limited testing using the merge request as a patch: https://patch-diff.githubusercontent.com/raw/nextcloud/server/pull/43794.diff

とあったので、この通りに実施します。

さっくりとした手順

  1. rootに昇格します。
  2. パッチファイルを入手します。
  3. ファイルを適用します。
  4. Apacheを再起動します。

root昇格

sudo su -

Nextcloudはwww-dataユーザーのみアクセス可能と、厳しめのアクセス権が設定されているので、ここで昇格させます。

ディレクトリ移動

  • Nextcloudのルートディレクトリに移動
cd /var/www/html/nextcloud && pwd

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

cd lib/private/Files/Cache

ファイルバックアップ

  • Scanner.phpファイルのバックアップ
cp -pi Scanner.php /path/to/backup/directory/Scanner.php.$(date +%Y%m%d)

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

  • バックアップ確認
diff -u Scanner.php /path/to/backup/directory/Scanner.php.$(date +%Y%m%d)

差分がなければバックアップは成功です。

パッチ適用

  • wgetでパッチ入手
sudo -u www-data https://patch-diff.githubusercontent.com/raw/nextcloud/server/pull/43794.diff
  • パッチ適用
sudo -u www-data patch < 43794.diff 

patching file Scanner.phpと返ってくればOKです。

パッチ適用確認

  • 差分確認
diff -u /path/to/backup/directory/Scanner.php.$(date +%Y%m%d) Scanner.php
  • 差分結果
                                                }

                                                // Only update metadata that has changed
-                                               $newData = array_diff_assoc($data, $cacheData->getData());
-
+                                               // i.e. get all the values in $data that are not present in the cache already
+                                               // NOTE: we serialize then unserialize here because array_diff_assoc() doesn't 
+                                               // support multidimensional arrays on its own (and otherwise internally casts any 
+                                               // embedded array elements to attempt to compare them - not only generating warnings 
+                                               // like "Array to string conversion" but also, as a resut, overlooking real differences)
+                                               $newData = array_diff_assoc(
+                                                       array_map('serialize', $data), 
+                                                       array_map('serialize', $cacheData->getData())
+                                                       );
+                                               $newData = array_map('unserialize', $newData);
+                                        
                                                // make it known to the caller that etag has been changed and needs propagation
                                                if (isset($newData['etag'])) {
                                                        $data['etag_changed'] = true;
  • Apache再起動
systemctl restart apache2.service

既にrootに昇格しているので、sudoは不要のはずです。

  • パッチファイルを削除
rm 43794.diff 

エラー解消確認

  1. ブラウザでNextcloudサイトに管理者権限でログインします。
  2. 管理メニュー→ログへと進み、適用時刻以降に冒頭のログが出力されていないことを確認します。

同一サーバでのRedmineバージョンアップ。(5.1.x→5.1.y)

脆弱性などに対応するため、同一系統のRedmineのバージョンアップ手順、その5.1版での書き直しです。

環境

  • Ubuntu 22.04
  • 動かしていたRedmine:5.1.1
  • Apache 2.4 / mod-passangerでRubyアプリを使用(Ruby 3.0系)
  • MySQL 8.0.3

作業に備えての前提

  • 本手順では「使用するDBの削除」を伴います。作業の際には慎重に行って下さい。
  • Webサービスを止める/何も入っていないRedmineが途中でできるため、ユーザアクセスができない状況が発生します。

作業前のチェック

以下が必須です。

  • [ ] 作業影響について、利害関係者に周知している。
  • [ ] MySQLの管理者アカウントを所持している。
  • [ ] サーバに十分な空き容量がある。
  • [ ] 「一度DBを削除する」ことについて、作業者/確認者が重要度を理解している。

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

  1. スナップショットのバックアップ (推奨)
  2. DBのバックアップ
  3. redmineのディレクトリを一度mvでリネームしてバックアップ。
  4. apache停止
  5. redmineのDBを消す。
  6. redmineのDBを新たに作る。(ユーザは全て権限があるので問題なし)
  7. apache再開
  8. ディレクトリを再作成し、マイナーバージョンが上がったRedmineを作る。
  9. themesとpluginを再配置。
  10. themesとpluginを再配置した状態でDBマイグレーション。
  11. DBリストア。
  12. 動作確認。

システム全体のバックアップ(推奨)

万一に備え、システム全体のバックアップを取ることを推奨します。AWSや仮想サーバ等の場合は、インスタンスをまるごとバックアップしておくと良いでしょう。

mysqldumpによるDBバックアップ

  • 保存ディレクトリに移動
cd /hoge

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

mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql

DB名やDBユーザは自分の環境に合わせます。

データ退避

  • Redmineのルートディレクトリの上に移動
cd /home/www-data && pwd

Redmineが格納されているディレクトリの親ディレクトリに移動します。筆者環境は/home/www-dataなので、自分の環境に合わせます。

  • ディレクトリがあることを確認
ls -ld redmine

退避対象のディレクトリがあることを確認します。

  • リネームして退避
sudo mv redmine redmine_$(date +%Y%m%d)
  • 退避確認
ls -ld redmine_$(date +%Y%m%d)

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

apache停止

ここでWebサービスを停止するのは、DBを削除するためです。

  • apache停止前確認
systemctl status apache2.service

active(running)を確認します

  • apache停止
sudo systemctl stop apache2.service
  • apache停止後確認
systemctl status apache2.service

inactive(dead)を確認します

DB削除と再作成

この作業は慎重に行って下さい。

  • 管理者権限でmysqlにログイン
sudo mysql -u root -p
  • DB確認
SHOW DATABASES;

redmineのDBがあることを確認します。

  • RedmineのDBを削除
DROP DATABASE redmine;

DB名は再確認してください。

  • RedmineのDB削除確認
SHOW DATABASES;

RedmineのDBがないことを確認します。

  • 空のDB再作成
CREATE DATABASE redmine character set utf8mb4;

同じDBを作り直します。

  • 空のDB再作成確認
SHOW DATABASES;

作成したDBがあることを確認します。

EXIT

ソースダウンロード

  • ディレクトリ作成
sudo mkdir /home/www-data/redmine

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

  • ディレクトリの所有者変更
sudo chown -R www-data:www-data /home/www-data/redmine
  • svnダウンロード
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/5.1-stable /home/www-data/redmine

5.1系の最新安定版をダウンロードします

退避させたディレクトリからconfigファイルコピー

  • 退避させたRedmine→ 新規に作成したRedmineにコンフィグをコピー
sudo cp -pi /home/www-data/redmine_$(date +%Y%m%d)/config/database.yml /home/www-data/redmine/config/database.yml

コピー元・コピー先は自分の環境に合わせます。

  • コンフィグの中身確認
cat /home/www-data/redmine/config/database.yml

コピーされていることを確認します。

  • 退避させたRedmine→ 新規に作成したRedmineにメール設定情報などをコピー
sudo cp -pi /home/www-data/redmine_$(date +%Y%m%d)/config/configuration.yml /home/www-data/redmine/config/configuration.yml

コピー元・コピー先は自分の環境に合わせます。

  • 設定情報の中身確認
cat /home/www-data/redmine/config/configuration.yml

Redmineインストール

  • ディレクトリ移動
cd /home/www-data/redmine
  • bundle
sudo -u www-data bundle install --without development test --path vendor/bundle
  • シークレットトークン発行
sudo -u www-data bundle exec rake generate_secret_token
  • DBマイグレーション
sudo -u www-data RAILS_ENV=production bundle exec rake db:migrate
  • 言語設定
sudo -u www-data RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data

apache再開

  • apache再開前確認
systemctl status apache2.service

inactive(dead)を確認します

  • apache再開
sudo systemctl start apache2.service
  • apache再開確認
systemctl status apache2.service

active(runnning)を確認します

再作成後の仮パスワード作成

対象のRedmineにアクセスします。

IDとパスワードがadmin / admin に戻っている状態のため、ログイン後、仮パスワードを発行します。

退避したディレクトリからデータを再配置

  • 退避したRedmineのプラグインディレクトリに移動
cd /home/www-data/redmine_$(date +%Y%m%d)/plugins
  • プラグイン一式のコピー
sudo cp -pir ./* /home/www-data/redmine/plugins/
  • 退避したRedmineのテーマディレクトリに移動
cd /home/www-data/redmine_$(date +%Y%m%d)/public/themes
  • テーマ一式のコピー
sudo cp -pir ./* /home/www-data/redmine/public/themes/

いくつかのファイルを上書きするか求められるので、yで返します。

  • 退避したRedmineの添付ファイル格納ディレクトリに移動
cd /home/www-data/redmine_$(date +%Y%m%d)/files
  • 添付ファイル一式のコピー
sudo cp -pir ./* /home/www-data/redmine/files/
  • 退避したRedmineのログディレクトリに移動
cd /home/www-data/redmine_$(date +%Y%m%d)/log
  • ログ一式のコピー
sudo cp -pir ./* /home/www-data/redmine/log/

プラグイン再マイグレーション

  • Redmineのルートディレクトリに移動
cd /home/www-data/redmine
  • bundle
sudo -u www-data bundle install
  • プラグインのDBマイグレーション
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production

apacheリスタート

  • apache再開前確認
systemctl status apache2.service

active(running)を確認します

  • apache再開
sudo systemctl restart apache2.service
  • apache再開確認
systemctl status apache2.service

active(runnning)を確認します

DBリストア

  • mysqldumpを行ったディレクトリに移動
cd /hoge && pwd
  • DBリストア
mysql -h localhost -u redmine -p redmine < redmine_backup.$(date +%Y%m%d).sql

パスワードはredmineインストール時に設定したDBユーザのパスワードです。

apacheリスタート

  • apache再開前確認
systemctl status apache2.service

active(running)を確認します

  • apache再開
sudo systemctl restart apache2.service
  • apache再開確認
systemctl status apache2.service

active(runnning)を確認します

動作確認

この状態でRedmineに管理者権限でログインします。手順通りなら

  • テーマ
  • 添付ファイル
  • プラグイン
  • チケット一覧

などが有効に動いています。

また、管理>情報へと進み、バージョンが上がっていることを確認します。

作業後-退避前のディレクトリ一式を削除-

  • 退避させたディレクトリの直上に移動
cd /home/www-data

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

  • 退避ディレクトリ確認
ls -ld redmine_$(date +%Y%m%d)

ディレクトリがあることを確認します。

  • 退避ディレクトリ削除
sudo rm -rf redmine_$(date +%Y%m%d)
  • 退避ディレクトリ確認
ls -ld redmine_$(date +%Y%m%d)

ディレクトリが無いことを確認します。

作業後-MySQLのダンプファイルを削除-

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

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

  • ダンプファイル削除
rm redmine_backup.$(date +%Y%m%d).sql
  • ダンプファイル削除確認
ls -l redmine_backup.$(date +%Y%m%d).sql

ファイルが無いことを確認します。

備考

Redmineはバージョンさえ合っていれば

  • DB
  • 設定ファイル
  • 添付ファイル
  • プラグイン
  • テーマ
  • ログ

を移行することで、別のサーバへの引っ越しが可能になります。

Page 3 of 4

Powered by WordPress & Theme by Anders Norén