カテゴリー: ガジェット Page 3 of 72

xmlフィードから最新の見出しを表示するスクリプト。

スクリプト概要

  1. BBCのRSSフィードをcurlする
  2. そこから指定の見出しを持ってくる

スクリプトの内容

  • bbc_headline.sh
#!/bin/bash

# セクションを指定
section="world"  # ここでセクションを変更

# BBC NewsのRSSフィードから見出しを取得
url="https://feeds.bbci.co.uk/news/${section}/rss.xml"
headlines=$(curl -s "$url" | grep -E '<title>' | sed -n 's/.*<title><!\[CDATA\[\(.*\)\]\]><\/title>.*/\1/p' | sed -n '2,4p')

# 見出しを表示
echo "BBC News - ${section} section"
echo "$headlines"
  • 実行権付与
chmod +x bbc_headline.sh

実行例

  • コマンド実行
./bbc_headline.sh
  • 表示結果
BBC News - world section
'We know what's coming': East Ukraine braces for Russian advance
Trump challenges Biden to TV debates 'anytime'
Australian charged over high-profile disappearance

コマンドベースでブラウザを実行するなく見出しだけでも確認できます。

Nextcloud、Recognizeのエラー解消。(機械学習モデルのダウンロード)

環境

  • Ubuntu 22.04
  • Nextcloud 28.03

の環境で、画像の自動タグ付けアプリ『Recognize』を利用しています。

Nextcloudを28.03にアップデート後、以下のエラーが出たので対処を行います。

エラー内容

管理者権限でログイン後、管理>Recognizeと進むと以下が出てきました。

The machine learning models still need to be downloaded.

対処

こちらのサイトに出てきた方法をそのまま使いました。

https://help.nextcloud.com/t/machine-learning-models-still-need-to-be-downloaded/151566

ディレクトリ移動

cd /home/www-data/nextcloud/ && pwd

Nextcloudがインストールされているディレクトリに移動します。

occ実行

sudo -u www-data php occ  recognize:download-models

※5~10分ぐらい時間がかかりました。

エラー解消確認

上記コマンド終了後、再びNextcloudにログインして管理>Recognizeと進みます。

機械学習モデルのダウンロードが正常に終了しました。

と出たのでエラーは解消です。

平日朝の喫茶店。

やりたいことが一つ叶いました。

中古のノートPCを手に入れ、整備したのが先月の出来事。

思いの外出来が良かったので、これを持って実用に耐えられるかどうかの検証を行いました。

というのは口実で、

コメダのモーニング

朝からガッツリ、コメダで食べたいという理由付けの一つです。

モーニングセットや食事のグラタンを食べながら、PCを広げる。

相当な英気を養っています。

Markdown形式で文字色を入れる。

使う機会が発生したのでメモです。

やりかた

- <span style="color: red; ">赤い文字</span>
- <span style="color: orange; ">黄(オレンジ)文字</span>
- <span style="color: blue; ">青の文字</span>

と、`<span style="color: red; ">`のように囲んでいきます。

結果

と表示されます。

WYSIWYGエディタではなく、マークダウンでも文字色は変えられたという自分にとっての気づきでした。

Redmineサイトの区別。(Watermarkプラグイン)

家と公開用のRedmineで同じテーマを使っているので、「どちらのサイトにいるか」が少し分からなくなります。

そこで、こういうプラグインを付けてみました。

Redmine Watermark

https://github.com/witcan/redmine_watermark

その名の通り、サイト全体にウォーターマークをつけるプラグインです。

インストール

  • Redmineのプラグインディレクトリに移動
cd /var/lib/redminep/pugins && pwd

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

  • git clone
sudo -u www-data git clone https://github.com/witcan/redmine_watermark
  • サービス再起動
sudo systemctl restart apache2.service

アプリを動かしているサービスを再起動させます。

導入後の設定

Redmineに管理者権限でログイン後、

管理>プラグイン>Redmine Watermarkに進みます。

  • Enable watarmark :チェック
  • ユーザ名や現在日付、テキストなどを入力して保存します。

サイトの背景にすかしが表示されれば設定完了です。

Redmineにチケットの終了日を知らせるプラグイン。

概要

