タグ: Linux Page 12 of 29

Nextcloud29.03へのアップグレード後の警告解消。(テーブルにインデックス追加)

概要

Nextcloudを29.0.3にアップデート後、以下の警告を確認しました。

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

こちらに対応します。

環境

  • Ubuntu 20.04
  • PHP8.1
  • Nextcloud 29.0.3 (29.0.2からアップデート)

また、nextcloudの実行ユーザーはwww-dataです。

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

  • ディレクトリ移動
cd /var/www/html/nextcloud && pwd

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

occを実行します。

  • 指示されたコマンドを実行
sudo -u www-data php occ db:add-missing-indices
  • 出力結果
Adding additional schedulobj_lastmodified_idx index to the oc_schedulingobjects table, this can take some time...
oc_schedulingobjects table updated successfully.

警告の解消を確認します。

  1. 上記の措置を執ったNextcloudのサイトに管理者権限でログインします。
  2. 管理>概要に進みます。
  3. 警告が消えていることを確認します。

解消方法がある程度示されているので、Nextcloudは親切です。

Growiバージョンアップ時の問題点と切り戻しでハマったこと。(nodeとturboのバージョンダウン)

Growiのバージョンをv6.3.5 → v7.0.10に変えたところ、以下のデグレを自分の環境で確認しました。

  1. 編集したページを再度編集しようとすると空白になる。
    • 再々編集した場合でも消える場合がある。
  2. 新しいページを作ったときにテンプレートが適用されない。

Wikiとしてこの2つは致命的なので、v6.3.5に切り戻しを行いましたが、ダウングレードできない事象が発生しました。

以下、その対処記録です。

環境

  • Ubuntu 22.04
  • Dockerではなくオンプレ環境で稼働
  • Growi v7.0.10→v6.3.5に切り戻しをしましたが、yarnの途中で失敗しました。

その途中で確認したこと

  1. v7.0.1へのセットアップ後、aptでnodeのバージョンが上がっていたことにより、v6.3.xの対象外になっていました。(18→19)
  2. v7.xへのセットアップ時、それにつれてturboのバージョンも上がっていました。

問題はこの2つにあると仮定して、これらのバージョンダウンを行っていきます。

対処

  • バージョン管理のためにnをインストール
sudo npm install -g n
  • インストール可能なnodeバージョンを確認
n ls-remote --all

→ 18系の最新版18.20.3をインスト-ルします

  • nでバージョンを指定してインストール
sudo n 18.20.3
  • バージョン確認
node -v

v18.20.3を確認

  • turboのバージョンを戻す
sudo yarn update turbo@1.12.2

この後、以下の手順でv7.0.10→v6.3.5へバージョンダウンを行えました。

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

Webアプリはミドルウェアとの兼ね合いでハマることが多いんで注意です。

apacheで特定のユーザーエージェントからのアクセスを拒否。

概要

自分のサーバのアクセスログを見たら

"GET /picture.php?/6797/category/73 HTTP/1.1" 200 14394 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"

と、クローラーが大量にアクセスしてきました。robots.txtも意に介さない悪名高いbotのようなので、このアクセスを、サーバで拒否します。

環境

  • Ubuntu 20.04
  • Apache 2.4 (aptでインストールしたため、ディレクトリは/etc/apache2配下にあります。

また、バーチャルサイトによる複数のサイトを運用しているので、そのうちの1つだけを弾きます。

さっくりとした手順

  1. Apacheのバーチャルサイトの設定ファイルのバックアップを取ります。
  2. 設定ファイルを追記します。
  3. 設定を反映します。
  4. 拒否されていることを確認します。

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

  • ディレクトリ移動
cd /etc/apache2/sites-available && pwd
  • ファイルバックアップ
sudo cp -pi hoge.conf /path/to/backup/directory/hoge.conf.$(date +%Y%m%d)

設定を行いたい自分の設定ファイルを、任意のバックアップディレクトリにバックアップします。

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

差分が無ければ(エラーがなければ)バックアップは成功です。

設定ファイル追記

上述した設定ファイルを教義・進行に則ったエディタで編集します。(要管理者権限)

  • 追記例
    DocumentRoot /var/www/html/hoge
    <Directory /var/www/html/hoge>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
     ## GoogleBOTを拒否(正常bot不正bot両方拒否)
     SetEnvIfNoCase User-Agent "Googlebot" bot
     ## Facebookのクローラーを拒否
     SetEnvIfNoCase User-Agent "facebookexternalhit/1.1" fb_bot
     <RequireAll>
      Require all granted
      Require not env bot
      Require not env fb_bot
     </RequireAll>

/var/www/html/hogeは自分の環境に合わせます。

※ついでにGoogleBOTも拒否します。

  • 差分確認
diff -u /path/to/backup/directory/hoge.conf.$(date +%Y%m%d) hoge.conf
  • 差分例
-        Require all granted
+     ## GoogleBOTを拒否(正常bot不正bot両方拒否)
+     SetEnvIfNoCase User-Agent "Googlebot" bot
+     ## Facebookのクローラーを拒否
+     SetEnvIfNoCase User-Agent "facebookexternalhit/1.1" fb_bot
+     <RequireAll>
+      Require all granted
+      Require not env bot
+      Require not env fb_bot
+     </RequireAll>

設定反映

  • 構文確認
sudo apache2ctl configtest

Syntax OKを確認します。

  • Apache再起動
sudo systemctl restart apache2.service
  • Apache再起動確認
systemctl status apache2.service

active(running)を確認します。

設定反映確認

設定を行ったアクセスログを開きます。

403 3772 "-" "facebookexternalhit/1.1 

のように、ステータスコードが「403」になっていれば、アクセス拒否されています。

思考中、思考中。(piwigoとmatomoの連携)

やりたいこと

フォトアルバムシステム、piwigoをシステム解析システム、matomoに置きたいのですが、どうもうまくいかず。

「ここまでやった」というメモのために残します。

前提

  • 自前でアクセス解析:matomoとフォトアルバム:piwigoをインストール済み。
  • 両者はそれぞれインターネット通信が可能。(相互に見えている)

やったこと

piwigoサイトに管理者権限でログインし、Add< head > Elementをインストールします。

有効にして、設定します。

エレメントの所に、matomoで提示されたトラッキングコードを埋め込みます。

結果

piwigo側のサイトのソース表示で、matomoのトラッキングコードが表示されることを確認しました。

ですが、その後、何回かアクセスを繰り返しているにもかかわらずうまくカウントされません。

  • wordpress : プラグインにより連携可能
  • redmine: view customize pluginで設定可能

まで行いましたが、うまい手は見つからず。

状況を見ながらもう少し続けてみます。

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: ガントチャートの見た目を調整。

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コマンドがインストールされていることが条件。

これによって、

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

の確認が可能です。

Page 12 of 29

Powered by WordPress & Theme by Anders Norén