それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Googleドキュメントでクォートの変換をやめさせる。シングル・ダブルクォーテーションの自動置換を停止

Google ドキュメントは、クォートがきれいにされる、

Googleドキュメント全般において、ダブルクォーテーション・シングルクォテーションは、入力時に文字が変換される。

" / ' を入力した例。

該当する設定=スマートクォート

スマートクォートがONになっていると上記のように、"a" →“a“  に引用符に変換される。

設定は、Googleスライドの場合次の場所にある。

ツール→設定→全般→スマートクォート

置換されることは「ある意味で正しい」

引用符には、いくつかあって文章ではを使うのが正しいので、Googleドキュメントの挙動はある意味正しい。

クォテーションの正しいありかた。

ただしソースコードのコピペなどでは、" をつかう。

上段がソースコードで使われるダブルクォーテーション。

下段が文章で使わるダブルクォーテーション。

クォテーションを自動修正させない。(方法1:全般設定)

スマートクォートをオフにすると、Googleドキュメントでは自動修正を防いで文章的にで正しいクォテーションをソースコードで使うソースコードで正しいクォテーションにする。

クォテーションを自動修正させない(方法2:都度入力)

日本語のIMEを使っていれば、入力時に指定して明示的に入力することでGoogleドキュメントでは正しく入力できる。

Google IMEの例。

意図通り入力できる。

この設定が必要な箇所

Google ドキュメント・スライドで文章を書いているとき、この違いを意識しておく必要がある。

Wireguard で v6を通す

Wireguard で v6を通す

Wireguard でv6 通信も通したい。

設定の流れ。

基本的には、v4 アドレスを足すのと同じ手順。

今回は、ルーター側がLinux(openwrt)なので、ルーター側のNAT/FW設定はiproute2/ip6tablesコマンドです。

ルーター

ルーター側wg0に、v6ローカルアドレスを追加、接続先のv6 アドレスを追加

[Interface]
Address = 172.16.4.1/24, fd00:facc:810:893::1/64
                         # ↑ v6 アドレス追加
[Peer]
AllowedIPs = 172.16.4.1, fd00:facc:0810:0893::3
                         # ↑ v6 アドレス追加

PC側(クライアント側)

[Interface]
Address = 172.16.4.3/24, fd00:facc:810:893::3/64
                         # ↑ v6 アドレス追加
[Peer]
AllowedIPs = 0.0.0.0/0, ::/0
                         # ↑ v6 アドレス追加

これで、通信できるようになる。

ルーター側にNATを仕込み、v6 NATで出ていく。

ルーター側では、v6 NATを仕込んであげる。

LAN_IF=wg1
WAN_IF=eth1

ip6tables -I FORWARD -i $LAN_IF -o $WAN_IF -j ACCEPT
ip6tables -I FORWARD -i $WAN_IF -o $LAN_IF  -j ACCEPT -m conntrack --ctstate RELATED,ESTABLISHED
ip6tables -t nat -I POSTROUTING -o $WAN_IF -d ::/0 -j MASQUERADE

経路の追加

v6の経路を確認。

ip -6 route show

経路がない場合は、経路を追加してあげる(通信相手を考えて経路追加)

WAN_IF=eth1
GW=$( [[ $(ip neigh show dev $WAN_IF ) =~ (fe80[0-9a-f:]+) ]] ; echo ${BASH_REMATCH} )
echo $GW
ip -6 route add from ::/0 to 2001:a7ff:ff63:1::a via $GW dev eth1
ip -6 route add from ::/0 to 2001:a7ff:ff47:101::1 via $GW dev eth1

疎通確認

フレッツ・クラブのIPアドレスを使って通信を確認しよう。

www.flets-west.jp 2001:a7ff:ff47:101::1
assv.asc.flets-west.jp 2001:a7ff:ff63:1::a

この2つが通れば通信ができるようになる。

wireguard でipv6 通信

wireguard でもv4 と同じ箇所にv6 アドレスを追記すればいいとわかった。

