カテゴリー: PC Page 1 of 39

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
  • 設定ファイル
  • 添付ファイル
  • プラグイン
  • テーマ
  • ログ

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

redmine5.1にインストールされているAdditilonals/Addtional_tagsプラグインをアップデート

概要

Redmineに強力なマクロをもたらすAdditonal Pluginsとタグ付けでチケット間の横断検索を可能にするAdditional_tagsプラグインをアップデートします。

環境

  • Ubuntu 22.04
  • Redmine 5.1
  • Apache2
  • MySQL
  • Ruby 3.0

で稼働しています。

※このプラグインの2024/04/30現在の最新バージョンは、Redmine 4.2には非対応です※

さっくりとした手順

  1. DBのバックアップを取ります。
  2. additonalsのバージョンアップを行います。
  3. additonal_tagsのバージョンアップを行います。
  4. 動作を確認します。

DBバックアップ

影響範囲が大きいので、DBのバックアップは取っておきます。

  • バックアップディレクトリに移動
cd /path/to/backup/directory && pwd

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

  • DBバックアップ
mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql
  • u redmineのDBユーザー
  • --no-tablespaces --single-transaction DB名

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

  • DBバックアップ確認
less redmine_backup.$(date +%Y%m%d).sql

内容が閲覧できることを確認します。

Additonalsアップデート

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

Redmineのプラグインディレクトリは自分の環境に合わせます。

  • git pull
sudo -u www-data git pull
  • Redmineのルートディレクトリに移動
cd ../../ && pwd
  • bundle
sudo -u www-data bundle install
  • マイグレーション
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production
  • Redmine(apache)サービス再起動
sudo systemctl restart apache2.service

Additonal_tagsアップデート

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

Redmineのプラグインディレクトリは自分の環境に合わせます。

  • git pull
sudo -u www-data git pull
  • Redmineのルートディレクトリに移動
cd ../../ && pwd
  • bundle
sudo -u www-data bundle install
  • マイグレーション
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production
  • Redmine(apache)サービス再起動
sudo systemctl restart apache2.service

additonal_tagsがadditonalsに依存しているプラグインのため、安全策として1回ずつ再起動しています。

動作確認

Redmineに管理者権限でログインし、正常に動作することを確認できれば動作完了です。

Nextcloud 29.0アップグレード後の処理。(テーブルインデックス追加)

概要

Nextcloudを29.0にアップデート後、管理画面で以下のエラーが出てきました。

データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 "occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。 オプションのインデックス "oc_npushhash_di" がテーブル "notifications_pushhash"にありません

この問題に対処していきます。

Nextcloudが実行されているサーバにSSHログインして作業を行います。

環境

  • Ubuntu 20.04 または Ubuntu 22.04
  • PHP 8.1
  • Apache 2.4
  • MySQL
  • Nextcloud 28.x→29.0にアップグレード

ディレクトリ移動

cd /var/www/html/nextcloud/ && pwd

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

occ実行

  • 管理画面で出てきたコマンドを実行
sudo -u www-data php occ db:add-missing-indices
  • 実行結果
Adding additional oc_npushhash_di index to the oc_notifications_pushhash table, this can take some time...
oc_notifications_pushhash table updated successfully.

エラー解消確認

  1. 上記対処を行ったNextcloudサイトに管理者権限でログインします。
  2. 管理画面で、このエラーが解消されていれば完了です。

アカウントファイルを用いたDBログインとバックアップ。

概要

バックアップスクリプトなどでMySQLにログインして処理を行う場合のTIPSです。

何かと使うのでメモに残します。

さっくりとした手順

  1. アカウントファイルを作ります。
  2. ログインできることを確認します。
  3. アカウントファイルを用いたコマンドでバックアップできることを確認します。

アカウントファイル作成

  • ディレクトリ作成
sudo mkdir -p /home/hoge/db_password

運用に合わせて指定ください。

cd /home/hoge/db_password && pwd

指定したディレクトリに移動します

  • アカウントファイル作成

以下の内容を教義・信仰に沿ったエディタで作成します。(【】内は取り除き、自分の設定に合わせます)

  • アカウントファイル内容
  • ファイル例:account.txt
