Linux Tips
- systemd の override
忘れてたので再度メモ
既存の設定の内容を修正したいときは、これが良いとのこと。
/etc/systemd/system/foobar.service.d というディレクトリを作成。そこに hogefuga.conf を作り変更点を書く。変更するステートメントは1度クリアする事。
こんな感じ。
[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd \
-j unix,user=vcache \
-F \
-a :80 -a '[127.0.0.1]:9999,PROXY' \
-p vsl_reclen=4084 \
-p feature=+http2 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m
- たんなるメモ
いろいろお便利なコマンド
apt list '~c'
apt purge '~c'
apt --purge autoremove -y
- たんなるメモ
npm --omit=dev --omit=optional ls --all
- 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系の変更には注意して運用する。
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 を参照してください。
- avahi-browse や avahi-resolve が答え返さない問題
ホスト名に勝手にシリアル番号を付ける問題に対応した設定が原因だった。どちらが運用上いやなのかを考えて、avahi-browse や avahi-resolve は捨てて mdns-scan 使うw
勝手にシリアル番号追加問題の回避策
cache-entries-max=0
- Ubuntu無題w
#!/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
- 雑多なメモ
忘れてた。久しぶりに boot してこないと console をつなげたら...fsck中...
そのままメンテナンスモードからマルチユーザモードにしてしまったら、いわゆるデバイス番号が変わってたw UUID でマウントしてるから問題は起きなかったが、昔々大チョンボしたパターンw
おまじないは忘れずにw
tune2fs -c -1 -i 0 /dev/sda2
- 雑多なメモ
binary file 探す。(今までは find でいろいろ駆使しながらやってたがこれがシンプルね)
grep -rIL .
- 雑多なメモ
SSDを容量のギリギリまでつかうのなら discard 付けとけ。でないと遅杉。fstrim じゃぁ追いつかねぇw
- make の j オプション
これにしておけば良いらしい
make -j$[$(nproc)+1]
- smartmontools アプデ
update-smart-drivedb --trunk --no-verify
メジャーメーカーなのにまだ db にないのもあるな。(中華SSDもけっこうdbにはいってるw)
- 雑多なメモ
pmd_set_huge: Cannot satisfy [mem 0xf8000000-0xf8200000] with a huge-page mapping due to MTRR override.
なんか 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使うとかで出来るのかもしれないが)野蛮な方法で変更した。
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
- 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 表記ができる
ALL : [3ffe:505:2:1::]/64
- ccache 4.1 が遅い
compression がデフォで有効になっていた。非力な環境なので無効にした。
compression = false
すでに圧縮されちゃったキャッシュはこのコマンドで戻る。
ccache --recompress uncompressed
さらに、これはやりすぎかもしれないが...
sloppiness = include_file_mtime, include_file_ctime, time_macros, pch_defines, file_stat_matches, locale
やはりやりすぎだった。ある状況で間違ってビルドされた。いまは time_macros, pch_defines のみで検証中。
- varnish 起動ミス
超ワークアラウンドだが、/etc/rc.local に書いておく
/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
- 壊れた symlink 一覧
find . -xtype l
- icu めも
ICU Data Library Customizer
icupkg icudt57l.dat icudt62l.dat -w
- めもめも
cat /sys/devices/system/cpu/vulnerabilities/l1tf
- HTTP/2 化
hitch + varnish5 で簡単
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
- varnish6 はまだ安定しないので 5.x を使う
varnish の起動オプションに追加
-p feature=+http2 -p thread_pools=2 -p thread_pool_min=450 -p thread_pool_max=5000 -p syslog_cli_traffic=off -t 120
hitch.confに追加
alpn-protos = "h2, http/1.1"
- https 化
そろそろヤバイので https 化した。現在の構成が apache2 + varnish なので、いろいろ調査した結果 hitch を使うことにした。
http://hitch-tls.org/
Ubuntu のパッケージは古かったので PPA で導入。
Ubuntu PPA aiming for latest hitch on latest ubuntu.
sudo add-apt-repository ppa:lasse-karstensen/hitch
sudo apt-get update
sudo apt-get -y install hitch
hitch + varnish + apache2 + Let's Encrypt の統合の参考はこれが良かった。
Let's Encrypt with Hitch and Varnish (CentOS7) Tutorial
Ubuntu のパッケージに letsencrypt というのがあるが、これは古くて hitch 対応してないらしいので PPA 導入。
https://launchpad.net/~certbot/+archive/ubuntu/certbot
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get -y install certbot
基本的には CentOS7 のドキュメントをなぞるのでよいが、 hitch.conf を作っておく。(手順にしたがって pem-file を追加する)
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
certbot-renew certbot-renew.timer
- が無いので renew は自分で crontab に書く
00 04 25 * * /usr/bin/certbot renew && systemctl restart hitch
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
- https://packagecloud.io/varnishcache
- varnish が 404 のまま
sub vcl_backend_response {
# Don't cache 404 responses
if ( beresp.status == 404 ) {
set beresp.ttl = 3s;
}
}
- ubuntu 16.04 systemd 環境の varnish と logrotate
mkdir /run/varnish
chown varnishlog:varnish /run/varnish
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
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
postrotate
/bin/kill -HUP `cat /run/varnish/varnishlog.pid 2>/dev/null` 2> /dev/null || true
endscript
postrotate
/bin/kill -HUP `cat /run/varnish/varnishncsa.pid 2>/dev/null` 2> /dev/null || true
endscript
- ccache
.bashrc に
USE_CCACHE=1
export USE_CCACHE
PATH="/usr/lib/ccache:$PATH"
export PATH
- Fail2Ban
今更ながらですが、Fail2ban実験中。
- いままで、つつかれるのは仕方がないと放置してたのですが...
- たんなるメモ
OpenWrt / LEDE とかクロスコンパイル環境では、やたらと PATH が深くなりがち。このためにいろいろトラブルがでる。
execvp: printf: Argument list too long.
- これはパス名がながくて、引数のサイズ制限をこえたということ。対処は PATH を短くするか、xargs つかってうまく逐次処理する。
- getconf ARG_MAX
bad interpreter: No such file or directory
- shellbang でもインタープリターのフルパス名でハマることもある。逃げ方は exec hoge 等のラッパかます等。
- 80桁
- たんなるメモ
Use 'apt-get autoremove' to remove them.
- VirtualBox + Ubuntu システム時刻
Windows のシステム時刻がローカルタイム(JST)なので、Ubuntu の /etc/default/rcS で
# assume that the BIOS clock is set to UTC time (recommended)
#UTC=yes
UTC=no
- Ubuntu unattended-upgrades サードパーティ レポジトリの扱い
Origin と Suite を指定してくれてないものをどうすればよいのか...
Unattended-Upgrade::Allowed-Origins {
"*:*";
};
大胆に *:* してテスト中。
"Sensu:sensu";
"LP-PPA-ondrej-php:${distro_codename}";
"elastic:stable";
- たんなるメモ
dpkg-reconfigure keyboard-configuration
- Hey! MAN!!!
漢なら run as root B)
漢なら Disable Ubuntu command-not-found
.bashrc に
unset command_not_found_handle
- メモリー系いろいろ
echo -17 > /proc/<PID>/oom_adj
sshd とかは起動スクリプトで -17 に設定されている
vm.overcommit_memory=2 vm.overcommit_ratio=90
overcommit_ratio は環境による。メモリー逼迫してる場合はこれやると危険かも。
- service - run a System V init script
ふむ
man 8 service
service SCRIPT COMMAND # service mysql restart
的
- cron-apt
apt-get install cron-apt
/etc/cron-apt/config APTCOMMAND=/usr/bin/aptitude MAILTO="someone@somewhere"
/etc/cron-atp/action.d/5-upgrade safe-upgrade -y -o APT::Get::Show-Upgraded=true
/etc/cron.d/cron-apt 実行時間適当に変えてくれてる
- つかえるかな?
cpulimit
- Cluster SSH
おもろい
Cluster SSH - Cluster Admin Via SSH
- たんなるメモ
vm.swappiness=0 kernel.panic_on_oops=1 kernel.panic=1
mount -o barrier=0
- 調査中...
- OOM Killer を避ける
# echo -17 > /proc/<pid of sshd>/oom_adj
- 127.0.1.1 の話と、localdomain の話
- いろいろ厳密化してるなぁ
- localhost. と hostname 名前解決の分離
- Debian Reference - Network configuration
- UbuntuNote - Ubuntuのメモ
- めも - 127.0.1.1
- Net::SMTPでSMTPのHELO/EHLOにデフォルトで不正なホスト名を使用
- たぶん、この議論を引き起こした遠因はこれかな
- SecuriTeam - Common DNS Misconfiguration can Lead to "same Site" Scripting
- yebo blog: Same-Site Scripting
- mount bind
- relatime
- ほー知らんかった3...(かなりリハビリ必要やな)
- relatimeがどこで実装されているのか調べてみた
- 最新のFedoraとUbuntuではrelatimeもnoatimeもいらない?
- relatimeが標準に
- ディスクI/Oとniceレベル
- Linuxにおけるメモリの開放
- ほー知らんかった...
- 第10回:メモリ管理で安定稼動
- DB2 V9.1以降でSTMMを使用する場合のOSのメモリー関連設定の注意事項 (DM-08-009)
- 続 @ITのmeminfoの見方の説明が完全に間違っている件について
sysctl -w vm.drop_caches=1
- Linux TCP Tuning
TCP Tuning Guide - Linux TCP Tuning
- Jetty TCP Tuning
Jetty - Addressing High TCP Slot Usage
- たんなるメモ15
- わすれもの
/usr/bin/setterm -blank 0 -store > /dev/tty1
- よけいなお世話:)
tune2fs -c -1 -i 0 デバイス
過去ログ
昔のものは、雑多なメモ