単純な方法で、なんとか、v6 NAT で通信ができるようになる。同じにかけるという点が大きい。

v6 nat について

むかしは、ipv6 ではNATは不要になるとか、なんとか言ってる人もいたし、それを突き詰めてv6 ではNATできないとかいうトンデモな設問を見たこともあるが。

v6 でも VPNのようなL3接続はNATでないと接続がめんどくさい(v4と同じ手法でかけない)。なので、やっぱりNATはあったほうがいい。

MySQLの全文検索を日本語対応にする/Mattermostの日本語検索ができない問題に対応

現れた問題点

Mattermostの日本語検索ができない

MattermostはMYSQL全文検索を使っている

MYSQL全文検索について設定する

N-gram(2-gram) で検索されない

ASANAみたいな単語は、AS-SA-AN-NA に分割されてN-gram(bi-gram)になって、MYSQLAS / AN がストップワードなので、検索されなくなります。

そこで、ngramを小さくした上で、ストップワードをオフにします。 そもそも、日本語では、英単語を単なる熟語として採用しているだけであり、検索キーワードそのものです。ストップワードする意味がありません。

/etc/mysql/mysql.conf.d/mysqld.cnf

## 2022-11-14 takuya
## https://dev.mysql.com/doc/refman/5.6/ja/fulltext-fine-tuning.html
[mysqld]
innodb_ft_min_token_size=2
ft_min_word_len=2
innodb_ft_enable_stopword=OFF

ubuntu でのファイルの場所

ubuntu では mariadb / mysql の互換性を考えていっぱいファイルが有るのですが。mysqld.conf に設置するのが基本らしい

takuya@Gitlab:~$ sudo tree /etc/mysql
/etc/mysql
├── conf.d
│   ├── mysql.cnf
│   └── mysqldump.cnf
├── debian-start
├── debian.cnf
├── my.cnf -> /etc/alternatives/my.cnf
├── my.cnf.fallback
├── mysql.cnf
└── mysql.conf.d
    ├── mysql.cnf
    └── mysqld.cnf

2 directories, 9 files

再起動で mysqld.conf を反映

sudo systemctl restart mysql

再起動後の設定反映の確認

$ sudo mysql;
mysql > SHOW VARIABLES LIKE 'innodb_ft_enable_stopword';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| innodb_ft_enable_stopword | OFF   |
+---------------------------+-------+
1 row in set (0.05 sec)

設定をインデックスに反映する。

インデックスを再構築するのだが、innno_db においては、OPTIMIZE table すればいい

インデックスの再構築

$ sudo mysql;
mysql > use mattermost_production_db;
mysql > OPTIMIZE TABLE Posts;

インデックスの再構築は少し時間が必要なので注意。

ファイルサーバーを整理するために重複ファイルを探す

ファイルサーバーを適当に使ってたので、同じファイルが大量にある。

本当はbtfs を使えばいいんだろうけど、ext4 を使っているので重複ファイルの排除が手間です。

とりあえず、サクッと重複ファイルを探す

md5sum で重要するハッシュ値を探す。

サクッとカレントディレクトリ以下の重複ファイルを検出する。

md5-gen-list.sh

#!/usr/bin/env bash


IFS=$'\n'

FILE=filenames.txt
MD5LIST=md5-list.txt


truncate -s 0  ${MD5LIST}
truncate -s 0  ${FILE}

/usr/bin/find .  -type f > $FILE

size=$( cat ${FILE} | wc -l  )


echo $size

cat ${FILE} | while read i
do
  (( cnt++ ))
  percent=$( echo  "scale=3;${cnt}/${size}" | bc  )
  percent=$( echo  "scale=2;${percent} * 100 " | bc  )
  echo "$cnt/$size ( $percent )"
  echo md5sum ${i@Q}
  ## 全部読み込むと非効率なので、先頭10MBで十分とする
  #md5sum ${i} >> ${MD5LIST}
  echo $(dd if="$i" bs=1M count=10 2> /dev/null | md5sum -b | sed -e "s/\*-//" ) $i >> ${MD5LIST}