[client]
user = 【RedmineのDBユーザ】
password = "【RedmineのDBユーザ用パスワード】"

password は""で囲みます。

  • アカウントファイルのパーミッション変更
chmod 400 account.txt
ls -l account.txt

パーミッションが400であることを確認します。

ファイルを用いてのログインを確認

mysql --defaults-extra-file=/path/to/directory/account.txt

--defaults-extra-file=は、アカウントファイルの絶対パスです。

ログインできることを確認します。

SHOW DATABASES;

アカウントの権限で指定されたDBの表示を確認します。

EXIT

MySQLから抜けます。

SQL Dumpの取得

  • SQL Dump
mysqldump --defaults-extra-file=/path/to/directory/account.txt --no-tablespaces -h [DBサーバ] [DB名] > backup.sql
  • --no-tablespacesはPROCESS特権がないユーザでもダンプできるようにするためです。
  • バックアップ先も必要に応じて絶対パスで指定できます。
  • ファイル確認
ls -l backup.sql

ファイルの内容にDBがあれば成功です。取り扱いには慎重を期してください。

Ubuntu 22.04にmkcertをインストール。

これを使わずとも、Ubuntu 22.04にはapt(aptitude)からインストール可能でした。

概要

  • ローカルDNSで証明書を作りたい
  • 或いはローカルホスト(127.0.0.1)をhttps化したい

場合に役立つコマンド、mkcertをインストールします。

インストール方法

aptitude (apt)によるインストール

sudo aptitude install mkcert

ローカルルート証明書を作成

  • ルート証明書の作成
mkcert -install
  • ローカルのルート証明書作成確認
ls -l ~/.local/share/mkcert/
  • rootCA-key.pem → 秘密鍵
  • rootCA.pem → ルート証明書

ホスト名に追記・修正

ファイル /etc/hosts をルート顕現で、以下のように修正します。

127.0.0.1  agnes-luce

※ Ubuntu系はホスト名に指定したIPがなぜか127.0.1.1になっています。

証明書作成

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

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

  • 証明書作成
mkcert -key-file ドメイン名.key.$(date +%Y%m) -cert-file ドメイン名.crt.$(date +%Y%m) ドメイン名
  • 作成例
mkcert -key-file agnes-luce.key.$(date +%Y%m) -cert-file agnes-luce.crt.$(date +%Y%m) agnes-luce
Created a new certificate valid for the following names 📜
 - "agnes-luce"

The certificate is at "agnes-luce.crt.202404" and the key at "agnes-luce.key.202404" ✅

It will expire on 14 July 2026 🗓

証明書の整合性を確認

  • 証明書から公開鍵のハッシュ値を取り出す
openssl x509 -pubkey -in 証明書ファイル -noout | openssl md5
  • 秘密鍵から公開鍵のハッシュ値を取り出す
openssl pkey -pubout -in 秘密鍵ファイル | openssl md5

それぞれのハッシュ値が同じであることを確認します。

こうしてできた一式は2年半有効です。

書き直し:Ubuntu 22.04系にRedmine5.1をインストール。(手順書の基準)

こちらの記事を、現在の自分の手順書の基準に直しました。

心がけている基準

  • 1区切りで1コマンド。
    • コピペする際に連続で実行する際のエラーを防ぎます。
    • 特に、SQLを操作する際は1行ずつ、確実に行いたいのでこれで書き直しです。
  • 可能な限りテキストエディタは用いない。
    • 設定ファイルの書き換えや追記はsedやteeを使います。
    • 使用する必要がある場合はその旨を追記します。

こうしてできたのがこちら。

前提

  • Ubuntuサーバの初期設定が終わった直後の状態を想定します。
  • DNSでドメインの名前が解決できることを前提としています
  • 環境は以下の通りです。
  • Apache系
  • MySQL
  • Ruby 3.0
  • また、パッケージ管理としてaptitudeを用いています。aptが好みの方はこちらに読み替えてください。

特記事項

  • 本手順ではRedmine 5.1をインストールします。
  • よほどのことがない限り、Ubuntu22.04にインストールするのはこのバージョンになります。
  • 本記事のredmineの格納ディレクトリは/home/www-data/redmineです。一般的なディレクトリ(/var/lib/redmine)と異なることを最初に注記します。
  • ほぼコピペだけで済むような構成にしていますが、一部、テキストエディタを使用する箇所があります。
  • また、自身の環境に合わせたりパスワードを設定する項目がありますのでそこは注意してください。

