僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
cronで毎日、ログのサマリをメールしているシェルスクリプトに、 grep POST $ACCESS_LOG を加えた :-)
sockstat(1)の名前を覚えられない。その都度、
本を引っ張り出して、コマンドの載ってるページを探し回っている。
ちなみに、sock<TAB>と打って気づいたが、PlamoLinuxには
socklist(8)というperlスクリプトがそれにあたる模様。
あとsocklist(8)では、uidが0の項目の内容が変だ。pidやfdまでが0になり、
nameも出ない
(sockstat(1)は関係ないらしい)
$ socklist type port inode uid pid fd name tcp 32769 3344 500 1090 5 kinput2-canna tcp 515 2904 0 0 0 tcp 6000 3306 0 0 0 tcp 5680 3211 0 0 0 tcp 21 2777 0 0 0 tcp 25 2936 0 0 0 tcp 32768 3340 500 1090 4 kinput2-canna tcp 5680 3341 0 0 0 tcp 41605 27626 500 4974 3 ssh tcp 41600 27561 500 4952 3 ssh # socklist type port inode uid pid fd name tcp 32769 3344 500 1090 5 kinput2-canna tcp 515 2904 0 915 6 lpd tcp 6000 3306 0 1074 1 X tcp 5680 3211 0 1024 4 cannaserver tcp 21 2777 0 906 4 inetd tcp 25 2936 0 978 11 master tcp 32768 3340 500 1090 4 kinput2-canna tcp 5680 3341 0 1024 0 cannaserver tcp 41605 27626 500 4974 3 ssh tcp 41600 27561 500 4952 3 ssh
ぐぐっていると、過去の(3.x?)sockstatはPerlスクリプトらしいと書いてある ページもあった。
$ file $(which sockstat) /usr/bin/sockstat: ELF 32-bit LSB executable, Intel 80386, version 1 \ (FreeBSD), for FreeBSD 5.3.0, dynamically linked (uses shared libs),\ stripped $ ldd $(which sockstat) /usr/bin/sockstat: libc.so.5 => /lib/libc.so.5 (0x28076000)
ツッコミをみて、4.10(98)を確認。
$ file $(which sockstat) /usr/bin/sockstat: a /usr/bin/perl -w script text executable
そういえば昔(いつか忘れた)whichがperlだったことを思い出した。
$ file $(which which) /usr/bin/which: ELF 32-bit LSB executable, Intel 80386, version 1\ (FreeBSD), for FreeBSD 4.9.1, dynamically linked (uses shared libs), \ stripped $ ldd $(which which) /usr/bin/which: libc.so.4 => /usr/lib/libc.so.4 (0x28067000)
なんか動かしてみる。
iMacに入れたEtchで、hello.cを書いた。
gcc -o hello -static hello.c する。
strip してやると、ファイルサイズが545670バイトから490800になった。
user@imac:~$ file hello hello: ELF 32-bit MSB executable, PowerPC or cisco \ 4500, version 1 (SYSV), for GNU/Linux 2.4.1, statically \ linked, for GNU/Linux 2.4.1, stripped
こいつをftpでOBSに転送し、実行属性を付けて ./hello。動いた。
OBSは現在、デスクトップのeth2にクロスケーブルでぶら下がっている。
従って、OBSとiMacはデスクトップを中継して繋がっている。
どういうわけか、起動後しばらくすると、OBSはtelnetやftpのログインが すっと出来なくなった。一分以上待たされるのだ。
もしや。
LANのDNSサーバにも192.168.253.254 への路をルーティングテーブルに追記し、
OBSの/etc/resolv.confにもnamseserver のアドレスを入れてやる。
果たせる哉。
瞬時にログインプロンプトが出るようになった。
DNS鯖にログインし、tcpdumpでudpを見てみる。
telnetなどでアクセスした途端に 4回のクエリーが。
1. まず、やってきたIPの逆引き。
2. 次いで、1.で返ってきた名前のIPv4の正引き。
3. そして、もう一回、IPv6で正引き。
4. 最後に自分のホスト名をIPv4で正引き。
RCSのコマンドは色々あるが、
rcs-5.7/src$ ls | grep -v "\.\|[A-Z]" ci co ident merge rcs rcsclean rcsdiff rcsmerge rcstest rlog
好奇心いまいち。
ブランチやフォークを覚えたら、cvsか。
LXDE はまだほやほやっぽい。
さしあたり、と考えながら svn co https://lxde.svn.sourceforge.net/svnroot/lxde lxde
させてもらった。
tac(1)は知っていても、rev(1)は知らなかったはず。
$ cat > foo.txt <<EOF 1 2 3 abc EOF $ tac foo.txt abc 3 2 1 $ rev foo.txt 1 2 3 cba
RaspberryPi(というよりarm?)向けのバイナリパッケージはなさげ。
Portsもあまり頼りにならないっぽいので、せめてもの操作環境のために
いくらかを make install。bash と sudo は何事もなく make install。
tmux は libevent と pkg-config(configureオプションに --with-internal-glib)
が要った。
とりあえず、ひと心地ついた。
画面がちょっと華やかに見える。
gdate.c:432:43: warning: comparison of constant 8 with expression of type 'GDateWeekday' is always true [-Wtautological-constant-out-of-range-compare] return ( (w > G_DATE_BAD_WEEKDAY) && (w < 8) ); ~ ^ ~ 1 warning generated.
さて、Subversion も入れたものか。ソースのアップデートに必要っぽい が、 なんか依存するパッケージが多かったような。
適当なamd64マシンからUbuntuを追い払ってFreeBSD 10 を入れた。
USBメモリ向けのインストールイメージは約666MBあった。
30分もかからずに終了し、tmuxやsubversionなども
pkg install であっという間に入った。
そういった知識があれば快適だろうな。
前に書いた、どこかのWebページを参考にした USB、 どうも信号線が逆のようだ(Interface 2014/2, p86)
|線| | | | USB | | LOGO | | | 青 緑 白 橙 GND -Data +Data 5V
clangを入れた(gccを入れてない) jessie(x86_64)と FreeBSD 11 CURRENT(amd64)で、 どちらも 昨日のコードに警告が出た。
$ cc --version Debian clang version 3.5.0-9 (tags/RELEASE_350/final) \ (based on LLVM 3.5.0) Target: x86_64-pc-linux-gnu Thread model: posix $ uname -a Linux $HOST 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt2-1 \ (2014-12-08) x86_64 GNU/Linux
$ cc -Weverything -o dog dog.c dog0.c:5:20: warning: implicit conversion changes \ signedness: 'int' to 'char' [-Wsign-conversion] dog[0] = 0xe7 ; ~ ^~~~ dog0.c:6:20: warning: implicit conversion changes \ signedness: 'int' to 'char' [-Wsign-conversion] dog[1] = 0x8a ; ~ ^~~~ dog0.c:7:20: warning: implicit conversion changes \ signedness: 'int' to 'char' [-Wsign-conversion] dog[2] = 0xac ; ~ ^~~~ 3 warnings generated.
次のようにすると警告なしになった。
$ diff dog.c dog1.c 5,7c5,7 < dog[0] = 0xe7 ; < dog[1] = 0x8a ; < dog[2] = 0xac ; --- > dog[0] = (char) 0xe7 ; > dog[1] = (char) 0x8a ; > dog[2] = (char) 0xac ;
char の判定も、このように書いてやっと
clangの警告が出なくなった。
ちなみに3dは関係なく削除。
#include<stdio.h> #define SIGN_NUM (char) 129 int main() { unsigned char ex_uc = (unsigned char) SIGN_NUM; signed char ex_ac = (signed char) SIGN_NUM; char im_c = SIGN_NUM; printf("unsignd char:%d\n", ex_uc); printf("signed char:%d\n", ex_ac); printf("implict char:%d\n", im_c); return 0; }
FreeBSD 11.0-CURRENT r277866 で make buildworldした
結果、4844分6.591秒かかったらしい。
80時間と44分余り、3日と8時間44分6.6秒。
さて、時刻合わせが済んだら make buildkernelせねば。
こちらは予想で21時間くらい?
一晩IP Unreachableだった。ntpdateしたら3秒ほど進みすぎていた。
make buildkernelは391分3.885sで終了した。
sigh_test は、次のように書くと警告はなかった。
#include<stdio.h> #define SIGN_NUM 129 int main() { unsigned char ex_uc = SIGN_NUM; signed char ex_ac = (signed char) SIGN_NUM; char im_c = SIGN_NUM; printf("unsignd char:%d\n", ex_uc); printf("signed char:%d\n", ex_ac); printf("implict char:%d\n", im_c); return 0; }
デフォルトがunsigned char だから、なのかもしれない。
同じ量でも多数のファイル転送は時間がかかる。
1Mのファイルひとつは瞬速でコピーできても、
32バイトが32768個あると...
/dev/urandomから読みだしたファイルの山を、
sshfsでマウントしたポイントにcp -aしてみる。
イーサネットは一応GB。
$ ls 128 1k 1m.img 256 32 512 64 $ time cp 1m.img $HOME/remote/ real 0m0.024s user 0m0.000s sys 0m0.004s $ time cp -a 1k $HOME/remote/ real 0m4.802s user 0m0.048s sys 0m0.164s $ time cp -a 512 $HOME/remote/ real 0m9.704s user 0m0.064s sys 0m0.372s $ time cp -a 256 $HOME/remote/ real 0m19.380s user 0m0.172s sys 0m0.724s $ time cp -a 128 $HOME/remote/ real 0m38.442s user 0m0.272s sys 0m1.368s $ time cp -a 64 $HOME/remote/ real 1m16.699s user 0m0.472s sys 0m2.744s $ time cp -a 32 $HOME/remote/ real 2m34.144s user 0m0.912s sys 0m5.560s
ほぼファイルの「数」に比例しているようだ。
スイッチを100Mに変えてみた。
変化については1Gと同様。
「ちょっと遅くなった」くらいしか違わないようだ。
$ time cp 1m.img $HOME/remote/ real 0m0.099s user 0m0.000s sys 0m0.000s $ time cp -a 1k $HOME/remote/ real 0m5.796s user 0m0.036s sys 0m0.176s $ time cp -a 512 $HOME/remote/ real 0m11.257s user 0m0.080s sys 0m0.320s $ time cp -a 256 $HOME/remote/ real 0m22.118s user 0m0.152s sys 0m0.680s $ time cp -a 128 $HOME/remote/ real 0m43.997s user 0m0.292s sys 0m1.384s $ time cp -a 64 $HOME/remote/ real 1m27.289s user 0m0.528s sys 0m2.724s $ time cp -a 32 $HOME/remote/ real 2m55.206s user 0m1.124s sys 0m5.440s
どれくらいのディスクスペースを占めているかも。
$ ls 128 1k 1m.img 256 32 512 64 $ for node in `ls`; do du $node; done | sort -n 1024 1m.img 4124 1k 8244 512 16484 256 32960 128 65964 64 131952 32
特定の物理ボリューム上にあるデータを 違う物理ボリュームに移動。もちろん アンマウントもせずにデータ保持で。
まず初期状態。
$ sudo pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- 3.00g 3.00g /dev/sdb2 lvm2 --- 2.59g 2.59g
ボリュームグループを作成し、小さい方の 物理ボリュームを加え、 その全部を論理ボリュームにする。
$ sudo vgcreate tvs /dev/sdb2 Volume group "tvs" successfully created $ sudo lvcreate -l 100%FREE tvs -n narrow Logical volume "narrow" created.
パーティション作成にマウント。
$ sudo mkfs -t ext4 /dev/tvs/narrow mke2fs 1.43.3 (04-Sep-2016) Discarding device blocks: done Creating filesystem with 677888 4k blocks and 169680 inodes Filesystem UUID: ac47ff77-8792-4ea6-ad23-bd8a1a3d3092 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done $ sudo mount /dev/tvs/narrow /media/temp
適当なデータも置いておく。
media/temp$ sudo dd if=/dev/urandom of=100m.img bs=1M count=100 100+0 レコード入力 100+0 レコード出力 104857600 bytes (105 MB, 100 MiB) copied, 5.68974 s, 18.4 MB/s media/temp$ df -h | sed -n '1p;$p' ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/mapper/tvs-narrow 2.5G 108M 2.3G 5% /media/temp
大きい方の物理ボリューム追加。
$ sudo vgextend tvs /dev/sdb1 Volume group "tvs" successfully extended $ sudo pvs PV VG Fmt Attr PSize PFree /dev/sdb1 tvs lvm2 a-- 3.00g 3.00g /dev/sdb2 tvs lvm2 a-- 2.59g 0 $ sudo vgs VG #PV #LV #SN Attr VSize VFree tvs 2 1 0 wz--n- 5.58g 3.00g
で、始めの小さい方の物理ボリュームから
データを大きい方に移動させる。
この場合、ファイルシステムのデータの
多寡は関係なさげ(物理ボリューム
全体を移す模様)
$ sudo pvmove /dev/sdb2 /dev/sdb1 /dev/sdb2: Moved: 0.15% /dev/sdb2: Moved: 25.23% /dev/sdb2: Moved: 45.17% /dev/sdb2: Moved: 69.64% /dev/sdb2: Moved: 99.55% /dev/sdb2: Moved: 100.00%
で、その結果。
$ sudo pvs PV VG Fmt Attr PSize PFree /dev/sdb1 tvs lvm2 a-- 3.00g 420.00m /dev/sdb2 tvs lvm2 a-- 2.59g 2.59g $ df -h | sed -n '1p;$p' ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/mapper/tvs-narrow 2.5G 108M 2.3G 5% /media/temp
もちろんこの後、/dev/sdb2を引き抜いても構わないと。
$ sudo vgreduce tvs /dev/sdb2 Removed "/dev/sdb2" from volume group "tvs" $ sudo pvs PV VG Fmt Attr PSize PFree /dev/sdb1 tvs lvm2 a-- 3.00g 420.00m /dev/sdb2 lvm2 --- 2.59g 2.59g $ ls /media/temp/ 100m.img lost+found
パーティションのサイズを変えないので、
移動元と移動先のサイズには注意が要りそうだ。
論理ボリュームがどちらにも収まるサイズであれば
いいのだろうけど。
メールサーバの試験運用のために、仮で立ててみた。
はじめはクラウドだったが、こちらはv6がルータにしか割当できず、
しかも逆引きもできないらしいのでVPSに移す。
AAAAは既に登録しておいた。
ついでに逆引きもさっきやっておいた。
ip6tables(基本はINPUT DROP)でicmpを指定するには/etc/protocolsにあったipv6-icmpが有効らしい。
requestは128, reply は129だった。
$ sudo ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 129 -j ACCEPT
のようになるはずだけど、どういうわけかtype128,129を指定してやるとうまくいかない。
コマンドとしては通るが、ping6は届かない。icmp全部、とはいわなくても、色々指定してやらないと
駄目かも。
v6がようやく自分でも「使える」ようになった気がするが、 v4とv6の使い分け、切り替えにはまだまだ色々トラブルがありそう。
確かfirefoxで、Slackの他にもう一つタブを増やしたことが
刺さったらしい。
しばらくマウスカーソル以外ほとんど動かなくなった。
動くようになってからdmesgを見る。
$ dmesg | grep -c '[水 2月 3 20:55:10 2021]' 1145
以下、[水 2月 3 20:55:10 2021]を省略。
ata1.00: exception Emask 0x0 SAct 0xf7f0007f SErr 0x0 action 0x6 frozen ata1.00: failed command: READ FPDMA QUEUED ata1.00: cmd 60/00:00:88:8f:66/01:00:01:00:00/40 tag 0 ncq dma 131072 in res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout) ata1.00: status: { DRDY }
が何回か出た。そして、
ata1: hard resetting link ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) ata1.00: ACPI cmd ef/10:03:00:00:00:a0 (SET FEATURES) filtered out ata1.00: ACPI cmd ef/10:03:00:00:00:a0 (SET FEATURES) filtered out ata1.00: configured for UDMA/133 ata1.00: device reported invalid CHS sector 0 ata1.00: device reported invalid CHS sector 0 . .
sd 0:0:0:0: [sda] tag#19 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_TIMEOUT cmd_age=50s sd 0:0:0:0: [sda] tag#19 CDB: Write(10) 2a 00 05 1c 6f 98 00 00 38 00 blk_update_request: I/O error, dev sda, sector 85749656 op 0x1:(WRITE) flags 0x800 phys_seg 4 prio class 0
$ dmesg | grep -c 'Buffer I/O error on device sda2' 10
さて、どうすべし。一応動いてはいるのだけど。
InternetWeek2020の資料など見ながら。
メールサーバーの構築にansibleを使い始めて
いくばくかの自動化はできてきた。
アップデートと(場合によっては)再起動に
時間がかかるので、時間はさほど短縮
できた気はしないが。
DNSにMTA-STSのA(AAAA)と、
_MTA-STSのTXTを追加。
もはやTLSはワイルドカード無しにはできない気が。
$ dig _dmarc.DOMAIN.TLD TXT // ;; ANSWER SECTION: _dmarc.DOMAIN.TLD. 3600 IN TXT "v=DMARC1; p=quarantine; rua=mailto:$MAILADDR1; ruf=mailto:$MAILADDR2"
apache2は特に違うところはない。DocumentRoot にmkdirするくらい。
$ w3m -dump https://mta-sts.orekuzu.com/.well-known/mta-sts.txt version: STSv1 mode: enforce mx: *.DOMAIN.TLD max_age: 129600
適当なサイトに チェックして貰ったが、 TLSRPTが無い(DNSSEC前提)こと 以外は、大きな問題なしと判断されたようだ。
さて、その有り難みはどこに。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。
※ takanyon [4.11-RELEASEでもsockstatはperl scriptですよ:-) ベースシステムからperlを無くす..]
※ kuzuore [ご指摘どうもです。それに沿って追記しました。]
※ takanyon [ツッコミはやっ(笑) whichがCで書き直されたのは意外にも4.10-RELEASE以降です。 cshやtcshを..]