そのチケットがいつ閉じられたかを詳細に表示させます。

シンプルで便利なプラグインです。

動作を確認した環境

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

両方で動きました。また、両方ともApache環境です。

手順

  • ディレクトリ移動
cd /var/lib/redmine/plugins && pwd

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

  • git clone
sudo -u www-data git clone https://github.com/fraoustin/redmine_closed_date
  • マイグレーション
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production
  • サービス再起動
sudo systemctl restart apache2.service
  • 動作確認

クローズしたチケット詳細に「クローズしたチケット」とその日付が出てくればOKです。

Ubuntu 22.04に構築したNextcloudとClamAVを連携させる。

概要

NextcloudとClamAVを連携させます。

環境

  • Ubuntu 22.04
  • Nextcloud 28.02
  • ClamAV 0.103

さっくりとした手順

  1. clamav-daemonを有効化します。
  2. ウイルス定義ファイル(freshclam)を定期的に実行させます。
  3. NextcloudにAntivirusを導入します。
  4. NextcloudのAntivirusを連携させます。

参考にした手順:
https://rair.dev/nextcloud-clamav-antivirus/

前提

  • 性質上、かなりリソースを消費します。ある程度のマシンスペックを覚悟してください。
  • ClamAVをインストールしていることが条件です。

ClamAVを有効化します。

  • ClamAV daemon 状況確認
sudo systemctl status clamav-daemon.service

実行結果

○ clamav-daemon.service - Clam AntiVirus userspace daemon
     Loaded: loaded (/lib/systemd/system/clamav-daemon.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/clamav-daemon.service.d
             └─extend.conf
     Active: inactive (dead)
  Condition: start condition failed at Tue 2024-02-20 16:09:56 JST; 19h ago
             └─ ConditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc} was not met
       Docs: man:clamd(8)
             man:clamd.conf(5)
             https://docs.clamav.net/

最初はエラーになったので、再起動をします。

  • ClamAV daemon 再起動
sudo systemctl restart clamav-daemon.service
  • 再起動後の状況確認