done

md5sum / sha256sum などは全部のファイルを読み込む

全部のファイルを読み込んで指紋(ハッシュ)を計算する。ちょっとファイルの重複を手作業で調べるときにはとても不便である。

大量のファイルを「すべて読み込む」必要があるのが、ShaSUMであり、md5sum である

先頭1MB程度を読み込めば十分な気がする。念のため10MB を読み込めばいいのだろう。厳密に比較すると絶対に使えないが、どうせ似ているファイルを手作業で仕分けるのだから先頭を見れば十分な気がする。UbuntuのISOファイルとかその辺に散らばってるし。ファイル名を見れば整理できるけど、ファイル名を見るのすら面倒なので。

とりあえず、先頭数MBを読み込んで重複を検出しファイルを絞り込むことで時短を狙う。

バイナリを読み込む

シェルスクリプトは文字列を前提としている、などと言われるがバイナリを扱うことも置い

2MB を読み込む例

dd if=filename bs=1M count=2

dd は使いやすいバイナリ読み込みコマンドである。もし2MB未満なら、ファイル全体を読み込んでコマンド終了である。パディング処理はされない。

重複の検出

md5sum であれば次のように

cat md5-list.txt  | sort | uniq -w32 -dD

こえは、md5sum の結果が32文字になることを利用している。

重複ファイルを調べて削除

重複ファイルを、目で見て確認して同じファイルなら削除する。

npm やwordpress のファイルが大量に出てくるんですよね。やっぱりBtrfsなどを使って自動的に処理したほうが良さそうな気がする。

OpenSSH8.8からSHA-1のRSA鍵は無効に

ssh しようとしたら、出来ない。

サーバーのホスト🔑鍵ファイルが弾かれる。あれれと思って見直した。

Unable to negotiate with 192.168.4.1 port 22: no matching host key type found. Their offer: ssh-rsa

RSA 鍵が無効化された

