Linux Tips: Difference between revisions

13,141 bytes added ,  9 December 2023
no edit summary
No edit summary
No edit summary
 
(115 intermediate revisions by the same user not shown)
Line 1: Line 1:
*ubuntu 16.04 systemd 環境の varnish  
*たんなるメモ
いろいろお便利なコマンド
<syntaxhighlight lang="bash" enclose="div">
apt list '~c'
apt purge '~c'
 
apt --purge autoremove -y
</syntaxhighlight>
 
 
*たんなるメモ
<syntaxhighlight lang="bash" enclose="div">
npm --omit=dev --omit=optional ls --all
</syntaxhighlight>
 
*debian bookwormメモ
大きな変更。そろそろ来ると思ってたが rsyslog がなくなり systemd journal を使う。merged-/usr が必須。このあたりは時代の流れ。自分のOSSビルド環境で /bin から /usr/bin に変わったプログラムのシンボリックリンク切れが起きて結構はまったw
 
https://www.debian.org/releases/stable/i386/release-notes/ch-information.ja.html
 
python系の変更には注意して運用する。
<syntaxhighlight lang="text" enclose="div">
5.2.2. python インタプリタは externally-managed としてマークされます
 
Debian が提供する python3 インタプリタパッケージ (python3.11 および pypy3) は、PEP-668 に従って externally-managed とマークされるようになりました。Debian で提供されるバージョンの python3-pip はこれに伴って、--break-system-packages オプションが指定されない限り、Debian の python インタプリタ環境へ手作業でのパッケージインストールを拒否します。
 
Debian ではパッケージ化されていない Python アプリケーション (あるいはバージョン) をインストールする必要がある場合、(pipx Debian パッケージにある) pipx を使ってのインストールを推奨します。pipx は他のアプリケーションやシステムの Python モジュールから隔離された環境をセットアップし、アプリケーションとその依存関係をその環境へインストールします。
 
Debian ではパッケージ化されていない Python ライブラリモジュール (あるいはバージョン) をインストールする必要がある場合、可能であれば virtualenv へインストールするのを推奨しています。virtualenv は Python 標準ライブラリモジュールの venv (python3-venv Debian パッケージ内)、あるいは Python サードパーティツールの virtualenv (virtualenv Debian パッケージにあります) で作成できます。例えば、pip install --user foo を実行するのではなく、任意の virtualenv にインストールするのに mkdir -p ~/.venvs && python3 -m venv ~/.venvs/foo && ~/.venvs/foo/bin/python -m pip install foo を実行します。
 
詳細については /usr/share/doc/python3.11/README.venv を参照してください。
</syntaxhighlight>
 
*avahi-browse や avahi-resolve が答え返さない問題
ホスト名に勝手にシリアル番号を付ける問題に対応した設定が原因だった。どちらが運用上いやなのかを考えて、avahi-browse や avahi-resolve は捨てて mdns-scan 使うw
 
勝手にシリアル番号追加問題の回避策
<syntaxhighlight lang="bash" enclose="div">
cache-entries-max=0
</syntaxhighlight>
 
*Ubuntu無題w
<syntaxhighlight lang="bash" enclose="div">
#!/bin/sh
 
systemctl stop snapd.socket
systemctl stop snapd
systemctl disable snapd
systemctl disable snapd.socket
 
systemctl stop snapd.failure.service
systemctl disable snapd.failure.service
 
systemctl stop snapd.snap-repair.service
systemctl disable snapd.snap-repair.service
 
systemctl stop snapd.mounts-pre.target
systemctl disable snapd.mounts-pre.target
</syntaxhighlight>
 
*雑多なメモ
忘れてた。久しぶりに boot してこないと console をつなげたら...fsck中...
 
そのままメンテナンスモードからマルチユーザモードにしてしまったら、いわゆるデバイス番号が変わってたw UUID でマウントしてるから問題は起きなかったが、昔々大チョンボしたパターンw
 
