computerの日記

Cisco,SHELL,C,Qt,C++,Linux,ネットワーク,Windows Scriptなどの発言です

sar-analyzer の開発状況(20181115)

sar-analyzer ですが、現在のバージョンは、10.22.2 となっています。

数日前に出した 10.22.1 では、sar_analyzer.c の多くの if clause が失敗していました。日本語環境であれば、sar_analyzer_jp.c を読むので、関係ないですけど。その問題を、今回のバージョンでは直しました。また、cswch のグラフが出ない問題も直しました。

常に最新のバージョンを使ってください。最新でないバージョンは、すべてが失敗バージョンとなりますので。

現在のバージョンは、10.22.2 ですよー。

お腹すいたァ。

github.com

sar-analyzer の開発状況(20181112)

sar-analyzer ですが、現在のバージョンは、v10.22.0 です。

今回のバージョンアップでは、コードのクリーニングを行いました。

これは、何度も行っています。c で書いているので、結構、自由に書けてしまいますが、見直してみると、後々問題となりそうな箇所がいくつも見つかったりします。

その、気付いたところについて、できるだけ直していく作業を、クリーニング、と呼んでいます。

また、実際にプログラム的に問題があったところも修正しています。

ともかく、いつも最新のバージョンを使うようにしてください。

次に、ちょっとした tips です。

デフォルトでは、CPU の数は、70 までとなっています。src/common.h に、

#define MAX_CORE_NUMBERS 70

としています。

これを、90 にすると、CPU が 90 まで記録されている sar ファイルを解析できるようになります。

このマクロは、src/common.h ファイルの、

/* ---------- macros ( tweak if needed ) ---------- */

というところにあります。

昨日は、松葉がにを食べましたよ。

github.com

sar-analyzer の開発状況(20181107)

sar-analyzer の、10.21.0 を出しました。

このバージョンでは、sar ファイルが 1分毎に書かれていても、グラフがきちんと表示できるようにしました。

また、日本語環境であれば、日本語の sar ファイルを正しく解析できるようになりました(していたつもりでしたが、ちゃんと出来ていなくて、ある方法でちょっと修正していたのをしなくてよくなりました)。

今日は、何を食べようかな。

github.com

 

Fedora29 にアップグレードしたら、ゲームマシンの X が立ち上がらなくなったので、対処した

Fedora29 にアップグレードしたら、ゲームマシンの X が立ち上がらなくなりました。

アップグレード直後の起動から、固まったようになってしまいました。

起動時に、e を押下して、起動するための行の最後に、 single を追加して、root パスワードを入力しました。

# systemctl set-default multi-user.target

# init 3

で、コンソールモードで立ち上がりました。

以下のコマンドを実行して、このゲーム端末には、VGA が2つある事がわかりました。

 $ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 530 (rev 06)
01:00.0 VGA compatible controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev a2)

 /var/log/Xorg.0.log を確認すると、vesa を無効にすればよいと感じられました。

# vim /etc/modprobe.d/blacklist.conf

blacklist vesa

# shutdown -r now

ログインモードになります。

一般ユーザーでログインします。

$ export LANG=ja_JP.UTF-8

$ startx

GUI が立ち上がりました。

 

 

sar-analyzer の開発状況(20181021)

sar-analyzer ですが、v10.19.0 を出しました。

グラフの vertical notch を修正しました。

いままで、パーセント表示でない項目で、グラフが四角から飛び出たりしてみっともなかったですので、これぐらいのオーダーでいいかな、というところにしました。

また、ldavg についてもグラフを追加しています。

さあ、スシでも食いに行くかな。

github.com

sar-analyzer の開発状況(20181019)

sar-analyzer ですが、v10.18.1 を出しました。

このバージョンでは、グラフを表示する postscript ファイルを圧縮せずにそのままディレクトリに作成することにしました。なんだか、最近、Ghostscript の pdfwrite のバグもあるようなので。

グラフは、CPU all 、 paging 、memory を確認できます。なお、刻みは絶対にしているので、異常な数値があると、飛び出たりして楽しいです。

解析結果の .txt ファイルは、今までどおり出力されます。これを、じっくり眺めていくと、マシンの息遣いが聞こえてくると思いますよ。

標準的なコマンドは、以下のとおりですよ。

 

$ sar-analyzer -D sar_data -ZM

 

github.com

QEMU で raspberry pi をエミュレート(その1)

raspberry pi でサイネージをやってみましたが、もっと機能を追加したいとか、raspberry pi で確認するのが面倒なのでホストマシンで確認したいとか、希望があります。

QEMU でなんとかできないものでしょうか。

qemu をインストールします。