仕方ないので許可をすることに(暫定

.ssh/config(追加)

HostKeyAlgorithms=+ssh-rsa
PubkeyAcceptedAlgorithms=+ssh-rsa

これは暫定でいけますが、将来的展望を見ると、SHA1-RSA自体を廃止して、ホスト鍵やクライント鍵を書き換えたほうがいいかもしれません。

今回は、ホスト鍵を許可する設定をクライントに入れました。

過去にも似たようなことがDSAであったらしい

https://www.freedom.ne.jp/hide/hogehoge/?p=1020

SHA1 の「ホスト鍵」ってそんなに危険ですかねぇ。ローカルについてはそんなに気にしなくて良いとおもうけど。

非推奨のSHA1を使うのはアカンけど。ホスト鍵だぜ・・・SSHホスト鍵がなりすましされるって、IP通信の経路を捻じ曲げてなりすましされるってことですから、LAN内部で起きようがないので、ローカルサーバーについては上記の設定で問題がないのです。

ただ、v6だとかグローバル空間では暫定対策でなく。ホスト鍵を差し替えたほうがいいと思われます。

関連資料

https://atmarkit.itmedia.co.jp/ait/articles/0603/09/news117.html https://scribble.washo3.com/openssh88-disable-rsa.html https://qiita.com/ponsuke0531/items/6c522c56cce6b86e72ad

sed コマンドで区切り文字を変えて、ファイル名に一致させる

sed の区切り文字を変える

sed コマンドでは、検索と置換の文字列を区切りを変えられます。

普通はスラッシュを使うと思うんだけど、スラッシュはフォルダ名やPATHで使われるため、エスケープ処理が面倒になる。

sed 's/search_name/takuya/g';

区切りを変える

sed 's|search_name|takuya|g';

その他にも記号を使える

その他の記号を使えるので、置換対象の文字列がURLの場合や、ファイル名の場合、エスケープが少なくなるように区切りを変えるのはいい方法だと思う。

takuya@:~$ echo abcd | sed -e 's/b/x/g'
axcd
takuya@:~$ echo abcd | sed -e 's#b#x#g'
axcd
takuya@:~$ echo abcd | sed -e 's$b$x$g'
axcd
takuya@:~$ echo abcd | sed -e 's%b%x%g'
axcd

sed コマンドは便利。つねに他の使い方も考えておきたい。

windows のサジェストがついに拒否できなくなった。

windows でスタートメニューに表示されるレコメンド

Win-Sのサーチを入れる箇所を空っぽにすると、レコメンド(suggestion)が出現するようになった。

とても目障りなので削除しようとしたが、どうやっても削除できない

設定のスタートメニュー項目を探すが

ここをすべてオフにすれども、サジェストは消えない。

ここに、設定が出てくるということはデフォルトApp設定がオフである。

Windows now blocks Edge browser competitors from opening links | Ctrl blog

USB-Cよりこういうのを規制してほしい。

こうやって、Adsで囲い込むの、本当に違法にしてほしい。

LightningケーブルやUSB type C より、こういうのを規制してほしい。本当に。 デフォルトを上書き可能にするとセキュリティ的に問題があるとしてもだ。セキュリティ通知以外でこのように乱用されるのは好ましくない。

結局、規制してもダメでした。ってなるので、OS提供社が自社のコンテンツやソフトウェアを他社が出せないところに出すのを禁止してほしい。

ちなみにtype C は規格が乱立していて、通信USB 3/4/2/DPサポートのType-Cがあって、電源規格もQuick/PDなど乱立している。Type-Cは使いにくくなった。もうType-Cは見た目だけでは区別がつかないので、Type-Cの判別専用機が必要になると思う。

qcow2 の容量が減らない。Sparseにしてるのに減らない。

qcow2 の容量が減らない。 使ってないのに減らない。

使用してないディスク容量は開放されるはず・・・だけど変わらない。

qemu-img convert -c -O qcow2 image.qcow2 shrinked_image.qcow2

何度も qemu-img を試してもファイルサイズが同じになる。。。

$ ls ubuntu-* -alht
-rw-r--r-- 1 libvirt-qemu kvm  140G Sep  6 03:31 ubuntu-root.qcow2
-rw-r--r-- 1 root         root 140G Sep  6 03:03 ubuntu-root.06.qcow2
-rw-r--r-- 1 root         root 101G Sep  4 14:51 ubuntu-root.04.qcow2

なんで、こんな事が起きるのかが分からずにパニックになる。

冷静になったたら、このディスクはbtrfs であると気づく

きっとbtrfs が古いファイルへの参照を持っている。

btrfs で古いファイルへの参照を消して、開放する。

デフラグして、参照を整理

sudo btrfs filesystem defragment -r /

古い参照をスクラブ

btrfs scrub start /
btrfs scrub status /

スクラブが終わるまでじっと待つ。

UUID:             xxxxxx-x-x-xx-x-x-x
Scrub started:    Tue Sep  6 04:10:03 2022
Status:           running
Duration:         0:01:05
Time left:        0:00:05
ETA:              Tue Sep  6 04:11:13 2022
Total to scrub:   75.48GiB
Bytes scrubbed:   69.80GiB
Rate:             1.07GiB/s
Error summary:    no errors found

デフラグして、参照を整理

sudo swapoff /swap.img
sudo btrfs filesystem defragment -r /

スクラブしたら、sparse へ変換をもう一度試す。

 sudo virt-sparsify out.qcow2 out.sparse.qcow2

関連資料。

https://takuya-1st.hatenablog.jp/entry/2022/04/18/135921

Linux作業中で一時的に短いパスワードを設定するには

リカバリ中など作業中に一時的に短いパスワードにしたい。

長いパスワードを設定していると、作業中に入力ミスが頻発して嫌だ。

ユーザ権限では変えられない。

takuya@ubuntu:~$ passwd
takuya 用にパスワードを変更中
Current password:
新しいパスワード:
新しいパスワードを再入力してください:
Bad: new password cannot be a palindrome
新しいパスワード:
新しいパスワードを再入力してください:
長いパスワードを選択する必要があります

解決策。ROOT権限でパスワードを設定すればいい

takuya@ubuntu:~$ sudo su
root@ubuntu:/home/takuya# passwd takuya
新しいパスワード:
新しいパスワードを再入力してください:
passwd: パスワードは正しく更新されました
root@ubuntu:/home/takuya#

pam.d をいじる方法もあるけれど

pamをいじってpasswd に関する制限を取っ払う方法もあるけれど、管理者から強制上書きするのが楽だと思います。

splatoon3 のデータを s3sで stat.ink に定期的にアップロード

stat.ink にバトル結果を自動的にアップロード

バトル結果をアーカイブ保存できて便利です、戦歴を見直して対策を立てられます。

コードの取得

git clone https://github.com/frozenpandaman/s3s.git

実行準備 / python 環境の準備

cd s3s
export PIPENV_VENV_IN_PROJECT=1
pipenv install 
pipenv shell 

pipenv 環境下で作業をします。

最初に依存モジュールを用意しておきます。

(s3s) pip install -r requirements.txt

APIキーを用意します。

Stat.inkにデータを投稿するためのAPIキーを、Stat.inkから取得します。

https://cdn-ak.f.st-hatena.com/images/fotolife/t/takuya_1st/20200409/20200409045324.png

ニンテンドーAPIセッションキーを取得します。

初回起動でセッションキーを登録します。

((s3s) ) takuya@:s3s$ ./s3s.py -r
Generating new config file.
s3s v0.1.11
» While s3s is in beta, please update the script regularly via `git pull`.

stat.ink API key: XXXXXXXXXXXXhdAqlouPGxxxxxxxxxx

言語を聞かれるので、en-USでいいと思いますが、ja-JPも使えるみたいなので指定しました。

Default locale is en-US. Press Enter to accept, or enter your own (see readme for list).
ja-JP

リンクが表示されます。表示されたHTTPから始まるリンクをクリック

Checking if there are previously-unuploaded battles/jobs...
Blank token(s).
Please log in to your Nintendo Account to obtain your session_token.

Make sure you have fully read the "Token generation" section of the readme before proceeding. 
To manually input a token instead, enter "skip" at the prompt below.

Navigate to this URL in your browser:
https://accounts.nintendo.com/connect/1.0.0/authorize?state=xxxxxxxxxxxxxxx&theme=login_form

認証済みセッションを作ったら、「この人にする」を右クリックして、リンク先をコピーします。

コピーしたリンク先のURL App Schema をコピーして貼り付けます。

Log in, right click the "Select this account" button, copy the link address, and paste it below:
npf71b963c1b7b6d119://auth#session_state=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx3VV2ftKJ7lNVxxxxxxxxxxxxx

これで準備は完了です。

初回起動後に、自動的にアップロードが始まります。

次回以降の起動の手順

起動手順は、次の通りになります。これをCron/Systemdなどに登録しておけばいいと思います。

cd /home/takuya/.s3s
## pyenv init 
HOME=/home/takuya
source ~/.bashrc
eval "$( /home/takuya/.pyenv/bin/pyenv  init -)"
export PATH=/home/takuya/.pyenv/shims/:$PATH

# update 
echo update ....................
git pull 
# update pip
pipenv run pip install --upgrade pip
pipenv run pip install -r requirements.txt  --upgrade
# upload battle results
echo uploading .........
echo ''
pipenv run python ./s3s.py -r -t
pipenv run python ./s3s.py -r
pipenv run python ./s3s.py -osr

systemd の例

サービスユニット

s3s.service

[Unit]
Description=Splattoon s3s

[Service]
WorkingDirectory=/home/takuya/.s3s
ExecStartPre=/usr/bin/git pull
ExecStartPre=/home/takuya/.s3s/.venv/bin/python pip install --upgrade pip
ExecStartPre=/home/takuya/.s3s/.venv/bin/python bin/pip install --upgrade -r  requirements.txt
ExecStart=/home/takuya/.s3s/.venv/bin/python    s3s.py -r
ExecStartPost=/home/takuya/.s3s/.venv/bin/python    s3s.py -r

#Restart=always
#RuntimeMaxSec=600
; User=takuya
; Group=takuya
[Install]
WantedBy=default.target

タイマーユニット s3s.timer タイマーファイル splatnet2ink.timerを作成しておく

[Unit]
Description=Splattoon s3s schedule timer

[Timer]
OnCalendar= hourly
RandomizedDelaySec=10
Unit = s3s.service

[Install]
WantedBy=default.target

ユーザー空間なら、次のところにファイルを作って起動する。

## ユーザ向け
mkdir -p ~/.config/systemd/user/
## または システム
mkdir -p /etc/systemd/user/

systemdをリロードして ユーザー unit を登録

systemctl --user daemon-reload

起動してチェック

systemctl --user status s3s.service
systemctl --user start s3s.timer
systemctl --user status s3s.service

有効化

systemctl --user enable s3s.service
systemctl --user enable s3s.timer
systemctl --user start s3s.timer

サーモンがない。

stat.ink のサーモンランのアップロードが無いの悲しい

バンカラ・マッチはバグが多いので年末まではやらないつもりなので、サーモンランしかやってない。だけどサーモンランの記録を残せない。悲しい。

定期実行時

git のマージの戦略が未設定だと、警告が出てくる。

hint:   git config pull.rebase false  # merge (the default strategy)
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only

ローカルにクローンしたファイルを触らないのだからマージが必要ない。 その理由からff を選んでおいた。

git config pull.ff only

Lenovo のシリアルポートを購入してBIOSにアクセスる

Lenovo のシリアルポートを購入したい。

シリアルポートは、オプショナルポートとなっていて、個人用には販売してくれないとのこと

だったら法人で攻める。送料 1500円/ 個 です。

M75q-tiny でシリアル・ポートを使いたい。

サービス部品を探したら、うってる。

01AJ936 / 04X2733

01AJ936 について

電話きた、受注できません。在庫無いです。 ハード的には付いてるんだけど

04X2733 のほうがいい

問い合わせてみた 0120-000-817

届いたので取り付けた

BIOSのリダイレクトが効いてる!やったね。

Raspi 経由でシリアル・コンソールを使ってThinkCentreにアクセスした。

メーカーソフトウェアによるUEFI/BIOSの機能がコンソール・リダイレクトはちょっと不安定。OSを選ぶしね。レノボのは特にイケてない。

なので、Raspiを繋いでシリアルで繋いだほうがアクセスが快適だった。

これでThinkCentreを複数台を安心してリモートに放置できる。

openwrt で ipset をfirewall のルールに書く

openwrt で ipset をfirewall のルールに書く

ipset を使って openwrt の firewall ルールを記入する

目的

ipset を使ってルールを完結に書きつつ、OpenWRTのWEB-UI(luci)と連携したい

準備

ipset を準備する。

opkg install ipset

ipset コマンドの使い方の確認

ipset にテーブル(リスト)を作って、そこにデータをいれて、中身をみて、リストを消す方法。最初に覚えておいてサクッと確認する。

ipset list 
ipset create my_list hash:ip 
ipset add my_lisrt 192.168.1.1/32
ipset list my_list 
ipset list -n 
ipset destory my_list

ipset を firewall ルールに追加する

openwrt の firewall は ipset のルールを使用可能なので、マニュアルにしたがって記入する。

以下の設定例は、ファイルに記載されたIPアドレスをipset に読み込んでリスト表を作成する。

記入例

config ipset
    option name 'public_dns'
    option storage 'hash'
    list match 'dest_ip'
    option enabled '1'
    option family 'ipv4'
    option loadfile '/root/my-ip-list.txt'

ファイルに記載されたIPアドレスを読むこんで、IPSetのリスト表が作成される。

再起動して確認。

service firewall restart
ipset list public_dns

記述ミスがあると、再起動しても反映されない。

Warning: Option @ipset[0].storage has invalid value 'hash:xxx'

Warning と出てくるが、実際にはエラーである。記述を見直してエラー修正して、再起動

設定例2 / 日本のv4アドレスに限定する。

設定例2

config ipset
    option name 'jp_addr_list'
    option storage 'hash'
    list match 'src_net'
    option enabled '1'
    option loadfile '/etc/jp_addr_list.txt'

最初の例と違って、IPアドレスではなく、ネットワーク範囲で指定している。 ファイルの記述例 / jp_addr_list.txt

153.120.0.0/13
153.128.0.0/13
153.136.0.0/14
153.140.0.0/15
153.142.0.0/16
153.143.0.0/19

作成済みIPSet を使う

IPSetを使ったファイアウォールのルールを記述する。

名前を使って、IPSetのリスト名を指定する。

config rule
    option ipset 'public_dns'

設定例

config rule
    option src 'lan'
    option dest 'wan'
    option ipset 'public_dns'
    option target 'REJECT'
    option device 'my-pppoe'
    option direction 'out'
    option family 'ipv4'
    option name 'reject public dns '

上記の設定例はpublic_dns へのFORWARDを拒否する。public_dns を使わせないようにする設定を書いて、DNSサーバーで監視するGoogle HomeやTP-linkを締め出す設定例。

設定のマニュアル

指定可能な項目は、OpenWRT wiki にマニュアル記載があるので、細かい指定はマニュアルを参照すると良い。

journald の ログをクリアする方法

再起動で消す

ログ保存を減らす(journald)ことで消す

journald の設定を変えて、ログ保存量を減らす。

sudo -E vim /etc/systemd/journald.conf
sudo systemctl restart systemd-journald   

/etc/systemd/journald.conf

[Journal]
Storage=persistent
SystemMaxUse=100M
RuntimeKeepFree=5G
RuntimeMaxUse=1G

設定を書いて再起動すると、消えます。

しかし、思ったようにきれいにならないかもしれない。

今すぐ消す

1秒前より以前のログをすべて消す。このコマンド使って全ログを抹消できる。

sudo journalctl --vacuum-time=1s

消えるものは、journalctl関連です。syslogへ転送されたログファイルは対象外です。syslog の自動削除はlogrotate が担っています。

journald の ログをクリアする( rm -rf )

ファイル自体を消しちゃうという手もある。

$ sudo find /var/log/journal -name "*.journal" | xargs sudo rm 
$ sudo systemctl restart systemd-journald

メモ

vacumm だとなぜかきれいにならないことがある。

Storageがメモリになってるときれいにならないかもしれない。

dmesg を tail -f したい

「dmesg を tail -f したい」と考えた。

dmesg の内容は journaldを経由して syslog に流れているはずなので、dmesg をずっと見る必要はないと思う。でも syslog があてにならないと言った状況では、dmesg を tail したいとなる。

dmesg を tail して監視する

dmesg -W | grep -i tty

これを使うと、dmesgから出てきたものを継続的に監視ができた。

syslog設定中にsyslog のフィルタを比較するときに便利だった。

また syslog 前にログを捨ててしまうような OpenWRT で役に立った。

参考資料

virsh で他サーバーを扱いたい(virsh 使ってssh経由で起動,再起動,コンソール)

virshコマンド で他サーバーを扱いたい

virsh コマンドで自ホストではなく、SSH経由で別サーバーを扱いたい。

virt-manager ができるんだから、virshコマンドでもできるはずだ。と考えて調べたら解決策があった。。

解決策 / 環境変数を使う。

LIBVIRT_DEFAULT_URI

ローカルの場合(デフォルト)

LIBVIRT_DEFAULT_URI=qemu:///system #{cmd}`

たとえば、SSH経由で別サーバーに接続する場合

## 環境変数に追加
export LIBVIRT_DEFAULT_URI=qemu+ssh://takuya@10.1.1.1/system
## virsh でリモート操作
virsh list

python パッケージだとか、面倒なものを入れなくても、virsh + ssh 接続だいたいの不満は解決すると思いますよ。