おまじないは忘れずにw
<syntaxhighlight lang="bash" enclose="div">
tune2fs -c -1 -i 0 /dev/sda2
</syntaxhighlight>
 
*雑多なメモ
binary file 探す。(今までは find でいろいろ駆使しながらやってたがこれがシンプルね)
<syntaxhighlight lang="bash" enclose="div">
grep -rIL .
</syntaxhighlight>
 
*雑多なメモ
SSDを容量のギリギリまでつかうのなら discard 付けとけ。でないと遅杉。fstrim じゃぁ追いつかねぇw
 
*make の j オプション
これにしておけば良いらしい
<syntaxhighlight lang="bash" enclose="div">
make -j$[$(nproc)+1]
</syntaxhighlight>
 
*smartmontools アプデ
<syntaxhighlight lang="bash" enclose="div">
update-smart-drivedb --trunk --no-verify
</syntaxhighlight>
メジャーメーカーなのにまだ db にないのもあるな。(中華SSDもけっこうdbにはいってるw)
 
*雑多なメモ
<syntaxhighlight lang="text" enclose="div">
pmd_set_huge: Cannot satisfy [mem 0xf8000000-0xf8200000] with a huge-page mapping due to MTRR override.
</syntaxhighlight>
 
なんか kernel option に enable_mtrr_cleanup がいるっぽい。
 
ちょっと古いPC(Win11非対応機種の値崩れ品w)に限界までメモリー積んだ(DDR3驚くほど安いねw)ので、ちょっと古い(入手できる最新にはあげたが...)BIOSが原因っぽい。
 
*BIOS update 後ブートしない
FAQらしい。EFI bootloader を再インストールする必要がある。外部メディアから resuce モードで boot してうんぬん。
 
https://wiki.debian.org/GrubEFIReinstall
 
楽な方法もあった。BIOS 関連のメニューに "Run UEFI Application" なる設定があれば、起動EFIパーティションにあるはずの grubx64.efi を指定して OS を boot して、grub-install /dev/sda, update-grub すればよい。BIOSいじってて、また boot しなくなって焦っていろいろやってみたら出来たw
 
*USB 3.x のストレージなのに遅い
lsusb で確認しても 5Gbps なのでちゃんと認識はしている。5Gbps といえば ATA と遜色ないスピードなのに桁違いに遅い。いろいろホゲると... lsblk -t でみたら RQ-SIZE が 2 だ。これじゃパフォーマンスでない。美しい設定方法を探したがわからず(udev使うとかで出来るのかもしれないが)野蛮な方法で変更した。
 
<syntaxhighlight lang="bash" enclose="div">
echo 16 > /sys/block/sdX/queue/iosched/fifo_batch
echo 3 > /sys/block/sdX/queue/iosched/writes_starved
echo 5000 > /sys/block/sdX/queue/iosched/write_expire
echo 500 > /sys/block/sdX/queue/iosched/read_expire
echo 64 > /sys/block/sdX/queue/nr_requests
echo 128 > /sys/block/sdX/queue/read_ahead_kb
echo 0 > /sys/block/sdX/queue/add_random
#echo 0 > /sys/block/sdX/queue/iostats
</syntaxhighlight>
 
*disk増設した
macos で GUID なパーティション切ってたので gdisk でtype 変えた(Linux filesystem 8300) 。あとは UUID の確認は blkid
 
*ionice
昨今の IO scheduler って mq-deadline らしくって、ionice が効かないとの事。また一つ賢くなったw
 
*PCRE2 と PCRE3
ちょっと調べてたらビックリ。pcre3 が古いのね。pcre2 が最新だと思ってたら 3 が有ったのであれあれって調べたらなんと逆だ。perl3互換ということの3だろうが...
 
駄菓子菓子w 少し前の ubuntu のパッケージにリンクされているのは libpcre3-dev なのだ。 perl5 互換重要ということか... 新しめの ubuntu はほぼ pcre2 になっとる。
 
