カテゴリー: PC Page 12 of 51

UbuntuサーバのSwap処理頻度を変更。

Ubuntuサーバを運用中、実メモリに余裕があるにもかかわらずスワップアウトが出ている事象を確認。

これを変更してみます。

環境

  • Ubuntu 20.04
  • メモリ4GB
  • スワップ6GB

事象と設定変更

現状確認

  • メモリ使用量の確認
free -h
  • 自分の環境の確認
              total        used        free      shared  buff/cache   available
Mem:          3.8Gi       1.8Gi       694Mi       176Mi       1.3Gi       1.6Gi
Swap:         6.0Gi       6.0Mi       6.0Gi
  • swappiness確認
cat /proc/sys/vm/swappiness

60を確認しました。

設定変更

sudo cp -pi /etc/sysctl.conf /path/to/backup/directory/systtl.conf.$(date +%Y%m%d)

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

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

差分がなければ(エラーなく実行できれば)バックアップ成功です。

  • sedによるファイル追記
sudo sed -i '$ a\vm.swappiness = 10' /etc/sysctl.conf

上記の参考サイトを元に、swappinessを10に指定します

  • 設定変更確認
diff -u /path/to/backup/directory/systtl.conf.$(date +%Y%m%d) /etc/sysctl.conf
  • 差分
+vm.swappiness = 10
  • 設定反映
sudo sysctl -p

vm.swappiness = 10と結果が返ってくることを確認します。

設定反映確認

cat /proc/sys/vm/swappiness

10に変更されていることを確認します。

まずはこの値で様子を見てみようと思います。

Redmineのプラグインをインストールするときに使うコマンド

概要

Redmineのプラグインを導入する際の基本的な手順をメモしておきます。

前提

こちらは筆者のメイン環境です。各自、自分の環境に合わせてください。

  • 既にRedmineがインストールされている状態
  • Ubuntu系OS
  • WebサーバとしてApache2を利用
  • Ruby on RailsでApacheと連携
  • RedmineはApacheの実行ユーザ(www-data)

インストールの基本

  1. A.プラグインを/redmine/root/directory/plugins配下に設置(必須)
  2. B.依存関係があるrubyプログラムをインストール(オプション)
  3. C.DBマイグレーション(オプション)
  4. D.Webサービス再起動(必須)
  5. E:動作確認(必須)

A-1:Zipファイルをダウンロードする場合の手順

A-1.1:作業用ディレクトリに移動します。

cd /hoge

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

A-1.2:ZIPファイルを入手します。

  • curl
  • wget
  • scpなどで転送
  • デスクトップを兼ねている場合はダウンロード

など、任意の手を用います。

A-1.3:ファイルを解凍します。

unzip plugin.zip

A-1.4:解凍されたファイル群のディレクトリの所有者を変更します。

sudo chown -R www-data:www-data plugin-hoge

バージョン番号が付与されているパターンが多いです

A-1.5:Redmineのプラグインディレクトリに配置します。

sudo mv plugin-hoge /redmine/root/directory/plugins/plugin

配置する際に、バージョン名などを消しておきます。

→ ここを行ったらB以降に進みます。


A-2:git cloneする場合の手順

A-2.1:Redmineのプラグインディレクトリに移動します。

cd /redmine/root/directory/plugins && pwd

自分の環境に合わせます。 (例:/var/lib/redmine)
筆者環境は/home/www-data/redmineです

A-2.2:git cloneを行います。

sudo -u www-data git clone git_repository 