sudo systemctl status clamav-daemon.service
● clamav-daemon.service - Clam AntiVirus userspace daemon
     Loaded: loaded (/lib/systemd/system/clamav-daemon.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/clamav-daemon.service.d
             └─extend.conf
     Active: active (running) since Wed 2024-02-21 11:44:33 JST; 4s ago
       Docs: man:clamd(8)
             man:clamd.conf(5)
             https://docs.clamav.net/
    Process: 54279 ExecStartPre=/bin/mkdir -p /run/clamav (code=exited, status=0/SUCCESS)
    Process: 54280 ExecStartPre=/bin/chown clamav /run/clamav (code=exited, status=0/SUCCESS)
   Main PID: 54281 (clamd)
      Tasks: 1 (limit: 18920)
     Memory: 955.7M
        CPU: 4.215s
     CGroup: /system.slice/clamav-daemon.service
             └─54281 /usr/sbin/clamd --foreground=true

今度はOKです。この結果を見てもわかるように、消費メモリが1GBほど。

  • ソケットがリッスンされていることを確認
netstat -a|grep clam
unix  2      [ ACC ]     STREAM     LISTENING     1516341  /var/run/clamav/clamd.ctl

freshclamを定期実行させます。

  • サービススクリプトを作成
cat <<- __EOF__ | sudo tee -a /etc/systemd/system/freshclam.service
[Unit]
Description=Freshclam virus database updater

[Service]
Type=simple
ExecStart=/usr/bin/freshclam -d -c 4
# -c 数字で 頻度を指定します。ここでは日に4回(6時間おき)に更新します

[Install]
WantedBy=multi-user.target
__EOF__
  • 実行権付与
sudo chmod +x /etc/systemd/system/freshclam.service
  • サービス反映
sudo systemctl daemon-reload
  • サービス開始
sudo systemctl start freshclam.service
  • 自動起動有効化
sudo systemctl enable freshclam.service
  • サービス開始確認
systemctl status freshclam.service

Active :inactive (dead)と表示されますが、 freshclam.service: Deactivated successfully.と出ていれば動作に問題はありません。

NextcloudでAntiVirusをインストール

  1. Nextcloudに管理者権限でログインします。
  2. アプリから「Antivirus for files」を検索してインストールします。

Nextcloud Antivirus for files設定

  1. 管理者メニューの「セキュリティ」に進みます。
  2. ファイルのウイルス対策で、以下の通り設定します。
  • モード: ClamAV Daemon (Socket)
  • ソケット: /var/run/clamav/clamd.ctl
  • ストリームの長さ: 262144000 (アップロードできるファイルの容量に合わせます)
  • File size limit for periodic background scans and chunked uploads, -1 means no limit:-1
  • Check only first bytes of the file, -1 means no limit :-1
  • バックグラウンドスキャン中に感染ファイルが見つかった場合: ログのみ (運用に合わせます)

設定後、「保存」をクリックして、設定完了です。

Ubuntu 22.04にclamavを設定。(インストールと動作確認)

Ubuntu 22.04の検証機が、16GBほどの余裕があったのでclamavをインストールしてみます。

さっくりとした手順

  1. レポジトリを追加します。
  2. clamavをインストールします。
  3. 定義ファイルをアップデートします。
  4. 動作を確認します。

手順

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

sudo add-apt-repository ppa:deadsnakes/ppa

clamavのインストールを行います。

  • パッケージ更新
sudo aptitude update
  • clamavインストール
sudo aptitude install clamav clamav-daemon
  • インストール確認
clamd --version

2024/02/20現在、以下を確認しました。

ClamAV 0.103.11/27190/Mon Feb 19 18:24:27 2024

定義ファイルの更新を行います。

  • 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.
  • エラー対処
sudo rm /var/log/clamav/freshclam.log
  • エラー対処後のfreshclam 起動(OK)
sudo freshclam

定義ファイル更新確認

Tue Feb 20 15:35:41 2024 -> ClamAV update process started at Tue Feb 20 15:35:41 2024
Tue Feb 20 15:35:41 2024 -> daily.cvd database is up-to-date (version: 27190, sigs: 2053641, f-level: 90, builder: raynman)
Tue Feb 20 15:35:41 2024 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Tue Feb 20 15:35:41 2024 -> bytecode.cvd database is up-to-date (version: 334, sigs: 91, f-level: 90, builder: anvilleg)

インストール後のステータスを確認します。

systemctl status clamav-daemon
systemctl status clamav-freshclam

それぞれactive(running)を確認します

テストファイルを用いて動作を確認します。

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

任意のディレクトリを指定してください。

  • eicarテストファイル作成
echo "X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*" > eicar
  • ディレクトリスキャン
clamscan ./

以下を確認したら、スキャンはできています。

/hoge/eicar: Eicar-Signature FOUND

----------- SCAN SUMMARY -----------
Known viruses: 8685351
Engine version: 0.103.11
Scanned directories: 1
Scanned files: 1
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 16.689 sec (0 m 16 s)
Start Date: 2024:02:20 16:12:15
End Date:   2024:02:20 16:12:32

これから

  1. 設定ファイルを編集
  2. ファイル追加時などにスキャンをするようにする

などを行っていきます。

対話式にLinuxサーバの再起動・停止を行うシェルスクリプト。

概要

メンテナンスなどで、指定する時刻にLinuxサーバを停止・再起動したいときは割合にあります。

そこで、そんなスクリプトです。

スクリプト内容

  • server_shutdown.sh
#!/bin/bash

# メッセージを表示して日付を入力
read -p "このサーバを停止・再起動する日付をyyyymmdd形式で入力してください: " input_date

# メッセージを表示して時刻を入力
read -p "このサーバを停止・再起動する時刻をhhmm形式で入力してください: " input_time

# メッセージを表示して再起動か停止かを入力
read -p "再起動は1、停止は2を入力してください(空エンターは1): " restart_option
restart_option=${restart_option:-1}  # デフォルトは再起動(1)

# 日付と時刻を結合
scheduled_datetime="${input_date} ${input_time}"

# オプションに応じてコマンドを設定
case $restart_option in
    1)
        action="再起動"
        ;;
    2)
        action="システム停止"
        ;;
    *)
        echo "無効なオプションが選択されました。スクリプトを終了します。"
        exit 1
        ;;