# dnf install qemu

サポートされているマシンタイプを確認します。

$ qemu-system-arm -machine '?'

 以下の結果が表示されました。

Supported machines are:
akita Sharp SL-C1000 (Akita) PDA (PXA270)
ast2500-evb Aspeed AST2500 EVB (ARM1176)
borzoi Sharp SL-C3100 (Borzoi) PDA (PXA270)
canon-a1100 Canon PowerShot A1100 IS
cheetah Palm Tungsten|E aka. Cheetah PDA (OMAP310)
collie Sharp SL-5500 (Collie) PDA (SA-1110)
connex Gumstix Connex (PXA255)
cubieboard cubietech cubieboard
emcraft-sf2 SmartFusion2 SOM kit from Emcraft (M2S010)
highbank Calxeda Highbank (ECX-1000)
imx25-pdk ARM i.MX25 PDK board (ARM926)
integratorcp ARM Integrator/CP (ARM926EJ-S)
kzm ARM KZM Emulation Baseboard (ARM1136)
lm3s6965evb Stellaris LM3S6965EVB
lm3s811evb Stellaris LM3S811EVB
mainstone Mainstone II (PXA27x)
midway Calxeda Midway (ECX-2000)
mps2-an385 ARM MPS2 with AN385 FPGA image for Cortex-M3
mps2-an511 ARM MPS2 with AN511 DesignStart FPGA image for Cortex-M3
musicpal Marvell 88w8618 / MusicPal (ARM926EJ-S)
n800 Nokia N800 tablet aka. RX-34 (OMAP2420)
n810 Nokia N810 tablet aka. RX-44 (OMAP2420)
netduino2 Netduino 2 Machine
none empty machine
nuri Samsung NURI board (Exynos4210)
palmetto-bmc OpenPOWER Palmetto BMC (ARM926EJ-S)
raspi2 Raspberry Pi 2
realview-eb ARM RealView Emulation Baseboard (ARM926EJ-S)
realview-eb-mpcore ARM RealView Emulation Baseboard (ARM11MPCore)
realview-pb-a8 ARM RealView Platform Baseboard for Cortex-A8
realview-pbx-a9 ARM RealView Platform Baseboard Explore for Cortex-A9
romulus-bmc OpenPOWER Romulus BMC (ARM1176)
sabrelite Freescale i.MX6 Quad SABRE Lite Board (Cortex A9)
smdkc210 Samsung SMDKC210 board (Exynos4210)
spitz Sharp SL-C3000 (Spitz) PDA (PXA270)
sx1 Siemens SX1 (OMAP310) V2
sx1-v1 Siemens SX1 (OMAP310) V1
terrier Sharp SL-C3200 (Terrier) PDA (PXA270)
tosa Sharp SL-6000 (Tosa) PDA (PXA255)
verdex Gumstix Verdex (PXA270)
versatileab ARM Versatile/AB (ARM926EJ-S)
versatilepb ARM Versatile/PB (ARM926EJ-S)
vexpress-a15 ARM Versatile Express for Cortex-A15
vexpress-a9 ARM Versatile Express for Cortex-A9
virt-2.10 QEMU 2.10 ARM Virtual Machine
virt QEMU 2.11 ARM Virtual Machine (alias of virt-2.11)
virt-2.11 QEMU 2.11 ARM Virtual Machine
virt-2.6 QEMU 2.6 ARM Virtual Machine
virt-2.7 QEMU 2.7 ARM Virtual Machine
virt-2.8 QEMU 2.8 ARM Virtual Machine
virt-2.9 QEMU 2.9 ARM Virtual Machine
xilinx-zynq-a9 Xilinx Zynq Platform Baseboard for Cortex-A9
z2 Zipit Z2 (PXA27x)

 

raspberry pi で使用する sdcard.img を編集する方法

raspberry pi で使用する sdcard.img の中をいじりたいときがあります。その方法を紹介します。

1. 手動で頑張る方法

普通に、fdisk などで内容を確認します。以下は一例です。

$ fdisk -lu sdcard.img
ディスク sdcard.img: 532 MiB, 557842944 バイト, 1089537 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x00000000

バイス 起動 開始位置 終了位置 セクタ サイズ Id タイプ
sdcard.img1 * 1 65536 65536 32M c W95 FAT32 (LBA)
sdcard.img2 65537 1089536 1024000 500M 83 Linux

cfdisk だと、一見してファイルタイプも表示されるので、一見してわかりやすいでしょう(略)。

スタートセクターを指定してマウントする必要があります。まず、file コマンドで sdcard.img を確認します。

