
School caste, huh?

what is the tagline?

Upgrade package บน raspberrypi วันนี้มี package ที่ต้อง update แต่มีปัญหาอยู่ เจ้า package อันนั้นก็คือ
tzdata 2024a-0+deb11u1
ซึ่ง upgrade ไปแล้วจะได้ผลประมาณนี้
Fetched 13.2 MB in 1min 14s (180 kB/s) Reading package lists... Done Reading package lists... Done Building dependency tree... Done Reading state information... Done Calculating upgrade... Done The following packages will be upgraded: tzdata 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 0 B/304 kB of archives. After this operation, 931 kB of additional disk space will be used. apt-listchanges: Reading changelogs... Preconfiguring packages ... (Reading database ... 52286 files and directories currently installed.) Preparing to unpack .../tzdata_2024a-0+deb11u1_all.deb ... Unpacking tzdata (2024a-0+deb11u1) over (2023c-5) ... dpkg: error processing archive /var/cache/apt/archives/tzdata_2024a-0+deb11u1_all.deb (--unpack): unable to open '/usr/share/zoneinfo/posix/Africa/Abidjan.dpkg-new': No such file or directory Errors were encountered while processing: /var/cache/apt/archives/tzdata_2024a-0+deb11u1_all.deb needrestart is being skipped since dpkg has failed E: Sub-process /usr/bin/dpkg returned an error code (1)
ตรวจสอบดูแล้ว คิดว่าย้อนกลับไปใช้ตัวเก่าจะดีกว่า
cj@pi01:~ $ apt-cache policy tzdata
tzdata:
Installed: 2023c-5
Candidate: 2024a-0+deb11u1
Version table:
2024a-0+deb11u1 500
500 http://ftp.jaist.ac.jp/raspbian bullseye/main armhf Packages
*** 2023c-5 500
500 http://ftp.jaist.ac.jp/raspbian bookworm/main armhf Packages
100 /var/lib/dpkg/status
ติดตั้ง version 2023c-5 โดยการใช้คำสั่ง
sudo apt install tzdata=2023c-5
จบ
มี application อยู่ 2 ตัวที่ใช้สำหรับ trace ว่า โปรแกรมตัวนึงมันติดต่อผ่าน network ไปที่ไหนบ้าง
ทั้งสองตัวมีเป็น package ให้ติดตั้งแล้ใช้งานได้บน debian/ubuntu และเดาว่าน่าจะมีบน Linux distro ทั่วๆไปทั้งหมด
sysdig — ยังไม่เคยลองใช้งานจริงจังมาก่อน แต่ดูแล้ววน่าสนใจ เพราะเขียนโปรแกรมร่วมเข้าไปใช้งานในการวิเคราะห์ข้อมูลได้ (แต่ยังไม่ได้ลอง)
ตัวอย่าง จะใช้ sysdig สำหรับ trace event ที่เกิดขึ้น กับโปรแกรม ping
เราอยากจะรู้ว่า มี event อะไรเกิดขึ้นบ้างถ้าเราใช้คำสั่ง
ping -c 3 8.8.8.8
ทำได้ประมาณนี้
จาก terminal หนึ่ง ให้ run คำสั่ง
sudo sysdig proc.name='ping'
และ อีก terminal หนึ่งให้ไป run คำสั่ง
ping -c 3 8.8.8.8
ที่ terminal แรกก็จะเห็นผลลัพธ์ประมาณนี้
98006 10:06:55.851978155 3 ping (2145859.2145859) < execve res=0 exe=ping args=-c.3.8.8.8.8. tid=2145859(ping) pid=2145859(ping) ptid=2114748(bash) cwd= fdlimit=1024 pgft_maj=0 pgft_min=31 vm_size=460 vm_rss=4 vm_swap=0 comm=ping cgroups=cpuset=/user.slice.cpu=/user.slice/user-1000.slice/user@1000.service/app.slic... env=SHELL=/bin/bash.SESSION_MANAGER=local/trantor:@/tmp/.ICE-unix/16757,unix/tran... tty=34829 pgid=2145859(ping) loginuid=1000 flags=0
98007 10:06:55.852042985 3 ping (2145859.2145859) > access mode=0(F_OK)
98008 10:06:55.852070023 3 ping (2145859.2145859) < access res=-2(ENOENT) name=/etc/suid-debug
98009 10:06:55.852087854 3 ping (2145859.2145859) > brk addr=0
...
ถ้าจะดูผลเฉพาะการติดต่อกับ network (สำหรับ ping) ก็ใช้คำสั่งนี้
sudo sysdig proc.name='ping' | grep -E 'sendto|recvmsg'
ลองดู blog ตัวนี้
https://sysdig.com/blog/sysdig-tracers/
Tag line ของ blog ก็คือ “open source transaction tracing meets htop and strace” ซึ่งจะชี้ไปที่ strace
strace — system trace เทียบกับ sysdig ที่เป็นการ trace event ที่เกิดขึ้นบนระบบทั้งหมด แล้วค่อยมา filter เลือกเอา event ที่สนใจ เช่น event ที่เกิดขึ้นจาก โปรแกรม ping ก็ใช้ proc.name=’ping’
สำหรับ strace จะใช้ในลักษณะของ wrapper ที่จะ wrap โปรแกรมนั้นและแสดง system trace ที่โปรแกรมนั้นเรียกใช้ทั้งหมด เช่น ต้องการดู trace ของ ping
ping -c 3 8.8.8.8
ก็ใช้คำสั่ง
sudo strace ping -c 3 8.8.8.8
ถ้าต้องการดูเฉพาะ network activity ก็ใช้คำสั่ง
sudo strace -e trace=network ping -c 3 8.8.8.8
ถ้าโปรแกรมที่ trace นั้นมีการ fork sub process แล้วเราต้องการ trace sub process นั้นด้วย ก็ต้องเพิ่ม option “-f” หรือ “–follow-forks”