手順

Apacheのレポジトリを追加します。

sudo add-apt-repository ppa:ondrej/apache2

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

  • パッケージ全体のアップデート
sudo aptitude update
  • 必要なパッケージのインストール
sudo aptitude install build-essential zlib1g-dev libssl-dev libreadline-dev libyaml-dev libcurl4-openssl-dev libffi-dev mysql-server mysql-client apache2 apache2-dev libapr1-dev libaprutil1-dev imagemagick libmagick++-dev fonts-takao-pgothic subversion git ruby libruby ruby-dev libmysqlclient-dev

apacheの追加モジュールをインストールします。

sudo aptitude install libapache2-mod-passenger

apacheのバージョンを確認します。

apache2ctl -v

Apache/2.4.59以降であることを確認します。2.4.58には、http/2プロトコルへの脆弱性があるので、左記のバージョンであることを確認します。

rubyのパッケージ管理(gem)を用いて必要なライブラリをインストールします。

sudo gem install bundler racc mysql2

「3 gems installed」が表示されればインストール成功です。

必要に応じてmysqlの初期設定を行います。

mysql_secure_installationによる初期設定を行います。

うまくいかない場合は以下を参照してください。

https://barrel.reisalin.com/books/bbf94/page/mysql-secure-installation

mysqlでDBとユーザーを設定します。

sudo mysql -u root -p

上記で設定した「mysqlのrootパスワード」を入力し、mysqlにログインします

CREATE DATABASE redmine character set utf8mb4;

DB "redmine" を作成します

CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password';

ユーザ "redmine"を作成し、パスワードを設定します。
この'password'は任意のパスワードに変更してください

GRANT ALL ON redmine.* TO 'redmine'@'localhost';
flush privileges;
exit

設定したDBでログインできることを確認します。

mysql -u redmine -p
SHOW DATABASES;
exit
  • 配置ディレクトリ作成
sudo mkdir -p /home/www-data/redmine

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

  • 所有者変更
sudo chown -R www-data:www-data /home/www-data
  • Redmine 5.1を入手
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/5.1-stable /home/www-data/redmine

Redmineのコンフィグを設定します。

  • サンプルファイルをコピーしてコンフィグを編集
sudo cp -pi /home/www-data/redmine/config/database.yml.example /home/www-data/redmine/config/database.yml

/home/www-data/redmine/config/database.yml

このファイルを教義・信仰に従ったエディタで編集してください。

database.yml 編集内容(要:テキストエディタ)

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  # rootからredmineに変更します
  password: "redmine用のパスワード"
  encoding: utf8mb4
# 本番環境(production)のみ設定を行います

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

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

/home/www-data/redmine/ (Redmineを配置したディレクトリ)であることを確認します

  • bundle install
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の設定ファイルを作成します。

【】を自分の作成したRedmineのサーバ名/ドメイン名に変更します。

cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/redmine.conf
<VirtualHost *:80>
    ServerName 【hoge.example.com】
    # ServerNameは自身が設定したredmineに読み替えてください。
    DocumentRoot /home/www-data/redmine/public
    <Directory /home/www-data/redmine/public>
        Options -MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
__EOF__

設定を反映させます。

  • ファイル作成確認
ls -l /etc/apache2/sites-available/redmine.conf
  • 設定ファイル有効化
sudo a2ensite redmine.conf
  • 初期サイト設定を無効化
sudo a2dissite 000-default.conf
sudo a2dissite default-ssl.conf
  • コンフィグファイル整合性確認
sudo apache2ctl configtest

Syntax OK を確認します

  • 設定反映前のapacheステータス確認
systemctl status apache2.service

active(running)を確認します

  • apache再起動
sudo systemctl restart apache2.service
  • 設定反映後のapacheステータス確認
systemctl status apache2.service

active(running)を確認します

Webページの表示を確認します。

http://設定したRedmineドメイン

でRedmineのトップページが表示されれば成功です。

直ちにadmin/adminでログインし、強固なパスワードを設定し直します。