$ file sdcard.img
sdcard.img: DOS/MBR boot sector; partition 1 : ID=0xc, active, start-CHS (0x0,0,2), end-CHS (0x4,20,17), startsector 1, 65536 sectors; partition 2 : ID=0x83, start-CHS (0x4,20,18), end-CHS (0x43,209,15), startsector 65537, 1024000 sectors

 二つのパーティションがありますので、これらをそれぞれ作成したマウントポイントにマウントすれば OK です。こつは、startsector に 512 をかけることです。

上記の表示結果を使用した一例です。

partition 1 を /mnt/sdcard1 にマウントする例です。

 # mount -t vfat -o loop,offset=512 sdcard.img /mnt/sdcard1

 編集後は、umount してください。

# umount /mnt/sdcard1

parttion 2 を /mnt/sdcard2 にマウントする例です。

# mount -t ext4 -o loop,offset=33554944 sdcard.img /mnt/sdcard2

2. kpartx を利用する方法

sdcard.img を /dev/mapper にマップさせます。

# kpartx -av sdcard.img
add map loop0p1 (253:3): 0 65536 linear 7:0 1
add map loop0p2 (253:4): 0 1024000 linear 7:0 65537

/dev/mapper を確認します。

# ll /dev/mapper
合計 0
crw-------. 1 root root 10, 236 10月 9 18:49 control
lrwxrwxrwx. 1 root root 7 10月 9 18:49 fedora-home -> ../dm-2
lrwxrwxrwx. 1 root root 7 10月 9 18:49 fedora-root -> ../dm-0
lrwxrwxrwx. 1 root root 7 10月 9 18:49 fedora-swap -> ../dm-1
lrwxrwxrwx. 1 root root 7 10月 10 07:43 loop0p1 -> ../dm-3
lrwxrwxrwx. 1 root root 7 10月 10 07:43 loop0p2 -> ../dm-4

細部を確認します。

# dmsetup info

Name: loop0p2
State: ACTIVE
Read Ahead: 256
Tables present: LIVE
Open count: 0
Event number: 0
Major, minor: 253, 4
Number of targets: 1
UUID: part2-devnode_7:0_Wh5pYvM

Name: loop0p1
State: ACTIVE
Read Ahead: 256
Tables present: LIVE
Open count: 0
Event number: 0
Major, minor: 253, 3
Number of targets: 1
UUID: part1-devnode_7:0_Wh5pYvM

/dev/mapper/loop0p1 をマウントしてみます。

# mount /dev/mapper/loop0p1 /mnt/sdcard1
# ls /mnt/sdcard1
bcm2709-rpi-2-b.dtb bootcode.bin cmdline.txt config.txt fixup.dat start.elf zImage

(参考)

https://www.raspberrypi.org/forums/viewtopic.php?t=28860

https://qiita.com/spicemanjp/items/1998a3f68cb369651584

sar-analyzer の開発状況(20180930)

sar-analyzer ですが、v10.16.5 を出しました。

このバージョンでは、-Z オプションを使用した時に、それまでの postscript ファイルではなく、pdf ファイルを生成し、tar ball としてディレクトリに保存します。

 

github.com

sar-analyzer で segfault したので、coredump を読んでみた ( is sar-analyzer の開発状況(20180927))

sar-analyzer である sa ディレクトリを読んでいたら、segfault したので、coredump を読もうと思い、2カ月前の自分のブログ記事を参照していたら、coredump が剥かれているはずのディレクトリに coredump を吐いていなくて、なんでやねん、と調べていたら、/var/lib/systemd/coredump に吐いていました。

今は、coredumpctl というコマンドもあるみたいで、うわー、変わったなー、と思いました。

/var/lib/systemd/coredump には、以下のような圧縮ファイルがありました。

# ls -lat | head
合計 272220
drwxr-xr-x. 2 root root 24576 9月 26 23:01 .
-rw-r-----+ 1 root root 107818 9月 26 23:01 core.sar-analyzer.1000.067038917e7c41db8dd0d70eecf6c43f.7835.1537970460000000.lz4
-rw-r-----+ 1 root root 107329 9月 26 22:52 core.sar-analyzer.1000.067038917e7c41db8dd0d70eecf6c43f.7454.1537969945000000.lz4
-rw-r-----+ 1 root root 107142 9月 26 22:49 core.sar-analyzer.1000.067038917e7c41db8dd0d70eecf6c43f.7287.1537969759000000.lz4

 これを読むには、まず、sar-analyzer をデバッグオプション付きで以下のようにビルドしなおします。

# gcc -o sar-analyzer -debug -g main.c common_jp.c line_data.c make_report.c sar_analyzer_jp.c setter_getter.c