大概はgithubのURLをそのまま(https://込み)です。

→ ここを行ったらB以降に進みます。


B: 依存関係があるrubyプログラムをインストールする場合の手順(オプション)

B-1: redmineのrootディレクトリに移動します。

cd /redmine/root/directory/ && pwd

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

B-2. Bundle installを行います。

sudo -u www-data bundle install

Bundle complete!と出たらOKです。

→ ここを行ったらC以降に進みます。


B-1: redmineのrootディレクトリに移動します。

cd /redmine/root/directory/ && pwd

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

C: DBマイグレーションを行う場合の手順(オプション)

C-1: redmineのrootディレクトリに移動します。

cd /redmine/root/directory/ && pwd

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

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

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

エラーが出てこなければOKです。

→ ここを行ったらD以降に進みます。


D:Webサービスの再起動

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

active (running)を確認します。


E: 動作確認

  1. Redmineに管理者権限でログインします。
  2. 管理>プラグインに進みます。
  3. インストールしたプラグインがあることを確認します。
  4. 他の機能が動くことを確認します。

Redmine 5.xにknowlegebaseをインストール。

筆者にとってRedmineのキラーアプリだったknowlegebase。その5.x対応版が出たので導入を行います。

https://github.com/yzzy/redmine_knowledgebase

環境

  • Ubuntu 22.04
  • Apache 2.4
  • MySQL 8.0.3
  • Redmine 5.1

導入時

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

※Redmine 4.2で実施した設定ファイルの退避や修正は不要でした。

さっくりとした手順

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

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

cd /home/www-data/redmine/plugins && pwd

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

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

  • git clone
sudo -u www-data git clonehttps://github.com/yzzy/redmine_knowledgebase
  • clone確認
ls -ld redmine_knowledgebase/

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

Gemをインストールします。

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

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

  • bundle install
sudo -u www-data bundle install

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

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

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

  • マイグレーション
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production

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

sudo systemctl restart apache2

動作後の確認

  1. Redmineに管理者アカウントでログインします。
  2. 任意のプロジェクトを選択して設定をクリックします。
  3. モジュール「knowledge」にチェックを入れて保存します。
  4. このように、プロジェクトにナレッジベースのタブが表示されていれば設定完了です。

Redmine: ガントチャートの見た目を調整。

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

メモ帳代わりのRedmineに『ライザのアトリエ3』のクエスト一覧を出しています。

ここのガントチャートが標準だと見切れてしまうので、プラグインで対応します。

プラグイン「redmine_gantt_tweak」

https://github.com/sk-ys/redmine_gantt_tweak

Redmineのプラグインディレクトリに移動します。

cd /home/www-data/redmine/plugins && pwd

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

git cloneを行います。

sudo -u www-data git clone https://github.com/sk-ys/redmine_gantt_tweak

www-dataはredmineの実行ユーザにします。

Redmine(Webサービス)の再起動を行います。

sudo systemctl restart apache2.service 

Redmineで設定を行います。

  1. プラグインを導入したRedmineサイトに管理者権限でログインします。
  2. 任意のプロジェクトに移動します。
  3. モジュール「Gantt Tweak」にチェックを入れて保存します。

保存後、「gantt teak」のタブが表示されるので、これをクリックします。

任意の幅(ここでは600)を指定して保存します。

保存後、ガントチャートに移動し、表示幅が広がっていることを確認します。

Redmineにダークモードを追加する。

概要

Redmineにダークモードを追加するプラグインを導入しました。

動作を確認した環境

  • Redmine 4.2
    • Ubuntu 20.04
  • Redmine 5.1
    • Ubuntu 22.04

ともにApache2.4 / MySQLです。

さっくりとした手順

  1. gitでリポジトリをcloneします。
  2. Webサービス(Redmine)の再起動を行います。
  3. 動作を確認します。

Redmineのプラグインディレクトリに移動します。

cd /home/www-data/redmine/plugins && pwd

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

git cloneをします。

sudo -u www-data git clone https://github.com/fraoustin/redmine_dark

サービス再起動を行います。

sudo systemctl restart apache2.service

動作確認

プラグインを入れたRedmineにアクセスすると、画面右上に「dark mode」が表示されるので、これをクリックします。

例:https://atelier.reisalin.com/

クリック後、画面が切り替わればOKです。

  • 再度「dark mode」をクリックすれば元に戻ります。
  • 本プラグインはブラウザから見た目を変更するため、全てのユーザ(未登録ユーザ含む)が利用可能です。

ufwのエラーに対処(ufwでipv6を無効化)

Linuxサーバのセキュリティを保つため、ufwの遮断スクリプトを用いています

ところが、「UFWが有効になっていない」というメッセージが出始めたため、その対処を行いました。

事象確認

  • ufw のステータス
sudo ufw status
  • 結果
ERROR: problem running ip6tables

対処

参考URL:https://www.reddit.com/r/linux4noobs/comments/nlb4ul/ufw_status_keeps_returning_problem_running/?rdt=58511

ファイルのバックアップを行います。

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

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

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

差分が無いことでバックアップができていることを確認します。

ファイルの書き換えを行います。

  • sedによるファイル書き換え
sudo sed -i 's/IPV6=yes/IPV6=no/' /etc/default/ufw
  • 書き換え確認
diff -u /path/to/backup/directory/ufw.$(date +%Y%m%d) /etc/default/ufw

差分

-IPV6=yes
+IPV6=no

設定を反映します。

  • ufwリロード
sudo ufw reload
sudo ufw status
  • 結果
状態: アクティブ

となっていればOKです。

考えられる原因

パッケージ全体のアップデートなどを行った関係で、IPv6の設定が強制になったためと思われます。

サーバにアクセスする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にブラウザでアクセスし、

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

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. 管理メニュー→ログへと進み、適用時刻以降に冒頭のログが出力されていないことを確認します。

Page 12 of 51

Powered by WordPress & Theme by Anders Norén