Ubuntu 20.04 / 22.04で稼働しているApache HTTP Server 2.4の脆弱性対応。

2024年4月に発表された脆弱性への対処を行います。

脆弱性内容

  • Apache HTTP Serverのコア機能におけるHTTPレスポンス分割の問題(CVE-2023-38709)
  • 複数のモジュールにおけるHTTPレスポンス分割の問題(CVE-2024-24795)
  • HTTP/2 CONTINUATIONフレームの検証不備に起因したメモリ枯渇の問題(CVE-2024-27316)

https://jvn.jp/vu/JVNVU99032532

環境

  • Ubuntu 20.04 および Ubuntu 22.04
  • Apache 2.4系を利用

Apacheのレポジトリを追加します。

sudo add-apt-repository ppa:ondrej/apache2

Apacheのバージョンアップを行います。

  • パッケージ全体のアップデート
sudo aptitude update
  • パッケージのアップグレード
sudo aptitude upgrade

このリストの中にapache2とapache2関連パッケージが更新される(2024/04/10現在)ため、それぞれアップグレードを行います。

バージョンアップを確認します。

apache2ctl -v

Apache/2.4.59以降であることを確認します。2.4.58には、http/2プロトコルへの脆弱性があるので、左記のバージョンであることを確認します。

対応を行った日付

2024/04/10

ビルトインの自動アップデート機能を使って、Snipe-ITをv6.3.3からv6.3.4にアップグレード。

概要

プログラムに備わっている自動アップデートスクリプトを使い、Snipe-ITのアップグレードを行いました。

  • アップグレード前:v6.3.3
  • アップグレード後:v6.3.4

前提

以下の環境で動いています。

  • Ubuntu 22.04
  • Apache 2.4
  • MySQL 8.0.36
  • PHP 8.1.27
  • Composer 2.6.6

参考手順

https://snipe-it.readme.io/docs/upgrading

さっくりとした手順

Snipe-ITがインストールされているサーバでコマンド操作を行います。

  1. Snipe-ITのインストールディレクトリに移動します。
  2. バックアップ用の仮ファイルを作成します。
  3. アップグレードスクリプトを実行します。
  4. ブラウザでアップグレードを確認します。

Snipe-ITのインストールディレクトリに移動

cd /home/www-data/snipe-it

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

仮ファイル作成

sudo -u www-data touch ./storage/app/backup-temp
  • これを作っておかないと、後のスクリプトでエラーとなりました。
  • Snipe-ITはApacheで実行しているので、仮ファイルは所有者権限で作成します。

アップグレード

sudo -u www-data php upgrade.php
スクリプト例
--------------------------------------------------------
WELCOME TO THE SNIPE-IT UPGRADER! 
--------------------------------------------------------

This script will attempt to: 

- validate some very basic .env file settings 
- check your PHP version and extension requirements 
- check directory permissions 
- do a git pull to bring you to the latest version 
- run composer install to get your vendors up to date 
- run migrations to get your schema up to date 
- clear out old cache settings

Launching using branch: master
Found PHP requirements, will check for PHP > 7.4.0 and < 8.2.0
Proceed with upgrade? [Y/n]: 

確認はこの部分だけです。PHPのバージョンを確認した上で「y」を入力します。

(中略)

--------------------------------------------------------
STEP 9: Migrating database:
--------------------------------------------------------

Migrating: 2024_03_18_221612_update_legacy_locale
Migrated:  2024_03_18_221612_update_legacy_locale (154.60ms)

--------------------------------------------------------
STEP 10: Checking for OAuth keys:
--------------------------------------------------------

√ OAuth keys detected. Skipping passport install.

--------------------------------------------------------
STEP 11: Taking application out of maintenance mode:
--------------------------------------------------------

-- Application is now live.

---------------------- FINISHED! -----------------------
All done! Clear your browser cookies and re-login to use 
your upgraded Snipe-IT!
--------------------------------------------------------

ここまで進めばスクリプトは完了です。

アップグレード確認

  1. ブラウザからSnipe-ITにログインし直します。(一度ログアウトします)
  2. Web画面の右下のバージョンが上がっていれば成功です。

Page 1 of 39

Powered by WordPress & Theme by Anders Norén