segfault を起こす環境でこのバイナリを実行して、segfault を起こさせてみます。

$ ./sar-analyzer-debug -D sar_data -ZM

coredump が出ているディレクトリに移動します。

/var/lib/systemd/coredump

圧縮ファイルを解凍します。

# lz4 -d <lz4ファイル名>

gdbデバッグします。

# gdb ./sar-analyzer core.sar-analyzer.1000.067038917e7c41db8dd0d70eecf6c43f.7835.1537970460000000.lz4

(gdb)bt

ここだよ、と教えてくれました。

あとは、ソースコードデバッグ文字なんかを入れていって、printf とかしていきます。

loop のコードをいい加減に書いていて、ファイル名に空文字が入っていないというバグを見つけました(書いたのは私です)。空文字のファイルをオープンしようとして、segfault になっていました。まず、segfault しなくするには、strlen で文字列を計って、0 以下だったら、エラーとして exit させます。

もちろん、loop のところも適切に直しました。まあ、手を抜いていると、こうなるという見本のようなものですね。

秋だなぁ。。

 

SELinux を頑張る-その8

そういえば、SELinux ユーザーの sutaff_u から、SELinux ロールの unconfined_r  を抜いておくのを忘れないようにしましょう。

# semanage user -m -R "staff_r system_r sysadm_r" staff_u

 確認しましょう。

# semanage user -l

staff_u から、unconfined_r  が抜けてますよね。

SELinux を頑張る-その7

おつかれさまです。

さて、myuser の SELinux ユーザーを staff_u にしましたよね。

$ id -Z

(表示)

staff_u:staff_r:staff_t:s0

然し乍ら、myuser のホームディレクトリのセキュリティコンテキストを確認すると、以下のようになっています。

$ ls -lZ

 (表示)

unconfined_u:object_r:user_home_t:s0

これはよくないと思うので、ラベルを貼り直したいところです。

ラベルを貼り直すのは、restorecon コマンドでおこないますが、既に一般ユーザーは、SELinux ユーザー staff_u にマッピングされており su コマンドが使えなくしてあるので、まだ unconfined_u にマッピングされている root になる必要があります。

# restorecon -Rv /home/myuser

うーん、staff_u にならないようです。

では、/.autorelabel ファイルを作成してから再起動したらどうでしょうか。

注意事項を学んだのですが、この時は、permissive にする必要があります。

うーん、やってみましたが、だめでした。

以下のコマンドで、できました。

# chcon staff_u:object_r:user_home_t:s0 -R /home/myuser

ところで、もう一度やってみたら、permissive にしたら、restorecon でもいけました。

ということは、unconfined モジュールを削除したシステムでは、一般的に restorecon も permissive にせんといかんということなのかな。

SELinux を頑張る-その6

おつかれさまです。

前回、unconfined ポリシを、以下のように削除してみましたよね。

# semodule -d unconfined

ここで、システムのリラベルを実行すると、システム再起動を繰り返す、という問題を発見しました。

# touch /.autorelabel

# shutdown -r now

 SELinuxメーリングリストでアドバイスを求めると、ポリシの話かもしれないし、そうでないかもしれない、一度 permissive にしてからやってみろ、というお話でした。

私は、質問する際に、/.autorelabel ファイルが削除されていないことを見つけていました。

実際に、permissive にし直すと、できました。

permissive のままではよくないので、もう一度 enabled に戻して再起動する必要があります。

もし、実際のシステムで再起動を繰り返す羽目になると大変です。その場合は、レスキューモードにして permissive にしましょう。

 

 

 

 

 

SELinux を頑張る-その5

ちょっと前回は、やりすぎた感があります。

デフォルトの SELinux ユーザーを unconfined_u にする前(ユーザーをロックダウンする前)まで戻りました。

では、root ユーザの SELinux ログイン設定を、unconfined_u に戻しましょう。

# semanage login -m -s unconfined_u root

# semanage login -l

(表示)

ログイン名 SELinux ユーザー MLS/MCS 範囲 サービス名
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0 *

root ユーザーを unconfined_u のままにしつつ、次のことを実行します。
ユーザーを作成した時に、staff_u をデフォルトにしましょう。

# semanage login -m -s staff_u __default__

確認します。

# semanage login -l

(表示)

ログイン名 SELinux ユーザー MLS/MCS 範囲 サービス名
__default__ staff_u s0 *
root unconfined_u s0 *

システム再起動

これで、myuser から su コマンドを発行しても、staff_u SELinux ユーザーは su が許可されていない
ので、root にはなれません。
root になれるのは、root ユーザーが root でログインした時だけです。

つづく。