esac

# 確認メッセージを表示して、実行の可否を確認
read -p "$(date -d "$scheduled_datetime" '+%Y/%m/%d %H:%M') に$action します。よろしいですか?(y/n): " confirmation

if [ "$confirmation" == "y" ]; then
    # 指定した日時まで待機し、処理をバックグラウンドで実行
    (sleep $(( $(date -d "$scheduled_datetime" '+%s') - $(date '+%s') )) && {
        echo "システムに常駐し、指定日時に$action を行います。"
        if [ $restart_option -eq 1 ]; then
            shutdown -r now
        elif [ $restart_option -eq 2 ]; then
            shutdown -h now
        fi
    }) &
    disown  # バックグラウンドプロセスをデタッチ
    echo "処理をバックグラウンドで実行しました。プロンプトに戻ります。"
else
    echo "操作をキャンセルしました。"
fi

作成後、

sudo chown root:root server_shutdown.sh

として所有者をrootに変更。その後、

sudo chmod 744 server_shutdown.sh

で、rootのみに実行権を付与します。

実行時の動き

sudo bash server_shutdown.sh
このサーバを停止・再起動する日付をyyyymmdd形式で入力してください: 20240216
このサーバを停止・再起動する時刻をhhmm形式で入力してください: 0215
再起動は1、停止は2を入力してください(空エンターは1): 1
2024/02/16 02:15 に再起動 します。よろしいですか?(y/n): y
処理をバックグラウンドで実行しました。プロンプトに戻ります。

と、プロンプトが出て指定時刻にサーバーの再起動/停止を行います。

動きを止めたいとき

バックグラウンドで処理が走っているので、プロセスを確認して止めます。

  • プロセス確認
ps aux |grep server_shutdown
root        2202  0.0  0.0  11020  1528 ?        S    16:32   0:00 bash server_shutdown.sh

2202のように、PIDを確認します。

  • プロセス停止
sudo kill 2202

PIDに停止シグナルを送り、処理を止めます。

  • プロセス確認
ps aux |grep server_shutdown

該当するバックグラウンドの処理がなければ大丈夫です。

Nextcloud 28.02のエラー「メンテナンス

概要

Ubuntu 22.04でも稼働を始めたNextcloud。28.02にアップグレード後、管理者画面から以下の警告が出てきました。

サーバーにはメンテナンスウィンドウの開始時間が設定されていません。これは、リソースを多く使用する日常のバックグラウンドジョブが、メインの利用時間中にも実行されることを意味します。利用者がこれらの重いタスクによる負荷の影響を受けにくくするために、低い利用時間に設定することをおすすめします。 詳細については、ドキュメント↗を参照してください。

対処

https://docs.nextcloud.com/server/28/admin_manual/configuration_server/background_jobs_configuration.html

上記の通りに行うこととします。

以下、NextcloudがインストールされているサーバにSSHログイン(または直接コンソール接続)での操作です。

環境

  • Ubuntu 22.04
  • php 8.1
  • Apache 2.4

手順

root昇格

Nextcloudは、コンフィグ系が全てWeb実行ユーザ(www-data)等に統一されているため、

sudo su -

での操作を行います。

バックアップ取得

  • ディレクトリ移動
cd /home/www-data/nextcloud/config && pwd
  • バックアップ
cp -pi config.php /path/to/backup/directory/config.php.$(date +%Y%m%d)

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

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

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

config.php修正

以下のファイルを、以下の通り追記します。

/home/www-data/nextcloud/config/config.php

  • 追記内容
  'default_timezone' => 'Asia/Tokyo',
  'maintenance_window_start' => 1,
  • 差分
+  'default_timezone' => 'Asia/Tokyo',
+  'maintenance_window_start' => 1,

config.phpでタイムゾーンを指定済みであれば、追記は下の行だけで大丈夫です。

修正反映

  • Apache再起動
systemctl restart apache2.service
  • rootから抜ける
exit

解消確認

ブラウザから上記の処置を施したNextcloudにアクセス。管理者画面で「サーバーにはメンテナンスウィンドウの開始時間が設定されていません~」が出なければOKです。

Page 3 of 72

Powered by WordPress & Theme by Anders Norén