*tcp_wrappers IPv6
IPv6 については CIDR 表記ができる
<syntaxhighlight lang="text" enclose="div">
ALL : [3ffe:505:2:1::]/64
</syntaxhighlight>
 
*ccache 4.1 が遅い
compression がデフォで有効になっていた。非力な環境なので無効にした。
<syntaxhighlight lang="yaml" enclose="div">
compression = false
</syntaxhighlight>
 
すでに圧縮されちゃったキャッシュはこのコマンドで戻る。
<syntaxhighlight lang="bash" enclose="div">
ccache --recompress uncompressed
</syntaxhighlight>
 
さらに、これはやりすぎかもしれないが...
<syntaxhighlight lang="yaml" enclose="div">
sloppiness = include_file_mtime, include_file_ctime, time_macros, pch_defines, file_stat_matches, locale
</syntaxhighlight>
 
やはりやりすぎだった。ある状況で間違ってビルドされた。いまは time_macros, pch_defines のみで検証中。
 
*varnish 起動ミス
超ワークアラウンドだが、/etc/rc.local に書いておく
<syntaxhighlight lang="bash" enclose="div">
/usr/bin/install -o varnishlog -g varnish -d /run/varnish
/usr/bin/install -o varnishlog -g varnish -d /run/varnishlog
/usr/bin/install -o varnishlog -g varnish -d /run/varnishncsa
</syntaxhighlight>
 
*壊れた symlink 一覧
<syntaxhighlight lang="bash" enclose="div">
find . -xtype l
</syntaxhighlight>
 
