メモ
fail2ban調整
arch,Manjaroでjournalctlでログを取得して、メールで送る。
journalctlでログを検索するときに、ページャーを使わない、色装飾を行わない場合のコマンド例
SYSTEMD_COLORS=0 journalctl -b --no-pager -g "検索"
backendがsystemd(sshd,postfixなど)
logpathなし。nftablesを使用。
sendmail-whois-matches.confをsendmail-whois-lines.confを参考に修正。
diff -ur fail2ban-orig/action.d/helpers-common.conf fail2ban/action.d/helpers-common.conf
--- fail2ban-orig/action.d/helpers-common.conf 2023-05-21 04:38:09.000000000 +0900
+++ fail2ban/action.d/helpers-common.conf 2024-04-10 23:26:49.136663349 +0900
@@ -8,6 +8,7 @@
# options `-wF` used to match only whole words and fixed string (not as pattern)
_grep_logs_args = -wF "<ip>"
+_matches_logs = SYSTEMD_COLORS=0 journalctl -b -u <unitname> --no-pager -g "<ip>" | <greplimit>
# Used for actions, that should not by executed if ticket was restored:
_bypass_if_restored = if [ '<restored>' = '1' ]; then exit 0; fi;
diff -ur fail2ban-orig/action.d/sendmail-whois-matches.conf fail2ban/action.d/sendmail-whois-matches.conf
--- fail2ban-orig/action.d/sendmail-whois-matches.conf 2023-05-21 04:38:09.000000000 +0900
+++ fail2ban/action.d/sendmail-whois-matches.conf 2024-04-10 23:15:42.076663402 +0900
@@ -8,6 +8,7 @@
before = sendmail-common.conf
mail-whois-common.conf
+ helpers-common.conf
[Definition]
@@ -20,22 +21,24 @@
# Tags: See jail.conf(5) man page
# Values: CMD
#
-actionban = printf %%b "Subject: [Fail2Ban] <name>: banned <ip> from <fq-hostname>
+actionban = ( printf %%b "Subject: [Fail2Ban] <name>: banned <ip> from <fq-hostname>
Date: `LC_ALL=C date +"%%a, %%d %%h %%Y %%T %%z"`
From: <sendername> <<sender>>
To: <dest>\n
Hi,\n
The IP <ip> has just been banned by Fail2Ban after
<failures> attempts against <name>.\n\n
- Here is more information about <ip> :\n
- `%(_whois_command)s`\n\n
- Matches:\n
- <matches>\n\n
- Regards,\n
- Fail2Ban" | <mailcmd>
+ Here is more information about <ip> :\n"
+ %(_whois_command)s;
+ printf %%b "Matches:\n"
+ %(_matches_logs)s;
+ printf %%b "Regards,\n
+ Fail2Ban" ) | <mailcmd>
[Init]
# Default name of the chain
#
name = default
+logpath = /dev/null
+
diff -ur fail2ban-orig/jail.conf fail2ban/jail.conf
--- fail2ban-orig/jail.conf 2023-05-21 04:38:09.000000000 +0900
+++ fail2ban/jail.conf 2024-04-10 23:35:13.489996677 +0900
@@ -205,8 +205,8 @@
# iptables-multiport, shorewall, etc) It is used to define
# action_* variables. Can be overridden globally or per
# section within jail.local file
-banaction = iptables-multiport
-banaction_allports = iptables-allports
+banaction = nftables-multiport
+banaction_allports = nftables-allports
# The simplest action to take: ban only
action_ = %(banaction)s[port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
@@ -220,6 +220,11 @@
action_mwl = %(action_)s
%(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
+# ban & send an e-mail with whois report and relevant log lines(journalctl)
+# to the destemail.
+action_mwj = %(action_)s
+ %(mta)s-whois-matches[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s", unitname="%(unitname)s"]
+
# See the IMPORTANT note in action.d/xarf-login-attack for when to use this action
#
# ban & send a xarf e-mail to abuse contact of IP address and include relevant log lines
[postfix]
unitname=postfix
enabled = true
action = %(action_mwj)s
[sshd]
unitname=sshd
action = %(action_mwj)s
flatpak版bazelのコマンドライン
flatpak run --share=network --filesystem=home:rw org.freedesktop.Sdk -c "/usr/lib/sdk/bazel/bin/bazel --version"
bazel 7.1.1
bazelであらかじめデータを揃えておいてビルドする際の手順は、flatpak版fcitx5-mozcの手順が参考になるかと思います。
最近、Mozc側のBazelの構成が変わったので、修正が必要そうです。
mozc-deps.yaml
、--distdir=$PWD/../bazel-deps
などの記述があるのがご確認できるかと思います。
mozc-deps.yaml
の依存関係にあるファイルを更新するスクリプトがupdate_mozc_deps
です。
このスクリプトが、現在はダウンロードしたファイルからファイル名が取得できない、config指定が増えたが追随できていないなどで利用できませんが、手順としては、下記手順と同じ感じになります。
原因は、bazelの新しいバージョンで内部ファイルの扱いが変わったからみたいです。オプションで戻せるかは未確認なので、いくつかの回避策をPRしておきました。(bazel 7.1.1を利用して、--noenable_bzlmod
オプションを追加すれば回避できます。noenable_bzlmod enable_workspace。ただ依存関係のあるモジュールのバージョンが変わったりするので、不安定になるかもしれません。)
bzlmodを有効にしていると、いくつかのモジュールのパッチも追加で必要になるようです。それらのファイルをアップロードできていないので、ネットワークアクセスが必要になるようです。
bazelでネットワーク接続なしでビルドする。
基本的な概略
- 事前にモジュールなどのダウンロードは必要。
- ソースとともにモジュールファイルもアップロードする
- モジュールのダウンロード
--repository_cache=$PWD/../bazel-cache
フォルダにビルドに必要なファイルがダウンロードされます。
bazel clean --expunge
wget https://github.com/phoepsilonix/flatpak-fcitx5/raw/refs/heads/bazel-7.3.1/zip-code.patch
patch -p2 -i ./zip-code.patch
_BUILD_TARGETS="${_BUILD_TARGETS:-unix/fcitx5:fcitx5-mozc.so server:mozc_server gui/tool:mozc_tool}"
bazel build --nobuild --experimental_repository_resolved_file=resolved.bzl --repository_cache="$PWD/../bazel-cache" --config oss_linux --config release_build --noenable_bzlmod --enable_workspace $_BUILD_TARGETS
resolved.bzlファイルに詳細な情報が集まります。
- ビルドチェック
その後、ネットワークなしで、ビルドできるか試します。
キャッシュを削除して、ネットワークを遮断して試しましょう。
bazel clean --expunge
cp -a $PWD/../bazel-cache $PWD/../bazel-cache-backup
bazel build -c opt --copt=-fPIC --config oss_linux --config release_build --repotitory_cache=$PWD/../bazel-cache --linkopt "${LDFLAGS}" --noenable_bzlmod --enable_workspace $_BUILD_TARGETS
ビルドできたなら、ビルドする前の$PWD/../bazel-cache-backupフォルダを、Mozcのソースとともにアップロードできれば、OKということになります。
手順の概略は、こんな感じです。
レポジトリキャッシュそのままではなくて、モジュールのアーカイブを纏めていても可能だと思います。
distdirオプションを使う場合です。
ますはモジュールのURL情報を整理します。
wget https://github.com/phoepsilonix/flatpak-fcitx5/raw/refs/heads/bazel-7.3.1/zip-code.patch
wget https://github.com/phoepsilonix/flatpak-fcitx5/raw/refs/heads/bazel-7.3.1/resolved.jq
sed -e 's/^resolved = //' -e 's/ False/ "False"/g' -e 's/ None/ "None"/g' resolved.bzl > resolved.json
jq -r -f resolved.jq resolved.json > mozc-deps.json
mozc-deps.jsonファイルに必要なモジュールのURLが集まりました。
ダウンロードして、一つのフォルダに纏めておきます。
mkdir -p ../bazel-deps
cd ../bazel-deps
cat ../src/mozc-deps.json |jq -r '.[]| ( if ."dest-filename" != null and ."dest-filename" != "" then "wget \(.url) -O \(."dest-filename")" else "wget \(.url) -O \(.url |split("/")|last)" end )'|xargs -n3 wget -nc
cd ..src
そして、そのフォルダをdistdirで指定してビルドします。
bazel build -c opt --copt=-fPIC --config oss_linux --config release_build --distdir=$PWD/../bazel-deps --linkopt "${LDFLAGS}" --noenable_bzlmod --enable_workspace $_BUILD_TARGETS
flatpakでbuildオプションでネットワークを追加する場合
org.fcitx.Fcitx5.Addon.Mozc.yaml
に書かれてあるとおりですが、説明しておくと、
mozc-deps.yaml
にbazel-deps
ディレクトリに展開させるためのファイル一覧を記述しておく感じです。
必要なファイルのURLとハッシュを記述して、そちらから取得させ、特定ディレクトリ(bazel-deps)に展開させて、その後、ビルドコマンドを実行する手順になります。
動作チェックとしては、bazel-depsに展開させたあとbazel clean --expunge
でキャッシュをクリアさせておき、bazel build
コマンドでビルドしてみます。
これで最後までビルドが完了すれば、ネットワーク接続をビルド時に許容しない環境でも、一通りのファイルをまとめてアップロード、あるいは外部の信頼できるURLからのダウンロードが許容されている環境で、ビルド可能です。
flatpakに関しては、build-optionsのbuild-argsに--share=networkをオプションに追加すれば、ネットワークビルドも一応受け付けていたとは思います。ただ、外部モジュールは時々しか変更されません。あらかじめアップロードしておけば、あまり通信を発生させないで済むかもしれませんね。
flatpak-builderでネットワークを有効にしてビルドする場合には、次のようなオプション指定になります。ご参考まで。
diff --git a/org.fcitx.Fcitx5.Addon.Mozc.yaml b/org.fcitx.Fcitx5.Addon.Mozc.yaml
index 883d279..0610f27 100644
--- a/org.fcitx.Fcitx5.Addon.Mozc.yaml
+++ b/org.fcitx.Fcitx5.Addon.Mozc.yaml
@@ -14,6 +14,8 @@ build-options:
prepend-path: /usr/lib/sdk/llvm17/bin:/usr/lib/sdk/bazel/bin
prepend-pkg-config-path: /app/addons/Mozc/lib/pkgconfig
prepend-ld-library-path: /usr/lib/sdk/llvm17/lib
+ build-args:
+ - --share=network
env:
- server_dir=/app/addons/Mozc/lib/mozc
- document_dir=/app/ime/mozc/licenses/mozc
bzlmod
bzlmodを有効にしていると、distdirを指定していても、ネットワークがなぜ必要になるのか、確認したところ、remote_patchesをダウンロードしようとしているみたいです。repository_cacheを共有すれば、ネットワーク通信が発生しないので、パッチのファイルがdistdirに含まれていないことが原因です。
https://bcr.bazel.build/modules/apple_support/1.16.0/patches/module_dot_bazel_version.patch
https://bcr.bazel.build/modules/bazel_features/1.13.0/patches/module_dot_bazel_version.patch
:
:
これらのファイルは名前が衝突しているわけですが、distdirで指定しているフォルダに、どのように配置したらいいのだろうか?
bazelのコマンドオプションの--registryで下記のbcrフォルダを指定すると一連のファイルのダウンロードがなくなるそうです。
git clone https://github.com/bazelbuild/bazel-central-registry.git bcr
(まとめ)bzlmodを有効にした状態でのオフラインビルド
概略
- resolved.bzrから依存関係のモジュールの一覧を取得
- モジュールを一通りダウンロードしておく(bazel distdirオプション用)
- bazel-central-registryの準備(bazel regitryオプション用)
- オフラインビルド
依存モジュールのダウンロード
依存モジュール解析
ますはモジュールのURL情報を整理します。
export BASE=$PWD
git clone --filter=tree:0 https://github.com/fcitx/mozc
wget https://github.com/phoepsilonix/flatpak-fcitx5/raw/refs/heads/bazel-7.3.1/zip-code.patch
patch -p2 -i ./zip-code.patch
cd mozc/src
bazel clean --expunge
_BUILD_TARGETS="${_BUILD_TARGETS:-unix/fcitx5:fcitx5-mozc.so server:mozc_server gui/tool:mozc_tool}"
patch -p2 -i $BASE/zip-code.patch
bazel build --nobuild --experimental_repository_resolved_file=resolved.bzl --repository_cache="$PWD/../bazel-cache" --config oss_linux --config release_build $_BUILD_TARGETS
resolved.bzlから、URL情報を収集します。
wget https://github.com/phoepsilonix/flatpak-fcitx5/raw/refs/heads/bazel-7.3.1/resolved.jq
sed -e 's/^resolved = //' -e 's/ False/ "False"/g' -e 's/ None/ "None"/g' resolved.bzl > resolved.json
jq -r -f resolved.jq resolved.json > $BASE/mozc-deps.json
mozc-deps.jsonファイルに必要なモジュールのURLが集まりました。
依存モジュールのダウンロード
ダウンロードして、一つのフォルダに纏めておきます。
mkdir -p $BASE/bazel-deps
cd $BASE/bazel-deps
cat ../src/mozc-deps.json |jq -r '.[]| ( if ."dest-filename" != null and ."dest-filename" != "" then "wget \(.url) -O \(."dest-filename")" else "wget \(.url) -O \(.url |split("/")|last)" end )'|xargs -n3 wget -nc
bazel-central-registryの用意
cd $BASE
git clone --filter=tree:0 https://github.com/bazelbuild/bazel-central-registry.git bcr
オフラインビルド
ここからは、ネットワークを閉じても大丈夫です。
cd mozc/src
bazel build --config oss_linux --config release_build --linkopt "${LDFLAGS}" $_BUILD_TARGETS --distdir=$PWD/bazel-deps --registry=file:///$BASE/bcr/
日本語入力関係のURLメモ
RUST製
Zenzai
上記をFcitx5拡張機能としているもの。辞書の相互変換。
参考情報