*icu めも
[http://apps.icu-project.org/datacustom/ ICU Data Library Customizer]
<syntaxhighlight lang="bash" enclose="div">
icupkg icudt57l.dat icudt62l.dat -w
</syntaxhighlight>
 
*めもめも
<syntaxhighlight lang="bash" enclose="div">
cat /sys/devices/system/cpu/vulnerabilities/l1tf
</syntaxhighlight>
 
*HTTP/2 化
hitch + varnish5 で簡単
 
<syntaxhighlight lang="bash" enclose="div">
curl -L https://packagecloud.io/varnishcache/varnish5/gpgkey | sudo apt-key add -
echo "deb https://packagecloud.io/varnishcache/varnish5/ubuntu xenial main" | sudo tee -a /etc/apt/sources.list.d/varnishcache_varnish5.list
sudo apt-get update
</syntaxhighlight>
:varnish6 はまだ安定しないので 5.x を使う
 
varnish の起動オプションに追加
<syntaxhighlight lang="text" enclose="div">
-p feature=+http2 -p thread_pools=2 -p thread_pool_min=450 -p thread_pool_max=5000 -p syslog_cli_traffic=off -t 120
</syntaxhighlight>
 
hitch.confに追加
<syntaxhighlight lang="text" enclose="div">
alpn-protos = "h2, http/1.1"
</syntaxhighlight>
 
*https 化
そろそろヤバイので https 化した。現在の構成が apache2 + varnish なので、いろいろ調査した結果 hitch を使うことにした。
[http://hitch-tls.org/ http://hitch-tls.org/]
 
Ubuntu のパッケージは古かったので PPA で導入。
[https://launchpad.net/%7Elasse-karstensen/+archive/ubuntu/hitch Ubuntu PPA aiming for latest hitch on latest ubuntu.]
 
<syntaxhighlight lang="bash" enclose="div">
sudo add-apt-repository ppa:lasse-karstensen/hitch
sudo apt-get update
sudo apt-get -y install hitch
</syntaxhighlight>
 
hitch + varnish + apache2 + Let's Encrypt の統合の参考はこれが良かった。
[https://docs.varnish-software.com/tutorials/hitch-letsencrypt/ Let's Encrypt with Hitch and Varnish (CentOS7) Tutorial]
 
Ubuntu のパッケージに letsencrypt というのがあるが、これは古くて hitch 対応してないらしいので PPA 導入。
[https://launchpad.net/~certbot/+archive/ubuntu/certbot https://launchpad.net/~certbot/+archive/ubuntu/certbot]
 
<syntaxhighlight lang="bash" enclose="div">
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get -y install certbot
</syntaxhighlight>
 
基本的には CentOS7 のドキュメントをなぞるのでよいが、 hitch.conf を作っておく。(手順にしたがって pem-file を追加する)
<syntaxhighlight lang="text" enclose="div">
frontend = {
  host = "*"
  port = "443"
}
backend = "[127.0.0.1]:6086"    # 6086 is the default Varnish PROXY port.
workers = 2                    # number of CPU cores
 
backlog = 1024
keepalive = 3600
syslog = on
 
ciphers = "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"
 
daemon = off
user = "_hitch"
group = "_hitch"
 
# Enable to let clients negotiate HTTP/2 with ALPN. (default off)
# alpn-protos = "h2, http/1.1"
 
# run Varnish as backend over PROXY; varnishd -a :80 -a localhost:6086,PROXY ..
write-proxy-v2 = on            # Write PROXY header
</syntaxhighlight>
 
certbot-renew
certbot-renew.timer
:が無いので renew は自分で crontab に書く
 
<syntaxhighlight lang="text" enclose="div">
00 04 25 * * /usr/bin/certbot renew && systemctl restart hitch
</syntaxhighlight>
 
certbot の --post-hook は、
--post-hook="systemctl restart hitch"
 
varnish で強制的に https に redirect する。
https://github.com/varnish/hitch/wiki/FAQ
https://varnish-cache.org/trac/wiki/VCLExampleRedirectInVCL
 
コンテンツ側の対処
https://www.mediawiki.org/wiki/Manual:$wgServer
https://ja.wordpress.org/plugins/really-simple-ssl/
 
HSTS
https://github.com/varnish/hitch/wiki/FAQ#hsts-with-hitch-and-varnish
:A+にしたいのでやってみた
 
'''varnish h2 が安定したら HTTP/2 にする'''
::https://packagecloud.io/varnishcache
:::varnish5 いれたら簡単にでけたw
 
* varnish が 404 のまま
<syntaxhighlight lang="c" enclose="div">
sub vcl_backend_response {
    # Don't cache 404 responses
    if ( beresp.status == 404 ) {
        set beresp.ttl = 3s;
    }
}
</syntaxhighlight>
 
*ubuntu 16.04 systemd 環境の varnish と logrotate
<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
mkdir /run/varnish
mkdir /run/varnish
Line 6: Line 294:


<syntaxhighlight lang="text" enclose="div">
<syntaxhighlight lang="text" enclose="div">
ExecStart=/usr/bin/varnishlog -a -w /var/log/varnish/varnish.log -P /run/varnish/varnishlog.pid
Type=forking
ExecStartPre=/usr/bin/install -o varnishlog -g varnish -d /run/varnish
ExecStart=/usr/bin/varnishlog -D -a -w /var/log/varnish/varnish.log -P /run/varnish/varnishlog.pid
PIDFile=/run/varnish/varnishlog.pid
PIDFile=/run/varnish/varnishlog.pid
</syntaxhighlight>
</syntaxhighlight>


<syntaxhighlight lang="text" enclose="div">
<syntaxhighlight lang="text" enclose="div">
ExecStart=/usr/bin/varnishncsa -a -w /var/log/varnish/varnishncsa.log -P /run/varnish/varnishncsa.pid
Type=forking
ExecStartPre=/usr/bin/install -o varnishlog -g varnish -d /run/varnish
ExecStart=/usr/bin/varnishncsa -D -a -w /var/log/varnish/varnishncsa.log -P /run/varnish/varnishncsa.pid
PIDFile=/run/varnish/varnishncsa.pid
PIDFile=/run/varnish/varnishncsa.pid
</syntaxhighlight>
</syntaxhighlight>